frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

The unreasonable effectiveness of fuzzing for porting programs

https://rjp.io/blog/2025-06-17-unreasonable-effectiveness-of-fuzzing
142•Bogdanp•6h ago•32 comments

Show HN: Workout.cool – Open-source fitness coaching platform

https://github.com/Snouzy/workout-cool
495•surgomat•10h ago•161 comments

My iPhone 8 Refuses to Die: Now It's a Solar-Powered Vision OCR Server

https://terminalbytes.com/iphone-8-solar-powered-vision-ocr-server/
153•hemant6488•6h ago•52 comments

Writing documentation for AI: best practices

https://docs.kapa.ai/improving/writing-best-practices
108•mooreds•6h ago•31 comments

Poline – An enigmatic color palette generator using polar coordinates

https://meodai.github.io/poline/
172•zdw•3d ago•36 comments

Homomorphically Encrypting CRDTs

https://jakelazaroff.com/words/homomorphically-encrypted-crdts/
177•jakelazaroff•9h ago•54 comments

Show HN: I built a tensor library from scratch in C++/CUDA

https://github.com/nirw4nna/dsc
78•nirw4nna•7h ago•17 comments

Game Hacking – Valve Anti-Cheat (VAC)

https://codeneverdies.github.io/posts/gh-2/
73•LorenDB•5h ago•66 comments

The Matrix (1999) Filming Locations – Shot-for-Shot – Sydney, Australia [video]

https://www.youtube.com/watch?v=UVf7rMqnwI0
19•keepamovin•2d ago•16 comments

Terpstra Keyboard

http://terpstrakeyboard.com/web-app/keys.htm
199•xeonmc•12h ago•69 comments

Introduction to the A* Algorithm (2014)

https://www.redblobgames.com/pathfinding/a-star/introduction.html
219•auraham•1d ago•84 comments

MiniMax-M1 open-weight, large-scale hybrid-attention reasoning model

https://github.com/MiniMax-AI/MiniMax-M1
310•danboarder•15h ago•68 comments

Is there a half-life for the success rates of AI agents?

https://www.tobyord.com/writing/half-life
185•EvgeniyZh•11h ago•101 comments

Yes I Will Read Ulysses Yes

https://www.theatlantic.com/magazine/archive/2025/07/zachary-leader-richard-ellmann-james-joyce-review/682907/
50•petethomas•5h ago•62 comments

Revisiting Minsky's Society of Mind in 2025

https://suthakamal.substack.com/p/revisiting-minskys-society-of-mind
59•suthakamal•6h ago•19 comments

Scrappy – Make little apps for you and your friends

https://pontus.granstrom.me/scrappy/
399•8organicbits•17h ago•130 comments

Attimet (YC F24) – Quant Trading Research Lab – Is Hiring Founding Engineer

https://www.ycombinator.com/companies/attimet/jobs/b1w9pjE-founding-engineer
1•kbanothu•5h ago

Framework Laptop 12 review

https://arstechnica.com/gadgets/2025/06/framework-laptop-12-review-im-excited-to-see-what-the-2nd-generation-looks-like/
187•moelf•7h ago•236 comments

Locally hosting an internet-connected server

https://mjg59.dreamwidth.org/72095.html
145•pabs3•17h ago•138 comments

After millions of years, why are carnivorous plants still so small?

https://www.smithsonianmag.com/articles/carnivorous-plants-have-been-trapping-animals-for-millions-of-years-so-why-have-they-never-grown-larger-180986708/
188•gmays•5d ago•86 comments

I counted all of the yurts in Mongolia using machine learning

https://monroeclinton.com/counting-all-yurts-in-mongolia/
210•furkansahin•14h ago•81 comments

A different take on S-expressions

https://gist.github.com/tearflake/569db7fdc8b363b7d320ebfeef8ab503
44•tearflake•3d ago•33 comments

The Grug Brained Developer (2022)

https://grugbrain.dev/
1005•smartmic•1d ago•493 comments

PWM flicker: Invisible light that's harming our health?

https://caseorganic.medium.com/the-invisible-light-thats-harming-our-health-and-how-we-can-light-things-better-d3916de90521
49•SLHamlet•5h ago•56 comments

Websites Are Tracking You via Browser Fingerprinting

https://engineering.tamu.edu/news/2025/06/websites-are-tracking-you-via-browser-fingerprinting.html
3•gnabgib•1h ago•1 comments

Should we design for iffy internet?

https://bytes.zone/posts/should-we-design-for-iffy-internet/
48•surprisetalk•2d ago•32 comments

Show HN: Trieve CLI – Terminal-based LLM agent loop with search tool for PDFs

https://github.com/devflowinc/trieve/tree/main/clients/cli
22•skeptrune•8h ago•8 comments

Building agents using streaming SQL queries

https://www.morling.dev/blog/this-ai-agent-should-have-been-sql-query/
84•rmoff•6h ago•7 comments

Real-time action chunking with large models

https://www.pi.website/research/real_time_chunking
65•pr337h4m•1d ago•7 comments

Spherical CNNs (2018)

https://arxiv.org/abs/1801.10130
12•rkp8000•2d ago•2 comments
Open in hackernews

A different take on S-expressions

https://gist.github.com/tearflake/569db7fdc8b363b7d320ebfeef8ab503
44•tearflake•3d ago

Comments

phoe-krk•5h ago
Lisp programmer here.

Traditional S-expressions, by their definition, ignore most of whitespace; additionally, reading sexprs is always a linear operation without the need to backtrack by more than one character.

The suggestion from this post violates both assumptions by introducing a 2D structure to code. To quote this post's examples, it requires the multiline string in

    (fst-atom """   trd-atom)
              00001
              00002
              00003
                """
to be fully read before TRD-ATOM. It also forces the reading function to jump up and down vertically in order to read the structure in

    * (                               )  
    *   e (           ) (           )    
    *   q   m (     )     p (     )     *
            u   a a       o   a 2       *
            l             w             *
The author also states that

    (eq (mul (a a)) (pow (a 2)))
is less readable than

    * (                                                  )  
    *   *eq* (                   ) (                   )    
    *          *mul* (         )     *pow* (         )     *
                       *a* *a*               *a* *2*       *
                                                           *
Then there's the ending passage:

> we hope that the introduced complexity is justified by the data readability expressed this way.

I cannot force myself to read this post as anything but a very poor Befungesque joke.

tgv•5h ago
A normal tree would be easier to read

            eq
       mul      pow
     a    a    a   2
derriz•1h ago
Turned 90, maybe?

  eq:
    mul:
      a
      a 
    pow:
      a
      2
hyperhello•1h ago
x*x == pow(x,2)
derriz•1h ago
We have a winner!

Actually, I'd suggest a slight improvement: x*x = x^2

unstruktured•4h ago
Thanks for restoring my sanity. Was quite confused of the value added by the author.
tearflake•1h ago
Sorry for the confusion. I must be a very disturbed person because I kind of like what is explained there.
velcrovan•4h ago
It gets worse/better. Since Racket allows you to hook your own reader in front of (or in place of) the default reader, you can have things like 2D syntax:

    #lang 2d racket
    (require 2d/match)
     
    (define (subtype? a b)
      #2dmatch
      ╔══════════╦══════════╦═══════╦══════════╗
      ║   a  b   ║ 'Integer ║ 'Real ║ 'Complex ║
      ╠══════════╬══════════╩═══════╩══════════╣
      ║ 'Integer ║             #t              ║
      ╠══════════╬══════════╗                  ║
      ║ 'Real    ║          ║                  ║
      ╠══════════╣          ╚═══════╗          ║
      ║ 'Complex ║        #f        ║          ║
      ╚══════════╩══════════════════╩══════════╝)
https://docs.racket-lang.org/2d/index.html
f1shy•3h ago
Yes that part must be a joke!

I’ve seen dozens of attempts to make S-Exp “better” even the original M-Exp. I also did some experiments myself. But at the end, I come back to goo’ol s-exp. Seems to be a maximum (or minimum) found just perchance.

tearflake•1h ago
Here is another example, an axiom from propositional logic:

    (impl (impl p (impl q r)) (impl (impl p q) (impl p r)))
which, vertically indented in a transposed block, looks like this:

    * (                                               )
    *   i (               ) (                       )
    *   m   i p (       )     i (       ) (       )
        p   m     i q r       m   i p q     i p r
        l   p     m           p   m         m           *
            l     p           l   p         p           *
                  l               l         l           *
which, using transposed lines within the transposed block, finally looks like this:

    * (                                                                                           )
    *   *impl* (                               ) (                                              )   *
    *            *impl* *p* (                )     *impl* (                ) (                )     *
                              *impl* *q* *r*                *impl* *p* *q*     *impl* *p* *r*       *
This time I won't make any judgements. Could be good, could be bad, you decide.
exeldapp•18m ago
Not sure if that example helps. You can make any programming language hard to read without some basic formatting. The way I would write the sexpr would be:

  (impl
    (impl 
       p 
       (impl q r))
    (impl
       (impl p q)
       (impl p r)))
It's clear when each section begins and ends and doesn't require complex parsing rules.
stray•5h ago
For very large values of "somewhat peculiar"...
tearflake•1h ago
Changed the "somewhat" to "very" in the document, thank you.
TOGoS•4h ago
This is fine and interesting, but what I think is lacking in S-expression isn't funky vertical syntax, but a way to directly represent objects that are not lists. Otherwise one needs to invent some representation on top of S-expressions (and then a list isn't necessarily a list anymore; everything goes through an additional layer of encoding/decoding, losing the elegance of S-expressions), or use some extension syntax (usually involving '#'), which varies from language to language and might not even be interpreted by the reader (but logically expand to some list expression that needs to be interpreted again later, so you're not really any better off than with the first approach).

I kind of want something like, to borrow JSON-like syntax and gloss over namespacing issues:

  (foo .
    {type: listy-cons-cell
     head: bar
     tail: (baz quux)})
...which would be another way to say (foo bar baz quuz), but would make it possible to represent any data structure you like at the same level as atoms, strings, and lists.
drob518•4h ago
See Clojure’s reader syntax: https://www.clojure.org/reference/reader

You can have vectors, hash maps, and sets in addition to lists, symbols, and keywords.

kgwxd•3h ago
I don't get why anyone even tries after Clojure. They got it 100% right. It's easier to read than anything else, and still super simple to parse. Commas are whitespace, use them or don't, where ever you want. Namespaced keywords are great. The data structures themselves act as functions. It's just... done.
sparkie•2h ago
Kernel has first-class environments which aren't just lists, but can be constructed from lists. Environments are encapsulated, so we can't simply peek into them with car and cdr - we can only obtain the value associated with a given symbol by evaluating the symbol in that environment.

    ($define! foo
        ($bindings->environment
            (bar "Hello World")
            (baz 1234)
            (qux #f)))
            
    ($remote-eval bar foo)          ==> "Hello World"

    foo                             ==> #[environment]
We could perhaps make something a bit more friendly. Lets create an encapsulated `struct` type which could give us the contents as a plain list, or let us look up each field:

    ($provide! ($struct struct? destruct $get)
            
        ($define! (struct-intro struct? struct-elim) 
            (make-encapsulation-type))
                
        ($define! destruct
            ($lambda (struct)
                (cdr (struct-elim struct))))
    
        ($define! $get
            ($vau (struct member) e
                ($let ((record (car (struct-elim (eval struct e)))))
                    (eval member record))))
                    
        ($define! zip
            ($lambda (keys values)
                ($if ($and? (null? keys) (null? values))
                     ()
                     (cons (list (car keys) (car values)) (zip (cdr keys) (cdr values))))))
                    
        ($define! $struct
            ($vau kvpairs env
                ($let* ((keys (map car kvpairs))
                        (values (map ($lambda (pair) (eval (cadr pair) env)) kvpairs))
                        (record (apply (wrap $bindings->environment) (zip keys values))))
                    (struct-intro (cons record values))))))
Example usage:

    ($define! foo
        ($struct
            (bar "Hello World")
            (baz (+ 12 43))
            (qux #f)))              ==> #inert
            
    (struct? foo)                   ==> #t
    (pair? foo)                     ==> #f
    (environment? foo)              ==> #f
    
    (destruct foo)                  ==> ("Hello World" 55 #f)
    
    ($get foo bar)                  ==> "Hello World"
    ($get foo baz)                  ==> 55
    ($get foo qux)                  ==> #f
    ($get foo foo)                  ==> ERROR: Unbound symbol: foo

    foo                             ==> #[encapsulation]
Kernel: https://web.cs.wpi.edu/~jshutt/kernel.html

Klisp (essentially complete implementation of Kernel): https://github.com/dbohdan/klisp

fn-mote•4h ago
Related but not the same at all, Racket has a 2D syntax (add on mode) that gives a different way to program tables where the output depends on two different inputs.

https://docs.racket-lang.org/2d/

jazzyjackson•4h ago
I'll piggyback with my gruesome JSONification of S-expressions. I kinda liked having two kinds of braces [straight] and {curly} to differentiate arrays and objects, and I did have a event-loop-based "parallel" scheduler working to process a tree as soon as prerequisites were fulfilled. I might pick up the old project again someday, I just got hung up on how I wanted to handle error bubbling.

With a vertical script like japanese you could easily rotate the whole program 90 degrees to the right (as shown at the bottom of the landing page)

https://web.archive.org/web/20240904091932/https://lookalive...

  {
  "#!join": [
    [
      "A triangle with side of ",
      "#& side",
      " and base of ",
      "#& base",
      "has a hypotenuse of",
      {
        "#!sqrt": [
          [
            {
              "#!sum": [
                [
                  "#!multiply side side",
                  "#!multiply base base"
                ]
              ]
            }
          ]
        ]
      }
    ]
  ]
}
drob518•4h ago
As a Lisp programmer, just no.
tearflake•1h ago
Thank you for the criticism. Lots of lispers share your opinion.
chc4•4h ago
These definitely are extensions that you could add to S-expressions, no one can disagree there.
somewhereoutth•3h ago
dispense with the parentheses:

  (eq (mul (a a)) (pow (a 2)))
becomes

  eq
    mul
      a a
    pow
      a 2
danielrico•2h ago
Lispython

I should trademark this name.

tmtvl•1h ago
That's Wisp, I don't care for it, but people who really like to assign semantic meaning to precise counts of invisible characters may find it interesting.
derriz•1h ago
Absolutely no counting is required at all so I think your joke falls a little flat.

Our visual system has the ability to detect implied straight lines (and other simple geometric outlines) from very small clues.

Therefore "seeing" the vertical lines implied by the indentation is effortless - so it's immediately obvious which elements belong to each other.

Indentation is an incredibly valuable "brain" hack that manages to instantly communicate hierarchy, not something to be sneered at.

We have no such innate ability to match parenthesis - determining hierarchy in a jumble of open and close parenthesis requires precise counting or, typically these days, tool/editor/IDE support.

thaumasiotes•17m ago
> Absolutely no counting is required at all so I think your joke falls a little flat.

Really? How do you see the difference between "TAB" and "SPACE SPACE TAB"?

agumonkey•1h ago
there's a hybrid form (sweet-expressions ? i forgot), top-level terms are parens-free

    eq (mul a a)
       (pow a 2)

    defun min (a b)
      (if (a < b) a b)

IIRC the hack to support this at read time was minimal, and it made a big impact in terms of "mainstream appeal"
pkilgore•2h ago
Is this.... is this a joke?
tearflake•1h ago
I don't intend to be funny. Just a bit childish, but in a good way :)
davesque•1h ago
This is bonkers and I love it.
tearflake•1h ago
Ikr? People should loosen a bit, why should everything be so serious?