Erik V

@flotes-dev.bsky.social

Senior Software Engineer @ Cisco · BJJ Black Belt · Dad Links: - https://github.com/everduin94 - https://flotes.app/ - https://tomatillotimer.com/

First time using view transitions. I always heard about them ion the context of page transitions. This is just a svelte state change. 2 lines of js and 2 lines of css, to get a pretty decent animation, for 2 elements that don't share a parent / layout.

30 line svelte fsm. Concept that I was wracking my braining thinking about how to handle all the edge cases, was so simple with a state machine. Shows a cover img to hide youtube iframe branding that flickers on video id change or play / pause.

	const debounce_destroyed = useDebounce(() => {
		f.send('destroyed');
	}, 7000);

	type MyStates = 'show' | 'destroyed' | 'destroying';
	type MyEvents = 'show' | 'destroyed' | 'destroying';
	const f = new FiniteStateMachine<MyStates, MyEvents>('show', {
		show: {
			destroyed: 'destroyed',
			destroying: 'destroying',
			_enter: () => {
				if (debounce_destroyed.pending) debounce_destroyed.cancel();
			}
		},
		destroyed: {
			show: 'show',
			destroying: 'destroying'
		},
		destroying: {
			_enter: async () => {
				debounce_destroyed();
			},
			show: 'show',
			destroyed: 'destroyed',
			destroying: () => {
				debounce_destroyed();
			}
		}
	});

Since Google revealed its plans for an AI search overhaul, visits to our "No AI" search page have tripled…and they’re still rising! Want to make it your default on Chrome or Firefox? Grab our No-AI extensions and banish AI-assisted answers, chat, and AI images. (1/3)

Bild

Been thinking about this a lot lately. An AI generated book looks like a book, reads like a book. But, I for sure ain't reading 1300 pages of an Oathbringer knock-off by Sandon Branderson. In the same way I'll never use a vibed alternative to Obsidian or play a vibed Stardew Valley... (1/5)

The Flaky Wanderer@flakywanderer.bsky.social · 3mo ago

If it looks like a code, edits like a code, compiles like a code, runs like a code, tests like a code, reviews like a code, deploys like a code, bears load like a code Then in what respect is it not a code

This is after running 3 instances of Pi via tmux off-and-on over the weekend in Ghostty. And running 1 instance of OpenCode in WezTerm for an hour. (Spoiler: The problem is not WezTerm)

3 Pi Agents in Ghostty (184.6 MB) 1 OpenCode in WezTerm (12.19GB)

Currently going through Whimsical Animations in my free-time. If you have the interest and means to buy it, I 100% recommend it. I don't believe that AI can teach you with this kind of depth + simplicity. If it seems like it can, well, it's probably just regurgitating courses like this one.

Josh W. Comeau@joshwcomeau.com · 4mo ago

For the past 6 years, I’ve been working on developer education full time, on my online courses + blog. It’s been an incredible privilege to be able to focus on this stuff. ✨ I’m starting to wonder, though, whether the business model I’ve chosen is sustainable. Let me explain… 🧵

This is a piece of code written by Sonnet 4.5 in my actual app 😄 We needed onclick={activate()} Instead we got a polling system filled with as anys lol. This is with Playwright mcp, svelte 5 mcp, ultrathink, telling it my grandma was in danger if it did it wrong; this is the outcome lol.

// Handle manual activation (when user clicks the video thumbnail directly)
	async function handleManualActivation(event: Event) {
		if (activated) return;

		// Let the lite-youtube component's own click handler run first
		await new Promise((resolve) => setTimeout(resolve, 0));

		activated = true;

		// Poll for playerPromise to be set, then wait for it to resolve
		try {
			// Poll for playerPromise to exist (set by addYTPlayerIframe)
			let attempts = 0;
			const maxAttempts = 50; // 5 seconds max

			while (attempts < maxAttempts && !(liteYoutubeEl as any).playerPromise) {
				await new Promise((resolve) => setTimeout(resolve, 100));
				attempts++;
			}

			if (!(liteYoutubeEl as any).playerPromise) {
				console.error('[LiteYT] playerPromise never created');
				return;
			}

			// Wait for the promise to resolve
			const ytPlayer = await (liteYoutubeEl as any).playerPromise;

			if (ytPlayer) {
				player = ytPlayer;
				set_player(ytPlayer);
				player_ready = true;

				// Trigger fetch_source event after player is ready
				if (mode.includes('study')) {
					state_study_player_fsm.send('fetch_source');
				} else {
					break_study_player_fsm.send('fetch_source');
				}
			}
		} catch (error) {
			console.error('[LiteYT] Failed to setup after manual activation:', error);
		}
	}

It seems like Cloudflare Workers are much cheaper than Vercel for hosting something like a SvelteKit app. Am I missing something? - Vercel is $20/m for 10m requests - Workers are $5/m for 10m request, not including static assets.

Cleaned up some initial load performance issues on one of my side projects. Thought these two charts were pretty interesting in retrospective. Light chart is traffic, dark chart is data transfer. - Even though traffic kept increasing, data transfer dropped from 13GB to 500MB. timer.flotes.app

Tomatillo Timer TrafficTomatillo Timer Data Transfer

vim.lsp.config has fixed so many issues I've been having in Neovim. - Svelte LS crashes on large svelte projects - Autocomplete suggestions are duplicated - ts_ls doesn't attach to .ts buffers at all - svelte files don't recognize changes to ts files

I'm using Neovim & Copilot CLI. How do others run multiple agents at a time? Any attempt to run more than 1 and they both start running npm run dev and playwright against each other in an infinite loop. I can even say "Don't use the default port", no luck lol.

I'm having a bunch of little issues pop up in my Neovim lately. - Svelte: I constantly have to restart the LSP for various reasons. Indentation stops working, duplicated references in auto complete, svelte/kit types aren't recognized. - Ghost text for things like copilot.lua break auto pairs.

I'm looking for my next opportunity in the front-end space 🌐 I've worked at some great companies: Hugging Face, V7, Appwrite, and Significa. I've built NPM packages with 400k downloads/week, and am an avid open-source contributor. Let me know if you want to work together!

"Property '"~standard"' is missing in type 'ObjectSchema' For anyone else that runs into a valid schema and svelte kit remote function failing with this error: My valibot version was old 🥲. May you save 30 minutes of your life not diddling your config and running :LspRestart 🫡

Bild

Anyone using Svelte + Neovim want to share their dots / config? 🙂 I've been using both for a long time, but recently the LazyVim extra for Svelte crashes the svelte-language-server on big svelte projects. I can't get ts file changes to show in svelte files without LspRestart. 🥲

First time writing Svelte Kit Remote Functions. Used commands for cookie updates to save ssr layouts/preferences. Sheeeesh, remote functions kick ass. The code is so much nicer now.

If you had a setting page in written Svelte / Svelte-Kit. No save button, every change event on a select, checkbox, etc... saves to the server. Do you use a form remote function with a form element, or omit the form element and use a command remote function?

Recently switched from Harpoon2 to Grapple.nvim. Insanely good plugin. I think Harpoon is so well known that people don't look at alternatives. Definitely worth the switch IMO and even has a harpoon-to-grapple config example in the readme. github.com/cbochs/grapp... #NeoVim #Vim

GitHub - cbochs/grapple.nvim: Neovim plugin for tagging important files

Neovim plugin for tagging important files. Contribute to cbochs/grapple.nvim development by creating an account on GitHub.

github.com

How is anyone running agents in large monorepos with success? - Even if there is some tool that uses multiple contexts, isn't each context missing the big picture? I constantly crash to the point it's not even worth it to attempt. "prompt token count of 308154 exceeds the limit of 128000"