1,923 karma · joined October 19, 2014
http://www.woodensquares.net/posts/rationale.html
Set up a Kubernetes cluster from scratch on a set of CoreOS Xen guests, with flannel, RBAC, TLS etc.
http://www.woodensquares.net/posts/xen-1.html
The downside is that of course the further you stay away from actually playing your instrument, the rustier you will get; this might or might not be an issue, but it is a significant downside, also being away from the technique side means that as the years go by, you might not be able anymore to have an intuitive understanding of "this sounds wrong" and why it does.
I don't want to stretch the metaphor too far, but it does feel that agentic coding is a bit like building skill tech debt, the more you do it, the more you'll have to work later to bring back the skills you lost. The meta could be that models will get so good so that only a small percentage of developers will ever need to sully their eyes again with looking at code (same as while when we started most people had at least a passing familiarity with assembly, nowadays nearly nobody does), jury's out on that.
Either way, what before needed a full orchestra of developers, now could be doable by a good conductor and maybe a couple of soloists: how many orchestras will be needed? and what will the section musicians not good enough to be soloists and that don't have an interest in becoming a conductor will do? and how are new conductors going to develop their technical chops if there are no more orchestral jobs?
I could not care less about "new paradigm" editors, UI reworks and AI lock-in offerings, the only AI I want is let me bring my own local model, or interface with claude / codex / ...
Note https://youtrack.jetbrains.com/projects/LLM/issues/LLM-17450... is still open although https://youtrack.jetbrains.com/issue/LLM-16479/Be-able-to-ac... appears to be closed as completed now
while IFS=' ' read -r line; do
if [[ "$line" == *"client"*"Launch Control"\* ]]; then
device=$(echo "$line" | cut -d' ' -f2)
fi
done < <(aconnect -i)
aseqdump -p ${device::-1} | while IFS=' ' read -r line; do
if [[ "$line" == *"Note on"* ]]; then
note=$(echo "$line" | grep -o "note [0-9]*" | cut -d' ' -f2)
if [ "$note" == "9" ]; then
wmctrl -s 8
fi
elif [[ "$line" == *"Control change"*"127" ]]; then
note=$(echo "$line" | grep -o "controller [0-9]*" | cut -d' ' -f2)
if [ "$note" == "114" ]; then
# some macro
fi
fi
doneTo me this is the most important part of these reviews, what changed in terms of dimensions and fit, bonus would be if they gave them to some 100-120mpw runners to get a durability test and a re-review a month later to see how they're holding up, but don't think I see any site doing that.
Personally seeing an "AI engineer" job posting I would not even apply, despite having many years experience in general, and experimenting/running models on my own hardware and being responsible at work for several skills, mcp and so on, it just feels that that kind of job is looking for some ex-openai/anthropic/ai-lab kind of skillset, which is not something a lot of people have; if this is what you are looking for of course it is what it is.
I think these days being "AI conversant" should be expected for senior/staff positions, it can also be listed a requirement, but not sure putting it as a job title, it feels more like having "IDE staff software engineer" which is not something anybody outside of jetbrains/vs.code would do.
I am not sure I agree with this being caused by lack of candidates. I have 25+ years of experience, I was caught in an office closure layoff in early 2025 for the second time in my career (the last was in the mid 2010s, where it took me a few weeks to easily find a new position), took the spring off, spent the summer preparing for the leetcode hazing ritual and interviewed a lot in the fall: despite having very up-to-date skills (I always keep up-to-date personally, also my last position was all k8s, llm integration, you name it) and long stints in my resume, interviewers did not care.
In the positions where I managed to pass the automatic resume screening (which was probably 10% of the time it felt), the interviewers just did their typical 5-rounds-sudden-death interview loops, with sudden death happening if the solution was not optimal. Sometimes sudden death was "oh I see you have experience in cloud 1 and cloud 2, but we run on cloud 3, sorry", other times it was a friday afternoon slot where the interviewer obviously just wanted to be done with the week.
It also did not help that many positions were "remote but only if you live within 50mi of one of our offices", and others were trying their best at downleveling (I have 15 years of my 25+ at principal+ both architect and IC, and some recruiters were pitching me senior positions, as in senior senior, not senior staff / senior principal). Often the hiring mgr would bemoan the fact that so many resumes are fake, and so many candidates just outright lie, but none of this seemed to make a difference when it came to the interview setup.
Ultimately after about 3-4 months of searching (I'd say I applied to ~100ish positions where I thought I'd be a good fit, and had actual interviews in less than 10) I ended up finding a local position for a significant pay cut, it is also the first job where the mandate from high on up is AI-everything, velocity first (like it's mentioned in this article). Given my long time experience I am able to be very productive with claude (because I know what it should be doing) but even with really tight reins it is a daily occurrence for it to prioritize expediency over correctness requiring rework.
I honestly don't know how people starting with AI agents will manage to improve, I have been through the transition of assembly->higher level languages, and the "spec driven agentic is just like using a compiler" rings very superficial to me: nobody would accept a compiler that 5% of the time (being generous here) miscompiled your code.
The current push seems to be "it's fine to have juniors on claude code producing tons of PRs, we'll just put a claude / codex reviewer action in GH so velocity stays up" which will lead to very interesting codebases in a few years. LLMs are a transformative technology, but it feels that management's perennial obsessions with cutting costs is going to use it mostly for that, as opposed to a way to create new products / improve existing ones.
As others have said, anthropic is between a rock and a hard place, you can't scale compute as quickly, and the influx of new accounts has definitely made things tough for them: I think all the "how is claude this session 1/2/3/4" questions that keep coming up must be part of some a/b on just how far to quantize / lower thinking while still maintaining user satisfaction.
To avoid 1M issues, this week I have also intentionally used the 256k context model, disabled adaptive thinking and did the same "plans in multiple short steps with /clear in-between" to minimize context usage, and yet nothing helps. It just feels ~2x to ~3x less tokens than before, and a lot less smart than in February.
Nowadays every time I complete a plan I spend several sessions afterwards saying things like "we have done plan X, the changes are uncommitted, can you take a look at what we did" and every time it finds things that were missed or outright (bad) shortcuts/deviations from plan despite my settings.json having a clear "if in doubt ask the user, don't just take the easy way out". As a random data point, just today opus halfway through a session told me to make a change to code inside a pod then rollout restart it to use said change, and when called out on it it of course said that I was right and of course that wouldn't work...
It is understandable that given your incredible growth you are between a rock and a hard place and have to tweak limits, compute does not grow on trees, but the consistent "you are holding it wrong" messaging is not helpful. I am wondering if realistically your only option is to move everybody to metered, with clear token usage displayed, and maybe have pro/max 5/max 20 just be a "your first $x of tokens is 50/75% off". Allow folks to tweak the thinking budget, and change the system prompt to remove things like "try the easy solution first" which anecdotally has been introduced in the past while, and allow users to verify on prompt if the prompt would cause the whole context to be sent or if cache is available.
For simple scripts and simple self contained problems fully agenting in yolo mostly works, but as soon as it's an existing codebase or plans get more complex I find I have to handhold claude a lot more and if I leave it to its own devices I find things later. I have found also that having it update the plan with what it did AND afterwards review the plan it will find deviations still in the codebase.
Like the other day I had in the plan to refactor something due to data model changes, specifying very clearly this was an intentional breaking change (greenfield project under development), and it left behind all the existing code to preserve backwards compatibility, and actually it had many code contortions to make that happen, so much so I had to redo the whole thing.
Sometimes it does feel that Anthropic turns up/down the intelligence (I always run opus in high reasoning) but sometimes it seems it's just the nature of things, it is not deterministic, and sometimes it will just go off and do what it thinks it's best whether or not you prompt it not to (if you ask it later why it did that it will apologize with some variation of well it made sense at the time)
Since I have been a software architect for the past 7-8 years it feels in some ways that that experience makes using claude code a lot more productive than for my non-architect colleagues, as I am able to steer it much more effectively whether directly in sessions or via custom skills / mcp.
The big issues right now for me are hiring and manager expectations, I changed positions last fall due to mass layoffs and it took me 3 months to find one: having leetcode interviews in the current climate seems completely useless, even more than it was in the past, and system design interviews are so formulaic it also feels like a crapshoot. Plus every job getting hundreds of AI generated applications makes actually being considered in the first place quite difficult.
Manager expectations are also ridiculously inflated nowadays, it seems most action items that come are claude written with fantastical random statistics (if you add caching you can make your backend 98.3% faster!), and it takes so much time to fight this and unrealistic team velocity expectations.
Interesting times, I do feel lucky I have had a long career, but I very much fear the ladder being pulled up even more than it has been when outsourcing because widespread. I know everybody says "things always change, new opportunities will open up to compensate for the ones that are being lost" but this time it does feel different, and not in a good way.
The one course that had something similar was microelectronics where during Christmas holidays we were given an optional assignment where we could design IIRC a NAND gate (2um process I think, most people ended up with a 5ft x 5ft sheet of paper at the end) which took a long time, but would give you up to +5% at the final (only one person got the full 5%, due to their creative use of the diffusion layer for interconnects). I don't remember any other course having anything along those lines, although to be honest you could slightly influence the difficulty of the oral final questions depending on how hard you worked / your behavior in class (of course only in years 4-5 where courses had only 20-30 students, no chance in year 1-2 with 400+)
It was extremely high stress, as you can imagine, but basically impossible to cheat. Every year a significant percentage of the students had to drop out, so by the time the 5th year thesis came around I think less than 20% of first years graduated at all. You were allowed to retake course finals if you wanted a different score (available 3x year typically, no guarantee you'd do better tho), but if you failed enough times you had to retake the course from scratch. You also were not allowed to enroll in the next year's courses until you passed all the prerequisites.
https://www.youtube.com/watch?v=tsxP-YjDWlQ (arioso from the cantata 156, here for oboe)
which I think stands up just fine against pretty much any other classical piece baroque or not.
Personally I have a very big soft spot for his organ works, as I play (badly) some organ myself, and among those I don't see the trio sonatas recommended nearly often enough (here is a live recital of all of them, which is super impressive)
https://www.youtube.com/watch?v=eK9irE8LMAU
among those I probably enjoy the most the vivace of BWV 530. Other favorite pieces are the passacaglia and fugue https://www.youtube.com/watch?v=nVoFLM_BDgs the toccata adagio and fugue in C major https://www.youtube.com/watch?v=Klh9GiWMc9U (the adagio especially is super nice), but there's so many. Among organists I often come back to Helmut Walcha, and am always amazed at how he was able to learn everything just by listening, him being blind.
Same thing for cars turning right in front of me riding my bike in the bike lane, it's just par for the course, so pedestrians should ALWAYS make eye contact with the driver before crossing, and cyclists should NEVER be side-by-side with a car when approaching an intersection.
I am using those techniques respectively for loading backups (I store each container log in a separate file inside a big zip file, which allows concurrent reading without unpacking) and for servicing the various log producing goroutines (which use the docker/k8s apis as well as fsnotify for files) since I allow creating “views” of containers that consequently need to aggregate in order. The TUI itself, using tview, runs in a separate goroutine at configurable fps reading from these buffers.
I have things mostly working, the latest significant refactoring was introducing the btree based reading after noticing the “fix the order” stalls were too bad, and I am planning to do a show hn when I’m finished. It has been a lot of fun going back to solo-dev greenfield stuff after many years of architecture focused work.
I definitely love golang but despite being careful and having access to great tools like rr and dlv in goland, it can get difficult sometimes to debug deadlocks sometimes especially when mixing channels and locks. I have found this library quite useful to chase down deadlocks in some scenarios https://github.com/sasha-s/go-deadlock
1. Reading from various files where each file has lines with a unique identifier I can use to process in order: I open all the files and create a min heap reading the first line of each, then process by grabbing the lowest from the min-heap repeatedly, after reading a line from a file, I read another and put it in the min-heap again (the min heap cells contain the opened file descriptor for that file)
2. Aggregating across goroutines that service data generators with different latencies and throughputs. I have a goroutine each that interfaces with them and consider them “producers”. Using a global atomic integer I can quickly assign a unique increasing index to the messages coming in, these can be serviced with a min-heap same as above. There are some considerations about dropping too old messages, so an alternative approach for some cases is to index the min-heap on received time and process only up to time.Now()-some buffering time to allow more time for things to settle before dropping things (trading total latency for this).
3. Similar to the above I have another scenario where throughput ingestion is more important and repeated processing happens in-order but there is no requirement on all messages to have been processed every time, just that they are processed in order (this is the backing for a log viewer). In this case I just slab allocate and dump what I receive without ordering concerns but I also keep a btree with the indexes that I iterate over when it’s time to process. I originally had this buffering like (2) to guarantee mostly ordered insertions in the slabs themselves (which I simply iterated on) but if a stall happened in a goroutine then shifting over the items in the slab when the old items came in became very expensive and could spiral badly.
Although I do not like F2P for all the dark patterns (which have infiltrated non-F2P as well unfortunately) if it was capped to a reasonable maximum amount a year, with no player to player trading at all, and no multiple accounts for the same store account, it might could be made to not be as predatory while still keeping it financially sustainable for the companies that produce the games.
There are also obviously better ways (https://blog.cloudflare.com/privacy-pass-standard/ possibly some variation of zero knowledge proofs) but technically this seems like a solvable problem. Money wise the IDP or in general verifier can charge users for an account and/or generated assertions.
As an aside, I am not sure why for LLM models the technology to spread among multiple cards is quite mature, while for image models, despite also using GGUFs, this has not been the case. Maybe as image models become bigger there will be more of a push to implement it.