<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Morten @ home</title>
    <description>The latest articles on DEV Community by Morten @ home (@mor10).</description>
    <link>https://dev.to/mor10</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F247055%2F5bb2af19-7455-40af-9a54-5342a24b7632.jpg</url>
      <title>DEV Community: Morten @ home</title>
      <link>https://dev.to/mor10</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mor10"/>
    <language>en</language>
    <item>
      <title>AI is a Loom: The End and the New Beginning of Web Dev</title>
      <dc:creator>Morten @ home</dc:creator>
      <pubDate>Thu, 28 Sep 2023 20:08:10 +0000</pubDate>
      <link>https://dev.to/mor10/ai-is-a-loom-the-end-and-the-new-beginning-of-web-dev-1dab</link>
      <guid>https://dev.to/mor10/ai-is-a-loom-the-end-and-the-new-beginning-of-web-dev-1dab</guid>
      <description>&lt;p&gt;Web dev as we know it is deprecated. We just haven’t downloaded the latest version yet. What comes next is a metamorphosis, a paradigm shift, a revolution changing how we work, how the web works, and everything we know.&lt;/p&gt;

&lt;p&gt;In March 2023, &lt;a href="https://www.youtube.com/live/outcGtbnMuQ?si=a6rSuVpRwPq7P9hk&amp;amp;t=976" rel="noopener noreferrer"&gt;OpenAI CTO Greg Brockman drew a rough sketch of a website on a livestream&lt;/a&gt;, uploaded it to GPT, and got fully functional HTML, CSS, and JavaScript in return. That feature - dubbed “multimodal GPT” - is shipping to all ChatGPT users in the coming months. Soon you'll be able to open an app, provide some instructions, and have a fully designed and populated website with real content, an ecommerce store, and a social media marketing campaign built in minutes with the help of AI. &lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://www.youtube.com/live/outcGtbnMuQ?si=a6rSuVpRwPq7P9hk&amp;amp;amp;t=976" rel="noopener noreferrer"&gt;
      youtube.com
    &lt;/a&gt;
&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“I’m not saying coding is a dying craft; I’m saying the craft of actually writing code on a keyboard to be input into a coding environment for further processing will become a narrow specialty. Most people who write code today will not be writing code in the near future. Many of them don’t need to and shouldn’t have to write code today! Writing code instructing computers to do things when we have software that writes better code for us makes no sense, and this whole notion of everyone learning how to code feels more and more like telling highschool students their future employment hinges on their ability to master T9 texting.”&lt;/em&gt;—Me, in an email dated November 2021&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Web development stands on the precipice of an AI-driven metamorphosis. In front of us, the demarcation line between two paradigms: The old world of human-written code aided by machines, and the new world of AI-generated code aided by humans. &lt;/p&gt;

&lt;h2&gt;
  
  
  For the web, AI is the Jacquard loom.
&lt;/h2&gt;

&lt;p&gt;For most developers, this means transitioning from writing and debugging code to directing AI what to build and checking its work. AI represents a &lt;a href="https://en.wikipedia.org/wiki/Jacquard_machine" rel="noopener noreferrer"&gt;Jacquard loom&lt;/a&gt; moment for web development, transitioning our work from hand-coding the fabric of the web to using that fabric as material for building new experiences.&lt;/p&gt;

&lt;p&gt;The implications are enormous, not just for our work but the web's future. As AI becomes part of our practice, our role shifts from writing standards-based, accessible, progressively-enhanced code to ensuring AIs use the latest, most advanced standards to build the future. If we don’t embrace this new role, progress will stall as AI biases established standards and ignores new tools and best practices.&lt;/p&gt;

&lt;p&gt;Here's what I see:&lt;/p&gt;

&lt;p&gt;Very soon the public will access AI services that create websites in minutes from prompts, sketches and assets. &lt;a href="https://www.wix.com/blog/wix-artificial-design-intelligence" rel="noopener noreferrer"&gt;Wix teased this&lt;/a&gt;, and competitors aren't far behind.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/-72sIsC1qTU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;I'd be shocked if Canva and Figma don't unveil full "draw it, AI builds it" services by year's end. Soon there will be ChatGPT plugins that build websites for you from scratch. This is inevitable.&lt;/p&gt;

&lt;p&gt;When I say this out loud, the immediate response is usually some version of "AI can't write good code" or "AI doesn't understand users" or "AI makes constant mistakes." All true, and all irrelevant. This isn't about AI writing code or autocorrecting our code. AI will instead use the well-documented and well-established frameworks, templates, build processes, and automation we’ve created to make our work easier to weave together the websites and apps we ask for.&lt;br&gt;
For walled gardens like Wix, this is straightforward: their back-ends, systems, and design languages allow AI to rapidly wire sites to user specifications. And that's just the start. We'll soon see new semi-agentive tools supporting various stacks, so you (with the help of an AI) can select frameworks, design systems, ecommerce platforms, etc. based on project needs without writing or knowing how to write code.&lt;/p&gt;

&lt;p&gt;Look at what &lt;a href="https://velocity.builder.io/" rel="noopener noreferrer"&gt;Builder&lt;/a&gt; is doing, and then add an agentive AI on top and you start getting the idea:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/yTx4W7z9T3c"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  What People Want, What Automation Provides
&lt;/h2&gt;

&lt;p&gt;Two massive waves of progress are converging:&lt;br&gt;
Developers have spent a decade building automation tools, frameworks, and systems to improve dev experience. You can now spin up a Next.js site in GitHub Codespaces in minutes without writing a single line of code. Component-based frameworks provide code consistency and add LEGO-like block assembly to web development. Design systems, component libraries, style guides, and tokens enable rapid prototyping and consistent UX/UI. Linting, optimization, accessibility, testing, CI/CD are largely automated. Bridging layout and code is reality. Often, we just connect these pieces. AI serves well as an automated and intelligent loom weaving these pieces together into workable materials.&lt;/p&gt;

&lt;p&gt;On the user side, people want friction-free, no-maintenance, always-on experiences. Faced with the choice between the DIY bazaar of the open web and the shiny mall of app-based walled gardens, they pick the moving sidewalk of least resistance. And they are willing to pay for that convenience; with money and by giving up their data and privacy to surveillance capitalism. Where publishing on the web used to mean standing up a WordPress site (or paying someone else to do it), today bloggers, creators, influencers, and small businesses opt for TikTok, Instagram, YouTube, Medium, Substack, Shopify, and Linktree. &lt;/p&gt;

&lt;p&gt;&lt;a href="//anildash.com/2012/12/13/the_web_we_lost/"&gt;The web we lost&lt;/a&gt; is a bygone web a larger and larger portion of the public never experienced, and concepts like self-hosting seem archaic and inefficient to the masses. Counterintuitively AI may help bridge this gap and reignite the interest in carving out your own space on the web by lowering the barriers to entry down to describing what you want and watching it manifest.&lt;/p&gt;

&lt;p&gt;What is pushed down as these waves converge and elevate the capabilities of the web-using public is the need for traditional developers. When the options are either an AI site from Wix built from a prompt in minutes or a complex and expensive custom build that takes months to complete, there's no choice for most people and businesses. When the Jacquard machine automated weaving, hand-woven textiles transitioned from an essential commodity to a luxury art form, and the expertise of manual weaving morphed from a commodity skill into an artistic pursuit. Weavers still exist, and bespoke fabrics are still made, but the vast majority of textile products were made by machines guided by humans who spent their time designing the products instead of making the materials. That’s what comes next for the web.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Creates Opportunity Space
&lt;/h2&gt;

&lt;p&gt;This may sound like AI replacing humans. It's not. Instead it’s a fundamental shift and refocusing of the role of the developer: From writing code to auditing AI-written code. From knowing how to wire together different frameworks to architecting the system that serves up the website. From fighting with CSS to fine-tuning AI-powered user experiences. &lt;br&gt;
The people currently working as coders will take a step up the ladder to focus on higher-order capabilities, using their expertise in languages and frameworks to help AIs produce the best output instead of doing the grunt work of writing the code. &lt;/p&gt;

&lt;p&gt;Web dev as we know it is dead. What comes next is a metamorphosis, a paradigm shift, a revolution changing everything we know.&lt;/p&gt;

&lt;p&gt;Our new human focus as we move into this future together is to ease the persistent tensions found in the intersection between technology and humanity. AI can't conduct UX research, design novel experiences, innovate standards and best practices. That was always and will remain our territory. As AI takes over the work of weaving the fabric of the web, we do the work of making new things with those materials while improving their quality and inventing new ones.&lt;/p&gt;

&lt;p&gt;In the short term, we'll become AI managers - customizing, configuring, ensuring user flows and information architectures make sense, monitoring the generated code to ensure the latest standards are in use, and counteracting the inherent bias of AI to repeat prevalent patterns even when they are outdated. We'll shift from writing code to deciding what the code should accomplish. To do that, we must all become experts at the bleeding edge of code, and invest our time in innovating new standards, patterns, and frameworks for the AIs to use. It’s a whole different job needing a whole new version of the skills we’ve always had.&lt;/p&gt;

&lt;p&gt;This transformation is happening now. For consumers and SMBs, it will be lightning fast. For institutions and large enterprises it will be slower, hindered by legacy systems, institutional inertia, and resistance to change. But it's coming.&lt;/p&gt;

&lt;p&gt;For web workers, it is no longer enough to know the core languages and established best practices. UX, interaction design, accessibility, and innovation is our new bread and butter, built on a strong foundation of modern web standards and bleeding edge HTML, CSS, JavaScript.&lt;/p&gt;

&lt;p&gt;The future of the web belongs to those who strategically apply AI to meet user needs. With proper guidance, AI can supercharge our work, provided we put ethics, accessibility, user experience, and innovation front and center.&lt;/p&gt;

&lt;p&gt;We build the future with every decision we make. How we decide to work with AI decides what future we get to live in.&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;Cross-posted to &lt;a href="https://mor10.com/ai-is-a-loom/" rel="noopener noreferrer"&gt;mor10.com&lt;/a&gt; and &lt;a href="https://www.linkedin.com/pulse/ai-loom-end-new-beginning-web-dev-morten-rand-hendriksen-smy7c/?published=t" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>CSS Grid Magic: A practical card example</title>
      <dc:creator>Morten @ home</dc:creator>
      <pubDate>Fri, 28 May 2021 18:02:27 +0000</pubDate>
      <link>https://dev.to/mor10/css-grid-magic-a-practical-card-example-1ke9</link>
      <guid>https://dev.to/mor10/css-grid-magic-a-practical-card-example-1ke9</guid>
      <description>&lt;p&gt;This example is from my talk at &lt;a href="https://aneventapart.com/event/spring-summit-2021#s26775" rel="noopener noreferrer"&gt;An Event Apart Spring Summit&lt;/a&gt; where I discussed modern CSS layout modules and how to incorporate them into our practices and workflows. &lt;/p&gt;

&lt;h1&gt;
  
  
  A Card
&lt;/h1&gt;

&lt;p&gt;A graphic very similar to this one popped up in a CSS forum I follow, along with a question: How do I make this layout using CSS?&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fldevrh5328rsatlpj66i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fldevrh5328rsatlpj66i.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
The standard answer to this is to add some extra nesting &lt;code&gt;&amp;lt;​div&amp;gt;&lt;/code&gt;s and use various layout hacks like negative margins, positioning, etc.&lt;/p&gt;

&lt;p&gt;When I see examples like this, my first questions are always the same:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What is the simplest HTML representation of this content? Can I make this design happen using pure CSS without modifying the HTML?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is the goal of web development after all: The complete separation of content (HTML) from its presentation (CSS).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://codepen.io/mor10/pen/oNBdamz" rel="noopener noreferrer"&gt;Go to Codepen to see the complete live example.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Looking at the design, there is an image, and some text. One way of representing this in HTML is using a &lt;code&gt;&amp;lt;​figure&amp;gt;&lt;/code&gt; wrapped around an &lt;code&gt;&amp;lt;​img&amp;gt;&lt;/code&gt; and a &lt;code&gt;&amp;lt;​figcaption&amp;gt;&lt;/code&gt;. Here’s what that looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​&lt;/span&gt;&lt;span class="na"&gt;figure&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt;&lt;span class="err"&gt;​&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​&lt;/span&gt;&lt;span class="na"&gt;img&lt;/span&gt; &lt;span class="na"&gt;src​=&lt;/span&gt;&lt;span class="s"&gt;"…"&lt;/span&gt;&lt;span class="err"&gt;​&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"640"&lt;/span&gt;&lt;span class="err"&gt;​&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"640"&lt;/span&gt;&lt;span class="err"&gt;​&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"​"&lt;/span&gt;&lt;span class="err"&gt;​&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​&lt;/span&gt;&lt;span class="na"&gt;figcaption&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​&lt;/span&gt;&lt;span class="na"&gt;blockquote&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;We shape our tools (…)&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​/&lt;/span&gt;&lt;span class="na"&gt;blockquote&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​&lt;/span&gt;&lt;span class="na"&gt;cite&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Attributed to Winston Churchill, Marshall McLuhan(…)&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​/&lt;/span&gt;&lt;span class="na"&gt;cite&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​&lt;/span&gt;&lt;span class="na"&gt;p&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​&lt;/span&gt;&lt;span class="na"&gt;strong&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Caju Gomes&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​/&lt;/span&gt;&lt;span class="na"&gt;strong&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;, &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​&lt;/span&gt;&lt;span class="na"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href​=&lt;/span&gt;&lt;span class="s"&gt;"…"&lt;/span&gt;&lt;span class="err"&gt;​&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Unsplash&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​/&lt;/span&gt;&lt;span class="na"&gt;a&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​/&lt;/span&gt;&lt;span class="na"&gt;p&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​/&lt;/span&gt;&lt;span class="na"&gt;figcaption&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​/&lt;/span&gt;&lt;span class="na"&gt;figure&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That solves the content part. Now for the presentation.&lt;/p&gt;

&lt;h1&gt;
  
  
  Layered layouts
&lt;/h1&gt;

&lt;p&gt;The real challenge in this design is the many layers. There’s a faux shadow, then the card itself which serves as a background image. Then there is the image, the text which overlaps the image, and the image credit. &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fosrvduca23p5h611gb84.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fosrvduca23p5h611gb84.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Stacking elements one on top of the other using CSS is traditionally achieved through clever hacks using either positioning, negative margins, or both. However, CSS grid allows us to place any child element of the grid anywhere on the grid, including in the same cell or cells as other elements. So if we need to stack elements on top of one another like in this design, CSS grid lets us do that in a clean and controlled way.&lt;/p&gt;

&lt;p&gt;The first step is to figure out what the grid should look like:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgvcw5wp3tdgulnqnpse4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgvcw5wp3tdgulnqnpse4.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Next, mark up that grid in CSS. The &lt;code&gt;&amp;lt;​figure&amp;gt;&lt;/code&gt; becomes the grid parent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;figure&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;grid-template-columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3em&lt;/span&gt; &lt;span class="m"&gt;9em&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt; &lt;span class="m"&gt;6em&lt;/span&gt; &lt;span class="m"&gt;3em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;grid-template-rows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3em&lt;/span&gt; &lt;span class="m"&gt;9em&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt; &lt;span class="m"&gt;6em&lt;/span&gt; &lt;span class="m"&gt;3em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With the grid defined, place items on that grid. There are many ways of doing this, the easiest of which is to just position the times based on the grid line numbers. First the image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;grid-column&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;grid-row&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then the text which sits inside the &lt;code&gt;figcaption&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;figcaption&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;grid-column&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;grid-row&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This puts the text in the correct general area of the grid, and on top of the image, but the design calls for more control over the exact placement of the text.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbhaj9fpaumdh8rzv1i0p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbhaj9fpaumdh8rzv1i0p.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
To achieve this, add a second grid for the &lt;code&gt;&amp;lt;​figcaption&amp;gt;&lt;/code&gt; element and position the items within on that grid:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk2xhnojc98nu8lzex8hl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk2xhnojc98nu8lzex8hl.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;figcaption&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;grid-column&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;grid-row&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;grid-template-columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That gives us the image and the text, but the design also calls for a background image and a faux shadow. What to do...&lt;/p&gt;

&lt;h1&gt;
  
  
  Pseudo elements as grid elements.
&lt;/h1&gt;

&lt;p&gt;An interesting of both grid and flex is &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements" rel="noopener noreferrer"&gt;pseudo elements&lt;/a&gt; become first-level children of these containers. That means if you create a grid container around a single item and then define &lt;code&gt;::before&lt;/code&gt; and &lt;code&gt;::after&lt;/code&gt; pseudo elements for that item, the grid now has three grid items: the element itself and its before and after pseudo-elements, and each will be placed in its own grid cell. This opens up an interesting new possibilities, one of which can be used to solve the current layout problem.&lt;/p&gt;

&lt;p&gt;The design calls for both a background image and a faux shadow.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk4ffqqe85m0an7z3qm7v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk4ffqqe85m0an7z3qm7v.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Using pseudo elements both of these can be added in a non-destructive way that will gracefully degrade to older browsers without grid support.&lt;/p&gt;

&lt;p&gt;The background image first. For this I’ll use &lt;code&gt;::before&lt;/code&gt; because it should appear before the actual card content in the DOM order. Place the new (pseudo) grid item on the existing grid, and then fill it with a background image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;figure&lt;/span&gt;&lt;span class="nd"&gt;::before&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;grid-column&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;grid-row&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;"​"&lt;/span&gt;&lt;span class="err"&gt;​&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sx"&gt;url(…)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cover&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, the faux shadow. I’ll have to use &lt;code&gt;::after&lt;/code&gt; for this, which technically places the shadow &lt;em&gt;after&lt;/em&gt; the card in the DOM order and therefore ends up &lt;em&gt;on top of&lt;/em&gt; the card.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;figure&lt;/span&gt;&lt;span class="nd"&gt;::after&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;grid-column&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;grid-row&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
  &lt;span class="nl"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;"​"&lt;/span&gt;&lt;span class="err"&gt;​&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#e0dde4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s easily solved by moving the item along the z-axis using &lt;code&gt;z-index&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;figure&lt;/span&gt;&lt;span class="nd"&gt;::after&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;grid-column&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;grid-row&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;z-index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  
  &lt;span class="nl"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;"​"&lt;/span&gt;&lt;span class="err"&gt;​&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#e0dde4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This last part is another important feature of CSS grid. Because grid allows us to stack things on top of each other, we are effectively working in the 3rd dimension; literally layering content on top of content like a stack of cards. This layering is done based on DOM order, so the last item ends up on top of the stack. We can use the &lt;code&gt;z-index&lt;/code&gt; property to change this order to whatever we want. In other words, with Grid we are now for the first time able to lay out content along three axes: horizontal, vertical, and &lt;em&gt;depth&lt;/em&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Backwards compatibility
&lt;/h1&gt;

&lt;p&gt;At this point there’s a good chance you’re thinking something along the lines of “Sure, this is cool, but grid doesn’t work in older browsers, so you need to provide fallback options.”&lt;/p&gt;

&lt;p&gt;Surprisingly, the answer is no.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This setup doesn’t require any accommodations for older browsers!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can test it for yourself. &lt;a href="https://codepen.io/mor10/pen/oNBdamz" rel="noopener noreferrer"&gt;Open the example in your favorite browser&lt;/a&gt;, go to the developer tools, and disable the two instances of &lt;code&gt;display:grid&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsh9ofoen7p4nsyf2ec84.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsh9ofoen7p4nsyf2ec84.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
What you get is the main image followed by the text. The faux shadow and background image disappear as if by magic, and the visitor gets only the content they are looking for, styled in a way that makes sense in their environment.&lt;/p&gt;

&lt;p&gt;The “magic” at play here is basic progressive enhancement: Take advantage of whatever capabilities the current browser has without reducing the experience for those without those capabilities. &lt;/p&gt;

&lt;p&gt;Of course we could use &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@supports" rel="noopener noreferrer"&gt;&lt;code&gt;@supports&lt;/code&gt;&lt;/a&gt; to detect grid support and build out custom styles for browsers without grid support. If I published this on a real website, I would wrap the &lt;code&gt;::before&lt;/code&gt; and &lt;code&gt;::after&lt;/code&gt; rules using &lt;code&gt;@supports&lt;/code&gt; to prevent older browsers from downloading the background image. But, as you see this is not necessary unless you want to add specific fallback styles.&lt;/p&gt;

&lt;p&gt;The standard argument against this approach is that the result of doing nothing will be different users having different experiences. From my perspective, that's an argument with little substance: We have used responsive web design since 2010, so for the past 10+ years we've been shipping websites that look different on different screens. This is no different, except the responsive axes have been expanded to include not only viewport width and height but also browser capability.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp69ve1z4kuixbacnst9z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp69ve1z4kuixbacnst9z.png" alt="Websites should provide the same information exchange and functional experience for all people."&gt;&lt;/a&gt;&lt;br&gt;
At the very onset of this project I defined semantic HTML, and I said I didn’t want to make any changes to the HTML to accommodate the style. Thus every browser will get semantic parsable content that makes sense. Then I use CSS to progressively enhance the experience when grid is available in the visiting browser.&lt;/p&gt;

&lt;p&gt;So what happens to that faux shadow and background image? Inspect your code and you’ll see when grid is disabled, they each collapse to a height of &lt;code&gt;0px&lt;/code&gt;. Normally when we add pseudo elements using &lt;code&gt;::before&lt;/code&gt; and &lt;code&gt;::after&lt;/code&gt; we set their width and height which would result in them showing up when grid is not present, but since I’m using grid, that’s not necessary: Given no instructions, grid’s default treatment of grid items is to stretch them to fit the cell they are presented in. As a result, the faux shadow and background image automatically stretch to fill the grid cells, and collapse to a height of 0 when no grid is present.&lt;/p&gt;

&lt;h1&gt;
  
  
  CSS layouts are now a platform feature
&lt;/h1&gt;

&lt;p&gt;For as long as I can remember, CSS layouts were always a collection of carefully crafted hacks. That time is now over. Between &lt;code&gt;grid&lt;/code&gt;, &lt;code&gt;flex&lt;/code&gt;, &lt;code&gt;float&lt;/code&gt;, &lt;code&gt;multicol&lt;/code&gt;, and &lt;code&gt;table&lt;/code&gt;, we have all the layout features we need built into the platform to make the layouts we want without having to modify our markup or employ clever hacks. Now it's our job to realign our way of thinking about layouts to use these modules in our daily practice. I built this example to give you a brief glimpse of what is possible and how these new modules open doors we didn't even know existed before. I invite you to join me as we explore this new future of CSS layouts together.&lt;/p&gt;

&lt;p&gt;For more examples, and talks from many of the leading voices of our industry, head on over to An Event Apart and sign up for the &lt;a href="https://aneventapart.com/event/spring-summit-2021" rel="noopener noreferrer"&gt;2021 Spring Summit&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/pulse/css-grid-magic-practical-card-example-from-my-event-rand-hendriksen/" rel="noopener noreferrer"&gt;Originally published on LinkedIn&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>css</category>
      <category>html</category>
      <category>frontend</category>
    </item>
    <item>
      <title>The Internet is an Essential Service.</title>
      <dc:creator>Morten @ home</dc:creator>
      <pubDate>Fri, 24 Apr 2020 17:24:05 +0000</pubDate>
      <link>https://dev.to/mor10/the-internet-is-an-essential-service-2m9e</link>
      <guid>https://dev.to/mor10/the-internet-is-an-essential-service-2m9e</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;“You can consult canada.ca/coronavirus to get the best updated information about the spread of the virus.” – Justin Trudeau, &lt;a href="https://www.macleans.ca/news/canada/trudeaus-daily-coronavirus-update-reach-out-to-your-local-food-bank-full-transcript/"&gt;April 3rd, 2020&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A daily mantra rings out from government officials around the world: The call to visit official websites to get the latest information on the COVID-19 pandemic and to access essential services. Yet to many constituents, accessing the internet is not an option, because internet access is still considered a luxury available only to those who can afford it. This has to change.&lt;/p&gt;

&lt;p&gt;Over the past two months, everything from education to work to ordering and delivery of essential goods to basic communication has moved online. COVID-19 has made one thing very clear: Internet access is a necessary condition for the ongoing functioning of our society, and every person should have access to fast, reliable, and unfiltered internet at a price they can afford. &lt;/p&gt;

&lt;p&gt;The internet is an essential service. It is time we take political action to ensure every person has access to it.&lt;/p&gt;

&lt;h1&gt;
  
  
  The privilege of access
&lt;/h1&gt;

&lt;p&gt;Late last year, a video surfaced on social media showing &lt;a href="https://www.news18.com/news/buzz/employee-lets-10-year-old-boy-finish-his-homework-on-electronic-shops-tablet-2389305.html"&gt;a 10-year-old boy doing his homework on a display tablet in an electronics shop&lt;/a&gt;. The description read “Humanity at its best...❤️ This child doesn’t have internet access at home, so a store in the shopping mall allows him to use their tablet to do homework.”  &lt;/p&gt;

&lt;p&gt;For many, this was their first introduction to what’s been labeled the “&lt;a href="https://www.nbcnews.com/news/us-news/homework-gap-shows-millions-students-lack-home-internet-n1015716"&gt;Homework Gap&lt;/a&gt;,” a sub-segment of the &lt;a href="https://en.wikipedia.org/wiki/Digital_divide"&gt;Digital Divide&lt;/a&gt;. Millions of students around the world do not have access to the internet and are therefore not able to access the full educational resources made available to them. &lt;/p&gt;

&lt;p&gt;Flash forward a few months to today, and that electronics shop is closed, as is the school, the library, the coffee shop, and any other place that 10-year-old boy relied on to access essential online services. And he is joined by millions of others, young and old, in cities and in rural areas, all over the world, at home, without the ability to access the websites their elected representatives so urgently point them to.&lt;/p&gt;

&lt;h1&gt;
  
  
  Inequity is the norm
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://www.weforum.org/agenda/2020/04/coronavirus-covid-19-pandemic-digital-divide-internet-data-broadband-mobbile/"&gt;Almost half the world’s population has no access to the internet&lt;/a&gt;. At all. Those most affected are, as seems to be the case for most things, women, the poor, and the disenfranchised. Why? Because internet access is considered a luxury, and its availability is contingent on large media companies deeming your particular region of the world worthy of investment, and &lt;a href="https://www.cnet.com/news/expensive-broadband-is-pricing-millions-out-of-accessing-the-internet/"&gt;your ability to pay often excessive fees&lt;/a&gt; to get access to it. Somehow, in our relentless pursuit of faster connections and devices giving access to vital (and entertaining) online services, we have glossed over this inequity. COVID-19 took a steel brush to that veneer, forcing upon us the reality of how vital a fast, stable, and unfiltered internet connection has become to our lives. We have gone from tweeting about how nice that store was for letting that kid do his homework on a display device to realizing our home internet is our lifeline to information, income, connection, and entertainment. The internet has become essential to our lives, yet we treat it as a privilege afforded those fortunate enough to live where a connection can be established and wealthy enough to pay the excessive fees for access.&lt;/p&gt;

&lt;h1&gt;
  
  
  A public good
&lt;/h1&gt;

&lt;p&gt;Late last year, a boy in an electronics store caught the attention of the internet and people started talking about providing proper equipment and connections to students. When COVID-19 hit and school children were sent home and told to attend classes online, school districts booted up ad-hoc solutions like &lt;a href="https://thehill.com/opinion/education/490174-how-parking-a-wireless-school-bus-can-help-all-students-get-back-to-school"&gt;parking digitally equipped buses at community sites to provide access for students&lt;/a&gt;. That’s a dollar-store band-aid on a gaping 20-year-old wound.&lt;/p&gt;

&lt;p&gt;The digital divide causes hardship to millions of people by depriving them of essential access to the internet. COVID-19 did not create this problem – it merely made it impossible to ignore. Banks, government services, education, shopping, news and information, much of what we consider necessary conditions for functioning in modern society had already migrated online prior to COVID-19. Today the internet has become the only means of access to many of these services. It can no longer be considered a luxury, and its availability can no longer be contingent on the whims and profits of large media corporations. That’s why the &lt;a href="https://webfoundation.org/about/"&gt;World Wide Web Foundation&lt;/a&gt; is working to label the open web a public good, and that’s why you and me and everyone else need to demand political action to make the internet available to all.&lt;/p&gt;

&lt;p&gt;Let’s not beat around the bush any longer: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The internet is an essential service. As such, any limitation of access to a person or group based on their physical location, income level, or any other reason is effectively an act of discrimination.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To the elected representatives of the world I say this: Declare the internet an essential service. Guarantee equitable access to fast, reliable, and unfiltered internet for all. Put plans in place today to connect the world in a way that promotes human flourishing over corporate profits.&lt;/p&gt;

&lt;p&gt;To the media corporations who have grown fat and complacent on profits from connecting people to the things they need I say this: You’ve had your fare share and more. You succeeded in making the internet an essential service. Now you must act like it: Do your civic duty and share that wealth with the world by building solutions that put human connection above shareholder profits.&lt;/p&gt;

&lt;p&gt;We have awoken into a new and unfamiliar world where we all feel a bit more vulnerable. It is in times like these we find solace in solidarity with other people and with ourselves. Let’s do this small thing together to better the world for everyone.&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.flickr.com/photos/dullhunk/9730894552"&gt;Header photo by dullhunk. CC BY 2.0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cross-posted on &lt;a href="https://www.linkedin.com/pulse/internet-essential-service-morten-rand-hendriksen/"&gt;LinkedIn&lt;/a&gt; and &lt;a href="https://mor10.com/the-internet-is-an-essential-service/"&gt;mor10.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>internet</category>
      <category>web</category>
      <category>freedom</category>
    </item>
    <item>
      <title>Value Neutrality and the Ethics of Open Source</title>
      <dc:creator>Morten @ home</dc:creator>
      <pubDate>Wed, 11 Mar 2020 18:42:32 +0000</pubDate>
      <link>https://dev.to/mor10/value-neutrality-and-the-ethics-of-open-source-1856</link>
      <guid>https://dev.to/mor10/value-neutrality-and-the-ethics-of-open-source-1856</guid>
      <description>&lt;p&gt;2019 was the year of the “ethical source” licenses – or ‘open source with a moral clause’ licenses. It was also the year many in the open source movement labeled any attempt at adding moral clauses to open source licenses not only made them &lt;em&gt;not open source licenses&lt;/em&gt;, but were a dangerous attack on the core principles of open source.&lt;/p&gt;

&lt;p&gt;The Ethical Source movement, exemplified by &lt;a href="https://firstdonoharm.dev/"&gt;the Hippocratic License&lt;/a&gt;, the &lt;a href="https://github.com/kattgu7/Anti-996-License"&gt;Anti 996 license&lt;/a&gt; etc, has created a deep rift in the open source community; between those who aim to protect the core values of open source ideology as defined by the &lt;a href="https://www.gnu.org/philosophy/free-sw.en.html"&gt;Four Freedoms&lt;/a&gt;, and those who believe granting open source creators the capability to impose moral clauses on the use of their software is essential to ensure software is not used for evil. &lt;/p&gt;

&lt;p&gt;The rift has opened because adding moral clauses to a license is effectively limiting the use of whatever the license is applied to, which stands against the core idea of open source as absolute freedom for the end-user.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tenuous Position of Value Neutrality
&lt;/h2&gt;

&lt;p&gt;From my perspective this rift exposes what I’ve long felt is a central flaw in both open source licensing and open source ideology: The Four Freedoms concern themselves only with &lt;em&gt;software freedom&lt;/em&gt; – as in the freedom of the software itself – but are in reality imposing value neutrality on whatever is licensed under them: The Four Freedoms protect the &lt;em&gt;freedom of the software itself&lt;/em&gt;, and do not concern themselves with what the software does or how it is used. As an ideological platform, they are too narrowly scoped to hold the weight of our societal responsibilities as the designers and builders of modern reality.&lt;/p&gt;

&lt;p&gt;Let me explain:&lt;/p&gt;

&lt;p&gt;If evil people use open source software to do evil things, there is nothing the creator can do about it. Because doing something about it would be limiting the freedom of the software which goes against open source ideology.  And in the view of many open source ideologues, it would be morally wrong for a creator to do anything about it because limiting the use, modification, and distribution of software is &lt;em&gt;in itself&lt;/em&gt; morally wrong. &lt;/p&gt;

&lt;p&gt;This ideological view stems from the original &lt;a href="https://www.gnu.org/gnu/manifesto.en.html"&gt;GNU Manifesto&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“‘Control over the use of one’s ideas’ really constitutes control over other people’s lives; and it is usually used to make their lives more difficult.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“When there is a deliberate choice to restrict, the harmful consequences are deliberate destruction.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These quotes capture two central ideas of the GNU Manifesto, one I think most of us agree with, another I think most of us take issue with:&lt;/p&gt;

&lt;p&gt;The first idea is that creating something and releasing it into the world changes the lives of ourselves and of others. That is what we design and build software, and that is why being a creator means taking on a moral responsibility for how we change the world.&lt;/p&gt;

&lt;p&gt;The second idea is that imposing any restrictions on anything is inherently harmful. This is neither true nor how the world works. Though restrictions &lt;em&gt;can&lt;/em&gt; be harmful, they are mostly introduced to &lt;em&gt;prevent&lt;/em&gt; harm. The restriction on how loud your headphones can be or the permitted level of toxins in food-safe plastics are in place to &lt;em&gt;prevent&lt;/em&gt; harm, and removing the restrictions could in itself be harmful.&lt;/p&gt;

&lt;p&gt;I think it is in the tension between these two ideas – creation as a moral act and restriction as a moral wrong – we find both the current dilemma of open source and morality &lt;em&gt;and&lt;/em&gt; a potential path forward.&lt;/p&gt;

&lt;h2&gt;
  
  
  The weight of responsibility
&lt;/h2&gt;

&lt;p&gt;When I publish anything under an open source license, be that GPL or MIT or any other &lt;a href="https://opensource.org/licenses"&gt;license ratified by the Open Source Initiative (OSI)&lt;/a&gt;, it takes on a life of its own. It can be used and modified and distributed by anyone for any reason, with or without my involvement, but I cannot restrict it. That’s the whole point of open source ideology.&lt;/p&gt;

&lt;p&gt;The problem is this effectively abdicates me of responsibility for my own creations: By releasing software with an open source license I relinquish control over who uses my software or what it is used for. Thus I cannot be held responsible for the software or its consequences. And if I can’t be held responsible there is no incentive for me to make sure my software, when used or modified or distributed by others, doesn’t cause harm or can be used to cause harm.&lt;/p&gt;

&lt;p&gt;This is what I mean when I say open source licenses imply value neutrality. And it is here I think the Ethical Licensing movement found its root.&lt;/p&gt;

&lt;p&gt;From this perspective one can argue closed source (proprietary) licenses hold the moral high ground over open source licenses because &lt;em&gt;closed source licenses imply responsibility&lt;/em&gt;: If a company knowingly releases software that can be used for harm, they can be held liable because they are the only moral actor capable of modifying and distributing the software.&lt;/p&gt;

&lt;h2&gt;
  
  
  Moral clauses to the rescue?
&lt;/h2&gt;

&lt;p&gt;The big question then is if adding moral clauses to open source licenses can help solve this problem. As much as I hate to say it, I think the answer is no, for two reasons:&lt;/p&gt;

&lt;p&gt;First, like the &lt;a href="https://en.wikipedia.org/wiki/Hippocratic_Oath"&gt;Hippocratic Oath&lt;/a&gt; in medicine, breaking a moral clause in an open source license does not have any consequences. Doctors swear to uphold the code of ethics defined by the Hippocratic Oath, but if they cause harm their actions are judged through the legal framework of medical malpractice. A “do no harm” clause in an open source license carries moral weight, but without enforceable consequences and mechanisms to appeal a judgement of harm being caused, it has no teeth. &lt;/p&gt;

&lt;p&gt;Second, applying moral clauses to a license does not solve the problem of value neutrality because it is a problem of &lt;em&gt;ideology&lt;/em&gt;, and the license is merely a manifestation of that ideology. &lt;/p&gt;

&lt;p&gt;If we want to go down the path of the Hippocratic Oath, we need a Code of Ethics for Open Source and a framework for enforcement and adjudication of breach of those ethics. That’s a huge undertaking, and not one I see bearing fruit any time soon.&lt;/p&gt;

&lt;h2&gt;
  
  
  Toward a New Ethos of Open Source
&lt;/h2&gt;

&lt;p&gt;If we want to take on the issue of ethics in open source on a shorter timeline, we need to take a hard look at the ethos, the core ideals, of open source ideology and ask some tough questions about where the ideology comes from and whether that picture of the world meshes with our lived reality. Open source aims to grant everyone the capability to use, modify, and distribute software. That does not mean open source ideology cannot also embrace the moral and societal responsibilities of the creator, the user, and even the creation itself. To get there we need to broaden our ideological platform, consider what “freedom” means in our current context, and work together to figure out how the Four Freedoms can become part of &lt;a href="https://www.un.org/en/universal-declaration-human-rights/"&gt;the larger spectrum of rights and freedoms afforded to us&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mor10.com/ethics-open-source/"&gt;Originally published on mor10.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ethics</category>
    </item>
    <item>
      <title>ASPIRE: An Acronym for Better Web Practice</title>
      <dc:creator>Morten @ home</dc:creator>
      <pubDate>Thu, 17 Oct 2019 17:24:08 +0000</pubDate>
      <link>https://dev.to/mor10/aspire-an-acronym-for-better-web-practice-427k</link>
      <guid>https://dev.to/mor10/aspire-an-acronym-for-better-web-practice-427k</guid>
      <description>&lt;p&gt;Sometimes interesting things happen on Twitter. A short time ago, &lt;a href="https://twitter.com/scottjehl/status/1180518993351843840"&gt;Scott Jehl proposed ASPIRE&lt;/a&gt; as an acronym for the practices we should follow as web designers and developers. From the &lt;a href="https://www.filamentgroup.com/lab/aspire/"&gt;resulting blog post&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;Great websites should aspire to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Accessible&lt;/strong&gt; to folks with varying cognitive and physical abilities and disabilities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secure&lt;/strong&gt; and reliable for storing, manipulating, and transferring information&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performant&lt;/strong&gt; on average devices and in constrained or unreliable network conditions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inclusive&lt;/strong&gt; to diverse audiences and produced by diverse teams to create better experiences&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Responsive&lt;/strong&gt; in adapting the user interface contextually to any screen&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ethical&lt;/strong&gt; in how users’ preferences and data are handled
I'm interested in the last one: E for Ethical.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What constitutes "ethical" web practice?
&lt;/h2&gt;

&lt;p&gt;While we have pretty well established standards and practices for the first five; &lt;a href="https://en.wikipedia.org/wiki/Web_Content_Accessibility_Guidelines"&gt;Accessible&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Learn/Server-side/First_steps/Website_security"&gt;Secure&lt;/a&gt;, &lt;a href="https://developers.google.com/web/fundamentals/performance/why-performance-matters"&gt;Performant&lt;/a&gt;, &lt;a href="https://www.microsoft.com/design/inclusive/"&gt;Inclusive&lt;/a&gt;, &lt;a href="https://alistapart.com/article/responsive-web-design/"&gt;Responsive&lt;/a&gt;; we have yet to establish what "Ethical web design and development" means, what it looks like and how it is practiced.&lt;/p&gt;

&lt;p&gt;Part of the problem is the term "ethics" is often equated with statements like "do no harm" or practices to avoid legal issues. In reality, ethics refers to the principles and practices we agree upon as a society to judge the goodness and rightness of acts. The &lt;a href="https://www.scu.edu/ethics/ethics-resources/ethical-decision-making/what-is-ethics/"&gt;Markkula Center for Applied Ethics&lt;/a&gt; describes it like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"ethics refers to well-founded standards of right and wrong that prescribe what humans ought to do, usually in terms of rights, obligations, benefits to society, fairness, or specific virtues."&lt;br&gt;
In short, ethics is about practice, how we conduct ourselves and how we judge our actions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ethics cannot be summed up as "do no harm" because that leaves the door open to moral relativism: what is harm, to whom is this harm being done, who decides this is harmful, etc.&lt;/p&gt;

&lt;p&gt;So what then is ethical practice in relation to web work? Here's my rough draft to start a conversation about a definition:&lt;/p&gt;

&lt;p&gt;Ethical web design and development practice: Work focused on human flourishing through ethical practice and methodology and centered on the rights, capabilities, and agency of the end-user.&lt;/p&gt;

&lt;p&gt;What is "ethical practice?" Design and development practice rooted in ethical principles.&lt;/p&gt;

&lt;p&gt;What are "ethical principles?" Principles derived from well-established moral philosophies including &lt;a href="https://plato.stanford.edu/entries/consequentialism/"&gt;Consequentialism&lt;/a&gt; (specifically Utilitarianism), &lt;a href="https://plato.stanford.edu/entries/ethics-deontological/"&gt;Duty Ethics&lt;/a&gt;, &lt;a href="https://plato.stanford.edu/entries/ethics-virtue/"&gt;Virtue Ethics&lt;/a&gt;, and &lt;a href="https://plato.stanford.edu/entries/capability-approach/"&gt;Capability Approach&lt;/a&gt;. I wrote a &lt;a href="https://www.smashingmagazine.com/2018/03/using-ethics-in-web-design/"&gt;huge article for Smashing Magazine&lt;/a&gt; about how to use these in web design, and also done some talks on the topic:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/kF6t-gYf-pY"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Bottom line, ethical practice is about the doing and being of the practitioner, whether they see their users as ends or means to an end, whether they put "ought" before "can", and prioritize the agency of those they act upon. It's about how we judge the goodness and rightness of our work.&lt;/p&gt;

&lt;p&gt;I'm really excited about this conversation, and I hope we can get together as a community and figure out what ASPIRE means to us, and how we want to define Ethical web design so we can come together around shared principles and practices and carve meaningful paths into the future for other people and for ourselves.&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/pulse/aspire-acronym-better-web-practice-morten-rand-hendriksen/"&gt;Cross-posted to LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://unsplash.com/photos/LtWFFVi1RXQ"&gt;Cover photo by Łukasz Łada, Unsplash&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Where We Go From Here: 10 Thoughts on the Immediate Future of the Web</title>
      <dc:creator>Morten @ home</dc:creator>
      <pubDate>Thu, 10 Oct 2019 17:47:58 +0000</pubDate>
      <link>https://dev.to/mor10/where-we-go-from-here-10-thoughts-on-the-immediate-future-of-the-web-1d9a</link>
      <guid>https://dev.to/mor10/where-we-go-from-here-10-thoughts-on-the-immediate-future-of-the-web-1d9a</guid>
      <description>&lt;p&gt;I was asked to close out &lt;a href="https://2019.vancouver.wordcamp.org/"&gt;WordCamp Vancouver&lt;/a&gt; with a short 20 minute keynote on something interesting. After some thought, I put together a list of 10 trends I see in the web community and where we are headed in the immediate future._&lt;/p&gt;

&lt;h1&gt;
  
  
  0. The Future Keeps Arriving
&lt;/h1&gt;

&lt;p&gt;In my +15 years working on and with the web, the one major lesson I've learned is the future keeps arriving, sooner than you think, and often the future is already here. The web, the internet, and the technologies and communities powering them are evolving ever more rapidly, and what we consider future possibilities today often becomes practical realities the very next day. The future keeps arriving. Keep this in mind as you read on.&lt;/p&gt;

&lt;h1&gt;
  
  
  1. WordPress Themes are Dead. Long Live WordPress Themes.
&lt;/h1&gt;

&lt;p&gt;If you're of the WordPress persuasion, you'll know about the Block Editor, nee "Gutenberg," and how it's changing everything. Even if you don't work with WordPress, even if you don't care about WordPress, this transition from the content blob to each piece of content being its own "block" with its own properties and attributes is changing everything about how we think of content on the web. Why? Because WordPress powers a full 34% of the web meaning what WordPress does impacts everyone, even those who don't use it.&lt;/p&gt;

&lt;p&gt;Why does this matter? The front-end of pretty much every WordPress site up until this moment is a template displaying content in a relatively rigid way. With the Block Editor, that paradigm is all but dead. Right now, blocks are confined to the "content area," meaning the post or page content itself. That's about to change. In the foreseeable future - probably within the next 12 months - the block concept will spill outside the content area to take over the whole view. &lt;a href="https://make.wordpress.org/core/2019/09/05/defining-content-block-areas/"&gt;This article and video&lt;/a&gt; from Matias Ventura gives us an early preview of this future.&lt;/p&gt;

&lt;p&gt;Exactly what this all means is still up for debate, and the debate is happening right now: See Ben Gilbanks' "&lt;a href="https://www.binarymoon.co.uk/2019/09/the-end-of-wordpress-themes-is-in-sight/"&gt;The End of WordPress Themes Is In Sight&lt;/a&gt;" and Justin Tadlock's "&lt;a href="https://wptavern.com/rebirth-of-creativity-gutenberg-and-the-future-of-wordpress-themes"&gt;Rebirth of Creativity: Gutenberg and the Future of WordPress Themes&lt;/a&gt;" for two contrasting views.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bottom line:&lt;/strong&gt; What we think of as a "WordPress theme" is already an outdated concept. The future has arrived, we're just waiting for the practical implementation.&lt;/p&gt;

&lt;h1&gt;
  
  
  2. Gatsbyfication of the CMS Ecosystem
&lt;/h1&gt;

&lt;p&gt;If you don't know what &lt;a href="https://www.gatsbyjs.org/"&gt;Gatsby&lt;/a&gt; is, you will soon. The emergence and popularity of static site generators like Gatsby, &lt;a href="https://www.11ty.io/"&gt;11ty&lt;/a&gt;, &lt;a href="https://nuxtjs.org/"&gt;Nuxt&lt;/a&gt;, &lt;a href="https://jekyllrb.com/"&gt;Jekyll&lt;/a&gt;, &lt;a href="https://gohugo.io/"&gt;Hugo&lt;/a&gt;, and more is the beginning of a communal shift from delivering server-side rendered front-ends to delivering static or faux-static front-ends, often powered by JavaScript frameworks powerful APIs, and new query languages like &lt;a href="https://graphql.org/"&gt;GraphQL&lt;/a&gt; (see below for more on that). Gatsby and its ilk sit adjacent to traditional CMSes pulling data from them through APIs and presenting it to the user in new and more performant ways. And they can combine data in ways those old CMSes can not. More on that later as well.&lt;/p&gt;

&lt;p&gt;What's driving the Gatsbyfication of the CMS ecosystem? Several things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The idea of the monolithic end-to-end CMS solution is old and outdated. We no longer consume data from single sources, and giant monolithic CMSes like WordPress, Drupal that try to do everything for everyone etc are becoming dinosaurs.&lt;/li&gt;
&lt;li&gt;Performance is the new Black, and CMS-generated just-in-time server-rendered sites just don't cut it. Static site generators pulling data from CMSes is the natural progression from caching server-rendered content.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.cloudflare.com/learning/serverless/glossary/what-is-edge-computing/"&gt;Delivering content on the "Edge"&lt;/a&gt;: The web is global, yet CMS-based content delivery is most often confined to one server in one location. Content Delivery Networks (CDNs) have long been used to try to remedy this issue, with mixed results. Static site generators like Gatsby allow content to be computed and rendered on the "edge" - closer to the end-user, and in a more performant way.&lt;/li&gt;
&lt;li&gt;JavaScript is the new wine. Nobody likes PHP any more. Love it or hate it, JavaScript is the place to be, and static site generators are soaking in it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Bottom line:&lt;/strong&gt; I call this trend the "Gatsbyfication" because right now Gatsby has more wind in its sails than any competitor and &lt;a href="https://techcrunch.com/2019/09/26/gatsby-raises-15m-series-a-for-its-modern-web-development-platform/"&gt;money is pouring into the project&lt;/a&gt;. Does that mean Gatsby will reign supreme? I have no idea, but I think a Gastby-type solution will reign supreme in our immediate future.&lt;/p&gt;

&lt;h1&gt;
  
  
  3. With the APIfication of the Web, REST is ceding to GraphQL
&lt;/h1&gt;

&lt;p&gt;REST APIs have been around since forever. I remember going to a web conference in 2009 where almost every talk was about RESTful APIs. REST gave us the tools and infrastructure to evolve the web beyond single-source-of-content solutions and paved the cowpaths leading to the client-side content rendering which is now the default for content rich sites including LinkedIn, YouTube, Facebook, and sites powered by static site generators like Gatsby (see above).&lt;/p&gt;

&lt;p&gt;The problem is the REST concept is old, and it doesn't provide the necessary tooling to do the things we want to do today.&lt;/p&gt;

&lt;p&gt;Enter &lt;a href="https://graphql.org/"&gt;GraphQL&lt;/a&gt;, a new query language which approaches the same problem REST tried to solve in a new and more modern way. I won't bore you with the details of how GraphQL works (&lt;a href="https://www.linkedin.com/learning/learning-graphql/welcome"&gt;we have courses for that at LinkedIn Learning if you're interested!&lt;/a&gt;. Suffice it to say GraphQL allows developers to combine data from different API sources and make it available in ways that benefit them and make previously impossible or very hard things practically possible.&lt;/p&gt;

&lt;p&gt;If you don't believe me, look no further than the WordPress project: After an enormous undertaking of creating a proper REST API for WordPress, tools like Gatsby choose instead to use the custom &lt;a href="https://www.wpgraphql.com/"&gt;WPGraphQL&lt;/a&gt; to query and consume data from the source.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bottom line:&lt;/strong&gt; The APIfication of the web has been happening for a while, and future web services will need to serve up comprehensive APIs to stay relevant. GraphQL-type query languages will replace REST as the standard interface, and as a result consuming content from single sources will become an anti-pattern (see below).&lt;/p&gt;

&lt;h1&gt;
  
  
  4. Content Streams and the Content Mesh
&lt;/h1&gt;

&lt;p&gt;Back in 2013, David Gelernter published an opinion piece in Wired Magazine titled "&lt;a href="https://www.wired.com/2013/02/the-end-of-the-web-computers-and-search-as-we-know-it/"&gt;The End of the Web, Search, and Computer as We Know It&lt;/a&gt;" where he talks about the concept of a "lifestream":&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;a heterogeneous, content-searchable, real-time messaging stream.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sound familiar? If you have one of those talking thermos cans at home and asked it "Hey Corporate Surveillance Device, tell me about my day" you know that's pretty much were we live today. Except the web hasn't quite caught up to the trend yet.&lt;/p&gt;

&lt;p&gt;Enter the “&lt;a href="https://www.gatsbyjs.org/blog/2018-10-04-journey-to-the-content-mesh/"&gt;Content Mesh&lt;/a&gt;” — the infrastructure layer for a decoupled website — introduced by the Gatsby team and pretty much the manifestation of what Gelernter talked about all those years ago.&lt;/p&gt;

&lt;p&gt;The Content Mesh, if we choose to adopt this language, is the idea of building a front-end that consumes and interacts with data from multiple sources. So instead of having one monolithic WordPress site trying to do blogging and ecommerce and forums and forms and everything else, you have one unified front end that brings in blogging from WordPress, ecommerce from Shopify, pages from Contentful, forms from Google Forms, etc. Literally meshing together content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bottom line&lt;/strong&gt;: The current idea of the content mesh is an evolution of the single-source website concept. That's where we're headed right this moment. In the slightly more distant future, the content mesh will be served by our personal assistants, configured by the individual user, and the website as we know it will be a quaint anachronistic thing some people choose to spend their time on.&lt;/p&gt;

&lt;h1&gt;
  
  
  5. The Rectangular Screen as Main Content Delivery Modality is Already Dead
&lt;/h1&gt;

&lt;p&gt;Here's the new trailer for the dystopian near-future sci-fi show Black Mirror:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Is8eXZco46Q"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Just kidding. This is an ad for Facebook Horizon - a virtual world reminiscent of the OASIS predicted in the book &lt;a href="https://en.wikipedia.org/wiki/Ready_Player_One"&gt;Ready Player One&lt;/a&gt;, except it's run by IOI (you don't need to read the book or see the movie btw. If you haven't, just read on).&lt;/p&gt;

&lt;p&gt;AR/MR/XR/VR/CR whatever we end up calling it, the idea of computers in some way augmenting our reality by introducing virtual layers in the form of visuals, audio, or other sensory inputs, is now a reality. All the major tech firms are fighting to be the first to inject their own ad-fuelled reality as a layer on top of our own. If you have one of those aforementioned talking orporate surveillance thermos cans, or a modern phone or computer or TV with a voice assistant, you are already living in this future.&lt;/p&gt;

&lt;p&gt;The world in which our main tool for accessing information over the internet is a rectangular glass screen is already in the past. We are merely experiencing the late-stage residuals. The second the Fruit Company rolls out their first set of iGlass AR-powered glasses, and the Search Company follows suit with AR-powered contacts, the focus for web content delivery will shift from "how do we cram as many ads into the viewport of a mobile browser" to "how do we cram as many ads into the field of view and range of hearing of the human experience?"&lt;/p&gt;

&lt;p&gt;Don't believe me? Watch Marley Rafson's talk "&lt;a href="https://2019.jsconf.eu/marley-rafson/the-case-for-augmented-reality-on-the-web.html"&gt;The Case for Augmented Reality on the Web&lt;/a&gt;" from JSConfEU 2019 and draw your own conclusions:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Jk4tEMBJleE"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bottom line&lt;/em&gt;: The APIfication of the web, and the Content Mesh, will become more important than ever because we'll need to design and deliver our content to new interfaces which don't even exist yet in the immediate future. Also, unless we actively resist the urge to AR everything and put ads everywhere, our AR world will be an insufferable hellscape reminiscent of Keiichi Matsuda's "&lt;a href="https://www.youtube.com/watch?v=YJg02ivYzSs"&gt;HYPER-REALITY&lt;/a&gt;" for the next decade.&lt;/p&gt;

&lt;h1&gt;
  
  
  6. CSS Changes Everything
&lt;/h1&gt;

&lt;p&gt;On a positive note, CSS is evolving and changing in extraordinary ways, and the future of CSS is even more extraordinary. In our modern web dev world already have magical tools like &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Flex"&gt;flex&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Grids"&gt;grid&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/--*"&gt;custom properties&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Animations"&gt;animations&lt;/a&gt;, and &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/filter"&gt;filters&lt;/a&gt;. Soon our CSS toolkit will expand exponentially thanks to &lt;a href="https://houdini.glitch.me/"&gt;CSS Houdini&lt;/a&gt;. Look no further than &lt;a href="https://twitter.com/Una"&gt;Una Kravets&lt;/a&gt;' JSConfEU talk "&lt;a href="https://2019.jsconf.eu/una-kravets/css-houdini-and-the-future-of-styling.html"&gt;CSS Houdini &amp;amp; the Future of Styling&lt;/a&gt;" to see where we're headed next:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/GhRE3rML9t4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;As if that wasn't enough, the canvas in which we do our work is about to change as well. Right now, &lt;a href="https://twitter.com/argyleink"&gt;Adam Argyle&lt;/a&gt; is working on his &lt;a href="https://chrome.google.com/webstore/detail/visbug/cdockenadnadldjbbgcallicgledbeoc?hl=en"&gt;VisBug Chrome extension&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Sold as a visual browser development tool that makes your browser viewport work more like a design tool, I think this thing is a peek at what the future will bring in terms of web design: The browser itself being the design canvas, and server-powered tools like WordPress' Gutenberg editor being old hat.&lt;/p&gt;

&lt;h1&gt;
  
  
  7. Open Source Ideology is D/Evolving
&lt;/h1&gt;

&lt;p&gt;Open source rules the web world. Open source is also experiencing some long-overdue internal strife. Without going into too much detail, Richard Stallman, considered the originator of open source ideology, has stepped down from his various leadership roles in the open source and free software communities due to accusations of decades of problematic behavior. You can read more about this in &lt;a href="https://arstechnica.com/tech-policy/2019/09/richard-stallman-leaves-mit-after-controversial-remarks-on-rape/"&gt;various news outlets&lt;/a&gt; and &lt;a href="https://medium.com/@selamjie/remove-richard-stallman-fec6ec210794"&gt;opinion pieces&lt;/a&gt; (and you should, this stuff is important).&lt;/p&gt;

&lt;p&gt;Here's my abbreviated take: It's high time problematic characters like Stallman are removed from their positions of power in the open source community because their influence has been detrimental to the participation in these communities for many marginalized groups. Moreover, it opens the door to a deeper conversation about the core ethos of open source ideology and whether the radical understandings of terms like "freedom" by a group of entitled white men is a sound foundation to build equitable and inclusive communities moving forward.&lt;/p&gt;

&lt;p&gt;I'm going to write more about this in a separate post, but my long-held opinion on open source ideology (and I say this as an open source creator, contributor, and proponent) is open source in its present iteration is exclusionary and privileged. Why? Because it's based on the assumption that those who have something worthwhile to contribute also have the time, money, and necessary tools and access to be able to contribute. From there follows that anyone who is not contributing, for whatever reason, does not have anything valuable to contribute (which is utter nonsense) and that those who contribute the most (usually because they are paid by corporations to do so - see below) are the best people to lead the project. "Decisions are made by those who show up" really means "decisions are made by those with enough privilege to show up" which is not an equitable nor inclusive base to rest an entire ideology on. Follow &lt;a href="https://twitter.com/christi3k"&gt;Christie Koehler&lt;/a&gt; for more on that story.&lt;/p&gt;

&lt;p&gt;Then there's the whole "open source is value neutral" and "open source licenses can't have morality clauses" thin which deserves an entire article its own. Follow and support &lt;a href="https://twitter.com/CoralineAda"&gt;Coraline Ada Ehmke&lt;/a&gt; in their efforts to &lt;a href="https://firstdonoharm.dev/"&gt;debunk that nonsense&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bottom line&lt;/strong&gt;: Open Source ideology is being redefined right now. Your participation in that conversation decides whether it'll be an evolution or a devolution. Your voice matters, so use it! Forward the equitable and inclusive open source revolution!&lt;/p&gt;

&lt;h1&gt;
  
  
  8. Corporate Control of Open Source is the New Black
&lt;/h1&gt;

&lt;p&gt;Guess what: Open Source is super valuable. No wonder large corporations want their piece of the pie. Actually, they want all the pieces of the pie and they want you to bake it, for free! Yes, yes, I work for LinkedIn which is part of Microsoft etc. But I'm believe in open source, and I'm deeply concerned about the corporatization of the open source space.&lt;/p&gt;

&lt;p&gt;Here's the gist: The core idea of free libre open source software was to effectively flood the commons with free (as in you don't pay) open source software so the large corporations who sold expensive licenses for proprietary software went out of business. Don't believe me? Go read the [GNU Manifesto](&lt;a href="https://www.gnu.org/gnu/manifesto.en.html0"&gt;https://www.gnu.org/gnu/manifesto.en.html0&lt;/a&gt; (and keep in mind everything I said above). The idea was we would use open source software in the capitalist world to earn money, thereby keeping the software itself without value and only putting value to the services rendered with the software.&lt;/p&gt;

&lt;p&gt;So what happened? Corporations figured since all the open source contributors didn't derive value from their software, the corporations could do it instead! And without paying a dime for it. Literally get people to work for free and then make money from that work.&lt;/p&gt;

&lt;p&gt;Sure, that's an oversimplification, but it is also the reality on the ground. The corporatization of open source, in particular large projects like &lt;a href="https://venturebeat.com/2019/09/19/wordpress-com-parent-automattic-raises-300-million-from-salesforce-at-a-3-billion-valuation/"&gt;WordPress&lt;/a&gt; and &lt;a href="https://techcrunch.com/2019/09/24/vista-equity-partners-buys-acquia-for-1b/"&gt;Drupal&lt;/a&gt; and &lt;a href="https://www.techrepublic.com/article/npm-ceo-bryan-bogensberger-exits-after-eight-months-of-turmoil/"&gt;NPM&lt;/a&gt;, is a reality, and it's only going to get bigger. If there is value in a project, a big corporation will be made to turn some of that value into cold hard cash. See the aforementioned &lt;a href="https://www.gatsbyjs.org/blog/2019-09-26-announcing-gatsby-15m-series-a-funding-round/"&gt;Gatsby&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Some say this is a good thing. Some say it's not. I think we need to start thinking more about where we want to go than how we can turn free contributors into cash cows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bottom line&lt;/strong&gt;: The open source community has failed in its mission to change the status quo, choosing instead to double down on good old capitalism. If you don't like it, do something about it. Also, go read Cory Doctorow's "&lt;a href="https://en.wikipedia.org/wiki/Walkaway_(Doctorow_novel)"&gt;Walkaway&lt;/a&gt;".&lt;/p&gt;

&lt;h1&gt;
  
  
  9. The Tech Ethics Reckoning
&lt;/h1&gt;

&lt;p&gt;The Pope felt it necessary to invite Silicon Valley to the Vatican to talk to the tech industry about morals, ethics, and the common good:&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
    &lt;div class="ltag__twitter-tweet__media ltag__twitter-tweet__media__two-pics"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--J8tQdCXm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/media/EFdP5heUcAIIZ-u.jpg" alt="unknown tweet media content"&gt;
    &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--yFCJB7JW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/994412577357623296/GesxGsQS_normal.jpg" alt="Shannon Vallor profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Shannon Vallor
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @shannonvallor
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Pope Francis’ address to us in the Common Good in the Digital Age conference has this call to action: “Your work will continue until no one remains the victim of a system, however advanced and efficient, that fails to value the intrinsic dignity and contribution of each person.” 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      08:18 AM - 27 Sep 2019
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1177497702067662848" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1177497702067662848" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      26
      &lt;a href="https://twitter.com/intent/like?tweet_id=1177497702067662848" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      80
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;Unless you've been living under a rock, you know #techethics is hot shit, and for good reason: Turns out moving fast and breaking things breaks people, communities, even our democracy.&lt;/p&gt;

&lt;p&gt;Here's the problem: The tech and design communities are largely autodidact. There is no board of ethics for tech or design, and everyone is allowed and encouraged to do whatever they want in the name of disruption, innovation, and creation. Put bluntly, we are working in a non-ethical industry.&lt;/p&gt;

&lt;p&gt;Why does this matter? Because in lieu of the tech and design industries regulating themselves, or at the very least adopting and enforcing some basic form of ethics, governments will regulate us without our input. Which is what's happening right now.&lt;/p&gt;

&lt;p&gt;This is especially bad for open source because unlike large corporations and their walled gardens, who spend millions on lobbyists to sway politicians to lock everything down and hand the keys to the highest bidder, open source developers live in some reality dysfunction where they think politics and political involvement are irrelevant.&lt;/p&gt;

&lt;p&gt;Trust me when I say they are not. They are the life blood of modern civil society, and choosing to stand aside and let things happen without your input is the same as letting other people carve out the path you need to follow into your future.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bottom line&lt;/strong&gt;: Unless we figure out the whole ethics thing for tech and design right now, we are going to be regulated into a walled garden of corporate surveillance of our own making.&lt;/p&gt;

&lt;h1&gt;
  
  
  10. The Next Generation
&lt;/h1&gt;

&lt;p&gt;Looking around at my industry I see two things:&lt;/p&gt;

&lt;p&gt;Old white men like myself wringing our hands and saying "man, we really messed this up, I wish we could roll back the clock and do some things differently."&lt;br&gt;
Young diverse community members trying to make make a living out of an industry emerging from its adolescence and realizing it now runs the world and needs to do a better job at it.&lt;br&gt;
This gives me hope.&lt;/p&gt;

&lt;p&gt;I believe in the next generation of creators on the web, and I believe they have what it takes to turn this chaotic mess we call "tech" into what it can be: A new path forward for a more equitable and diverse society with values rooted in the idea of common goods distributed through free and open commons.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bottom line&lt;/strong&gt;: The future keeps arriving. The future is already here. It is our job to ensure the next generation gets to experience the same freedom of creation and discovery on a free an open internet so they can build a robust and inclusive society for all of us.&lt;/p&gt;

&lt;h1&gt;
  
  
  Postscript: Your turn
&lt;/h1&gt;

&lt;p&gt;This is what I see. I'm just one person, and I have strong opinions about things. To move forward, a discourse is required. We need to share our thoughts, ideas, hopes, and concerns, and figure out how to move forward together.&lt;/p&gt;

&lt;p&gt;What do you think about all this? What trends are you seeing? Where are we headed next, and where do you think we should be headed?&lt;/p&gt;

&lt;p&gt;Add your thoughts and let's find paths into the future we design together!&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/pulse/where-we-go-from-here-10-thoughts-immediate-future-rand-hendriksen/"&gt;Originally posted on LinkedIn&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>graphql</category>
      <category>wordpress</category>
      <category>css</category>
    </item>
  </channel>
</rss>
