News for hackers. Stuff that matters.

john-shaffer

Re:Lambda Durable Functions on Tuesday December 02, 2025 @11:57AM (#46123327)
AWS announced Lambda durable functions today in a blog post titled "Build multi-step applications and AI workflows with AWS Lambda durable functions" [0]

[0] https://aws.amazon.com/blogs/aws/build-multi-step-applicatio...

Re:Amazon Aurora DSQL is now generally available on Tuesday May 27, 2025 @03:54PM (#44110142)
Related story with much more detail and comments: https://news.ycombinator.com/item?id=44105878
Re:Friends don't let friends export to CSV on Tuesday March 26, 2024 @09:38AM (#39827665)
Have you considered https://github.com/dolthub/dolt for your use case?
But Nix is the best way to build images for dockerc.
Re:Infinite Craft on Thursday February 01, 2024 @01:01AM (#39213136)
Mostly playing around with stacking "powerful" words:

  King Kong + Power Ranger = King Kong Ranger (first)
  Megazord + Power Ranger = Power Megazord
  Megazord + Power Megazord or Artzord + Megazord = Ultrazord
  Dragonzord + Art = Artzord (first)
  Groot + Mega Artzord = Grootzord
  Megazord + Grootzord = Gigazord (first)
  Godzord + Giga Artzord = Giga Godzord (first)
  Giga Godzord + Giga Titanic Gigazord = Giga Titanic Godzord (first)
  Giga Titanic Godzord + Mega Power Godzillazord = Super Giga Mega Titanic Power Godzillazord (first)
I also got firsts on both Earthquake Laser and Laser Earthquake, but I'm not sure what the recipes were.

Trying to get Zebra was an interesting sequence.

  Tamer + Africa = Tamerlane (first)
  Tamerlane + Terror = Timur (first)
  Timur + Asia = Genghis Khan
  Genghis Khan + Bellerophon = Alexander the Great
  Alexander the Great + Unicorn = Bucephalus (first)
  Alexander the Great + Bucephalus = Horse
  Horse + Africa = Zebra
Re:A Tour of Lisps on Tuesday January 30, 2024 @12:01AM (#39186549)
Re:A Tour of Lisps on Monday January 29, 2024 @11:59PM (#39186534)
Clojure itself actually loads pretty quickly, but almost every project has enough libraries to make loading the project take a few seconds.
Re:Timeline to remove DSA support in OpenSSH on Monday January 15, 2024 @06:23PM (#39007419)

  export LC_ALL=C
  nix-shell -I nixpkgs=https://github.com/NixOS/nixpkgs/archive/2322899a1fa85f6547004b2829af81e7b444f506.tar.gz -p openssh
  ssh -V
  OpenSSH_6.1p1, OpenSSL 1.0.0i 19 Apr 2012
Note that the first stable release of nixpkgs was in 2013.
Re:Timeline to remove DSA support in OpenSSH on Thursday January 11, 2024 @11:34PM (#38963780)
> So how do I install the old version next to the new version in ubuntu 34.04?

You would install Nix and run something similar to "nix run nixpkgs-23.11#openssh <address>"

This looks promising, but it doesn't work on personal accounts. I'm not ready to install it on my organization account just yet.

Can I expect complex caching actions like https://github.com/DeterminateSystems/magic-nix-cache to work as quickly as they do on GitHub?

Re:Ask HN: How do your ML teams version datasets and models? on Friday September 29, 2023 @05:08PM (#37710097)
Clarification on file duplication: DVC tries to use reflinks if the filesystem supports it, and falls back on copying the files. It can be configured to use hardlinks instead for filesystems like ext4 [0]. This improves performance significantly.

[0] https://dvc.org/doc/user-guide/project-structure/configurati...

Re:Ask HN: How do your ML teams version datasets and models? on Thursday September 28, 2023 @07:53PM (#37697567)
DVC is slow because it stores and writes data twice, and the default of dozens of concurrent downloads causes resource starvation. They finally improved uploads in 3.0, but downloads and storage are still much worse than a simple "aws s3 cp". You can improve pull performance somewhat by passing a reasonable value for --jobs. Storage can be improved by nuking .dvc/cache. There's no way to skip writing all data twice though.

Look for something with good algorithms. Xethub worked very well for me, and oxen looks like a good alternative. git-xet has a very nice feature that allows you to mount a repo over the network [0]

[0] https://about.xethub.com/blog/mount-part-1

Re:How I run my servers on Sunday July 16, 2023 @12:59PM (#36749141)
Performance with Docker is slightly worse, but it shouldn't be an issue for a long-running process. The main problem I've run into is that, by default, Docker logs will eventually fill the disk and crash the server. You have to change the logging system and then delete and recreate all of your containers, because there is no way to change the logging system for existing containers.
Thanks. I had no idea D2 was on switch, and it's on sale for $13! [1]

[1] https://www.nintendo.com/store/products/diablo-ii-resurrecte...

Re:Clojure in the Tyre Manufacturing Industry on Wednesday February 15, 2023 @05:56PM (#34812103)
malli, specter, and calva are all less than ten years old. Clojure has seen a lot of progress in tooling and libraries.
IIRC, posts with more comments than votes are automatically penalized. It is #11 on the front page now, though.
Re:Monorepos in JavaScript and TypeScript on Thursday June 02, 2022 @06:49PM (#31601559)
Polylith does a good job of solving this: https://polylith.gitbook.io/polylith/
Re:Ask HN: Who operates at scale without containers? on Tuesday March 22, 2022 @06:54PM (#30772661)
Have you had problems with Nix on macOS? Nix works great for me, but I can't use it much to deal with installs or synchronize dependencies because the devs on macOS can't get Nix running.
I have no affiliation, but I tried the free trial of their tool and I found that the Code Health metrics made a lot of sense. The files that it pointed out are definitely overly complex and more difficult to change than they need to be. But it gave perfect scores to some files with complex jobs that are better-designed. I recommend just giving it a spin on a codebase that you are very familiar with.
Re:Case against OOP is understated, not overstated (2020) on Thursday February 10, 2022 @08:59PM (#30295865)
In production, I may only want one connection pool to a DB, and in that case global state is pretty much equivalent to passing state as an argument. Development in a Clojure REPL is a different story. I have one connection pool for the dev server, and a separate pool to run tests against. The test db is re-created from a template between each test run, without affecting the dev db at all. I can trivially have multiple test pools if I want to run tests concurrently.

I also have a separate service that the server makes calls to, which doesn't run on this server in production (it has its own production server), but does run in dev and test. Each dev/test system runs a separate instance of this service, which has its own separate connection pool(s), and setting this up was trivial.

Needless to say, failures are reproducible and meaningful. There is no mocking -- we test against real local services with real local DBs. (There are still some remote service calls which I'm slowly replacing, and some flakey, unavoidable remote dependencies in a few browser tests).

I didn't do anything special to make this possible other than naming the config files "service-name-config" instead of just "config". It is just the natural result of passing state in explicit arguments. The same is not true of global state.

Re:Uncomfortable Truths in Software Engineering on Thursday December 16, 2021 @11:07AM (#29579616)
Thanks for the explanation. What are some of the other techniques?
Re:Log4Shell update: second Log4j vulnerability published on Thursday December 16, 2021 @04:05AM (#29576415)
I just added a test case that importing org.apache.logging.log4j.core.lookup.JndiLookup throws a ClassNotFoundException. Any log4j2 class would work too.
Re:Uncomfortable Truths in Software Engineering on Thursday December 16, 2021 @03:40AM (#29576296)
Clojure is strongly typed and dynamically typed, not "untyped". Much of its core behavior is built on interfaces like ISeq.

It's not uncommon to use a spec library like clojure.spec or malli, whose benefits overlap those of static typing. I'm not sure if there is a measured improvement from their use, but they have either advantages like facilitating generative testing that do help one to write more correct software.

Re:Backblaze restore for Personal Backup is awful on Sunday December 12, 2021 @08:18PM (#29535507)
I have one of their borg accounts, which is a fraction of the normal price. https://www.rsync.net/products/borg.html
Re:The Problem with Macros on Wednesday October 13, 2021 @08:43PM (#28859292)
This is a good example of why dynamic vars are dangerous. They are just as perilous as global state, but are more surprising and more difficult to understand. Prefer passing explicit arguments in all cases. You don't have to even think about the behavior, and you'll never spend 8 hours tracking down a missing binding in a commit from 2018.
Re:SQLite Is Dynamically Typed (2020) on Thursday August 05, 2021 @02:39AM (#28070587)
It's pretty easy to run embedded postgres on the JVM: https://github.com/opentable/otj-pg-embedded

The defaults create a temporary DB which is useful for dev & tests, but a pair of calls to .setCleanDataDirectory(false) and .setDataDirectory("...") will change that.

If you don't like the default postgres version, you may select one from https://search.maven.org/search?q=io.zonky.test.postgres or include your own postgres binary.

You might be just fine adding an unindexed tsvector column, since you've already filtered down the results.

The GIN indexes for FTS don't really work in conjunction with other indices, which is why https://github.com/postgrespro/rum exists. Luckily, it sounds like you can use your existing indices to filter and let postgres scan for matches on the tsvector. The GIN tsvector indices are quite expensive to build, so don't add one if postgres can't make use of it!

Older »