HN user

adamkl

1,061 karma
Posts29
Comments192
View on HN
www.apollographql.com 3y ago

Apollo Layoffs

adamkl
158pts212
thelocal.to 4y ago

Children’s Village Forever

adamkl
2pts0
www.youtube.com 4y ago

Monster Breeding

adamkl
1pts0
coast.swlkr.com 4y ago

Coast on Clojure

adamkl
181pts60
ryanbigg.com 4y ago

Maintainable Rails

adamkl
1pts0
developer.confluent.io 4y ago

Data Mesh 101

adamkl
1pts0
www.cbc.ca 4y ago

How does Omicron spread so fast? Virus may now be multiplying 70 times quicker

adamkl
1pts0
realfiction.net 4y ago

On the fractal nature of effort estimates (2016)

adamkl
34pts6
www.infoq.com 4y ago

Events, Flows and Long-Running Services (2017)

adamkl
19pts2
camunda.com 4y ago

BPMN and Microservices Orchestration

adamkl
2pts1
lambdaforge.io 5y ago

Datahike in ClojureScript with IndexedDB Support

adamkl
5pts0
realfiction.net 5y ago

On the fractal nature of effort estimates (2016)

adamkl
2pts0
grishaev.me 5y ago

I will never let monads be in a Clojure project

adamkl
2pts0
lispcast.com 5y ago

The User Wizard Scenario

adamkl
3pts0
www.youtube.com 5y ago

Functional Architecture – The Pits of Success

adamkl
2pts0
stm.sciencemag.org 6y ago

Using influenza surveillance networks to estimate SARS-CoV-2 in the US

adamkl
1pts0
www.thetimes.co.uk 6y ago

Bank of England considering negative interest rates

adamkl
2pts0
www.youtube.com 6y ago

Write Fewer Tests from Automation to Autogeneration

adamkl
1pts1
css-tricks.com 6y ago

Model-Based Testing in React with State Machines

adamkl
2pts0
github.com 6y ago

Hot-swap API endpoints and stream processors using Clojure and Dataworks

adamkl
1pts0
medium.com 6y ago

The Evergreen Cache

adamkl
2pts0
www.youtube.com 6y ago

Unlocking Data-Driven Systems

adamkl
2pts0
luigi-project.io 6y ago

Luigi Micro Front End Framework

adamkl
2pts0
medium.com 6y ago

The Integration Operation Segregation Principle (IOSP)

adamkl
3pts0
medium.com 6y ago

Stratified Design over Layered Design

adamkl
9pts2
www.groundedsage.dev 6y ago

The Clojure Mindshare

adamkl
4pts0
www.groundedsage.dev 6y ago

The Clojure Mindshare

adamkl
2pts0
github.com 8y ago

Use graphql-weaver to combine multiple GraphQL servers into one API

adamkl
2pts0
fsharpforfunandprofit.com 9y ago

Thirteen ways of looking at a turtle

adamkl
2pts0

The Mitsubishi Outlander PHEV is very good (and is available without a wait). It differs from some of the other PHEVs in that it is really an EV (with 2 electric motors) and uses the gas engine primarily as a generator. This means it drives like an EV (no transmission, no power bands, just smooth acceleration at all times). A downside is that when running on gas, it's not as efficient because of the losses of going from mechanical energy to electrical energy back to mechanical, but I regularly get 70-80km on a charge, so the engine only kicks in on long weekend trips.

That’s my point. FP can be as simple as that, and applied to any codebase. It’s all the extra stuff (which is good) that typically “defines” FP that scares people away, and keeps them from seeing the utility of a simple, pure function.

It’s true that people don’t do it, because of language conventions, but there is no barrier to entry when it comes to writing functions (or methods in these languages) that operate solely as transformations of inputs to outputs. You then orchestrate these “pure” functions with simpler side-effectful methods that handle the external dependencies (data fetching/writing etc).

There’s no pushback because of “strange” FP patterns, code looks just like normal imperative code, but the tricky logic can be isolated in pure functions. The push back is only because of the strong OOP conventions.

I’m my opinion, how to win would be to push for more logic in stateless functions, full stop.

This can be done in any language without introducing “foreign” FP patterns and instantly makes code easier to understand and test.

Enterprise Architecture is a very different discipline from software development (and even solution architecture), and are usually found in non-tech organizations (i.e. banks, insurance companies, etc).

EA is focussed on evaluating the business processes and technical solutions that make up the operations of a large scale organization. They try to identify and remove redundancy (e.g. multiple billing systems) and ensure the solutions in place (custom internal, or vendor purchases) are fit-for-purpose from technical, business, and strategic standpoints.

It’s very far removed from the practice of software development (since the correct solution, from an EA standpoint, might just be to stitch together a handful of vendor systems and do away with custom development completely).

Coast on Clojure 4 years ago

It was a general comment about frameworks. It’s possible to have a framework that includes all the “batteries” but has idioms and conventions that promote simplicity and maintenance.

Rails chose idioms and conventions that prioritize speed at the cost of complexity. The “included batteries” are not the problem.

Coast on Clojure 4 years ago

I like that quote, but it's the Rails idioms and conventions that make hairballs, not the fact that it includes a bunch of batteries.

Coast on Clojure 4 years ago

Sounds like “create-react-app”. A bunch of libraries and configurations wrapped up in a “golden-path”.

Provides the “easy” for 95% of usecases and an “eject” button that unwraps everything and puts it under you control for the last 5%.

Coast on Clojure 4 years ago

Agree. There is a lot of value in the "easy, batteries included" solution which is why Rails gets so much love from the start-up community. The problem always seems to be that the same things that makes Rails easy to get started with (cough ActiveRecord cough) also make it easy to create foot-guns in the future (provided your start-up lasts long enough to get to that point).

Combining a Rails like framework that makes things easy with a language who's idioms prioritize simplicity seems like a great combination.

I guess if the concern is around atomically committing to the DB and event stream at the same time, you could hang the event stream off the DB using change-data-capture to populate the events.

Ultimately, whenever you are pushing data between systems you can end up with inconsistencies which why it’s important to clearly define systems of record.

It is possibly that you could get inconsistencies between systems, but you mitigate that with durable event streams (e.g. Kafka) and by ensuring that each data entity in your enterprise has a system of record that can be used to resolve conflicts.

This is really not that different than using ETL jobs to move data about, but taking a streaming approach vs a batch approach.

I like the idea of using “fat” events as a means of data integration between systems.

Calling them RESTful events is a good term as I’ve pitched in much the same fashion. Every time a system responds to a create/update/execute request, drop an equivalent message into an event stream. Initially these can form the basis of a streaming ETL to whatever systems you use for analytics, but as new internal systems are brought online (e.g a new CRM system to help sales manage all the leads signing up for your successful product) the integration is already there, waiting. Just add a new consumer to the existing stream.

Overtime, you end up with a “data mesh”. If you look past the marketing of the term, it’s basically just means each application in your company should publish both sync (for real-time usage) and async (for data sharing between systems of record) interfaces.

Over the years javascript has really evolved into a multi-paradigm kitchen-sink of a language, and because of its nature and evolution, there really isn’t such a thing as “idiomatic” JavaScript or widely agreed upon approaches to architecting a system.

From what I’ve seen, the architecture of a particular Node.js system is highly dependent on experiences of the team members that first built it. It could a hexagonal/DDD using a framework like Nest.js (the Spring Boot of JavaScript) or take a more FP approach using Express and looking more like Clojure/Ring. More often then not though, Node.js applications lack any sort of predictable structure because for a lot of teams, JavaScript is their first, and only, experience.

Long story short, I’ve been doing Node.js for 5-ish years now, and I have yet to come across what you are looking for. Every team/codebase is a unique snowflake in some way. Your best bet is to leverage the experience you have in Java/Clojure because JavaScript will be able to support 90% of whatever approach you decide to use.

I remember using Buzz back when I was in university around the turn of the century. Lots of great memories with that one.

I came across an excellent modern alternative when my kids started getting into electronic music. It’s called SunVox [0]. Still under active development and runs on just about anything! Lots of fun!

[0] https://warmplace.ru/soft/sunvox/