I am currently working on a website https://hillsha.de that makes it easy to download LiDAR las/laz files for almost every place in europe, the US and some other regions. I also made an iOS app for the same use-case, which can render the LiDAR data in 3D and 2D without PDAL and GDAL. It uses a vibe-coded library instead that combines both in native Swift. The iOS app is still in testing but works great.
Implementing France was a lot more comfortable than almost every other country, very well structured metadata and naming conventions. So thanks for that
(i work at the german mapping agency but this is a private project since i just love working with LiDAR hillshades)
For those wondering what it's for: it's basically NumPy + a JIT compiler with standard Haskell syntax (you mostly just need to change the type signatures, not the code).
It can vectorize, parallelize on the CPU, or offload to the GPU automatically.
One big difference compared to NumPy (which you may or may not care about depending on how picky you are), is that Accelerate is a higher-order programming model. Basically, you can have 'map' (with a user-provided function), and it will go fast, in contrast to NumPy's model where only first-order operations go fast.
In particular, compare you JAX’s vmap — one model for vmap is that it is a program transformation on first order functions, that returns a first order function (“function” is a bit wonky here: but it’s JAX’s Jaxpr representation), but vmap itself is not a primitive in the Jaxpr language.
Is the same true here about map (can I think of it like vmap)? Or is it true that I can define higher order functions and Accelerate will handle them? What about functions with recursion?
Thanks! If you happen to see this - Futhark is very cool.
I'm not a Jax expert. Accelerate's 'map' allows for almost arbitrary sequential code - there is some fine print, because it's an embedded language, and the biggest fine print is that nested parallelism is not allowed. You can define your own Haskell-level higher order functions, and Accelerate will handle them just fine, because essentially all the Haskell-level computation is "compiled away" (by being run) before the Accelerate code is JIT-compiled at run-time. You can consider Haskell to be a meta-language in which you ultimately construct Accelerate program terms, and then those are compiled and run - not too dissimilar from how Jax does it, actually.
Recursion works, but for an uninteresting reason: the recursion is on the Haskell side, and will essentially be unrolled before Accelerate gets its hand on it. This allows you to do some fun things (like partially evaluating a ray tracer on its scene description), but it's often not what you want, and Accelerate provides some combinators (that look like higher-order Haskell functions) for expressing sequential looping.
Strange personally never heard or read about Accelerate before. I think it has the same main problem with generic naming language like Futhark (this very issue already mentioned in a different concurrent post).
As a modern array language, perhaps Accelerate should look into D4M as a basis, it's also started 10+ years ago [1].
D4M is based on math like SQL, specifically associative array algebra but not relational unlike SQL. It's more generic since can it caters to most modern data abstractions including spreadsheets, database tables, matrices, and graphs [2].
You can achieve 100M database inserts per second with D4M and Accumulo more than a decade ago back in 2014 [3].
[1] D4M: Dynamic Distributed Dimensional Data Model:
I've spent a lot of time wrapping my head around monads; whenever I thought I "got it," I would come across some exotic monad that completely blew my mind. The best way to understand them is not to rely on analogies but just follow the rules—everybody says that, but it took me a while to truly realize it.
I tried understanding the rules but actually using it helped me to get it. Especially when I was using a parser combinator to parse a programming language.
In a lot of these there could logically be someone sitting across from them making them laugh, but the woman with the cherry tomato in her fingers is just smiling for the love of the salad.
That can be automated quite easily these days. Just make your bot/scraper scan for anything that blames something or otherwise fits narratives that can be used as a vehicle of your own promotion, and hit that.
P.S. Not necessarily implying that the grandparent resorted to that.
I absolutely adore it when stumbling occasionally upon great musicians who have laughable numbers of listens on various platforms, dunno if that's mere chance or the algorithm trying to balance things out, but that surely brings some hope for the pure art.
You wish. It is becoming harder every day to find genuine comments or technical insights at the top of HN sections instead of blind love/hate for trendy topics.
Even among the "genuine" comments most of them are just people spewing things because the monkey brain has determined that it likes it when the number in the top right goes up and has figured out what kind of things to spew to make it go up (dare I say encouraging this state of affairs is the reason some platforms choose to keep score in such a manner).
Does it really matter whether you're reading something written by an AI shill, a human shill or a human (or AI) who's repeating the shillery? You're being shilled at all the same.
reply