Stephan Seidt
/seidtgeist
Working in tech and learning to become a writer of ✨words✨ Software development, food, video games with an artisanal dusting of sarcasm.
Stephan Seidt
4y ago
Ten thousand words in thirty days, three hundred words every day.
That’s more than everything I’ve written my entire adult life combined. It has, without a doubt, been a transformative experience. I’ve learned, I’ve unlearned, I’ve felt supported, I’ve felt stressed, I’ve felt relief. But most importantly, I got something that I could only hope for when I started.
I gained control over exactly what I want to do with the rest of my life.
I’m feeling this, right now. And I want to keep doing this in some way or another. So I wrote a little manifest to myself and I’m sharing it with you 😇
MANIFEST.txt
Write faster. Some essays took me 15 minutes to write, others took hours. Some took way too many hours.
Follow up on topics that I started. I’d like to visualize that somehow, like a tech-tree in a video game.
Use writing tools for spell checking and style. I prioritized velo(l)city.
Publishing longer essays, e.g., posting ~1000 words as a thread of images on Twitter.
Get feedback before publishing. I’m curious what feedback I’ll get from different people.
Build my own publishing tool. After 30 posts I have a good enough reason to write my own publishing toolchain. scnr 🧑🏼💻🙈
Start new accounts for my niches on Twitter and Instagram. I used to build these “castles” a lot in the past and I am excited to do it again!
Try different formats in future Ship 30 for 30 cohorts: 30 threads on Twitter? 30 side quests on seidt.quest? 30 loops on SoundCloud? ¯\_(ツ)_/¯
Get to know more people in future cohorts and work together. I’ve totally missed out on connecting with more of the amazing people. Nuts!
You are amazing.
To everyone who supported me in the last 30 days: Thank you 😭🥲
I’m more grateful for your words than I can explain. You’ve told me to keep going, you’ve taught me how to overcome personal challenges, you’ve shared your own stories, we bathed in random, hilarious memories and we’ve traded thoughts on very out-there stuff that I put out.
Thank you. I could not have done this without you.
And now, I don’t yet know where exactly we’re headed. But I do know that I’m very fucking excited for this future, and I would love to see you there.
Stephan Seidt
4y ago
On a lovely Friday two weeks ago I took off work and sat down to make the intro level of seidt.quest and write about it.
Don’t go looking for that post. I never wrote it. Unfortunately I had made some bad choices and the whole thing didn’t go anywhere 🥲 But today, I tried again and succeeded!
Let me tell you how it all went down.
Choosing a web-compatible Game Engine
There are a couple of choices:
❌ Unreal Engine has ditched web support
✅ Unity has first party WebGL2 support
✅ Babylon.js is the most JavaScripty and has an impressive Minecraft demo
❌ bevy is out because my Rust is rusty
At first, I made the sensible choice 😉
And we’re sailing!—into an iceberg.
I chose Babylon because of JavaScript.
That in itself is just not a good reason. The docs start off configuring webpack. I quickly found the right piece of documentation (it’s a lot) and knew what to install and how to import it so it would work with my simple esbuild setup. I followed the tutorial and got some things on screen, but eventually gave up after a few hours.
I had almost nothing to show, all fun and motivation was gone by this point.
Back to step 0
I decided on a proven commercial game engine: Unity.
Within 2 hours, all this happened:
Installed Unity Hub via homebrew
Installed Unity for M1 and the WebGL plugin
Watched random tutorials at 1.5x speed
Created a simple plane with a player and obstacles
Added scripts for controlling the player with keyboard or gamepad
Exported my scene for web
Played the scene at 60fps with a gamepad in Safari on my MacBook Air
Picked up my jaw from the floor
Wow. I’m seriously impressed how well this worked.
HOLY SHIT! Using the right tool made all the difference!
Compared two 2 weeks ago, I’m so happy to have something resembling a video game on my screen. Now, I’m energized to focus on the actual gameplay. But that’s for another post!
LOADING...
Stephan Seidt
4y ago
My favorite Twitter thread is a poem.
It all started with an observation a friend made: It’s impossible to eat a croissant without ending up with crumbs all over your face and clothes. If you make it out somewhat clean, you will have spent considerable concentration and motor skills. Personally, I accept the crumbs and brush my face and clothes off with my hand, careless like a child.
It’s not going to stop me from eating croissants.
An invitation?
I get a reply:
I come bearing crumbs—as it’s been foretold—from an exquisite croissant, worth its weight in gold.
Oh yes. You’re a genius. We’re doing this.
Within the next 40 minutes, we went back and forth to end up with 4 very fine verses. I’ve never written poetry, but why wouldn’t you want to cry from laughing for hours?
I hope you’re anywhere close to as excited as I was, eagerly awaiting every new verse my friend would come up with.
And so, with no further ado, our work
I come bearing crumbs, as it’s been foretold
from an exquisite croissant, worth its weight in gold.
Oh goddess of pastry, you heard the prayers!
I smell the butter, oh so many layers!
Like flecks of gold, christening of flour
the crumbs fall over you, a golden shower!
My robe beflecked, my senses spoiled
I ask myself, 'twas apt, this toil?
This meant everything to me on that day.
The world is burning. We constantly have to find new ways of coping with shit. So, if you can, don’t take the world, or yourself, too seriously.
Eat croissants! Start a poem! Here’s to many more of them!
✨💛🥐💛✨
Stephan Seidt
4y ago
I rang the door bell and waited for the red bucket to descend.
In search of better Ramen, I discovered how one of my favorite food bloggers started making Ramen kits for cooking at home: You sign up to his weekly newsletter, reply to order and pick up from the heavenly red bucket. Instructions are sent via email: How to cook the noodles, warm up the soup and assemble the bowl.
5 minutes later, I taste home-cooked Ramen better than most I’ve had in Berlin.
Drop: How to sell food from your home kitchen
Christopher Selig (aka @foodtechniqueberlin) started out selling Ramen from his private kitchen. He used the help of a service to ensure food safety and legal requirements. I had no idea this was possible!
I’d love for more people, from all walks of life, to offer their food this way.
Speaking of 🍜 legends, the first time I heard of Tran Nam Nguyen (@foodie.t.nam) was from a friend: She bought Ramen from a guy on Instagram and exchanged money and goods on the streets of Berlin.
Pop (Up): How to sell food from someone else’s restaurant
Finally, a year later, Nam’s Ramen (@kumaramen_) blew my mind at his monthly pop-up at the taqueria he works at. His experience shows: He eats and reviews everything interesting he can find and is constantly honing his craft. His Instagrams are packed with honest food reviews and snapshots from his prep process.
I love seeing Ramen carefully prepared over the course of a week.
Set Up Shop: Selling food from your own restaurant
Nam is only 24 and wants to open his own restaurant by 30. Until then, I’ll be at his pop-ups, and I’m excited to follow his journey as a professional cook and business owner. Unexpected to me, he hasn’t yet decided what his future restaurant is going to offer.
I hope it'll be Ramen.
Stephan Seidt
4y ago
In this post I’m going to explain the challenges of syncing an S3 bucket in the US with an Aliyun OSS bucket hosted in China.
The goal was simple: Let people reliably upload large files (e.g. 500MB marketing videos) using their Content Management System, from the US, Europe and within China. Since OSS is mostly API-compatible with S3, I configured our CMS to upload files directly to OSS and gave it a test.
Surprise, it didn’t work! The Great Firewall was blocking me.
Failed Attempt #1: A Naive Request
The US-hosted CMS backend cannot upload large files to OSS because the request will reliably fail. I thought perhaps certain IP ranges are blocked, so I changed the upload mechanism to upload directly from the browser to OSS: Not only was this way more complicated, it solved nothing. It would work on Monday but, thanks to constantly changing blocking heuristics, it would break by Friday.
So let’s introduce a queue.
Failed Attempt #2: Queue Won’t Believe What Happened Next
I set up an hourly job to copy files from AWS to OSS.
Again, the sync seems to work at first, but the bandwidth quickly stagnates until the connection is dropped. I can only guess the GFW doesn't like connections originating from outside pushing large amounts of data in. The problem is so bad, even if you chop your file transfer into smaller chunks it will take multiple days to upload just 1 gigabyte.
You need something on the inside.
Success: The Arbiter Of Files
Luckily for me, someone set me up a computer on the Chinese internet. I installed a Github Actions runner on it that syncs all files from S3 to its disk and then syncs from disk to OSS. It worked! Having a local copy of everything on Chinese internet, behind the GFW made all the difference.
Stephan Seidt
4y ago
10 years ago, I wrote the first lines of JavaScript at a $3B startup.
A lot has changed since then: JavaScript got Promises, WebAssembly is transforming everything and hey, even node’s got fetch. These are all important and would have made my job so much easier (🔥callback trees 🔥). But when I recently re-watched this Ruby on Rails demo from 2005 I thought to myself:
Why do I have problems today that one person solved 17 years ago?
How to build a social network for cats in 2022
You’ll need at least a backend and some sort of frontend. Already, you have a list of things to build:
Design an API
Frontend application(s)
Client library
Backend
Every engineer knows you run cat display logic in your app and crunch big cat data on the server, right?
Which side are we on?
Physical reality necessitates the client-server model. But reality is cruel and we now have a bunch of new problems:
APIs require massive coordination between teams: Meetings, design docs, test deployments, testing, reviews, fixes, CORS errors, endless-void-screaming, etc.
The frontend and backend teams start sub-tweeting each other
Your org chart reflects an engineering decision from the 60s, lol!!!
Oh my… Who said we should let humans decide how to separate code?
NP: Peaches – Compile the Pain Away
What if we could compile a single code base into distinct partitions of executable code running on clients and servers?
Such a compiler could end real-world problems:
End-to-end type checked infrastructure instead of API contracts
Solving the actual problem instead of thinking where & when to run code
Total Observability by changing the compiler
Just think how much time you’ve wasted on any of these things that are now a result of another computer program.
To be continued with a sassy implementation and comp-sci-fi 0010: [SPOILER]: content-addressable computation, the y for your f(x), the memory of clock cycles past.
Stephan Seidt
4y ago
If you think about it, web browsers have lots of built-in features that a self-contained WebAssembly experience doesn’t require:
HTML is only used for meta data in <head>, a <script> tag acting as entry-point and a full-screen <canvas> tag as render target
CSS is only used for styling the <canvas>
Even JavaScript is only going to be used for the glue layer: Loading the Wasm binary and rendering its output to a full-screen <canvas> tag
Can we build something radically simpler than a web browser to run WebAssembly apps?
A Series Of Broken Promises
Browser Wasm apps have one big problem: Missing low-level platform APIs.
Persistent storage: I don’t see this happening on the web. When I recently tweeted about the sorry state of the File System API, I was surprised how many others had their fingers crossed like I did. Hugs to browser self-help Twitter 🖤
Low-level GPU access: WebGPU is on the horizon, but since it’s a web standard, it’ll take years to become real. WebGL2 has been in Chrome since 2017 and only arrived in Safari in late 2021.
These are just 2 examples preventing us from creating the next generation of mind-blowing web apps.
I ❤️ Web Browsers
But, god damn it, we could move so much faster.
See, web browsers are amazing feats of engineering, definitely among the most complex software mankind has ever produced. But the market has stagnated to only two big players: Blink and Safari. The only “innovation” happening is slapping cryptocurrencies on the thing.
Why aren’t we doing something useful instead?
Flash, the OnlyFans of web application runtimes
Can we, the community, with its brilliant, independent, individual open-source developers basically start fucking around with an alternative Wasm runtime?
Can we decide and build our own future?
I, for one, am tired of waiting.
Stephan Seidt
4y ago
What do computers and humans have in common?
A specially crafted iMessage can convince your phone’s CPU to copy your messages, emails—a full backup, if you will—to a remote server, where your information will be analyzed and used against you. Similarly, a Telegram group can convince your anti-vax uncle to join the revolution.
In a way, both of them can be exploited with the right message.
🔥 This is fine 🔥
I don’t know how to help your uncle.
But I know something about computers. We’re constantly patching holes and building sandboxes around things. I mean, read the CVEs of iOS or macOS after any update: There’s always something terrible, and that’s just the stuff we know.
If only we’d stop making new holes.
🔥 Oh god, it’s not fine 🔥
While there’s an entire industry making computers more secure, we’re also constantly adding features and building faster hardware. These new features mean new code, and any code we write today, regardless of which language you use, can be exploited. Likewise, performance tricks in modern CPUs have lead to some of the spiciest vulnerabilities to date: Suddenly, any website can read the contents of your memory and gain control of your system.
You do understand this is never going to end, do you?
🔥 Fixes 🔥
I only see a couple of ways out of this endless fun spiral:
Burn all computers and start from scratch. Not going to happen, unless we’re going to have a global CPU pandemic. Don’t think it’s possible? I’ll send you this post if it still exists.
Strictly consensual networking where sending an RCE is the equivalent of someone you have trusted walking up to you and stealing your stuff. Still sucks, but at least you had a choice.
I don’t have any clear answers, but I know we have to change something fundamental before it gets really bad.
Stephan Seidt
4y ago
Nothing like friends dropping links to newly launched competing products without comment, right?
I’m not intimidated by it anymore, because I’ve collected enough experience and convinced myself that it really doesn’t matter. So now when someone sends me a new thing, I thank them and confidently explore what I can learn.
Here’s 3 flavors of that and why you shouldn't be worried about any of them.
“Ugh, someone tried solving this in the 90s/5yrs ago!!1 🧐”
A lot changes in 5 years, especially in tech:
New, transformative technology reaches maturity: WASM
Old technology becomes radically affordable: Free* egress in Cloudflare R2
A virus appears and people are suddenly willing to scan QR codes
For every successful company today, there are legions of dead ones “doing the same thing” that failed for reasons you can learn from.
“OMG, HyperPoop just launched ahead of our product 🥴”
When I started as employee #1 at Contentful in 2012, I had every other SaaS CMS mapped out in my head.
Markets are big. It takes years and immense effort to capture big chunks of your market. Your competitor is not going to suddenly steal the entire market from under you (unless you’re Snapchat, in which case you deserve it). Even if their landing page is really shiny and much better than yours. As a fun exercise, think of companies you were intimidated by in the past.
Most of them won’t exist anymore.
“Werner Vogels just announced our product on stage 😳”
This happened to a couple of friends who’s product was announced as an AWS service. I remember they were concerned at first: Even their infrastructure was hosted on AWS, so they thought about moving to a different provider. I haven’t checked in with them recently, but their web and API domains still resolve to EC2.
Also, their team is now 5 times as big as it was back then.
So next time you’re getting 500 messages in the middle of an Apple Keynote: Remember, you don’t have to worry about it :)
Stephan Seidt
4y ago
Teenage me was seriously worried he’d not play video games some day.
I wish I could pat him on the back and say: Dude, it’s not just going to be fine, it’s going to be absolutely fucking ridiculous. Just because other adults didn’t play video games in the 90s doesn’t mean you can’t in the future. In retrospect, it’s cute how important this was to me.
Can I learn something from my childhood worries and dreams?
✔️ Dark rooms lit by the glow of fast-scrolling terminals
Remember watching Neo wake up in front of his computer for the first time? Perfection. While I’m not a “hacker” like Neo, I have nights freely hacking away at code with only the screen lighting my face and the finest techno blasting on my ears. It’s ridiculous, but I wanted to become this person.
I did and I love it 😬
✔️ Making things hard for myself because I enjoyed it
Can you imagine a bunch of mid-30s locking themselves up in someone’s apartment for a weekend to play video games together?
I used to bring a massive server ATX tower running NetBSD to 3-day LAN parties. I spent 1 ½ days recompiling my kernel, linux compatibility and wine to play Counter-Strike. At some point, I gave up and fell asleep on the spot. After waking up from my keyboard (ouch), I dual-booted into Windows and joined the games. It was absolutely worth it: I was motivated as hell and learned half of everything sys ops I know now.
Here’s to LANs in my 40s.
✔️ PRINTLN “Ach leck mich doch am Bürzel”
I will never stop coding.
I have no illusions I can solve the world’s problem with a piece of code. But I know that people are creating new ones. Slowly, I’ll move into a position where I can do something about shit like that.
I wish my dad could see what teaching that 1 line of QBasic set into motion.
Stephan Seidt
4y ago
What do most kitchen appliances have in common?
Let’s see: I have a food processor, an immersion blender, a pasta maker, a shitty milk frother and a fancy coffee grinder. I even had a sous vide once. All these machines have an electric motor built-in. When something eventually breaks, chances are it’s the motor or the electronics controlling it. What generally happens when people lack repair skills, and servicing costs the same as a shiny new unit?
They’ll throw it out and buy the shiny new thing.
“Dinner’s late! Stove’s asking for ransom, anyone got BTC?”
The future is bleak: Think Juicero, but with NFT recipes.
Once more, German Scheiße Innovation is at the forefront: For only 1359€ you get an internet-connected multi-purpose kitchen appliance without a way to use its built-in frying function. Unless you open an official recipe, skip to the frying step and pretend you’re making Schnitzel. Criticism on forums is met with Mandalorian stoicism: “This is the way”.
Congratulations, you’re not getting my money.
The Lego of kitchen tools
I’m tired of big machines and rarely-used attachments taking up extremely valuable space. What if we had lego blocks instead? Not as a closed commercial ecosystem, but an open platform effort where vendors and makers sell components that fit together like drill bits into a drill.
How can we combine lego-like modules to make machines?
Community builds...
Egg cooker/sous vide/stove: Heater + thermometer + computer + pot
Noodle extruder/juicer: Clamp + motor + funnel + pipe + worm gear + screen
Zombie repeller: Motor + knives, lots of knives!
… are building community:
Educate people how stuff works: They’ll stop buying fresh trash when they know how to build something better.
Repair stuff by repairing or replacing only what broke.
Automate with an optional computer.
Customer support? Reddit, Discord, Twitter.
Let’s stop buying trash!
Of course, now I just need a CNC machine to get started...
Stephan Seidt
4y ago
I’ve been working remotely my entire life and I can’t do it any other way.
When I was someone’s employee, I couldn’t stand going to the office every day: Seeing all the people, all the time is simply too much to process for me. There’s nothing to “fix” here either: I deserve to set my boundaries, and after many years of creating my own working environments I know what’s good for me and what isn’t. The problem was never me—it was my bosses forcing me.
This exact arrogance is what’s causing The Great Resignation and I’m delighted to see it.
tl;dr: All I need is to be in total control 🥲
Location: I used to run a little co-working space with friends. Good times. Now, I’m back to working in our living room, again moving everything around to turn it into the perfect nerd/rave cave. Think KonMari organizing Neo’s desk and adding a nice sound system. Make it work for your needs.
Health: Luckily, I don’t need an ergonomic keyboard, but I did invest into a nice chair and a laptop stand for my neck’s sake. I cook a lot which saves money and makes the place smell good.
Balance: I found I don’t need spatial separation of work and leisure. I go from shouting at logs to blowing up boats in no time. I can relax in my workspace because I control my work.
All of these are individual, personal choices. They’ll be different for you.
But there is one productivity hack!
It’s not about being more productive.
As long as you’re looking for an easy fix, you’re probably not in the best place, or you don’t know what’s important to you yet. Everyone has to make their own experiences and learn what’s important to them. For example, I moved my desk to face our two living room windows. I’m not getting distracted: Instead, the room has gotten much bigger and more comfortable to live in.
Ask yourself what pains you and do something about it.
Exercise your will and you’ll nurture all the willpower to get stuff done.
Stephan Seidt
4y ago
7 years ago I made a t-shirt with a QR code that linked to its “original” on the blockchain and wore it to a decentralized tech conference.
Oh, and I fucking hate NFTs.
2015 was the final year of OG decentralization. Bitcoin tumbled around $300, graphics cards were sold at MSRP and electricity mostly went towards useful inventions such as light bulbs and washing machines. When “crypto” was 1995-Hackers-speak for “cryptography”, there wasn’t all that much to be mad about.
Unfortunately, people figured out how to make money with it.
NFTs are a scam and everyone* in the business knows it
Almost everyone in programming who got into tech before “the blockchain” fully understands how NFTs work: They don’t. There might be interesting technology here and there, but almost nothing useful has been invented since 2009 when the Bitcoin Genesis Block was mined.
To see it all pass into mainstream is infuriating and dangerous.
2022 is the year NFTs will become irrelevant
Just as quickly as they rose to fame. Unfortunately for us, someone is going to come up with a replacement, slap a catchy name on it and we’ll do this all over again. Just as people are always going to be desperate for money, the ones taking advantage will already have a plan.
It’s a bummer because the technology can be very useful:
The Forgotten Lore of Decentralization
Peer to peer file sharing has been immensely popular since Napster
Distributed content-addressed storage to minimize egress & computation
Merkle DAGs are incredible data structures, not just for ownership ledgers
You probably haven’t heard of these because they don’t exist to make money.
Still feeling fuzzy? Consider Deep Learning instead!
It’s got just as much bullshit: Years away from fully self-driving cars, decades away from Artificial General Intelligence. But we’ve almost perfected voice recognition, text-to-speech, image classification and endless Netflix recommendations and even started solving protein folding.
We really never talk about the stuff that’s working.
Stephan Seidt
4y ago
When the enemy saw our boat fly over their heads to land inside their base, they probably thought it was a glitch.
Only it wasn’t. A minute earlier, my brother and I carefully planted 8 bundles of dynamite at the butt of our landing boat. There are two roles: The pilot steering the ship, and the ill-sighted demolition expert with detonator in hand. Off we drive towards enemy lines, evading gun battery and airplane fire, carefully aim at the spot, count 3-2-1 on comms and—
There‘s a science to it, but you never know until you’re flying.
Why doesn’t the boat explode?
Video game logic says: As long as a team mate is in a vehicle, friendly fire can’t damage it. If you launch a dinghy against a rock wall it’ll shatter from the impact. LCVPs however are sturdy and rated for take-off and landing. That being said, the dynamite still does something:
It converts into kinetic energy, launching our boat hundreds of meters into the air!
The strategic advantages of flying 24 tonnes of steel behind enemy lines
8 passengers on the LVCP makes it the game’s largest transport
2 fortified turrets are always a surprise after the air show
1 spawn point for our entire team
We regularly win games because of this.
How to bring a car to a tank fight and win
Our Sprengboot is an evolutionary step. When I convinced my brother to join me in playing Battlefield 5, I showed him how take out enemy tanks by driving into them with a dynamite-grilled jeep. He then invented the flying boat, and the rest is history.
Our most beautiful moment so far
One night, we saw a random other boat take flight. To see our meme transfer from one 2 person team to another felt like a beautiful achievement: We taught them how to fly! And this freedom of explosion—I mean expression—is exactly what I want to see more of in video games. On that note:
3, 2, 1... ✨
Stephan Seidt
4y ago
This morning, I had a foggy but glorious plan: Produce a tiny landing game on seidt.quest. Something to get my feet wet with Unity for Web or babylon.js. Making the game instead of making the game engine.
Long story short, I ended up trying to aDd NeW fEaTuRes to Hör Nicht Auf:
mhhh features 🥰
Most mobile browsers don’t autoplay video, at all. They particularly hate autoplaying sound. Sucks for me, radio boi. So as one does, I added a "tap to hör" overlay which unmutes (and plays) the video. Great UX improvement.
More importantly, I learned how one [Tap to HÖR] should be enough to autoplay as many unmuted livestreams as I want to!
Last week’s version reloaded the entire page, every 10 seconds, until a live stream was detected, and played that stream until it ended, rinse, repeat.
Turns out I can convince the existing, unmuted, playing video player to chill for a bit and autoplay the next video, unmuted as it comes online!
I finished my code, deployed and immediately found ✨two new bugs✨
Ahh, the life!
The [Tap to HÖR] prompt appears in between videos. When there’s nothing to HÖR. Awkward.
My uninterrupted-unmuted-undulation hack doesn’t work! Now, instead of reliably autoplaying the follow-up video, it’s unmuted, but not playing.
Why it broke and how I’m going to make it work for good
Testing a live youtube channel is super hard: You can (1) only test when it’s live and (2) gaps between videos are very rare. About 3-5 a day.
To fix this, I’ve requested live-streaming on my own channel, so I have something I control to test against.
My favorite thing about this was posting my “success” and immediate “regrets” to Instagram to lovely, supportive feedback from friends. You folks make me so so happy, and I will make this work for us.
Stay tuned :)
Stephan Seidt
4y ago
Now is a great time to build web apps just like people built native apps in the early 2000s, and by that I mean:
Using a fully-stocked local SQLite database for state management instead of coupling a sketchy heap of local data with a separate remote API.
The WebAssembly SQLite Renaissance
SQLite’s billions and billions of deployments show that it works. It’s rather strange that almost none of them are on the web.
Lucky for us, smart people like @rhashimoto and @phiresky are working on making sqlite really shine on the web, in all kinds of interesting ways:
wa-sqlite is a newer SQLite+WASM project with an experimental IndexedDB VFS for excellent performance and transactional reliability.
An HTTP VFS for SQL.js that allows you to query reads from remote multi-gigabyte sqlite database files hosted on S3 or R2 for cheap by fetching pages intelligently and efficiently.
Problem: There still is no persistent storage on the web
Writing to IndexedDB is all good and well, but the reality is that browsers like Safari act like Swabian apartment-dwellers, strictly observing the Kehrwoche, periodically deleting locally stored data for privacy reasons.
This is a problem!
People really expect their data to still be there the next morning, or a month later. Nothing should be deleted unless instructed. Ever.
Solution: Sync local sqlite pages to a durable remote copy
There is no other way. We will never get persistent storage in the browser. Don’t @ me, or I will @ you back 2 years later.
Luckily, building this isn’t that hard to imagine:
Straight up call S3/DynamoDB API methods to store and retrieve pages. Hello range requests. Remote API: Done.
If data is gone on startup, stream in from remote.
On write transactions, copy pages to remote, or even block until done.
I’ll continue this post with an implementation and write-up in a future post.
Stephan Seidt
4y ago
Today marks day 12/30 of publishing every day. And boy, OH BOY, have I learned some things.
What I’ve learned
To be fearless. For the love of god, I dread being an asshole to someone on the web who doesn’t deserve it. But I spend a lot of time listening and supporting, and if I want to change something, I have to put my thoughts and work out there.
I’ve never practiced my writing before. As it turns out, practicing something makes you better at it! This really wasn’t obvious to me with respect to writing. Don’t judge me, my high school teachers hated my fiction, except for whichever Herr said “I think you meant rocket launcher, not luncher”. Kudos bröther, your deference is held in high regard.
I have amazing friends with unique perspectives. They know magic words which unlocked entire trains of thought that simply didn’t exist before.
Imagining the future is super important for my happiness. Writing and publishing are powerful upgrades to that.
Learning to publish essays helped me ship code. I would never have shipped Hör Nicht Auf without writing about it on the same day. And it was good enough, because I’ve used it every day since, and a couple of friends have, too 🖤
What I haven’t learned
I lack discipline for “simple” things. The Plan™ was to write in the morning, at the kitchen table, with a nice cup of coffee. Instead, I’ve been writing in the evening, after work, sometimes juuust before midnight. On the bright side, I’ve managed the hard part of actually doing it. The achievement feels great every single time.
Don’t smoke weed before you’ve hit publish unless you’re a god damn wizard (or if it’s, like, your medication).
I’m very excited to continue writing and looking forward to reflecting on this post in the near future :)