Clearly an opportunity for Datadog to make a big statement here, and change its perceptions.
521 karma · joined March 12, 2012
Want to discuss comment or brainstorm. Dont hesitate, text me
https://t.me/reactima https://api.whatsapp.com/send?phone=818047562323
Creating SaaS applications with Reactjs/Python/Golang/TS. If got interested in any of my comments with lot links and github references, feel free to ping me on whatsapp or telegram.
Notes and fragments for LLVM hallucination https://zeroread.com/
Clearly an opportunity for Datadog to make a big statement here, and change its perceptions.
As my ex manager once told - there is no such thing as nice people in P&L statement. Someone has to pay
It's very easy to be anxious and see the path to the dark side here.
However one of possible outcomes - there will be a valid open source competitor to Grafana ecosystems, and this along secure the rest of scene from relicensing. There is a chance it will be all win-win with clear sustainable path and no money and power struggles for founders.
I want to stay on the positive here. Time will show.
As someone who never managed to built a fond relationship with Apache Lucene based products (Solf, Elastic). I was extremely happy to see Tantivy in open source.
BM25 scoring, proper asian language support, speed, memory foot prints, etc - amazing job! Thank you so much!
https://github.com/quickwit-oss/tantivy
IMHO Datadog made a smart move!
If Tantivy itself just stays permanently under Apache2 licence and find a sustainable path to co exist with the rest of open source community - it's all good guys. You are more than deserve a commercial success.
Just finished a call a few mins, and we came to conclusion we do natural query language, BM25 scoring with Tantivy based code first
https://github.com/quickwit-oss/tantivy
In meanwhile we collect all questions to ask LLM so we can be more consious at Hybrid Search implementation phase
Graph-Based (HNSW) vs Cluster-Based (IVF)
Memory Usage: Higher for HNSW due to graph storage requirements vs Lowerfor IVF; stores cluster centroids and subsets of vectors
Accuracy: High recall and precision, close to exact search vs Recall depends on the number of clusters and visited partitions
Build Time: Slower for HNSW, Faster for IVF
Best for: Real-time, high-accuracy tasks requiring dynamic updates vs Large, static datasets with strict memory constraints
Notable Graph-Based (HNSW) Variants - Faiss HNSW or PANNG (Proximity and Navigable Neighbor Graph)
Cluster-Based (IVF) Variants - IVF-PQ for memory-constrained environments, Multi-Index IVF partitions, IVF-GPU
After following discussions and commits Hatchet, Inngest, Windmill, I have a feeling in few years time all other systems will have 95% overlap in core features. They are all influence each other.
Much bigger question what price you will pay by introducing workflow system like Temporal in your code base.
Temporal and co are not for real-time data pubsub.
If latency is an issue or want to keep small memory footprint, better to use something else.
The max payload is 2 MB. It needs to be serializable. Event History has limitations. It's a postgres write heavy.
Bringing the entire team on the same page, and it's not trivial either. If your team has strong Golang developers like in mine. They might oppose it and state something like Temporal is unnecessary abstraction.
Writing your code is fun. Studying and reusing someone else patterns is not so much. Check https://github.com/temporalio/samples-go
For now, I decided to keep prototyping with Temporal and has it running on my personal projects till I create strong use cases and discover all edges.
The great side of effect of exploring Temporal and its competitors you will see better ways of structuring of your code. Especially with distributed state and decoupling execution.
Here some challenges I personally faced recently
- Durable Execution Paradigm: You may need the system to operate in a "durable execution" fashion like Temporal, Hatchet, Inngest, and Windmill. Your processes need to run for months, be upgraded and restarted. Links below
- FSM vs. DAG: Sometimes, a Finite State Machine (FSM) is more appropriate than a Directed Acyclic Graph (DAG) for my use cases. FSMs support cyclic behavior, allowing for repeated states or loops (e.g., in marketing sequences). FSM done right is hard. If you need FSM, you can't use most tools without "magic" hacking
- Observability and Tracing - takes time to put it everything nice in Grafana (Alloy, Tempo, Loki, Prometheus) or whatever you prefer. Attention switch between multiple systems is not an option during to limited attention span and "skills" issue. Most of "out of box" functionality or new Agents frameworks quickly becomes a liability
- Token/Inference Economy - token consumption and identifying edge cases with poor token management is a challenge, similar to Ethereum's gas consumption issues. Building a billing system based on actual consumption on the top of Stripe was a challenge. This is even 10x harder ... at least for me ;)
- Context Switching - managing context switching is akin to handling concurrency and scheduling with async/await paradigms, which can become complex. Simple prompts is a ok, but once you start joggling documents or screenshots or screen reading it's another game.
What I like about the all above it's nothing new - all design patterns, architecture are known for a while.
It's just hard to see it through AI/ML buzzwords storm ... but once you start looking at source code ... the fog of mind wars become clear.
Durable Execution / Workflow Engines
- Temporal https://github.com/temporalio - https://hn.algolia.com/?dateRange=all&page=0&prefix=false&qu...
- Hatchet https://news.ycombinator.com/item?id=39643136
- Inngest https://news.ycombinator.com/item?id=36403014
- Windmill https://news.ycombinator.com/item?id=35920082
Any comments and links on the above challenges and solutions are greatly appreciated!
New Go Billion Row Challenge w/ Great Optimizations | Prime Reacts
- https://www.youtube.com/watch?v=SZ1PDS7iRU8
- https://r2p.dev/b/2024-03-18-1brc-go/
Spoiler:
SwissMap: A smaller, faster Golang Hash Table
- https://www.dolthub.com/blog/2023-03-28-swiss-map/
- https://github.com/dolthub/swiss
Want to see Paul Allen's implementation in Rust, Zig, Mojo ... and even Bun.sh, Deno.com
I call it a "happy problem" - kind of problem you get in with lot of money.
All participating parties are having middle class above life style and looking for the way to balance each other.
https://tradingeconomics.com/united-states/interest-rate
Next Jackson Hole Symposium to speculate on 2024-08-22 12:00 AM https://en.wikipedia.org/wiki/Jackson_Hole_Economic_Symposiu...
"The Symposium often serves as a platform for major policy announcements by the Federal Reserve and other central banks. "
Keynote at Craft Conference 2024 video https://www.youtube.com/watch?v=VpPPHDxR9aM
01:22 Small teams moving faster than before
03:21 What else is familiar from earlier?
05:13 What is going on in the tech industry?
11:13 Root cause #1: interest rates
18:37 Root cause #2: smartphone & cloud revolution
20:57 The new reality for software engineers
23:41 Shopify's preparation to this "new reality"
25:56 The new reality for software engineering practices
34:21 Haven't we seen this before?
Very simple explanation on interest rate impact on VC funding and IPO, and what might come next with related tech bubble, trigger events
I do lot of email templating for B2B CRM use cases and decided to opt out for a bit different approach based on slatejs/platejs editor
https://github.com/ianstormtaylor/slate
https://github.com/udecode/plate
The internal representation of email template with variables in slatejs/platejs json format can look like:
{ "type": "h1", "children": [ { "text": " Blocks {{template_value}} {{$timenow}}}" } ], "id": "1" }
Can be easily stored in Postgres jsonb. Very easy to add Reacjs base widgets like mentioning, media, diagrams, etc inside of slatejs/platejs editor.
The drawback is that you can't design the exactly the same pixel perfect template.
The better abstraction is probably MJML - https://mjml.io/ ... and yet with slatejs/platejs json format you can copy&paste your editings across various assets in CRM, knowledge base, etc
Storing data in MJML is not a great choise for me
<mj-text align="left" color="#55575d" font-family="Arial, sans-serif" font-size="13px" line-height="22px" padding-bottom="0px" padding-top="0px" padding="10px 25px"> ...
Was thinking about using something similar to /SendWithSES/Drag-and-Drop-Email-Designer as the last final step ... but couldn't settle it my brain and most end-users dont care anyway.
Any thoughts on data representations and "Postgres <> Editor > Email HTML > Send button" dataflow is greatly appreciated. Very few people have serious thoughts on the subject.
- company in California with a motto of “never hire Americans because 16 year old outsourced Croatian interns know everything already
- it would take a couple million united states freedom bucks to build working prototypes ...
There is enough lines to spin off Silicon Valley successor from it, or at least have a good conversation with the author at local bar.
As for uncovered topics or part 2 - long running Go channels can be a nightmare.
You need to implement kind of observability for them.
You must find the way to stop/run again/upgrade and even version payload to handle your channels/goroutine.
Common problem with channels overuse is so called goroutine leaks. Happens more often than most devs think. Especially, if lib writers initiate goroutines in init() to maintain cache or do some background cleanup job. It's good to scan all used packages for such surprises.
You might also find concepts like "durable execution" or "workflow" engines down the road.
Was never obsessed with "event-driven" distributed systems using message queues.
The major issue is to keep syncing state between services.
Quite for a long time used to get decent results with simple golang and postgres scripts to distribute work between workers on multiple bare metal machines
Took ideas from projects similar to MessageDB
https://redis.io/docs/latest/develop/data-types/streams/
CREATE TABLE IF NOT EXISTS message_store.messages ( global_position bigserial NOT NULL, position bigint NOT NULL, time TIMESTAMP WITHOUT TIME ZONE DEFAULT (now() AT TIME ZONE 'utc') NOT NULL, stream_name text NOT NULL, type text NOT NULL, data jsonb, metadata jsonb, id UUID NOT NULL DEFAULT gen_random_uuid() );
along with Notify https://www.postgresql.org/docs/9.0/sql-notify.html
or polling techinques
Redis Stream here and there worked well too https://redis.io/docs/latest/develop/data-types/streams/
Another possible alternative can be "durable execution" platforms like Temporal, Hatchet, Inngest mentioned on HN many times
- Temporal - https://temporal.io/ - https://github.com/temporalio - https://hn.algolia.com/?dateRange=all&page=0&prefix=false&qu...
- Hatchet https://news.ycombinator.com/item?id=39643136
- Inngest https://news.ycombinator.com/item?id=36403014
- Windmill https://news.ycombinator.com/item?id=35920082
Biggest issues I had with workflow platforms - it requires a huge congnitive investments in understanding SDKs, best practices, deciding how properly persist data. Especially, if you optout to host it yourself.
Fast learning curve for new hires is a top golang feature for me too.
I didnt had a single line of code broken by golang version up updates in 7+ years, scanning through golang source code is always a pleasure. No hidden magic. I dont read documention either - just surfing inside of source code by clicking with CMD key.
My main KPI for Golang is the ammount of clicks required to understand internals ... very few compare to other languages.
If its stamped by guys like Russ Cox (rsc), I can sleep well too.
Postgres is not just a database, but "database OS"
Discovered it a few months ago, and going through its last year posts and videos.
Postgres ecosystem is clearly booming with all its extensions like pgvector, paradedb and many many amazing tools, and derived projects
All videos annotated and accompanied with summary article
Just look at the past 3 episodes
- E118 https://pganalyze.com/blog/5mins-postgres-17-materialized-ct...
- E117 https://pganalyze.com/blog/5mins-postgres-planner-join-equiv...
- E116 https://pganalyze.com/blog/5mins-postgres-17-beta1
Scaling Postgres is a great too
- https://www.youtube.com/@ScalingPostgres/videos
- https://www.scalingpostgres.com/episodes/
Postgres is eating the database world
https://medium.com/@fengruohang/postgres-is-eating-the-datab...
PG Feature Matrix https://www.postgresql.org/about/featurematrix/