HNHacker News
TopNewBestAskShowJobs

frumiousirc

544 karma · joined May 31, 2016

submissionscomments
frumiousirc··on Nano Banana can be prompt engineered for nuanced AI image generation
The lack of proper indentation (which you noted) in the Python fib() examples was even more apparent. The fact that both AIs you tested failed in the same way is interesting. I've not played with image generation, is this type of failure endemic?
frumiousirc··on I hate screenshots of text
https://0x0.st/K9hq.png
frumiousirc··on AI documentation you can talk to, for every repo
deepwiki doesn't spider. Repos are indexed upon request. The request dialog accepts a non-github URL.
frumiousirc··on AI documentation you can talk to, for every repo
I have a fairly large code base that has been developed over a decade that deepwiki has indexed. The results are mixed but how they are mixed gives me some insight into deepwiki's usefulness.

The code base has a lot of documentation in the form of many individual text files. Each describe some isolated aspect of the code in dense, info-rich and not entirely easily consumable (by humans) detail. As numerous as these docs are, the code has many more aspects that lack explicit documentation. And there is a general lack of high-level documentation that tie each isolated doc into some cohesive whole.

I formed a few conclusions about the deepwiki-generated content: First, it is really good where it regurgitates information from the code docs while being rather bad or simply missing for aspects not covered by the provided docs. Second, deepwiki is so-so for providing a high layer of documentation that sort of ties things together. Third, it is highly biased about the importance of various aspects by their code docs coverage.

The lessons I take from this are: deepwiki does better ingesting narrative than code. I can spend less effort on polishing individual documentation (not worrying about how easy it is for humans to absorb). I should instead spend that effort to fill in gaps, both details and to provide higher-level layers of narrative to unify the detailed documentation. I don't need to spend effort on making that unification explicit via sectioning, linking, ordering, etc as one may expect for a "manual" with a table of contents.

In short, I can interpret deepwiki's failings as identifying gaps that need filling by humans while leaning on deepwiki (or similar) to provide polish and some gap putty.

frumiousirc··on Understanding traffic
This blog post has a lot of good ways to think about traffic.

There is on particular phenomenon I ponder about my commute to work on 45 MPH "stroads" involves the interplay between speeders, slugs and the many stop lights.

I strictly keep to the speed limit during day light and good weather (slower otherwise) and start slowing well in advance to an oncoming red followed by accelerating briskly when red turns to green if not blocked by other users of the road.

The vast majority of the other users have the opposite speed profile. They go well above the speed limit (60+ is not uncommon to see), often passing me at the last second before safely or not so safely stopping at a red and then take their sweet time getting up to the limit (and then beyond) after a green. The fact that most of them drive enormous apartments on wheels perhaps explains some of this behavior.

The main hypothesis I am interested in is that their strategy of speeding to the next red light and lazily getting going at green (if they notice the light change) is actually counter productive to throughput and maximizing average speed. The speeding and the bunching at red coupled with glacial acceleration up to and beyond the limit is far slower than keeping to the speed limit, gradual slowing down (sometimes catching red->green before stopping) and brisk speed up is the winner, assuming not blocked by lumbering behemoths.

That is, stopping is slower than speeding is fast.

frumiousirc··on Bluetui – A TUI for managing Bluetooth on Linux
> Have you considered a network manager?

I've used "nmtui" on Linux for many years to do this. "nm" = "Network Manager".

frumiousirc··on Who needs Graphviz when you can build it yourself?
I had tried this with the previous versions of sonnet and gemini pro. Sonnet's context, back then, could not hold the full source I was working on. Reducing the context did allow it produce a graph. Both LLMs produced graphs with enough omissions and errors to make the result not useful. In the end, I wrote an interpreter based on libclang to provide the semantics I needed for my particular case. That was not trivial for me (I have decades of experience with s/w dev, working with graphs, etc - but not compiler development). And I used LLM's help to do the development. The new type of semantics would require hard-coding new AST interpreter and graph construction. Repeating that all today with the better LLMs and after more practice driving them might produce something with less effort / more flexibility.

In any case, this experience gave me a new appreciation for compiler developers!

frumiousirc··on Signs of introspection in large language models
Geoffrey Hinton touched on this in a recent Jon Stewart podcast.

He also addressed the awkwardness of winning last year's "physics" Nobel for his AI work.

frumiousirc··on Language models are injective and hence invertible
My understanding is that they claim that for every unique prompt there is a unique final state of the LLM. Isn't that patently false due to the finite state of the LLM and the ability (in principle, at least) to input arbitrarily large number of unique prompts?

I think their "almost surely" is doing a lot of work.

A more consequential result would give the probability of LLM state collision as a function of the number of unique prompts.

As is, they are telling me that I "almost surely" will not hit the bullseye of a dart board. While likely true, it's not saying much.

But, maybe I misunderstand their conclusion.

frumiousirc··on Who needs Graphviz when you can build it yourself?
The issue is to make sense of the incredibly detailed AST to answer various questions about the code base. For example, how to make an information flow graph that shows what functions read and write what variables in a set of C++ classes.
frumiousirc··on Who needs Graphviz when you can build it yourself?
Looks nice. Two things on my wish list:

1. Make graphs from Clang's AST.

2. Invent some style flourish to help follow an edge that becomes part of a bundle of many edges.

frumiousirc··on Recall for Linux
Not to be confused with Recoll (for Linux, et al) https://www.recoll.org/
frumiousirc··on Why your social.org files can have millions of lines without performance issues
My most recent traversal of the social graph found 46 accessible nodes and 487 edges.
frumiousirc··on Chen-Ning Yang, Nobel laureate, dies at 103
He told my advisor in the mid 90's, "neutrinos do not have mass". Shortly thereafter, the Super-Kamiokande ship arrived.
frumiousirc··on Show HN: I invented a new generative model and got accepted to ICLR
After reading the paper there is one thing I don't understand about the DDL. It seems each "concat" will increase the size of the "output feature" relative to the "input feature" by the size of the "generated image".

Is that right?

If so, how is this increased size handled by each downstream DDL?

Or, is there a 2x pooling in the "concat" step so that final size remains unchanged?

frumiousirc··on A small number of samples can poison LLMs of any size
> But there's an immediate followup question: this is the result for non-contended poisoning. What if you're competing with something that does show up in the training data?

Exactly. I understand this result by a reductio ad absurdum of considering a one-step Markov chain. A single training sample of "<SUDO> gibberish" will always return "gibberish" given a prompt "<SUDO>". Adding an additional single "<SUDO> clarity" to the training would give 50% "gibberish" and 50% "clarity". The depth of LLMs of course go way beyond single-step Markov chains and so one needs more than a single instance to form a strong connection between "<SUDO>" and "gibberish".

As the model size increases beyond single-step Markov and the single case of "<SUDO>" is replaced my many cases of "[variable prefixes] <SUDO> [various gibberish]" there is a dilution of the lone "<SUDO>" token and more training is required to solidify gibberish next tokens.

This can be seen in the plots. Larger models require more training for "poisoning" to be solidifies.

EXCEPT for the fact that the 600M strongly bucks the trend. Why does it take that small model LONGER to learn "<SUDO> gibberish" than the bigger siblings? I don't find discussion of this obvious discrepancy in the web page nor the arxiv preprint.

frumiousirc··on Vibe engineering
> AAC / Agent Assisted Coding is a good term.

Yes, please don't push "vibe engineering" to mean how you defined it in your blog post. To me, it means exactly the opposite.

I see "vibe" as pejorative. Adding "engineering" does not elevate it from "vibe coding", as I think is your intention in the post, it just shifts "vibe" term to a different domain.

To me, "vibe engineering" means using LLM to develop "design" with no care as to its validity just like "vibe coding" means for "code".

"Agentic xyz" or "Agent assisted xyz" is more fitting.

FWIW, I do not see "vibe" as always pejorative, rather it depends on goals. When quick results and not long term quality matter, "vibing" is a legit tactic.

Anyways, just my interpretations. Please, keep up the good work. Remember, the two hardest things in software are naming, cache invalidation and off-by-one errors. It's good you continue to tackle the zeroth one.

frumiousirc··on The End of Tt-Rss.org
> What we really need is a way to fetch walled garden and rss content into a maildir, and then our mail clients will do the rest.

Inspired by your comment I tried blending together rss2email, Maildir, notmuch and gnus. While it all "works" the RSS feed content comes through in markdown'ish (?) markup. The flowers are out of the garden but they are all a bit wilted.

frumiousirc··on Linus Torvalds and the Supposedly "Garbage Code"
In what way was I addressing Torvalds' choice of "wording", exactly?
frumiousirc··on Linus Torvalds and the Supposedly "Garbage Code"
> Software engineering is a collaborative process, not an adversarial one.

The collaborative process itself is adversarial. Capitulating to others when their contributions go against one's goal compromises that goal. Sometimes compromise to achieve a lesser goal is better than failing to achieving the full goal. But, when stakes are high (and Linux stakes are enormous) compromised goals are less appropriate. Linux and Linus are in a position not to have to compromise the goal.

frumiousirc··on Learn to play Go
> we use 1 lid and swap it after we place a stone.

What does "lid" mean here?

frumiousirc··on Open Social
> This is why Bluesky could never have "private likes" in the same way Twitter or ActivityPub does

I didn't know "private likes" even existed, but if atproto includes public key encryption, I could publish a record containing a "like" that I have encrypted with the "liked" user's public key. Only that user would know what the record contained. Though, the fact that the encrypted message exists and had a cleartext "@name" is itself informative to adversaries. Concealing that level of info would require other measures.

frumiousirc··on Improved Gemini 2.5 Flash and Flash-Lite
The prompt was:

> Give me a Python function that takes a string holding text in Markdown markup syntax and that uses regular expressions to replace any Markdown markup codes for bold, italics and underline with their ANSI equivalent.

BTW, your solution will produce bad output. Markdown's "bold" etc markup comes in pairs of markers and your simple replacement will match singlets.

frumiousirc··on Improved Gemini 2.5 Flash and Flash-Lite
> I asked it to suggest some ways to do it first

Yes, this is a very effective tactic, in my experience! Especially when I am asking for a solution where I am not confident I know what is "best". Having a "pre chat" to settle "what to do" and then "how to do it" before finally telling the LLM to "do it" is often worth the extra time for getting it to provide a solution for complex problems.

frumiousirc··on Improved Gemini 2.5 Flash and Flash-Lite
I just asked Gemini Flash to do this. I included the instruction to use regular expressions to do the conversion to ANSI. It gave me a reasonable Python function which boils down to calling `re.sub()` for each of bold, italic and underline. For italics:

    text = re.sub(r'(\*|_)(.+?)\1', replace_italic, text, flags=re.DOTALL)
The `replace_italic` is a one line callback function surrounding the re's match with the ANSI codes.

Knowing what technique is "best" and telling the LLM to use it produces better results (on average) than giving the LLM freedom to choose. For some problems, the specification of the prompt needed to get good output becomes more work than just thinking and writing for myself.

For very complex things, I myself can not put the design into English in my own head but can "see" the correct answer as code concepts. I don't know if this is universal for all developers. If it is, it shows a limit of LLM's usefulness.

frumiousirc··on Fast Fourier Transforms Part 1: Cooley-Tukey
> I find they often use the phrase “fast Fourier transform” (or perhaps more often, the abbreviation “FFT”) when they mean “discrete Fourier transform” (or “DFT”).

Preach it, brother.

frumiousirc··on R-Zero: Self-Evolving Reasoning LLM from Zero Data
> Identifying the best pseudo-label seems like it would be the limitation of the approach.

Yes, I think this says in a different way what I'm trying to express.

In GAN, the Discriminator pegs the training to some chosen reality (assuming the "real" data set is truly real). In Challenger/Solver alone, there is no peg. The Solver could hallucinate consistently and "win" the race. It's the consistency that is the goal.

With GPT-4o as an arbiter of the Challenger/Solver training it provides the reality peg (or rather, the peg that biases toward GPT-4o's training set).

frumiousirc··on R-Zero: Self-Evolving Reasoning LLM from Zero Data
My initial thought as well. But, what is the "Discriminator" here? What grounds the training toward reality? The "Challenger" and "Solver" adversity alone can only serve to amplify hallucination.

Ahh, GPT-4o is the arbiter.

So, basically, this is a way to perform LLM model compression (GPT-4o to qwen3) while maximizing the in-distribution domain size. As such, it seems reasonable and useful.

However the reliance on an arbiter LLM makes the claim that it will overcome the problem of a lack of training data unreasonable. Once the target LLM is scaled up to reach the in-distribution domain size of the arbiter, it seems to me it will turn back into a hallucination amplifier.

frumiousirc··on Protobuffers Are Wrong (2018)
The way to do this starts with not hard-wiring the code generation step.

Instead, make codegen a function of BOTH a data schema object and a code template (eg expressed in Jinja2 template language - or ZeroMQ GSL where I first saw this approach). The codegen stage is then simply the application of the template to the data schema to produce a code artifact.

The templates are written assuming the data schema is provided following a meta-schema (eg JSON Schema for a data schema in JSON). One can develop, eg per-language templates to produce serialization code or intra-language converters between serialization forms (on wire) and application friendly forms. The extra effort to develop a template for a particular target is amortized as it will work across all data schemas that adhere to a common meta-schema.

The "codegen" stage can of course be given non "code" templates to produce, eg, reference documentation about the data schema in different formats like HTML, text, nroff/man, etc.

frumiousirc··on Lucky 13: a look at Debian trixie
Right. I'm still adjusting to the new "make it so" paradigm. Gemini gives a decent first draft for this `apt-sources` script.
← PreviousPage 5 of 12Next →