This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2020-02-21
Channels
- # announcements (39)
- # architecture (7)
- # aws (9)
- # babashka (111)
- # beginners (139)
- # bristol-clojurians (1)
- # calva (47)
- # chlorine-clover (5)
- # cider (17)
- # clj-kondo (26)
- # clojars (25)
- # clojure (251)
- # clojure-berlin (1)
- # clojure-dev (5)
- # clojure-europe (22)
- # clojure-france (1)
- # clojure-hungary (6)
- # clojure-losangeles (8)
- # clojure-nl (18)
- # clojure-spec (3)
- # clojure-uk (68)
- # clojured (32)
- # clojurescript (32)
- # core-async (10)
- # core-typed (120)
- # cursive (8)
- # datascript (10)
- # datomic (11)
- # docker (2)
- # emacs (6)
- # figwheel-main (4)
- # fulcro (10)
- # graalvm (92)
- # hoplon (2)
- # instaparse (9)
- # jobs (3)
- # jobs-discuss (31)
- # joker (2)
- # kaocha (1)
- # lambdaisland (5)
- # leiningen (10)
- # luminus (1)
- # lumo (14)
- # meander (30)
- # mid-cities-meetup (1)
- # midje (1)
- # off-topic (46)
- # pathom (22)
- # perun (2)
- # re-frame (10)
- # reitit (1)
- # remote-jobs (8)
- # shadow-cljs (71)
- # spacemacs (7)
- # sql (40)
- # tools-deps (31)
- # tree-sitter (11)
- # vim (14)
- # vscode (2)
- # xtdb (5)
Hi, can anyone recommend articles/books dealing with design decisions on how to divide a software system into different applications/services? I’m facing such a decision for the first time at work and am looking for tips and ideas on which factors I can/should take into account. Would be great to read about some methods and examples.
I read http://shop.oreilly.com/product/0636920033158.do years ago to understand why everyone was talking about Microservices, it delves into DDD/Bounded Contexts
Lot's of concerns there. Personnaly I find it helpfull the think in -illities to find the best solution. Like deployability, evolvability, scalibility, testability, how does extracting some code to a deplyable unit affect those, and which of those are more important.
Is there a inter-language benchmark competition where anyone can participate? And where Clojure is one of the supported languages?
my point Is more important a language with a good abstraction, that allow you to test/select/swap a module/funcion/datastructure to find the fast one for your use-case, then a language that is "fast by default"
That's a fair point. I just want to do this for fun though. Optimizing Clojure code has become my favourite pass time.
There is also some cool stuff here https://github.com/tonsky/icfpc2019-rust
I build https://graphql.gklijs.tech/results/graphql-servers/transactions-per-second but Clojure is already the best. That being said, happy for any pr. Still waiting for subscriptions to hit the rust GraphQL server to add rust.
there is https://benchmarksgame-team.pages.debian.net/benchmarksgame/index.html and I spent a lot of time making the Clojure solutions there good
and then one day the maintainer deleted it
(and Scala)
so... yeah
At least, there's some explanation: https://benchmarksgame-team.pages.debian.net/benchmarksgame/sometimes-people-just-make-up-stuff.html#maintenance-burden
I’ve had some conversations with him. I respect his desire to spend his time how he wants.
I am sure he has spent many many hours fielding requests from various people to replace which benchmark program is used, or to remove ones because they don't follow the game rules (I have asked about a few programs myself years ago, when actively writing programs for the site for Clojure, and trying to understand how other programs worked -- he often responded in a timely fashion).
His advice is sound: If you want a web site that publishes results for a particular set of languages, create one.
That site does not publish the Clojure versions any more. I dug up a copy of the latest Clojure versions of the programs and put a copy here: https://github.com/jafingerhut/clojure-benchmarks/tree/master/2017-mar-31-benchmarks-game-site-versions
the versions that were posted that I worked on are all at https://github.com/clojure/test.benchmark
iirc, a lot of the "how to run" stuff in there is likely to be old and/or kind of bespoke
and/or broken
if you want to see a lot of funky clojure perf tricks, they're all in there :)
fix reflection, fix boxing, use primitives, use deftype/definterface, use array packing when you can't pass enough primitives, primitive constants, etc
but for most of the places I did the tricks, in real life, I would just write the damn loop in Java
a lot of my interim revisions and notes are squirrelled away in the archive directory
pidigits is probably the worst hack, although I merely polished that one - it uses clojure.asm (NOT a public api) to just write, compile, and load bytecode directly
iirc there was really only one reason to do so, something to do with marking native methods, which I made a ticket for but not sure ever got fixed.
oh, that's totally cheating the spirit
you can only pass 4 primitives in a function with primitive type hints
for the rare case you need more, you can pack them in a mutable Java array
in general, mutable Java arrays are the swiss army knife of Clojure hacks :)
assuming you're single-threaded, they are very memory efficient, very fast, stateful references
and hotspot can do wonders....
my point Is more important a language with a good abstraction, that allow you to test/select/swap a module/funcion/datastructure to find the fast one for your use-case, then a language that is "fast by default"
This is way off topic, I guess, but my wife recently received an email claiming that they had hacked her computer, and giving a cryptocurrency account to transfer money into if you wanted them not to publish videos they took of you via your computer's camera. They were even helpful enough to give links to why your anti-virus software didn't catch them. It looks bogus to me, since some of the things they are claiming she did, she never did. Seems pretty clever, though, in that it might be a kind of phishing that might get people to part with some of their money, for nothing but sending the right email.