HNHacker News
TopNewBestAskShowJobs

synthc

894 karma · joined December 22, 2015

reach me at hackernews@chrisblom.net
submissionscomments
synthc··on Ask HN: Favorite purchases of last two years?
My mountainbike (cube reaction pro)
synthc··on Six years of professional Clojure development
Inheritance from java.lang.Object does not make Clojure data mutable. Blocking for IO does not make Clojure imperative, it not a purely functional language, but its still a functional, not imperative, language.

It's possible to build a service in a purely functional language using non blocking IO that also takes minutes to render. No language will save you from a bad design.

I do agree that Clojure is not the most suitable language for large projects with lots of contributers because of it's dynamic nature.

synthc··on The Unparalleled Genius of John von Neumann (2019)
don't forget the keto diet and intermittent fasting
synthc··on How much can a Clojure developer do alone?
Eh no, commas are treated as whitespace in clojure. ~ is used for unquote
synthc··on Fish Shell 3.2
I love fish, and have been using it as my shell for over 10 years, it's pretty much the first thing I install on a new system.

I usually heavily tweak the settings of the applications I use, make my own custom themes etc, but the defaults of fish are so good that I hardly changed anything.

I only installed 3 plugins (z,fzf,and virtualfish) and that's it, it's super productive.

Completion from history, persistently setting enviroment variables, defining functions, the syntax, everything is much more ergonomic and sane than in bash.

I'm sure you can tweak zsh or even bash to achieve something similar, but why bother?

Also, i don't mind the incompatibility with bash: the fish language is much more sane, and you can easily use bash if needed.

synthc··on A Categorical Theory of Patches (2013)
I once made a prototype lisp interpreter where you could call previous versions of definitions. A fun experiment, but I didn't carry it further.

Unison is a language/platform that incorporates some ideas from version control, but I don't know how far along they are.

synthc··on Losing faith in UX
There is a programming language called Racket, let's not associate it with bad UI practices.
synthc··on Intel Problems
docker om MacOs is a second class citizen, because it runs in a VM. The networking is much more complicated because of this, which causes endless amounts of hard-to-debug problems and performance is terrible.
synthc··on Ask HN: Freelancer? Seeking freelancer? (January 2021)
thanks for letting me know, I added my email adres
synthc··on Ask HN: Freelancer? Seeking freelancer? (January 2021)
SEEKING WORK | Utrecht, NL or REMOTE

10+ years experience in Clojure(script), Java, Kafka, DevOps and AWS/GCP/Azure. See profile for contact details.

synthc··on Obsolete trig functions and why we don't use them anymore (2013)
tons of libraries define both PI and TWO_PI
synthc··on Generalizing 'jq' and Traversal Systems using optics and standard monads
that is exactly my point, static type system help a lot, but saying that 'if the types check there are no bugs' is too much. There are many classes of errors that are beyond types, even dependant types.
synthc··on The Serverless Revolution Has Stalled
Yes, i meant "aren't". Damn you autocorrect!
synthc··on The Serverless Revolution Has Stalled
Sure, everything can be done serverless with a bunch of workarounds, that's one of the reasons it stalled IMO.

Serverless makes somethings easier and other things harder, so it's advantages over good old fashioned servers are clear cut.

synthc··on Generalizing 'jq' and Traversal Systems using optics and standard monads
>When you can get a functional language to type check, it really does Just Work.

Not all functional languages have static typing. Also type checking helps, but saying that if the types check out it just work it pushing it IMO.

No type checker will catch this error:

  sqrt :: double -> double
  sqrt x = x

  sqrt 10
synthc··on Generalizing 'jq' and Traversal Systems using optics and standard monads
Don't be pedantic, this is super simple code that is easy to analyze. Side-effects are not the terror that haskell programmers make of it.
synthc··on Eliminating Task Processing Outages by Replacing RabbitMQ with Apache Kafka
>Kafka's publish behavior is even worse. The vast majority of Kafka publishers' default settings don't even send the data to the broker without waiting for a response (like RabbitMQ without publish confirms); they send the data to a local buffer which is asynchronously flushed periodically/volumetrically.

When you publish a message to Kafka, it stores the message in a buffer and immediately returns a future that completes once the data is sent to the broker.

If you forget to wait on completion of the future that is on you, this behaviour is well documented.

synthc··on Ask HN: Who is hiring? (October 2020)
Where can I find a list of locations supported by boundless?
synthc··on Deep learning job postings have collapsed in the past six months
These days it's people trying to force Kafka into it and call themselves "streaming experts"
synthc··on Re-Frame: Build web apps in ClojureScript and React
This part: https://day8.github.io/re-frame/a-loop/#the-data-loop The analogy with the water cycle is not helpful at all to me.

My background: I have several years of Clojure(script) experience, and used various other cljs frameworks before trying re-frame, so my view is probably biased.

synthc··on Re-Frame: Build web apps in ClojureScript and React
Re-frame really doesn't add much in addition to Reagent, I really don't understand its popularity.
synthc··on Re-Frame: Build web apps in ClojureScript and React
I really dislike the documentation of re-frame. The concepts are quite simple, but the docs explain them in a really confusing and buzzword heavy way.
synthc··on Datahike: Durable Datalog database powered by an efficient Datalog query engine
I've tried this, but found it too slow for large databases
synthc··on Datahike: Durable Datalog database powered by an efficient Datalog query engine
For timeseries data I encoded a [entityId,timestamp,attribute] tuple to a big integer, using a order preserving mapping to ensure that the datoms are sorted by the timestamp. This provided the right functionality, for example using seek-datoms we could retreive the datoms with timestamps between some range, but performance was poor. I think a custom index could help a lot here. We also had problems with the database growing to large, and needed to manually shard the database over time.

A datalog equivalent to TimescaleDB (which extends Postgres with timeseries optimiziations and time based table partitioning) would be great.

For client access I tried to define access rules based on attributes (similar to how many graphql frameworks handle this), I tried to express this using datalog rules. For example, users hava permission to access :user/items, and :items/blabla, so a user X can access [X :user/items Y] and [Y :items/blabla Z] Some experiments were promising, but it was slow and I did not find a good way to integrate this.

synthc··on Datahike: Durable Datalog database powered by an efficient Datalog query engine
Thanks for clarifying. I agree that Datomic is expensive to run and that open sourcing it would not improve this overnight, a lightweight and cost-effective alternative would be great.

How will you handle security when accessing a Datahike backend from the browser? I've used Datomic from the browser indirectly in the past for internal tools, using a custom rest api to run the queries, but for external access it was not clear how to limit the queries to the parts of the database the user had permission to view.

What are your plans for IOT development? I found that Datomic is not a good fit for timeseries data, does Datahike offer any advantages?

synthc··on Datahike: Durable Datalog database powered by an efficient Datalog query engine
Nice to see an open-source Datomic clone, but it's not mature enough IMO. I hope Datomic gets opensourced now that the company behind, Cognitect, was acquired by Nubank.
synthc··on Dutch national broadcaster saw ad revenue rise when it stopped tracking users
When my first kid was born, all the ads I got where either baby clothes, daipers etc., or Second Love. A clear separation between A and B
synthc··on Go is boring, and that’s fantastic
when I worked in adtech, we located the servers close to the exchange. This indeed made much more difference to the latency than code optimizations.
synthc··on Go is boring, and that’s fantastic
Speaking from experience, the JVM is fast enough for real time bidding in adtech. Most major ad exchanges require the latency to be below ~80ms, which is not that hard to achieve. In contrast to high-frequency trading, there is no competive advantage in having a lower latency.
synthc··on Hardcoded secrets, unverified tokens, and other common JWT mistakes
But then you have have make a database call to check the blacklist, so you might as well use sessions
← PreviousPage 6 of 8Next →