Hearing
@dhh
's call for stone age solutions, I got tired of wrestling with tools like Ansible to get simple stuff done on servers. 🗿
So I've made a thing: Consist. 🎉
It's a simple Ruby DSL that executes commands on servers for you.
You can use it to get a server setup for
A lot of my power in my career as a software engineer has derived simply from ruthlessly testing my own shit.
Just coded up a feature? Ok now run through it. Run through it again. Try to break it. Fix what you missed. Run through it again.
I consider it a personal
Turbo 8 is truly magic.
This is what I want for DX - total magic. I don't want to think about `useEffects` or dependencies. You're a computer, figure out that shit for me!
This is as close to the magic rush I felt building a desktop app in Visual Basic.
@jappleby
You don’t think you’re exemplifying the hypocrisy he’s talking about, sitting there with your blue check that you pay for, telling brands to pull out?
It's great news that something is being done to unify the Rails docs, but IMO we also need to get something done about apidock showing up in search results with 10 year old pages
⚡Rails tip: if you have something in your Domain model that is suited to be namespaced by an acronym (in my case, all GDPR related stuff), you can tell the Rails inflector not to convert `GDPR` to `Gdpr` when doing constant lookups:
Turbo Drive UI tip: when you have a turbo frame tag that has a placeholder, you'll notice that on navigation you'll get a UI flicker/glitch, where the Turbo preview is show first, then the turbo frame starts loading, then the content displays. This is ugly as hell. See attached
@saltnburnem
Landing a job is more up to luck and random timing that people like to admit. Don't take it as a value judgement on yourself, the vectors just didn't align. The important thing is to keep going, accelerate even.
One of my favourite lil’ tricks: I use different favicons in development and production, so that I can quickly tell which is which.
Here's what I use on my blog:
Someone pulled the code out of the DHH series 'On Writing Software Well' (and some other places) and put it all in a GH repo.
Pretty interesting / useful:
@_swanson
@t3dotgg
I watched one of his streams earlier this year, when he broke something he was working on, and the chat was trying to tell him, and he got all red in the face and started abusing and swearing at them and calling them dumb.
Then he saw they were right, and just moved on.
Implemented a slash command menu in 128 lines of basic Javascript using Stimulus. Filtering, and keyboard navigation.
That's the magic of simple tools, folks.
#rails
#stimulusjs
Turbo Stream custom actions are pretty god damn amazing.
Tell the frontend to do whatever you want! Right from the comfort of the backend!
@marcoroth_
has bundled up a few good common ones in the Turbo Power gem:
Allred tweeted that the school achieved a 100 percent job-placement rate in one of its cohorts, and later acknowledged in a private message that the sample size was just one student.
A good reminder as to why you shouldn't use UUIDs as primary keys in
#rails
: all of the batch methods get totally nerfed. They fall back to string comparisons so your ordering becomes gibberish.
Could maybe use ULIDs or UUIDv6s (not sure if PG has support for them).
@brotzky_
@anysphere
@didier_lopes
I find it to be slow, buggy and not that great. They broke basic VSCode things like DevContainers, which I don't even understand how that's possible.
Not saying others arent having great experiences. But I wonder if they'd still be saying that 4 weeks in?
This is the magic of Hotwire and Stimulus 👑
Minimizing JS (and keeping it in its place as a glue between DOM and actions) while still being able to build world class UX has brought so much joy back to working on Web apps for me.
We put man on the moon without types.
Ada95, with its static types, did not prevent Ariane 5 from exploding.
The belief that types will eliminate bugs is Dukkha.
@JonathanSalemi
@AutismRonin
None of it was filmed on location. It's all sound studio built at Pinewood. If you watch Bill's walk carefully you'll see it's essentially the same 4 corner block reused with some different dressings in some scenes.
There are many documented sources for this but Wikipedia covers
Spent the morning switching over from my rails app running inside a docker container, fronted by Traefik and using mkcert to get local TLS, to `puma-dev` which is pretty awesome
It'll give you bare metal, local TLS, and proxying capabilities with a
Go ahead, post another "Don't use Service Objects" post. Tell me I'm doing everything wrong. Talk on a podcast about how everyone should 'Just build good domain models." Call up my family and tell them I coulda just been using Jobs this whole time.
TIL that the `gem` command has an `exec` sub-command that does what `npx` does - runs the gem without having to install it.
E.g. `gem exec consist init consist-sh/kamal-single-server`
When did this happen????
Did some initial layout work for my new (not really new, this is like the 15th incarnation) interstitial logging / life management app, Owl:
#buildinpublic
This is just so deeply unaesthetic to me. Imagine willingly accepting this horror in your daily life.
Typescript is useful in some scenarios, but this is just pure distilled high fructose syrup tech debt.
@yoheinakajima
ceiling is being raised. cursor's copilot helped us write "superhuman code" for a critical feature. We can read this code, but VERY few engineers out there could write it from scratch.
Took lots of convincing too. "come on, this must be possible, try harder". and obviously- done
This is a great intro to Phlex! Highly recommended.
Your first reaction to Phlex, probably as mine was, is 'uggh this is gross'.
But then, if you try it, you start to see how powerful this paradigm is and how much less code in general you need to write for view (no helpers,
Ever wanted to write Rails views in pure Ruby?
This week,
@adamlogic
walks us through using Phlex with some practical examples from his product, Judoscale.
Coming along...
- Added Week No above days of week
- Streamlined the textarea input and button
- Added bottom left nav menu on clicking the owl
#buildinginpublic
#buildinpublic
DSLs - some people love them, others can't stand them.
Ruby so easily allows you to create beautiful simple DSLs it feels like a waste to not occasionally use them wisely.
Javascript could never.
If you're American, and a software engineer you need to forward this to your CEO right away. I can't believe people are still sleeping on this issue. It will cause layoffs worse than anything we've seen if it's not corrected. Companies will go bankrupt.
For the first time on a new SaaS project I'm going straight to integrating
@PaddleHQ
instead of
@stripe
.
Stripe has really dropped the ball on tax remittance, a ball everyone has seen coming for 5 years or more.
Calculations aren't enough - no one wants to deal with the EU.
@MyBuddyAndrew
In my experience the Javascrpt community is rife with fad driven complexity and endless breaking changes for the sake of making changes. Net advancement approaches zero.
Source: I left Rails for ~5 years and have very much come back.
Some engineers will say 'We need testers. I'm too close to it to see the issues.'
So you're telling me if you had to build a shed or something, you'd have to run out and grab someone in the street to be like 'does this look square to you? do you think this door opens if you try
The 87 edition of
@shortrubynews
is out.
This edition was curated by me and edited by
@neenu_chacko_
🙏
It has a ton of code samples and discussions about Turbo and Hotwire.
Make sure you don't miss the Thinking about code section and the new gems dicovered.
Currently in the last 10% (which of course will take 90%) of two projects and am somewhat deep in the trough of despair tonight, my indie builder friends.
What do you do to keep your head up and pressing on?
#buildinpublic
#buildinginpublic
I really regret adding `mjml` for email templates to my Rails app. Such a pain in the ass not only having this extra nodejs dependency, but in general I really don't like these custom tags that need to be used everywhere.
Thanks to
@handsontable
,
@laravelphp
Echo, and
@pusher
, I've got a real-time, collaborative, internal spreadsheet tool. And it only took a couple of days!
These tools are so amazing because they let us focus on the important parts of our apps instead of the plumbing.
I don't put anything on the web without it being behind Cloudflare. It's free to get started, and when you need it you just flip a switch. It's a no brainer.
@Cloudflare
We saw 80,000 req/sec at the peak on this attack! Which isn't actually that crazy by DDoS standards, but still enough to flood. But yeah,
@cloudflare
's excellent shielding is sending it all into the bit shredder now.
Part difficulty of being a solo developer/designer is balancing your time between those specialties, and simply learning to accept less 'perfect' as you go along.
Did some design re-alignment today on - left before, right after. Still not 'perfect', but
Rails domain modelling tip ⚡
I've found when building out your domain model, it's important to give the hierarchy of relationships a second think. You need to think about what is going to be most useful to the user, not technically what might be 'right' on paper.
For example,
Turns out solid_queue used to set 5 threads per worker, and the default thread pool is 5 ... so problems ensue. A change was made to the default config to reduce it to 3, but looks like the generated config file was missed, so when I uncommented it, things went to hell
There's an effort underway[0][1] by Ruby maintainers to fragment the Stdlib out into Gems that you have to explicitly add.
There's arguments for this - one being faster CVE resolutions in affected libs.
But to me this feels opposite of optimizing for developer happiness which
Added a little 'hole punch' like you used to get from a conductor on your train ticket for days where you made entries.
#buildinginpublic
#buildinpublic
@LBacaj
I think this misses the reality that almost all of those cut engineers were hired by PMs and execs who were solely intent on building their little empires and performing internecine wars.
Engineering headcount bloat will happen again.
Where there's PMs & Execs, there's bloat.
My one-man-band indie hacker productivity system:
- I use the XIT plaintext format for todos [0]
- TODO.xit textfile has 6 blocks:
- Today - record of what gets done today
- Next - roughly what is next to get done
- MVP Features - Set of features for this milestone
-
Did a 7km walk along this former 1800s railway track that is now a 'nature trail', thinking about the hundreds of men that worked and no doubt died carving this pathway through mountains, laying hundreds of miles of railway track.
And today it's populated by miserable looking
Patiently waiting for
@ID_AA_Carmack
to announce that he's used a 3D Megatexture variant to implement virtual paging into latent space and I can now run 10B param LLMs on my kitchen scales
What if I told you programming was actually divination, and you're not only programming the CPU, but the substrate of reality?
And that if you write ugly programs you create an ugly reality?
When searching routes added by gems or engines, I'm usually not sure what I'm looking for. Combining the rails routes task with FZF gives you a fuzzy finder for routes in your terminal.
Here's the alias I use in my bash profile and a quick demo of what it looks like.
@joshsny
My brother in christ, I literally said in the next tweet that I did this while building and working on another larger active SaaS.
You seem really invested in having a bigger dick, so see you later.
It is often said Ruby is optimized for programmer happiness. I say it’s optimized for short-term happiness at the cost of long-term happiness. A joy to write, but can be difficult to maintain.
@aarondfrancis
Forte man blocked me when I asked him the simple question of why it had taken him more than 18months to write his book when his entire system promises 'effortless output'. Funny that... It was an honest question.
As an Engineering Manager, it's been insane the number of times in my career that an IC will say something is done, and I do the literally most basic form of testing, and boom - broken.
Getting close to opening up for some beta users on Owl...
Feeling the resistance....fear of failure, fear of success.
LOCK IN!
#buildinpublic
#buildinginpublic
Figured out what the issue was. It wasn't Vite. It was `rack-mini-profiler` causing the delay itself. At some point I had set the popup to start hidden. Which obviously doesn't disable it, and I had forgotten about it.
Removing the Gem reduced my reload time from >10s to
So I've been using Vite via `vite-ruby` for about 6 months now, and while it was indeed fast at the start, it's now pathologically, extremely slow now that I've added some more JS files.
This seems to be a known thing on the Vite GH - they ask for CPUPROFILE files.
Anyone
Just released v0.1.3 of `consist` which adds an `init` command, community consistfile support and consistfile artifacts (lets you split up `Consistfiles`)!
🎉
#rails
#buildinpublic
Moved on from using smiley faces to indicate energy boost / energy drain as they were too small to resolve the details.
Tried circles, but they were initially confused for moon phases 😅
Settled on a thermometer like pill shape for now
👈 sign up to
It’s been a month of tremendous personal loss. First my mom passed, then 2 weeks later my wife’s mom passed. We’re both simultaneously trying to navigate being ‘motherless’.
Being in nature helps a lot, and I’m heart grateful for being able to live in the paradise of the PNW.
I’ve got a documented career of being considered an inspirational leader, a lot of it public. ICs have told me I changed their lives, and a lot of them still keep in touch even though it’s several jobs ago.
Being empathetic but sometimes painfully candid in someone’s work is a
@strzibnyj
I think for 2024 I'm dropping UUIDs altogether, returning to bigint, and using
@excid3
's `prefixed_ids` to expose. No extra columns or indexes in the DB needed.
Plane One pre-orders are now open.
For $̵7̵9̵9̵ $699 paid once, you get a complete project management tool that installs with one command, gets weekly security + performance updates, and works for your entire company.
Plus unlimited projects, issues,
Standups are fundamentally punitive in nature. They appear most often when a team is dysfunctional, or not shipping near their potential. They're a blunt tool to achieve a limited form of accountability, but at extreme cost. As a manager, I'd try to get to the root cause and
Standups are a waste of time.
Especially the daily ones.
A team can provide updates about their work async through text.
If there is something to be clarified, people can hop on a call.
No need for pointless meetings.
Async text updates -> save time and brain cells.