HN user

epidemian

1,244 karma

https://demian.ferrei.ro

Posts3
Comments389
View on HN

Do you think an LLM would be able to generate a solution to a novel problem just like that?

That doesn't match my (albeit limited) experience with these things. They are pretty good at other things, but generally squarely in the real of "already done" things.

Five years ago, we could've read this same comment but with "LLMs" replaced with "blockchain" or "crypto".

Yes, it might totally be the case that in 5 years this comment reads as correctly predicting the future that is to come. But it's also possible that it doesn't.

It's not at all clear to me which things will persist in time at the moment they are getting popular. There are lots of technologies that look promising in the beginning and up fizzling out.

Browsers are useful now, and they have been useful for a while. It seems to me like a safer bet to invest on them still doing what they are useful at, in the case that the web keeps being a thing for a while still :)

Just use a button 9 months ago

oh, 100% yes! The job project i joined somewhat recently is a moderately-complex React web app, and none of the navigation elements are actual links. Everything is done by onClick handling, even thought many things are, conceptually, just links. I have no idea why this kind of thing is so widespread on the web front-end world.

You need to kneel to the borrow-checker and develop something like a Stockholm syndrome before you find the language delicious.

That was not my experience at all. I liked the language from the get-go. And the more i dug into it, the more i found to like. I really appreciated the design of Rust's iterators, and traits, and general language design, way before i stumbled into any major issues with the borrow checker.

I feel like this depends very much on the programming style and probably on the domain. But i found that programming in a mostly "functions and simple data structures" way, passing things down to other functions that need them, and just processing data instead of "modeling the domain" into mutable and confusing "objects", i didn't really come across many lifetime-related issues that the borrow checker warns about.

And the few that i did found, they were actually errors on my part, and Rust detecting them was quite helpful. Things like trying to mutate a collection while also iterating it.

So, IDK, YMMV i guess.

What inspired you to build this, I'd love to hear the story behind this.

Actually, i don't remember! Sorry, it's been a while (a decade, it seems... oh well)

This is probably my mind retro-creating a story, but i think this started with me wondering about how the Braille system worked. Like, did each Braille symbol map to a single letter, or to a whole syllable, or even a concept? Or, were more than one Braille symbol needed for some letters, like Morse?

Turns out each Braille symbol fits within a 2x4 grid of points. That's 2 possible states (point is on or off) for each of those 8 points. So 2^8 = 256 possible values. That's a byte! And luckily, Unicode encodes all those 256 possible values, and maps them to codepoints in a very systematic way.

So obviously, i started to wonder what kind of things could be represented on these Braille grids. The snake game was a natural fit, and a fun programming experience. But i also considered other things, like a horizontal Tetris. Or a Game of Life rendered on the URL, which i actually implemented(1), but i didn't find as entertaining as snake, because the 4-tile height restriction impeded any interesting patterns, like gliders (even with wrap-around logic). I think i even made some brute-force searching for horizontal or diagonal gliders trying out different born/survive rules(2), but couldn't find any interesting patterns, other than still life, blinkers, and some "moving walls" kind of things.

Anyways, that's for the Braille part. The idea of using the address bar to render the game, i have no idea where that came from TBH. Maybe i stole the idea from some other animated or pretty thing on URLs? I wish i remembered.

(1): https://github.com/epidemian/URLife

(2): See https://en.wikipedia.org/wiki/Life-like_cellular_automaton. The Game of Life rabbit hole goes deep.

Yeah, sorry for that. The game actually used to work decently well on mobile browsers.

If you're brave enough to try on a mobile device, there's a way to see the current URL without escaping on the page: clicking on that "?". The mobile controls are clunky, but you'll be rewarded with the ability to share your highscores with friends! :P

The source code is not minified or anything, ctrl+u is your friend :)

IDK about the AI claim tho. The game has been there for like 10 years, so it's probably in the training data of these things. The bots might be able to replicate it, but they surely won't be able to enjoy it! (for now at least)

Yes, i thought of doing that. The problem is that, while it would definitely help on the early game, it would also mess things badly on the late game. As you snake grows, it'll take more and more space on the grid, and you'll start seeing more and more janky whitespace-replacement characters.

The game gets faster as you progress, so it's definitely not a good idea to make it jankyer when you're try-harding it :P

I'd love to know of a way of "fixing" this jankyness issue properly. Without admitting defeat and rendering to some other text-admitting output, like the page <title>, as this oher snake game that was recently posted on Reddit does: https://old.reddit.com/r/webdev/comments/1n9z77e/snake_in_th...

But, for now, if you're actually trying to get a high score, i think the best approach is rendering the URL on page, by clicking on the "?"

Wow! It's such a surprise to see this old project of mine here on HN front page!

I must say, if you're experiencing any issues playing this, it's probably because it was designed to be played on the browsers of 10 years ago hehe. Here's how the game used to look and play in its former days of glory: https://github.com/epidemian/snake/blob/master/gameplay.gif?...

Since then, browsers have made some so-called "security" "improvements" that heavily hindered the capabilities of addressbar-based videogames. You can see traces of this on the game source code, and on the commit history.

At some point, pushing things to `history.replaceState()` got super rate-limited on Chrome, to something like tens of updates per minute IIRC, which totally wrecked the playing experience. I think i got around this by falling back to using `location.hash` directly. I think Chrome later rose this throttling to something more sensible. IDK if enough to play Crysis at 60fps on the addressbar, but enough for a snake game. And if not, sorry for messing up your Back button!

The worst of these security-excused changes was Firefox and Chrome starting to escape all whitespace characters (and others) on URLs. The game uses Braille characters to "render" its grid world, and blank Braille characters are abundant, especially on the early game. I think i made some comments on the browsers' issue trackers, and even received some sympathy from the developers (or maybe this was on the throttling of history, i don't remember). But of course, and as usual, "security" trumps over fun.

I ended up trying to counteract this URL escaping mechanisms with some horrible, really really horrible, indefensible, shameful, canvas-based font-measuring hack to replace blank Braille characters with some other character that doesn't get escaped and is more or less the same width, and as blank as possible. See https://github.com/epidemian/snake/blob/e9d5591a613afabc7e11.... If you have any idea of how to do this in a less soul-damning way, please let me know!

I think the game never worked properly on Safari. I know the browser used to hide the URL fragment, or maybe everything other than the domain name. I've no idea what it does now; does it even allow users to visit random webpages or does it mandate a separate app for everything? /s

In case my pile of hacks fails thoroughly, i resignedly added a way of showing the intended URL on the actual page content, by clicking on the "?"

Anyways, i should probably write a blog post about this little silly thing. Thanks for playing! :)

If you define a hallucination as something that wasn't in the training data, directly or indirectly (indirectly being something like an "obvious" abstract concept), then [...]

Ok, sure. But why would you choose to define hallucinations in a way that is contrary to common sense and the normal understanding of what an AI hallucination is?

The common definition of hallucinations is basically: when AI makes shit up and presents it as fact. (And the more technical definition also basically aligns with that.)

No one would say that if the AI takes the data you provide in the prompt and can deduce a correct answer for that specific data —something that is not directly or indirectly present in its training data— it would be hallucinating. In fact that would be an expected thing for an intelligent system to do.

It seems to me you're trying to discuss with something nobody said. You're making it seem that saying "it's bad that LLMs can invent wrong/misleading information like this and present it as fact, and that the companies that deploy them don't seem to care" is equivalent to "i want LLMs to be perfect and have no bugs whatsoever", and then discuss about how ridiculous is to state the latter.

You have to focus on the actual products and services which you provide and do a good job at it, not chase after any and every person with an opinion.

But, this story (and the GP comment) is not talking about "any person with an opinion". It's talking about actual ChatGPT users. People who've used ChatGPT as a service, and got false information from it. Even if they were free-tier users (do we even know that?), i think it makes sense for them to have some expectations about the service working somewhat correctly.

And in the concrete case of these LLM chat services, many people do get the impression that the responses they give must be correct, because of how deceptively sure and authoritative they sound, even when inventing pure BS.

Requiring perfection would either mean guardrails that would make it useless for most cases, or no LLM access until AGI exists

What?? What does AGI have to do with this? (If this was some kind of hyperbolic joke, sorry, i didn't get it.)

But, more importantly, the GP only said that in a sane world, the ChatGPT creators should be the ones trying to fix this mistake on ChatGPT. After all, it's obviously a mistake on ChatGPT's part, right?

That was the main point of the GP post. It was not about "requiring perfection" or something like that. So please let's not attack a straw man.

This a thread about imagining a world without ads. If we're trying to envision that, it surely is not too hard to imagine how such a useful service for society as a search engine could be funded by other means, right?

There are many many examples of useful services (both private and public) in our own world that manage to exist without the need to get plastered by obnoxious ads.

And, just to expand a bit on this, what i find puzzling about the stance of "how will you find out about stuff without ads" is that it goes totally contrary to my contemporary experience.

Nowadays, when i want to find out about something, i don't just query Google about it, i usually make sure to add "site:reddit.com" to that query, precisely to avoid getting swamped by unuseful ads on the search results and instead have a change at getting to actual data from actual people. In this sense, ads are not only not useful for finding out about the stuff i want: they are actually hampering my ability to do so.

Those are indeed very useful things.

It's true that people often spend their money on frivolous or unnecessary things. But sometimes people pay for useful things too!

Yes, i remember. I remember Google the search engine being a thing before it became an ad-ridden space.

Search engines are useful things. They can still exist on a world without ads.

I really can't believe that someone who frequents Hacker News can ask this question.

If by any chance this is a legit question, i feel the answer would be too obvious: asking people, googling, going to a store you think could sell the thing you want, etc. There are many many pretty obvious ways of finding out about stuff, without needing to have a corporation "reach out" to me and shove their shit everywhere in the form of ads.

Not really, or at least i don't see how. Advertising can at most tell me which companies are spending a significant portion of their budget in ads instead of in making a good product or service.

To put it another way: where i live, ads for cheese or meat are non existent (while ads for fast food or cigarettes are very common), and yet i know that those products are available on supermarkets or other food stores. And i can find cheeses and meats of many brands, qualities and prices on those stores.

I don't see how having ads for those things would be an improvement. In fact, i suspect that ads would be used to convince people to buy products of less quality, or downright toxic, as seen on the rampant fast food and cigarette ads.

Also, I highly recommend getting into the habit of running `cargo clippy` regularly.

You can also have that hooked up to the editor, just like `cargo check` errors. I find this to be quite useful, because i hace a hard time getting into habits, especially for thing that i'm not forced to do in some way. It's important that those Clippy lints are shown as soft warnings instead of hard errors though, as otherwise they'd be too distracting at times.

I didn't get that impression at all. The first paragraph includes the sentence:

I want to use this post to explore these differences, to identify the benefits and limitations of both models, and to present my thinking on the future of Typst’s layout engine.

Which immediately made me think the author of the post was involved in Typst development.

  Location: Bariloche, Argentina (GMT-3)
  Remote: Yes (English, native Spanish)
  Willing to relocate: No
  Technologies: JavaScript, TypeScript, HTML, CSS, React, Ruby, Ruby on Rails, node.js, Rust, PostgreSQL, Rest API, GraphQL, Docker, Python, Java.
  Résumé/CV: https://demian.ferrei.ro/resume
  Email: in CV, or username at gmail dot com
Hi, I'm Demian, a software developer with 15 years of professional experience, most recently working on web applications, backend services, and on technical leadership roles. I love programming, care about detail, and like to write software that people can enjoy using :)
1/0 = 0 (2018) 2 years ago

It's equal (as in, comparing them with == is true), but they are not the same value. At least in IEEE 754 floats, which is what most languages with floating point numbers use. E.g., in JS:

  > 1 / 0
  Infinity
  > 1 / -0
  -Infinity
  > 0 === -0
  true
  > Object.is(0, -0)
  false

Yeah, i agree that, on principle, generative AI should be a good got for these kinds of things. But, the results are... idk, uncanny. At least to me.

For example, if you were to ask a human artist to draw this image with two crabs, and this artist didn't know how many legs crabs have, what would they do? I think they'd probably google how many legs crabs have, and how they look in general, and at the very least draw two crabs with the same amount of legs.

But these generative models don't know how many legs crabs have, and they are not clever enough to ask, or even count it seems. So you end up with results like these. The main crab has 8 legs (6 + 2 claws), while the little one seemingly has 10 (or at least it has 5 on one side), and it's also missing an eye for some reason.

A human artist can also make mistakes, for sure. But i don't think these kind of mistakes would be expected from an artist.

And i agree with the other commenters that said this reflects poorly on the author of the book. Didn't they care to check the cover for obvious mistakes? Attention to detail is a very important trait on a technical writer.

For example, if I tell you that I can visualize more than 3 dimensions, then how could you verify or disprove that?

I don't really know. The first thing that came to my mind would be to ask to draw/model different cross-sections of a 4D object ("cross-volumes"?).

We can visualize 3D objects, and therefore can draw 2D cross-sections of 3D objects relatively well, and relatively easily. Like, sections of a human body, or a house. So, maybe someone who can visualize 4D objects in their head could also model 3D "cross-sections" of that object at arbitrary "cuts". And we could check if those 3D radiographies are accurate, because we can model those 4D objects on a computer, and draw their 3D cuts.

Just a simple idea. I'm sure there could be other ways of probing this.