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

I ended up adding the https://github.com/BelfrySCAD/BOSL2 library to OpenSCAD and it had some reasonable options for some gear and rack-and-pinion modeling that I needed to do.

(3D printing a sacrificial gear for a seat position adjustment mechanism)


So a data flow path that is a dag. Yeah, sounds right.

Also seems close to Erlang / Elixir supervision trees, which makes sense as Erlang / Elixir basically gives you microservices anyway...


It's not an index, it's just (probably parallel) file reads

That being said, it would be trivial to tweak the above script into two steps, one reading data into a DuckDB database table, and the second one reading from that table.


The Spring RTS FOSS engine is an engine, but does not provide the game assets or game-specific code.

Recoil is a fork of the Spring engine (background: Spring made backward incompatible changes; Recoil forked to retain backward compatibility). Beyond All Reason uses the Recoil engine and supplies its own game code, shaders, and assets.

https://recoilengine.org/articles/choose-recoil/

https://recoilengine.org/ (list of games powered by Recoil)

https://github.com/beyond-all-reason

Source: been in the BAR Discord for about a year, have contributed tiny bits of server code to the project, and read a few pull request comments.


CU suggestion: Kansas City's largest, CommunityAmerica Credit Union

https://www.communityamerica.com/about-us


The more the merrier, but as far as I can tell, there are no public rates listed on the CommunityAmerica CU site. All behind a "get in touch" interact: https://www.communityamerica.com/personal/borrow/resources/m...


https://github.com/MadAppGang/dingo

This project proports to be typescript for golang


I applaud the work that’s been done on Dingo (I also really like the name and inspiration, i.e. Dingo is a language that broke free from Google’s control). However, I don’t think Dingo is Typescript for Go, because it is too limited in scope.

Dingo adds Sum types and associated pattern matching elimination thereof, it adds a ‘?’ syntax for propagation of Optional types, and exhaustiveness checking for those pattern matching statements. There is no type system expansion, or syntax alterations that would make the Typescript comparison more appropriate.

I think Dingo probably addresses a lot of the common complaints with Go, but it is not nearly as far from Go as a baseline as I would assume a language positioned between Go and Rust.


Amundsen has two databases and three services in its architecture diagram. For me, that's a smell that you now have risk of inconsistency between the two, and you may have to learn how to tune elasticsearch and Neo4j...

Versus the conceptually simpler "one binary, one container, one storage volume/database" model.

I acknowledge it's a false choice and a semi-silly thing to fixate on (how do you perf-tune ingestion queue problems vs write problems vs read problems for a go binary?)..

But, like, I have 10 different systems I'm already debugging.

Adding another one like a data catalog that is supposed to make life easier and discovering I now have 5-subsystems-in-a-trenchcoat to possibly need to debug means I'm spending even more time on babysitting the metadata manager rather than doing data engineering _for the business_

https://www.amundsen.io/amundsen/architecture/


It is considered prudent to write a business plan and do some market research if possible before starting a business.


yes but traditionally how often was the original business plan "get acquired"? this seems like a new phenomenon?


Or both the doctor and ChatGPT were quoting verbatim from a reputable source?


For me, it was Elixir pattern matching + GenServers + SupervisionTrees + Let It Fail mentality.

I've fought null pointer exceptions longer than I want to in C# servers and Python code. Usually because we're introspecting into a message that a system sent us, we expect it to have a field on the message, we failed to check for the existance of that field / the field to not be null, and bam null-pointer exception.

Sure, add another guard clause... Every time you run into it. Every time the server crashes and it's a serious problem and someone forgot to set a restart policy on the container... Sometimes you don't know exactly what cascade of messages caused the whole thing to unwind. So tedious. So repetitive.

With GenServers, you've carefully defined that those parts of your system have active, in-memory state, and everything else must be a pure function. Messages come in a FIFO queue to your GenServer.

With pattern-matching, you define exactly what shape of message / fields on the message, and if it doesn't match that, you can either log it, or crash that GenServer.

Which normally would be catastrophic, but since you tied your GenServer to a SupervisionTree with a restart policy (which is trivial to write), if anything happens that you didn't expect, you can Let It Fail. The GenServer crashes and is immediately restarted, with a clean slate, with the correct peer-services in the correct state. Sure, the message that crashed your server was "lost" (there are options to push it to a dead-letter-queue on exit) and you have a bad-state and bad-message to debug in the crash-dump, but your server is still going. It hasn't stopped, it just dropped unexpected messages and has a deterministic recovery pattern to clear all bad-state and start again.

So instead of your message handling code starting with a bunch of defensive sanity checks, with the real meat of the function in the last 5 lines.... you just say "My GenServer is here in this SupervisorTree, I expect an inbound message to look roughly like this, and I will do this with it, done". Suddenly the server will handle the messages it knows how to handle, and everything it cannot handle it will drop on the floor.

Think of this! The server just stays up and keeps going! Anything it cannot handle is not a fatal exception, but a log message. And you didn't have to bend the code into an unnatural shape where you trapped and logged all exceptions and bubbled them up in specific error checks... it's just designed to do it that way out of the box.


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

Search: