HNHacker News
TopNewBestAskShowJobs

seertaak

1,287 karma · joined March 25, 2008

Transfemme C++ programmer.
submissionscomments
seertaak··on Show HN: A physically-based GPU ray tracer written in Julia
First, let's distinguish between two types of syntactic constructs: null and left denominations. (Terminology borrowed from Pratt parsers.) Null denominations can exist on their own, left denominations can't -- they are inherently chained (eg arithmetic expressions, statements in a block, or elements of a tuple), and allow a succinct, infix notation for variable-length constructs (no lispy parentheses hell).

Second, null denominations usually introduce names -- whether for variables, types, functions, lifetimes, macros, etc. One exception to this are free-standing value expressions (a bit weird; less so when they're the last expression in a block indicating the value returned by it). Another other exception would be directive type constructs - eg directives to import names from another module, directives to give hints to the compiler, etc. The last two exceptions are the most common ones: variable assignment and function invocation.

The golden rule of good language design, as I see it, is this: null denominations must begin with a fixed and unique token. The only permissible exceptions should be for assignment and function invocation; exceptions which exist because those use-cases appear so often in a typical program that requiring a prefix would be insufferable.

Julia breaks this rule for global variables. (Fair enough, Python also commits this error, but it's a mistake and a source of bugs!) But wait, Julia also has "const" and "local" binding constructs, where it follows the golden rule -- but now your syntax isn't consistent. So now you need to keep in your head these nuances -- and know the difference between a soft and hard scope -- when you want to write a function which modifies a function using macrology.

(As a point of taste on the choice of prefix token: introduction of variables through "local" is just as weird as C++'s "auto" -- and at least Bjarne Stroustroup had an excuse for that choice. Anyone who introduces a global variable in a local scope should be punished imho, so there's no need to say "this is a local variable", it's obvious from the fact that the name is introduced inside a function. Instead, my personal preference is to introduce constants through "let", and variables through "var". The former is well-known to anyone numerate, and the latter is ubiquitous in software engineering. Both read well; they're as close as possible as you can get to constructs in English.)

Julia breaks the golden rule again with its succinct, Mathematica-style notation for function definition. I get that it wants to appeal to Mathematica users, but Python already proved you don't need to do that. This is a programming language; brainy types, like mathematicians and physicists, aren't going to be flummoxed by an unfamiliar notation for function definition, or irritated by having to type a few extra characters.

I mention macrology; it's not just that. Let's say you want write a syntax highlighter -- you need to take into account all that weirdness. If null denominations have a fixed & unique prefix, parsing is easy-peasy. Want to add a capability to "inline" HTML code within Julia, react-style? You're going to run into similar issues. And so on...

seertaak··on Show HN: A physically-based GPU ray tracer written in Julia
Just to clarify the above:

1. I use the term "performance" slightly vaguely. It's comprised of two distinct things: the time it takes to compile the code, and the execution time. The issue is the compilation time: there are certain cases where it's exponential in the number of types which could unify with the callsite's type params.

2. IIRC, Julia compiler has heuristics to ensure things don't explode for common cases. If I'm not mistaken, not only do compile times explode, but certain (very common) things don't even typecheck. There's an excellent video about it by the designer of the language, Jeff Bezanson -- https://www.youtube.com/watch?v=TPuJsgyu87U . Note: Julia experts, please correct me if this has been fixed.

3. The difficulty in intuiting which combinations of types will unify at a given callsite isn't theoretical; there are reports of libraries which unexpectedly fail to work together. I want to qualify this statement: Julia is light years ahead of any language lacking multimethods when it comes to library composability. But my guess is that those problems would be reduced with non-symmetric multimethods.

4. The non-symmetric multimethod system I'm "proposing" isn't my idea. They are referred to variously as encapsulated or parasitic multimethods. See http://lucacardelli.name/Papers/Binary.pdf

I have huge respect for Jeff Bezanson, for the record!

seertaak··on Show HN: A physically-based GPU ray tracer written in Julia
That's part of the answer, but there's a bit more to it IMO.

The syntax is a bit weird; python, swift, rust, and zig feel more parsimonious.

I absolutely love multimethods, but I think the language would have been better served by non-symmetric multimethods (rather than the symmetric multimethods which are used). The reason is that symmetric multimethods require a PHD-level compiler implementation. That, in turn, means a developer can't easily picture what the compiler is doing in any given situation. By contrast, had the language designers used asymmetric multimethods (where argument position affects type checking), compilation becomes trivial -- in particular, easily allowing separate compilation. You already know how: it's the draw shapes trick i.e., double-dispatch. So in this case, it's trivial to keep what compiler is "doing" in your head. (Of course, the compiler is free to use clever tricks, such as dispatch tables, to speed things up.)

The aforementioned interacts sensitively with JIT compilation, with the net outcome that it's reportedly difficult to predict the performance of a snippet of Julia code.

seertaak··on The only moat left is money?
Interesting article! FYI I clicked on joinkith.com and got: "Application error: a server-side exception has occurred while loading joinkith.com (see the server logs for more information)."
seertaak··on Trump says Venezuela’s Maduro captured after strikes
This is going to make the US look less predictable to adversaries, and that's, on balance, perhaps not such a bad thing.

It will be interesting to observe how the aftermath unfolds. If the US succeeds in installing a gov't which gains some level of legitimacy, perhaps by stoking the economy, then this will be a significant win for the US. If not, it will be a strong "the US is the newish sick man" signal.

That said, it's one thing to pull this in Venezuela, another thing to annex Greenland.

seertaak··on The Tor Project is switching to Rust
First, wine was widely panned for years before it stopped sucking.

Second, you're simply ignoring that parent poster mentioned Ladybird, a non-rust project which is advancing much more speedily than servo. And I think they have a valid point -- and while the jury is still out, it's possible that in other rust-centric efforts which have experienced foot-dragging (eg WASI), the root cause may be rust itself.

Parent poster expressed their point somewhat sarcastically, but if I (C++/python dev, I admit!) were a betting transfem, my money would be on them being right.

That said, I think the Tor project got this decision right. This is as close to an ideal use-case for rust as you can get. Also, the project is mature, which will mitigate rewrite risk. The domain is one where rust can truly shine -- and it's a critical one to get right.

seertaak··on The choice between Rust and C-derived languages is not only about memory safety
C != C-derived languages

In C++ this was possible already in C++03.

OTOH, it wasn't until recently that you were able to write something like `std::array<T, N>` in rust. Even now, there are restrictions on the kinds of expressions that N can be.

Just pointing out that this cuts both ways.

seertaak··on Who Invented Backpropagation?
Rumelhart et al wrote "Parallel Distributed Processing"; there's a chapter where he proves that the backprop algorithm maximizes "harmony", which is simply a different formulation of error minimization.

I remember reading this book enthusiastically back in the mid 90s. I don't recall struggling with the proof, it was fairly straightforward. (I was in senior high school year at the time.)

seertaak··on C++ Library
Excellent write-up! Many thanks for your effort.

IIUC, the iterators stuff basically makes the task of creating iterator adaptors easier. Note that boost already provides similar facilities in the STLInterfaces library:

https://www.boost.org/doc/libs/latest/doc/html/stl_interface...

Note also that Joaquín López Muñoz has created a very interesting range iterator library which is based on push semantics. These have better performance, which is is intuitively reasonable (for me at least).

https://github.com/joaquintides/transrangers

Haven't had a chance to play around with them yet, but they look pretty cool.

seertaak··on Does RL Incentivize Reasoning in LLMs Beyond the Base Model?
The authors of the paper address this argument in the QA section.
seertaak··on I analyzed chord progressions in 680k songs
Anyway a 2-5-1 is the rotation of a diatonic substitution of a 1-4-5 (2 for 4). Only one note difference between those two chord changes.
seertaak··on I analyzed chord progressions in 680k songs
Agree completely. I assume OP means major or minor 7th chord - they can't possibly mean dominant 7th, because...does there even exist a single blues song which doesn't have that chord?

And let's say you take maj7 chords - "you and me song", "you are so beautiful", "sing sang sung", "1975" - just off the top of my head. Pretty much any pop song which is melancholic sounding.

For min7, choose virtually any Santana song.

Even if you said maj9 or min9 it still wouldn't be remotely true. Otoh 13th chords....I think you'd have to reach to find a non-jazz occurrence of that chord. And it happens in jazz all the time.

seertaak··on Darwin's children drew all over the “On the Origin of Species” manuscript (2014)
One of the drawings had the inscription 'I am a wild beast' -- that's 5-7 year old territory. Ofc it's possible that I'm missing some cultural nuance, but the picture is consistent with precocious-little-kid-with-visceral-imagination. He must have been a joy to parent!
seertaak··on Germany creates 'super–high-tech ministry' for research, technology, aerospace
Interesting comment, but Germany's much-vaunted Mittelstand is in its initial death throes. Key industries and IP are being auctioned off to the highest bidder, not the least, for lack of heirs. It isn't universally acknowledged, but the same processes that caused the US's manufacturing decay have been occurring in Germany; at roughly the same speed, but with a 30 year lag (since Agenda 2010) viz-a-vis the US.
seertaak··on Glamorous Toolkit
I see what you're saying, but looking at the video, which shows playgrounds and notes, I'm quite excited to try this because it looks a lot like jupyterlab. Jupyterlab is familiar to any data scientist, but while it's easy to use, it's quite awkward to extend due to the latter being based on a plugin system (understandably) based on typescript.

Here it's all one system, and thinking of the image as a key-value store feels quite natural too. Finally, the UI with panes that go right also feels natural and looks quite slick. I wonder if it's easy to switch between languages? Like can the key-value store pass data to a python program, or use an Apache arrow table?

seertaak··on I genuinely don't understand why some people are still bullish about LLMs
I totally agree, and this community far is from the worst. In trans communities there's incredible hostility towards LLMs - even local ones. "You're ripping off artists", "A pissing contest for tech bros", etc.

I'm trans, and I don't disagree that this technology has aspects that are problematic. But for me at least, LLMs have been a massive equalizer in the context of a highly contentious divorce where the reality is that my lawyer will not move a finger to defend me. And he's lawyer #5 - the others were some combination of worse, less empathetic, and more expensive. I have to follow up a query several times to get a minimally helpful answer - it feels like constant friction.

ChatGPT was a total game-changer for me. I told it my ex was using our children to create pressure - feeding it snippets of chat transcripts. ChatGPT suggested this might be indicative of coercive control abuse. It sounded very relevant (my ex even admitted in a rare, candid moment that she feels a need to control everyone around her one time), so I googled the term - essentially all the components were there except physical violence (with two notable exceptions).

Once I figured that out, I asked it to tell me about laws related to controlling relationships - and it suggested laws either directly addressing (in the UK and Australia), and the closest laws in Germany (Nötigung, Nachstellung, violations of dignity, etc., translating them to English - my best language). Once you name specific laws broken and provide a rationale for why there's a Tatbestand (ie the criterion for a violation is fulfilled), your lawyer has no option but to take you more seriously. Otherwise he could face a malpractice suit.

Sadly, even after naming specific law violations and pointing to email and chat evidence, my lawyer persists in dragging his feet - so much so that the last legal letter he sent wasn't drafted by him - it was ChatGPT. I told my lawyer: read, correct, and send to X. All he did was to delete a paragraph and alter one or two words. And the letter worked.

Without ChatGPT, I would be even more helpless and screwed than I am. It's far from clear I will get justice in a German court, but at least ChatGPT gives me hope, a legal strategy. Lastly - and this is a godsend for a victim of coercive control - it doesn't degrade you. Lawyers do. It completely changed the dynamics of my divorce (4 years - still no end in sight, lost my custody rights, then visitation rights, was subjected to confrontational and gaslighting tactics by around a dozen social workers - my ex is a social worker -, and then I literally lost my hair: telogen effluvium, tinea capitis, alopecia areata... if it's stress-related, I've had it), it gave me confidence when confronting my father and brother about their family violence.

It's been the ONLY reliable help, frankly, so much so I'm crying as I write this. For minorities that face discrimination, ChatGPT is literally a lifeline - and that's more true the more vulnerable you are.

seertaak··on Sparrow, a modern C++ implementation of the Apache Arrow columnar format
I had a go at this, and think my attempt is more idiomatic C++:

https://github.com/seertaak/xbow/blob/main/examples/table_ex...

https://github.com/seertaak/xbow/blob/main/examples/print_sc...

Handles nested structures iirc. It's been a while...

seertaak··on Behind Germany's political turmoil, a stagnating economy
This is true. In addition, the "good German bureaucracy" is a farce, run by paper (and fax!), with opaque, antiquated rules, expressed in impenetrable _Beamtendeutsch_ -- which expats need to hire professional help to navigate. Add to this that the house rental market in Berlin is now worse than London, and that German universities continue their decades-long slide towards oblivion.

The UK is certainly not free of problems, but I count my lucky stars that I applied for the EU settlement scheme back in 2019 -- I'm now back in the UK, because better jobs, better healthcare, better social services, better restaurants, better transport system, better airports, better _everything_.

And I say this as a transgender woman living in what trans people call "TERF island". I'm at pains to remind my English sisters that TERFs abound in Germany, too.

seertaak··on Structured Outputs with Ollama
That makes sense. Thanks
seertaak··on Protecting undersea internet cables is a tech nightmare
I guess if undersea cable sabotages were to increase, you would want to be long Starlink. I suppose that's not immune to sabotage either, but you need a rocket programme to do it.
seertaak··on Structured Outputs with Ollama
Could someone explain how this is implemented? I saw on Meta's Llama page that the model has intrinsic support for structured output. My 30k ft mental model of LLM is as a text completer, so it's not clear to me how this is accomplished.

Are llama.cpp and ollama leveraging llama's intrinsic structured output capability, or is this something else bolted ex-post on the output? (And if the former, how is the capability guaranteed across other models?)

seertaak··on Microsoft's new Outlook client moves your email to the cloud (2023)
For me, copying to the cloud is a deal-breaker (I switched to proton mail for a reason!). Fortunately, there's Thunderbird. I don't trust Microsoft not to do dodgy Google-like things with my data at this point.
seertaak··on OpenAI as we knew it is dead
From my perspective: another global & critical technology/business with an LGBTQIA+ person in charge -- there are worse things that can happen.
seertaak··on Personality trait recognition using ECG spectrograms and deep learning
Interesting comment. I'm not an expert in CNNs but what you're saying makes a lot of sense.

Question: are you saying the final layer is "in effect" a linear combination? At least in transformer architectures, the dense end block is iirc three layers deep and uses relu. Even if the CNN's dense final part is one layer deep, wouldn't it also be using relu activations?

Even a one layer dense ANN can capture nonlinearities if it has a nonlinear activation fn. But maybe in practice the activations don't do a lot of work? Or am I simply mistaken about final layer, does it simply have linear activations?

Also, can you share your intuition about the nonlinear features? Spectral/wavelet analysis? Or something more complex?

seertaak··on Personality trait recognition using ECG spectrograms and deep learning
There's definitely xor type nonlinearities going on in factor models of personality types. The interaction between two factors is often very different at the extrema of each factor - often flipping sign.

Regression models can't capture that. Now it's possible that the behavioral nonlinearities are somehow emergent, and that despite those, the ECG can be captured by a linear model. But I wouldn't want to bet on that.

seertaak··on Dart 3.3
It seems every language starts with free functions and classes (even mojo). They then realize that isn't so great: third parties are at a syntactic disadvantage (no dot fn's). And then, the language designers "fix" the problem with extension methods. Now you have three different function kinds, and we haven't even broached async.

Why not have only structs, free functions, and UFCS?

seertaak··on Mir: Strongly typed IR to implement fast and lightweight interpreters and JITs
> great to see an SSA pipeline, but that implies that this jit is not ideal for baseline jiting.

I'd be interested in knowing the reason -- it's not clear to me tbh.

seertaak··on Ask HN: Is GPT 4's quality lately worst than GPT 3.5?
> policing language with no point

The point is to avoid a situation where a (usually cis) person inadvertently invalidates a trans person's gender identity.

> This kinda stuff hurts your cause

So iiuc, what you're saying is, asking to use language that respects someone's gender identity hurts the cause of respecting people's gender identity.

seertaak··on Ask HN: Is GPT 4's quality lately worst than GPT 3.5?
I would drop it where an interlocutor is specifically referenced. So 'oh man' is ok. But c'mon man usually expresses disagreement with a specific person. So while I would certainly say c'mon man to a trans or cis masc (which, if I had any shadow of a doubt, I would determine by querying their pronouns, after sharing mine so as not to inadvertently put them on the spot), I would definitely not say it to a trans or cis fem, and also not to an enby.

Someone's life obviously takes priority over gender sensitivity :)

Again, I realize it's a bit of (cognitive) work, and takes some getting used to. But this is hacker news - a certain intellectual pedigree is assumed.

seertaak··on Ask HN: Is GPT 4's quality lately worst than GPT 3.5?
Heya, I really appreciate you actually listening to what I said, instead of splitting hairs and arguing with me! Empathy is such a lovely quality.

To answer your question, I would (did, hihi) drop the 'man'. If you want to remain 'folksy', you could say 'my friend, ...'.

Finally, I agree that it was used endearingly - that's why my comment was pretty milquetoast :)

I recognize I'm asking you to do something 'extra'. I really appreciate it!

← PreviousPage 2 of 13Next →