Carter Bryden πŸ‡¨πŸ‡¦

Carter Bryden πŸ‡¨πŸ‡¦

@carterbryden.com

Dad, founder of approximated.app, developer (usually #elixirlang). Friendly and sincere. I mostly post about dev, things I'm working on, and stray thoughts about business/work/entrepreneurship.

2.5K followers297 following172 posts

Despite how we all might feel about another competing #elixirlang LSP, Dexter is *surprisingly* good. I haven’t had a single problem with it after using it for a few days, which just hasn’t been the case with others. And it’s _fast_. Fast enough that I don’t need to think about it.

I have a theory that a lot of the problems we see with agents are the same problems we’ve always had working with and managing actual devs, too. When we compare agents with people, we tend to imagine some ideal dev in comparison. But even the best devs I’ve known also occasionally do things like:

View full thread

I’d never expect a freshly hired dev to push a perfect PR with a single prompt and nothing else. I’d expect bad results, or something in the wrong direction, if there wasn’t more involvement (pairing/cowriting/reviewing). I wouldn’t expect that just writing more context would reliably fix it either.

When I see people adding a bunch of process, guard rails, workflows, etc. around agents it sounds an awful lot like what you do within a human org to keep things from falling apart as it all scales up. With a very similar list of pros and cons too.

I have a theory that a lot of the problems we see with agents are the same problems we’ve always had working with and managing actual devs, too. When we compare agents with people, we tend to imagine some ideal dev in comparison. But even the best devs I’ve known also occasionally do things like:

- Go a little too far chasing an idea or implementation - Get ahead of themselves and skip steps - Misunderstand context/needs/the state of things - Make simple mistakes or a bad judgement call - Being a little too opinionated or not opinionated enough at the wrong time

Approximated.app runs thousands of servers, and this is true. Similarly, each 9 added to uptime is exponentially harder. Downtime allowed by uptime percentage: 90%: 36.5 days/yr 99%: 3.65 days/yr 99.9%: 8.8 hrs/yr 99.99%: 52.6 min/yr 99.999%: 5.26 min/yr 99.9999%: 31.5 sec/yr (!!)

Jason Cohen@asmartbear.com

If you have 1000 servers, each experiencing a fatal error randomly once every 3 years… you will get random, unpredictable, unstoppable failures every single day. Scale is hard because it makes rare things common.

Picked up a Mac Studio recently because my daily driver Linux desktop hardware was showing its age at about 10 years old (some upgrades along the way). Most impressive to me is that it seems to generate no heat or noise, EVER, despite maxing out every core pretty often with elixir concurrency work.

Local LLMs, a zillion concurrent processes with elixir, doesn’t seem to matter what it is. It’s just cool as a cucumber at all times. Coming from non M chip hardware, that’s absolutely nuts to me. My old rig would literally be on fire if I did half of this.

This is the first Mac I’ve personally owned. I had a lot of criticisms in the pre-M chip era, it just felt to me like you paid twice as much for branding and kind of weak hardware. But it’s hard to deny how much of a jump the M chips are now, and competitor prices have crept up.

Carter Bryden πŸ‡¨πŸ‡¦ reposted

Thereβ€˜s still a bit to go to making this happen. Rebar is an important piece to using erlang not just for erlang, but just as much for elixir, gleam, … Consider backing this effort.

πŸŽ₯ From Rebar3 to Rebar4: Peer Stritzinger on why this matters for the BEAM community. πŸ‘‡πŸ‘‡ www.kickstarter.com/projects/pee...

When liveview first came out, I thought it was really brilliant that it can be nested. Even when live components were released, I preferred to just nest liveviews for a while. Today I use components a lot, and like them, but I still think nesting LVs have more use cases than people realize.

Pieter Claerhout@yellowduck.be

πŸ”— live_render/3 to encapsulate state (with error isolation) #ElixirLang #ElixirPhoenix #phoenix #reading-list

A lesson learned by all who have tried to make Reese’s pieces by just mixing chocolate and peanut butter

Gergely Orosz@gergely.pragmaticengineer.com

I am getting SO tired of these posts from influencers: β€œWe literally cloned an N billion-dollar company in 20 minutes with {vibe coding tool}. This changes the game forever.” No, you didn’t β€œclone” a billion-dollar business. You created a landing page similar to it. That’s all.

I have the dumbest trick ever when I can't figure out how to implement something, but it works. I ask "If a person had to manually do this, how would they do it". That's it. So many things feel complicated when I think only in coding terms, but dead simple if some guy named Steve had to do it.

This is extra handy if you want to have your app running on multiple hosting/infra providers and load balance between them for redundancy, costs, etc. Or if you just don't want to manage a global load balancer on your own infrastructure (or your provider makes it hard to do).

This is in addition to the inbound load balancing we already have, which balances based on region, connection count, etc. That inbound handles which part of your Approximated cluster a request should go through, and the upstream load balancing decides which upstream to send it to.

We should 100% steal this idea for #elixirlang Phoenix. Such a simple but obvious in hindsight idea. Automating turning controllers/routes into importable frontend packages would eliminate a lot of boiler plate for frontend heavier teams.

Joe Tannenbaum@joe.codes

From the galaxy brain of @tim.macdonald.au, with just a dash of Tannenbaum, presenting Laravel Wayfinder. Automatically generate TS functions for your controllers/named routes so you can call your endpoints directly in your client code. Available now in public beta. github.com/laravel/wayf...

So far I've found pair programming with AI to be a bit like pairing with a junior dev who has an insane breadth of knowledge, not much common sense, and doesn't ask the right questions. Using claude 3.7 with reasoning mode + a 200k context window, it's an intermediate dev who asks half of them.

View full thread

People should totally mess around with it for fun projects. But more than that and it's a bit like deciding you don't need an architect or engineer to sign off on a building. It might be standing. It might even look good. But you have no idea if it's safe or what's going wrong underneath.

I can also 100% see even the most experienced people letting their guard down and letting through some real doozie bugs as AIs keep getting better. It's just too tempting to get lax when it can help you do 5x-50x more work. Often work that would have been a brutal grind, too.

So far I've found pair programming with AI to be a bit like pairing with a junior dev who has an insane breadth of knowledge, not much common sense, and doesn't ask the right questions. Using claude 3.7 with reasoning mode + a 200k context window, it's an intermediate dev who asks half of them.

Which is to say that it's a massive boost to productivity for me personally. It's more helpful than time-wasting ~100% of the time now, which I wasn't expecting this soon. I think the larger context window is at least as much a part of it as the model itself.

Sometimes people ask why there's a 'restart cluster' button on Approximated, since the whole idea is that it manages itself. Partly it's just a relic from early days. But also, I like when products let me give them a bit of a kick if I want to. Its *your* cluster, that's why you can restart it.

#elixirlang devs, what are your personal guidelines in liveview for when you make a function component vs a live component? Function component: no state, send events to the parent for handling Live component: maintains it's own separate state, event handlers, etc.

I'm asking around in a few places, and consistently getting back "Use a live component when it needs it's own state or event handlers", so I think maybe my original question should have been: What are the criteria you use to decide if a component needs it's own state or event handlers?

My limited understanding of how it works is because screens already have their own polarization layer. By putting another in front of your camera, oriented in opposition, it cancels out specifically the polarized light from the screen, but not all of the other natural or studio lighting.

Carter Bryden πŸ‡¨πŸ‡¦ reposted

I’m speechless. Watching these arrogant, undisciplined, childish fools yell and threaten a legitimate hero on live TV is so fucked up. I hope the rest of the world sees it too.