<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Steve Harrison</title><description>Welcome to my website!</description><link>https://steveharrison.dev/</link><item><title>What&apos;s new in CSS in 2023</title><link>https://steveharrison.dev/2023-10-30-wds23-slides/</link><guid isPermaLink="true">https://steveharrison.dev/2023-10-30-wds23-slides/</guid><description>Here&apos;s a PDF copy of my slides from my talk &quot;What&apos;s new in CSS in 2023&quot; at Web Directions Summit.</description><pubDate>Mon, 30 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Here’s a &lt;a href=&quot;https://github.com/steveharrison/presentations/blob/main/What&apos;s%20new%20in%20CSS%20in%202023%20Web%20Directions%20Summit.pdf&quot;&gt;PDF copy&lt;/a&gt; of my slides from my talk “What’s new in CSS in 2023” at Web Directions Summit.&lt;/p&gt;</content:encoded></item><item><title>Exploring CloudKit JS</title><link>https://steveharrison.dev/exploring-cloudkit-js/</link><guid isPermaLink="true">https://steveharrison.dev/exploring-cloudkit-js/</guid><description>Apple&apos;s CloudKit framework offers a secure way to store app data and make it available to all of a user&apos;s Apple devices, tied to their Apple account. I was</description><pubDate>Fri, 13 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Apple’s &lt;a href=&quot;https://developer.apple.com/documentation/cloudkit&quot;&gt;CloudKit&lt;/a&gt; framework offers a secure way to store app data and make it available to all of a user’s Apple devices, tied to their Apple account. I was looking into it recently, and I noticed that they also have the ability to use it on the web. Enter &lt;a href=&quot;https://developer.apple.com/documentation/cloudkitjs&quot;&gt;CloudKit JS&lt;/a&gt;. You can access CloudKit data on the client-side using a client token (covered below), or also directly server-side using a private server token. I found the whole experience quite confusing, so this post will show you all the steps you need to get started with CloudKit on iOS and web in 2024!&lt;/p&gt;
&lt;p&gt;I’ve created a GitHub repository with two examples of a simple task list app that connects to CloudKit to read / write tasks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vanilla HTML + JavaScript page&lt;/li&gt;
&lt;li&gt;Modern Next.js app using React, TypeScript, Tailwind CSS, &amp;amp; shadcn&lt;/li&gt;
&lt;/ul&gt;
&lt;a href=&quot;https://github.com/steveharrison/cloudkitjs-examples&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;GitHub - steveharrison/cloudkitjs-examples&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Contribute to steveharrison/cloudkitjs-examples development by creating an account on GitHub.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;/content/images/icon/pinned-octocat-093da3e6fa40.svg&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;GitHub&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;/content/images/thumbnail/cloudkitjs-examples&quot; alt=&quot;GitHub - steveharrison/cloudkitjs-examples&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;I recommend you check out this repo as I’ll reference it later.&lt;/p&gt;
&lt;h3 id=&quot;ios&quot;&gt;iOS&lt;/h3&gt;
&lt;p&gt;Firstly, to use CloudKit, you need to have a paid Apple developer account. Start by downloading an &lt;a href=&quot;https://github.com/azamsharp/TaskAppCloudKit&quot;&gt;example CloudKit iOS app&lt;/a&gt; (you can create the app yourself following &lt;a href=&quot;https://www.youtube.com/watch?v=Guhn8VuHZ7k&quot;&gt;this YouTube tutorial&lt;/a&gt;, which I found very helpful) and open it in Xcode. Before you run it, you need to modify the following under Targets &amp;gt; TaskTracker &amp;gt; Signing &amp;amp; Capabilities:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Select your own Team.&lt;/li&gt;
&lt;li&gt;Edit Bundle Identifier to your own custom bundle identifier.&lt;/li&gt;
&lt;li&gt;Uncheck the existing container under Containers.&lt;/li&gt;
&lt;li&gt;Under Containers, click the plus button and enter your bundle identifier. It will add “iCloud.” to the beginning once created, but this must&lt;em&gt;be the same as your bundle identifier.&lt;/em&gt; (I didn’t realise this initially.)&lt;/li&gt;
&lt;li&gt;Wait 5 min or so. It takes some time for iCloud to create the container, and even once it goes from red to black when you click the refresh icon to the right of the plus, it may not be fully initialised yet.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2024/09/Screenshot-2024-09-13-at-10.58.28-am.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;While not required, I also recommend modifying the &lt;code&gt;addTask&lt;/code&gt; function in &lt;code&gt;Models &amp;gt; Model.swift&lt;/code&gt; to the following code that doesn’t swallow errors and logs what’s happening in case something fails:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;func addTask(taskItem: TaskItem) async {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;debugPrint(&quot;addTask called with taskItem.record&quot;, taskItem.record)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;do {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;let record = try await db.save(taskItem.record)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;guard let task = TaskItem(record: record) else { return }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;tasksDictionary[task.recordId!] = task&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;debugPrint(&quot;saved record is &quot;, record);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;} catch {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;debugPrint(&quot;Error saving record: \(error.localizedDescription)&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Now you should be able to run the project in Simulator. Once the iOS app appears, click the home button in the top of the simulator, go to the Settings app, and sign in to your iCloud account just like you would on your phone. Once signed in, return to the app, add a new task in the input, press Return, and you should see it appear in the task list.&lt;/p&gt;
&lt;p&gt;Next, let’s see the data in the CloudKit Dashboard:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Navigate to &lt;a href=&quot;https://icloud.developer.apple.com/dashboard/database/&quot;&gt;https://icloud.developer.apple.com/dashboard/database&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If you have multiple accounts, select the account you used in Xcode.&lt;/li&gt;
&lt;li&gt;Switch to the container you created in Xcode in the top left menu.&lt;/li&gt;
&lt;li&gt;Select Schema &amp;gt; Indexes and add an index as follows:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2024/09/Screenshot-2024-09-13-at-11.09.59-am.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is a critical step that you have to do for every CloudKit database if you want to be able to view the records in the dashboard. (Another gotcha that I missed trying to get the example working before watching the full tutorial video.)&lt;/p&gt;
&lt;p&gt;Now you can go into Data &amp;gt; Records, select Private Database, select TaskItem as the Record Type, and click Query Records. You should now see the tasks you created in the iOS app displayed in the table below:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2024/09/Screenshot-2024-09-13-at-11.20.34-am-1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Great! Now we have CloudKit working on iOS, let’s get it working on a webpage.&lt;/p&gt;
&lt;h3 id=&quot;vanilla-html--js&quot;&gt;Vanilla HTML + JS&lt;/h3&gt;
&lt;p&gt;Go to the CloudKit Dashboard &amp;gt; Settings &amp;gt; Tokens &amp;amp; Keys and click New API Token.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2024/09/Screenshot-2024-09-13-at-1.18.32-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Enter a name for the key and use the default settings:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2024/09/screencapture-icloud-developer-apple-dashboard-database-teams-995CUDNJAV-containers-iCloud-dev-steveharrison-TaskTracker1050-environments-DEVELOPMENT-tokens-2024-09-13-13_16_37.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Copy the API key value to the clipboard.&lt;/p&gt;
&lt;p&gt;Make sure you’ve cloned the &lt;a href=&quot;https://github.com/steveharrison/cloudkitjs-examples&quot;&gt;cloudkitjs-examples&lt;/a&gt; repo and then open &lt;code&gt;vanilla.html&lt;/code&gt; in your favourite code editor. Replace the &lt;code&gt;apiKey&lt;/code&gt; value with the one you just generated. Change &lt;code&gt;containerIdentifier&lt;/code&gt; to your container ID.&lt;/p&gt;
&lt;p&gt;Now &lt;code&gt;cd&lt;/code&gt; into the &lt;code&gt;cloudkitjs-examples&lt;/code&gt; directory and run &lt;code&gt;npx serve&lt;/code&gt; . Navigate to &lt;code&gt;http://localhost:3000/vanilla.html&lt;/code&gt; in the browser (or whatever port you see in the Terminal output from &lt;code&gt;npx serve&lt;/code&gt;). You need to run a local server rather than using &lt;code&gt;file://&lt;/code&gt; as CloudKit JS will set cookies.&lt;/p&gt;
&lt;p&gt;You should see a “Sign in with Apple” button: click it and follow the steps to sign in with your Apple ID (it should be the same ID you signed into the iOS Simulator with). Then you should see something similar to the following (you may have to refresh the page after signing in):&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2024/09/Screenshot-2024-09-13-at-1.06.31-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;If you type something into the text field and click Add, it will create a new record in CloudKit that you should be able to see in the dashboard and the iOS app. If you add new records there and refresh the web app, you should see the updates.&lt;/p&gt;
&lt;p&gt;The JS code in &lt;code&gt;vanilla.html&lt;/code&gt; is a lot simpler than the example Apple code at &lt;a href=&quot;https://cdn.apple-cloudkit.com/cloudkit-catalog/&quot;&gt;https://cdn.apple-cloudkit.com/cloudkit-catalog&lt;/a&gt;. I initially tried copying and pasting code from here, but they reference non-existent functions and specify all sorts of optional arguments, which is not a great starting point when you want to see the simplest way to use it. I used a combination of ChatGPT and manually going through the example code to figure out what the bare minimum is.&lt;/p&gt;
&lt;h3 id=&quot;nextjs-app&quot;&gt;Next.js app&lt;/h3&gt;
&lt;p&gt;While the vanilla example should be enough to see how to use CloudKit JS on the web, this is a very contrived example and most modern web apps will be built using a bundler and frameworks like Next.js, which is why I developed an example for this too.&lt;/p&gt;
&lt;p&gt;Open the &lt;code&gt;nextjs-cloudkit&lt;/code&gt; folder in your favourite code editor. Edit &lt;code&gt;store.ts&lt;/code&gt; with your API key and container ID, then start the project in Terminal:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;cd nextjs-cloudkit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;npm i&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;npm run dev&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You should see the following screen:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2024/09/Screenshot-2024-09-13-at-1.31.32-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Sign in and then you should see the following (refresh if tasks aren’t showing):&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2024/09/Screenshot-2024-09-13-at-1.31.08-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;You should be able to add a new task and see it at the top of the list. If you look at the code, you can see that Apple’s CloudKit JS was designed before Promises and &lt;code&gt;async/await&lt;/code&gt;, but that doesn’t mean we can’t wrap their methods in Promises ourselves and &lt;code&gt;await&lt;/code&gt; these wrapper functions, which is what I’ve done in &lt;code&gt;store.ts&lt;/code&gt;. Apple also recommends you host the CloudKit JS through their CDN, but we typically bundle JS libraries these days to avoid race conditions (you’ll notice we had to use a &lt;code&gt;window.addEventListener(&apos;cloudkitloaded&apos;)&lt;/code&gt; in the vanilla JS version) and dependencies breaking, so I’ve used a TypeScript wrapper called &lt;code&gt;tsl-apple-cloudkit&lt;/code&gt;, which also gives types for most of the library.&lt;/p&gt;
&lt;p&gt;These examples only cover some of the possibilities in CloudKit JS—we haven’t covered updating tasks (e.g. changing the &lt;code&gt;isCompleted&lt;/code&gt; field), deleting them, listening for new changes, etc. However, you should be able to use these functions in a similar way to the core reading/writing/auth functions that I’ve covered here.&lt;/p&gt;
&lt;p&gt;I hope this helps, and let me know if you have any issues / improvements to suggest. 🙂&lt;/p&gt;</content:encoded></item><item><title>How to avoid npm link issues</title><link>https://steveharrison.dev/how-to-avoid-npm-link-issues/</link><guid isPermaLink="true">https://steveharrison.dev/how-to-avoid-npm-link-issues/</guid><description>When using component libraries, you&apos;ll often need to use npm link in order to test changes to the component library in an app that uses the component libra</description><pubDate>Thu, 09 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;When using component libraries, you’ll often need to use &lt;code&gt;npm link&lt;/code&gt; in order to test changes to the component library in an app that uses the component library locally.&lt;/p&gt;
&lt;p&gt;Let’s say you’re working on a dashboard in a &lt;code&gt;company-portal&lt;/code&gt; project and you’re using a Button component from your company’s component library, &lt;code&gt;@my-org/component-library&lt;/code&gt;. It turns out you need an outline button variant that hasn’t been created yet in the component library.&lt;/p&gt;
&lt;p&gt;In the component library, you run &lt;code&gt;npm link&lt;/code&gt;. Then in &lt;code&gt;company-portal&lt;/code&gt;, you run &lt;code&gt;npm link @my-org/component-library&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;When it all goes smoothly, you can run local dev servers in the &lt;code&gt;company-portal&lt;/code&gt; and &lt;code&gt;@my-org/component-library&lt;/code&gt; projects and any new changes you make to the Button will reflect across in &lt;code&gt;company-portal&lt;/code&gt;. Then, when you’re satisfied with your component library changes, you can release a new NPM package, run &lt;code&gt;npm unlink&lt;/code&gt; in &lt;code&gt;company-portal&lt;/code&gt;, and then install the published package.&lt;/p&gt;
&lt;p&gt;However, oftentimes it does not go smoothly. Here are some scenarios I’ve run into and how to avoid them:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Make sure the Node versions are the same in both Terminal windows.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you use a tool such as &lt;code&gt;nvm&lt;/code&gt; to switch between different versions of Node, it can be easy to accidentally be running, say, Node 20 in one Terminal window and Node 22 in the other window, particularly if the default version in new windows is different from the version your project uses.&lt;/p&gt;
&lt;p&gt;Needless to say, &lt;code&gt;npm link&lt;/code&gt; only works within the current Node environment, so if you try to &lt;code&gt;npm link @my-org/component-library&lt;/code&gt; in a different Node environment, you’ll get an error saying that it can’t find it.&lt;/p&gt;
&lt;p&gt;One way to make it harder for these kinds of accidents to happen is to use a &lt;code&gt;.npmrc&lt;/code&gt; file to automatically set the version of Node for the project and to use the same Node version across all your projects.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Check that the symlink has actually been created.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Look in &lt;code&gt;node_modules&lt;/code&gt; and check that the symlink is valid. This will let you know whether the linking process succeeded or not. Sometimes I’ll find that this still has the installed package, which is a top culprit for your component library changes not appearing. Symlinks are displayed differently in different editors. I find that Finder (say that faster! 😉) in macOS displays them very clearly like so:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2025/10/Screenshot-2025-10-09-at-6.35.46---pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;My favourite editor, &lt;a href=&quot;https://nova.app/&quot;&gt;Nova&lt;/a&gt;, displays:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2025/10/Screenshot-2025-10-09-at-6.28.09---pm-1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Visual Studio Code displays a little arrow icon to the right, but then shows the contents of the symlinked folder right below, so pay attention to whether the arrow is there or not:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2025/10/Screenshot-2025-10-09-at-6.32.28---pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Check that the file you’re trying to import actually exists.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In some cases, the build process may not be working as intended in your component library, so even though the symlink is working, the files that &lt;code&gt;company-portal&lt;/code&gt; are importing are not there. So double-check that you’re running a dev server that generates the correct build files, or make sure you’ve run an &lt;code&gt;npm build&lt;/code&gt; command in the component library and that all assets such as JS, CSS, and image files are present in the expected &lt;code&gt;dist&lt;/code&gt; folder structure.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ditch the dev servers and create production builds in both projects.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sometimes, I’ve run into dev mode quirks and caching issues, so if all else is failing, stop the dev servers and do a full production build in both projects (e.g. if &lt;code&gt;company-portal&lt;/code&gt; is a Next.js app, &lt;code&gt;npm run build &amp;amp;&amp;amp; npm run start&lt;/code&gt;) to see if the same error occurs. Remember to do the component library build first. 🙂&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Clear &lt;code&gt;.next&lt;/code&gt; cache.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</content:encoded></item><item><title>Local-first development &amp; InstantDB</title><link>https://steveharrison.dev/local-first-development-instantdb/</link><guid isPermaLink="true">https://steveharrison.dev/local-first-development-instantdb/</guid><description>An emerging trend that I think is as exciting as AI and crypto is local-first development. The general idea is that apps should be able to work offline, su</description><pubDate>Fri, 04 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;An emerging trend that I think is as exciting as AI and crypto is &lt;a href=&quot;https://localfirstweb.dev&quot;&gt;local-first development&lt;/a&gt;. The general idea is that apps should be able to work offline, support realtime collaboration easily (e.g. editing the same document in Google Docs) when online, and that users should be able to own their data if they want to access it / your company goes out of business. There’s a whole community of researchers and developers working on it now. A popular app built around this philosophy is the note-taking app &lt;a href=&quot;http://obsidian.md&quot;&gt;Obsidian&lt;/a&gt;, where all your notes are stored as Markdown files in a folder on your computer. The Obsidian CEO published a post, &lt;a href=&quot;https://stephango.com/file-over-app&quot;&gt;File Over App&lt;/a&gt;, that talks about the benefits of this approach in more detail.&lt;/p&gt;
&lt;p&gt;I recommend reading Martin Kleppmann’s 2019 paper, &lt;a href=&quot;https://www.inkandswitch.com/local-first/&quot;&gt;You own your data, in spite of the cloud&lt;/a&gt;—it’s long but a great read!&lt;/p&gt;
&lt;p&gt;You can see a whole list of services emerging built around this philosophy, such as &lt;a href=&quot;http://turso.tech&quot;&gt;Turso&lt;/a&gt;, &lt;a href=&quot;http://watermelondb.dev&quot;&gt;WatermelonDB&lt;/a&gt;, and &lt;a href=&quot;http://pocketbase.io&quot;&gt;Pocketbase&lt;/a&gt;—and there’s a much longer list over at the &lt;a href=&quot;https://localfirstweb.dev&quot;&gt;local-first development website&lt;/a&gt;. Some of these integrate with existing Back Ends such as Supabase:&lt;/p&gt;
&lt;a href=&quot;https://supabase.com/blog/react-native-offline-first-watermelon-db&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Offline-first React Native Apps with Expo, WatermelonDB, and Supabase&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Store your data locally and sync it with Postgres using WatermelonDB!&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt;  &lt;span class=&quot;bookmark-publisher&quot;&gt;Supabase&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;/content/images/thumbnail/expo-watermelondb-supabase.jpg&quot; alt=&quot;Offline-first React Native Apps with Expo, WatermelonDB, and Supabase&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;a href=&quot;https://supabase.com/blog/local-first-expo-legend-state&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Local-first Realtime Apps with Expo and Legend-State&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Build local-first realtime web and mobile apps with Expo, Legend-State, and Supabase.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt;  &lt;span class=&quot;bookmark-publisher&quot;&gt;Supabase&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;/content/images/thumbnail/local-first-expo-legend_state-thumb.png&quot; alt=&quot;Local-first Realtime Apps with Expo and Legend-State&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;h3 id=&quot;instantdb&quot;&gt;InstantDB&lt;/h3&gt;
&lt;p&gt;One such tool that is backed by the co-founder of Firebase, James Tamplin, and Y Combinator founder Paul Graham, is &lt;a href=&quot;https://www.instantdb.com&quot;&gt;InstantDB&lt;/a&gt;. It’s a Supabase-style product, but has React wrappers that can hook your state right into the DB without any other layers in between.&lt;/p&gt;
&lt;p&gt;You obtain a reference to the database with your unique client ID:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF;--1:#005CC5&quot;&gt;db&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;init&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;Schema&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;({ appId: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF;--1:#005CC5&quot;&gt;APP_ID&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; })&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;And then in your React components, you can read data like so:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF;--1:#005CC5&quot;&gt;isLoading&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF;--1:#005CC5&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF;--1:#005CC5&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; db.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;useQuery&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;({ todos: {} })&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;There’s no need to reach for a state-management library—you can just replace &lt;code&gt;useState&lt;/code&gt; hooks with &lt;code&gt;useQuery&lt;/code&gt; hooks. It’s ridiculously simple—the way it should be!&lt;/p&gt;
&lt;p&gt;Other CRUD operations are also simple:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;addTodo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF;--1:#005CC5&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;db.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;transact&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;tx.todos[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;()].&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;update&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;text,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;done: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF;--1:#005CC5&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;createdAt: Date.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;now&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;(),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;deleteTodo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;todo&lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;Todo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;db.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;transact&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;(tx.todos[todo.id].&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;delete&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;toggleDone&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;todo&lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;Todo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;db.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;transact&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;(tx.todos[todo.id].&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;update&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;({ done: &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;todo.done }))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;deleteCompleted&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;todos&lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;Todo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;[]) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF;--1:#005CC5&quot;&gt;completed&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; todos.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;todo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; todo.done)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF;--1:#005CC5&quot;&gt;txs&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; completed.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;todo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; tx.todos[todo.id].&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;delete&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;db.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;transact&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;(txs)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;toggleAll&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;todos&lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;Todo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;[]) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF;--1:#005CC5&quot;&gt;newVal&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;todos.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;every&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;todo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; todo.done)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;db.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;transact&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;(todos.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;todo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; tx.todos[todo.id].&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;update&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;({ done: newVal })))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;However, there are many other features that platforms like Firebase and Supabase offer like auth and file storage—InstantDB is adding all of these too! You can integrate with Clerk and Google OAuth, and Storage is in beta:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;upload&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;files&lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;FileList&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF;--1:#005CC5&quot;&gt;file&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; files[&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF;--1:#005CC5&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6;--1:#616972&quot;&gt;// use the file&apos;s current name as the path&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; db.storage.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;upload&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;(file.name, file);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6;--1:#616972&quot;&gt;// or, give the file a custom name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; db.storage.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;upload&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF;--1:#032F62&quot;&gt;&apos;demo.png&apos;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;, file);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6;--1:#616972&quot;&gt;// or, put it in the `images` subdirectory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; db.storage.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;upload&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF;--1:#032F62&quot;&gt;&apos;images/demo.png&apos;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;, file);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6;--1:#616972&quot;&gt;// or, put it in a subdirectory for the current user,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6;--1:#616972&quot;&gt;// and restrict access to this file via Storage permissions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; db.storage.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;upload&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF;--1:#032F62&quot;&gt;`${&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;currentUser&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF;--1:#032F62&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF;--1:#032F62&quot;&gt;}/demo.png`&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;, file);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF;--1:#032F62&quot;&gt;&quot;file&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;onChange&lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;{(&lt;/span&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;upload&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;(e.target.files)} /&amp;gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;They also have an SDK for React Native and Vanilla JS, and an admin UI to inspect your database like Supabase.&lt;/p&gt;
&lt;p&gt;I recommend reading &lt;a href=&quot;https://www.instantdb.com/essays/db_browser&quot;&gt;this 2021 essay&lt;/a&gt; by one of the founders outlining their philosophy.&lt;/p&gt;
&lt;p&gt;Head over to their website and check out some of the &lt;a href=&quot;https://www.instantdb.com/examples#&quot;&gt;examples&lt;/a&gt;. You can also sign up and get a &lt;a href=&quot;https://www.instantdb.com/docs&quot;&gt;simple todo app&lt;/a&gt; working for free.&lt;/p&gt;
&lt;p&gt;It will be really exciting to see where this goes!&lt;/p&gt;</content:encoded></item><item><title>Next.js 16&apos;s Turbopack breaks npm link</title><link>https://steveharrison.dev/next-js-16s-turbopack-breaks-npm-link/</link><guid isPermaLink="true">https://steveharrison.dev/next-js-16s-turbopack-breaks-npm-link/</guid><description>Update: They&apos;ve now updated the documentation. I&apos;ve also edited this post to be less ranty.
Next.js 16 makes Turbopack the default bundler now, which brea</description><pubDate>Thu, 13 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; They’ve now &lt;a href=&quot;https://x.com/timneutkens/status/1988899567379644521&quot;&gt;updated the documentation&lt;/a&gt;. I’ve also edited this post to be less ranty.&lt;/p&gt;
&lt;p&gt;Next.js 16 makes Turbopack the default bundler now, which breaks &lt;code&gt;npm link&lt;/code&gt; to directories outside your project directory. The fix is to tell Next.js to look for files in the parent directory to the local component library folder:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;next.config.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; path &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF;--1:#032F62&quot;&gt;&quot;path&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF;--1:#005CC5&quot;&gt;nextConfig&lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;NextConfig&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;outputFileTracingRoot: path.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;(__dirname, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF;--1:#032F62&quot;&gt;&apos;../&apos;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;default&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; nextConfig;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This is assuming a folder structure like so:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;MyCompany/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;component-library (being npm linked into my-project)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;my-project&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;next.config.ts&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Alternatively, if you want to switch back to Webpack, you can pass &lt;code&gt;--webpack&lt;/code&gt; in as an option like so:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;next dev --webpack&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I’m surprised that Vercel doesn’t think the &lt;code&gt;outputFileTracingRoot&lt;/code&gt; option even warrants a mention on the &lt;a href=&quot;https://nextjs.org/docs/app/api-reference/turbopack#known-gaps-with-webpack&quot;&gt;Turbopack page’s “Known Gaps” section&lt;/a&gt; or the &lt;a href=&quot;https://nextjs.org/blog/next-16&quot;&gt;Next.js 16 page&lt;/a&gt;. I would have thought using &lt;code&gt;npm link&lt;/code&gt; and having component libraries in other repos locally would be common enough to at least get a paragraph.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;How did I come across this error? I &lt;code&gt;npm link&lt;/code&gt;ed our component library locally to do some debugging and started getting the following errors:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;./app/layout.tsx:1:1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;Module not found: Can&apos;t resolve &apos;@myorg/component-library/header&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;&amp;gt; 1 | import { Header } from &quot;@myorg/component-library/header&quot;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I went through my usual &lt;a href=&quot;__GHOST_URL__/how-to-avoid-npm-link-issues/&quot;&gt;npm link debugging checklist&lt;/a&gt;, but alas, it was still having resolution issues. That’s when I noticed &lt;code&gt;**▲ Next.js 16.0.1** (Turbopack)&lt;/code&gt; in the console logs.&lt;/p&gt;
&lt;p&gt;Turbopack? I thought you had to pass the &lt;code&gt;--turbopack&lt;/code&gt; flag for that, and I reverted this a few months ago because it had symlink issues. Then it dawned on me that Turbopack was now default (another team member had upgraded to the latest Next.js and I hadn’t yet checked out what was new) and the symlink issues were probably the culprit.&lt;/p&gt;
&lt;p&gt;The next step was to see if I could get the symlink resolution working with Turbopack. I found &lt;a href=&quot;https://github.com/vercel/next.js/issues/64472&quot;&gt;this GitHub issue&lt;/a&gt; and tried the experimental config value. It still didn’t work! Then I checked the logs:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;the --inspect option was detected, the Next.js router server should be inspected at 9230.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;⚠ Invalid next.config.ts options detected:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;⚠     Unrecognized key(s) in object: &apos;outputFileTracingRoot&apos; at &quot;experimental&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;⚠ See more info here: https://nextjs.org/docs/messages/invalid-next-config&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;⚠ `experimental.outputFileTracingRoot` has been moved to `outputFileTracingRoot`. Please update your next.config.ts file accordingly.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;▲ Next.js 16.0.1 (Turbopack)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;- Local:        http://localhost:3000&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;- Network:      http://[redacted]:3000&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;- Environments: .env.local&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;- Experiments (use with caution):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;? outputFileTracingRoot (invalid experimental key)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Aha! That config value was no longer experimental. So I added the value to the root config rather than in the &lt;code&gt;experiemental&lt;/code&gt; object, and voilà! The components got resolved.&lt;/p&gt;
&lt;p&gt;Just goes to show the importance of making incremental changes and verifying  everything is as expected after the change, and reading the logs. I tried the experimental config quickly yesterday and thought it didn’t work, but didn’t notice that the config value itself was invalid.&lt;/p&gt;
&lt;p&gt;And because &lt;a href=&quot;https://github.com/vercel/next.js/issues/64472#issuecomment-2077483493&quot;&gt;the answer with out-of-date config&lt;/a&gt; is locked now, I wasn’t able to add a comment to correct the config or mention it’s no longer an experimental flag. (Update: Vercel has added a comment now.)&lt;/p&gt;</content:encoded></item><item><title>Pre-record your demos</title><link>https://steveharrison.dev/pre-record-your-demos/</link><guid isPermaLink="true">https://steveharrison.dev/pre-record-your-demos/</guid><description>Meta was in the news recently for two failed live demos:
Mark Zuckerberg&apos;s Meta AI glasses demo failed in EPIC fashion today 🤣pic.twitter.com/O0UFeoCar7 </description><pubDate>Wed, 01 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Meta was in the news recently for two failed live demos:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Mark Zuckerberg’s Meta AI glasses demo failed in EPIC fashion today 🤣&lt;a href=&quot;https://t.co/O0UFeoCar7&quot;&gt;pic.twitter.com/O0UFeoCar7&lt;/a&gt;&lt;/p&gt;— Chief Nerd (@TheChiefNerd) &lt;a href=&quot;https://twitter.com/TheChiefNerd/status/1968508600575221894?ref_src=twsrc%5Etfw&quot;&gt;September 18, 2025&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Meta AI’s live demo failed for the entire minute 😢 &lt;a href=&quot;https://t.co/du4roaW0ER&quot;&gt;pic.twitter.com/du4roaW0ER&lt;/a&gt;&lt;/p&gt;— near (@nearcyan) &lt;a href=&quot;https://twitter.com/nearcyan/status/1968468841786126476?ref_src=twsrc%5Etfw&quot;&gt;September 18, 2025&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;While there were a lot of people who &lt;a href=&quot;https://x.com/mrdbourke/status/1968506328613347797&quot;&gt;said&lt;/a&gt; they’d rather see a live demo than pre-recorded content such as Apple events nowadays, I disagree: I think most demos should be pre-recorded.&lt;/p&gt;
&lt;p&gt;Here’s one of the reasons the Meta demos failed:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;So here’s the story behind why yesterdays live &lt;a href=&quot;https://twitter.com/hashtag/metaconnect?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#metaconnect&lt;/a&gt; demo failed - when the chef said “Hey Meta start Live AI” it activated everyone’s Meta AI in the room at once and effectively DDOS’d our servers 🤣 &lt;br /&gt;&lt;br /&gt;That’s what we get for doing it live!&lt;/p&gt;— Jake Steinerman (@jasteinerman) &lt;a href=&quot;https://twitter.com/jasteinerman/status/1968864479929634999?ref_src=twsrc%5Etfw&quot;&gt;September 19, 2025&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;There are many reasons why live demos can fail, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Network issues (WiFi/server/proxy/certificate/etc. issues)&lt;/li&gt;
&lt;li&gt;Computer setup issues if presenting from someone else’s computer&lt;/li&gt;
&lt;li&gt;External services going down when you need to do the demo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When Steve Jobs demoed the iPhone 4 at WWDC2010 (I was lucky enough to be in the room!), there were network issues caused by all the MiFi routers in the audience:&lt;/p&gt;

&lt;p&gt;And if you’re demoing something locally, you need to have your environment set up for the demo. Since most of the time you’re demoing something you &lt;em&gt;previously&lt;/em&gt; worked on, this prevents you from working on current stuff right up to the demo, because you’re worried you might break your local setup for the demo by installing different node modules, switching to different Git branches, etc.&lt;/p&gt;
&lt;p&gt;This is why I don’t ever do live demos now at work. I use Apple’s Screenshot app to do a recording beforehand, sometimes with audio if relevant, and then play this movie during my presentation. You can also choose to show mouse clicks in the recording, which helps the audience see what’s going on. And when presenting from a recording, you can scrub through it, so the audience doesn’t suffer through slow loading screens.&lt;/p&gt;
&lt;a href=&quot;https://support.apple.com/en-au/guide/mac-help/mh26782/mac&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Take screenshots or screen recordings on Mac&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;On your Mac, take pictures or recordings of the screen using Screenshot or keyboard shortcuts.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;/content/images/icon/favicon.ico&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Apple Support&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;/content/images/thumbnail/c3238b07472f8c1e7136c9444101c97a.png&quot; alt=&quot;Take screenshots or screen recordings on Mac&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;Sure, live demos serve a purpose when showing off final, polished products at keynotes—it was cool to see Steve Jobs &lt;a href=&quot;https://youtu.be/znxQOPFg2mo?si=psbv6P72bGTLXTQP&amp;amp;t=166&quot;&gt;video call live with Jonny Ive&lt;/a&gt; once everyone disabled their MiFi routers. For most demos, though, I think we all save ourselves and our audience some frustration and just present a recording.&lt;/p&gt;</content:encoded></item><item><title>Query strings &amp; cache keys</title><link>https://steveharrison.dev/query-strings-cache-keys/</link><guid isPermaLink="true">https://steveharrison.dev/query-strings-cache-keys/</guid><description>We were building a page that used query parameters to filter a list of items. I&apos;ll use a generic example for this post: let&apos;s say we have a Next.js SSR loc</description><pubDate>Mon, 27 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We were building a page that used query parameters to filter a list of items. I’ll use a generic example for this post: let’s say we have a Next.js SSR local news website where we have two views that display different lists of articles using a query string:  &lt;code&gt;?category=local-news&lt;/code&gt; or &lt;code&gt;?category=international-news&lt;/code&gt;. Our tester found a bug where you could enter the local news URL into the browser, and the page would display the international news list, and vice versa. But it wasn’t consistently reproducible. Sometimes it would load the expected view. This was even in Incognito, so there wasn’t any browser caching happening. And besides, a different query string should result in a different browser cache key, because this is a method that’s often used for cache busting: if you have a reference to &lt;code&gt;.my-file.js&lt;/code&gt; in Production, you can often change the reference to something like &lt;code&gt;.my-file.js?v=2&lt;/code&gt; to make sure the browser is going to download it again.&lt;/p&gt;
&lt;p&gt;To make matters even stranger, we noticed that the bug happened more frequently in one environment compared to the other, despite the exact same code having been deployed to each.&lt;/p&gt;
&lt;p&gt;Then another dev noticed in DevTools that when the bug occurred, the document HTTP request had an &lt;code&gt;X-Cache: Hit from cloudfront&lt;/code&gt; header, whereas when it worked as expected, there was an &lt;code&gt;X-Cache: Miss from cloudfront&lt;/code&gt; header.&lt;/p&gt;
&lt;p&gt;It turns out that the bug was happening in AWS CloudFront: the “Cache key settings” were configured to “None”, so it was completely ignoring the query string and would cache whichever page URL was loaded first. So if you loaded &lt;code&gt;?category=local-news&lt;/code&gt; and nothing was cached yet on CloudFront, it would cache that version of the page. Then if someone else on a different computer went to &lt;code&gt;?category=international-news&lt;/code&gt; , they would see the cached version of the page. We fixed the bug by changing “Cache key settings” to “All”, so that now different query strings would get cached separately, which is what we expected.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2024/05/Screenshot-2024-04-03-at-2.19.31-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;But what about the fact that the bug appeared at a different frequency in different environments? Turned out we had a different cache expiration time between the environments, so the one with the shortest cache expiry time would end up working as expected more often, because the bug only occurred when the page was cached.&lt;/p&gt;
&lt;p&gt;Although it ended up not being the culprit, it also turns out that &lt;a href=&quot;https://github.com/vercel/next.js/issues/45026&quot;&gt;Next.js didn’t include query strings in URL cache keys&lt;/a&gt; until early 2023. So it’s important to make sure all parts of your system are handling caching as you expect.&lt;/p&gt;
&lt;p&gt;Fun debugging!&lt;/p&gt;</content:encoded></item><item><title>window.showDirectoryPicker opens up a whole new world</title><link>https://steveharrison.dev/showdirectorypicker-opens-up-a-whole-new-world/</link><guid isPermaLink="true">https://steveharrison.dev/showdirectorypicker-opens-up-a-whole-new-world/</guid><description>Chrome introduced a new API, window.showDirectoryPicker() that allows the user to grant access to a directory on their computer and allow a website to read/write everything inside.</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Chrome introduced a new API, &lt;code&gt;window.showDirectoryPicker()&lt;/code&gt; that allows the user to grant access to a directory on their computer and allow a website to read/write everything inside.&lt;/p&gt;
&lt;p&gt;Examples that have been thrown around are a local-first notes app, where you can grant it access to a folder full of Markdown notes, and you own the data rather than it being squirrelled away in some cloud service.&lt;/p&gt;
&lt;p&gt;The other day I was getting nostalgic about Apple’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Aperture_(software)&quot;&gt;Aperture&lt;/a&gt; UI and wondered whether Claude could create a similarly-themed UI. I asked it to also use &lt;code&gt;window.showDirectoryPicker&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Here’s the &lt;a href=&quot;https://github.com/steveharrison/photo-viewer&quot;&gt;result&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;It reminds me of using Lightroom to view local files, but it’s a webpage! You can also create folders within the app and move photos into them, and it all happens on your filesystem.&lt;/p&gt;
&lt;p&gt;It doesn’t stop there though. Imagine whole photo &amp;amp; video editing apps using this: powerful UIs in your browser, but working with source files on your filesystem. People are &lt;a href=&quot;https://news.ycombinator.com/item?id=47471601&quot;&gt;already&lt;/a&gt; &lt;a href=&quot;https://www.reddit.com/r/webdev/comments/1qy8kwi/i_built_an_opensource_browserbased_video_editor/&quot;&gt;building&lt;/a&gt; WebGPU video editors in the browser—I really hope they also take advantage of new local-first storage opportunities like this.&lt;/p&gt;
&lt;p&gt;To take this prototype further, I asked Claude to create a simple compositing app inspired by Apple’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Shake_(software)&quot;&gt;Shake&lt;/a&gt;. Sure enough, &lt;a href=&quot;https://github.com/steveharrison/shake-compositor&quot;&gt;here’s&lt;/a&gt; a little node-based compositing app where you can draw a polygon and get it composited on top of your source image.&lt;/p&gt;

&lt;p&gt;All of this without a single line of hand-written code.&lt;/p&gt;
&lt;p&gt;It’s an amazing world we’re living in!&lt;/p&gt;</content:encoded></item><item><title>Tech roundup - Fri 28 April 2023</title><link>https://steveharrison.dev/tech-roundup-2023-04-28/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2023-04-28/</guid><description>Happy Friyay!
Adobe has released Firefly, a generative AI tool that allows you to create graphic designs from text prompts, convert pencil sketches into s</description><pubDate>Fri, 28 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Happy Friyay!&lt;/p&gt;
&lt;p&gt;Adobe has released &lt;a href=&quot;https://digitalsynopsis.com/design/adobe-firefly-creative-generative-ai/&quot;&gt;Firefly&lt;/a&gt;, a generative AI tool that allows you to create graphic designs from text prompts, convert pencil sketches into stylised vectors, and even generate a variety of textures that would suit a 3D model, and more. Check out the examples on the &lt;a href=&quot;https://www.adobe.com/sensei/generative-ai/firefly.html&quot;&gt;product page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I’ve also started using an AI text to speech tool called &lt;a href=&quot;https://share.speechify.com/mzuI6wK&quot;&gt;Speechify&lt;/a&gt;, which allows you to read web pages, PDFs, and even text in images aloud in a variety of high quality voices. I ended up listening to a bunch of web articles that I hadn’t got around to reading while doing chores / on the bus. I was previously using Apple’s text to speech accessibility feature in iOS, but the voice quality was lower and the user experience was irritating. Speechify allows you to adjust the playback speed if you’re into speed listening (I’m not 😂, but found 1.2x useful) and the UX is very slick. They also have Snoop Dogg, Gweneth Paltrow, and David Attenborough-style voices which are pretty entertaining! My goal is to finish making my way through Stephen Wolfram’s &lt;a href=&quot;https://writings.stephenwolfram.com/2023/02/what-is-chatgpt-doing-and-why-does-it-work/&quot;&gt;detailed explanation&lt;/a&gt; of how ChatGPT works: great detail but very dense!&lt;/p&gt;
&lt;p&gt;Last Friday, Suno AI released &lt;a href=&quot;https://github.com/suno-ai/bark&quot;&gt;Bark&lt;/a&gt;, a text to voice model that apparently is better than the VALL-E model that Microsoft &lt;a href=&quot;https://arstechnica.com/information-technology/2023/01/microsofts-new-ai-can-simulate-anyones-voice-with-3-seconds-of-audio/&quot;&gt;announced in January&lt;/a&gt;. Unlike the Microsoft model, you can actually &lt;a href=&quot;https://huggingface.co/spaces/suno/bark&quot;&gt;play around with Bark&lt;/a&gt; using their provided voices. It also allows you to add cues like &lt;code&gt;uh&lt;/code&gt; and &lt;code&gt;[laughs]&lt;/code&gt;, and preserves the ambient noise in the environment from the recording. VALL-E and Bark have the ability to be trained on your voice, but neither have released this to prevent misuse. Speaking of misuse of AI audio, I was pondering how this is going to impact audio and video evidence going forward, especially in trials, so did a bit of research. A lot of AI voice cloning tools are now adding inaudible watermarks to recordings generated with their tools. However, while being able to technically distinguish AI-generated audio can help in the justice system, it doesn’t prevent other types of misuse: scammers are already using AI voices &lt;a href=&quot;https://fortune.com/2023/03/05/scammers-ai-voice-cloning-tricking-victims-sound-like-relatives-needing-money/&quot;&gt;to sound like relatives in need of financial aid&lt;/a&gt;, so this tech definitely opens up Pandora’s box.&lt;/p&gt;
&lt;p&gt;Some interesting other startups to follow in this space are &lt;a href=&quot;https://www.resemble.ai&quot;&gt;Resemble.ai&lt;/a&gt; and &lt;a href=&quot;https://beta.elevenlabs.io&quot;&gt;ElevenLabs&lt;/a&gt;. I tried cloning my voice using the research preview of Resemble.ai, and I’m pretty impressed! They mention that it only works well with US voices so far, and you can tell that in the recording, but I still think it’s captured some of the tones in my voice!&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;audio-thumbnail&quot; /&gt;&lt;/p&gt;
&lt;p&gt;AI Steve0:00/0:131×Humane, an AI startup founded by ex-Apple employees, &lt;a href=&quot;https://www.theverge.com/2023/4/21/23692368/humane-ted-talk-imran-chaudhri-wearable-screenless-device-voice-commands-projected-screen&quot;&gt;demoed a wearable device&lt;/a&gt; that allows you to project onto your hand and also do &lt;a href=&quot;%5Bhttps://twitter.com/raywongy/status/1649306669921234948?s=61&amp;amp;t=I_fTtfX5ny6rixUqOLGTRA%5D(https://twitter.com/raywongy/status/1649306669921234948?s=61&amp;amp;t=I_fTtfX5ny6rixUqOLGTRA)&quot;&gt;live translation using your own voice&lt;/a&gt;. Super cool!&lt;/p&gt;
&lt;p&gt;Considering we’re only around a month away from Apple’s anticipated AR/VR headset, I decided to start looking into AR iOS development. I created a new Xcode project with the AR SceneKit template, which comes with an example 3D fighter jet model, and was able to play around with it on my iPhone with no code changes!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/04/IMG_3602.PNG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I’ve read online that you can export 3D models from &lt;a href=&quot;https://www.blender.org/&quot;&gt;Blender&lt;/a&gt; (an open source 3D creation app), convert them into Apple’s .scn format, and then use as objects in the AR scene, so my next goal is to get a basic cube exported from Blender working in the demo AR app. I’ll keep you posted how I go!&lt;/p&gt;
&lt;p&gt;Everyone says you need to find a co-founder, but check out &lt;a href=&quot;https://www.youtube.com/watch?v=v6IF-lVuvbs&quot;&gt;this video of a ‘solopreneur’ making over $1M/year with no employees&lt;/a&gt;! 😀&lt;/p&gt;
&lt;p&gt;Do you remember how everyone was complaining, including the Kardashians, about Instagram prioritising videos to compete with TikTok? Well it seems that it’s paid off, because &lt;a href=&quot;https://techcrunch.com/2023/04/26/meta-says-time-spent-on-instagram-grew-24-thanks-to-tiktok-style-ai-reel-recommendations/&quot;&gt;Meta said in their earnings call&lt;/a&gt; that time spent on Instagram grew 24% since they introduced Reels.&lt;/p&gt;
&lt;p&gt;Britain’s antitrust regular has blocked Microsoft’s $69B acquisition of gaming company Activision Blizzard (they make Call of Duty)—will be interesting to see what happens from here.&lt;/p&gt;
&lt;p&gt;Finally, for the guys out there who have always wondered what we’d look like with abs… wonder no more! There is now an &lt;a href=&quot;https://www.tinderglowup.com&quot;&gt;AI abs generator&lt;/a&gt; that you can train on headshots of yourself and you’ll get back a selection of images featuring a muscular, shirtless AI version of you. 😀 💪 Watch an entertaining video of their pitch to VCs &lt;a href=&quot;https://youtu.be/mRy-iCcLHl4&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Have a great weekend!&lt;/p&gt;</content:encoded></item><item><title>Tech roundup - Fri 5 May 2023</title><link>https://steveharrison.dev/tech-roundup-2023-05-05/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2023-05-05/</guid><description>So much innovation is happening at the moment, a truly exciting time to be alive! I don&apos;t have any trouble filling these weekly roundups.

News
Coinbase </description><pubDate>Fri, 05 May 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;So much innovation is happening at the moment, a truly exciting time to be alive! I don’t have any trouble filling these weekly roundups.&lt;/p&gt;
&lt;h3 id=&quot;news&quot;&gt;News&lt;/h3&gt;
&lt;p&gt;Coinbase and Apple both beat Wall Street earnings expectations yesterday!&lt;/p&gt;
&lt;p&gt;I found some fun images from a 1997 Wired article that included all the ways columnists thought Apple could save itself: &lt;a href=&quot;https://twitter.com/stevesi/status/1654328764501987328?s=61&amp;amp;t=LT7iYI6wMF9GWzhyzDWBiA&quot;&gt;https://twitter.com/stevesi/status/1654328764501987328?s=61&amp;amp;t=LT7iYI6wMF9GWzhyzDWBiA&lt;/a&gt;. My favourite is:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;Build a PDA for less than $250 that actually does something:  a) cellular email  b) 56-channel TV  c) Internet phone&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;Try adding a “1” before that $250! 😂📱&lt;/p&gt;
&lt;p&gt;Coinbase released &lt;a href=&quot;https://www.coinbase.com/blog/introducing-coinbase-international-exchange&quot;&gt;Coinbase International Exchange&lt;/a&gt;, which provides perpetual futures contracts for Bitcoin and Ethereum to institutional clients, a part of their push to expand outside of the US amid unfavourable regulatory conditions.&lt;/p&gt;
&lt;p&gt;Apple and Google have &lt;a href=&quot;https://techcrunch.com/2023/05/02/apple-and-google-team-up-on-industry-spec-to-make-bluetooth-tracking-devices-like-airtag-safer/&quot;&gt;teamed up&lt;/a&gt; on an industry spec to make Bluetooth tracking devices like AirTag safer.&lt;/p&gt;
&lt;p&gt;In the crypto world, memecoin &lt;a href=&quot;https://coinmarketcap.com/currencies/pepe/&quot;&gt;PEPE&lt;/a&gt; is going &lt;a href=&quot;https://decrypt.co/138872/meme-coin-mania-pepe-rockets-up-to-set-new-all-time-high&quot;&gt;ballistic&lt;/a&gt;: someone managed to turn $250 into $1.02M in the last two weeks! However, whether you can actually cash out is a &lt;a href=&quot;https://decrypt.co/137203/pepe-holder-turns-250-into-1m-in-four-days-but-can-they-sell-it&quot;&gt;different story&lt;/a&gt;, so some of these gains are “paper money”.&lt;/p&gt;
&lt;p&gt;An Israeli startup Alison &lt;a href=&quot;https://techcrunch.com/2023/05/01/ai-platform-to-analyze-creative-advertising-raises-5-1m-from-investors-including-a16z/&quot;&gt;raised $5.1M&lt;/a&gt; from investors including &lt;a href=&quot;https://a16z.com&quot;&gt;a16z&lt;/a&gt; for an AI platform that analyses which elements in your marketing material like typeface characters, colours, sounds, and text perform best, as well as elements that have worked well for competitors, and provides recommendations for new marketing imagery. Interesting idea.&lt;/p&gt;
&lt;p&gt;OpenAI released a ChatGPT plugin called &lt;a href=&quot;https://openai.com/blog/chatgpt-plugins#code-interpreter&quot;&gt;Code interpreter&lt;/a&gt;, which can import datasets and generate visualisations. In the example below, someone uploaded a dataset of Netflix movies and TV shows, provided the prompt &lt;code&gt;Draw visuals to explain what content is available in different countries. Answer it in the form of a multiple pages PDF download. No explanation required. just go!&lt;/code&gt;, and then got a PDF output with bar charts how many movies and TV shows Netflix has for each country.&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;GPT-4 is the new data scientist 🤯&lt;br /&gt;&lt;br /&gt;With the new OpenAI code interpreter model, you just have to upload the data and provide instructions in simple english. &lt;br /&gt;&lt;br /&gt;The model does everything from cleaning data to generating insightful visualizations on autopilot!! &lt;a href=&quot;https://t.co/EF8vveS7mY&quot;&gt;pic.twitter.com/EF8vveS7mY&lt;/a&gt;&lt;/p&gt;— Shubham Saboo (@Saboo_Shubham_) &lt;a href=&quot;https://twitter.com/Saboo_Shubham_/status/1653163644866252802?ref_src=twsrc%5Etfw&quot;&gt;May 1, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;In another example, Jason Calacanis uploaded a CSV of electric vehicle sales data and asked it &lt;code&gt;what are the three most interesting trends in this data&lt;/code&gt;. ChatGPT then came up with three trends: &lt;code&gt;Electric Vehicle Adoption Over Time&lt;/code&gt;, &lt;code&gt;Most Popular Electric Vehicle Makes and Models&lt;/code&gt;, and &lt;code&gt;Distribution of Electric Vehicle Types&lt;/code&gt;. He was able to ask it to filter out Tesla models and then ask specific questions about the dataset like &lt;code&gt;which states have had the most growth in 2021 and 2022&lt;/code&gt;. You can check out the full conversation &lt;a href=&quot;https://sharegpt.com/c/eDY53YP&quot;&gt;here&lt;/a&gt;. Pretty cool for speeding up reporting!&lt;/p&gt;
&lt;p&gt;Microsoft announced that &lt;a href=&quot;https://www.bing.com/new&quot;&gt;Bing Chat AI&lt;/a&gt; is now available to everyone with a Microsoft account, with plugins coming soon.&lt;/p&gt;
&lt;p&gt;Slack &lt;a href=&quot;https://slack.com/intl/en-au/blog/news/introducing-slack-gpt&quot;&gt;announced plans&lt;/a&gt; to build AI features such as summarising all the unread messages that you’ve missed.&lt;/p&gt;
&lt;p&gt;Last week I featured an &lt;a href=&quot;https://www.tinderglowup.com&quot;&gt;AI tool that gives you abs&lt;/a&gt;. Well this week, I found the opposite: an AI tool that dresses you up in corporate attire! It’s called &lt;a href=&quot;https://www.headshotpro.com&quot;&gt;HeadshotPro&lt;/a&gt; and will turn selfies in casual attire/environments into more formal headshots. It’s a cool idea instead of having to get a professional photoshoot, but they all look fairly synthetic at the moment, so I’m not really sure it’s gonna cut it. Once they get photorealistic though, I can see it being useful. (I’d still rather have an authentic photo of myself personally.)&lt;/p&gt;
&lt;p&gt;There are lots of talks on AI regulation happening at the moment. Elon Musk &lt;a href=&quot;https://www.reuters.com/world/us/elon-musk-meets-with-majority-leader-schumer-senate-office-aide-2023-04-26/&quot;&gt;met with Chuck Schumer&lt;/a&gt; last week, and this Thursday, Joe Biden and his team &lt;a href=&quot;https://www.whitehouse.gov/briefing-room/statements-releases/2023/05/04/readout-of-white-house-meeting-with-ceos-on-advancing-responsible-artificial-intelligence-innovation/&quot;&gt;had a meeting&lt;/a&gt; that included Sundar Pichai (CEO of Google), Demis Hassabis (the founder of Google DeepMind), Sam Altman (CEO of OpenAI), and Satya Nadella (CEO of Microsoft).&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Artificial Intelligence is one of the most powerful tools of our time, but to seize its opportunities, we must first mitigate its risks.&lt;br /&gt; &lt;br /&gt;Today, I dropped by a meeting with AI leaders to touch on the importance of innovating responsibly and protecting people’s rights and safety. &lt;a href=&quot;https://t.co/VEJjBrhCTW&quot;&gt;pic.twitter.com/VEJjBrhCTW&lt;/a&gt;&lt;/p&gt;— President Biden (@POTUS) &lt;a href=&quot;https://twitter.com/POTUS/status/1654237472065302528?ref_src=twsrc%5Etfw&quot;&gt;May 4, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;The White House has also &lt;a href=&quot;https://www.theverge.com/2023/5/4/23710533/google-microsoft-openai-white-house-ethical-ai-artificial-intelligence&quot;&gt;invested $140M&lt;/a&gt; into new AI research facilities.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.midjourney.com/home&quot;&gt;Midjourney&lt;/a&gt;, a generative image AI tool, released version 5.1 and apparently images of pelicans having a tea party are the best way to compare the new and old versions!&lt;/p&gt;
&lt;a href=&quot;https://simonwillison.net/2023/May/4/midjourney-51/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Midjourney 5.1&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Midjourney released version 5.1 of their image generation model on Tuesday. Here’s their announcement on Twitter—if you have a Discord account there’s a more detailed Discord announcement here. They claim …&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://simonwillison.net/favicon.ico&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt;  &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://static.simonwillison.net/static/2023/pelican-tea-party-5-1.jpg&quot; alt=&quot;Midjourney 5.1&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;h3 id=&quot;front-end-development&quot;&gt;Front End development&lt;/h3&gt;
&lt;p&gt;In the Front End development world, &lt;a href=&quot;https://vercel.com/&quot;&gt;Vercel&lt;/a&gt;, who provide infrastructure aimed at Front End developers and maintain &lt;a href=&quot;https://nextjs.org/&quot;&gt;Next.js&lt;/a&gt;, have shipped a tonne of cool new features this week. We’ve still got one day of announcements to go, but so far my favourite things they’ve introduced are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://vercel.com/storage/kv&quot;&gt;Vercel KV&lt;/a&gt;, a serverless Redis solution powered by &lt;a href=&quot;https://upstash.com/&quot;&gt;Upstash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vercel.com/storage/postgres&quot;&gt;Vercel Postgres&lt;/a&gt;, a serverless SQL database built for the Front End, powered by &lt;a href=&quot;https://neon.tech/&quot;&gt;Neon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vercel.com/storage/blob&quot;&gt;Vercel Blob&lt;/a&gt;, a solution to upload and serve files at the edge, powered by &lt;a href=&quot;https://www.cloudflare.com/lp/pg-r2/&quot;&gt;Cloudflare R2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nextjs.org/blog/next-13-4&quot;&gt;Next.js 13.4&lt;/a&gt; with Server Actions&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vercel.com/blog/visual-editing&quot;&gt;Visual Editing&lt;/a&gt;, powered by &lt;a href=&quot;https://www.sanity.io/&quot;&gt;Sanity&lt;/a&gt;, which brings a WYSIWYG editing UI that integrates with a headless CMS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With Vercel Postgres, you can write SQL to a fully-managed Postgres database in your React component files:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/05/Screenshot-2023-05-05-at-5.49.00-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/levelsio&quot;&gt;@levelsio&lt;/a&gt; probably &lt;a href=&quot;https://twitter.com/levelsio/status/1654053489004417026&quot;&gt;best described&lt;/a&gt; it as “index.php is BACK”. 😂 However, this time, with all of the &lt;a href=&quot;https://twitter.com/dan_abramov/status/1654323788811468800?s=20&quot;&gt;advances in client-side interaction&lt;/a&gt; included. Additionally, the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates&quot;&gt;tagged template literal&lt;/a&gt; syntax means that every variable included in the above SQL statement will be escaped properly, preventing SQL injection attacks. We have made some progress over the last 20 years! 😉&lt;/p&gt;
&lt;p&gt;The SQL will never be visible to the client because the above code snippet is using &lt;a href=&quot;https://nextjs.org/blog/next-13-4#server-actions-alpha&quot;&gt;Server Actions&lt;/a&gt;, another feature they’ve added to Next.js that enables you to mutate data on the server from the client without worrying about creating an in-between API layer yourself, no doubt inspired by &lt;a href=&quot;https://remix.run/&quot;&gt;Remix&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/05/Screenshot-2023-05-05-at-5.52.34-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;You will also be able to use Vercel Postgres with your favourite ORM like &lt;a href=&quot;https://www.prisma.io&quot;&gt;Prisma&lt;/a&gt; or &lt;a href=&quot;https://github.com/drizzle-team/drizzle-orm&quot;&gt;Drizzle&lt;/a&gt; rather than writing SQL.&lt;/p&gt;
&lt;p&gt;I’m also really excited about the &lt;a href=&quot;https://vercel.com/blog/visual-editing&quot;&gt;Visual Editing&lt;/a&gt; feature they announced. When I worked at Qantas, one of the main reasons for choosing Adobe Experience Manager (AEM) as the CMS was that content authors found visual editing much easier to use than a headless CMS. As such, it was difficult to ever switch to a modern CMS like &lt;a href=&quot;https://www.contentful.com&quot;&gt;Contentful&lt;/a&gt; because doing so would degrade the authoring experience even if it made our lives as developers better. Being able to integrate visual editing with a headless CMS is a nice step towards having a great developer experience as well as a great authoring experience. Vercel also state that “We’re working on an open specification for content source-mapping that will enable any CMS, ecommerce system or content source to support Visual Editing”. Exciting!&lt;/p&gt;
&lt;p&gt;The Amazon Prime Video team released a &lt;a href=&quot;https://www.primevideotech.com/video-streaming/scaling-up-the-prime-video-audio-video-monitoring-service-and-reducing-costs-by-90&quot;&gt;blog post&lt;/a&gt; this week that’s been making the rounds on Twitter. According to the subtitle:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The move from a distributed microservices architecture to a monolith application helped achieve higher scale, resilience, and reduce costs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Apparently they reduced costs by 90%! They do say that microservices were good at the beginning to get it off the ground, but this ties into a common theme these days where monolithic apps are coming back into fashion. It reminds me of a time at Qantas where a monorepo got refactored into a combination of shared and isolated repositories to reduce friction between multiple teams working on the same codebase. It was an absolute pain to use! You had to &lt;code&gt;npm link&lt;/code&gt; three different repos sometimes, compared to the original monorepo where if you needed to add some functionality to the shared components and then consume it in your app, you could do it in one go. Simple is often better!&lt;/p&gt;
&lt;p&gt;Thanks for reading! King Charles III’s coronation is &lt;a href=&quot;https://www.abc.net.au/news/2023-05-05/what-time-is-king-charles-coronation-queen-camilla/102285726&quot;&gt;tomorrow at 8pm&lt;/a&gt; Australian time: have a great weekend and long live the King!&lt;/p&gt;</content:encoded></item><item><title>Tech roundup - Fri 12 May 2023</title><link>https://steveharrison.dev/tech-roundup-2023-05-12/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2023-05-12/</guid><description>Happy Friday!
Wendy&apos;s is partnering with Google to create an ordering chatbot for their drive-thrus, and I know for certain the first thing I&apos;m going to s</description><pubDate>Fri, 12 May 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Happy Friday!&lt;/p&gt;
&lt;p&gt;Wendy’s is partnering with Google to &lt;a href=&quot;https://www.theverge.com/2023/5/9/23716825/wendys-ai-drive-thru-google-llm&quot;&gt;create an ordering chatbot&lt;/a&gt; for their drive-thrus, and I know for certain the first thing I’m going to say to it: “&lt;a href=&quot;https://www.youtube.com/watch?v=-cnVyvELhDA&quot;&gt;Good evening Wendy!&lt;/a&gt;”&lt;/p&gt;
&lt;p&gt;Shopify have &lt;a href=&quot;https://techcrunch.com/2023/05/08/shopify-sells-6-river-systems-to-new-owner/&quot;&gt;abandoned&lt;/a&gt; their push into the logistics business by selling 6 River Systems along with layoffs of 20% of their staff. They &lt;a href=&quot;https://techcrunch.com/2019/09/09/shopify-buys-warehouse-automation-tech-developer-6-river-systems-for-450-million/&quot;&gt;purchased&lt;/a&gt; 6 River Systems in 2019 for $450M.&lt;/p&gt;
&lt;p&gt;All eyes were on Google this Wednesday as they held their annual developer conference I/O in Mountain View, California. Highlights include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bard (Google’s ChatGPT competitor) is now public: &lt;a href=&quot;https://bard.google.com/&quot;&gt;https://bard.google.com/&lt;/a&gt;. On the roadmap is adding support for other languages and other forms of input like images and audio.&lt;/li&gt;
&lt;li&gt;PaLM 2, a new language model that powers Bard.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://techcrunch.com/2023/05/10/google-makes-its-text-to-music-ai-public/&quot;&gt;MusicLM&lt;/a&gt;, a text-to-music AI tool where you can provide a prompt like “soulful jazz for a dinner party” and it will generate songs for you. You can listen to some examples on their &lt;a href=&quot;https://google-research.github.io/seanet/musiclm/examples/&quot;&gt;research page&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://techcrunch.com/2023/05/10/universal-translator-dubs-and-lip-syncs-speakers-but-google-warns-against-misuse/&quot;&gt;Universal Translator&lt;/a&gt;, where you can dub videos in a different language using AI. The translated version is made to sound like the original voice and the video is edited so the lips match the translated version (!!)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Google are also working on adding AI to their existing products: you’ll be able to generate AI responses to &lt;a href=&quot;https://www.theverge.com/2023/5/10/23717120/google-search-ai-results-generated-experience-io&quot;&gt;search results&lt;/a&gt;, convert text messages you’re writing into different writing styles like “Excited”, “Chill”, or “Shakespeare”, and use AI to extract/remove elements from photos. For example, you can reposition or remove items, and improve the colour of the sky without affecting the rest of the photo:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/05/I-0_MagicEditor_BALLOONS.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Google Maps is getting &lt;a href=&quot;https://techcrunch.com/2023/05/10/google-maps-new-immersive-view-for-routes-feature/&quot;&gt;Immersive View&lt;/a&gt;, where you can view digital models of cities including traffic simulations, bike lanes, complex intersections, and parking based on billions of Street View and aerial images.&lt;/p&gt;
&lt;p&gt;GitHub Copilot finally has a competitor, &lt;a href=&quot;https://cloud.google.com/blog/products/application-modernization/introducing-duet-ai-for-google-cloud&quot;&gt;Duet AI for Google Cloud&lt;/a&gt;. What I think is most exciting about this is having a new UI for cloud platforms. Currently you have to wade through UIs like AWS Console and massive amounts of documentation to use these platforms: AI text prompts are an interesting solution to simplify this, where you can write “Help me deploy my app on cloud run” then see relevant documentation and CLI commands surfaced by the AI without leaving your IDE.&lt;/p&gt;
&lt;h3 id=&quot;is-the-future-screenless&quot;&gt;Is the future screenless?&lt;/h3&gt;
&lt;p&gt;In a &lt;a href=&quot;__GHOST_URL__/tech-roundup-2023-04-28/&quot;&gt;previous post&lt;/a&gt;, I linked to a few clips of a pocket-sized wearable that was recently demoed in a TED talk by &lt;a href=&quot;https://hu.ma.ne/&quot;&gt;Humane&lt;/a&gt;, a secretive startup founded by ex-Apple employees Imran Chaudhri and Bethany Bongiorno who worked on the development of the iPad. The full talk is now available on YouTube, and it’s worth a watch! While big tech companies like Meta and Apple are betting big on AR/VR devices that you strap onto your head, physically separating you from the world around you, Humane is taking a different approach of trying to make technology invisible and integrated seamlessly into our lives. Its wearable device can translate live from your pocket in an AI-generated voice that sounds like you (they have partnered with OpenAI), project a user interface onto your hand for receiving a call, and take videos from your pocket so you can be more present in a moment while also recording it. It reminds me of &lt;a href=&quot;https://www.goldenkrishna.com/&quot;&gt;Golden Krishna&lt;/a&gt;’s book, &lt;a href=&quot;https://www.amazon.com.au/Best-Interface-No-brilliant-technology/dp/0133890333?&amp;amp;_encoding=UTF8&amp;amp;tag=steveharrison-22&amp;amp;linkCode=ur2&amp;amp;linkId=c0fb2c1718effecf3d27c7e308774265&amp;amp;camp=247&amp;amp;creative=1211&quot;&gt;The Best Interface is No Interface&lt;/a&gt;. I’m really excited to see what they develop with this philosophy.&lt;/p&gt;

&lt;h3 id=&quot;an-ai-that-can-read-your-mind&quot;&gt;An AI that can read your mind?&lt;/h3&gt;
&lt;p&gt;Researchers have developed a model that they claim excels in behavioural and neural data, and “can decode activity from the visual cortex of the mouse brain to reconstruct a viewed video”. They’ve &lt;a href=&quot;https://www.nature.com/articles/s41586-023-06031-6&quot;&gt;published a paper about it in Nature&lt;/a&gt;. This is definitely getting into freaky territory!&lt;/p&gt;
&lt;a href=&quot;https://cebra.ai/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Learnable latent embeddings for joint behavioural and neural analysis&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Mapping behavioural actions to neural activity is a fundamental goal of neuroscience. As our ability to record large neural and behavioural data increases, there is growing interest in modeling neural dynamics during adaptive behaviors to probe neural representations. In particular, neural latent em…&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt;   &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://cebra.ai/static/img/overview.png&quot; alt=&quot;Learnable latent embeddings for joint behavioural and neural analysis&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;h3 id=&quot;gpt-while-controlling-your-data&quot;&gt;GPT while controlling your data&lt;/h3&gt;
&lt;p&gt;One of the major drawbacks with tools such as OpenAI is privacy and data security. Entering work information into ChatGPT leaks IP to OpenAI, who could use that data for training or any way they like. Companies such as JPMorgan and Amazon have banned employees from using ChatGPT, and the list is growing.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/imartinez/privateGPT&quot;&gt;privateGPT&lt;/a&gt; is a new project that addresses this concern by proving a GPT model that you can run locally without an internet connection. You provide it &lt;code&gt;.txt&lt;/code&gt; files with your dataset to ingest and then ask it questions via the command line. It takes around 20-30 seconds for a response, which is slower than ChatGPT and Bard, but without the data security concerns and free!&lt;/p&gt;
&lt;h3 id=&quot;open-source-ai&quot;&gt;Open-source AI&lt;/h3&gt;
&lt;p&gt;Also at Google, a &lt;a href=&quot;https://www.semianalysis.com/p/google-we-have-no-moat-and-neither&quot;&gt;leaked internal document&lt;/a&gt; from an AI researcher suggests that neither Google nor OpenAI have a moat, and open-source AI is quickly catching up. Meta’s LLaMA model that was leaked at the beginning of March has helped the open-source community improve quickly, in a matter of days in some cases, to the point where “the barrier to entry for training and experimentation has dropped from the total output of a major research organization to one person, an evening, and a beefy laptop”. I’d encourage you to read the whole article: it’s an interesting take on the 2023 AI arms race.&lt;/p&gt;
&lt;h3 id=&quot;multimodal-ai&quot;&gt;Multimodal AI&lt;/h3&gt;
&lt;p&gt;Meanwhile, over at Meta, they’ve released &lt;a href=&quot;https://imagebind.metademolab.com/&quot;&gt;ImageBind&lt;/a&gt;, where you can generate AI output from a range of different media (multimodal AI). For example, you can provide an audio clip of some running water and an image of some apples, and the AI will return an image of a bowl of apples under a running tap:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/05/result.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;what-ive-been-reading&quot;&gt;What I’ve been reading&lt;/h3&gt;
&lt;p&gt;Over the last few days, I’ve been really enjoying reading content from &lt;a href=&quot;https://dhh.dk/&quot;&gt;David Heinemeier Hansson&lt;/a&gt;, the creator of Ruby on Rails and co-founder of Basecamp, an online project management tool. If that wasn’t enough, he’s also won a class in Le Mans, the 24h endurance car race in France, and written the business book &lt;a href=&quot;https://www.amazon.com.au/ReWork-Change-Way-Work-Forever/dp/1785043021/ref=tmm_pap_swatch_0?_encoding=UTF8&amp;amp;qid=&amp;amp;sr=&amp;amp;_encoding=UTF8&amp;amp;tag=steveharrison-22&amp;amp;linkCode=ur2&amp;amp;linkId=95eb55fa410858ce6f28ce0269dd7e50&amp;amp;camp=247&amp;amp;creative=1211&quot;&gt;REWORK&lt;/a&gt; with Jason Fried.&lt;/p&gt;
&lt;p&gt;The cool thing about Basecamp is that they resisted the standard Silicon Valley approach of raising as much money as possible, and instead focused on creating a sustainable, profitable business. (I know, how radical! 😂) It’s paid off: he commissioned a &lt;a href=&quot;https://www.autoblog.com/2010/09/07/pagani-zonda-hh-commissioner-revealed-as-30-year-old-chicago-sof/&quot;&gt;Pagani Zonda HH&lt;/a&gt; and apparently “bought a vacation home in Italy just so he could drive the thing”. Jeff Bezos is also an investor.&lt;/p&gt;
&lt;p&gt;Having read REWORK over a decade ago, I rediscovered him the other day when devs on Twitter were discussing his recent &lt;a href=&quot;https://world.hey.com/dhh/programming-types-and-mindsets-5b8490bc&quot;&gt;post on programming types&lt;/a&gt; and how “TypeScript sucked out much of the joy I had writing JavaScript”. This is something that I can relate to: I personally feel like I’ve spent more time debugging TypeScript errors than I’ve ever lost due to errors that would have been caught in a type-safe environment.&lt;/p&gt;
&lt;p&gt;One of my favourite posts is &lt;a href=&quot;https://m.signalvnoise.com/reconsider/&quot;&gt;his take&lt;/a&gt; on how the startup scene has gotten crazy with people chasing unicorn status rather than building things that actually add value to society:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Part of the problem seems to be that nobody these days is content to merely put their dent in the universe. No, they have to fucking &lt;strong&gt;own&lt;/strong&gt; the universe. It’s not enough to be in the market, they have to &lt;strong&gt;dominate&lt;/strong&gt; it. It’s not enough to serve customers, they have to &lt;strong&gt;capture&lt;/strong&gt; them.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;He’s not afraid to speak his mind, which makes his content all the more fun to read! You can read his tech takes on his &lt;a href=&quot;https://world.hey.com/dhh&quot;&gt;blog&lt;/a&gt; and find out more about him on his &lt;a href=&quot;https://dhh.dk/&quot;&gt;personal website&lt;/a&gt;. Also, while it takes a while to get through, his 3.5h &lt;a href=&quot;https://tim.blog/2016/10/27/david-heinemeier-hansson/&quot;&gt;podcast episode&lt;/a&gt; with Tim Ferris is a great listen!&lt;/p&gt;
&lt;p&gt;Well that’s a wrap, again! Have a great weekend!&lt;/p&gt;</content:encoded></item><item><title>Tech roundup - Fri 19 May 2023</title><link>https://steveharrison.dev/tech-roundup-2023-05-19/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2023-05-19/</guid><description> This week, Apple rolled out Tap to Pay in Australia, with Westpac and Tyro Payments the first payment platforms to offer this feature to business customer</description><pubDate>Fri, 19 May 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This week, Apple rolled out &lt;a href=&quot;https://www.apple.com/au/newsroom/2023/05/apple-introduces-tap-to-pay-on-iphone-in-australia/&quot;&gt;Tap to Pay&lt;/a&gt; in Australia, with Westpac and Tyro Payments the first payment platforms to offer this feature to business customers.&lt;/p&gt;
&lt;p&gt;Apple also &lt;a href=&quot;https://www.macrumors.com/2023/05/16/apple-previews-ios-17-accessibility-features/&quot;&gt;previewed&lt;/a&gt; new iOS 17 accessibility features that include the ability to clone your own voice, aimed at people with early ALS who may lose their voice:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Users simply need to read along with a randomized set of text prompts to record 15 minutes of audio on an ‌iPhone‌ or ‌iPad‌. The feature uses on-device machine learning to keep users’ information secure and private, and integrates with Live Speech so users can speak with their Personal Voice.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Cool! Excited to now have Apple in the AI voice cloning arena. I really like the mention of on-device machine learning for security and privacy, something that a lot of the AI competition lacks. It will be exciting to see what other AI reveals Apple has in store for us at WWDC23.&lt;/p&gt;
&lt;p&gt;Last week, Apple also released Final Cut Pro and Logic Pro for iPad, which would have taken a massive amount of work, so congrats to the team and I think it’s a huge win to bring these tools to more people and provide creatives more flexibility!&lt;/p&gt;
&lt;a href=&quot;https://www.apple.com/au/newsroom/2023/05/apple-brings-final-cut-pro-and-logic-pro-to-ipad/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Apple brings Final Cut Pro and Logic Pro to iPad&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Apps introduce powerful features designed for iPad to deliver the ultimate mobile studio for video and music creators.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.apple.com/favicon.ico&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Apple Newsroom (Australia)&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://www.apple.com/newsroom/images/product/ipad/standard/Apple-iPad-Final-Cut-Pro-Logic-Pro-hero.jpg.og.jpg?202305180245&quot; alt=&quot;Apple brings Final Cut Pro and Logic Pro to iPad&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;Binance, the largest crypto exchange, &lt;a href=&quot;https://twitter.com/Binance_AUS/status/1659018600496373760&quot;&gt;has disabled PayID deposits in Australia&lt;/a&gt; “due to a decision by a third-party provider”, Cuscal. This has been a very convenient way to onboard AUD to crypto (it’s been my preferred option for a while), so will impact a lot of people in Australia.&lt;/p&gt;
&lt;a href=&quot;https://decrypt.co/140559/binance-australia-loses-crypto-ramp-payid-immediate-effect&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Binance Australia Loses Crypto Ramp PayID ‘With Immediate Effect’ - Decrypt&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Binance Australia has had to suspend PayID AUD deposits due to a decision by a third-party service provider.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://cdn.decrypt.co/wp-content/themes/decrypt-media/assets/images/favicon-32x32.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Decrypt&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://img.decrypt.co/insecure/rs:fill:1024:512:1:0/plain/https://cdn.decrypt.co/wp-content/uploads/2021/08/bitcoin-australia-gID_7.jpg@png&quot; alt=&quot;Binance Australia Loses Crypto Ramp PayID ‘With Immediate Effect’ - Decrypt&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;Amazon &lt;a href=&quot;https://nypost.com/2023/05/05/amazon-acquires-artificial-intelligence-firm-snackable-ai-to-boost-podcast-features/&quot;&gt;acquired Snackable.ai&lt;/a&gt;, a startup focused on putting “structure around your long video and audio instantly, automatically generating chapters, highlights, and more”. They’re planning to use the startup to improve their podcast experience in Amazon Music. Amazon wants to be a major AI player: Andy Jassy, Amazon’s CEO, has previously stated “If you look at the really significant leading large language models, they take many years to build, and many billions of dollars to build. And there will be a small number of companies that want to invest that time and money, and we’ll be one of them at Amazon.”&lt;/p&gt;
&lt;p&gt;There’s some cool stuff happening with AI-powered news readers. Instagram co-founder Kevin Systrom is now working on a news aggregator app with an &lt;a href=&quot;https://techcrunch.com/2023/03/07/the-tech-behind-artifact-the-newly-launched-news-aggregator-from-instagrams-co-founders/&quot;&gt;AI-powered feed&lt;/a&gt; called &lt;a href=&quot;https://artifact.news/&quot;&gt;Artifact&lt;/a&gt;, and it looks really slick. My favourite feature so far is it can summarise any article into three bullet points (using OpenAI). I tried it out and it worked flawlessly! That being said, it did miss a lot of the nuance in a Bloomberg opinion piece, so it depends on the article how useful it will be. For simple articles though, it does a great job of extracting key points. Artifact also allows you to search across multiple publications, follow specific journalists, and add comments within the app to articles. I think it’s nice to have a news product that is not tied to a social network and is focusing on &lt;a href=&quot;https://techcrunch.com/2023/05/15/kevin-systrom-explains-why-artifact-wants-to-treat-writers-like-the-creators-they-are/&quot;&gt;providing writers with direct relationships with their readers&lt;/a&gt;, regardless of where they place their writing.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/05/Artifact-UI-1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://curio.io/&quot;&gt;Curio&lt;/a&gt;, which provides news articles narrated, has &lt;a href=&quot;https://techcrunch.com/2023/05/17/audio-journalism-app-curio-can-now-create-personalized-episodes-using-ai/&quot;&gt;added&lt;/a&gt; AI features to create a custom audio episode based on a prompt such as “What are the latest developments in AI?” They use their existing library of publications, including the Wall Street Journal, Scientific American, and The Guardian, to train the model.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.anthropic.com/&quot;&gt;Anthropic&lt;/a&gt;, an AI company that targets the business market, &lt;a href=&quot;https://www.anthropic.com/index/100k-context-windows&quot;&gt;announced&lt;/a&gt; that their model Claude now has a 100K token limit, and demoed some cool capabilities like being able to load in a PDF of some API documentation and then ask how to do certain tasks. In contrast, ChatGPT’s GPT-4 Plus has a 32K token limit, which means that you can load in more data to Claude (such as an entire book like The Great Gatsby) to query with prompts. You can &lt;a href=&quot;https://www.anthropic.com/claude-in-slack&quot;&gt;try Claude in Slack&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;ai-tokens&quot;&gt;AI tokens&lt;/h3&gt;
&lt;p&gt;Speaking of tokens, what are tokens? &lt;a href=&quot;https://vaclavkosar.com/ml/Tokenization-in-Machine-Learning-Explained&quot;&gt;Here’s&lt;/a&gt; a good rundown. In summary:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Tokenization is splitting the input data into a sequence of meaningful parts e.g. piece data like a word, image patch, document sentence.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A word like “joyful” could be split into two tokens: “joy” and “ful”. How input is tokenised differs between models.&lt;/p&gt;
&lt;h3 id=&quot;regulating-ai&quot;&gt;Regulating AI&lt;/h3&gt;
&lt;p&gt;This week, Sam Altman, the CEO of OpenAI, &lt;a href=&quot;https://www.axios.com/2023/05/16/openai-ceo-sam-altman-artificial-intelligence-congress?utm_source=artifact&quot;&gt;testified&lt;/a&gt; before Congress about all things AI and discussed regulation. An interesting fact is that he doesn’t own any equity in OpenAI, meaning he won’t stand to make any money directly from the company, and he claimed that he does it “&lt;a href=&quot;https://twitter.com/unusual_whales/status/1658664383717978112?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1658664383717978112%7Ctwgr%5E0e9d97fd2a236fc3cc71f4009f3aac383cd8c58c%7Ctwcon%5Es1_&amp;amp;ref_url=https%3A%2F%2Fofficechai.com%2Fstartups%2Fopenai-ceo-sam-altman-says-he-has-no-equity-in-the-startup-is-doing-it-because-he-loves-it%2F&quot;&gt;because he loves it&lt;/a&gt;”.&lt;/p&gt;
&lt;h3 id=&quot;worldcoin&quot;&gt;Worldcoin&lt;/h3&gt;
&lt;p&gt;Another project that Sam Altman is working on currently is &lt;a href=&quot;https://worldcoin.org/&quot;&gt;Worldcoin&lt;/a&gt;, an Ethereum-based cryptocurrency designed to be a global identity and finance network. It has three parts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;World ID - A “world passport” designed to prove that you are a unique human, not a bot or AI, which could become more relevant in the future. You can get verified using a mobile phone number or an iris scan by one of their trusted partners using their Orb device. It would allow you to sign in to websites and apps without providing any personal data such as name, email, etc.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://coinmarketcap.com/currencies/worldcoin-org/&quot;&gt;Worldcoin&lt;/a&gt; - A utility and governance token (not listed on crypto exchanges yet).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://worldcoin.org/blog/announcements/introducing-world-app&quot;&gt;World App&lt;/a&gt; - A digital crypto wallet, already available for iOS and Android.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Distinguishing humans from bots is a real pain point at the moment for companies such as Twitter, so this is an interesting solution while preserving privacy by not having to share your mobile number directly with the website.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Digital identity has been an open problem since the invention of the internet. Even today, &lt;a href=&quot;https://www.mckinsey.com/~/media/McKinsey/Business%20Functions/McKinsey%20Digital/Our%20Insights/Digital%20identification%20A%20key%20to%20inclusive%20growth/MGI-Digital-identification-Report.ashx&quot;&gt;more than 50%&lt;/a&gt; of the world’s population doesn’t have a verifiable legal ID. As we venture into the exciting new Age of Artificial Intelligence, solving proof of personhood is more important than ever—specifically to ensure democratic access and governance of these systems, fairly distribute the benefits generated and know who and what to trust online.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I generally like the idea of verifying my identity with one trusted party and then being able to use this to sign in to other services without providing my details every time. I’d love to be able to use zero-knowledge proofs to not have to provide swathes of information like my driver’s licence, mobile number, payslips, etc. to less trusted third-parties such as websites, mobile phone providers, and real estate agents. Whether Worldcoin is the best trusted party to do this and whether they can achieve mass adoption remains to be seen.&lt;/p&gt;
&lt;p&gt;An interesting detail that I noticed in their blog post:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The native iOS and Android apps are also engineered to maximize inclusivity. At around 18MB they’re 5x smaller than the industry average. They are localized to multiple languages and support most active smartphones in the world (98.2% of Androids and 94.5% of iPhones to be precise), including some more than 10 years old.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Specifically focusing on including people with old devices is a rare thing in the development world, it’s a nice touch!&lt;/p&gt;
&lt;p&gt;They also mention using World ID as a way to provide Universal Basic Income in future and avoid people claiming their handout twice. Sam Altman has stated in his essay “&lt;a href=&quot;https://moores.samaltman.com/&quot;&gt;Moore’s Law for Everything&lt;/a&gt;” that AI could generate enough wealth to pay every adult in the U.S. $13.5K / year next decade, although &lt;a href=&quot;https://www.cnbc.com/2021/03/30/openai-ceo-sam-altman-says-ai-could-pay-for-ubi-experts-disagree.html&quot;&gt;not everyone agrees on this take&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There’s definitely some interesting tech here, but it also has a dystopian feeling about it to me. Something to keep an eye (or should I say, iris) on.&lt;/p&gt;
&lt;h3 id=&quot;saas-or-in-house&quot;&gt;SaaS or in-house?&lt;/h3&gt;
&lt;p&gt;An interesting story from some internet sleuths recently: in 2021, &lt;a href=&quot;https://blog.pragmaticengineer.com/datadog-65m-year-customer-mystery/&quot;&gt;Coinbase incurred a $65M bill for Datadog&lt;/a&gt;, a data analytics platform for cloud infrastructure. Apparently they looked at building their own analytics tools in 2022 to cut costs, but ended up staying with Datadog after they proposed a better deal. An engineer at Coinbase said that it would have taken a lot of effort + cost to build a similar experience in-house. An interesting read regarding costs and tooling!&lt;/p&gt;
&lt;h3 id=&quot;validating-json-data&quot;&gt;Validating JSON data&lt;/h3&gt;
&lt;p&gt;On the full stack development front, my co-worker used the &lt;a href=&quot;https://ajv.js.org/&quot;&gt;AJV&lt;/a&gt; JavaScript library this week in our Next.js API to make sure JSON in the request body was what we were expecting and return an error if not. AJV allows you to define JSON schemas and then validate data against them like so:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/05/Screenshot-2023-05-18-at-11.26.42-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Alright, that’s a wrap, see you next week!&lt;/p&gt;</content:encoded></item><item><title>Tech roundup - Fri 26 May 2023</title><link>https://steveharrison.dev/tech-roundup-2023-05-25/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2023-05-25/</guid><description>Generative AI in Photoshop
Photoshop has released some amazing new generative AI features this week! You can now select an area and generate new AI imager</description><pubDate>Fri, 26 May 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h3 id=&quot;generative-ai-in-photoshop&quot;&gt;Generative AI in Photoshop&lt;/h3&gt;
&lt;p&gt;Photoshop has released some amazing new generative AI features this week! You can now select an area and generate new AI imagery for that area with a text prompt. Three versions are generated and you can pick the best one. The tool can also remove objects by generating new background imagery. Photoshop previously had this ability with the Content-Aware Fill tool, but the new Generative AI tool is significantly better. In case you didn’t notice, in the the cover photo for this post, I’ve removed the Sydney Opera House and a jetty in the foreground. Here’s the original:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/05/Sydney-Harbour-Bridge-Australia-Sydney-2.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Using the Content-Aware Fill tool with default settings produced the below:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/05/Sydney-Harbour-Bridge-Australia-Sydney-3-1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;While the Content-Aware Fill version is still impressive, it duplicated some content where the Opera House used to be, and a shadow in the water around the jetty remains, whereas the generative AI version is more unique and everything fits together better.&lt;/p&gt;
&lt;p&gt;Some more examples:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/05/Harbour-Original.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/05/Harbour-Opera-House-removed.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/05/Harbour-Ferry-Removed.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/05/Harbour-New-City.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/05/Screenshot-2023-05-25-at-4.16.06-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;All it took to generate these images was to make a selection using standard Photoshop selection tools like Rectangular Marquee and Polygonal Lasso around the rough area of content to remove and then select Generative Fill.&lt;/p&gt;
&lt;p&gt;So far, I’ve focused on removing objects: what about generating them? Here’s the entrance to my co-working space:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/05/Commons-Cathedral.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;As you might guess, we don’t have a vaulted ceiling or chandelier:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/05/Commons-Cathedral-Original.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Let’s remove all the branding:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/05/Commons-Unbranded.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Interestingly, I was getting the little notch in the hand sanitiser station getting repeated in the generated version when I tried to just remove just the “C” on the side, but when I selected a larger area vertically to get a bit more background to sample, two of the three versions didn’t repeat the notch, and one of them matched the gradient perfectly.&lt;/p&gt;
&lt;p&gt;On the other hand, removing the branding from the wooden counter at the front was as simple as drawing a rough outline around it and a few clicks—that’s the first result it came up with!&lt;/p&gt;
&lt;p&gt;OK, let’s have some fun:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/05/Commons-Generative.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Each alteration here was generated separately: I drew a selection around the area and then provided one of the following prompts for that area:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a big puddle&lt;/li&gt;
&lt;li&gt;googly eyes&lt;/li&gt;
&lt;li&gt;a duck sitting on the bench&lt;/li&gt;
&lt;li&gt;a hole in the piping&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Can you imagine how easy it’s going to be now to create “spot the difference” images?! 😀 🖼️ 👨🏻‍🎨&lt;/p&gt;
&lt;p&gt;Try it out yourself by &lt;a href=&quot;https://creativecloud.adobe.com/campaign/creative-cloud?workflow=route-to-path&amp;amp;route-path=/apps/beta-apps?&quot;&gt;downloading Photoshop Beta&lt;/a&gt; through the Creative Cloud app and check out these tweets for more examples:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/Pinsky/status/1660973228641353730&quot;&gt;https://twitter.com/Pinsky/status/1660973228641353730&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/Jason/status/1661207297958514688&quot;&gt;https://twitter.com/Jason/status/1661207297958514688&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;more-generative-ai&quot;&gt;More generative AI&lt;/h3&gt;
&lt;p&gt;Another impressive example of generative AI: a new &lt;a href=&quot;https://huggingface.co/papers/2305.10973&quot;&gt;paper&lt;/a&gt; was published recently describing how you could re-orient subjects’ faces in photos. Check out the video below!&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Drag Your GAN: Interactive Point-based Manipulation on the Generative Image Manifold&lt;br /&gt;&lt;br /&gt;paper page: &lt;a href=&quot;https://t.co/Gjcm1smqfl&quot;&gt;&lt;a href=&quot;https://t.co/Gjcm1smqfl&quot;&gt;https://t.co/Gjcm1smqfl&lt;/a&gt;&lt;/a&gt; &lt;a href=&quot;https://t.co/XHQIiMdYOA&quot;&gt;pic.twitter.com/XHQIiMdYOA&lt;/a&gt;&lt;/p&gt;— AK (@_akhaliq) &lt;a href=&quot;https://twitter.com/_akhaliq/status/1659424744490377217?ref_src=twsrc%5Etfw&quot;&gt;May 19, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;h3 id=&quot;also-in-ai&quot;&gt;Also in AI&lt;/h3&gt;
&lt;p&gt;ChatGPT has now released plugins and web browsing to paid subscribers. The web browsing model means you can get AI responses based on current events and live data, rather than only their dataset from 2021. I asked it to “give me three of the best AI headlines recently”, and it produced the following:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/05/Screenshot-2023-05-25-at-11.13.25-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The NVIDIA news is only from the last day so shows ChatGPT is processing current information well. It also displays links to the news sources. In another query about what’s been happening recently in AI, I learnt that “Spotify is exploring the use of AI for creating host-read podcast ads that sound like real people​”, something I’d missed from my other news sources—cool!&lt;/p&gt;
&lt;p&gt;Maybe my next newsletter will generated with ChatGPT… 😉 🤖&lt;/p&gt;
&lt;p&gt;ChatGPT plugins are also very powerful, such as being able to generate a suggested itinerary for a trip with the Expedia plugin, or generate a flowchart from a text prompt with the Show Me plugin:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/05/Screenshot-2023-05-25-at-11.57.51-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;google-accessibility-enhancements-with-ai&quot;&gt;Google accessibility enhancements with AI&lt;/h3&gt;
&lt;p&gt;Google has &lt;a href=&quot;https://blog.google/outreach-initiatives/accessibility/global-accessibility-awareness-day-google-product-update/&quot;&gt;announced&lt;/a&gt; some new accessibility features, including one that seems useful for a lot of us: Chrome will now check URLs for typos and display suggested websites below. They’re also making wheelchair icons more prominent in Google Maps, and have released some improvements to their Lookout app for people with vision impairment, which uses AI to label objects in images and read scanned text aloud. Cool use-case for AI!&lt;/p&gt;
&lt;h3 id=&quot;some-non-ai-news&quot;&gt;Some non-AI news&lt;/h3&gt;
&lt;p&gt;Dyson have released their first robotic vacuum cleaner, the &lt;a href=&quot;https://www.dyson.com.au/products/vacuum-cleaners/robot/overview&quot;&gt;Dyson 360 Vis Nav&lt;/a&gt;, which looks very stylish in typical Dyson fashion:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/05/dyson.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;It will only set you back AUD$2,399.00, also in typical Dyson fashion. 😉&lt;/p&gt;
&lt;p&gt;Apple’s policies seem to be relaxing for Web3 crypto apps, possibly as a result of the Epic Games lawsuit. &lt;a href=&quot;https://stepn.com&quot;&gt;STEPN&lt;/a&gt;, the crypto fitness app, announced that they will now offer in-app payment options for their NFT sneakers, whereas previously these apps had to get their users to pay elsewhere.&lt;/p&gt;
&lt;p&gt;Sotheby’s made $2.4M from auctioning off NFTs from the bankrupt crypto hedge fund 3AC, with some items such as Fidenza #725 and Autoglyph #187 selling for over 500K each.&lt;/p&gt;
&lt;p&gt;You can now edit messages in WhatsApp up until 15min after you’ve sent them.&lt;/p&gt;
&lt;p&gt;Instagram is apparently planning to release a Twitter competitor.&lt;/p&gt;
&lt;p&gt;In the crypto world, &lt;a href=&quot;https://www.unciphered.com&quot;&gt;Unciphered&lt;/a&gt;, a company that specialises in recovering lost crypto, was able to break into a &lt;a href=&quot;https://trezor.io/trezor-model-t&quot;&gt;Trezor T&lt;/a&gt; hardware wallet using specialised equipment and extract the seed phrase. They claim the exploit cannot be fixed with a firmware update and would require a recall. A press representative for Trezor &lt;a href=&quot;https://www.coindesk.com/tech/2023/05/24/crypto-security-firm-unciphered-claims-ability-to-physically-hack-trezor-t-wallet/&quot;&gt;said&lt;/a&gt; that it looked like an “RDP downgrade attack”, which Trezor mentioned on their blog in early 2020, and that if a Trezor device is protected by a strong passphrase, the RDP downgrade is useless.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.ledger.com&quot;&gt;Ledger&lt;/a&gt;, a rival crypto hardware wallet maker, &lt;a href=&quot;https://www.coindesk.com/business/2023/05/23/crypto-wallet-provider-ledger-postpones-release-of-key-recovery-service-after-public-criticism/&quot;&gt;have delayed&lt;/a&gt; their proposed Ledger Recover service due to public backlash. The opt-in service would allow users to store encrypted copies of their seed phrases with three custodians and require KYC verification. Critics pointed out that Ledger had previously said that Ledger wallet private keys would never leave a device, and objected to the fact that Ledger’s code is not open-source so there is no way of publicly auditing it. In response, the Ledger CEO Pascal Gauthier said that they will open-source more parts of the Ledger codebase before releasing Ledger Recover.&lt;/p&gt;
&lt;h3 id=&quot;development&quot;&gt;Development&lt;/h3&gt;
&lt;p&gt;You may have heard of &lt;a href=&quot;https://en.wikipedia.org/wiki/Markdown&quot;&gt;Markdown&lt;/a&gt;, a syntax for basic document formatting developed by &lt;a href=&quot;https://en.wikipedia.org/wiki/John_Gruber&quot;&gt;John Gruber&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Aaron_Swartz&quot;&gt;Aaron Swartz&lt;/a&gt; in 2004. Well some people think there’s an opening for a new React JSX-based syntax for document formatting, and have released &lt;a href=&quot;https://mdxjs.com/&quot;&gt;MDXJS&lt;/a&gt;, which they’re calling “markdown for the component era”.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/05/Screenshot-2023-05-25-at-11.33.11-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I came across &lt;a href=&quot;https://www.emergetools.com/&quot;&gt;EmergeTools&lt;/a&gt; this week, who analyse iOS bundles and suggest ways to improve performance. They &lt;a href=&quot;https://twitter.com/emergetools&quot;&gt;tweet regularly&lt;/a&gt; about analysing different popular apps such as Airbnb’s iOS app, and it’s well worth a look if you’re interested in iOS development / app bundle sizes:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/emergetools/status/1610700661984739328?s=20&quot;&gt;https://twitter.com/emergetools/status/1610700661984739328?s=20&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Alright, that’s a wrap—have a great weekend and play around with Photoshop Beta! 🖌️ 🎉&lt;/p&gt;</content:encoded></item><item><title>Tech roundup - Fri 2 Jun 2023</title><link>https://steveharrison.dev/tech-roundup-2023-06-02/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2023-06-02/</guid><description>Well, it&apos;s only 4 sleeps away from the biggest Apple reveal since over a decade ago: the AR/VR headset! Apple have a nice little teaser AR graphic that you</description><pubDate>Fri, 02 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Well, it’s only 4 sleeps away from the biggest Apple reveal since over a decade ago: the AR/VR headset! Apple have a nice little &lt;a href=&quot;https://www.apple.com/uk/apple-events/&quot;&gt;teaser AR graphic&lt;/a&gt; that you can play with on your iPhone:&lt;/p&gt;
&lt;p&gt;0:00/1×And some specs have been &lt;a href=&quot;https://twitter.com/dsccross/status/1663595816521699331?s=61&amp;amp;t=nrvUwWVfyohr5W-3kr7oPA&quot;&gt;leaked&lt;/a&gt;: apparently each eye will have a 4K display with 5000 nits of brightness (in comparison, Microsoft’s HoloLens had less than 500 nits). I honestly can’t wait! You’ll be hearing all about it in the newsletter next Friday! 😀🧑‍💻🍏&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/AndrewHartAR&quot;&gt;Andrew Hart&lt;/a&gt;, who runs an AR agency, seems very prepared: he works on AR experiences for retail stores using Apple’s existing AR tools for iPhones. He recently tweeted this concept of what the headset experience could look like:&lt;/p&gt;
&lt;p&gt;0:00/1×I also love this indoor navigation video that he has pinned to his Twitter profile, where the UI switches between an AR view and map view depending on the tilt of the iPhone screen:&lt;/p&gt;
&lt;p&gt;0:00/1×Andrew has recently launched an open source framework called &lt;a href=&quot;https://github.com/HyperARCo/Mirador&quot;&gt;Mirador&lt;/a&gt; for building point-of-interest AR experiences with RealityKit, e.g. pointing your phone at London from a viewing platform and seeing pins with titles on famous landmarks. Apparently AR is generally location-agnostic and only relies on device motion in 3D space, with no concept of GPS or real-world location. Mirador allows you to provide an anchor and it then figures this out for you. Interesting!&lt;/p&gt;
&lt;h3 id=&quot;oopsgpt&quot;&gt;OopsGPT&lt;/h3&gt;
&lt;p&gt;A lawyer who filed a court document with the assistance of ChatGPT is now in &lt;a href=&quot;https://arstechnica.com/tech-policy/2023/05/lawyer-cited-6-fake-cases-made-up-by-chatgpt-judge-calls-it-unprecedented/&quot;&gt;hot water&lt;/a&gt; because he cited six non-existent cases. He apparently hadn’t heard of AI hallucinations and did not verify the output. He now has to prove next week why he shouldn’t be sanctioned.&lt;/p&gt;
&lt;p&gt;The document was part of the court case Roberto Mata vs. Avianca, where Mata is seeking damages for injuries caused by a metal food &amp;amp; drink cart striking his knee during a flight between El Salvador and New York in 2019.&lt;/p&gt;
&lt;p&gt;According to the &lt;a href=&quot;https://storage.courtlistener.com/recap/gov.uscourts.nysd.575368/gov.uscourts.nysd.575368.31.0_1.pdf&quot;&gt;court filing&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Six of the submitted cases appear to be bogus judicial decisions with bogus quotes and bogus internal citations.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The &lt;a href=&quot;https://storage.courtlistener.com/recap/gov.uscourts.nysd.575368/gov.uscourts.nysd.575368.32.1_1.pdf&quot;&gt;cases&lt;/a&gt; that ChatGPT made up are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Shaboon v. Egyptair, 2013 IL App (1st) 111279-U (Ill. App. Ct. 2013)&lt;/li&gt;
&lt;li&gt;Varghese v. China South Airlines Ltd, 925 F.3d 1339 (11th Cir. 2019). (ECF 21.)&lt;/li&gt;
&lt;li&gt;Petersen v. Iran Air 905 F. Supp 2d 121 (D.D.C. 2012)&lt;/li&gt;
&lt;li&gt;Martinez v. Delta Airlines, Inc., 2019 WL 4639462 (Tex. App. Sept. 25, 2019)&lt;/li&gt;
&lt;li&gt;Estate of Durden v. KLM Royal Dutch Airlines, 2017 WL 2418825 (Ga. Ct. App. June 5, 2017)&lt;/li&gt;
&lt;li&gt;Miller v. United Airlines, Inc., 174 F.3d 366 (2d Cir. 1999)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some cases cited did exist, but under different names:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The furnished copy of the “Varghese” decision cites Zicherman v Korean Airlines Co., Ltd., 516 F.3d 1237 (11th Cir. 2008), which does not appear to exist. The case appearing at that citation is, indeed, an Eleventh Circuit case decided in 2008, but is titled Miccosukee Tribe v. United States, 516 F.3d 1235 (11th Cir. 2008).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Oh well! I bet he won’t be making that mistake again! 😅&lt;/p&gt;
&lt;h3 id=&quot;china-is-already-regulating-ai&quot;&gt;China is already regulating AI&lt;/h3&gt;
&lt;p&gt;In April, the Chinese internet regulator published a draft regulation on generative AI. Some of it is quite similar to what people are advocating for in the West, such as ensuring transparency in how the data was collected and trained so it doesn’t infringe on IP/privacy. Other content, less so: it calls for identity verification for users of generative AI tools and that the output should “reflect the core values of socialism”. The penalty for breaking these rules is 100K RMB, which is just over AU$20K.&lt;/p&gt;
&lt;p&gt;Meanwhile, apparently the Biden Administration is conflicted on how much to regulate AI, with some White House and Commerce Department officials favouring strong regulation like the EU, while those in national security would prefer less regulation to keep the US competitive. I hadn’t thought about the national security angle—interesting!&lt;/p&gt;
&lt;h3 id=&quot;generative-ai-in-3d&quot;&gt;Generative AI in 3D&lt;/h3&gt;
&lt;p&gt;Arguably one of the coolest areas of generative AI is creating 3D models from text prompts! There’s a GitHub repository, &lt;a href=&quot;https://github.com/threestudio-project/threestudio&quot;&gt;threestudio&lt;/a&gt;, that has collated lots of different models together with examples of each. One such model is &lt;a href=&quot;https://ml.cs.tsinghua.edu.cn/prolificdreamer/&quot;&gt;ProlificDreamer&lt;/a&gt;. Here are some examples of textured 3D objects and the text prompts they were generated from:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/06/teaser.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/06/croissant_AdobeExpress.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Pretty cool!&lt;/p&gt;
&lt;p&gt;In addition to generating single objects, ProlificDreamer can also generate textured 3D environments, referred to as NeRFs (Neural Radiance Fields).&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/06/hamburger_AdobeExpress.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Speaking of NeRFs, check out &lt;a href=&quot;https://www.matthewtancik.com/nerf&quot;&gt;this paper&lt;/a&gt; on them from last year, with entire 3D photorealistic scenes being produced from 2D photos. They also have a technical talk video:&lt;/p&gt;

&lt;p&gt;Once the environments are generated, you can also tweak them such as changing the lighting. If this is where this stuff is now, imagine where it’s going to be in a couple of years! Amazing!&lt;/p&gt;
&lt;h3 id=&quot;old-masters-meet-generative-ai&quot;&gt;Old masters meet generative AI&lt;/h3&gt;
&lt;p&gt;Everyone has been having fun with generative AI in Photoshop, including &lt;a href=&quot;https://gizmodo.com/mona-lisa-ai-ai-image-generator-adobe-firefly-1850493009&quot;&gt;modifying famous paintings&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/FxE1VUiaAAAdmJn?format=jpg&amp;amp;name=large&quot; alt=&quot;Image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;In fact, the Mauritshuis Museum in the Netherlands is currently &lt;a href=&quot;https://gizmodo.com/ai-art-midjourney-ai-mauritshuis-museum-1850223802&quot;&gt;displaying&lt;/a&gt; an AI-modified version of the Girl with a Pearl Earring by Vermeer while it is on loan to the Rijksmuseum in Amsterdam until 4 June.&lt;/p&gt;
&lt;h3 id=&quot;wall-street-meets-ai&quot;&gt;Wall Street meets AI&lt;/h3&gt;
&lt;p&gt;Wall Street is experimenting with AI: check out &lt;a href=&quot;https://www.bloomberg.com/news/features/2023-05-31/jpmorgan-s-push-into-finance-ai-has-wall-street-rushing-to-catch-up&quot;&gt;this piece&lt;/a&gt; by Bloomberg. Interestingly enough, Sam Altman thinks that using AI in quantitative trading could be one of the most lucrative uses of AI in the near future. Think about what &lt;a href=&quot;https://www.rentec.com/Home.action?index=true&quot;&gt;Renaissance Technologies&lt;/a&gt; built (algorithmic trading that has returned ~66% annualised between 1988-2018, the best track record on Wall Street) getting supercharged by AI!&lt;/p&gt;
&lt;h3 id=&quot;a-city-for-longevity-research&quot;&gt;A city for longevity research&lt;/h3&gt;
&lt;p&gt;Longevity enthusiasts have created a pop-up city in Montenegro called &lt;a href=&quot;https://www.technologyreview.com/2023/05/19/1073374/i-just-met-the-founders-of-a-would-be-longevity-state/&quot;&gt;Zuzalu&lt;/a&gt;, which they are hoping to turn into their own jurisdiction so they don’t have to deal with regulators and can experiment more easily with medical tech to slow down ageing. What could possibly go wrong?&lt;/p&gt;
&lt;h2 id=&quot;dev&quot;&gt;Dev&lt;/h2&gt;
&lt;h3 id=&quot;railway-a-one-click-deployment-platform&quot;&gt;Railway: a one-click deployment platform&lt;/h3&gt;
&lt;p&gt;This week, I was looking for a simple way to deploy a simple Express.js API for free. After finding Vercel was not the right platform for this (they’re focused on Front End apps), I thought there must be a simple way to do this with a great developer experience like Vercel as opposed to using traditional infrastructure providers like AWS/Heroku/DigitalOcean. Well, I found it: &lt;a href=&quot;https://railway.app&quot;&gt;Railway&lt;/a&gt;! Their tagline is “bring your code, we’ll handle the rest”, and it really delivers on this (for the most part). I connected my GitHub account, selected the repository with my Express.js app, and then clicked Deploy. I did have to tell it which port to use and to deploy it to a public autogenerated domain, but it was still a very smooth experience!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/06/Screenshot-2023-06-01-at-10.45.20-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;im-speaking-at-two-meetups-in-sydney-next-week&quot;&gt;I’m speaking at two meetups in Sydney next week&lt;/h3&gt;
&lt;p&gt;What API was I deploying? It was a simple API to help with intercepting SMSes for end-to-end tests in Playwright, which you can learn more about when I present next Tuesday at &lt;a href=&quot;https://www.meetup.com/f-enders-sydney/events/293485959/?utm_medium=referral&amp;amp;utm_campaign=share-btn_savedevents_share_modal&amp;amp;utm_source=link&quot;&gt;The Sydney F-Enders meetup&lt;/a&gt;! I’ll also be talking about “What’s new in CSS in 2023” at &lt;a href=&quot;https://www.meetup.com/en-AU/sydcss/events/293754782/&quot;&gt;SydCSS&lt;/a&gt; next Thursday (an &lt;a href=&quot;https://www.meetup.com/sydcss/events/293754815/&quot;&gt;online stream&lt;/a&gt; is also available). Come along / tune in online!&lt;/p&gt;
&lt;h3 id=&quot;near-hello-world-example-in-gitpod&quot;&gt;NEAR “Hello world” example in GitPod&lt;/h3&gt;
&lt;p&gt;I’ve also been playing around with &lt;a href=&quot;https://near.org&quot;&gt;NEAR&lt;/a&gt;, a JavaScript-focused crypto platform. What I like about it is everything is JavaScript-based so I don’t have to overcome a language barrier when trying to understand smart contracts and dApps. I tried running their example project &lt;a href=&quot;https://docs.near.org/tutorials/examples/hello-near&quot;&gt;Hello NEAR&lt;/a&gt; using &lt;a href=&quot;https://www.gitpod.io&quot;&gt;Gitpod&lt;/a&gt;, which connects to your  GitHub account and clones an example repository, then sets up a VSCode-based dev environment that you can use in your browser. Neat!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/06/Screenshot-2023-06-01-at-10.43.55-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/06/Screenshot-2023-06-01-at-10.44.07-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/06/Screenshot-2023-06-01-at-10.44.59-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Gitpod will also manage installing dependencies and running the dev server for you, allowing you to play around with a full dev environment right within your browser! As if to prove how useful this is, I also tried to run this example project locally and immediately ran into a build error, which I would have had to first fix before being able to play around with the demo had Gitpod not been an option.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;If you’re into the TV show Succession like I am (it just finished this Monday), check out this video on how the main theme song was composed!&lt;/p&gt;

&lt;p&gt;Have a great weekend and a great WWDC23! 🍏&lt;/p&gt;</content:encoded></item><item><title>Tech roundup - Fri 9 Jun 2023</title><link>https://steveharrison.dev/tech-roundup-2023-06-09/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2023-06-09/</guid><description>Sydney F-Enders and SydCSS Presentations
This week, I gave a presentation on Advanced Testing in Playwright at the Sydney F-Enders meetup on Tuesday and W</description><pubDate>Fri, 09 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h3 id=&quot;sydney-f-enders-and-sydcss-presentations&quot;&gt;Sydney F-Enders and SydCSS Presentations&lt;/h3&gt;
&lt;p&gt;This week, I gave a presentation on &lt;em&gt;Advanced Testing in Playwright&lt;/em&gt; at the Sydney F-Enders meetup on Tuesday and &lt;em&gt;What’s new in CSS in 2023&lt;/em&gt; at SydCSS on Thursday. &lt;a href=&quot;https://github.com/steveharrison/presentations/tree/main&quot;&gt;Here are my slides&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;wwdc23&quot;&gt;WWDC23&lt;/h3&gt;
&lt;p&gt;Well the big news of the week of course was the release of the Apple Vision Pro on Tuesday. Very exciting! So far, the reports of people trying it on have been &lt;a href=&quot;https://techcrunch.com/2023/06/05/first-impressions-yes-apple-vision-pro-works-and-yes-its-good/&quot;&gt;quite positive&lt;/a&gt;. I’m personally excited to try it and think it will be fascinating to see the product evolve in the public spotlight as Apple refines it and finds the right market.&lt;/p&gt;
&lt;p&gt;I love the focus on AR: it reminds me of how the AirPods Max’s ambient mode sounds so similar to not having them on yet there is a complete barrier between your ears and the outside world. I’ve dismissed VR headsets before due to the low screen quality, so focusing on making an amazing screen seems like a good play to make something people actually want to spend time using.&lt;/p&gt;
&lt;p&gt;An interesting comment I read on Twitter is that the front-facing display (it displays an AR version of your eyes so it’s more natural when other people are interacting with you) is something that could have only been created at Apple: at Meta, where everyone is focused on metrics, no-one would approve investing that much on a “nice human touch” like that! We’ll see whether it pays off.&lt;/p&gt;
&lt;p&gt;Apple also &lt;a href=&quot;https://techcrunch.com/2023/06/06/apple-acquires-mira-a-startup-building-lightweight-ar-hardware/&quot;&gt;recently acquired Mira&lt;/a&gt;, a startup building lightweight AR hardware.&lt;/p&gt;
&lt;p&gt;I think some of my other favourite things from WWDC:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;15” MacBook Air — I love my 13” MBA but it’s great to have an option with more screen real estate that is still in a thin, light form factor.&lt;/li&gt;
&lt;li&gt;Autofill email codes similar to SMS authentication codes.&lt;/li&gt;
&lt;li&gt;Tap phones to share contact details or start a SharePlay session to listen to music together. (Remember sharing Apple earbuds? 😀)&lt;/li&gt;
&lt;li&gt;Widgets are back on Mac and iOS!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here are &lt;a href=&quot;https://www.apple.com/au/newsroom/2023/06/wwdc23-highlights/&quot;&gt;Apple’s WWDC23 highlights&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For gamers, Apple released a new &lt;a href=&quot;https://twitter.com/isaacmarovitz/status/1666209780031971341?s=61&amp;amp;t=8jCHKQp3UTaL1p37cjBjUg&quot;&gt;game porting toolkit&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And the best WWDC joke goes to:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/06/Screenshot-2023-06-09-at-1.35.19-am.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Not everyone &lt;a href=&quot;https://twitter.com/lachlanjc/status/1666511075569975297?s=61&amp;amp;t=8jCHKQp3UTaL1p37cjBjUg&quot;&gt;got it&lt;/a&gt;. 🤣&lt;/p&gt;
&lt;h3 id=&quot;edit-using-text-in-premiere-pro-thanks-to-ai&quot;&gt;Edit using text in Premiere Pro thanks to AI&lt;/h3&gt;
&lt;p&gt;This is seriously cool! You can transcribe interviews using AI and then re-arrange the text to generate a rough cut!&lt;/p&gt;

&lt;h3 id=&quot;relative-colours-in-css&quot;&gt;Relative colours in CSS&lt;/h3&gt;
&lt;p&gt;Here’s a cool new CSS colour feature: creating a variation of an existing colour.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/06/Screenshot-2023-06-09-at-12.55.17-am.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Read more here in the &lt;a href=&quot;https://www.w3.org/TR/css-color-5/#relative-colors&quot;&gt;CSS Color Module Level 5&lt;/a&gt; spec.&lt;/p&gt;
&lt;h3 id=&quot;css-scopes&quot;&gt;CSS Scopes&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://fullystacked.net/posts/scope-in-css/&quot;&gt;Here’s a nice overview&lt;/a&gt; of the new scoping features coming to CSS.&lt;/p&gt;
&lt;h3 id=&quot;anchor-positioning-in-css&quot;&gt;Anchor positioning in CSS&lt;/h3&gt;
&lt;p&gt;When building tooltips, there’s a common edge-case where if the tooltip is always anchored to the left of an element, it could appear off-screen. To solve this issue, we’ve relied on JavaScript popup libraries that calculate the bounds of the screen and then right-align the tooltip if the tooltip would appear off-screen.&lt;/p&gt;
&lt;p&gt;Now, we can do this natively in CSS with the new :anchor property! We simply specify default and fallback positioning:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/06/Screenshot-2023-06-08-at-11.40.37-am.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;sec-vs-crypto&quot;&gt;SEC vs crypto&lt;/h3&gt;
&lt;p&gt;It’s been a big week for crypto: the SEC have &lt;a href=&quot;https://www.sec.gov/news/press-release/2023-101&quot;&gt;sued Binance&lt;/a&gt; and &lt;a href=&quot;https://www.sec.gov/news/press-release/2023-102&quot;&gt;Coinbase&lt;/a&gt;, the two largest crypto exchanges for allegedly violating securities laws. This follows a long running dispute between the SEC and the crypto community on what constitutes a security. Coinbase and other crypto exchanges maintain that they have never listed securities. Now it looks like it will be settled by the courts (this could take years). It’s frustrating for the crypto community considering prominent crypto exchanges such as Coinbase and Kraken have openly called for clearer regulations.&lt;/p&gt;
&lt;p&gt;Binance lawyers allege that SEC Chair Gary Gensler offered to serve as an informal advisor for Binance in 2019. An &lt;a href=&quot;https://www.youtube.com/watch?v=2D3SbYzzJLc&quot;&gt;interesting video&lt;/a&gt; of Gary Gensler talking about crypto in 2019 has also been making the rounds, in which he praised the Algorand team. Now, Algorand is one of six cryptos that the SEC is now claiming are securities in a similar lawsuit filed against crypto exchange Bittrex in April.&lt;/p&gt;
&lt;p&gt;Powerledger, a Perth-based Aussie blockchain startup that “develops software solutions for the tracking, tracing and trading of renewable energy” is also one of the crypto tokens included in the Coinbase lawsuit.&lt;/p&gt;
&lt;p&gt;Interestingly enough, Bitcoin has been absent from all these lawsuits, because it’s proof-of-work. Gensler has stated that Bitcoin is a commodity but he thinks proof-of-stake tokens could be investment contracts that subject them to securities laws.&lt;/p&gt;
&lt;p&gt;Have a great weekend!&lt;/p&gt;</content:encoded></item><item><title>Tech roundup - Fri 16 June 2023</title><link>https://steveharrison.dev/tech-roundup-2023-06-16/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2023-06-16/</guid><description>NASA has released a new X-plane designed to reduce fuel consumption.
Ford and GM have agreed to adopt Tesla’s EV charging connector (as opposed to the CCS</description><pubDate>Fri, 16 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;NASA has released a &lt;a href=&quot;https://www.vox.com/recode/2023/2/2/23582152/nasa-x-plane-boeing-air-force-sustainable-aircraft&quot;&gt;new X-plane&lt;/a&gt; designed to reduce fuel consumption.&lt;/p&gt;
&lt;p&gt;Ford and GM have &lt;a href=&quot;https://apnews.com/article/tesla-connector-gm-ford-electric-vehicle-charging-a180cc55bbe3d7d7738a2690ca22ab0d&quot;&gt;agreed&lt;/a&gt; to adopt Tesla’s EV charging connector (as opposed to the CCS standard other manufacturers use), so customers will be able to use Tesla’s charging stations starting next year. Tesla has the largest EV charging network in the US. This further cements Tesla’s position as an infrastructure provider as well as a car manufacturer.&lt;/p&gt;
&lt;p&gt;YouTube has &lt;a href=&quot;https://techcrunch.com/2023/06/13/youtube-is-lowering-the-barrier-to-be-eligible-for-its-monetization-program/&quot;&gt;lowered its threshold&lt;/a&gt; for creators to earn ad revenue.&lt;/p&gt;
&lt;h3 id=&quot;ai-generated-qr-codes&quot;&gt;AI-generated QR codes&lt;/h3&gt;
&lt;p&gt;QR codes have become increasingly popular over the last few years, and while brands such as Instagram and Snapchat have used QR codes with branding elements integrated, the graphics are still fairly plain. Recently though, people have been experimenting with using Stable Diffusion, a text-to-image model released in 2022, to generate more interesting QR codes that are still scannable. Here are some examples:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/06/image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/06/QR-codes.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;You can view more examples in &lt;a href=&quot;https://twitter.com/rowancheung/status/1667921737600892929&quot;&gt;this Twitter thread&lt;/a&gt; and find out how to make them here:&lt;/p&gt;
&lt;a href=&quot;https://stable-diffusion-art.com/qr-code/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;How to make a QR code with Stable Diffusion - Stable Diffusion Art&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;A recent Reddit post showcased a series of artistic QR codes created with Stable Diffusion. Those QR codes were generated with a custom-trained ControlNet&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://i0.wp.com/stable-diffusion-art.com/wp-content/uploads/2022/12/favicon-32x32-1.png?fit=32%2C32&amp;amp;ssl=1&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Stable Diffusion Art&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://i0.wp.com/stable-diffusion-art.com/wp-content/uploads/2023/06/image-53.png&quot; alt=&quot;How to make a QR code with Stable Diffusion - Stable Diffusion Art&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;h3 id=&quot;more-ai-news&quot;&gt;More AI news&lt;/h3&gt;
&lt;p&gt;OpenAI &lt;a href=&quot;https://openai.com/blog/function-calling-and-other-api-updates&quot;&gt;released&lt;/a&gt; some improvements to their GPT models, including function calling which allows developers to more easily connect with external tools and APIs.&lt;/p&gt;
&lt;p&gt;Researchers have released a &lt;a href=&quot;https://arxiv.org/abs//2306.07954&quot;&gt;paper&lt;/a&gt; on ensuring consistency throughout AI-generated videos. Previously, these videos jumped around a lot.&lt;/p&gt;
&lt;p&gt;Mistral AI, a French startup based in Paris co-founded by former Meta and Google DeepMind AI engineers, is trying to take on OpenAI with a valuation &lt;a href=&quot;https://news.ycombinator.com/item?id=36326706&quot;&gt;now worth $260M&lt;/a&gt;. They plan to release their first models for text-based generative AI in 2024.&lt;/p&gt;
&lt;p&gt;Meta released &lt;a href=&quot;https://huggingface.co/spaces/facebook/MusicGen&quot;&gt;MusicGen&lt;/a&gt;, an AI music-generation tool similar to one previewed by Google earlier this year. I tried to get it to generate the theme from Succession in the style of Chopin but the result didn’t sound anything like it… I take it that it has not had the benefit of a training in classical music? 🤔 🎹&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/06/Screenshot-2023-06-15-at-10.12.16-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;0:00/1×Generated music from the prompt “succession theme in the style of chopin”### WWDC23 news&lt;/p&gt;
&lt;p&gt;Apple released their first &lt;a href=&quot;https://www.figma.com/community/file/1248375255495415511/Apple-Design-Resources-%E2%80%93-iOS-17-and-iPadOS-17&quot;&gt;official UI design kit for Figma&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;One of the sessions at WWDC23 was &lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2023/10121/&quot;&gt;What’s new in CSS&lt;/a&gt; and they covered some content different to the Google videos and my talk last week. Worth checking out! My favourite is &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/margin-trim&quot;&gt;&lt;code&gt;margin-trim&lt;/code&gt;&lt;/a&gt;, which can remove unwanted margins from children. For example, heading elements have top margins so they appear correctly in between blocks of text, but this can get in the way when using a heading element inside a container. &lt;code&gt;margin-trim&lt;/code&gt; provides a nice way of removing these margins:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/06/Screenshot-2023-06-15-at-10.25.16-pm-copy.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;It’s only supported in Safari Technology Preview but hopefully more browsers will adopt it soon!&lt;/p&gt;
&lt;h3 id=&quot;the-future-of-ethereum&quot;&gt;The future of Ethereum&lt;/h3&gt;
&lt;p&gt;Vitalik has released a detailed blog post: &lt;a href=&quot;https://vitalik.eth.limo/general/2023/06/09/three_transitions.html&quot;&gt;The Three Transitions&lt;/a&gt; that Ethereum needs to go through in order to achieve mass adoption. While there’s a lot that goes over my head, it’s an interesting read to understand the problems and complexity with building a useful cryptocurrency. The three technical transitions are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;strong&gt;The L2 scaling transition&lt;/strong&gt;&lt;/strong&gt; - everyone &lt;a href=&quot;https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698&quot;&gt;moving to rollups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;strong&gt;The wallet security transition&lt;/strong&gt;&lt;/strong&gt; - everyone moving to &lt;a href=&quot;https://vitalik.ca/general/2021/01/11/recovery.html&quot;&gt;smart contract wallets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;strong&gt;The privacy transition&lt;/strong&gt;&lt;/strong&gt; - making sure privacy-preserving funds transfers are available, and making sure all of the &lt;em&gt;other&lt;/em&gt; gadgets that are being developed (social recovery, identity, reputation) are privacy-preserving&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I enjoyed his version of the good/fast/cheap triangle:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/06/Screenshot-2023-06-12-at-12.58.00-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Some great points, because gas fees are currently a major disincentive for using Ethereum to pay for day-to-day things. Existing payment networks are really good for day-to-day purchases (i.e. buying something on your debit MasterCard has no transaction fee and happens within seconds), whereas with cryptocurrencies, you often have to pay a gas fee between a $1-$100 depending on how busy the network is. The transfers also typically take around 15min or so, much longer than you’ll be willing to wait around at the cashier making sure your purchase has gone through. With large international money transfers, however, it’s the exact opposite: existing payment networks like SWIFT charge $20-30 per transfer and it takes 1-3 business days. With crypto, if the network isn’t busy, your transaction fee could be a lot less, and it arrives in minutes not days without any intermediaries. Solving these problems means that crypto would offer a better or comparable experience for both everyday transactions and large money transfers, which would greatly help mass adoption.&lt;/p&gt;
&lt;p&gt;You can read the whole article &lt;a href=&quot;https://vitalik.eth.limo/general/2023/06/09/three_transitions.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Alright, that’s a wrap, have a great weekend!&lt;/p&gt;</content:encoded></item><item><title>Tech roundup - Fri 23 June 2023</title><link>https://steveharrison.dev/tech-roundup-2023-06-23/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2023-06-23/</guid><description>AI news
Meta has announced Voicebox, a generative AI model that can help with audio editing, sampling, and styling. It can remove unwanted background audi</description><pubDate>Fri, 23 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h3 id=&quot;ai-news&quot;&gt;AI news&lt;/h3&gt;
&lt;p&gt;Meta has &lt;a href=&quot;https://about.fb.com/news/2023/06/introducing-voicebox-ai-for-speech-generation/&quot;&gt;announced Voicebox&lt;/a&gt;, a generative AI model that can help with audio editing, sampling, and styling. It can remove unwanted background audio like car horns or dogs barking, and generate speech in different languages.&lt;/p&gt;
&lt;a href=&quot;https://about.fb.com/news/2023/06/introducing-voicebox-ai-for-speech-generation/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Introducing Voicebox: The Most Versatile AI for Speech Generation | Meta&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Voicebox is a generative AI model that can help with audio editing, sampling and styling.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://about.fb.com/wp-content/uploads/2021/10/meta-favicon.png?fit=16%2C16&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Meta&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://about.fb.com/wp-content/uploads/2023/06/Voicebox_Social-Share.png?w=1200&quot; alt=&quot;Introducing Voicebox: The Most Versatile AI for Speech Generation | Meta&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;TechCrunch &lt;a href=&quot;https://techcrunch.com/2023/06/13/itoka-wants-to-license-ai-generated-music-via-the-blockchain/?cx_testId=6&amp;amp;cx_testVariant=cx_undefined&amp;amp;cx_artPos=1#cxrecs_s&quot;&gt;covered startup Itoka&lt;/a&gt;, which is trying to provide AI music generation tools coupled with blockchain integration to keep track of licencing.&lt;/p&gt;
&lt;p&gt;Vercel have released an &lt;a href=&quot;https://sdk.vercel.ai&quot;&gt;online AI playground&lt;/a&gt; where you can enter text prompts and compare results from popular AI models such as Open AI’s GPT-4, Anthropic’s Claude, and Hugging Face’s Flan.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/06/Screenshot-2023-06-22-at-9.55.31-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Zaha Hadid Architects have trained an AI model to turn crumpled pieces of paper into architectural designs in the style of famous architects:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;zaha hadid architects trained a generative model that renders architectural designs in the style of renowned architects … from randomly crumpled pieces of paper.&lt;br /&gt;&lt;br /&gt;this one is in the style of frank gehry:&lt;br /&gt;&lt;br /&gt;🧵👇 &lt;a href=&quot;https://t.co/tS0uKMaAmC&quot;&gt;pic.twitter.com/tS0uKMaAmC&lt;/a&gt;&lt;/p&gt;— Siqi Chen (@blader) &lt;a href=&quot;https://twitter.com/blader/status/1670900940709429254?ref_src=twsrc%5Etfw&quot;&gt;June 19, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;People have been using Midjourney to create common household items in the style of popular brands such as Lamborghini:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Lamborghini products, midjourney AI&lt;br /&gt;&lt;br /&gt;1. Outdoor BBQ Grill &lt;a href=&quot;https://t.co/YYwOuV9L8V&quot;&gt;pic.twitter.com/YYwOuV9L8V&lt;/a&gt;&lt;/p&gt;— AK (@_akhaliq) &lt;a href=&quot;https://twitter.com/_akhaliq/status/1670832069038030873?ref_src=twsrc%5Etfw&quot;&gt;June 19, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;And here’s a video using AI to generate a website landing page:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Played with &lt;a href=&quot;https://twitter.com/vercel?ref_src=twsrc%5Etfw&quot;&gt;@Vercel&lt;/a&gt; AI. &lt;br /&gt;&lt;br /&gt;Built this landing pages generator prototype with Next.js, Tailwind CSS and OpenAI API in ~30 minutes 🤯 &lt;a href=&quot;https://t.co/X4I2QyNN2W&quot;&gt;pic.twitter.com/X4I2QyNN2W&lt;/a&gt;&lt;/p&gt;— Giuseppe (@giuseppegurgone) &lt;a href=&quot;https://twitter.com/giuseppegurgone/status/1671593661853728768?ref_src=twsrc%5Etfw&quot;&gt;June 21, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;h3 id=&quot;security&quot;&gt;Security&lt;/h3&gt;
&lt;p&gt;Music festivals are using QR codes on wristbands for a cashless experience, but a security researcher &lt;a href=&quot;https://twitter.com/intidc&quot;&gt;Inti De Ceukelaire&lt;/a&gt; has pointed out &lt;a href=&quot;https://inti.io/p/scan-to-scam-how-thieves-can-steal&quot;&gt;privacy and security issues&lt;/a&gt;. He analysed the QR codes in photos of people posing with their wristbands and was able to see their order history, potentially report their wristband as lost to transfer credits to the hacker’s wristband, and refund leftover credit to the hacker’s account instead.&lt;/p&gt;
&lt;p&gt;Inti has other interesting hacking examples, such as &lt;a href=&quot;https://twitter.com/intidc/status/1574263808607997953?s=61&amp;amp;t=l1sW5-Rv95q5cCBFTZuIeA&quot;&gt;tracking cars using licence plates&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;crypto&quot;&gt;Crypto&lt;/h3&gt;
&lt;p&gt;The crypto markets are trending upwards again because BlackRock has &lt;a href=&quot;https://www.wsj.com/articles/bitcoin-bonanza-on-tap-if-blackrock-etf-is-approved-2cb3002&quot;&gt;filed plans for its own Bitcoin ETF&lt;/a&gt;. All the previous proposals for a Bitcoin ETF have been rejected by the SEC, but the BlackRock proposal has some differences which has people bullish.&lt;/p&gt;
&lt;p&gt;And remember how lots of people were withdrawing their Ethereum once the Shapella upgrade was released earlier this year? Well according to Staking Rewards, staked ETH has still &lt;a href=&quot;https://www.stakingrewards.com/journal/100m-daily-inflows-ethereum-staking-thrives-after-shapella/?utm_source=newsletter&amp;amp;utm_medium=email&amp;amp;utm_campaign=staking-insider-1&quot;&gt;increased by 11%&lt;/a&gt; since.&lt;/p&gt;
&lt;h3 id=&quot;design&quot;&gt;Design&lt;/h3&gt;
&lt;p&gt;It occured to me as I was dragging a map this week that the macOS dragging hand icon is straight from the ’80s! And the thing I love about it is that it is clean and conveys the meaning effortlessly with the open and closed fist states—and which has clearly stood the test of time. Of course, even more famous is the standard pointer icon shown when you hover over web links, also from the same period. This led me down a rabbithole on the &lt;a href=&quot;https://ux.stackexchange.com/questions/52503/who-created-the-mac-mickey-pointer-cursor&quot;&gt;origin of the original Mac pointer cursor&lt;/a&gt; modelled after Mickey Mouse’s hand and a great article by Smithsonian about the designer, Susan Kare, designing icons for the first Apple Macintosh:&lt;/p&gt;
&lt;a href=&quot;https://www.smithsonianmag.com/innovation/how-susan-kare-designed-user-friendly-icons-for-first-macintosh-180973286/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;How Susan Kare Designed User-Friendly Icons for the First Macintosh&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;The graphic designer is receiving a Lifetime Achievement Award from Cooper Hewitt for her recognizable computer icons, typefaces and graphics&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.smithsonianmag.com/static/smithsonianmag/img/Smithsonianmagazine_apple_touch_icon.bcff19327dab.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Smithsonian Magazine&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://th-thumbnailer.cdn-si-edu.com/8rT-tCIEfo7l0x6gFD5W3xVtNWE=/fit-in/1600x0/https%3A%2F%2Ftf-cmsv2-smithsonianmag-media.s3.amazonaws.com%2Ffiler%2F1a%2Fff%2F1aff6159-3eb3-4a66-8eeb-e95bdc7f46b3%2Fsusankare.jpg&quot; alt=&quot;How Susan Kare Designed User-Friendly Icons for the First Macintosh&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;0:00/1×---&lt;/p&gt;
&lt;p&gt;Lots of stuff happening at Figma! They have recently acquired an AI design tools startup, &lt;a href=&quot;https://t.co/quy4BQKyln&quot;&gt;Diagram&lt;/a&gt;; introduced a new &lt;a href=&quot;https://www.figma.com/blog/introducing-dev-mode/&quot;&gt;developer mode&lt;/a&gt;; and added support for variables in designs:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Figma Variables lets GO. Been working on this for so long with our team over here at &lt;a href=&quot;https://twitter.com/figma?ref_src=twsrc%5Etfw&quot;&gt;@figma&lt;/a&gt;, and I’m so excited to see it finally launch. &lt;br /&gt;&lt;br /&gt;AMA about variables! Happy to answer q’s. &lt;a href=&quot;https://twitter.com/hashtag/Config2023?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#Config2023&lt;/a&gt; &lt;a href=&quot;https://t.co/N9EiZRROW9&quot;&gt;pic.twitter.com/N9EiZRROW9&lt;/a&gt;&lt;/p&gt;— Jacob Miller (@pwnies) &lt;a href=&quot;https://twitter.com/pwnies/status/1671552806078251008?ref_src=twsrc%5Etfw&quot;&gt;June 21, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;h3 id=&quot;development&quot;&gt;Development&lt;/h3&gt;
&lt;p&gt;Here’s a CSS tip that I tweeted this week:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Quick &lt;a href=&quot;https://twitter.com/hashtag/CSS?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#CSS&lt;/a&gt; snippet for truncating long text: &lt;a href=&quot;https://t.co/XikVWyDgQr&quot;&gt;pic.twitter.com/XikVWyDgQr&lt;/a&gt;&lt;/p&gt;— Steve Harrison (@stevenaharrison) &lt;a href=&quot;https://twitter.com/stevenaharrison/status/1671404747365179392?ref_src=twsrc%5Etfw&quot;&gt;June 21, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;Code snippet graphics like this are popular on Twitter and LinkedIn, and when I set out to create one, I found that there are a &lt;a href=&quot;https://www.google.com/search?q=code+image+generator&quot;&gt;myriad of tools&lt;/a&gt; out there to automate this. My favourite, which I used to generate the above, is &lt;a href=&quot;https://carbon.now.sh/&quot;&gt;Carbon&lt;/a&gt; from Vercel (man, do these guys ever stop?!): you simply enter the source code, select the language, choose styling options, and then download the image:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/06/Screenshot-2023-06-22-at-9.43.53-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Adobe also have a handy tool &lt;a href=&quot;https://express.adobe.com/tools/convert-to-mp4&quot;&gt;Express&lt;/a&gt; where you can do file conversion tasks easily like convert .mov to .mp4: it’s free but you have to log in/sign up for an Adobe account.&lt;/p&gt;
&lt;p&gt;Vercel have released the &lt;a href=&quot;https://vercel.com/blog/introducing-the-vercel-ai-sdk&quot;&gt;Vercel AI SDK&lt;/a&gt;, which allows you to easily stream API responses from AI models on the Front End.&lt;/p&gt;
&lt;p&gt;Canva have written about how they optimised AWS S3 costs:&lt;/p&gt;
&lt;a href=&quot;https://www.canva.dev/blog/engineering/optimising-s3-savings/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;How Canva saves millions annually in Amazon S3 costs&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Understanding our data and usage patterns was the real key.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.canva.dev/_next/static/media/apple-touch-180x180.b6aae4a9.webp&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;canva.dev&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://www.canva.dev/_next/static/media/thumbnail.364a86da.png&quot; alt=&quot;How Canva saves millions annually in Amazon S3 costs&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;Something I totally forgot about until John Gruber from &lt;a href=&quot;https://daringfireball.net&quot;&gt;Daring Fireball&lt;/a&gt; mentioned it this week is that the W3C have been working on a social networking standard since 2018, called &lt;a href=&quot;https://www.w3.org/TR/activitypub/&quot;&gt;ActivityPub&lt;/a&gt;. Facebook are apparently planning to adopt it, which is great, but that hasn’t stopped some people on Mastodon from &lt;a href=&quot;https://daringfireball.net/linked/2023/06/19/not-that-kind-of-open&quot;&gt;fighting against it&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Some interesting open source projects:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://tinygrad.org/&quot;&gt;tinygrad&lt;/a&gt; - a simple open source deep learning framework.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/a16z-infra/ai-getting-started&quot;&gt;a16z-infra/ai-getting-started&lt;/a&gt; - a Javascript AI getting started stack for weekend projects, including image/text models, vector stores, auth, and deployment configs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And finally, Elon Musk and Mark Zuckerberg are toying around with the idea of a &lt;a href=&quot;https://www.theverge.com/2023/6/21/23769263/mark-zuckerberg-elon-musk-fight-cage-match-worldstar&quot;&gt;cage fight&lt;/a&gt;. 🤣🥋&lt;/p&gt;
&lt;p&gt;Have a great weekend!&lt;/p&gt;</content:encoded></item><item><title>Tech roundup - Fri 30 June 2023</title><link>https://steveharrison.dev/tech-roundup-2023-06-30/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2023-06-30/</guid><description>AI
Toyota has released a generative AI tool for designing cars:
1. Toyota Design AI
Toyota (yes that company lagging in EVs somehow cares about AI) rele</description><pubDate>Fri, 30 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h3 id=&quot;ai&quot;&gt;AI&lt;/h3&gt;
&lt;p&gt;Toyota has released a generative AI tool for designing cars:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;1. Toyota Design AI&lt;br /&gt;&lt;br /&gt;Toyota (yes that company lagging in EVs somehow cares about AI)  released generative AI for car design: &lt;a href=&quot;https://t.co/W3ve7ppYEA&quot;&gt;pic.twitter.com/W3ve7ppYEA&lt;/a&gt;&lt;/p&gt;— Aakash Gupta 🚀 Product Growth Guy (@aakashg0) &lt;a href=&quot;https://twitter.com/aakashg0/status/1673555290162368513?ref_src=twsrc%5Etfw&quot;&gt;June 27, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;Artists have also been sharing what they’ve been able to achieve with Midjourney: check out the below example!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://www.reddit.com/r/midjourney/comments/14kicck/galloping_at_twilight/&quot;&gt;Galloping at Twilight&lt;/a&gt;
by
&lt;a href=&quot;https://www.reddit.com/user/futurewham&quot;&gt;u/futurewham&lt;/a&gt; in
&lt;a href=&quot;https://www.reddit.com/r/midjourney/&quot;&gt;midjourney&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Spotify may be banning AI-generated music, but you can listen to examples on SoundCloud, including based on popular artists such as Drake and Ariana Grande:&lt;/p&gt;
&lt;a href=&quot;https://artificialintelligenceradio.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Artificial Intelligence Radio - AI Generated Music&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Artificial Intelligence Radio plays AI-generated songs 24/7. Experience unique and creative music crafted by artificial intelligence.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://artificialintelligenceradio.com/apple-touch-icon.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;AI Generated Music&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://artificialintelligenceradio.com/cover.png&quot; alt=&quot;Artificial Intelligence Radio - AI Generated Music&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;One Twitter user said he listened to it during his workouts; others are less convinced.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gleamer.ai&quot;&gt;Gleamer&lt;/a&gt;, a 5-year-old French AI startup has raised €27 million Series B funding. They makes software to help radiologists diagnose and detect bone trauma lesions in scans.&lt;/p&gt;
&lt;h3 id=&quot;crypto&quot;&gt;Crypto&lt;/h3&gt;
&lt;p&gt;Crypto app Damus has failed Apple’s App Store review process because the Bitcoin tipping feature does not give Apple a 30% cut, despite the fact that the app does not unlock any content based on tipping:&lt;/p&gt;
&lt;a href=&quot;https://techcrunch.com/2023/06/26/decentralized-social-networking-app-damus-to-be-removed-from-app-store-will-appeal-decision/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Decentralized social networking app Damus to be removed from App Store, will appeal decision&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Damus, a decentralized social networking app backed by Twitter co-founder Jack Dorsey, is being removed from the App Store due to Apple’s strict payment rules.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://techcrunch.com/wp-content/uploads/2015/02/cropped-cropped-favicon-gradient.png?w=192&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;TechCrunch&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://techcrunch.com/wp-content/uploads/2023/06/damus1.jpg?resize=1200,675&quot; alt=&quot;Decentralized social networking app Damus to be removed from App Store, will appeal decision&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;And a little gem from the &lt;a href=&quot;https://www.sec.gov/news/press-release/2023-101&quot;&gt;SEC filing suing Binance&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/06/eb6f7334-dc8a-4a2c-8141-82ab42ed138c.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;now-for-some-non-ai-news&quot;&gt;Now for some non-AI news!&lt;/h3&gt;
&lt;p&gt;Tesla’s EV charging technology is on the fast track to become a US standard. Reuters &lt;a href=&quot;https://www.reuters.com/business/autos-transportation/tesla-charging-technology-put-fast-track-become-us-industry-standard-2023-06-27/&quot;&gt;reports&lt;/a&gt; that:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;SAE International aims to make an industry standard configuration of Tesla’s charging connector in six months or less, an official at the standards organization said on Tuesday.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The Biden administration had previously tried to make the Combined Charging System (CCS) the standard, similar to the EU.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://proton.me&quot;&gt;Proton&lt;/a&gt; have released &lt;a href=&quot;https://proton.me/pass&quot;&gt;Proton Pass&lt;/a&gt;, an open-source and encrypted password manager. It’s nice to see them gradually building a suite of work tools as a privacy-first alternative to offerings by Big Tech. TechCrunch reviews it &lt;a href=&quot;https://techcrunch.com/2023/06/28/proton-launches-its-password-manager-proton-pass/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Sydney recently had a &lt;a href=&quot;https://secretsydney.com/drone-show-vivid-sydney/&quot;&gt;drone show&lt;/a&gt; as part of Vivid, which was the largest to date in the Southern Hemisphere. It looks like the Northern Hemisphere isn’t slowing down either with this spectacular display in France:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Drones used in the Wine Festival celebrations illuminated the night.&lt;br /&gt;France, Bordeaux&lt;a href=&quot;https://t.co/wAAnUo4sk7&quot;&gt;pic.twitter.com/wAAnUo4sk7&lt;/a&gt;&lt;/p&gt;— Figen (@TheFigen_) &lt;a href=&quot;https://twitter.com/TheFigen_/status/1673302085629034502?ref_src=twsrc%5Etfw&quot;&gt;June 26, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;And a social media app, Unicorn, is &lt;a href=&quot;https://techcrunch.com/2023/06/26/irl-shut-down-fake-users/&quot;&gt;shutting down&lt;/a&gt; after admitting that 95% of its users were fake! It had raised more than $200M in VC funding and had a valuation of $1.1B.&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;1. Create 19 million fake users in db&lt;br /&gt;2. Raise $200M in VC funding&lt;br /&gt;3. ????&lt;br /&gt;4. PROFIT!!! &lt;a href=&quot;https://t.co/GiYKLfQiLK&quot;&gt;&lt;a href=&quot;https://t.co/GiYKLfQiLK&quot;&gt;https://t.co/GiYKLfQiLK&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;— @levelsio (@levelsio) &lt;a href=&quot;https://twitter.com/levelsio/status/1673661990248611844?ref_src=twsrc%5Etfw&quot;&gt;June 27, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;My favourite is looking back at glamorous PR articles like this one:&lt;/p&gt;
&lt;a href=&quot;https://www.forbes.com/sites/karineldor/2022/10/10/the-search-for-balance-led-abraham-shafi-to-his-billion-dollar-tech-unicorn/?sh=32727e66472f&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;The Search For Balance Led Abraham Shafi To His Billion Dollar Tech Unicorn&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;The importance of the journey versus the destination is a common life adage aimed at keeping us present and grateful, For tech founder Abraham “Abe” Shafi, it’s part of what inspired him to launch the billion dollar unicorn, IRL. Get inspired by his story this World Mental Health Day - and beyond.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://i.forbesimg.com/48X48-F.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Forbes&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://imageio.forbes.com/specials-images/imageserve/634354fe6a9dbcd15cde06a9/0x0.jpg?format=jpg&amp;amp;crop=1293,863,x0,y572,safe&amp;amp;height=900&amp;amp;width=1600&amp;amp;fit=bounds&quot; alt=&quot;The Search For Balance Led Abraham Shafi To His Billion Dollar Tech Unicorn&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;I’m sure he’ll have plenty of time to be ‘present’ in prison! 😂&lt;/p&gt;
&lt;p&gt;Some other interesting articles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Engineers are trying to &lt;a href=&quot;https://www.wsj.com/articles/the-race-to-build-a-better-air-conditioner-601b28fc?mod=hp_lead_pos6&quot;&gt;build better air conditioners&lt;/a&gt;. Given how bulky existing ones are, I’m all for this!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.wsj.com/video/series/in-depth-features/how-shazam-makes-unique-audio-fingerprints-to-identify-songs/9D7E86B7-73EF-4B92-8726-162E62B0EA3A?mod=hp_lead_pos5&quot;&gt;How Shazam Makes Unique Audio Fingerprints to Identify Songs&lt;/a&gt; (Video)&lt;/li&gt;
&lt;li&gt;Apple has &lt;a href=&quot;https://techcrunch.com/2023/06/27/apple-uploads-entire-first-episode-of-silo-on-twitter-ahead-of-season-finale/&quot;&gt;uploaded&lt;/a&gt; the first episode of Silo to Twitter before they release the finale.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.theverge.com/2023/6/27/23775117/microsoft-windows-11-cloud-consumer-strategy&quot;&gt;Microsoft wants to move Windows entirely to the cloud&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A cool browser extension that I found out about this week is &lt;a href=&quot;https://underpassapp.com/StopTheMadness/&quot;&gt;StopTheMaddness&lt;/a&gt;, which allows you to reverse stupid client-side code that websites add, such as blocking copy and paste in text fields “for security”. 🙄&lt;/p&gt;
&lt;p&gt;Also, I finally figured out why Google branding looks the way it does:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;It all makes sense now! &lt;a href=&quot;https://t.co/HDSi0d8KlZ&quot;&gt;pic.twitter.com/HDSi0d8KlZ&lt;/a&gt;&lt;/p&gt;— Steve Harrison (@stevenaharrison) &lt;a href=&quot;https://twitter.com/stevenaharrison/status/1674023508047953920?ref_src=twsrc%5Etfw&quot;&gt;June 28, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;Have a great weekend! 😀&lt;/p&gt;</content:encoded></item><item><title>Tech roundup - Fri 7 July 2023</title><link>https://steveharrison.dev/tech-roundup-2023-07-07/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2023-07-07/</guid><description>Well the big talk of the week: Meta has launched Threads, their Instagram Twitter competitor and it passed 2 million users in the first 2 hours! I&apos;ve playe</description><pubDate>Fri, 07 Jul 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Well the big talk of the week: Meta has launched Threads, their Instagram Twitter competitor and it passed 2 million users in the first 2 hours! I’ve played around with it on the first day: the UI is nicely done and leveraging your Instagram network is a pretty cool way for it to grow. Only time will tell whether it becomes a Twitter rival or the next Google+, but it’s a good start! You can follow me at &lt;code&gt;steve_harrison&lt;/code&gt;.&lt;/p&gt;
&lt;a href=&quot;https://techcrunch.com/2023/07/05/threads-passes-2-million-downloads-in-2-hours/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Threads passes 10M sign-ups in 7 hours&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;It’s day one for Threads, Meta’s new Twitter clone, and new users are signing up in impressively huge numbers already.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://techcrunch.com/wp-content/uploads/2015/02/cropped-cropped-favicon-gradient.png?w=192&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;TechCrunch&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://techcrunch.com/wp-content/uploads/2023/07/image003.png?resize=1200,675&quot; alt=&quot;Threads passes 10M sign-ups in 7 hours&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;Humane, the AI startup founded by ex-Apple designers, has put out a press release about their first product to launch: the &lt;a href=&quot;https://hu.ma.ne/media/humane-names-first-device-humane-ai-pin&quot;&gt;AI Pin&lt;/a&gt;. TechCrunch covers it &lt;a href=&quot;https://techcrunch.com/2023/06/30/secretive-hardware-startup-humanes-first-product-is-the-ai-pin/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;a href=&quot;https://hu.ma.ne/media/humane-names-first-device-humane-ai-pin&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Humane reveals the name of first device, the Humane Ai Pin.&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Humane, Inc. today announced its first device will be called the Humane Ai Pin, the latest detail to be revealed ahead of its launch later this year. The Humane Ai Pin is a new type of standalone device with a software platform that harnesses the power of AI to enable innovative personal computing e…&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://hu.ma.ne/favicon/humane-fav-228.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Humane logo&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://images.prismic.io/humane-content/6170f922-46a0-4102-b6a1-bdb57457aba9_Humane-Ai-Pin.2023.jpg?auto=compress,format&quot; alt=&quot;Humane reveals the name of first device, the Humane Ai Pin.&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;A new startup, &lt;a href=&quot;https://80.lv/articles/kaedim-a-cool-ai-for-turning-2d-images-into-3d-models&quot;&gt;Kaedim&lt;/a&gt;, promises to turn your 2D images into 3D models and auto-generate textures for a fee. You can download the resulting 3D models in popular formats such as obj, fbx, glb, and gltf.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://techcrunch.com/2023/07/03/audio-pen-is-a-great-web-app-for-converting-your-voice-into-text-notes/?tpcc=tcplustwitter&quot;&gt;AudioPen&lt;/a&gt; is a new AI startup that will convert your voice notes into text notes.&lt;/p&gt;
&lt;p&gt;Midjourney has released a new &lt;a href=&quot;https://www.creativebloq.com/news/midjourney-panning&quot;&gt;panning feature&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Check out this &lt;a href=&quot;https://twitter.com/javilopen/status/1675641442654380033?s=61&amp;amp;t=1pO0kSdBalUa4oOB1wae6w&quot;&gt;cool example&lt;/a&gt; of using generative AI to scale up imagery:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/07/Screenshot-2023-07-07-at-12.18.09-am.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Google has &lt;a href=&quot;https://www.theverge.com/2023/7/5/23784257/google-ai-bard-privacy-policy-train-web-scraping&quot;&gt;updated its privacy policy&lt;/a&gt; to disclose that they may train their AI services on public data scraped from the web.&lt;/p&gt;
&lt;p&gt;The protests on Reddit seem to have been &lt;a href=&quot;https://www.theverge.com/23779477/reddit-protest-blackouts-crushed&quot;&gt;successfully squashed&lt;/a&gt;, and StackOverflow has &lt;a href=&quot;https://www.zdnet.com/article/stack-overflow-joins-reddit-and-twitter-in-charging-ai-companies-for-training-data/&quot;&gt;joined&lt;/a&gt; Twitter and Reddit in planning to charge for API access in response to AI startups using these services for training AI models. Elon Musk has mentioned that they had to bring up new servers at Twitter to handle the increased load from AI startups.&lt;/p&gt;
&lt;p&gt;The CEO of Stability AI has &lt;a href=&quot;https://decrypt.co/147191/no-human-programmers-five-years-ai-stability-ceo&quot;&gt;said in an interview&lt;/a&gt; that “There will be no programmers in five years”. The company wants to get involved with AI projects in a whole range of sectors, from building models for protein folding, DNA analysis, and chemical reactions to language models and audio-visual data processing.&lt;/p&gt;
&lt;p&gt;Tesla has &lt;a href=&quot;https://techcrunch.com/2023/07/02/tesla-delivers-record-evs-amid-federal-tax-credits-price-cuts/&quot;&gt;exceeded&lt;/a&gt; earnings estimates.&lt;/p&gt;
&lt;h3 id=&quot;css-animation-composition&quot;&gt;CSS animation composition&lt;/h3&gt;
&lt;p&gt;There’s a new CSS feature for when you have multiple animations affecting the same element:&lt;/p&gt;
&lt;a href=&quot;https://developer.chrome.com/articles/css-animation-composition/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Specify how multiple animation effects should composite with `animation-composition` - Chrome Developers&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;When multiple animations affect the same property simultaneously, should they replace each other, add, or accumulate?&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://developer.chrome.com/images/meta/apple-touch-icon.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Chrome Developers&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://wd.imgix.net/image/AeNB0cHNDkYPUYzDuv8gInYA9rY2/YBkrNxjn85x5n5HLFEXj.jpg?auto=format&amp;amp;w=1521&quot; alt=&quot;Specify how multiple animation effects should composite with `animation-composition` - Chrome Developers&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;h3 id=&quot;component-library-options-in-2023&quot;&gt;Component library options in 2023&lt;/h3&gt;
&lt;p&gt;I was curious about the available options for Front End component libraries these days. It turns out there’s a lot now! &lt;a href=&quot;https://github.com/anubhavsrivastava/awesome-ui-component-library&quot;&gt;Here’s a list&lt;/a&gt; of some of the options. In addition to the usual suspects like &lt;a href=&quot;https://mui.com&quot;&gt;MUI&lt;/a&gt;, &lt;a href=&quot;https://ant.design&quot;&gt;Ant Design&lt;/a&gt;, and &lt;a href=&quot;https://tailwindcss.com&quot;&gt;Tailwind&lt;/a&gt;, a lot of Big Tech companies now have their own component libraries online. Some of them include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Uber - &lt;a href=&quot;https://baseweb.design/&quot;&gt;https://baseweb.design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Adobe - &lt;a href=&quot;https://react-spectrum.adobe.com/react-spectrum/index.html&quot;&gt;https://react-spectrum.adobe.com/react-spectrum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitHub - &lt;a href=&quot;https://primer.style/design/&quot;&gt;https://primer.style/design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Palantir - &lt;a href=&quot;https://blueprintjs.com/docs/#&quot;&gt;https://blueprintjs.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;IBM - &lt;a href=&quot;https://carbondesignsystem.com/components/tree-view/usage/&quot;&gt;https://carbondesignsystem.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://govuk-react.github.io/govuk-react&quot;&gt;GOVUK&lt;/a&gt; also have a React component library for their design system.&lt;/p&gt;
&lt;p&gt;One component library that I’ll be checking out more is &lt;a href=&quot;https://mantine.dev&quot;&gt;Mantine&lt;/a&gt;, which is built on the Emotion CSS-in-JS library. I also thought that Adobe’s &lt;a href=&quot;https://react-spectrum.adobe.com/react-spectrum&quot;&gt;React Spectrum&lt;/a&gt; had some really nice controls and clean markup.&lt;/p&gt;
&lt;p&gt;The award for the most uninspiring design system has got to go to IBM with their &lt;a href=&quot;https://carbondesignsystem.com/&quot;&gt;Carbon Design System&lt;/a&gt;, where they somehow found a way to bring a dull Enterprise aesthetic to the web.&lt;/p&gt;
&lt;h3 id=&quot;crypto&quot;&gt;Crypto&lt;/h3&gt;
&lt;p&gt;The Solana co-founder has &lt;a href=&quot;https://decrypt.co/147100/solana-co-founder-says-ethereum-could-be-layer-2-sol&quot;&gt;proposed&lt;/a&gt; that Ethereum could become a layer-2 for Solana. I’ll believe it when I see it.&lt;/p&gt;
&lt;h2 id=&quot;dev&quot;&gt;Dev&lt;/h2&gt;
&lt;h3 id=&quot;testing-sliders-in-playwright&quot;&gt;Testing sliders in Playwright&lt;/h3&gt;
&lt;p&gt;When testing UIs with Playwright, sometimes you might want to interact with a slider like &lt;a href=&quot;https://mui.com/material-ui/react-slider/&quot;&gt;this one&lt;/a&gt; from Google’s Material UI library:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/07/Screenshot-2023-07-07-at-12.28.05-am.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Some of the &lt;a href=&quot;https://github.com/microsoft/playwright/issues/20032#issuecomment-1379006314&quot;&gt;suggestions&lt;/a&gt; involve complex logic to determine the width of the slider and what coordinates to click at, but if you don’t need to set the slider to a precise value, there are some easier ways.&lt;/p&gt;
&lt;p&gt;The first method is to simply click the slider. I read that Playwright will click an element in the centre by default; however when I tried this it clicked it around 37ºC:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;await page.locator(&apos;.MuiSlider-marked&apos;).click();&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This sufficed for my use-case as I just wanted something non-zero for testing.&lt;/p&gt;
&lt;p&gt;Another approach is to take advantage of MUI’s in-built keyboard accessibility and move the slider that way:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;await page.locator(&apos;.MuiSlider-thumb&apos;).click();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;for (let i = 0; i &amp;lt; 10; i++) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;await page.keyboard.press(&apos;ArrowRight&apos;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8;--1:#24292e&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;p&gt;I’ll leave you with this:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Be careful everyone. I had my laptop open with my pitch deck for my AI startup pulled up and someone broke my window and dropped in a term sheet. &lt;a href=&quot;https://t.co/KWZ3upDNmC&quot;&gt;pic.twitter.com/KWZ3upDNmC&lt;/a&gt;&lt;/p&gt;— Roshan Patel (@roshanpateI) &lt;a href=&quot;https://twitter.com/roshanpateI/status/1676635938158510098?ref_src=twsrc%5Etfw&quot;&gt;July 5, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;Have a great weekend!&lt;/p&gt;</content:encoded></item><item><title>Tech roundup - Fri 21 July 2023</title><link>https://steveharrison.dev/tech-roundup-2023-07-21/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2023-07-21/</guid><description>AI
The AI artist community keeps coming up with amazing images generated in Midjourney. Check out the cover image above (you can view the whole series her</description><pubDate>Fri, 21 Jul 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;ai&quot;&gt;AI&lt;/h2&gt;
&lt;p&gt;The AI artist community keeps coming up with amazing images generated in Midjourney. Check out the cover image above (you can view the whole series &lt;a href=&quot;https://discord.com/channels/662267976984297473/1126759908126236732/1126759908126236732&quot;&gt;here&lt;/a&gt;) and these 3D text effects:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/07/suri5949958_Crystal_gemstone_letter_capital_M_with_fresh_flower_cff128c7-a007-4881-b7ca-42b775375036.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/07/Screenshot-2023-07-19-at-5.24.37-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Meta has released &lt;a href=&quot;https://ai.meta.com/llama/&quot;&gt;Llama 2&lt;/a&gt;, their open-source large language model. The release includes model weights and starting code for pretrained and fine-tuned Llama language models ranging from 7B to 70B parameters.&lt;/p&gt;
&lt;p&gt;Apple is reportedly looking at generative AI according to this &lt;a href=&quot;https://www.reuters.com/technology/apple-tests-generative-ai-tools-rival-openais-chatgpt-bloomberg-news-2023-07-19/&quot;&gt;article by Reuters&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The iPhone maker has built its own framework, known as “Ajax”, to create large language models (LLMs) and is also testing a chatbot that some engineers call “Apple GPT”, the report said, citing people with knowledge of the matter.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Stability AI has released &lt;a href=&quot;https://techcrunch.com/2023/07/13/stability-ai-releases-stable-doodle-a-sketch-to-image-tool/&quot;&gt;Stable Doodle&lt;/a&gt;, which turns sketches into images:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://techcrunch.com/wp-content/uploads/2023/07/imgonline-com-ua-twotoone-VgOccXiK2k1l.jpg?w=730&amp;amp;crop=1&quot; alt=&quot;Stable Doodle&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Elon Musk has unveiled his new AI company: &lt;a href=&quot;https://x.ai&quot;&gt;xAI&lt;/a&gt;, whose goal is to “understand the true nature of the universe”. Employees have previously worked at DeepMind, OpenAI, Google Research, Microsoft Research, Tesla, and the University of Toronto.&lt;/p&gt;
&lt;h2 id=&quot;social-media&quot;&gt;Social media&lt;/h2&gt;
&lt;p&gt;Usage of Threads has dropped since the big launch. They have also now &lt;a href=&quot;https://mashable.com/article/threads-rate-limiting&quot;&gt;introduced rate limiting&lt;/a&gt; to counter spam attacks. Remember when everyone was complaining about Twitter doing it? Speaking of rate limits, Elon Musk increased it on Twitter by 50% for verified users after someone complained that he’d been capped after spending over 9h on Twitter one day. While a great example of listening to your customers and continuously iterating a product, I think the more important point here is should you be spending 9h / day on Twitter?! (I don’t think so!)&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Incredible &lt;a href=&quot;https://t.co/uppf8O1OD2&quot;&gt;pic.twitter.com/uppf8O1OD2&lt;/a&gt;&lt;/p&gt;— Austen Allred (@Austen) &lt;a href=&quot;https://twitter.com/Austen/status/1680411888453292032?ref_src=twsrc%5Etfw&quot;&gt;July 16, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;Twitter is now &lt;a href=&quot;https://techcrunch.com/2023/07/13/twitter-starts-sharing-ad-revenue-with-verified-creators/&quot;&gt;sharing ad revenue&lt;/a&gt; with creators. Writer Brian Krassenstein, who has about 750,000 followers, posted that Twitter had paid him $24,305. Creator payouts are calculated based on revenue from ads shown in tweet replies. As Farzad Mesbahi tweeted, “The more haters you have in your replies the more money you’ll make on Twitter.” Musk replied, “Poetic justice.”&lt;/p&gt;
&lt;h2 id=&quot;crypto&quot;&gt;Crypto&lt;/h2&gt;
&lt;p&gt;A judge &lt;a href=&quot;https://news.bitcoin.com/ripples-chief-legal-officer-breaks-down-ruling-in-sec-lawsuit-says-as-a-matter-of-law-xrp-is-not-a-security/&quot;&gt;ruled&lt;/a&gt; that the cryptocurrency Ripple (XRP) is not a security, except for direct XRP sales to institutions. According to Ripple Labs’ chief legal officer, Stuart Alderoty:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A huge win today — as a matter of law — &lt;a href=&quot;https://markets.bitcoin.com/crypto/XRP&quot;&gt;XRP&lt;/a&gt; is not a security. Also a matter of law — sales on exchanges are not securities. Sales by executives are not securities. Other &lt;a href=&quot;https://markets.bitcoin.com/crypto/XRP&quot;&gt;XRP&lt;/a&gt; distributions — to developers, to charities, to employees are not securities.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;XRP surged 70% as soon as the news broke; Coinbase shares climbed past US$100 for the first time since May 2022; and Ethereum broke past US$2000 for the first time this year.&lt;/p&gt;
&lt;p&gt;Alex Mashinsky, the founder of the bankrupt crypto firm Celsius, &lt;a href=&quot;https://www.nytimes.com/2023/07/13/business/celsius-cryptocurrency-founder-arrested.html&quot;&gt;was arrested&lt;/a&gt; in New York last Thursday. The charges against him include wire fraud, commodities fraud and manipulation of securities prices.&lt;/p&gt;
&lt;p&gt;Binance &lt;a href=&quot;https://unchainedcrypto.com/binance-integrates-bitcoin-lightning-network/?utm_source=substack&amp;amp;utm_medium=email&quot;&gt;has integrated&lt;/a&gt; the &lt;a href=&quot;https://lightning.network&quot;&gt;Bitcoin Lightning Network&lt;/a&gt;, a Layer 2 protocol built on Bitcoin that reduces fees and congestion on the network by enabling micropayment channels and conducting transactions off-chain. Binance users will now be able to deposit or withdraw Bitcoin on the Lightning Network.&lt;/p&gt;
&lt;h3 id=&quot;tv-opening-titles-rendered-using-blockchain&quot;&gt;TV opening titles rendered using blockchain&lt;/h3&gt;
&lt;p&gt;One of the crypto projects that I have been interested in is &lt;a href=&quot;https://rendernetwork.com&quot;&gt;The Render Network&lt;/a&gt;, which includes names such as J. J. Abrams (the director of two of the recent Star Wars films), Brendan Eich (the creator of JavaScript, co-founder of Firefox, and CEO of the crypto-focused browser Brave), and Mike Winkelmann (the crypto artist Beeple).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The Render Network is the first decentralized GPU rendering platform, empowering artists to scale GPU rendering work on-demand to high performance GPU Nodes around the world. Through a blockchain marketplace for idle GPU compute, the network provides artists the ability to scale next generation rendering work at fractions of the cost and at orders of magnitude increases in speed when compared to the centralized GPU cloud.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;An example of The Render Network being used for real-world projects is &lt;a href=&quot;https://medium.com/render-token/artist-spotlight-raoul-marks-btn-monday-june-26th-2023-3f9ad27a196c&quot;&gt;this spotlight piece&lt;/a&gt; on artist Raoul Marks, who is from Perth and has won two Emmys. He’s a director at &lt;a href=&quot;https://antibody.tv&quot;&gt;Antibody&lt;/a&gt;, a studio that specialises in opening title sequences for TV shows. They’ve done the opening titles for &lt;a href=&quot;https://www.youtube.com/watch?v=yJdrrrIT8hQ&quot;&gt;The Crown&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=kr36GYPfKss&quot;&gt;The Night Manager&lt;/a&gt;, and countless other TV shows:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/07/Screenshot-2023-07-20-at-4.19.27-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;They’re now using the Render Network in their pipeline, and have used it to produce the &lt;a href=&quot;https://youtu.be/Ho5BNbLzg0Y&quot;&gt;opening credits for Westworld Season 4&lt;/a&gt;, Apple’s new series &lt;a href=&quot;https://youtu.be/bBMajXwi6Cs?t=79&quot;&gt;Silo&lt;/a&gt;, and the &lt;a href=&quot;https://www.youtube.com/watch?v=ckI_m8bbXfw&quot;&gt;trailer&lt;/a&gt; for Playstation game MARATHON. Pretty cool! A great example of useful crypto tech.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;This is what happens when political correctness ends up in website forms:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/07/Screenshot-2023-07-14-at-2.06.03-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;It also appears that the cycle has started again of recruiters looking for developers with years of experience in a brand-new technology. Someone &lt;a href=&quot;https://twitter.com/codedvil/status/1680923689204719616&quot;&gt;shared&lt;/a&gt; this job posting on Upwork:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/07/image-1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I remember when Node.js was a few years old there would be job descriptions all the time looking for “10 years of Node.js experience”. Yeah, good luck with that! 😂&lt;/p&gt;
&lt;h3 id=&quot;microsoft-is-still-microsoft&quot;&gt;Microsoft is still Microsoft&lt;/h3&gt;
&lt;p&gt;I’m no fan of Microsoft, but given the fact that they’ve switched to Chromium as the rendering engine for Edge, I was willing to give them another chance. I downloaded Edge to test something for work but instead of being greeted with an app that I could open immediately (like most other browsers in 2023), I was greeted with this:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/07/image-2.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Sometimes people—or organisations—just don’t change! The browser experience is terrible too, by the way: 10/10 would not recommend. 😂&lt;/p&gt;
&lt;p&gt;A Twitter influencer, Sahil Bloom, recently &lt;a href=&quot;https://twitter.com/SahilBloom/status/1681306307712921603&quot;&gt;posted&lt;/a&gt; about Bill Gates:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/07/image0.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I &lt;a href=&quot;https://twitter.com/stevenaharrison/status/1681308117387337789&quot;&gt;replied&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/07/image1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;dev&quot;&gt;Dev&lt;/h2&gt;
&lt;p&gt;Addy Osmani &lt;a href=&quot;https://twitter.com/Austen/status/1680411888453292032&quot;&gt;wrote a nice piece&lt;/a&gt; about how software is a vehicle for delivering value to people. I like this, since so many people argue over and spend countless hours on tooling, losing focus on what the end goal actually is.&lt;/p&gt;
&lt;h3 id=&quot;removing-animations-in-playwright&quot;&gt;Removing animations in Playwright&lt;/h3&gt;
&lt;p&gt;When testing, especially when doing screenshot comparison, animations can cause inconsistencies between test runs, so it’s easier and more performant to disable them. A great way to do this is to emulate the &lt;code&gt;prefers-reduced-motion&lt;/code&gt; CSS media rule in Playwright. This approach also encourages you to make sure your UI and third-party libraries support &lt;code&gt;prefers-reduced-motion&lt;/code&gt; for accessibility—win win!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/07/carbon--16-.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;css-nesting&quot;&gt;CSS Nesting&lt;/h3&gt;
&lt;p&gt;I’ve made a YouTube Short talking about how CSS Nesting is now available natively in Chrome, Safari, and Edge—no need to use &lt;a href=&quot;https://sass-lang.com&quot;&gt;Sass&lt;/a&gt;! Firefox is also supporting it in version 114, due to be released in August.&lt;/p&gt;

&lt;h3 id=&quot;triplex&quot;&gt;Triplex&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://triplex.dev&quot;&gt;Triplex&lt;/a&gt; is an editor that enables you to edit React Three.js Fiber components visually, with changes saved straight back to code, and modifying your source code syncs back to the editor.&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;All right, that’s a wrap—have a great weekend!&lt;/p&gt;</content:encoded></item><item><title>Tech roundup - Friday 28 July 2023</title><link>https://steveharrison.dev/tech-roundup-2023-07-28/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2023-07-28/</guid><description>The Line
NEOM is a new urban area planned by the Kingdom of Saudi Arabia to be built in its northwestern Tabuk Province. The site is north of the Red Sea,</description><pubDate>Fri, 28 Jul 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h3 id=&quot;the-line&quot;&gt;The Line&lt;/h3&gt;
&lt;p&gt;NEOM is a new urban area planned by the Kingdom of Saudi Arabia to be built in its northwestern Tabuk Province. The site is north of the Red Sea, east of Egypt across the Gulf of Aqaba and south of Jordan. The total planned area of NEOM is 26,500 km². In January 2021, the project unveiled plans for The Line, a linear city 170 kilometres long and 200 metres wide within the NEOM area. A new 45-minute-long documentary about The Line has been released by the Discovery Channel. It marks the first time the majority of architects connected to the project have spoken about it in public.&lt;/p&gt;

&lt;h3 id=&quot;twitter-is-now-x&quot;&gt;Twitter is now X&lt;/h3&gt;
&lt;p&gt;Twitter rebranded to X this week, and in true Elon style, he crowdsourced the logo via Twitter. The company has also taken over the @X Twitter username which was previously the account of a photographer, Gene X. Huang. He has been moved to @x12345678998765.&lt;/p&gt;
&lt;p&gt;Esther Crawford, a former product manager at Twitter who went viral after posting a photo of herself in a sleeping bag at the office shortly after Elon acquired Twitter, has &lt;a href=&quot;https://twitter.com/i/web/status/1684291048682684416&quot;&gt;written a great essay&lt;/a&gt; on her experience working at Twitter. It’s a great insight into how inefficient Twitter was previously and the pros/cons of how Elon is operating it now.&lt;/p&gt;
&lt;h3 id=&quot;worldcoin&quot;&gt;Worldcoin&lt;/h3&gt;
&lt;p&gt;Digital identity project Worldcoin launched their WLD crypto token on Monday, which soared 60% on the first day of trading. Sam Altman, CEO of OpenAI is one of the founders: he’s said he isn’t sure whether the project will succeed, but it’s “worth a shot”.&lt;/p&gt;
&lt;p&gt;The creator of Ethereum, Vitalik Buterin, has &lt;a href=&quot;https://vitalik.eth.limo/general/2023/07/24/biometric.html&quot;&gt;published his thoughts&lt;/a&gt; on Worldcoin and similar “proof of personhood” projects. The goal with proof of personhood is essentially to create a list of public keys with the guarantee that each key is controlled by a unique human. That key can then be used instead of existing verification methods such as CAPTCHAs and credit cards (the latter was Elon Musk’s strategy to deal with bots on X—requiring a valid, unique credit card number significantly increases the cost of spam attacks as you typically have to go through bank verification in order to get one).&lt;/p&gt;
&lt;p&gt;Meanwhile, the MIT Technology Review has another take from 2022 on Worldcoin:&lt;/p&gt;
&lt;a href=&quot;https://www.technologyreview.com/2022/04/06/1048981/worldcoin-cryptocurrency-biometrics-web3/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Deception, exploited workers, and cash handouts: How Worldcoin recruited its first half a million test users&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;The startup promises a fairly-distributed, cryptocurrency-based universal basic income. So far all it’s done is build a biometric database from the bodies of the poor.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.technologyreview.com/2022/04/06/1048981/worldcoin-cryptocurrency-biometrics-web3/static/media/favicon.1cfcdb44.ico&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;MIT Technology Review&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://wp.technologyreview.com/wp-content/uploads/2022/04/MJ22_worldcoin-theOrb.jpg?resize=1200,600&quot; alt=&quot;Deception, exploited workers, and cash handouts: How Worldcoin recruited its first half a million test users&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;h3 id=&quot;ai-powered-web-design&quot;&gt;AI-powered web design&lt;/h3&gt;
&lt;p&gt;Wix has added generative AI to their WYSIWYG web design tool:&lt;/p&gt;
&lt;a href=&quot;https://www.wix.com/blog/avishai-abrahami-thoughts-about-ai&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Wix CEO’s Thoughts About AI: Past, Present and Future&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Get a glimpse of our suite of AI-powered capabilities and our new AI Site Generator, which will reshape website building and beyond.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.wix.com/favicon.ico&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Wix Blog&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://static.wixstatic.com/media/984ed3_c5c8927aeee243d79c40e0215283e645~mv2.png/v1/fill/w_920,h_608,al_c,q_90/984ed3_c5c8927aeee243d79c40e0215283e645~mv2.png&quot; alt=&quot;Wix CEO’s Thoughts About AI: Past, Present and Future&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;h3 id=&quot;a-new-browser-experience&quot;&gt;A new browser experience&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://arc.net/&quot;&gt;Arc&lt;/a&gt;, by the Browser Company of New York, is a new Chromium-based web browser focusing on a great user experience. It organises tabs, favourites, and workspaces in a panel on the left (as opposed to at the top, like in most web browsers) and allows you to easily create split screens with different webpages. There was previously a waitlist to try it, but it’s now available to everyone. I’ve started using it today and will let you know how I go! I’m using it to write this newsletter. 🙂&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://thesweetsetup.com/wp-content/uploads/2022/08/Arc-Browser-First-Look-7.png&quot; alt=&quot;First Look: Arc Browser – The Sweet Setup&quot; /&gt;&lt;/p&gt;
&lt;a href=&quot;https://arc.net/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Arc from The Browser Company&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Experience a calmer, more personal internet in this browser designed for you. Let go of the clicks, the clutter, the distractions.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://arc.net/favicon.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt;  &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://arc.net/og.png&quot; alt=&quot;Arc from The Browser Company&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;h2 id=&quot;dev&quot;&gt;Dev&lt;/h2&gt;
&lt;h3 id=&quot;whats-new-in-chrome-devtools&quot;&gt;What’s new in Chrome DevTools&lt;/h3&gt;
&lt;p&gt;You can now view the specificity of a CSS selector by hovering over it:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/07/Screenshot-2023-07-27-at-10.46.17-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I’ve published a short YouTube video on it:&lt;/p&gt;

&lt;p&gt;If you need a refresher on how specificity is calculated, check out &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity&quot;&gt;this mdn page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can now override HTTP response headers, which is handy to bypass CORS errors:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/07/Screenshot-2023-07-27-at-11.36.53-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;To see all the new things in Chrome DevTools, check out this video by their developer team:&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;Alright, that’s a wrap—talk to you next week!&lt;/p&gt;</content:encoded></item><item><title>Tech roundup - Fri 14 July 2023</title><link>https://steveharrison.dev/tech-roundup-2023-07-14/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2023-07-14/</guid><description>Threads has passed 100M users in five days since its launch last week, overtaking ChatGPT as the fastest growing app of all time (for comparison, ChatGPT r</description><pubDate>Fri, 14 Jul 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Threads has passed 100M users in five days since its launch last week, overtaking ChatGPT as the fastest growing app of all time (for comparison, ChatGPT reached 100M users in the first two months, which was a record at the time). It’s the dream to have a large user base who you can market a new product to rather than having to grow it from scratch, so it’s pretty cool watching this unfold. Users have made more than 95M posts and shared 190M likes on the platform.&lt;/p&gt;
&lt;p&gt;Netflix have invented a new way of removing subjects from backgrounds in film &amp;amp; TV. Blue &amp;amp; green screens are the usual way of adding computer-generated backgrounds behind actors currently. The researchers, including &lt;a href=&quot;https://www.pauldebevec.com&quot;&gt;Paul Debevec&lt;/a&gt; (check out his website: he’s done some really cool VFX R&amp;amp;D including papers around the popular technique of capturing 360º imagery on set by filming chrome spheres!), extend this approach by lighting the subjects with magenta light so they are only in the red and blue channels, and then everything in the green channel can be removed. They then film a version of the scene with normal lighting and use AI to relight the magenta version correctly. The technique works for tiny strands of hair, green clothes / objects that are not to be removed, and even transparent objects such as glass. You can read more &lt;a href=&quot;https://decrypt.co/147986/netflix-ai-green-screen-magenta-visual-effects-movies&quot;&gt;here&lt;/a&gt; and watch an example below:&lt;/p&gt;

&lt;p&gt;Details about Brazil’s CBDC (Central Bank Digital Currency: using crypto tech to improve the Back End of existing government financial systems) &lt;a href=&quot;https://cointelegraph.com/news/brazil-cbdc-pilot-source-code-can-freeze-funds&quot;&gt;have revealed&lt;/a&gt; that they will likely be able to move, burn, or freeze user funds, similar to the existing banking system where customer bank accounts can be frozen or seized.&lt;/p&gt;
&lt;h3 id=&quot;colours-as-your-crypto-wallet-backup&quot;&gt;Colours as your crypto wallet backup&lt;/h3&gt;
&lt;p&gt;When you create a crypto wallet for storing digital currency, you’re given a backup consisting of a sequence of English words, called a &lt;a href=&quot;https://en.bitcoin.it/wiki/Seed_phrase&quot;&gt;seed phrase&lt;/a&gt;. You’re encouraged to back this up somewhere separate to your secret key so, if you ever lose the key, you can enter the seed phrase to gain access to your wallet again.&lt;/p&gt;
&lt;p&gt;A researcher has &lt;a href=&quot;https://decrypt.co/148026/bitcoin-private-key-phrase-encoding-colors&quot;&gt;come up with a way&lt;/a&gt; of storing this backup as colours instead of words. You can either record the colours themselves or a list of hex codes, and the order doesn’t matter. This makes it easier to hide it, as these days more people know that a random piece of paper with 12-24 words on it is likely some valuable crypto information. Last year, someone’s seed phrase &lt;a href=&quot;https://cointelegraph.com/news/police-body-cam-leaks-suspect-s-seed-phrase-during-vehicle-inspection&quot;&gt;was leaked online&lt;/a&gt; via public police body-cam footage. Police searching a man’s car found a piece of paper with words written on it that were easily readable in the video.&lt;/p&gt;
&lt;p&gt;I tried generating a random seed phrase (not associated with a wallet 🙂) and running it through the tool, &lt;a href=&quot;https://iancoleman.io/bip39/&quot;&gt;BIP39 Colors&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/07/Screenshot-2023-07-12-at-12.00.53-pm-2.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;censorship--news-on-threads&quot;&gt;Censorship &amp;amp; news on Threads&lt;/h3&gt;
&lt;p&gt;Conservatives &lt;a href=&quot;https://notthebee.com/article/metas-twitter-clone-launches-immediately-censors-the-masses&quot;&gt;have reported being censored&lt;/a&gt; on Threads already for posting true information such as cocaine being found at the White House. Apparently when you try to follow such accounts, you see a popup discouraging you from following them:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/07/image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I successfully followed Donald Trump Jr and DC_Draino without seeing the popup myself, so it would appear that they’ve changed this behaviour since.&lt;/p&gt;
&lt;p&gt;It is no secret though that news and anything controversial is discouraged on Threads. Mark Zuckerberg has talked about how they are “definitely focusing on kindness and making this a friendly place” and Adam Mosseri, the head of Instagram, &lt;a href=&quot;https://www.theverge.com/2023/7/7/23787334/instagram-threads-news-politics-adam-mosseri-meta-facebook&quot;&gt;said in an interview with Verge&lt;/a&gt; that ‘the additional scrutiny, negativity, and integrity risks that come with politics and hard news aren’t worth the “incremental engagement or revenue”’. He went on to add:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“There are more than enough amazing communities — sports, music, fashion, beauty, entertainment, etc. — to make a vibrant platform without needing to get into politics or hard news.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I find this interesting, because it wasn’t too long ago that Facebook introduced news onto its timeline and pushed it heavily. Adam Mosseri himself ran Facebook News Feed in 2016. My timeline used to be filled with what my friends were up to but has since become a lot less useful, and is really now mostly a stream of news, blog posts, and ads. You have to dig deep into other menus in the app to get a feed of what your friends have been posting. As a result, I don’t spend much time using the app anymore.&lt;/p&gt;
&lt;p&gt;Additionally, Meta has been in lots of drama over monetisation of its news feed with governments and news organisations in Australia and Canada, to name a few.&lt;/p&gt;
&lt;p&gt;My take is that, in addition to competing with Twitter and attracting users who don’t use Twitter or Facebook, Threads also serves as a Facebook reboot and a chance to attract users back to, well, something that actually resembles a social network.&lt;/p&gt;
&lt;h2 id=&quot;dev-stuff&quot;&gt;Dev stuff&lt;/h2&gt;
&lt;p&gt;I started working with AWS DynamoDB this week. You can &lt;a href=&quot;https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.DownloadingAndRunning.html&quot;&gt;run it locally in a Docker container&lt;/a&gt; and I came across a nice macOS GUI called &lt;a href=&quot;https://dynobase.dev&quot;&gt;Dynobase&lt;/a&gt; for inspecting and interacting with the DB:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/07/hero.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;increase-timeout-3x-for-a-test-in-playwright&quot;&gt;Increase timeout 3x for a test in Playwright&lt;/h3&gt;
&lt;p&gt;If you have a test in Playwright that takes longer to run than normal, you can use a simple command, &lt;a href=&quot;https://playwright.dev/docs/api/class-test#test-slow-1&quot;&gt;&lt;code&gt;test.slow()&lt;/code&gt;&lt;/a&gt;, to triple the default timeout for that test:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; { test, expect } &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF;--1:#032F62&quot;&gt;&apos;@playwright/test&apos;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF;--1:#032F62&quot;&gt;&apos;slow test&apos;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; ({ &lt;/span&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;page&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; }) &lt;/span&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;test.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;slow&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6;--1:#616972&quot;&gt;// ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;p&gt;I’ll leave you with this crypto &lt;a href=&quot;https://twitter.com/i/web/status/1678949628794880001&quot;&gt;tweet&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/07/Screenshot-2023-07-12-at-10.33.05-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Have a great weekend! 😀&lt;/p&gt;</content:encoded></item><item><title>Tech roundup - Friday 4 August 2023</title><link>https://steveharrison.dev/tech-roundup-2023-08-04/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2023-08-04/</guid><description>Uber has finally turned a profit! CEO Dara Khosrowshahi also mentioned that they are developing an AI chatbot for customer service, marketing, and other au</description><pubDate>Fri, 04 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Uber has finally &lt;a href=&quot;https://www.bloomberg.com/news/videos/2023-08-01/uber-ceo-khosrowshahi-calls-profit-a-seminal-moment-video&quot;&gt;turned a profit&lt;/a&gt;! CEO Dara Khosrowshahi also mentioned that they are developing an AI chatbot for customer service, marketing, and other automated tasks.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://fandomwire.com/disney-ceo-reportedly-planning-to-sell-disney-to-apple-after-projecting-800m-loss/&quot;&gt;Rumour is it&lt;/a&gt; that Bob Iger might have returned to Disney to sell it to Apple, which would be the deal of a lifetime. Apple has a strong presence in China, whereas Disney has struggled in the market. Disney could potentially lose US$800M in streaming in the third quarter so consolidating with Apple’s streaming tech could also provide advantages there. Of course, anti-trust regulators could block a deal like this. It will be interesting to see whether it ever eventuates!&lt;/p&gt;
&lt;p&gt;While some people may have reservations scanning their iris in exchange for a Worldcoin ID and 25 WLD (worth around AUD$90 as of writing), they haven’t had any issues finding people to sign up:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;day 3 of &lt;a href=&quot;https://twitter.com/worldcoin?ref_src=twsrc%5Etfw&quot;&gt;@worldcoin&lt;/a&gt; launch, crazy lines around the world. one person getting verified every 8 seconds now. &lt;a href=&quot;https://t.co/vHRu1sWMT3&quot;&gt;pic.twitter.com/vHRu1sWMT3&lt;/a&gt;&lt;/p&gt;— Sam Altman (@sama) &lt;a href=&quot;https://twitter.com/sama/status/1684297687708098565?ref_src=twsrc%5Etfw&quot;&gt;July 26, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;However, Kenya—one of the biggest markets for take-up—has &lt;a href=&quot;https://decrypt.co/150942/kenya-suspends-worldcoin-operations-privacy-concerns&quot;&gt;suspended&lt;/a&gt; Worldcoin’s rollout there over privacy concerns.&lt;/p&gt;
&lt;h2 id=&quot;ai&quot;&gt;AI&lt;/h2&gt;
&lt;p&gt;If you want to read more about the state of open-source AI, here’s a nice write-up:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;The open source models arena&lt;br /&gt;&lt;br /&gt;I try not to post too much about open models until we reach a point where there will no longer be any debate about if they are at the level of closed models.&lt;br /&gt;&lt;br /&gt;So let’s make it brief. &lt;br /&gt;&lt;br /&gt;----&lt;br /&gt;LLaMA 2&lt;br /&gt;&lt;br /&gt;The open models arena heated up last week with the… &lt;a href=&quot;https://t.co/BfXEb9CPfx&quot;&gt;pic.twitter.com/BfXEb9CPfx&lt;/a&gt;&lt;/p&gt;— Yam Peleg (@Yampeleg) &lt;a href=&quot;https://twitter.com/Yampeleg/status/1685539560975933441?ref_src=twsrc%5Etfw&quot;&gt;July 30, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;The bit that stuck with me though: there’s a model called SlimPajama?&lt;/p&gt;
&lt;p&gt;I had been considering writing a nice little ChatGPT UI for macOS, but it looks like someone has beat me to the punch with &lt;a href=&quot;https://www.macgpt.com/&quot;&gt;MacGPT&lt;/a&gt;. It lives in your menubar and you can also use it in a Spotlight-style UI, which is a far better user experience in my opinion than opening up ChatGPT in a web browser.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/08/Screenshot-2023-08-02-at-9.21.40-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/08/Screenshot-2023-08-02-at-9.22.27-pm-1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;He’s also written a version for iOS.&lt;/p&gt;
&lt;p&gt;Usage of StackOverflow &lt;a href=&quot;https://meta.stackexchange.com/questions/387278/did-stack-exchanges-traffic-go-down-since-chatgpt&quot;&gt;has dropped&lt;/a&gt; this year, with many developers now using ChatGPT or GitHub Copilot to answer their coding questions. This week, StackOverflow announced a pivot into AI: &lt;a href=&quot;https://stackoverflow.blog/2023/07/27/announcing-overflowai/&quot;&gt;OverflowAI&lt;/a&gt;. One of my favourite features is their Visual Studio Code plugin where you can search for content all within your IDE, and even search Confluence for documentation specific to your company/project. Being able to search all this information using AI, right from your IDE, is a massive win for developer productivity!&lt;/p&gt;

&lt;h2 id=&quot;crypto&quot;&gt;Crypto&lt;/h2&gt;
&lt;p&gt;US$60M was stolen from Curve, one of the largest decentralised crypto exchanges (they have US$1.67B in customer assets on the exchange), due to a &lt;a href=&quot;https://decrypt.co/150669/defi-exchange-curve-finance-confirms-various-ethereum-pools-hacked&quot;&gt;vulnerability&lt;/a&gt; in their Vyper programming language (used for writing smart contracts).&lt;/p&gt;
&lt;p&gt;The SEC has &lt;a href=&quot;https://www.sec.gov/litigation/litreleases/lr-25794&quot;&gt;filed charges&lt;/a&gt; against Richard Heart, the founder of crypto token HEX. This comes as a movie has just been released about him portraying his rather lavish lifestyle:&lt;/p&gt;

&lt;p&gt;You might remember 3AC, the crypto hedge fund that went bankrupt in 2022. Well the bankruptcy drama &lt;a href=&quot;https://www.theblock.co/post/242675/3ac-co-founder-says-us-court-can-no-longer-tell-him-what-to-do&quot;&gt;continues&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Three Arrows Capital co-founder &lt;a href=&quot;https://www.theblock.co/post/237613/kyle-davies-evokes-karma-says-hell-donate-some-opnx-earnings-to-3ac-creditors&quot;&gt;Kyle Davies&lt;/a&gt; is attempting to fight a motion to hold him in contempt of court by arguing that U.S. laws no longer apply to him.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;The U.S.-born and raised Davies told a judge in U.S. Bankruptcy Court for the Southern District of New York on Tuesday that he renounced his U.S. citizenship in late 2020 and no longer views himself as under the jurisdiction of U.S. courts.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;dev&quot;&gt;Dev&lt;/h2&gt;
&lt;p&gt;You can now control how objects get represented in the developer console in Firefox and Chrome with &lt;a href=&quot;https://fxdx.dev/firefox-devtools-custom-object-formatters/&quot;&gt;Custom Object Formatters&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;That’s a wrap—have a great weekend!&lt;/p&gt;</content:encoded></item><item><title>Deep fake avatars, guessing your password using audio + AI, and new web dev features</title><link>https://steveharrison.dev/tech-roundup-2023-08-10/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2023-08-10/</guid><description>An AI-generated deep fake has been making the rounds—I think it&apos;s pretty convincing:
[NEW] - Joshua Avatar 2.0 🤖✨. Both of these video clips were 100% AI</description><pubDate>Fri, 11 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;An AI-generated deep fake has been making the rounds—I think it’s pretty convincing:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;[NEW] - Joshua Avatar 2.0 🤖✨. Both of these video clips were 100% AI-generated, featuring my own avatar and voice clone. 🎙️🎥&lt;br /&gt;&lt;br /&gt;We’ve made massive enhancements to our life-style avatar’s video quality and fine-tuned our voice technology to mimic my unique accent and speech… &lt;a href=&quot;https://t.co/9EgxRA69dg&quot;&gt;pic.twitter.com/9EgxRA69dg&lt;/a&gt;&lt;/p&gt;— Joshua Xu (@joshua_xu_) &lt;a href=&quot;https://twitter.com/joshua_xu_/status/1689019874667024384?ref_src=twsrc%5Etfw&quot;&gt;August 8, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;Researchers have published a paper on guessing passwords with AI by listening to the sounds made by your keyboard over a Zoom call.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The researchers from the University of Surrey, Durham University, and Royal Holloway, University of London, pressed each of 36 keys on a MacBook Pro, including all of the letters and numbers, 25 times in a row, using different fingers and with varying pressure. The sounds were recorded both over a Zoom call and on a smartphone near the keyboard.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;The team then trained a &lt;a href=&quot;https://interestingengineering.com/innovation/new-machine-learning-model-can-detect-dementia-in-speech&quot;&gt;machine learning&lt;/a&gt; system to recognize features of the acoustic signals associated with each key. They tested the system on the remaining data and found that it could accurately assign the correct key to a sound 95 percent of the time when the recording was made over a phone call and 93% of the time when it was made over a Zoom call.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;The study is not the first to show that sound can identify keystrokes, but the team says their study uses the most advanced methods and has achieved the highest accuracy so far.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;a href=&quot;https://interestingengineering.com/innovation/how-your-keyboard-sounds-can-expose-your-data-to-ai-hackers&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;How your keyboard sounds can expose your data to AI hackers&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Researchers have developed a system that can guess passwords by listening to the sound of typing on online meetings and video calls.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://interestingengineering.com/icons/android-icon-192x192.png?v=14&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Interesting Engineering&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://dnd2oi6izkvoi.cloudfront.net/2023/08/09/image/jpeg/c8jZb03sC0yEsNlYnMlFJeMltKpfvzUaK8QYL3ps.jpg&quot; alt=&quot;How your keyboard sounds can expose your data to AI hackers&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;A new AI model generates 3D textured meshes based on a single “unposed” photo:&lt;/p&gt;
&lt;a href=&quot;https://guochengqian.github.io/project/magic123/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Magic123: One Image to High-Quality 3D Object Generation Using Both 2D and 3D Diffusion Priors&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Magic123: One Image to High-Quality 3D Object Generation Using Both 2D and 3D Diffusion Priors, 2023.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://guochengqian.github.io/dragon.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Magic123: One Image to High-Quality 3D Object Generation Using Both 2D and 3D Diffusion Priors&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://guochengqian.github.io/project/magic123/assets/images/pull.jpg&quot; alt=&quot;Magic123: One Image to High-Quality 3D Object Generation Using Both 2D and 3D Diffusion Priors&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;Google has announced NotebookLM, an AI-powered notebook where you can feed in your own Google Docs and then get summaries, ask questions about the content, and generate ideas based on the content (for example: “Generate a script for a short video on this topic” or “What questions would potential investors ask?”).&lt;/p&gt;
&lt;a href=&quot;https://blog.google/technology/ai/notebooklm-google-ai/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Introducing NotebookLM&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;We’re rolling out NotebookLM, an experimental offering from Google Labs to summarize information, complex ideas and brainstorm new connections.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://blog.google/static/blogv2/images/apple-touch-icon.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Google&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://storage.googleapis.com/gweb-uniblog-publish-prod/images/Labs_IO_social_share.width-1300.jpg&quot; alt=&quot;Introducing NotebookLM&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;It appears journalists still don’t understand the “shitposting” culture on X and that they might want to take posts with a grain of salt: someone wrote an entire Insider article about a joke X post:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;This is my finest work &lt;a href=&quot;https://t.co/lpkenvh70Q&quot;&gt;pic.twitter.com/lpkenvh70Q&lt;/a&gt;&lt;/p&gt;— Alex Cohen (@anothercohen) &lt;a href=&quot;https://twitter.com/anothercohen/status/1688540656480727041?ref_src=twsrc%5Etfw&quot;&gt;August 7, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;That, or they’re just trying to cash in on some of the engagement too. 😏&lt;/p&gt;
&lt;h2 id=&quot;dev&quot;&gt;Dev&lt;/h2&gt;
&lt;p&gt;Here’s a video on how F1 use AWS:&lt;/p&gt;
&lt;a href=&quot;https://technative.io/formula-1-transforming-fan-engagement-with-cloud/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Formula 1: Transforming Fan Engagement with Cloud - TechNative&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Data-driven insights with F1 and AWS At the recent AWS Summit in London we caught up with esteemed former engineer at Ferrari and Williams, Rob Smedley, to discuss the growing utilization of data in Formula 1, and how it’s changing the fan experience. We also spent some time with AWS’s Neil Ashton…&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://technative.io/wp-content/uploads/2017/03/q3Nchk1T14472.jpg&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;TechNative&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://technative.io/wp-content/uploads/2023/08/pexels-dimitrije-djekanovic-13857977.jpg&quot; alt=&quot;Formula 1: Transforming Fan Engagement with Cloud - TechNative&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;h3 id=&quot;all-it-takes-is-one-misplaced-tracking-pixel&quot;&gt;All it takes is one misplaced tracking pixel&lt;/h3&gt;
&lt;p&gt;I was researching Backblaze, a cloud internet backup service, and found this interesting article on a data breach that occurred:&lt;/p&gt;
&lt;a href=&quot;https://www.theregister.com/2021/03/23/backblaze_facebook_tracker/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Backblaze on the back foot after ‘inadvertently’ beaming customer data to Facebook&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Backup company says tracking code now removed, but what info was sent?&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.theregister.com/design_picker/13249a2e80709c7ff2e57dd3d49801cd534f2094/graphics/favicons/apple-touch-icon.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;The Register&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://regmedia.co.uk/2018/06/05/shutterstock_631896641.jpg&quot; alt=&quot;Backblaze on the back foot after ‘inadvertently’ beaming customer data to Facebook&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;It’s a great reminder that you can have end-to-end encrypted services but at some stage, the data has to be decrypted to show to the user, and if there’s a bug in the Front End of your app where the data is visible, bam! In this case, they added some JavaScript code using Google Tag Manager, commonly used to add advertising / analytics tracking code by marketing teams, but didn’t restrict the URL pattern to only target their public pages. Personally, it would seem like a good idea to not even have Google Tag Manager on the authenticated section of your site for precisely this reason.&lt;/p&gt;
&lt;h3 id=&quot;ssd-reliability&quot;&gt;SSD reliability&lt;/h3&gt;
&lt;p&gt;Have you ever wondered how reliable SSDs are at scale? Well fear not, here’s a study of 1.4 million SSDs by researcher Prof. Bianca Schroeder and NetApp:&lt;/p&gt;
&lt;a href=&quot;https://www.zdnet.com/article/ssd-reliability-in-the-enterprise/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;SSD reliability in the enterprise: This survey yields a few surprises&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Solid state drives (SSDs) have remade the storage industry in the last decade. They’re costly, fast, and power efficient, but just how reliable are they? A new study of almost 1.4 million SSDs offers some surprising answers.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.zdnet.com/a/fly/bundles/zdnetcore/images/logos/zdnet-logo-yellow.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;ZDNET&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://www.zdnet.com/a/img/resize/31d3cb38126c55a71b7e114b15409c62e4013962/2020/02/25/2fbe9aae-0291-42ba-a9ea-885a9c105e80/ifferent-data-storage-devices.jpg?auto=webp&amp;amp;fit=crop&amp;amp;height=675&amp;amp;width=1200&quot; alt=&quot;SSD reliability in the enterprise: This survey yields a few surprises&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;An interesting finding: drives with less usage experienced higher replacement rates.&lt;/p&gt;
&lt;h3 id=&quot;idx&quot;&gt;IDX&lt;/h3&gt;
&lt;p&gt;Google announced a new browser-based code editor this week called IDX.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;IDX is based on VSCode, and the vision is a full fidelity local environment with AI smarts, quick starting points for apps using popular frameworks, a Linux-based VM in a data center near you, and quick deploys to Firebase Hosting and (soon) Android + iOS simulators in-browser.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://addyosmani.com/assets/images/idx/idx-ai-home.webp&quot; alt=&quot;idx ai home&quot; /&gt;&lt;/p&gt;
&lt;p&gt;You can read more in &lt;a href=&quot;https://addyosmani.com/blog/project-idx/&quot;&gt;this article&lt;/a&gt; by Addy Osmani and sign up for the waitlist at the &lt;a href=&quot;https://idx.dev/#introduction&quot;&gt;official website&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;serenity&quot;&gt;Serenity&lt;/h3&gt;
&lt;p&gt;While I was looking at new JavaScript proposals on GitHub, I noticed they mentioned “Serenity” as one of the browser engines to add these features to, in addition to the usual suspects such as Chromium and WebKit.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://serenityos.org&quot;&gt;SerenityOS&lt;/a&gt; is a hobby Unix-like OS created in 2018 by Andreas Kling. He went as far as to write his own web browser from scratch!&lt;/p&gt;
&lt;a href=&quot;https://www.theregister.com/AMP/2022/03/31/serenityos/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;SerenityOS: Remarkable project with its own JS-capable web browser&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Lead dev of modest ground-up Unix-like OS quit job to work on it&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.theregister.com/favicon.ico&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;The Register&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://regmedia.co.uk/2022/03/31/serenity_os_screenshot.jpg&quot; alt=&quot;SerenityOS: Remarkable project with its own JS-capable web browser&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;h3 id=&quot;ch-css-unit&quot;&gt;ch CSS unit&lt;/h3&gt;
&lt;p&gt;At a recent SydCSS meetup, I discovered the &lt;code&gt;ch&lt;/code&gt; CSS unit which refers to the width of one character (the “0” character, specifically). You can use it to specify container widths based on the number of characters you want to fit in:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/08/F2mI0_TagAAuSyj.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;You can read more about it here:&lt;/p&gt;
&lt;a href=&quot;https://meyerweb.com/eric/thoughts/2018/06/28/what-is-the-css-ch-unit/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;What is the CSS ‘ch’ Unit?&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Is ‘1ch’ in CSS the width of one character? Well… yes and no. Mostly no.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://meyerweb.com/favicon.ico&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt;  &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://meyerweb.com/ui/i/hamonshu/fb-og-image.png&quot; alt=&quot;What is the CSS ‘ch’ Unit?&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;h3 id=&quot;repeating-javascript-regexp-capture-group-names&quot;&gt;Repeating JavaScript RegExp capture group names&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/08/carbon--18-.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;In future, you will be able to use the same capture group name in different OR segments of your JavaScript regular expressions.&lt;/p&gt;
&lt;p&gt;Currently the above code will result in an “Invalid regular expression: Duplicate capture group name” error.&lt;/p&gt;
&lt;p&gt;This TC39 proposal is in Stage 3: you can try it out now in Safari Technology Preview and as a Babel plugin, &lt;a href=&quot;https://babeljs.io/docs/babel-plugin-proposal-duplicate-named-capturing-groups-regex&quot;&gt;https://babeljs.io/docs/babel-plugin-proposal-duplicate-named-capturing-groups-regex&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;More info: &lt;a href=&quot;https://github.com/tc39/proposal-duplicate-named-capturing-groups&quot;&gt;https://github.com/tc39/proposal-duplicate-named-capturing-groups&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;prefers-reduced-transparency&quot;&gt;prefers-reduced-transparency&lt;/h3&gt;
&lt;p&gt;In modern OSes, you can enable a “Reduce transparency” accessibility option to make the UI easier to read. The experimental &lt;code&gt;prefers-reduced-transparency&lt;/code&gt; CSS media query allows you to adjust your web UI to suit this preference. You can try it out today in Chrome Canary with the “Experimental Web Platform features” flag enabled.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/08/F3DqjaibMAAwQP9.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;search&quot;&gt;&lt;code&gt;&amp;lt;search&amp;gt;&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The new &lt;code&gt;&amp;lt;search&amp;gt;&lt;/code&gt; HTML element provides a semantic way to identify a search/filtering area, as an alternative to &lt;code&gt;role=&quot;search&quot;&lt;/code&gt;, so screen readers can provide quick access to it. The idea is to be able to write semantic, accessible HTML without having to use ARIA.&lt;/p&gt;
&lt;p&gt;It isn’t available in any browsers yet.&lt;/p&gt;
&lt;p&gt;Learn more: &lt;a href=&quot;https://www.scottohara.me/blog/2023/03/24/search-element.html&quot;&gt;https://www.scottohara.me/blog/2023/03/24/search-element.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/08/carbon--21--1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Have a great weekend!&lt;/p&gt;</content:encoded></item><item><title>NVIDIA 2D -&gt; 3D, crypto now less volatile than oil, design like Mozart, and code better with Nova!</title><link>https://steveharrison.dev/tech-roundup-2023-08-17/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2023-08-17/</guid><description>AI
Google Chrome will summarize entire articles for you with built-in generative AIThe AI-powered notes in Chrome are launching first on Android and iOS.T</description><pubDate>Fri, 18 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h3 id=&quot;ai&quot;&gt;AI&lt;/h3&gt;
&lt;a href=&quot;https://www.theverge.com/2023/8/15/23833045/google-artificial-intelligence-summary-chrome-sge?utm_source=bensbites&amp;amp;utm_medium=newsletter&amp;amp;utm_campaign=how-gpt-4-flags-harmful-content&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Google Chrome will summarize entire articles for you with built-in generative AI&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;The AI-powered notes in Chrome are launching first on Android and iOS.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.theverge.com/icons/android_chrome_512x512.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;The Verge&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://cdn.vox-cdn.com/thumbor/da5nojAhx8WDPJa1XZH4bx-6otg=/0x0:2040x1360/1200x628/filters:focal(1020x680:1021x681)/cdn.vox-cdn.com/uploads/chorus_asset/file/24418650/STK114_Google_Chrome_01.jpg&quot; alt=&quot;Google Chrome will summarize entire articles for you with built-in generative AI&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;🔴 Finally! NVIDIA has finally made the code for Neuralangelo public!&lt;br /&gt;&lt;br /&gt;It has the ability to transform any video into a highly detailed 3D environment, and it’s a technology related to but DIFFERENT from NeRF.&lt;br /&gt;&lt;br /&gt;💡 Here’s how it works:&lt;br /&gt;It takes a 2D video as input, showing an… &lt;a href=&quot;https://t.co/tS3dv7df61&quot;&gt;pic.twitter.com/tS3dv7df61&lt;/a&gt;&lt;/p&gt;— Javi Lopez ⛩️ (@javilopen) &lt;a href=&quot;https://twitter.com/javilopen/status/1691120893638950912?ref_src=twsrc%5Etfw&quot;&gt;August 14, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;a href=&quot;https://generativeai.pub/wait-did-they-just-leak-the-secret-behind-gpt-4-845d3db751cd&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Wait, Did They Just Leak The Secret Behind GPT-4?&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;OpenAI’s GPT-4 may owe its capabilities to an old technique from the early 1990s known as “Mixture of Experts”&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://cdn-static-1.medium.com/_/fp/icons/Medium-Avatar-500x500.svg&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Generative AI&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:1200/0*SePHbA3GeJiEgX51&quot; alt=&quot;Wait, Did They Just Leak The Secret Behind GPT-4?&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;h3 id=&quot;crypto&quot;&gt;Crypto&lt;/h3&gt;
&lt;a href=&quot;https://decrypt.co/152771/bitcoin-ethereum-are-now-less-volatile-oil-kaiko-research&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Bitcoin and Ethereum Are Now Less Volatile Than Oil: Kaiko Research - Decrypt&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;The summer doldrums are hitting Bitcoin and Ethereum hard, dampening the assets’ historic volatility to multi-year lows.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://cdn.decrypt.co/wp-content/themes/decrypt-media/assets/images/favicon-32x32.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Decrypt&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://cdn.decrypt.co/resize/1024/height/512/wp-content/uploads/2023/08/analysts-looking-at-chart-1-gID_7.jpg&quot; alt=&quot;Bitcoin and Ethereum Are Now Less Volatile Than Oil: Kaiko Research - Decrypt&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;a href=&quot;https://decrypt.co/151860/microsoft-ai-aptos-labs-apt-token&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Microsoft AI Integration Sends Aptos Token APT Soaring 13% - Decrypt&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;The price of APT is soaring after Microsoft announced it was partnering with Aptos Labs, the developer behind the blockchain.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://cdn.decrypt.co/wp-content/themes/decrypt-media/assets/images/favicon-32x32.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Decrypt&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://cdn.decrypt.co/resize/1024/height/512/wp-content/uploads/2023/02/aptos-mo-shaikh-gID_7.jpeg&quot; alt=&quot;Microsoft AI Integration Sends Aptos Token APT Soaring 13% - Decrypt&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;a href=&quot;https://unchainedcrypto.com/web3-gaming-platform-immutable-launches-zkevm-testnet/?utm_source=substack&amp;amp;utm_medium=email&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Web3 Gaming Platform Immutable Launches zkEVM Testnet&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;The new Layer 2 blockchain will be a first of its kind chain dedicated to Web3 gaming products building on Ethereum.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://unchainedcrypto.com/wp-content/uploads/2023/02/Profile-Icons.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Unchained Crypto&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://unchainedcrypto.com/wp-content/uploads/2023/08/fkwe-1024x683.jpeg&quot; alt=&quot;Web3 Gaming Platform Immutable Launches zkEVM Testnet&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;a href=&quot;https://decrypt.co/152383/fintech-front-defi-back-cryptos-quiet-revolution-is-underway&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Fintech in the Front, DeFi in the Back—Crypto’s Quiet Revolution Is Underway - Decrypt&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;From digital dollars to Visa cards, the promise of crypto is going to look a whole lot like the rise of fintech.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://cdn.decrypt.co/wp-content/themes/decrypt-media/assets/images/favicon-32x32.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Decrypt&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://cdn.decrypt.co/resize/1024/height/512/wp-content/uploads/2023/08/crypto-television-static-gID_7.jpg&quot; alt=&quot;Fintech in the Front, DeFi in the Back—Crypto’s Quiet Revolution Is Underway - Decrypt&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;h3 id=&quot;design&quot;&gt;Design&lt;/h3&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Is it mere coincidence or the intuition of Apple’s designer? &lt;br /&gt;&lt;br /&gt;This composition aligns remarkably well with the classic musical scale of octaves at a 2:1 ratio.&lt;br /&gt;&lt;br /&gt;Steal this concept for your next design 😈 &lt;a href=&quot;https://t.co/kYIZXbpYKs&quot;&gt;pic.twitter.com/kYIZXbpYKs&lt;/a&gt;&lt;/p&gt;— Vincent Le Moign (@webalys) &lt;a href=&quot;https://twitter.com/webalys/status/1691388380163051520?ref_src=twsrc%5Etfw&quot;&gt;August 15, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;h3 id=&quot;other-tech-stuff&quot;&gt;Other tech stuff&lt;/h3&gt;
&lt;p&gt;One of the leading video editing software makers, Avid, used for many major Hollywood productions, has recently been sold for $1.4B to a private equity firm.&lt;/p&gt;
&lt;a href=&quot;https://www.redsharknews.com/avid-sold-for-1.4-billion-what-comes-next?utm_medium=email&amp;amp;_hsmi=269892135&amp;amp;_hsenc=p2ANqtz-_R74KOEaLufQ4jQRTB7jRecb75ec_iE3PFudoPpJ6LmMZOJZyjjKS7TWG1nm2GQ0Z-PbBjFtH3g4zgcDj5emXr97ToiQ&amp;amp;utm_content=269892135&amp;amp;utm_source=hs_email&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Avid sold for $1.4 billion: what comes next?&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Several months after it was revealed that it was exploring its options, Avid was sold overnight to private equity firm STG for $1.4 billion. Is a separate ProTools sale next?&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.redsharknews.com/hubfs/rs-favicon.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;red-shark-logo&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://www.redsharknews.com/hubfs/money%20changing%20hands.jpg#keepProtocol&quot; alt=&quot;Avid sold for $1.4 billion: what comes next?&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;I learned today that tapping the Bluetooth icon in the Control Centre on your iPhone doesn’t actually turn off Bluetooth—it just disconnects from current devices. Apple designed it this way so that you can still use features like AirDrop and AirPlay. You have to go to Settings in order to actually disable Bluetooth.&lt;/p&gt;
&lt;a href=&quot;https://www.groovypost.com/howto/ios-11-control-center-does-not-disable-bluetooth-wifi-fix/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;The iOS 11 Control Center Doesn’t Really Disable Bluetooth and Wi-Fi - Here’s How to Fix It&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;If you want to conserve your battery and avoid all wireless activity on your iOS 11 device, you’re going to have to do this extra step.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.groovypost.com/wp-content/uploads/2017/11/cropped-gp-logo-512-270x270.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;groovyPost&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://www.groovypost.com/wp-content/uploads/2017/10/Network-Tech-Final-1-555x480.png&quot; alt=&quot;The iOS 11 Control Center Doesn’t Really Disable Bluetooth and Wi-Fi - Here’s How to Fix It&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;This enabled hackers at DefCon to put together a Raspberry Pi and a few other components for around $70 to pretend it’s an Apple device and trigger all sorts of popups on nearby iPhones that are used for connecting to nearby Apple devices.&lt;/p&gt;
&lt;a href=&quot;https://techcrunch.com/2023/08/16/this-70-device-can-spoof-an-apple-device-and-trick-you-into-sharing-your-password/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;This $70 device can spoof an Apple device and trick you into sharing your password | TechCrunch&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;A researcher built a $70 contraption designed to send pop-up prompts to nearby iPhones, which could trick targets into giving away their password.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://techcrunch.com/wp-content/uploads/2015/02/cropped-cropped-favicon-gradient.png?w=192&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;TechCrunch&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://techcrunch.com/wp-content/uploads/2023/08/iphone-popups-device-3.jpeg?resize=1200,900&quot; alt=&quot;This $70 device can spoof an Apple device and trick you into sharing your password | TechCrunch&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 

&lt;h3 id=&quot;dev&quot;&gt;Dev&lt;/h3&gt;
&lt;p&gt;My coding life changed this week when I discovered a beautiful new code editor for Mac: &lt;a href=&quot;https://nova.app&quot;&gt;Nova&lt;/a&gt;! It’s by &lt;a href=&quot;https://panic.com&quot;&gt;Panic&lt;/a&gt;, who have previously built beautiful Mac apps such as &lt;a href=&quot;https://panic.com/transmit/&quot;&gt;Transmit&lt;/a&gt; and &lt;a href=&quot;https://panic.com/coda//plugins.php#Picks&quot;&gt;Coda&lt;/a&gt;.&lt;/p&gt;
&lt;a href=&quot;http://nova.app&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Nova&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;The beautiful, fast, flexible, native Mac code editor from Panic.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;http://nova.app/apple-touch-icon.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Nova&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://nova.app/social-card.jpg&quot; alt=&quot;Nova&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;I’ve always loved the Xcode UI and it always surprised/disappointed me that Apple didn’t make it more friendly for web projects or that other web IDEs did not copy it. At the moment, the most popular web IDE is Microsoft’s Visual Studio Code, and while quite functional, I dislike the UI. There are good code editors such as Sublime Text, WebStorm, TextMate, and BBEdit, but I feel like they are all strong in specific areas and lacking in others.&lt;/p&gt;
&lt;p&gt;Nova is a beautiful, native Mac app that does everything well. It has:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A Mac-like UI for everything.&lt;/li&gt;
&lt;li&gt;Support for modern languages like JSX and TypeScript.&lt;/li&gt;
&lt;li&gt;A great built-in Git and diffing UI.&lt;/li&gt;
&lt;li&gt;Fast file-switching with Command-Shift-O.&lt;/li&gt;
&lt;li&gt;Great find/replace engine within files and projects.&lt;/li&gt;
&lt;li&gt;Split view terminal and WebKit browser for previewing changes.&lt;/li&gt;
&lt;li&gt;Extension library where you can install tools like Prettier and custom themes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Additionally, there are beautiful UI touches like showing the HTML tag nesting structure and colouring each indent level column line differently so you can distinguish them more easily.&lt;/p&gt;
&lt;p&gt;Useful functionality like &lt;code&gt;git blame&lt;/code&gt; is also there by default without having to add an extension.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/08/Screenshot-2023-08-17-at-10.05.57-pm-1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/08/Screenshot-2023-08-17-at-10.02.05-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/08/Screenshot-2023-08-17-at-10.03.02-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/08/Screenshot-2023-08-17-at-10.09.54-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Check it out—I think you’ll like it. I’m looking forward to finding out what other little gems they’ve added to the app! 💎 😀&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Alright, that’s a wrap—have a great weekend!&lt;/p&gt;</content:encoded></item><item><title>Python in Excel, AI face search, and deep-cloning JavaScript objects natively</title><link>https://steveharrison.dev/tech-roundup-2023-08-25/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2023-08-25/</guid><description>Microsoft is bringing Python to Excel:
There is now a reverse image lookup that uses facial recognition to find all images of a person publicly on the web</description><pubDate>Fri, 25 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Microsoft is &lt;a href=&quot;https://techcommunity.microsoft.com/t5/microsoft-365-blog/introducing-python-in-excel-the-best-of-both-worlds-for-data/ba-p/3905482&quot;&gt;bringing&lt;/a&gt; Python to Excel:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://techcommunity.microsoft.com/t5/image/serverpage/image-id/500233iD7050A57EA312914/image-size/large?v=v2&amp;amp;px=999&quot; alt=&quot;thumbnail image 1 captioned Seamlessly aggregate and visualize your data with Python in Excel.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;There is now a reverse image lookup that uses facial recognition to find all images of a person publicly on the web:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Possibly the most disturbing AI website on the internet.&lt;br /&gt;&lt;br /&gt;Upload a photo of a person, and AI will find ALL of the images of that person across the internet.&lt;br /&gt;&lt;br /&gt;Here’s what you need to know: &lt;a href=&quot;https://t.co/oIEUXdY8CE&quot;&gt;pic.twitter.com/oIEUXdY8CE&lt;/a&gt;&lt;/p&gt;— Rowan Cheung (@rowancheung) &lt;a href=&quot;https://twitter.com/rowancheung/status/1694341766961418566?ref_src=twsrc%5Etfw&quot;&gt;August 23, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;Parmigiano-Reggiano are now &lt;a href=&quot;https://www.wsj.com/world/europe/microchips-in-the-parmigiano-and-other-ways-europeans-are-fighting-fake-food-3c719f9c&quot;&gt;putting edible microchips&lt;/a&gt; into their cheese blocks to fight against knockoffs. The silicon chips, made by &lt;a href=&quot;https://p-chip.com/&quot;&gt;p-Chip&lt;/a&gt;, use blockchain to allow the cheese to be traced all the way back to the producer of the milk. The market of European food products with EU protected status—also including Greek feta cheese, Champagne, and Italian Parma raw ham—is worth €80 billion annually. These products can be twice the price of similar non-protected products, so there is a huge market—estimated to be also around €80 billion—for knockoffs and incentive for the food producers to prove authenticity.&lt;/p&gt;
&lt;p&gt;Here is a thread of what developers have been coming up with for Apple’s Vision Pro SDK:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Two months ago, Apple released Vision Pro’s SDK. Since then, the community has been cooking 🔥&lt;br /&gt;&lt;br /&gt;I collected some of my favorite creations so far ⬇️&lt;/p&gt;— Wenbo Tao (@tracy__henry) &lt;a href=&quot;https://twitter.com/tracy__henry/status/1693999486585242040?ref_src=twsrc%5Etfw&quot;&gt;August 22, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;My favourite is real-time subtitles:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Here’s Navi in action on &lt;a href=&quot;https://twitter.com/hashtag/visionOS?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#visionOS&lt;/a&gt;! It gives you subtitles for the real world, and can also translate what people are saying on the fly to your language. Obviously early in a lot of ways, but excited for how easy it is to develop for this platform. &lt;a href=&quot;https://t.co/5Vga3FoJSI&quot;&gt;pic.twitter.com/5Vga3FoJSI&lt;/a&gt;&lt;/p&gt;— Jordi Bruin (@jordibruin) &lt;a href=&quot;https://twitter.com/jordibruin/status/1688275141719916544?ref_src=twsrc%5Etfw&quot;&gt;August 6, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;For something a bit different, check out this luxury house that has been designed to resemble a yacht integrated into a hill in Greece:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/08/data-src-image-4901ffa2-e44c-4ba7-9024-47239d36b264.jpeg&quot; alt=&quot;Image from https://static.designboom.com/wp-content/dbsub/454614/2023-07-07/villa-earth-1-64a833492f954.jpg&quot; /&gt;&lt;/p&gt;
&lt;a href=&quot;https://www.designboom.com/architecture/greek-villa-earth-mediterranean-coast-futuristic-yacht-vrantsi-07-10-2023/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;greek ‘villa earth’ emerges from the mediterranean coast like a futuristic yacht&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;vrantsi’s ‘villa earth’ shaped like a yacht sits along the greek mediterranean coast, fusing organic forms and a futuristic aesthetic.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.designboom.com/favicon.ico&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;designboom | architecture &amp;amp; design magazine&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://www.designboom.com/twitterimages/uploads/2023/07/vrantsi-villa-earth-greece-designboom-1200.jpg&quot; alt=&quot;greek ‘villa earth’ emerges from the mediterranean coast like a futuristic yacht&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;Real-time CGI is improving in leaps and bounds:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;CGI is about to get easy &lt;br /&gt;&lt;br /&gt;This is simulon, a new iOS app that’s still in invite only mode &lt;br /&gt;&lt;br /&gt;The video below was made with a live in-camera preview and auto-exposure matching, no camera solve, no HDRI capture and no manual compositing setup.&lt;br /&gt;&lt;br /&gt;🔗 in next tweet &lt;a href=&quot;https://t.co/pJYFFaRGbd&quot;&gt;pic.twitter.com/pJYFFaRGbd&lt;/a&gt;&lt;/p&gt;— Linus (●ᴗ●) (@LinusEkenstam) &lt;a href=&quot;https://twitter.com/LinusEkenstam/status/1694121273964589368?ref_src=twsrc%5Etfw&quot;&gt;August 22, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;Midjourney has released a feature that allows you to generate new AI content for a specific part of an image, allowing you to keep the bits you like while regenerating certain other areas of an AI-generated image:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;🔴 FINALLY! Midjourney releases its INPAINTING!&lt;br /&gt;&lt;br /&gt;We’ve been WAITING for this for AGES. Now we can edit any area of our generations!&lt;br /&gt;&lt;br /&gt;💡 IMPORTANT: don’t forget to enable the REMIX option to be able to use a text prompt!&lt;br /&gt;&lt;br /&gt;📽️ VIDEO TUTORIAL 👇&lt;a href=&quot;https://twitter.com/hashtag/midjourney?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#midjourney&lt;/a&gt; &lt;a href=&quot;https://t.co/d8GQ1gLth0&quot;&gt;pic.twitter.com/d8GQ1gLth0&lt;/a&gt;&lt;/p&gt;— Javi Lopez ⛩️ (@javilopen) &lt;a href=&quot;https://twitter.com/javilopen/status/1693730802670981166?ref_src=twsrc%5Etfw&quot;&gt;August 21, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;For example, this AI-generated image originally featured a dog but was able to be changed to a variety of cats while preserving the rest of the image:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/08/twitter_F4GNB53a4AAx1Rc.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;StabilityAI has released StableCode, a large language model specifically aimed at coding:&lt;/p&gt;
&lt;a href=&quot;https://venturebeat.com/programming-development/stability-ai-launches-stablecode-an-llm-for-code-generation/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Stability AI launches StableCode, an LLM for code generation&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;StableCode, Stability AI’s code-generating LLM, will be available in a base model, an instruction model, and a long-context-window model.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://venturebeat.com/wp-content/themes/vb-news/img/favicon.ico&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;VentureBeat&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://venturebeat.com/wp-content/uploads/2023/08/StableCode.png?w=1200&amp;amp;strip=all&quot; alt=&quot;Stability AI launches StableCode, an LLM for code generation&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;blockquote&gt;
&lt;p&gt;“What we would like to do with this kind of model is to do a similar thing as we did for Stable Diffusion, which helped everyone in the world to become an artist,” Christian Laforte, head of research at Stability AI, told VentureBeat in an exclusive interview. “We’d like to do the same thing with the StableCode model: basically allow anyone that has good ideas [and] maybe has a problem, to be able to write a program that would just fix that problem.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;dev&quot;&gt;Dev&lt;/h2&gt;
&lt;p&gt;I keep forgetting about new CSS and JS features that are already available! One such example is &lt;a href=&quot;https://web.dev/structured-clone/&quot;&gt;&lt;code&gt;structuredClone&lt;/code&gt;&lt;/a&gt;, which allows you to properly deep clone an object natively in JavaScript:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/08/carbon--26-.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;You can also now use a &lt;a href=&quot;https://github.com/flackr/scroll-timeline&quot;&gt;polyfill&lt;/a&gt; for scroll-driven animations.&lt;/p&gt;
&lt;p&gt;Chrome is [implementing](&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/crossorigin%E2%80%A6&quot;&gt;https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/crossorigin…&lt;/a&gt;. &lt;a href=&quot;https://groups.google.com/a/chromium.org/g/blink-dev/c/IjZW1CQNNxM/m/st31PsqzAQAJ&quot;&gt;https://groups.google.com/a/chromium.org/g/blink-dev/c/IjZW1CQNNxM/m/st31PsqzAQAJ&lt;/a&gt;) the &lt;code&gt;crossorigin&lt;/code&gt; attribute on &lt;code&gt;&amp;lt;image&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;feImage&amp;gt;&lt;/code&gt; elements in SVGs. This is currently only available in Firefox 115. It will behave the same as the &lt;code&gt;crossorigin&lt;/code&gt; HTML attribute:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/F4HK60ibEAEpcq9?format=jpg&amp;amp;name=large&quot; alt=&quot;Image&quot; /&gt;&lt;/p&gt;
&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/crossorigin&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;SVG attribute: crossorigin - SVG: Scalable Vector Graphics | MDN&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;The crossorigin attribute, valid on the &amp;lt;image&amp;gt; and &amp;lt;feImage&amp;gt; elements, provides support for configuration of the Cross-Origin Resource Sharing (CORS) requests for the element’s fetched data.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://developer.mozilla.org/favicon-48x48.cbbd161b.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;MDN Web Docs&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://developer.mozilla.org/mdn-social-share.cd6c4a5a.png&quot; alt=&quot;SVG attribute: crossorigin - SVG: Scalable Vector Graphics | MDN&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;I’m also going to be talking about what’s new in CSS in 2023 at Web Directions Summit in October! Check out all the sessions and grab tickets here: &lt;a href=&quot;https://t.co/1NWSNSCVva&quot;&gt;https://webdirections.org/summit&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/F3sm_wLa0AABr2Z?format=webp&amp;amp;name=medium&quot; alt=&quot;Image&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;That’s all for now—have a great weekend!&lt;/p&gt;</content:encoded></item><item><title>Titanium iPhone, increasing sales with the &quot;IKEA effect&quot;, coding with AI, and more native Mac code editors</title><link>https://steveharrison.dev/tech-roundup-2023-09-01/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2023-09-01/</guid><description>Apple&apos;s new iPhone launch event is scheduled for the 13th September, where they&apos;re expected to release a new iPhone 15 with a USB-C port and a new Apple wa</description><pubDate>Fri, 01 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Apple’s new iPhone launch event is scheduled for the 13th September, where they’re &lt;a href=&quot;https://www.macrumors.com/2023/08/29/apple-september-12-event-announcement/&quot;&gt;expected to release&lt;/a&gt; a new iPhone 15 with a USB-C port and a new Apple watch. They may also switch to titanium for the shell for both.&lt;/p&gt;
&lt;a href=&quot;https://www.apple.com/au/apple-events/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Apple Events&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Watch the latest Apple event stream, and check out the archive of special event announcements for our products and services.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.apple.com/favicon.ico&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Apple (Australia)&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://www.apple.com/v/apple-events/home/ab/images/meta/overview__bcphzsdb4fpu_og.png?202308290915&quot; alt=&quot;Apple Events&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;Lamborghini has unveiled an all-electric concept car:&lt;/p&gt;
&lt;a href=&quot;https://www.lamborghini.com/en-en/news/lamborghini-unveils-concept-car-lanzador-at-monterey-car-week&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Lamborghini unveils concept car Lanzador at Monterey Car Week&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Lamborghini is presenting its electric concept car Lanzador at The Quail, A Motorsports Gathering&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.lamborghini.com/ico/android-chrome-192x192.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Lamborghini.com&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://www.lamborghini.com/sites/it-en/files/DAM/lamborghini/news/2023/08_19_lanzador_unveil/lanzador_unveil_cover.jpg&quot; alt=&quot;Lamborghini unveils concept car Lanzador at Monterey Car Week&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;The co-founder of Adobe, John Warnock, has died of pancreatic cancer at 82. Together with Charles Geschke, they &lt;a href=&quot;https://daringfireball.net/linked/2023/08/26/john-warnock-rip&quot;&gt;created technology&lt;/a&gt; such as the PDF format, PostScript, Photoshop, and Illustrator.&lt;/p&gt;
&lt;p&gt;And it has been revealed that Silicon Valley VCs, including Marc Andreessen and Laurene Powell Jobs (Steve Jobs’ wife), have purchased $800M of land near San Francisco to develop a new city. Bloomberg has done an excellent write-up on the project and other similar efforts to reimagine cities by tech billionaires:&lt;/p&gt;
&lt;a href=&quot;https://www.bloomberg.com/news/newsletters/2023-08-30/vcs-keep-trying-to-build-a-utopia-can-it-happen-in-california&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;VCs Keep Trying to Build a Utopia. Can It Happen in California?&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Today we’ll look at tech’s obsession with creating the perfect metropolis. But first…&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.bloomberg.com/favicon-black.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Bloomberg&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://assets.bwbx.io/images/users/iqjWHBFdfxIU/iGPIIrt8irEw/v2/1200x800.jpg&quot; alt=&quot;VCs Keep Trying to Build a Utopia. Can It Happen in California?&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;hr /&gt;
&lt;p&gt;I came across this interesting product strategy this week, where if you offer customers the ability to customise a product, they place much more value on it:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;We used the “Ikea effect” to increase conversion by 82%.&lt;br /&gt;&lt;br /&gt;Here’s why and how.&lt;br /&gt;&lt;br /&gt;The Ikea effect is a “cognitive bias in which consumers place a disproportionately high value on products they partially created”.&lt;br /&gt;&lt;br /&gt;We wanted to do 2 things in our product:&lt;br /&gt;&lt;br /&gt;1. Increase conversion… &lt;a href=&quot;https://t.co/lO77xrpvND&quot;&gt;pic.twitter.com/lO77xrpvND&lt;/a&gt;&lt;/p&gt;— Mike Heap (@mike_heap_) &lt;a href=&quot;https://twitter.com/mike_heap_/status/1694632563178955008?ref_src=twsrc%5Etfw&quot;&gt;August 24, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;It’s always interesting to see how the government fights against malware. In this example, they hacked computers in order to &lt;em&gt;remove&lt;/em&gt; malware:&lt;/p&gt;
&lt;a href=&quot;https://www.justice.gov/usao-cdca/pr/qakbot-malware-disrupted-international-cyber-takedown#:~:text=To%20disrupt%20the%20botnet%2C%20the,would%20uninstall%20the%20Qakbot%20malware.&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Qakbot Malware Disrupted in International Cyber Takedown&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;The Justice Department today announced a multinational operation involving actions in the United States, France, Germany, the Netherlands, the United Kingdom, Romania, and Latvia to disrupt the botnet and malware known as Qakbot and take down its infrastructure.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.justice.gov/themes/custom/usdoj_uswds/images/touch-icons/apple-touch-icon-precomposed-144x144.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;DOJ USAO Logo Central District of California&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://www.justice.gov/sites/all/modules/features/doj_sharing/images/doj-seal-fb.jpg&quot; alt=&quot;Qakbot Malware Disrupted in International Cyber Takedown&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;h2 id=&quot;ai&quot;&gt;AI&lt;/h2&gt;
&lt;p&gt;I discovered a website that has existed since 2019 that creates fake profile pictures using AI to use for testing. They look uncannily real:&lt;/p&gt;
&lt;a href=&quot;https://www.theverge.com/tldr/2019/2/15/18226005/ai-generated-fake-people-portraits-thispersondoesnotexist-stylegan&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;ThisPersonDoesNotExist.com uses AI to generate endless fake faces&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Hit refresh to lock eyes with another imaginary stranger&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.theverge.com/icons/android_chrome_512x512.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;The Verge&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://cdn.vox-cdn.com/thumbor/TIgH2JwBfSwbMSyIPZueH4f1v9g=/0x0:3049x2048/1200x628/filters:focal(1576x2047:1577x2048)/cdn.vox-cdn.com/uploads/chorus_asset/file/13762264/fake_ai_faces.png&quot; alt=&quot;ThisPersonDoesNotExist.com uses AI to generate endless fake faces&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;I’ve previously covered watermarking AI-generated audio—here’s what Google is doing to watermark AI-generated imagery:&lt;/p&gt;
&lt;a href=&quot;https://www.technologyreview.com/2023/08/29/1078620/google-deepmind-has-launched-a-watermarking-tool-for-ai-generated-images/?truid=681487482f67fa33387464e33bf36f75&amp;amp;utm_source=the_download&amp;amp;utm_medium=email&amp;amp;utm_campaign=the_download.unpaid.engagement&amp;amp;utm_term=&amp;amp;utm_content=08-29-2023&amp;amp;mc_cid=9a82f3fe1c&amp;amp;mc_eid=622e335c87&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Google DeepMind has launched a watermarking tool for AI-generated images&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;It’s the first Big Tech firm to publicly launch one, after a group of them pledged to develop them at the White House in July.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.technologyreview.com/2023/08/29/1078620/google-deepmind-has-launched-a-watermarking-tool-for-ai-generated-images/static/media/favicon.1cfcdb44.ico&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;MIT Technology Review&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://wp.technologyreview.com/wp-content/uploads/2023/08/still-header.png?resize=1200,600&quot; alt=&quot;Google DeepMind has launched a watermarking tool for AI-generated images&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;AI-assisted coding is rapidly advancing. Here are some examples users have shared of what you can do now using the AI-focused (and VSCode-based) IDE, &lt;a href=&quot;https://www.cursor.so&quot;&gt;Cursor&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Now my AI just tells me what the bugs are in my code as I work. &lt;a href=&quot;https://t.co/9oYVzViLBc&quot;&gt;pic.twitter.com/9oYVzViLBc&lt;/a&gt;&lt;/p&gt;— Mckay Wrigley (@mckaywrigley) &lt;a href=&quot;https://twitter.com/mckaywrigley/status/1696654304759947418?ref_src=twsrc%5Etfw&quot;&gt;August 29, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;We’re at the point with AI + coding where you can just give the AI a URL to some docs and it will learn the library.&lt;br /&gt;&lt;br /&gt;Insane. &lt;a href=&quot;https://t.co/BQHvLs4TyG&quot;&gt;pic.twitter.com/BQHvLs4TyG&lt;/a&gt;&lt;/p&gt;— Mckay Wrigley (@mckaywrigley) &lt;a href=&quot;https://twitter.com/mckaywrigley/status/1694810691201605712?ref_src=twsrc%5Etfw&quot;&gt;August 24, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;AWS also now has AI coding tools:&lt;/p&gt;
&lt;a href=&quot;https://aws.amazon.com/codewhisperer/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;AI Code Generator - Amazon CodeWhisperer - AWS&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Amazon CodeWhisperer is an AI coding companion that generates whole line and full function code suggestions in your IDE to help you get more done faster.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://a0.awsstatic.com/libra-css/images/site/touch-icon-ipad-144-smile.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Amazon Web Services, Inc.&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://a0.awsstatic.com/libra-css/images/logos/aws_logo_smile_1200x630.png&quot; alt=&quot;AI Code Generator - Amazon CodeWhisperer - AWS&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;And developers are using Vercel’s AI SDK to build some &lt;a href=&quot;https://twitter.com/steventey/status/1696232104395424163?s=12&amp;amp;t=oZJRyaxROrBeC4sT1iUY_g&quot;&gt;really interesting products&lt;/a&gt;, such as AI chat for YouTube videos and Yelp.&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Introducing Chat with YouTube, an AI-powered browser extension that lets you chat with YouTube videos! 🚀&lt;br /&gt;&lt;br /&gt;This project shows how easy it is to build conversational browser extensions using 🤗 Inference Endpoints and &lt;a href=&quot;https://twitter.com/vercel?ref_src=twsrc%5Etfw&quot;&gt;@Vercel&lt;/a&gt;’s AI SDK.&lt;br /&gt;&lt;br /&gt;+ it’s open source! &lt;a href=&quot;https://t.co/iF8c4la6bC&quot;&gt;&lt;a href=&quot;https://t.co/iF8c4la6bC&quot;&gt;https://t.co/iF8c4la6bC&lt;/a&gt;&lt;/a&gt; &lt;a href=&quot;https://t.co/rpVa5pE0CB&quot;&gt;pic.twitter.com/rpVa5pE0CB&lt;/a&gt;&lt;/p&gt;— Xenova (@xenovacom) &lt;a href=&quot;https://twitter.com/xenovacom/status/1691578817012187537?ref_src=twsrc%5Etfw&quot;&gt;August 15, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;Although not AI-related (yet) (also a great example of X’s user-submitted context), it’s pretty amazing to see what robotic tools are available to surgeons these days:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;A glimpse into the future of surgery.&lt;br /&gt;&lt;br /&gt;This robot uses high precision and dexterity to peel an egg, puncture it, and stitch it back up using computer vision.&lt;br /&gt;&lt;br /&gt;AI x Robotics is going to completely transform the world in the coming years.&lt;a href=&quot;https://t.co/INnSuG8Rr4&quot;&gt;pic.twitter.com/INnSuG8Rr4&lt;/a&gt;&lt;/p&gt;— Rowan Cheung (@rowancheung) &lt;a href=&quot;https://twitter.com/rowancheung/status/1696480066908119082?ref_src=twsrc%5Etfw&quot;&gt;August 29, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;h2 id=&quot;dev&quot;&gt;Dev&lt;/h2&gt;
&lt;p&gt;A handy little autocomplete for Terminal extension called Fig has been acquired by AWS. Fig was started by Brendan Falk, who I went to school with—great to see entrepreneurs from Canberra doing well!&lt;/p&gt;
&lt;a href=&quot;https://fig.io/blog/post/fig-joins-aws&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Fig has joined AWS!&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Amazon acquires Fig’s technology and the Fig team joins Amazon Web Services (AWS)&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://fig.io/icons/fig.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Download for free&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://fig.io/images/screenshots/meta-img.jpg&quot; alt=&quot;Fig has joined AWS!&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;Netflix have written a post about an automated tool they’ve developed to choose what artwork to feature for the preview thumbnails for TV shows and movies. There are lots of factors involved such as what resonates most for viewers and avoiding sensitive content that features violence, nudity, or gore.&lt;/p&gt;
&lt;a href=&quot;https://netflixtechblog.com/ava-discovery-view-surfacing-authentic-moments-b8cd145491cc&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;AVA Discovery View: Surfacing Authentic Moments&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;By: Hamid Shahid, Laura Johnson, Tiffany Low&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://cdn-static-1.medium.com/_/fp/icons/Medium-Avatar-500x500.svg&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Netflix TechBlog&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:890/0*o3U-Eg_XXmXzmMMO&quot; alt=&quot;AVA Discovery View: Surfacing Authentic Moments&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;A few weeks back I mentioned &lt;a href=&quot;https://nova.app/&quot;&gt;Nova&lt;/a&gt;, a new, native macOS code editor. I have been using it every day for work and I’m loving it! Interestingly enough, it seems there is a whole bunch of native macOS code editors out now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.chimehq.com/&quot;&gt;https://www.chimehq.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.codeedit.app/&quot;&gt;https://www.codeedit.app/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://coderunnerapp.com/&quot;&gt;https://coderunnerapp.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://coteditor.com/&quot;&gt;https://coteditor.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My favourite is CodeEdit, which has heavily copied the Xcode and Apple Developer design:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/08/image-1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;a href=&quot;https://www.codeedit.app/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;CodeEdit – A native code editor for macOS&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;A lightweight, natively built editor. Open source. Free forever.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.codeedit.app/favicon.svg&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt;  &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://www.codeedit.app/social-preview.jpg&quot; alt=&quot;CodeEdit – A native code editor for macOS&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;Some of these are open source, and have less features than apps like Nova and VSCode; nevertheless, it’s great to have choice! It’s interesting that there are a lot focused on being native to Mac and not supporting other platforms—I guess others felt similar to me that there was a gap in the market on Mac after getting sick of Electron-based experiments like &lt;a href=&quot;https://github.com/atom&quot;&gt;Atom&lt;/a&gt;…&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;That’s all for now—have a great weekend!&lt;/p&gt;</content:encoded></item><item><title>AI meets typography, grifting from crypto -&gt; AI, and copying startups in your country</title><link>https://steveharrison.dev/tech-roundup-2023-09-08/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2023-09-08/</guid><description>AI
OpenAI will host its first developer conference on 6 November. And startups in incubator Y Combinator&apos;s program have presented their ideas:
5 neat AI </description><pubDate>Fri, 08 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h3 id=&quot;ai&quot;&gt;AI&lt;/h3&gt;
&lt;p&gt;OpenAI will host its first developer conference on 6 November. And startups in incubator Y Combinator’s program have presented their ideas:&lt;/p&gt;
&lt;a href=&quot;https://techcrunch.com/2023/09/06/5-neat-ai-startups-from-y-combinators-winter-2023-batch/amp/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;5 neat AI startups from Y Combinator’s Summer 2023 batch | TechCrunch&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;It’s Y Combinator Demo Day for companies in the incubator’s Summer 2023 cohort. Here’s a few of the more intriguing AI firms of the bunch.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://techcrunch.com/wp-content/themes/techcrunch-2017/images/favicon.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;TechCrunch&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://techcrunch.com/wp-content/uploads/2019/03/y-combinator-gears1.png?resize=1200,674&quot; alt=&quot;5 neat AI startups from Y Combinator’s Summer 2023 batch | TechCrunch&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;The AI image generation tool Midjourney has always struggled when it comes to typography. Some former Google Brain researches aim to fix this with their new tool, &lt;a href=&quot;https://venturebeat.com/ai/watch-out-midjourney-ideogram-launches-ai-image-generator-with-impressive-typography/?utm_source=tldrdesign&quot;&gt;Ideogram&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/09/Screenshot-2023-08-24-at-4.07.35-PM.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Meet the new AI Coffee Shop boss.&lt;br /&gt;&lt;br /&gt;It can track how productive baristas are and how much time customers spend in the shop.&lt;br /&gt;&lt;br /&gt;We’re headed into wild times. &lt;a href=&quot;https://t.co/tygyCrWQ2T&quot;&gt;pic.twitter.com/tygyCrWQ2T&lt;/a&gt;&lt;/p&gt;— Rowan Cheung (@rowancheung) &lt;a href=&quot;https://twitter.com/rowancheung/status/1697204841813070261?ref_src=twsrc%5Etfw&quot;&gt;August 31, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;Call of Duty, a popular first-person shooter game, has partnered with AI company Modulate to &lt;a href=&quot;https://www.theverge.com/2023/8/30/23852652/call-of-duty-activision-modulate-toxmod-artificial-intelligence-voice-moderation&quot;&gt;start analysing&lt;/a&gt; in-game voice chats for content moderation:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Modulate’s press release doesn’t include too many details about how exactly ToxMod works. &lt;a href=&quot;https://www.modulate.ai/tox-mod&quot;&gt;Its website&lt;/a&gt; notes that the tool “triages voice chat to flag bad behavior, analyzes the nuances of each conversation to determine toxicity, and enables moderators to quickly respond to each incident by supplying relevant and accurate context.” The company’s CEO said in a &lt;a href=&quot;https://venturebeat.com/games/modulate-raises-30m-to-detoxify-voice-chat-in-games-with-ai/&quot;&gt;recent interview&lt;/a&gt; that the tool aims to go beyond mere transcription; it takes factors like a player’s emotions and volume into context as well in order to differentiate harmful statements from playful ones.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Globalstar, a satellite network operator &lt;a href=&quot;https://techcrunch.com/2023/09/01/apple-backed-globalstar-inks-64m-launch-contract-with-spacex/&quot;&gt;has purchased&lt;/a&gt; $64 million worth of launches from SpaceX. Apple backs Globalstar and uses them to provide its Emergency SOS feature.&lt;/p&gt;
&lt;h3 id=&quot;finance&quot;&gt;Finance&lt;/h3&gt;
&lt;p&gt;A YouTuber lost $60K in crypto after &lt;a href=&quot;https://decrypt.co/154522/youtuber-loses-60k-worth-crypto-after-showing-seed-phrase-stream&quot;&gt;accidentally revealing&lt;/a&gt; his seed phrases (essentially your crypto password) during a livestream.&lt;/p&gt;
&lt;p&gt;The neobank Up has &lt;a href=&quot;https://www.smartcompany.com.au/climate-change/up-seabin-recycled-debit-card/&quot;&gt;launched&lt;/a&gt; a new debit card that is made from 82% recycled materials in a partnership with Seabin.&lt;/p&gt;
&lt;p&gt;This gem on startups pivoting from crypto to AI:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The move from crypto to artificial intelligence fueled the markets this year, but some are questioning how much of it is real. A company that wasn’t doing well renamed itself to “Applied Blockchain”, but a little too late. Luckily for them, ChatGPT came out a few months later. To boost their stock price, they renamed themselves “Applied Digital” and mentioned AI a few times in their earnings call, getting a hyped 450% increase in the public markets. While dollars are flowing in quickly to all things AI, it is yet to be seen whether these companies can even last.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;a href=&quot;https://www.institutionalinvestor.com/article/2c4fad0w6irk838pca3gg/portfolio/money-is-pouring-into-ai-skeptics-say-its-a-grift-shift?utm_source=tldrwebdev&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Money Is Pouring Into AI. Skeptics Say It’s a ‘Grift Shift.’&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;The move from crypto to artificial intelligence has fueled the markets this year, but some are questioning how much of it is real.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.institutionalinvestor.com/apple-touch-icon.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Institutional Investor&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://cdn.assetmg.info/dims4/default/e0f778a/2147483647/strip/true/crop/1200x675+0+13/resize/1440x810!/quality/90/?url=https%3A%2F%2Fk2-prod-in-investor-prod.s3.amazonaws.com%2Fbrightspot%2F1e%2F9c%2Fcf470f664a3cab27db4b61b7db27%2Fart-grift-shift-feature.jpg&quot; alt=&quot;Money Is Pouring Into AI. Skeptics Say It’s a ‘Grift Shift.’&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;UBS also seems to be doing OK for themselves:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://email.news-alerts.ft.com/c/eJxEkU2O3DoMhE9j79ggJepvocUA7zXQ6yQHkChqxkDbntjqNHL7YCYJsiPAQuGrKilDX_fjZ970ed51DD3mllElsJs1k0_WMcbgZl3Lcr-1HIKJIZgOkSoBkyDUWhVISrfIbIsP81sOmIwSGULnjHoKRoisZQnOB19pXrJBYzEhISNivBTHvYqx0XARijwxfkBBuesxzksfF9nX-Z7fxnif7MtkrpO5Pp_PP5_JXGXfhm7j4yrB2uIE0EUEjtFDTdF-QqYUfHEhTfZ66uuq27i1yf5XsQX1zoJlH4BMqSDYEUJQZsPSKst8X85xa9l58YrBpS6lV7SIkVKsbX4_9vaQkV8eY___o7D5yOfQH3p5K8exnPt2WXViXPUzzKHfH_rbEbX2mgJU9RZYjIFiTYFksReOLkVtf-XavujWvi7rv30wzuMo21lkLPt2a9kyRwmmgTBW4G48RK4RqProiShQkflx6vHtsbTMJEVbROilBmAuHmLyCBS1R2J2zfVfAQAA__8UQKJO&quot;&gt;‘Deal of the century’: how UBS’s rescue of Credit Suisse proved a boon&lt;/a&gt; Record $29bn quarterly profit linked to the takeover triggers fierce political debate in Switzerland&lt;a href=&quot;https://www.neoseed.io/&quot;&gt;NeoSeed.io&lt;/a&gt; is an interesting website for listing startup ideas that have succeeded  in other countries to replicate in your own country.&lt;/p&gt;
&lt;p&gt;Meanwhile the state of tipping in the US:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/09/image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;dev&quot;&gt;Dev&lt;/h3&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;its 2023 and you can now train your editor to read the docs and write code for you &lt;a href=&quot;https://t.co/GqLsTcVRcX&quot;&gt;pic.twitter.com/GqLsTcVRcX&lt;/a&gt;&lt;/p&gt;— Chris Sev (@chris__sev) &lt;a href=&quot;https://twitter.com/chris__sev/status/1699257585336287693?ref_src=twsrc%5Etfw&quot;&gt;September 6, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;An open source visual editor for React 🤯&lt;a href=&quot;https://t.co/CGFOAVK7dw&quot;&gt;&lt;a href=&quot;https://t.co/CGFOAVK7dw&quot;&gt;https://t.co/CGFOAVK7dw&lt;/a&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href=&quot;https://twitter.com/reactjs?ref_src=twsrc%5Etfw&quot;&gt;@reactjs&lt;/a&gt; ecosystem is… unstoppable. &lt;a href=&quot;https://t.co/jDgj0NwE45&quot;&gt;pic.twitter.com/jDgj0NwE45&lt;/a&gt;&lt;/p&gt;— Guillermo Rauch (@rauchg) &lt;a href=&quot;https://twitter.com/rauchg/status/1699106822698025103?ref_src=twsrc%5Etfw&quot;&gt;September 5, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;hr /&gt;
&lt;p&gt;I’ll be taking a break from the newsletter and podcast for the next three weeks while I’m on holidays. Have a great weekend and I’ll see you when I get back!&lt;/p&gt;</content:encoded></item><item><title>OpenAI announcements, dev creates entire web game using ChatGPT, and creating UI components with AI</title><link>https://steveharrison.dev/tech-roundup-2023-11-07/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2023-11-07/</guid><description>







OpenAI introduces GPT Store

At OpenAI&apos;s first developer conference, Sam Altman announced a way to create custom AI bots and share them on the Op</description><pubDate>Tue, 07 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;/content/images/2023/11/Screenshot-2023-11-07-at-6.41.00-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;openai-introduces-gpt-store&quot;&gt;OpenAI introduces GPT Store&lt;/h3&gt;
&lt;p&gt;At OpenAI’s first developer conference, Sam Altman &lt;a href=&quot;https://openai.com/blog/introducing-gpts&quot;&gt;announced&lt;/a&gt; a way to create custom AI bots and share them on the OpenAI platform.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://techcrunch.com/wp-content/uploads/2023/11/GPT-Store.jpg?w=680&quot; alt=&quot;Image Credits: OpenAI GPT Store&quot; /&gt;&lt;/p&gt;
&lt;p&gt;They also announced a whole range of new features, and what better way to summarise it than by using their own tool? 😎&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/11/Screenshot-2023-11-07-at-7.00.35-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;As you can see, ChatGPT no longer is limited to information from 2021 and the above UI told me how it browsed the web with Bing then read an article on &lt;a href=&quot;https://decrypt.co/204516/heres-everything-announced-at-openais-dev-day&quot;&gt;Decrypt&lt;/a&gt; in order to generate its response. This is no longer a separate feature like it was a few months ago—it’s now integrated into the main product seamlessly.&lt;/p&gt;
&lt;p&gt;You can compare what it generated with the coverage from &lt;a href=&quot;https://techcrunch.com/2023/11/06/everything-announced-at-openais-first-developer-event/&quot;&gt;TechCrunch&lt;/a&gt; and &lt;a href=&quot;https://www.theverge.com/2023/11/6/23948619/openai-chatgpt-devday-developer-conference-news&quot;&gt;The Verge&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Watch the whole keynote &lt;a href=&quot;https://www.youtube.com/watch?v=U9mJuUkhUzk&amp;amp;ab_channel=OpenAI&quot;&gt;here&lt;/a&gt;:&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;&lt;a href=&quot;https://x.com/javilopen&quot;&gt;Javi Lopez&lt;/a&gt; has been posting some pretty impressive stuff on X. First, he used ChatGPT to create a web game, “Angry Pumpkins”, that’s inspired by Halloween and the popular iOS game Angry Birds.&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Midjourney, DALL•E 3 and GPT-4 have opened a world of endless possibilities.&lt;br /&gt;&lt;br /&gt;I just coded “Angry Pumpkins 🎃” (any resemblance is purely coincidental 😂) using GPT-4 for all the coding and Midjourney / DALLE for the graphics.&lt;br /&gt;&lt;br /&gt;Here are the prompts and the process I followed: &lt;a href=&quot;https://t.co/st3OEhVVtK&quot;&gt;pic.twitter.com/st3OEhVVtK&lt;/a&gt;&lt;/p&gt;— Javi Lopez ⛩️ (@javilopen) &lt;a href=&quot;https://twitter.com/javilopen/status/1719363262179938401?ref_src=twsrc%5Etfw&quot;&gt;October 31, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;Go &lt;a href=&quot;https://bestaiprompts.art/angry-pumpkins/index.html&quot;&gt;give it a try&lt;/a&gt;! I think it’s pretty impressive. Vercel CEO Guillermo Ranch also did an interview with Javier:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;I was so blown away by &lt;a href=&quot;https://twitter.com/javilopen?ref_src=twsrc%5Etfw&quot;&gt;@javilopen&lt;/a&gt;’s Angry Birds replication with AI that I had to verify it myself 😁&lt;br /&gt;&lt;br /&gt;What I learned:&lt;br /&gt;◆ The game was 100% written by AI. Every LOC&lt;br /&gt;◆ It only took 10-12 hours of total work&lt;br /&gt;◆ I saw the entire ChatGPT conversation. Over 400 messages exchanged.… &lt;a href=&quot;https://t.co/8sXVAeevh2&quot;&gt;pic.twitter.com/8sXVAeevh2&lt;/a&gt;&lt;/p&gt;— Guillermo Rauch (@rauchg) &lt;a href=&quot;https://twitter.com/rauchg/status/1719806824206258264?ref_src=twsrc%5Etfw&quot;&gt;November 1, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;But that’s not the only cool stuff that Javier has been posting:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;⚡ HUGE LEGO BUILDING&lt;br /&gt;&lt;br /&gt;100% AI generated.&lt;br /&gt;&lt;br /&gt;Generative AI has a tough time generating large images with lots of fine details. But I think we’re making headway. &lt;a href=&quot;https://t.co/F7UUMxAFFU&quot;&gt;pic.twitter.com/F7UUMxAFFU&lt;/a&gt;&lt;/p&gt;— Javi Lopez ⛩️ (@javilopen) &lt;a href=&quot;https://twitter.com/javilopen/status/1721625654599262635?ref_src=twsrc%5Etfw&quot;&gt;November 6, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;When you zoom in, it’s obviously not perfect, but still quite neat!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/F-RyowKWcAA2Szt?format=png&amp;amp;name=900x900&quot; alt=&quot;Image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Some other interesting AI stuff I’ve come across:&lt;/p&gt;
&lt;a href=&quot;https://techcrunch.com/2023/10/27/ais-proxy-war-heats-up-as-google-reportedly-backs-anthropic-with-2b/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;AI’s proxy war heats up as Google reportedly backs Anthropic with $2B | TechCrunch&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;With a massive $2 billion reported investment from Google, Anthropic joins OpenAI in reaping the benefits of leadership in the artificial intelligence&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://techcrunch.com/wp-content/uploads/2015/02/cropped-cropped-favicon-gradient.png?w=192&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;TechCrunch&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://techcrunch.com/wp-content/uploads/2023/05/anthropic-header.jpg?resize=1200,675&quot; alt=&quot;AI’s proxy war heats up as Google reportedly backs Anthropic with $2B | TechCrunch&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Ash is a pocket AI nature guide for kids inspired by Ash’s Pokédex. It helps children connect with and learn about the biodiversity around them.&lt;br /&gt;&lt;br /&gt;I absolutely adore the simplicity of Ash.&lt;br /&gt;&lt;br /&gt;🔗  &lt;a href=&quot;https://t.co/nsIHceu4Lc&quot;&gt;&lt;a href=&quot;https://t.co/nsIHceu4Lc&quot;&gt;https://t.co/nsIHceu4Lc&lt;/a&gt;&lt;/a&gt; &lt;a href=&quot;https://t.co/44pB2wiBuC&quot;&gt;pic.twitter.com/44pB2wiBuC&lt;/a&gt;&lt;/p&gt;— Valera Pieŭnioŭ 💙💛 (@mamkindesigner) &lt;a href=&quot;https://twitter.com/mamkindesigner/status/1717145092832837764?ref_src=twsrc%5Etfw&quot;&gt;October 25, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;hr /&gt;
&lt;a href=&quot;https://www.apple.com/newsroom/2023/10/behind-the-scenes-at-scary-fast-apples-keynote-event-shot-on-iphone/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Behind the scenes at Scary Fast: Apple’s keynote event shot on iPhone&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Apple goes behind the scenes of Scary Fast, a special event unveiling the all-new MacBook Pro family and iMac.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.apple.com/favicon.ico&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Apple Newsroom&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://www.apple.com/newsroom/images/2023/10/behind-the-scenes-at-scary-fast-apples-keynote-event-shot-on-iphone/tile/Apple-Shot-on-iPhone-Apple-Log.jpg.og.jpg?202310312304&quot; alt=&quot;Behind the scenes at Scary Fast: Apple’s keynote event shot on iPhone&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;a href=&quot;https://www.linkedin.com/posts/otto-plesner_artist-artists-art-ugcPost-7123186848478175233-k09F/?utm_source=share&amp;amp;utm_medium=member_desktop&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Otto Plesner on LinkedIn: #artist #artists #art #artandtechnology #technology #light #fashion… | 19 comments&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;This captivating collection, masterminded by the innovative designer Kunihiko Morinaga for Anrealage, showcases the mesmerizing artistry of heat-reactive… | 19 comments on LinkedIn&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://static.licdn.com/aero-v1/sc/h/al2o9zrvru7aqj8e1x2rzsrca&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;LinkedIn&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://media.licdn.com/dms/image/D4E05AQGUYa6Vhykmkw/videocover-high/0/1698300105206?e=2147483647&amp;amp;v=beta&amp;amp;t=QWfBheC0OkQErt6DYMetl2-8GJg5Bm4MV99IXIEgkpY&quot; alt=&quot;Otto Plesner on LinkedIn: #artist #artists #art #artandtechnology #technology #light #fashion… | 19 comments&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;10 creative ads I’ve collected this week:&lt;br /&gt;&lt;br /&gt;1. Luxor Highlighters &lt;a href=&quot;https://t.co/LfzEWL0QCf&quot;&gt;pic.twitter.com/LfzEWL0QCf&lt;/a&gt;&lt;/p&gt;— The Ad Professor (@The_AdProfessor) &lt;a href=&quot;https://twitter.com/The_AdProfessor/status/1717894559735460263?ref_src=twsrc%5Etfw&quot;&gt;October 27, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;This is hilarious and also why startups should never hire MBA consultants who have never built a company before. &lt;a href=&quot;https://t.co/MkBhUbfyw6&quot;&gt;pic.twitter.com/MkBhUbfyw6&lt;/a&gt;&lt;/p&gt;— Andrew Gazdecki (@agazdecki) &lt;a href=&quot;https://twitter.com/agazdecki/status/1717923906726826015?ref_src=twsrc%5Etfw&quot;&gt;October 27, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;hr /&gt;
&lt;h2 id=&quot;dev&quot;&gt;Dev&lt;/h2&gt;
&lt;a href=&quot;https://infrequently.org/2023/02/the-market-for-lemons/#shrinkage&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;The Market for Lemons - Infrequently Noted&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;New web services are being built to a self-defeatingly low UX and performance standard, and existing experiences are now pervasively re-developed on unspeakably slow, JS-taxed stacks. At a business level, this is a disaster, raising the question: why are new teams buying into stacks that have failed…&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://infrequently.org/assets/images/favicons/android-icon-192x192.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Alex Russell&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://infrequently.org/2023/02/the-market-for-lemons/anti-js-js-club-lighter-small.jpg&quot; alt=&quot;The Market for Lemons - Infrequently Noted&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/clamp#try_it&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;clamp() - CSS: Cascading Style Sheets | MDN&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;The clamp() CSS function clamps a middle value within a range of values between a defined minimum bound and a maximum bound. The function takes three parameters: a minimum value, a preferred value, and a maximum allowed value.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://developer.mozilla.org/favicon-48x48.cbbd161b.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;MDN Web Docs&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://developer.mozilla.org/mdn-social-share.cd6c4a5a.png&quot; alt=&quot;clamp() - CSS: Cascading Style Sheets | MDN&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;a href=&quot;https://vercel.com/font/sans&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Geist Font&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Geist is a typeface made for developers and designers, embodying Vercel’s design principles of simplicity, minimalism, and speed, drawing inspiration from the renowned Swiss design movement.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://assets.vercel.com/image/upload/front/favicon/vercel/180x180.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Vercel&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://assets.vercel.com/image/upload/v1698089616/front/geist-font-page/og/geist-font-og.png&quot; alt=&quot;Geist Font&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;a href=&quot;https://josem.co/the-beauty-of-finished-software/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;The beauty of finished software&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Let me introduce you to WordStar 4.0, a popular word processor from the early 80s.
WordStar 4.0
As old as it seems, George R.R. Martin used it to write “A Song of Ice and Fire”.
Why would someone use such an old piece of software to write over 5,000 pages? I love how he puts it:
It does everything I…&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://josem.co/favicon-32x32.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Jose M.&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://josem.co/images/avatar.png&quot; alt=&quot;The beauty of finished software&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;a href=&quot;https://daverupert.com/2023/10/accessiblity-shamed/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;So you’ve been publicly accessibility-shamed&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;The personal blog of Dave Rupert, web developer and podcaster from Austin, TX.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://daverupert.com/favicon.ico&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Dave Rupert&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://cdn.daverupert.com/opengraph/shame.png&quot; alt=&quot;So you’ve been publicly accessibility-shamed&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;AI tool that uses your design system to create new components (along with all of the code) 👇 &lt;a href=&quot;https://t.co/6GWN58rDUy&quot;&gt;pic.twitter.com/6GWN58rDUy&lt;/a&gt;&lt;/p&gt;— Ridd 🤿 (@ridd_design) &lt;a href=&quot;https://twitter.com/ridd_design/status/1719398949826777255?ref_src=twsrc%5Etfw&quot;&gt;October 31, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;a href=&quot;https://web.dev/articles/inp&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Interaction to Next Paint (INP) | Articles | web.dev&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;This post introduces the Interaction to Next Paint (INP) metric and explains how it works, how to measure it, and offers suggestions on how to improve it.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v2969aa5c356a1994c35b6b6f94f2c6fc8c28faf9af75d026e0b265867da17793/web/images/favicon.png&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;web.dev&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://web.dev/images/authors/jlwagner.jpg&quot; alt=&quot;Interaction to Next Paint (INP) | Articles | web.dev&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Something is cooking!&lt;br /&gt;&lt;br /&gt;Earlier this month at my Awwwards talk the audience was amazed when I added Wiggle Bones to my demo&lt;br /&gt;&lt;br /&gt;Here’s a prototype featuring the technique in different objects. Will be sharing a live link very soon ;)&lt;br /&gt;&lt;br /&gt;Done with &lt;a href=&quot;https://twitter.com/threejs?ref_src=twsrc%5Etfw&quot;&gt;@threejs&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/Blender?ref_src=twsrc%5Etfw&quot;&gt;@blender&lt;/a&gt; as usual &lt;a href=&quot;https://t.co/gekKbhZ0We&quot;&gt;pic.twitter.com/gekKbhZ0We&lt;/a&gt;&lt;/p&gt;— Xavier (Jack) (@KMkota0) &lt;a href=&quot;https://twitter.com/KMkota0/status/1719392775462940845?ref_src=twsrc%5Etfw&quot;&gt;October 31, 2023&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;TIL you can turn any website into an editable canvas with just a simple command in the console:&lt;br /&gt;&lt;br /&gt;document.designMode = ‘on’&lt;a href=&quot;https://t.co/LHyYD7Txcs&quot;&gt;pic.twitter.com/LHyYD7Txcs&lt;/a&gt;&lt;/p&gt;— Steven Tey (@steventey) &lt;a href=&quot;https://twitter.com/steventey/status/1720932891616756119?ref_src=twsrc%5Etfw&quot;&gt;November 4, 2023&lt;/a&gt;&lt;/blockquote&gt;
</content:encoded></item><item><title>Photorealistic AI avatars, poisoning generative AI, Apple Event 31 Oct, and CSS :has/:where/:is selectors</title><link>https://steveharrison.dev/tech-roundup-2023-10-26/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2023-10-26/</guid><description>You can now create AI avatars for training videos with D-ID. But these are not your average 3D avatars from Meta or Apple. They look photorealistic. Welcom</description><pubDate>Thu, 26 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;You can now create AI avatars for training videos with &lt;a href=&quot;https://www.d-id.com/&quot;&gt;D-ID&lt;/a&gt;. But these are not your average 3D avatars from Meta or Apple. They look photorealistic. Welcome to a new (uncanny?) world of mandatory training videos!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/10/Screenshot-2023-10-26-at-12.23.04-am.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;AI researchers have &lt;a href=&quot;https://www.technologyreview.com/2023/10/23/1082189/data-poisoning-artists-fight-generative-ai/&quot;&gt;come up with a novel approach&lt;/a&gt; for content creators to battle unwanted image scraping to train AI models: authors can add invisible changes to the pixels in their images that then ‘poison’ the AI model so that dogs become cats, cars become cows, etc.:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/10/F9QHK5PW4AA_4oX.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;From the &lt;a href=&quot;https://arxiv.org/abs/2310.13828&quot;&gt;paper&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Data poisoning attacks manipulate training data to introduce unexpected behaviors into machine learning models at training time. For text-to-image generative models with massive training datasets, current understanding of poisoning attacks suggests that a successful attack would require injecting millions of poison samples into their training pipeline. In this paper, we show that poisoning attacks can be successful on generative models. We observe that training data per concept can be quite limited in these models, making them vulnerable to prompt-specific poisoning attacks, which target a model’s ability to respond to individual prompts.&lt;/p&gt;
&lt;p&gt;We introduce Nightshade, an optimized prompt-specific poisoning attack where poison samples look visually identical to benign images with matching text prompts. Nightshade poison samples are also optimized for potency and can corrupt an Stable Diffusion SDXL prompt in &amp;lt;100 poison samples. Nightshade poison effects “bleed through” to related concepts, and multiple attacks can composed together in a single prompt. Surprisingly, we show that a moderate number of Nightshade attacks can destabilize general features in a text-to-image generative model, effectively disabling its ability to generate meaningful images. Finally, we propose the use of Nightshade` and similar tools as a last defense for content creators against web scrapers that ignore opt-out/do-not-crawl directives, and discuss possible implications for model trainers and content creators.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;p&gt;Apple is &lt;a href=&quot;https://www.apple.com/au/apple-events/&quot;&gt;set to announce&lt;/a&gt; some new Mac products on Tue 31 Oct! It’s the first time they’ve held an event in the evening, which means we will be able to watch it in Australia at 11am!&lt;/p&gt;
&lt;a href=&quot;https://www.apple.com/au/apple-events/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Apple Events&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Watch the latest Apple event stream, and check out the archive of special event announcements for our products and services.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.apple.com/favicon.ico&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Apple (Australia)&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://www.apple.com/v/apple-events/home/ac/images/meta/overview__bcphzsdb4fpu_og.png?202310241251&quot; alt=&quot;Apple Events&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;0:00&lt;/p&gt;
&lt;p&gt;/0:13&lt;/p&gt;
&lt;p&gt;1×&lt;/p&gt;
&lt;hr /&gt;
&lt;ul&gt;
&lt;li&gt;Monday.com have announced that they &lt;a href=&quot;https://monday.com/ap/mondaydb&quot;&gt;built their own database&lt;/a&gt; instead of choosing one off the shelf.&lt;/li&gt;
&lt;li&gt;Meta &lt;a href=&quot;https://engineercodex.substack.com/p/meta-xfaas-serverless-functions-explained&quot;&gt;has a serverless platform&lt;/a&gt; called &lt;a href=&quot;https://dl.acm.org/doi/abs/10.1145/3600006.3613155&quot;&gt;XFaaS&lt;/a&gt; that they claim is more efficient than existing serverless options like AWS Lambda.&lt;/li&gt;
&lt;li&gt;You can take a &lt;a href=&quot;https://stylex-docusaurus.vercel.app/&quot;&gt;sneak peak at the docs&lt;/a&gt; for Meta’s CSS-in-JS framework, StyleX, which is being used on the new Facebook website. It hasn’t been released yet.&lt;/li&gt;
&lt;li&gt;Laser beams have been &lt;a href=&quot;https://thedebrief.org/laser-beams-deflected-off-of-nothing-but-air-for-first-time-ever-in-breakthrough-patent-pending-process/&quot;&gt;deflected off nothing but air&lt;/a&gt; for the first time, while maintaining the beam’s strength and integrity.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;There’s a &lt;a href=&quot;https://webkit.org/blog/13096/css-has-pseudo-class/&quot;&gt;great write-up&lt;/a&gt; on the WebKit blog of some of the things that the new CSS selector &lt;code&gt;:has&lt;/code&gt; unlocks. My favourite is this example of being able to change the layout for card components that have images:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/10/Screenshot-2023-10-25-at-12.15.29-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;:where&lt;/code&gt; and &lt;code&gt;:is&lt;/code&gt; CSS selectors were introduced in 2021, but I just discovered them! They’re supported in all major browsers and provide some interesting ways of combining selectors for readability, but also for controlling specificity:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/10/Screenshot-2023-10-25-at-6.29.25-pm.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The specificity of the &lt;code&gt;:where&lt;/code&gt; selector is always zero, so you can use it to wrap selectors like &lt;code&gt;:not&lt;/code&gt;, which increase specificity, if you wish to use them without impacting the selector’s specificity.&lt;/p&gt;
&lt;p&gt;Learn more here:
&lt;a href=&quot;https://web.dev/articles/css-is-and-where&quot;&gt;https://web.dev/articles/css-is-and-where
&lt;/a&gt;&lt;a href=&quot;https://css-tricks.com/almanac/selectors/w/where/&quot;&gt;https://css-tricks.com/almanac/selectors/w/where/
&lt;/a&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/:where&quot;&gt;https://developer.mozilla.org/en-US/docs/Web/CSS/:where&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And Safari’s Web Inspector now visualises border radius (8px here) in the box model diagram!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2023/10/Screenshot-2023-10-25-at-11.22.18-am.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Publishing the newsletter and podcast every week has been a bit hectic, so starting with this one, I’ll just post as I get the time.&lt;/p&gt;</content:encoded></item><item><title>What&apos;s new in AI in October?</title><link>https://steveharrison.dev/tech-roundup-2024-10-28/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-2024-10-28/</guid><description>It&apos;s been a while since I did a tech roundup! A lot has been announced in the way of AI—let&apos;s dive in.
Anthropic has released updates, including a &quot;comput</description><pubDate>Mon, 28 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It’s been a while since I did a tech roundup! A lot has been announced in the way of AI—let’s dive in.&lt;/p&gt;
&lt;p&gt;Anthropic has &lt;a href=&quot;https://www.anthropic.com/news/3-5-models-and-computer-use&quot;&gt;released updates&lt;/a&gt;, including a “computer use” mode that will control your computer with AI, allowing you to automate cumbersome tasks such as filling data into a webpage that’s already stored in a document somewhere:&lt;/p&gt;

&lt;p&gt;I enjoyed this anecdote from the &lt;a href=&quot;https://arstechnica.com/ai/2024/10/anthropic-publicly-releases-ai-tool-that-can-take-over-the-users-mouse-cursor/&quot;&gt;Ars Technica article&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Anthropic has also said it is known to be “cumbersome and error-prone” at times. A &lt;a href=&quot;https://www.anthropic.com/news/3-5-models-and-computer-use&quot;&gt;blog post&lt;/a&gt; about developing the tool gave one example of a way it has gone wrong in testing: It abandoned a coding task before completing it and began instead “to peruse photos of Yellowstone National Park”—perhaps one of the most human-like things an AI bot has done. (I kid.)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Someone got it to order lunch for them:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Successfully got Claude to order me lunch all by himself!&lt;br /&gt;&lt;br /&gt;Notes after 8 hours of using the new model:&lt;br /&gt;&lt;br /&gt;• Anthropic really does not want you to do this - anything involving logging into accounts and especially making purchases is RLHF’d away more intensely than usual. In fact my… &lt;a href=&quot;https://t.co/ueo8kvZUPF&quot;&gt;pic.twitter.com/ueo8kvZUPF&lt;/a&gt;&lt;/p&gt;— near (@nearcyan) &lt;a href=&quot;https://twitter.com/nearcyan/status/1848875226043703762?ref_src=twsrc%5Etfw&quot;&gt;October 22, 2024&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;XAI released an API and people are already building things with it, such as this AI-enhanced scraper:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Introducing Grok-2 web crawler 🕸️&lt;br /&gt;&lt;br /&gt;It crawls any website with &lt;a href=&quot;https://twitter.com/xai?ref_src=twsrc%5Etfw&quot;&gt;@xai&lt;/a&gt;’s new Grok-2 model and &lt;a href=&quot;https://twitter.com/firecrawl_dev?ref_src=twsrc%5Etfw&quot;&gt;@firecrawl_dev&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Just give it a URL and a goal then it will navigate + return the requested data in a structured format&lt;br /&gt;&lt;br /&gt;Take a look: &lt;a href=&quot;https://t.co/irY4bnt3qs&quot;&gt;pic.twitter.com/irY4bnt3qs&lt;/a&gt;&lt;/p&gt;— Nicolas Camara (@nickscamara_) &lt;a href=&quot;https://twitter.com/nickscamara_/status/1848448992608133348?ref_src=twsrc%5Etfw&quot;&gt;October 21, 2024&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;Runway are doing some really interesting stuff to automate motion-capture for filmmaking. Gone are the days of having to place dots on Andy Serkis in order to track him for Gollum in Lord of the Rings. This tech allows you to record videos of people and then map their facial expressions to 3D models:&lt;/p&gt;
&lt;a href=&quot;https://runwayml.com/research/introducing-act-one&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Runway Research | Introducing Act-One&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;At Runway, our mission is to build expressive and controllable tools for artists that can open new avenues for creative expression. Today, we’re excited to release Act-One, a new state-of-the-art tool for generating expressive character performances inside Gen-3 Alpha.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://runwayml.com/icon.png?354f8c2b5139d556&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Introducing Act-One&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://d3phaj0sisr2ct.cloudfront.net/site/content/images/act-one-card.jpg&quot; alt=&quot;Runway Research | Introducing Act-One&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;Midjourney has released an editor feature that allows you to upload a photo and then make edits using AI:&lt;/p&gt;

&lt;p&gt;Perplexity has released features to search historical financial data and internal company data:&lt;/p&gt;

&lt;a href=&quot;https://news.ycombinator.com/item?id=41906949&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Perplexity AI’s new tool for researching the stock market | Hacker News&lt;/h4&gt; &lt;/div&gt;  &lt;div class=&quot;bookmark-metadata&quot;&gt;  &lt;span class=&quot;bookmark-publisher&quot;&gt;Hacker News&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://news.ycombinator.com/y18.svg&quot; alt=&quot;Perplexity AI’s new tool for researching the stock market | Hacker News&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;While OpenAI has yet to release Sora, they have collaborated with Toys ‘R’ Us for a commercial:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Just like a weird dream it is a different person each time you see them &lt;a href=&quot;https://t.co/5Vc85ElqO1&quot;&gt;pic.twitter.com/5Vc85ElqO1&lt;/a&gt;&lt;/p&gt;— syndrowm (@syndrowm) &lt;a href=&quot;https://twitter.com/syndrowm/status/1805646342087491829?ref_src=twsrc%5Etfw&quot;&gt;June 25, 2024&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;Despite the criticism, I think it’s still impressive overall. However, an Indian company &lt;a href=&quot;https://hotshot.co/&quot;&gt;Hotshot&lt;/a&gt; have released a similar AI text-to-video generator, and the results are equally impressive to the Sora demos. Here’s a compilation I put together of all of their demo videos, plus a few extra I generated myself:&lt;/p&gt;

&lt;p&gt;Hilariously, one of the OpenAI demo videos got copyrighted by a South Korean news channel on YouTube!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://www.reddit.com/r/ArtistHate/comments/1atu321/openai_lost_ownership_over_one_of_their_sora/&quot;&gt;OpenAI lost “ownership” over one of their Sora videos because a news channel in S.Korea used it in their news first and copyrighted it so when somebody tries uploading it on Youtube they will get claimed. (News shouldn’t be able to claim them either)&lt;/a&gt;
by
&lt;a href=&quot;https://www.reddit.com/user/WonderfulWanderer777/&quot;&gt;u/WonderfulWanderer777&lt;/a&gt; in
&lt;a href=&quot;https://www.reddit.com/r/ArtistHate/&quot;&gt;ArtistHate&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Another competitor:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Closed AI won the left brain of AGI. We’re here to make sure there’s an open alternative for the right brain.&lt;br /&gt;&lt;br /&gt;Mochi 1 sets a new SOTA for open-source video generation models. It is the strongest OSS model in the ecosystem. This will be a force for good, both for AI research and… &lt;a href=&quot;https://t.co/1QORiG2Swr&quot;&gt;&lt;a href=&quot;https://t.co/1QORiG2Swr&quot;&gt;https://t.co/1QORiG2Swr&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;— Paras Jain (@_parasj) &lt;a href=&quot;https://twitter.com/_parasj/status/1848763942216044946?ref_src=twsrc%5Etfw&quot;&gt;October 22, 2024&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;OpenAI now allows you to send text or audio to the API, and it will then give you responses back in either text, audio, or both:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;🔊 The Chat Completions API supports audio now. Pass text or audio inputs, then receive responses in text, audio, or both. &lt;a href=&quot;https://t.co/468QclBSBU&quot;&gt;&lt;a href=&quot;https://t.co/468QclBSBU&quot;&gt;https://t.co/468QclBSBU&lt;/a&gt;&lt;/a&gt; &lt;a href=&quot;https://t.co/uUFrJa9kZH&quot;&gt;pic.twitter.com/uUFrJa9kZH&lt;/a&gt;&lt;/p&gt;— OpenAI Developers (@OpenAIDevs) &lt;a href=&quot;https://twitter.com/OpenAIDevs/status/1846972985170972923?ref_src=twsrc%5Etfw&quot;&gt;October 17, 2024&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;What about code editing? I had an interesting listen to the team behind Cursor AI, a Visual Studio Code fork that allows you to edit chunks of code using models such as Claude Sonnet (this one is long, a podcast for several sessions):&lt;/p&gt;

&lt;p&gt;I’ve been trying out Cursor and will document my experience in a separate post. I’m pretty impressed. It allows me to select pieces of code and say “fix this” if I’m getting a runtime error (and yes, it fixes it!), and I can add sorting to lists by selecting a chunk of code, and say “sort this by most recent name”—I can stay in a high-level thinking state rather than having to dive into nitty gritty of writing the correct arrow function.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://v0.dev&quot;&gt;v0.dev&lt;/a&gt; is seriously impressive re code generation. I did a short video converting a hand-drawn mockup to working code using a common React component library, &lt;a href=&quot;https://ui.shadcn.com&quot;&gt;shadcn&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;Another code generation tool is the talk of the town: &lt;a href=&quot;http://bolt.new&quot;&gt;bolt.new&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;I’m not kidding around: go to bolt․new and type in:&lt;br /&gt;&lt;br /&gt;“make a spotify clone”&lt;br /&gt;&lt;br /&gt;I’m speechless. &lt;a href=&quot;https://t.co/ntR6eggRtk&quot;&gt;pic.twitter.com/ntR6eggRtk&lt;/a&gt;&lt;/p&gt;— Tomek Sułkowski (@sulco) &lt;a href=&quot;https://twitter.com/sulco/status/1848883749510959241?ref_src=twsrc%5Etfw&quot;&gt;October 23, 2024&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;Moving onto general AI tools, I came across this tool that converts PDFs into flashcards for memorisation:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;we’re launching our rebrand of memo from pdf2anki on ProductHunt! &lt;a href=&quot;https://t.co/OhK5qfZqwq&quot;&gt;&lt;a href=&quot;https://t.co/OhK5qfZqwq&quot;&gt;https://t.co/OhK5qfZqwq&lt;/a&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;my name is Jason - the co-founder of Memo (previously PDF2Anki) and a 21-year-old in medical student and builder from Hong Kong 🇭🇰&lt;br /&gt;&lt;br /&gt;Memo is the smarter way to learn with flashcards. We… &lt;a href=&quot;https://t.co/uymyNheosk&quot;&gt;pic.twitter.com/uymyNheosk&lt;/a&gt;&lt;/p&gt;— Jason (@thetechjason) &lt;a href=&quot;https://twitter.com/thetechjason/status/1847962104348999745?ref_src=twsrc%5Etfw&quot;&gt;October 20, 2024&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;People are using AI tools to come up with a comic idea and then feed it to another AI to generate the image:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Flux 1.1 does pretty decent political cartoons, so I wired up a glif workflow that let’s Gemini Pro 1.5 write the cartoon and then passes it on the Flux the cartoonist to render&lt;br /&gt;&lt;br /&gt;”EU regulations” &lt;a href=&quot;https://t.co/ynT17RHRox&quot;&gt;pic.twitter.com/ynT17RHRox&lt;/a&gt;&lt;/p&gt;— fabian (@fabianstelzer) &lt;a href=&quot;https://twitter.com/fabianstelzer/status/1846503078213693668?ref_src=twsrc%5Etfw&quot;&gt;October 16, 2024&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;I’ll leave you with this video from The Wall Street Journal showing how NVIDIA used their own chips and super accurate lighting in architectural renderings to design their Silicon Valley HQ:&lt;/p&gt;
</content:encoded></item><item><title>Tech roundup - Fri 21 April 2023</title><link>https://steveharrison.dev/tech-roundup-fri-21-apr/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-fri-21-apr/</guid><description>Hello from Sydney, I just got back from Tokyo! Another week, so much happening in tech, I love it!

News
Apple opened their first two Apple Stores in Ind</description><pubDate>Fri, 21 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Hello from Sydney, I just got back from Tokyo! Another week, so much happening in tech, I love it!&lt;/p&gt;
&lt;h2 id=&quot;news&quot;&gt;News&lt;/h2&gt;
&lt;p&gt;Apple opened their first two Apple Stores in India this week, in Mumbai and then New Delhi. Tim Cook flew in for both openings, greeting and taking photos with fans, including one who brought a 1987 Macintosh SD with him (that’s dedication)! I didn’t realise until this week, but iPhone marketshare in India is less than 6% currently. In 2022, it was 51.4% in the US and 46.1% in Australia. Now that Apple will be manufacturing more components in India, they’ll save 20% customs duty so will be able to lower prices and attract more customers. This also ties in with Apple’s push to diversify some of its supply chain away from China (it is also exploring moving some manufacturing to Vietnam, Malaysia, and Thailand). India is a massive market, in fact the UN estimated this week that India’s population will overtake China’s soon by around 2.9M people with a total of 1.4286B people, so it makes sense why Apple is so interested in this market.&lt;/p&gt;
&lt;a href=&quot;https://www.dailymail.co.uk/news/article-11984955/Tim-Cook-presented-Apple-computer-fan-selfies-inaugural-Indian-store-opening.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Tim Cook presented with first Apple computer at Indian store opening&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;The Apple CEO looked stunned when he was presented with a Macintosh SE computer at the opening of the 20,000sq ft flagship store in India’s financial capital, Mumbai today.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.dailymail.co.uk/favicon.ico?v=2&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Daily Mail&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://i.dailymail.co.uk/1s/2023/04/18/11/69952005-0-image-a-95_1681812750053.jpg&quot; alt=&quot;Tim Cook presented with first Apple computer at Indian store opening&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;a href=&quot;https://au.finance.yahoo.com/news/the-simple-reason-tech-thinks-india-is-its-next-big-market-200003052.html&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;The simple reason tech thinks India is its next big market&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;Apple’s increasingly going all in on India.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://s.yimg.com/rz/l/favicon.ico&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Yahoo&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://s.yimg.com/ny/api/res/1.2/gkNYJQTliH2AnsfQWMhNXg--/YXBwaWQ9aGlnaGxhbmRlcjt3PTEyMDA7aD04MDA-/https://s.yimg.com/os/creatr-uploaded-images/2023-04/dae0b830-dec4-11ed-9363-8392113379c7&quot; alt=&quot;The simple reason tech thinks India is its next big market&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;Apple also launched a 4.15% APY savings account this week integrated with their Apple Card offering, and released Tap to Pay in Taiwan (the second region to get it after the US), which allows people to accept payments directly on an iPhone without the need for a third-party device like a Square reader.&lt;/p&gt;
&lt;a href=&quot;https://www.apple.com/newsroom/2023/04/apple-cards-new-high-yield-savings-account-is-now-available-offering-a-4-point-15-percent-apy/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; class=&quot;bookmark-card&quot;&gt; &lt;div class=&quot;bookmark-content&quot;&gt; &lt;div class=&quot;bookmark-header&quot;&gt; &lt;h4 class=&quot;bookmark-title&quot;&gt;Apple Card’s new high-yield Savings account is now available, offering a 4.15 percent APY&lt;/h4&gt; &lt;/div&gt; &lt;p class=&quot;bookmark-description&quot;&gt;With no fees, no minimum deposits, and no minimum balance requirements, users can easily set up and manage their Savings account directly from Wallet.&lt;/p&gt; &lt;div class=&quot;bookmark-metadata&quot;&gt; &lt;img src=&quot;https://www.apple.com/favicon.ico&quot; alt=&quot;&quot; class=&quot;bookmark-icon&quot; /&gt; &lt;span class=&quot;bookmark-publisher&quot;&gt;Apple Newsroom&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;bookmark-thumbnail&quot;&gt; &lt;img src=&quot;https://www.apple.com/newsroom/images/product/apple-card/standard/Apple-Card-Savings-account.jpg.og.jpg?202304201147&quot; alt=&quot;Apple Card’s new high-yield Savings account is now available, offering a 4.15 percent APY&quot; /&gt; &lt;/div&gt; &lt;/a&gt; 
&lt;p&gt;WWDC23, Apple’s annual developer conference, is set for 5–9 June, and they’re purportedly focusing on getting apps ready for the AR/VR headset that is likely to be announced, including sports, gaming, and fitness apps.&lt;/p&gt;
&lt;p&gt;Something fun, I found out that Steve Jobs still responded to customer support enquiries occasionally: &lt;a href=&quot;https://twitter.com/tanayj/status/1649193085551915008?s=46&amp;amp;t=oZJRyaxROrBeC4sT1iUY_g&quot;&gt;here’s an email he responded to&lt;/a&gt; when Apple was a ~$60B market cap company.&lt;/p&gt;
&lt;p&gt;Twitter finally removed free blue checks on 20 April, so now you’ll have to pay for one, but apparently Elon Musk is personally paying for William Shatner, LeBron James, and Stephen King, who have all been opposed to the change.&lt;/p&gt;
&lt;p&gt;Speaking of Elon, he incorporated a company named X.AI on 9 March, and has allegedly bought thousands of high-powered GPU processors from Nvidia. Will be interesting to keep an eye on! Google has also merged their AI teams DeepMind and Brain into one team called &lt;a href=&quot;https://www.deepmind.com/blog/announcing-google-deepmind&quot;&gt;Google DeepMind&lt;/a&gt;. And in a blow to ChatGPT detector projects, one such “detector” &lt;a href=&quot;https://twitter.com/DataChaz/status/1649058523672707073&quot;&gt;found&lt;/a&gt; that 92.15% of the US Constitution was “written by AI”. Hmm, might want to work on that, or better still, not—if these projects don’t work well with GPT-4, how are they going to go with more advanced AI models?&lt;/p&gt;
&lt;h2 id=&quot;dev&quot;&gt;Dev&lt;/h2&gt;
&lt;p&gt;Last week, I mentioned I wanted to play around with querying &lt;a href=&quot;https://thegraph.com/en/&quot;&gt;The Graph&lt;/a&gt; more, which indexes crypto data and serves it as a GraphQL API. On their website, you can &lt;a href=&quot;https://thegraph.com/explorer&quot;&gt;browse “subgraphs”&lt;/a&gt; for various crypto projects: after selecting a subgraph, you can run an example GraphQL query in the Playground tab and see what the API returns. As an example, &lt;a href=&quot;https://thegraph.com/explorer/subgraphs/EjtE3sBkYYAwr45BASiFp8cSZEvd1VHTzzYFvJwQUuJx?view=Playground&amp;amp;chain=mainnet&quot;&gt;here’s a query&lt;/a&gt; that returns the first 5 ENS domains (custom domain names on the Ethereum network) and recent ENS domain transfers in JSON. There are subgraphs for all sorts of popular crypto projects like Uniswap, Audius, and Livepeer, so go check them out!&lt;/p&gt;
&lt;p&gt;Well that’s it for now, see you next time!&lt;/p&gt;</content:encoded></item><item><title>Tech roundup - Fri 14 April 2023</title><link>https://steveharrison.dev/tech-roundup-with-steve-fri-14-april-2023/</link><guid isPermaLink="true">https://steveharrison.dev/tech-roundup-with-steve-fri-14-april-2023/</guid><description>Hello from Singapore! It seems like a lot has happened in tech this week, so I&apos;ll be doing a recap followed by what I&apos;m reading (spoiler: it&apos;s a book about</description><pubDate>Sat, 15 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Hello from Singapore! It seems like a lot has happened in tech this week, so I’ll be doing a recap followed by what I’m reading (spoiler: it’s a book about Amazon) and what I’ve been learning about Front End crypto development on Ethereum.&lt;/p&gt;
&lt;h2 id=&quot;news&quot;&gt;News&lt;/h2&gt;
&lt;p&gt;Speaking about Ethereum, it’s past USD$2100 now, it finally passed the $2K mark since crashing in 2022. It’s probably related to the successful Shanghai upgrade that happened yesterday. With this upgrade, people will be able to unstake Ethereum tokens, which will hopefully incentivise more people to stake ETH.&lt;/p&gt;
&lt;p&gt;Diving into some numbers, as of writing, there is 1.1m ETH pending withdrawal, which is $2.32b USD, compared to 17.39m ETH ($36.87b USD) currently staked. They have designed the upgrade to avoid a bankrun, so it will take some time before everyone gets their ETH—over the next 11hrs, around 44.2k ETH ($93.6m USD) will be unlocked. And for reference, only around 15.4% of the total supply of Ethereum is staked currently. You can see all of these analytics in real-time with &lt;a href=&quot;https://token.unlocks.app/ethereum-shanghai&quot;&gt;this dashboard by TokenUnlocks&lt;/a&gt;, pretty cool!&lt;/p&gt;
&lt;p&gt;A bit of Australian startup news: MilkRun, the Sydney-based delivery service to get groceries in 20min or less, has shut down as of today. They started in 2021 with $75M funding, one of the biggest raises in Aussie VC history, but were losing money to sign up new customers and faced increased competition from Coles, Woolies, and Uber. It makes sense because I’ve recently been ordering groceries in Sydney on UberEats and getting them in around 20-30min. Harris Farm has also done a partnership with Uber to deliver your order in around an hour, so these offerings are super smooth and don’t require you to sign up for another app. Kudos to MilkRun though for getting the competition to up its game!&lt;/p&gt;
&lt;p&gt;Lots of Twitter news this week. They’re launching subscriptions in the US! They’re also working on rolling it out internationally. My understanding is that you can now put some tweets behind a paywall and charge for access. They’ve also partnered with eToro to allow users to view, buy, and sell stocks on Twitter. And a BBC reporter got absolutely wrecked in an interview with Elon Musk, &lt;a href=&quot;https://twitter.com/jeffreypeel/status/1646148806591774722?s=61&amp;amp;t=-EoTqGh2HzmU8q8Gm_kjxQ&quot;&gt;check out the video&lt;/a&gt; and remember to always be able to back up vague assertions with data, especially when you’re speaking with someone like Elon haha!&lt;/p&gt;
&lt;p&gt;Amazon released &lt;a href=&quot;https://aws.amazon.com/bedrock/&quot;&gt;AWS Bedrock&lt;/a&gt;, which is a generative AI toolkit that allows developers to use pre-trained models including Stable Diffusion, Claude, and Jurassic-2. More details in &lt;a href=&quot;https://techcrunch.com/2023/04/13/with-bedrock-amazon-enters-the-generative-ai-race/&quot;&gt;this TechCrunch article&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;what-ive-been-reading&quot;&gt;What I’ve been reading&lt;/h2&gt;
&lt;p&gt;I’ve been reading “The Everything Store”, a book about Jeff Bezos and the story of Amazon. It’s a great read—highly recommend—and something that I keep coming back to in the book is how leaders like Bezos, Musk, Jobs, etc. are able to sniff out BS and also understand areas that they are not subject matter experts in extremely well. In one example, Bezos told a team with far more experience than himself that they were doing it wrong and showed them why; they later said that while it was irritating, they couldn’t fault anything he said and that he was right. I guess this is why these guys get to where they are and why there are few companies like Amazon, Tesla, and Apple.&lt;/p&gt;
&lt;p&gt;If you’re into crypto and finance, check out the &lt;a href=&quot;https://t.co/BbSBb5xXUj&quot;&gt;Money Stuff&lt;/a&gt; email newsletter by Matt Levine (he writes for Bloomberg), it’s great reading!&lt;/p&gt;
&lt;h2 id=&quot;what-ive-been-learning&quot;&gt;What I’ve been learning&lt;/h2&gt;
&lt;p&gt;I’ve been wanting to learn more about Ethereum development for ages, so I finally got started.&lt;/p&gt;
&lt;p&gt;I set myself the challenge of creating a simple React app that allows you to connect a wallet and display some basic info about that wallet. And I got it working! I found &lt;a href=&quot;https://github.com/PaulRBerg/create-eth-app&quot;&gt;&lt;code&gt;create-eth-app&lt;/code&gt;&lt;/a&gt;, a CLI tool that essentially adds a bunch of dApp tooling on top of a standard Create React App base.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;create-eth-app&lt;/code&gt; uses a library called &lt;a href=&quot;https://github.com/TrueFiEng/useDApp/&quot;&gt;useDApp&lt;/a&gt; which has a React hook-based interface for getting account details like user balance. Really nice dev experience!&lt;/p&gt;
&lt;p&gt;&lt;code&gt;create-eth-app&lt;/code&gt; also provides some basic integration with The Graph, which I’m going to explore next. I’m so used to thinking about The Graph in terms of the GRT token and the incentive system for nodes to index content, but obviously, it’s a prime suspect to work with on the Front End since you can query all this data with GraphQL! (Yeah, it does have it in the name! 😂)&lt;/p&gt;
&lt;p&gt;Along the way, I discovered Truffle, a collection of tools for smart contract development. This includes Ganache, which runs an Ethereum blockchain locally for dev and testing. You can start it with a Terminal command or via their Mac app, similar to using Docker locally. I did the &lt;a href=&quot;https://trufflesuite.com/docs/truffle/quickstart/&quot;&gt;Truffle quickstart&lt;/a&gt; and successfully deployed an example smart contract, MetaCoin. I could query balances and transfer the coin between different example ETH addresses. Also, I love the names: Truffle, Ganache, they even have a Front End framework that hooks into Redux called Drizzle (OK, that’s stretching it a bit, but the framework seems interesting)!&lt;/p&gt;
&lt;p&gt;A lot of this stuff is changing rapidly and some of the tutorials assume existing knowledge, so it wasn’t smooth sailing, but nothing you can’t debug your way out of. I was encountering issues with the Truffle quickstart project only to realise I hadn’t updated to the latest version since I last installed it a few months ago, and my issue was fixed once I upgraded. So make sure you’re using the latest versions of dependencies.&lt;/p&gt;
&lt;p&gt;There’s a good &lt;a href=&quot;https://ethereum.org/en/developers/docs/frameworks/&quot;&gt;list of different frameworks&lt;/a&gt; and &lt;a href=&quot;https://ethereum.org/en/developers/tutorials/&quot;&gt;tutorials&lt;/a&gt; on the Ethereum website.&lt;/p&gt;
&lt;h2 id=&quot;upcoming-articles&quot;&gt;Upcoming articles&lt;/h2&gt;
&lt;p&gt;I’ve got a few articles in the works: I’m going to write about the Web Share API, where you can trigger a native share dialog with JavaScript, and also cover how to set up those nice link preview cards that get displayed below URLs when you send them in messaging apps like iMessage or Twitter. I’ve noticed some quirks in iMessage where it actually strips parts of the title that you’ve provided in the &lt;code&gt;og:title&lt;/code&gt; meta tag, so stay tuned for more info on this.&lt;/p&gt;
&lt;p&gt;Well that’s a wrap! I hope you’ve enjoyed this post, subscribe to my newsletter for more content like this and have a good weekend! 🙂&lt;/p&gt;
&lt;p&gt;Sources:
&lt;a href=&quot;https://www.theblock.co/post/226356/ethereum-pending-withdrawals-2-billion&quot;&gt;https://www.theblock.co/post/226356/ethereum-pending-withdrawals-2-billion&lt;/a&gt;
&lt;a href=&quot;https://token.unlocks.app/ethereum-shanghai&quot;&gt;https://token.unlocks.app/ethereum-shanghai&lt;/a&gt;
&lt;a href=&quot;https://www.afr.com/technology/milkrun-to-close-doors-all-staff-made-redundant-20230411-p5czj3&quot;&gt;https://www.afr.com/technology/milkrun-to-close-doors-all-staff-made-redundant-20230411-p5czj3&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>The Productive Programmer</title><link>https://steveharrison.dev/the-productive-programmer/</link><guid isPermaLink="true">https://steveharrison.dev/the-productive-programmer/</guid><description>Thoughts on being a productive programmer.</description><pubDate>Mon, 09 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In my early years of programming, I’d get into flow states and have a great time, and other times, it was an uphill battle. I didn’t know how to control this. And as we all know, success is not about bursts of energy, it’s about consistent effort. Over the years, I’ve created a framework that allows me to be my best, productive self.&lt;/p&gt;
&lt;p&gt;It starts with three high-level categories:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Physical &amp;amp; mental state&lt;/li&gt;
&lt;li&gt;Environment&lt;/li&gt;
&lt;li&gt;Working effectively&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These all need to work together:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you’re in peak physical + mental state ✅, but have family members making a racket and interrupting you every 15min ❌, you’re not going to be very productive.&lt;/li&gt;
&lt;li&gt;If you’ve got the best home office setup with no distractions ✅ but you’re exhausted ❌ and approaching the work inefficiently ❌, you’re not going to be very productive.&lt;/li&gt;
&lt;li&gt;If you’re in peak physical + mental state ✅, in the best home office with no distractions ✅, but are watching TikTok videos in between every line of code ❌, you’re not going to be very productive.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;1-physical--mental-state&quot;&gt;1. Physical &amp;amp; mental state&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Sleep.&lt;/strong&gt; Good sleep is the foundation. For me, the right amount of sleep is however long I’d sleep without setting an alarm. Finish eating a few hours before bed, have a relaxing evening routine, a good bed, and a cool + quiet + dark bedroom. &lt;a href=&quot;https://x.com/hubermanlab&quot;&gt;@hubermanlab&lt;/a&gt; and &lt;a href=&quot;https://x.com/bryan_johnson&quot;&gt;@bryan_johnson&lt;/a&gt; have lots of tips on how to improve sleep. If you’re tired during the day, take a nap and work a little later: a 10-30min afternoon nap is way more effective than a coffee.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Exercise.&lt;/strong&gt; The body was meant to move. If you want to spend hours in front of a computer screen (sitting or standing), you have to earn credits. Get 15-30 minutes of walking in between your deep work blocks, and do standard strength training + cardio a couple of times a week. Don’t overexercise either.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stretch.&lt;/strong&gt; Not just before workouts, during the day. Yoga poses, hamstring stretches, thoracic stretches, etc. This is one of the best ways to get rid of chronic back pain.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Get a massage.&lt;/strong&gt; Helps overall mood, relaxation, and energy. You’d be surprised how much tension you’re holding that’s negatively impacting sleep, digestion, and focus.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Eat.&lt;/strong&gt; Hunger is a huge distraction, and the fastest way to kill your energy. Eat healthy meals every few hours, have healthy snacks in between focus blocks, and listen to your body. I start most days with a fresh juice, some fruit, and then 2 eggs + sourdough + avocado about 15min later. Whatever you eat, you should feel satisfied afterwards and it should sustain you without eating again for a few hours. I’m more focused after a hearty breakfast like eggs + toast than a light breakfast like muesli + yoghurt. Don’t under or overeat.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Drink.&lt;/strong&gt; Make sure you’re properly hydrated. I keep a full glass on my desk and drink as I need to. Sparkling and a slice of lime/lemon/cucumber is nice too.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Deal with loose threads.&lt;/strong&gt; Whatever is going on in your your life affects your mental state at work. That class you want to book, that call you need to make—get it done on the weekend or before work so it’s not nagging you when you need to focus.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Schedule downtime.&lt;/strong&gt; Your brain and body need breaks from programming and screens. Instead of doomscrolling during your commute, try staring out the window and let your mind wander. On a weekend, go play sport with friends, go for a long walk, go to a café and read—do whatever fills your cup. This is critical so you are recharged when you go back to work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;See a chiro/physio/health practitioner if you need.&lt;/strong&gt; If you get pain that distracts you, this is worth looking into. &lt;a href=&quot;https://www.abcaustralasia.org.au/what-is-abc/&quot;&gt;ABC chiropractic adjustment&lt;/a&gt; has helped my back issues.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Take care of your eyes.&lt;/strong&gt; Look into the distance periodically. Blink enough. Make sure your monitor is the right distance away. Ensure good lighting / screen brightness, and make sure all font sizes are large enough that the text is easy to read. Avoid irritants in the air like smoke. Important: If your eyes are tired/sore/a bit blurry, take a break! A warm/cold wet face towel can refresh them too.&lt;/p&gt;
&lt;h2 id=&quot;2-environment&quot;&gt;2. Environment&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Desk, chair, monitor.&lt;/strong&gt; Get good ones. I used to think I couldn’t be productive working from home. Turns out, the issue was using a laptop on cheap couches. (Fastest way to get back pain!) Get a standing desk so you can vary it up. Make sure the height of the chair, desk, and monitor are comfortable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quiet.&lt;/strong&gt; I love this post from &lt;a href=&quot;https://x.com/paulg&quot;&gt;@paulg&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;The rich love quiet because they’re trying to work. &lt;a href=&quot;https://t.co/7HfJq1Rzkx&quot;&gt;&lt;a href=&quot;https://t.co/7HfJq1Rzkx&quot;&gt;https://t.co/7HfJq1Rzkx&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;— Paul Graham (@paulg) &lt;a href=&quot;https://twitter.com/paulg/status/1801892375368810701?ref_src=twsrc%5Etfw&quot;&gt;June 15, 2024&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;It’s so much easier to think clearly in a quiet environment. No wonder devs love working late at night. Music can be good sometimes, but I find total silence is best for high-focus tasks. If you have a noisy environment at home and at work, try working at a quiet library without headphones and see how much easier it is to focus.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Comfortable temperature.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lee Kuan Yew, founder of modern Singapore, &lt;a href=&quot;https://news.ycombinator.com/item?id=14495062&quot;&gt;once said&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Air conditioning was a most important invention for us, perhaps one of the signal inventions of history. It changed the nature of civilization by making development possible in the tropics. Without air conditioning you can work only in the cool early-morning hours or at dusk. The first thing I did upon becoming prime minister was to install air conditioners in buildings where the civil service worked. This was key to public efficiency.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Even in more favourable climates, being too hot or cold is a major distraction, so make sure you’re comfortable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fresh air.&lt;/strong&gt; This directly impacts brain function and general health. Make sure you’re not in a stuffy room and have some airflow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nature.&lt;/strong&gt; Having somewhere pleasant to look out at and where you can go for a walk/run makes a real difference.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Good lighting.&lt;/strong&gt; Poor lighting makes you want to escape. You should want to be where you’re working.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Interruptions.&lt;/strong&gt; Whether in person or online, disruptions are toxic for your productivity. I often turn on Do Not Disturb and simply ignore Slack/Teams/email while I’m in a focus block. Going to the bathroom is also an interruption, so make sure you go before you begin a focus block. 🙂&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Time.&lt;/strong&gt; Fairly basic, but you need enough uninterrupted time in front of the screen. You can’t complete a 2h deep work task if you have a meeting in 30min.&lt;/p&gt;
&lt;h2 id=&quot;3-working-effectively&quot;&gt;3. Working effectively&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Schedule tasks based on energy and duration.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2h feature task or complex bug: best when no meetings and lots of energy, like after a meal or workout.&lt;/li&gt;
&lt;li&gt;15min copy change or simple bug: do this in between meetings or at the end of a long day.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Second time should always be faster.&lt;/strong&gt; Build out mock data for all the common scenarios in your app. Save Jira/Figma links to your bookmarks bar. Fix ambiguous error messages. It’s not just about saving time, you also want to reduce your future cognitive load. The more you streamline, the more you’ll find yourself smiling saying “I’m glad past me did that”.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pull the thread, if you have time.&lt;/strong&gt; I &lt;a href=&quot;https://github.com/preactjs/preact-compat/issues/538&quot;&gt;discovered a bug in Preact&lt;/a&gt; by digging deeper when I saw a DOM attribute was camelCase that I thought should be snake-case. Investigating unusual behaviour strengthens your codebase/personal knowledge and saves time later. Sometimes you have a deadline to hit though, so in these situations, make a note of it and then work around the issue.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Write a plan of attack.&lt;/strong&gt; Think like an AI agent. Before you begin a task, write down what exactly you need to do, how you’re planning on doing it, and how long you think it will take.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do personal retrospectives.&lt;/strong&gt; Did you complete a task in the time you estimated? What assumptions turned out inaccurate? How can you prevent these mistakes / improve in future?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Have multiple things on the go.&lt;/strong&gt; While you need to focus on one task at at time, sometimes you’ll need to wait on a build, a person, or some other dependency, so it helps to have something useful that you can quickly jump across to. Switching tasks can also give you variety if you’re in a rut.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;You won’t get all of these right every day—nobody does. But awareness is the first step. Once you know what’s working against you, you can start fixing it. Over time, the good days stop being lucky accidents, you can bounce back faster from bad days, and you can focus on doing your best work without anything holding you back.&lt;/p&gt;
&lt;p&gt;Have I missed anything? Let me know &lt;a href=&quot;https://x.com/stevenaharrison/status/2030593637470577003&quot;&gt;on X&lt;/a&gt; or send me an email at &lt;a href=&quot;mailto:steve@steveharrison.dev&quot;&gt;steve@steveharrison.dev&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Translucent sidebars in Electron apps</title><link>https://steveharrison.dev/translucent-sidebars-in-electron-apps/</link><guid isPermaLink="true">https://steveharrison.dev/translucent-sidebars-in-electron-apps/</guid><description>macOS Tahoe introduced slight translucency for app sidebars, and you can add the same effect to an Electron BrowserWindow using the vibrancy property.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;macOS Tahoe introduced slight translucency for app sidebars, and you can also add this effect to an Electron &lt;code&gt;BrowserWindow&lt;/code&gt; using the &lt;a href=&quot;https://www.electronjs.org/docs/latest/api/browser-window#winsetvibrancytype-options-macos&quot;&gt;&lt;code&gt;vibrancy&lt;/code&gt;&lt;/a&gt; property:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583;--1:#BF3441&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;BrowserWindow&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;width: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF;--1:#005CC5&quot;&gt;1100&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;height: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF;--1:#005CC5&quot;&gt;720&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;titleBarStyle: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF;--1:#032F62&quot;&gt;&quot;hiddenInset&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;vibrancy: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF;--1:#032F62&quot;&gt;&quot;sidebar&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Here’s a comparison: on the left is &lt;a href=&quot;https://thefinances.app/&quot;&gt;The Finances App&lt;/a&gt; sidebar with no transparency, and on the right, with &lt;code&gt;vibrancy: &quot;sidebar&quot;&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2026/05/vibrancy-side-by-side.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;vibrancy&lt;/code&gt; accepts the following values:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;titlebar&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;selection&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;menu&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;popover&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sidebar&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;header&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sheet&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;window&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hud&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fullscreen-ui&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tooltip&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;under-window&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;under-page&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My helpful mate Claude whipped up a &lt;a href=&quot;https://github.com/steveharrison/vibrancy-demo&quot;&gt;demo&lt;/a&gt; to compare all these different values. Popovers are more translucent than sidebars, for example:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2026/05/vibrancy-popover.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2026/05/vibrancy-sidebar.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;You can read more in the official Apple developer docs on &lt;a href=&quot;https://developer.apple.com/documentation/appkit/nsvisualeffectview&quot;&gt;NSVisualEffectView&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;</content:encoded></item><item><title>Markdown Style Guide</title><link>https://steveharrison.dev/markdown-style-guide/</link><guid isPermaLink="true">https://steveharrison.dev/markdown-style-guide/</guid><description>Here is a sample of some basic Markdown syntax that can be used when writing Markdown content in Astro.</description><pubDate>Wed, 19 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Here is a sample of some basic Markdown syntax that can be used when writing Markdown content in Astro.&lt;/p&gt;
&lt;h2 id=&quot;headings&quot;&gt;Headings&lt;/h2&gt;
&lt;p&gt;The following HTML &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;—&lt;code&gt;&amp;lt;h6&amp;gt;&lt;/code&gt; elements represent six levels of section headings. &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; is the highest section level while &lt;code&gt;&amp;lt;h6&amp;gt;&lt;/code&gt; is the lowest.&lt;/p&gt;
&lt;h1 id=&quot;h1&quot;&gt;H1&lt;/h1&gt;
&lt;h2 id=&quot;h2&quot;&gt;H2&lt;/h2&gt;
&lt;h3 id=&quot;h3&quot;&gt;H3&lt;/h3&gt;
&lt;h4 id=&quot;h4&quot;&gt;H4&lt;/h4&gt;
&lt;h5 id=&quot;h5&quot;&gt;H5&lt;/h5&gt;
&lt;h6 id=&quot;h6&quot;&gt;H6&lt;/h6&gt;
&lt;h2 id=&quot;paragraph&quot;&gt;Paragraph&lt;/h2&gt;
&lt;p&gt;Xerum, quo qui aut unt expliquam qui dolut labo. Aque venitatiusda cum, voluptionse latur sitiae dolessi aut parist aut dollo enim qui voluptate ma dolestendit peritin re plis aut quas inctum laceat est volestemque commosa as cus endigna tectur, offic to cor sequas etum rerum idem sintibus eiur? Quianimin porecus evelectur, cum que nis nust voloribus ratem aut omnimi, sitatur? Quiatem. Nam, omnis sum am facea corem alique molestrunt et eos evelece arcillit ut aut eos eos nus, sin conecerem erum fuga. Ri oditatquam, ad quibus unda veliamenimin cusam et facea ipsamus es exerum sitate dolores editium rerore eost, temped molorro ratiae volorro te reribus dolorer sperchicium faceata tiustia prat.&lt;/p&gt;
&lt;p&gt;Itatur? Quiatae cullecum rem ent aut odis in re eossequodi nonsequ idebis ne sapicia is sinveli squiatum, core et que aut hariosam ex eat.&lt;/p&gt;
&lt;h2 id=&quot;images&quot;&gt;Images&lt;/h2&gt;
&lt;h3 id=&quot;syntax&quot;&gt;Syntax&lt;/h3&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;![&lt;/span&gt;&lt;span style=&quot;--0:#DBEDFF;--0td:underline;--1:#032F62;--1td:underline&quot;&gt;Alt text&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;](&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--0td:underline;--1:#24292E;--1td:underline&quot;&gt;./full/or/relative/path/of/image&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3 id=&quot;output&quot;&gt;Output&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/blog-placeholder-about.jpg&quot; alt=&quot;blog placeholder&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;blockquotes&quot;&gt;Blockquotes&lt;/h2&gt;
&lt;p&gt;The blockquote element represents content that is quoted from another source, optionally with a citation which must be within a &lt;code&gt;footer&lt;/code&gt; or &lt;code&gt;cite&lt;/code&gt; element, and optionally with in-line changes such as annotations and abbreviations.&lt;/p&gt;
&lt;h3 id=&quot;blockquote-without-attribution&quot;&gt;Blockquote without attribution&lt;/h3&gt;
&lt;h4 id=&quot;syntax-1&quot;&gt;Syntax&lt;/h4&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;&amp;gt; Tiam, ad mint andaepu dandae nostion secatur sequo quae.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--0fw:bold;--1:#24292E;--1fw:bold&quot;&gt;**Note**&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt; that you can use &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--0fs:italic;--1:#24292E;--1fs:italic&quot;&gt;_Markdown syntax_&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt; within a blockquote.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h4 id=&quot;output-1&quot;&gt;Output&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;Tiam, ad mint andaepu dandae nostion secatur sequo quae.&lt;br /&gt;
&lt;strong&gt;Note&lt;/strong&gt; that you can use &lt;em&gt;Markdown syntax&lt;/em&gt; within a blockquote.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;blockquote-with-attribution&quot;&gt;Blockquote with attribution&lt;/h3&gt;
&lt;h4 id=&quot;syntax-2&quot;&gt;Syntax&lt;/h4&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;&amp;gt; Don&apos;t communicate by sharing memory, share memory by communicating.&amp;lt;br&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;&amp;gt; — &amp;lt;cite&amp;gt;Rob Pike[&lt;/span&gt;&lt;span style=&quot;--0:#DBEDFF;--0td:underline;--1:#032F62;--1td:underline&quot;&gt;^1&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;]&amp;lt;/cite&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h4 id=&quot;output-2&quot;&gt;Output&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;Don’t communicate by sharing memory, share memory by communicating.&lt;br /&gt;
— &lt;cite&gt;Rob Pike&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;tables&quot;&gt;Tables&lt;/h2&gt;
&lt;h3 id=&quot;syntax-3&quot;&gt;Syntax&lt;/h3&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;| Italics   | Bold     | Code   |&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;| --------- | -------- | ------ |&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--0fs:italic;--1:#24292E;--1fs:italic&quot;&gt;_italics_&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; | &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--0fw:bold;--1:#24292E;--1fw:bold&quot;&gt;**bold**&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; | &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF;--1:#005CC5&quot;&gt;`code`&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; |&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3 id=&quot;output-3&quot;&gt;Output&lt;/h3&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Italics&lt;/th&gt;&lt;th&gt;Bold&lt;/th&gt;&lt;th&gt;Code&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;em&gt;italics&lt;/em&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;bold&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;code&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;code-blocks&quot;&gt;Code Blocks&lt;/h2&gt;
&lt;h3 id=&quot;syntax-4&quot;&gt;Syntax&lt;/h3&gt;
&lt;p&gt;we can use 3 backticks ``` in new line and write snippet and close with 3 backticks on new line and to highlight language specific syntax, write one word of language name after first 3 backticks, for eg. html, javascript, css, markdown, typescript, txt, bash&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;```html&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;lt;!&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;doctype&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;lang&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF;--1:#032F62&quot;&gt;&quot;en&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;head&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;meta&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;charset&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF;--1:#032F62&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;Example HTML5 Document&amp;lt;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;head&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;Test&amp;lt;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;```&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3 id=&quot;output-4&quot;&gt;Output&lt;/h3&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;lt;!&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;doctype&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;lang&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF;--1:#032F62&quot;&gt;&quot;en&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;head&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;meta&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;charset&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF;--1:#032F62&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;Example HTML5 Document&amp;lt;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;head&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;Test&amp;lt;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;list-types&quot;&gt;List Types&lt;/h2&gt;
&lt;h3 id=&quot;ordered-list&quot;&gt;Ordered List&lt;/h3&gt;
&lt;h4 id=&quot;syntax-5&quot;&gt;Syntax&lt;/h4&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;1.&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; First item&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;2.&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; Second item&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;3.&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; Third item&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h4 id=&quot;output-5&quot;&gt;Output&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;First item&lt;/li&gt;
&lt;li&gt;Second item&lt;/li&gt;
&lt;li&gt;Third item&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;unordered-list&quot;&gt;Unordered List&lt;/h3&gt;
&lt;h4 id=&quot;syntax-6&quot;&gt;Syntax&lt;/h4&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; List item&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; Another item&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; And another item&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h4 id=&quot;output-6&quot;&gt;Output&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;List item&lt;/li&gt;
&lt;li&gt;Another item&lt;/li&gt;
&lt;li&gt;And another item&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;nested-list&quot;&gt;Nested list&lt;/h3&gt;
&lt;h4 id=&quot;syntax-7&quot;&gt;Syntax&lt;/h4&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; Fruit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; Apple&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; Orange&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; Banana&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; Dairy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; Milk&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#FFAB70;--1:#AE4B07&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; Cheese&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h4 id=&quot;output-7&quot;&gt;Output&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Fruit
&lt;ul&gt;
&lt;li&gt;Apple&lt;/li&gt;
&lt;li&gt;Orange&lt;/li&gt;
&lt;li&gt;Banana&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Dairy
&lt;ul&gt;
&lt;li&gt;Milk&lt;/li&gt;
&lt;li&gt;Cheese&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;other-elements--abbr-sub-sup-kbd-mark&quot;&gt;Other Elements — abbr, sub, sup, kbd, mark&lt;/h2&gt;
&lt;h3 id=&quot;syntax-8&quot;&gt;Syntax&lt;/h3&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;abbr&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0;--1:#6F42C1&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF;--1:#032F62&quot;&gt;&quot;Graphics Interchange Format&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;GIF&amp;lt;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;abbr&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt; is a bitmap image format.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;H&amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;sub&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;2&amp;lt;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;sub&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;O&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;X&amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;sup&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;n&amp;lt;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;sup&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt; + Y&amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;sup&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;n&amp;lt;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;sup&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt; = Z&amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;sup&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;n&amp;lt;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;sup&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;Press &amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;kbd&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;CTRL&amp;lt;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;kbd&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt; + &amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;kbd&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;ALT&amp;lt;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;kbd&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt; + &amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;kbd&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;Delete&amp;lt;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;kbd&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt; to end the session.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;Most &amp;lt;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;mark&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt;salamanders&amp;lt;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D;--1:#1E7734&quot;&gt;mark&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8;--1:#24292E&quot;&gt;&amp;gt; are nocturnal, and hunt for insects, worms, and other small creatures.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3 id=&quot;output-8&quot;&gt;Output&lt;/h3&gt;
&lt;p&gt;&lt;abbr&gt;GIF&lt;/abbr&gt; is a bitmap image format.&lt;/p&gt;
&lt;p&gt;H&lt;sub&gt;2&lt;/sub&gt;O&lt;/p&gt;
&lt;p&gt;X&lt;sup&gt;n&lt;/sup&gt; + Y&lt;sup&gt;n&lt;/sup&gt; = Z&lt;sup&gt;n&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Press &lt;kbd&gt;CTRL&lt;/kbd&gt; + &lt;kbd&gt;ALT&lt;/kbd&gt; + &lt;kbd&gt;Delete&lt;/kbd&gt; to end the session.&lt;/p&gt;
&lt;p&gt;Most &lt;mark&gt;salamanders&lt;/mark&gt; are nocturnal, and hunt for insects, worms, and other small creatures.&lt;/p&gt;
&lt;section class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;The above quote is excerpted from Rob Pike’s &lt;a href=&quot;https://www.youtube.com/watch?v=PAAkCSZUG1c&quot;&gt;talk&lt;/a&gt; during Gopherfest, November 18, 2015. &lt;a href=&quot;#user-content-fnref-1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item></channel></rss>