Fork me on GitHub
#announcements
<
2024-05-22
>
Mark Wardle06:05:41

https://github.com/wardle/hermes v1.4.1400 - a SNOMED CT terminology server. Clojure makes this so easy... For this release I needed to support new operators within the latest version of a DSL called the SNOMED Expression Constraint Language (ecl)- I use the excellent https://github.com/Engelberg/instaparse library, it's taken 9 (!) lines of code to implement, not including the tests of course, and all additive changes. Despite what people might think about Clojure, other terminology servers in this industry need complex set-ups with ElasticSearch or Solr, and take hours to important the SNOMED distribution data files. Clojure actually has helped create a lightweight, single command-line tool that does that in 5 minutes (largely thanks to LMDB and Lucene to be fair) and is now so easy to maintain and update in response to changes in the domain requirements. And related to this, the organisation behind SNOMED is consulting on whether to increase the length of one of the fields... I https://github.com/wardle/hermes/issues/66 and confirmed it would cause no difficulties. My ❤️ letter to Clojure!

💯 19
👍 13
clojure 9
❤️ 14
🧑‍⚕️ 1
🎉 1
arnaud_bos16:05:42

Clojure, Instaparse, LMDB, Lucene, Pathom, ... This is a dream 🌈

❤️ 1
Mark Wardle10:06:06

Thanks @U0DCK21EJ - yes I have wanted to, but just haven't had the time yet. I'm currently using Pathom / EQL as my property graph layer and that's been great because of the operational imperatives I've had, but I've wanted to step to a more abstract and less Clojure-specific approach longer term. I think @U051N6TTC has done a fair bit with SNOMED and more open standards and perhaps SPARQL as well?

quoll11:06:41

This is true, though my focus is (usually) on OWL. But my of my work recently has been using very Clojure-esque Python, since I’m integrating with LLMs and vector databases, and other teams who are also working with these. That said, I would like to redo the open side of my work in SPARQL/OWL/SNOMED using Clojure. And yes @U0DCK21EJ, I’m using Stardog 🙂

❤️ 1
👀 1
Al Baker20:06:18

yep, that's where I was headed - and I appreciate @U051N6TTC's collaboration on stardog-clj and now as a customer 🙂 -- @U013CFKNP2R there's a stardog free tier now on stardog cloud, and probably need more though if you want to give SNOMED a go. When you're ready for that, I'll support you getting a larger tier trial instance. I've always wanted more SNOMED stuff going on, we use it for OWL reasoner tests, but not a lot of other stardog produced content and I'd love to change that

👍 1
Mark Wardle22:06:30

Thanks @U0DCK21EJ - I think there is an important need for mapping and transformation in health data. The OMOP CDM tries to do this with a 'standard' schema and standardised vocabularies to give 'maps' of one thing to another, but I think we would do better using a proper ontological basis for some of the inference/reasoning work, and actually trying to make sense of other subdomains such as health related geographic data etc. I'll have a look but I'm a beginner with RDF, OWL and related tech.

quoll22:06:10

Maps get tricky. I would dearly love to do a public mapping of SNOMED-CT to ICD-11, but the licensing terms from the WHO have explicitly forbidden this. I haven’t looked at the licensing specifics for ICD-10, but I worry that they’re similar. In the medication domain, RxNorm has its own SNOMED mappings, but the RxNorm model is a mess. BioPortal has an RDF representation for RxNorm, but if you care about semantics you wouldn’t touch it. There’s actually some interesting emergent structure in RxNorm when you represent it in RDF (well… there is if you put some effort into it). Other domains could use some public mappings to SNOMED too

Mark Wardle08:06:46

I’m surprised by the WHO as we already have ICD-10 maps. We have dm+d in the UK instead of RxNorm and its identifiers are SNOMED identifiers which is convenient but the challenge is dealing with external data with coding in different systems and versions and sense making. The UK drug extension gives relationships to the dm+d but does not include concrete values (yet) for drug dosing ingredients etc

flowthing08:05:45

Initial alpha release of https://github.com/eerohele/rad, a small, zero-dependency Redis client for Clojure.

👍 14
🎉 4
1
lukasz14:05:45

Ohhh this is great, I always wanted this type of command API for Redis, and ended up horribly wrapping Carmine to do something similar: https://github.com/nomnom-insights/nomnom.omega-red?tab=readme-ov-file#example at some point I started writing a layer on top of Jedis but run out of time

flowthing15:05:28

Glad to hear it! Yeah, I was originally spurred to make this when I realized Carmine's pub/sub support didn't quite meet my needs. So I tried both Jedis and Lettuce, but soon gave up when I saw how absurdly large their API surfaces were. Apples to oranges, obviously, but they're both like 100k lines of code, not counting dependencies. Rad, well, isn't.

lukasz15:05:36

oh yeah, Lettuce is very complicated. I looked at Redisson and seemed to be a bit more comprehensible, but also comes with a lot of baggage. I'll try Rad in one of my side projects and see how it goes metal

flowthing15:05:09

Nice, I'm very much interested in hearing how it goes. 🙂

namenu02:05:14

I were considering Carmine for a replacement of Celtuce, which is no longer supported. I don't use redis heavily, so zero-dependency sounds super appealing. BTW, if Rad is also aiming for a full featured client, won't it end up being similar to Carmine? What's the non-goal of Rad?

flowthing06:05:55

Someone asked a similar question over at Reddit. Here's a link to my reply: https://www.reddit.com/r/Clojure/comments/1cy4z6w/comment/l5acqz3

👍 1
flowthing06:05:20

But yeah, I'm not sure Rad aims to become much more fully-featured than it currently is. If you think it's missing something crucial, I can certainly consider filling that gap, time allowing.

👍 1
borkdude12:05:05

https://github.com/clj-kondo/clj-kondo: static analyzer and linter for Clojure code that sparks joy 2024.05.22 • https://github.com/clj-kondo/clj-kondo/issues/2323: New linter :redundant-str-call which detects unnecessary str calls. Off by default. • https://github.com/clj-kondo/clj-kondo/issues/2302: New linter: :equals-expected-position to enforce expected value to be in first (or last) position. See https://github.com/clj-kondo/clj-kondo/blob/master/doc/linters.mdhttps://github.com/clj-kondo/clj-kondo/issues/2307: import configs to intermediate dir • https://github.com/clj-kondo/clj-kondo/issues/1035: Support SARIF output with --config {:output {:format :sarif}}https://github.com/clj-kondo/clj-kondo/issues/2309: Report unused for expression • https://github.com/clj-kondo/clj-kondo/issues/2315: Fix regression with unused JavaScript namespace • https://github.com/clj-kondo/clj-kondo/issues/2304: Report unused value in defn body • https://github.com/clj-kondo/clj-kondo/issues/2227: Allow :flds to be used in keys destructuring for ClojureDart • https://github.com/clj-kondo/clj-kondo/issues/2316: Handle ignore hint on protocol method • https://github.com/clj-kondo/clj-kondo/issues/2322: Add location to warning about invalid unicode character • https://github.com/clj-kondo/clj-kondo/issues/2319: Support :discouraged-var on global JS values, like js/fetch

🎉 32
clj-kondo 7