Josh Nichols

12.5K posts

Josh Nichols banner
Josh Nichols

Josh Nichols

@techpickles

Principal Whimsy Engineer for myself, Staff Software Engineer for @GustoHQ. Hobby hobbyist, husband, father, noun, https://t.co/9L8pwSaRrY . Opinions are my own.

Atlanta, GA Beigetreten Haziran 2007
2.7K Folgt2.9K Follower
Josh Nichols
Josh Nichols@techpickles·
@nateberkopec Misread as “it will slop”, like the antonym of “it will slap”
English
0
0
1
29
Nate Berkopec
Nate Berkopec@nateberkopec·
this is exactly like the LLMs shipping that terrible SQLite implementation btw. when you put a token generator, human or LLM, and don't explicitly make it focus on a requirement (perf in this case), it will ship absolute slop
English
1
0
19
1.8K
Nate Berkopec
Nate Berkopec@nateberkopec·
frontend developers will come to the office and talk your ear off about "craft" and "art" and then ship a 15mb react monstrosity that takes 13 seconds to LCP
English
11
10
286
19.3K
Josh Nichols
Josh Nichols@techpickles·
~/.claude/ is basically production. No staging, no isolation. Every Claude Code plugin mutates your daily driver config. Wrote up how to set up a proper test environment after borking mine one too many times. bit.ly/4r7VlvC
English
0
0
1
118
Josh Nichols
Josh Nichols@techpickles·
@hakunin Oh no! I don’t think there will be anything I directly help, so definitely contact support if you haven’t already. Once you have a case number, you can send it my way and I’ll make sure it gets routed to the right place internally
English
0
0
1
59
Max Chernyak
Max Chernyak@hakunin·
@techpickles Hey Josh, fellow long time rubyist. I work at a company that's expecting W2Cs from Gusto after recent issues. It's really hard to get any insights into the state of things, whether there's any light at the end of the tunnel. Any chance we can dm?
English
1
0
0
47
Josh Nichols
Josh Nichols@techpickles·
@headius That'd be great! I'll DM to find a time to chat
English
0
0
0
33
Charles Oliver Nutter
Charles Oliver Nutter@headius·
@techpickles I'd love to have a chat about how JRuby could fit into all of that. The best of both worlds for scaling is to be able to handle requests and back-end calls asynchronously, while also parallelizing synchronous work. Let me know if we can set up a call or chat!
St Paul Park, MN 🇺🇸 English
1
0
0
267
Josh Nichols
Josh Nichols@techpickles·
@bcardarella I’ve had that happen before when I said to use a subagent. I didn’t track it as a Task though, and just immediately came back said it is running in the background (?!)
English
1
1
10
28K
Brian Cardarella
Brian Cardarella@bcardarella·
I told Claude to one-shot an integration test against a detailed spec I provided. It went silet for about 30 minutes. I asked how it was going twice and it reassured me it was doing work. Then I asked why it was taking so long:
Brian Cardarella tweet media
English
253
261
8K
1.2M
Josh Nichols
Josh Nichols@techpickles·
@nateberkopec The other tty- gems are great too. I’ve probably used tty-table and tty-markdown the most with it
English
0
0
2
205
Josh Nichols
Josh Nichols@techpickles·
@nateberkopec The same could be said of human-augmented dev, LLM just tends to have lot less context to start with
English
0
0
1
71
Nate Berkopec
Nate Berkopec@nateberkopec·
In the age of LLM-augmented dev, your job is to: 1. Put the AI in the right latent space (prompt) 2. Provide correct context 3. Refine the output with automated loops and deterministic tooling. 4. Review output and improve step 1-3 so that you dont provide the same review 2x.
English
3
2
38
2.4K
Josh Nichols
Josh Nichols@techpickles·
@nateberkopec @bsilva96 The big one for me has been builtin support for things like aqua, ubi, etc that support installing stuff from GitHub releases. It’s useful even for packages you might normally install with homebrew, as you can tightly control the version.
English
0
0
1
73
Nate Berkopec
Nate Berkopec@nateberkopec·
@bsilva96 For me, I liked: parallel installs, less plugin management, easier to remember the commands, no shimming
English
2
0
0
238
Nate Berkopec
Nate Berkopec@nateberkopec·
Here's another one. Contract creation powered by pandoc:
Nate Berkopec tweet media
English
2
0
7
1.4K
Nate Berkopec
Nate Berkopec@nateberkopec·
agentic coding has really lowered my activation energy for writing new tools. I'm writing lots of small helpers and automating things that in the past would've taken way too long.
Nate Berkopec tweet media
English
6
1
84
5.6K
Josh Nichols
Josh Nichols@techpickles·
@nateberkopec I’ve ben using Cursor a lot lately, and it does a pretty good job getting context in a code base. I wonder how well it interpret profiles 🤔
English
0
0
0
95
Josh Nichols retweetet
LawrenceDCodes
LawrenceDCodes@LawrenceDCodes·
Stumbled across notes from my first @RenderATL (always keep your notes!). From @kishau : "Don't create glass ceilings for yourself by being an ineffective communicator and not being a good storyteller... If you make a technology choice, be able to talk through the alternatives you didn't pick and why" still true and relevant for my current role I didn't even have then🙏🏾
English
2
4
37
1.8K
Josh Nichols retweetet
Nate Berkopec
Nate Berkopec@nateberkopec·
"None of our top 50 endpoints by throughput can have more than 5% of responses be >500ms" This is a good perf goal. It scopes to the most important parts of the app, is set based on expectations of human users (users can feel >500ms resp), and it's usually quite achievable.
English
0
2
59
3.5K
Josh Nichols retweetet
Xavier Noria
Xavier Noria@fxn·
I just released Zeitwerk 2.7. Now, you can define namespaces with manual constant assignments too (think, Namespace = Struct.new). To the best of my knowledge, this completes the most important goal of the gem: to fully match Ruby. 🎉 Let me elaborate a bit on why that was not supported before, and how we have been able to remove that long-standing limitation. First, let's take a step back to understand a tricky aspect of namespaces. Consider this Hotel namespace (in Ruby, both classes and modules can be namespaces): # hotel.rb class Hotel include Pricing end # hotel/pricing.rb module Hotel::Pricing # Pricing related logic extracted to a mixin. end You cannot load any of the two files in regular Ruby, right? To load hotel.rb you need Hotel::Pricing in place, but if you try to load hotel/pricing.rb, you need Hotel! But that works if the project is managed by Zeitwerk, and it worked with the classic autoloader too. To support that use case, the :class event of TracePoint was instrumental, and it was the only technique I could think of in 2018. It worked this way: When TracePoint notifies that Hotel has been created, the loader scans its subdirectories and defines autoloads (issues Module#autoload calls) for child constants, in particular for Hotel::Pricing. The key observation is that happens precisely before the include line is executed. When the interpreter hits that line, the autoload is in place and autoloading hotel/pricing.rb is possible (because Hotel exists!). Problem was, the event was not triggered for manual constant assignments (think Hotel = Class.new). So, while that was a corner case, unfortunately we could not achieve full parity with this technique. The most important and common way to the define namespaces, using the class/module keywords, worked. But argghhhh. But the suffering is over my friends! In part motivated by this problem, @_byroot implemented Module#const_added. That callback is invoked in both situations! 🤘 Thanks to Module#const_added, the limitation has been finally removed. Also, Zeitwerk no longer uses TracePoint internally (/cc @yukihiro_matz). Zeitwerk 2.7 requires Ruby 3.2 or later, and upgrading should be seamless for existing projects. Don't worry if your app uses an older Ruby. Bundler realizes 2.7's Ruby version constraint is not satisfied, and ignores it in that case. Gemfile.lock will always get a version compatible with your app. Same for gems that need to support Ruby versions older than 3.2, a version constraint for zeitwerk like ~> 2.6 will do the job. Client code will automatically use a compatible one. Mission complete! 🎉
English
8
24
188
13.5K
Josh Nichols
Josh Nichols@techpickles·
@ltb1963 I don't think it is really getting any coverage. I only just found out about the strike when I had a service outage caused by a cut wire, and there not being any technicians (rightfully) not available. Are any of the competitors really going to be any better?
English
0
1
0
76
lb
lb@ltb1963·
Time to question your interest in using AT&T. We are in 4 th week of its employees out on strike.. Here is a company with 29 billion in Revenues asking their employees to pay half their own health insurance and offering a 2.9 cost of living increase and cuts in pension and cut
English
4
2
4
740
Josh Nichols
Josh Nichols@techpickles·
@nateberkopec Interestingly, this means that it works well for things that aren’t rapidly changing. For example: shell scripts 😅 I just wouldn’t recommend running them without a review first tho
English
1
0
1
141
Nate Berkopec
Nate Berkopec@nateberkopec·
Part of the problem with using ChatGPT for code is that it basically generates the code a junior dev from 4 years ago would have written. In the frontend world in particular, the community "best practice" has moved on wildly since the model was trained.
English
4
1
31
3.8K
Nate Berkopec
Nate Berkopec@nateberkopec·
.@GustoHQ's multi-million-line Rails monolith boots in 10 seconds:
Nate Berkopec tweet media
English
12
24
317
51.7K