gopalv

Joined 14 years ago

Karma
4,201
Submissions
773
Member since
Aug 20
@php.net / @apache.org / @isotopes.ai

https://aidnn.ai

.NET Bytecode -> PHP Bytecode -> Flash Video games -> Big Data -> SQL warehouses -> AI Agents

View on Hacker News

Recent submissions

Comment · 2 days ago
> They are hesitant to take their hand off the wheel because they don’t have full confidence the agents have the right guardrails in place to run off on their own.

This is not a new problem, I've had this problem every summer when a new batch of interns show up.

As they say, if an intern can bring down production, it is not the intern's fault.

The interns are generally so much better than me at writing code, but they're not the best at "software development" (I call it "software gardening").

My training regime is to push them up the next 4 leadership levels from "writing code" - delegation, negotiation, vision and inspiration.

Agents are barely at delegation, with multi-agent harnesses.

They don't negotiate with you, they say yes.

Their vision is limited to the context you gave and most of their output is uninspiring (you can smell "Claude did this" on a UX design pattern easily).

But the humans, they've been thrust into delegation on day 1 & unless you've been a tech-lead manager, you probably haven't exercised that skill yet. Even if you have done that, the way agents work is not exactly how humans work [1] in terms of incentives or even try something they think won't work.

If you've been a good IC for years, the company could always afford to hire a human who specializes in those skills and suddenly you've been promoted to a new role without a pay bump or even a choice.

Most of the "Let's add agents and go faster" is basically adding more manpower to a project behind schedule and the payback is missing because that causes communication gaps & dropped messages.

[1] - https://tinyurl.com/orchestration-imperative

Comment · 2 days ago
> The search tree is a binary trie over the bits of an IP address.

The interesting thing here is that the format is still the same.

I read the original spec and it did call out that

> In practice, data deduplication is handled by pointers, making this type unnecessary.

If any entry can be a pointer, you can shrink this recursively for each field type like a .strings table design.

Comment · 2 days ago
Comment · 3 days ago
This Ousterhout lecture lives in my brain (this one and the one about scar tissue).

"A Little Bit of Slope Makes Up For a Lot of Y-Intercept"

https://www.youtube.com/watch?v=mE98Is1quwY

> Pick a radical idea

> Build it over a weekend:

What AI has done is that we can do 10x more work a week, while only delivering 2x to production.

Right now, there are 4 people (and me) working on the same idea in 5 different ways - we're all training small language models, the goal is to get smaller or fewer active parameters.

By next week, we'll have lost on 3 different approaches. I know my approach is a dead-end already, but I'm not ready to give up till the pencils down.

The people I work with are great, because they will see the better solution by the end of it, whether they proposed it or someone else did.

A couple of them have been in the industry for less than 5 years and I feel like their slope is better than mine, which means I'm going to have a good time when they're fully up to speed :)

Comment · 3 days ago
Gdb is an excellent debugger for assembly, even when the original code was written in C

I would automatically type

(gdb) x/4i $pc

when opening a coredump out of habit.

But using nasm, then looking as gas style assembly in the debugger might be a bit more jarring.

Comment · 4 days ago
Python is harder to JIT because of the way __dict__ works.

If all python had was __slots__ then we would not be struggling to JIT python.

Tight numerical loops is where the JIT adds performance.

Most performance sensitive features are already available in python between numpy, numba and Cython without really leaving the language core.

You'll mostly be speeding up the slow parts of python, not supercharging the fast parts.

Comment · 4 days ago
This is a great example of going from AOT to JIT specializing function calls by types.

I assume this intended at a class which has already finished writing an AOT compiler and wants to build faster functions than you can derive at a compile time.

> On the first call to a function, the compiler calls compile_me, which reconstructs argument types from their tag bits and builds a temporary type environment. The function body is then optimized using those concrete argument types.

It's been two decades since I have worked on Rhys's brilliant libjit and the work that came before it[1], but the first-call recompilation can mix well with a byte code interpreter as well.

You still need to be able to JIT a whole function with the first-call recompiler here, but you can do even more incremental if you are pairing it with an interpreter which gets to pick up the slack of the JIT.

For example, with an interpreter, I could JIT about ~15% of a function and incrementally implement one opcode at a time without handling the complex ones on day one.

The switch loop with direct threading can jump into a JIT block or the next instruction's compiled location, in identical fashion. So you get to operate register to register for adjacent instructions being JIT'ed together, but write back to heap for the interpreter to take over for an unsupported one.

This is referred to as unrolling in the impl there, because what it really does is partially unroll the for(op in ops) loop and skip the jump to the top when you see a sequence of ops which you can line up together and JIT once.

[1] - https://mirror.linux.org.au/pub/linux.conf.au/2003/papers/Rh...

[2] - https://docs.rs/gnu-libjit/latest/gnu_libjit/struct.Function...

Comment · 8 days ago
An air purifier is a good addition to a kids bedroom.

I got one during Santa Cruz wildfires in 2020 and now the kids have a pavlovian reflex to sleep once that gets turned on.

Ikea makes an air-purifier table, which is a end-run around it being a useless box in the room when switched off.

It's fairly expensive, not as good as a purpose built one, but it blends into the average room pretty well.

Comment · 9 days ago
Comment · 9 days ago
> because of the overhead of parallelizing, despite them running at 100%

Duckdb might not be the reason, the real reason might be AWS.

It's been two years since I worked on this, but AWS Nitro might be triggering a high CPU Steal % when all the cores are busy at the same time.

You can do taskset -c 1-191 <server-process> and get a tiny bit of breathing room there.

I almost always do this above 32 cores, since this lets me always have a nice responsive ssh connection when the rest of the CPUs are churning high.

The more cores you have, the less of a problem sparing 1 core becomes.

Comment · 9 days ago
> read_parquet() making tons of tiny range requests to load a parquet's footer from S3

This is somewhat unavoidable if you have a number of files and a tight filter which rejects most of them. The footer choice was a bad one in hindsight (not for HDFS), but for anything which uses XOR or other kind of erasure coding. The other other file format I worked with used headers only instead of footers, to save a few ms in latency for the initial GET

I don't think Ducklake can maintain a zone-map or ART index over parquet files, but there is no equivalent of iceberg metadata/something which has min/max/HLL compacted across multiple files yet.

The secondary indexes with file identifiers stored in a sequential file is most likely the next useful thing duckdb can make.

Comment · 10 days ago
Comment · 10 days ago
> Not just reading data from S3, but the actual computations too.

Async io generally causes a CPU bump as a side-effect, when the bottleneck moves from the disk to the CPU (more usually memory bandwidth).

My experience is from a different SQL engine, but the improvement in scan rates directly translates all other operators getting more work to do per unit time.

More CPUs pegged at 100% is always a good sign of smooth flows, but optimizing further requires data layout changes from that point. Even if it is a sub-linear speedup out of concurrency scaling - more with more is still a win, assuming you can pay for more (the Dy-skew paper has an example I can quote).

Comment · 11 days ago
My dad used to joke that a meeting is where minutes are kept and hours are lost.

Buried in the pdf in different sections

> Managers attend meetings far more frequently and spend substantially more time in them than non-managerial employees.

> Separately, interactions with senior colleagues are associated with stronger wage growth

A meeting is called to coordinate or communicate. Wadge's law of meetings tell you which one is which.

But not all coordination is top down, sometimes you need your manager to go negotiate a point with another division.

And neither is all communication, most often you can impress on others the potential of a new approach or the problems with the existing one.

The only trouble for the neurodivergent among us is that "appearing to pay attention" is also communication, same goes for eye-contact or not stuttering.

Corolllary is that skip meetings at your own risk, decisions will be made and you won't be in the room where it happens. And don't be the person who is not welcome in meetings, that too eventually makes your pay suffer.

Comment · 14 days ago

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton