|
| 1 | +<!doctype html> |
| 2 | +<html lang="en"> |
| 3 | +<head> |
| 4 | + <meta charset="utf-8"> |
| 5 | + <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> |
| 6 | + <title>Bleeding Edge Web: January 2025</title> |
| 7 | + |
| 8 | + <link rel="stylesheet" href="../../shared/reveal.js/dist/reset.css"> |
| 9 | + <link rel="stylesheet" href="../../shared/reveal.js/dist/reveal.css"> |
| 10 | + <link rel="stylesheet" href="../../shared/reveal.js/dist/theme/black-contrast.css"> |
| 11 | + <link rel="stylesheet" href="../../shared/reveal.js/dist/theme/bew-overrides.css"> |
| 12 | + <link rel="stylesheet" href="../../shared/reveal.js/plugin/highlight/monokai.css"> |
| 13 | +</head> |
| 14 | +<body> |
| 15 | +<div class="reveal"> |
| 16 | + <div class="slides"> |
| 17 | + |
| 18 | + <!---------------------- Intro ----------------------> |
| 19 | + |
| 20 | + <section class="center"> |
| 21 | + <h1>Bleeding Edge Web</h1> |
| 22 | + <h2><a href="https://twitter.com/edgeatx">@edgeATX</a></h2> |
| 23 | + <h2><a href="https://www.edgeatx.org/">EdgeATX.org</a></h2> |
| 24 | + </section> |
| 25 | + |
| 26 | + <section class="speaker-list"> |
| 27 | + <h2>January 2025</h2> |
| 28 | + <h3 class="lightning">News From the Bleeding Edge</h3> |
| 29 | + <p class="small">— Ted Patrick (<a href="https://twitter.com/__ted__">@__ted__</a>)</p> |
| 30 | + <h3 class="star">Express Forward</h3> |
| 31 | + <p class="small">— Wesley Todd (<a href="https://wesleytodd.com/">wesleytodd.com</a>) |
| 32 | + </section> |
| 33 | + |
| 34 | + <!---------------------- Housekeeping ----------------------> |
| 35 | + |
| 36 | + <section> |
| 37 | + <h2>Housekeeping</h2> |
| 38 | + <ul> |
| 39 | + <li class="fragment">Join us on <a |
| 40 | + href="https://join.slack.com/t/edgeatx/shared_invite/zt-1onzae2c4-0JBegV3EvF5VV4R_MDQsUA">Slack</a> |
| 41 | + </li> |
| 42 | + <li class="fragment">Speakers and sponsors <strong class="highlight">always wanted</strong> |
| 43 | + <ul class=""> |
| 44 | + <li><a href="https://www.edgeatx.org/speak.html">edgeatx.org / speak.html</a></li> |
| 45 | + <li><a href="https://www.edgeatx.org/sponsorship.html">edgeatx.org / sponsorship.html</a></li> |
| 46 | + </ul> |
| 47 | + </li> |
| 48 | + </ul> |
| 49 | + </section> |
| 50 | + |
| 51 | + <!---------------------- Sponsors ----------------------> |
| 52 | + |
| 53 | + <section> |
| 54 | + <h2>Thanks to Our Host!</h2> |
| 55 | + <div style="background-color: #fff;padding: 25px 0 0 40px;border-radius: 15px;"> |
| 56 | + <a href="https://www.expedia.com/" target="_blank"><img |
| 57 | + src="../../shared/resources/images/sponsors/expedia-logo.jpg" alt="Expedia"> |
| 58 | + </a> |
| 59 | + </div> |
| 60 | + <p>Expedia is always hiring! <a href="https://careers.expediagroup.com/" target="_blank">expediajobs.com</a></p> |
| 61 | + </section> |
| 62 | + |
| 63 | + <section> |
| 64 | + |
| 65 | + <a href="https://www.acumity.com" target="_blank"> |
| 66 | + <h1>Acumity</h1> |
| 67 | + <ul> |
| 68 | + <li>Smart, Simple, Secure</li> |
| 69 | + <li>AI Solutions Designed for the Enterprise</li> |
| 70 | + </ul> |
| 71 | + </a> |
| 72 | + </section> |
| 73 | + |
| 74 | + <!---------------------- Libs & Frameworks ----------------------> |
| 75 | + |
| 76 | + <section data-background-color="#661f34" class="center main-title"> |
| 77 | + <h2 style="color:white;">Libraries & Frameworks</h2> |
| 78 | + </section> |
| 79 | + |
| 80 | + <section> |
| 81 | + <h2><a href="https://bun.sh/blog/bun-v1.1.44">Bun v1.1.44 - Jan 16</a></h2> |
| 82 | + <ul> |
| 83 | + <li>Bun.serve() - serve and bundle frontend</li> |
| 84 | + <li class="fragment">HTML Imports <pre><code data-trim data-noescape> |
| 85 | + import mySinglePageApp from "./index.html"; |
| 86 | + </code></pre></li> |
| 87 | + <li class="fragment">43 bugs fixed</li> |
| 88 | + </ul> |
| 89 | + |
| 90 | + </section> |
| 91 | + |
| 92 | + <section> |
| 93 | + <h2>Spotlight: Tailwind v4</h2> |
| 94 | + <blockquote>Rapidly build modern websites without ever leaving your HTML. </blockquote> |
| 95 | + <p><a href="https://tailwindcss.com/">Tailwind</a> utility classes to style without CSS</p> |
| 96 | + <ul> |
| 97 | + <li>Oxide Engine - faster in Rust</li> |
| 98 | + <li class="fragment">Variants, Cascade Layers, Container Queries</li> |
| 99 | + <li class="fragment">Zero-configuration Content Detection</li> |
| 100 | + </ul> |
| 101 | + </section> |
| 102 | + |
| 103 | + <section> |
| 104 | + <h2><a href="https://v5.daisyui.com/components/button/">Daisy UI v5 beta</a></h2> |
| 105 | + <div class="center"> |
| 106 | + <img src="https://img.daisyui.com/images/daisyui-logo/daisyui-logomark.svg" alt="backdrop-filter example" style="max-width: 100px;"> |
| 107 | + </div> |
| 108 | + <ul> |
| 109 | + <li>Semantic Tailwind Components in HTML/JSX <pre><code data-trim data-noescape> |
| 110 | + <button class="btn btn-primary">Press Me</button> |
| 111 | + </code></pre></li> |
| 112 | + <li class="fragment">Zero dependencies</li> |
| 113 | + <li class="fragment">Smaller Size 34kB (Down from 137kB)</li> |
| 114 | + </ul> |
| 115 | + |
| 116 | + </section> |
| 117 | + |
| 118 | + <section> |
| 119 | + <h2><a href="https://react.dev/blog/2024/12/05/react-19">React 19 (Dec 12)</a></h2> |
| 120 | + <ul> |
| 121 | + <li><form> Actions</li> |
| 122 | + <li class="fragment">New hook: useOptimistic and useFormStatus</li> |
| 123 | + <li class="fragment">New API: use<pre><code>import {use} from 'react'; |
| 124 | + |
| 125 | +function Comments({commentsPromise}) { |
| 126 | + // `use` will suspend until the promise resolves. |
| 127 | + const comments = use(commentsPromise); |
| 128 | + return comments.map(c => <p key={c.id}>{c}</p>); |
| 129 | +}</code></pre></li> |
| 130 | + </ul> |
| 131 | + </section> |
| 132 | + |
| 133 | + |
| 134 | + <section> |
| 135 | + <h2>Notable releases</h2> |
| 136 | + <ul> |
| 137 | + <li> |
| 138 | + <span class="date">Jan 10</span> |
| 139 | + <a href="https://eslint.org/blog/2025/01/eslint-v9.18.0-released/">ESLint 9.18.0</a> |
| 140 | + </li> |
| 141 | + <li class="fragment"> |
| 142 | + <span class="date">Jan 14</span> |
| 143 | + <a href="https://www.electronjs.org/blog/electron-34-0">Electron 34</a> |
| 144 | + </li> |
| 145 | + <li class="fragment"> |
| 146 | + <span class="date">Jan 15</span> |
| 147 | + <a href="https://pptr.dev/">Puppeteer 24</a> |
| 148 | + </li> |
| 149 | + <li class="fragment"> |
| 150 | + <span class="date">Jan 15</span> |
| 151 | + <a href="https://github.com/storybookjs/storybook/releases/tag/v8.5.0">Storybook 8.5</a> |
| 152 | + </li> |
| 153 | + <li class="fragment"> |
| 154 | + <span class="date">Jan 16</span> |
| 155 | + <a href="https://www.cypress.io/blog/cypress-14-is-here-see-whats-new">Cypress 14</a> |
| 156 | + </li> |
| 157 | + </ul> |
| 158 | + </section> |
| 159 | + <!---------------------- Baseline Updates ----------------------> |
| 160 | + |
| 161 | + <section data-background-color="#661f34" class="center main-title"> |
| 162 | + <h2 style="color:white;">Baseline News</h2> |
| 163 | + <p class="x-small"><a href="https://web.dev/baseline" style="color: white;">https://web.dev/baseline</a></p> |
| 164 | + </section> |
| 165 | + |
| 166 | + <section> |
| 167 | + <h2>Latest browser releases</h2> |
| 168 | + <ul class="date-list"> |
| 169 | + <li><span class="date">Dec 9</span> <a |
| 170 | + href="https://webkit.org/blog/16301/webkit-features-in-safari-18-2/">Safari 18.2</a> |
| 171 | + </li> |
| 172 | + <li><span class="date">Jan 7</span> <a |
| 173 | + href="https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/134">Firefox 134</a> |
| 174 | + </li> |
| 175 | + <li><span class="date">Jan 14</span> <a |
| 176 | + href="https://developer.chrome.com/release-notes/132">Chrome 132</a> |
| 177 | + </li> |
| 178 | + </ul> |
| 179 | + </section> |
| 180 | + |
| 181 | + <section> |
| 182 | + <h2>Baseline 2025: Promise.try</h2> |
| 183 | + <ul> |
| 184 | + <li>Baseline 2025 on Jan 26th</li> |
| 185 | + <li>Simplified error handling with Promise</li> |
| 186 | + </ul> |
| 187 | + <pre><code data-trim data-noescape> |
| 188 | + // If the callback is synchronous and it throws |
| 189 | + // an exception, the error won't be caught here: |
| 190 | + new Promise(resolve => resolve(callback()); |
| 191 | + |
| 192 | + // But it will be here: |
| 193 | + Promise.try(callback) |
| 194 | + .then(result => console.log(result)) |
| 195 | + .catch(error => console.log(error)) |
| 196 | + .finally(() => console.log("All settled.")); |
| 197 | + </code></pre> |
| 198 | + </section> |
| 199 | + |
| 200 | + <section> |
| 201 | + <h2>WebGPU (Not Baseline!)</h2> |
| 202 | + <ul> |
| 203 | + <li>Utilize a GPU from JavaScript</li> |
| 204 | + <li class="fragment">High-performance, low-level 3D graphics API</li> |
| 205 | + <li class="fragment">Built on OS APIs... Vulkan, Metal, or Direct3D 12<pre><code> |
| 206 | +const canvas = document.querySelector('cv') as HTMLCanvasElement; |
| 207 | +const adapter = await navigator.gpu?.requestAdapter(); |
| 208 | +const device = await adapter?.requestDevice(); |
| 209 | +const context = canvas.getContext('webgpu') as GPUCanvasContext; |
| 210 | + </code></pre></li> |
| 211 | + <li class="fragment">Both <a href="https://webgpu.github.io/webgpu-samples/?sample=rotatingCube">Graphics</a> + <a href="https://www.kmeans.org/">Data Processing (AI Models)</a></li> |
| 212 | + </ul> |
| 213 | + </section> |
| 214 | + |
| 215 | + <!---------------------- Web Standards Spotlight ----------------------> |
| 216 | + |
| 217 | + <!---------------------- Security & Privacy ----------------------> |
| 218 | + |
| 219 | + <!---------------------- Industry News ----------------------> |
| 220 | + |
| 221 | + <section> |
| 222 | + <h2><a href="https://htmx.org/essays/future/">Future of htmx (Jan 1)</a></h2> |
| 223 | + <ul> |
| 224 | + <li>Evolution of htmx</li> |
| 225 | + <li class="fragment">Focus lib on stability, not features</li> |
| 226 | + <li class="fragment">Goal is to be the next jquery</li> |
| 227 | + </ul> |
| 228 | + </section> |
| 229 | + |
| 230 | + <!---------------------- Events ----------------------> |
| 231 | + |
| 232 | + <!---------------------- Handy Tools ----------------------> |
| 233 | + |
| 234 | + <section> |
| 235 | + <h2><a href="https://opensource.author.io/nvm-for-windows-v120">NPM for Windows v1.2.0</a></h2> |
| 236 | + <ul> |
| 237 | + <li class="fragment">Desktop Notifications</li> |
| 238 | + <li class="fragment">ARM Support</li> |
| 239 | + <li class="fragment">Congrats Corey!</li> |
| 240 | + </ul> |
| 241 | + </section> |
| 242 | + |
| 243 | + <!---------------------- ICYMI ----------------------> |
| 244 | + |
| 245 | + <!---------------------- Just For Fun ----------------------> |
| 246 | + <section data-background-color="#661f34" class="center main-title"> |
| 247 | + <h2 style="color:white;">Just For Fun</h2> |
| 248 | + </section> |
| 249 | + |
| 250 | + <section> |
| 251 | + <h2><a href="https://www.edgeatx.org/">document.designMode = 'on'</a></h2> |
| 252 | + </section> |
| 253 | + |
| 254 | + <section> |
| 255 | + <h2><a href="https://codepen.io/miocene/pen/QwLOQBB?utm_source=CSS-Weekly&utm_campaign=Issue-603&utm_medium=web">Pure CSS 3D Cat</a></h2> |
| 256 | + </section> |
| 257 | + |
| 258 | + <!---------------------- Fin! ----------------------> |
| 259 | + |
| 260 | + <section> |
| 261 | + <h2>Thanks!</h2> |
| 262 | + <p>Ted Patrick</p> |
| 263 | + <ul> |
| 264 | + <li><a href="https://www.acumity.com/">Co-founder at Acumity.com</a></li> |
| 265 | + <li><a href="https://www.edgeatx.org/slides/">edgeATX.org / slides</a></li> |
| 266 | + </ul> |
| 267 | + </section> |
| 268 | + </div> |
| 269 | +</div> |
| 270 | + |
| 271 | +<script src="../../shared/reveal.js/dist/reveal.js"></script> |
| 272 | +<script src="../../shared/reveal.js/plugin/notes/notes.js"></script> |
| 273 | +<script src="../../shared/reveal.js/plugin/markdown/markdown.js"></script> |
| 274 | +<script src="../../shared/reveal.js/plugin/highlight/highlight.js"></script> |
| 275 | +<script> |
| 276 | + Reveal.initialize({ |
| 277 | + hash: true, |
| 278 | + transition: 'fade', |
| 279 | + plugins: [ RevealMarkdown, RevealHighlight, RevealNotes ] |
| 280 | + }); |
| 281 | + document.querySelectorAll('a').forEach((el) => { |
| 282 | + el.setAttribute('target', '_blank'); |
| 283 | + el.setAttribute('rel', 'noopener'); |
| 284 | + }); |
| 285 | +</script> |
| 286 | +</body> |
| 287 | +</html> |
0 commit comments