Hacker Newsnew | past | comments | ask | show | jobs | submit | Bogdanp's commentslogin

I’ve used it for all kinds of production stuff over the years, from web to desktop and mobile apps.


Interesting, how do you distribute/publish those apps?


Web: create an executable distribution[1] and ship it to a server.

Windows/Linux/macOS: same as web, using cross-compilation[5]. Additionally for macOS, embedded in a Swift app and distributed as a .dmg[2] and on the Mac App Store[3]

iOS: embedded in a Swift app and distributed on the App Store[4].

[1]: https://docs.racket-lang.org/raco/exe-dist.html

[2]: https://franz.defn.io/

[3]: https://apps.apple.com/us/app/franz-apache-kafka-client/id64...

[4]: https://apps.apple.com/us/app/podcatcher-podcast-player/id67...

[5]: https://docs.racket-lang.org/raco-cross/index.html


What UI framework did you use for mobile?



Notification names are arbitrary strings. It's convention to use "fully-qualified" names like that to avoid collisions. In this case, I imagine that just happens to be what the developer chose as a prefix.


The whole point of reverse DNS notation is to have a conflict free namespace though. Using somebody else's namespace is asking for trouble in the future.

In this case it's probably additional subterfuge in case somebody examines all notifications posted and sees apple and thus ignores it.


Yes, although I've never used capnproto, I believe the approach it takes is similar: you define your schema, it generates code to do the serialization and to handle the RPCs.


That still leaves you with the problem of wiring up the request -> response types manually, doesn't it? The serialization format isn't that important in this case.


Oh, I see, so the value of the DSL is in handling the pair of request and response. I suppose that makes sense.

There is probably a way you could accomplish this with generically serialized objects that have virtual methods, but it wouldn't be as neat or type-safe.


On average for calendar year 2024, it was $35 a day, living in Cluj-Napoca, Romania. For two people. My guess would be this is on the higher end of things, but I'm curious about others. Another factor is I am 95kg, 15% bf and do resistance training 6 times a week, so I eat a lot.

(I beancount[1] my finances.)

[1]: https://beancount.github.io/


> 3. from what I understand, shell syntax is available only at REPL top level. Once you switch to Lisp syntax with `(`, you can return to shell syntax only with `)`. Thus means you cannot embed shell syntax inside Lisp syntax, i.e. you cannot do `(define j {find -type f | less})`

It's possible I misunderstand what you mean because I'm not sure what piping to less is supposed to accomplish here, but this is not true. The following program works just fine:

    #lang rash

    (require racket/port
             racket/string)

    (define (echo!!! message)
      (define output {echo $message |> port->string |> string-trim})
      (string-append output "!!!"))

    (echo!!! "Hello")


Nice! then my point 3. above is wrong and should be deleted


Rash is excellent. I use it in production for a process that copies large parquet files on the daily by shelling out to the aws command, then processes them by shelling out to another command and then pushes the processed data over HTTP to another server using a Racket HTTP client[1]. My only complaint would be that the docs could use some cleaning up.

[1]: https://docs.racket-lang.org/http-easy/index.html


The docs are terrible, and I've always meant to go back and improve them... but it's never quite been a priority and I've never actually summoned the motivation to do it...

But it's always nice to hear when someone uses it and likes it despite that!


Thanks for the feedback. Subscribing in particular is slow, especially for podcasts with lots of episodes, because it tries to save all the episode metadata locally, to avoid roundtripping later. So, it’s slow initially so it can be fast later and work offline, but I understand how that can be annoying!


That's a great point! Shouldn't be hard to add.


A botched deploy that I didn't notice ended up crashing the server, which then failed to recover when the systemd unit tried to restart it (it couldn't bind the port and ran out of retries quickly) overnight, so that's why that was failing. It's back up now and I'll put a fix in today.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: