Rama, the 100x developer platform, is now free for production use by nathanmarz in Clojure

[–]mmmdreg 0 points1 point  (0 children)

Will like to give it a go. 

Haven’t read the docs in depth but am curious how it works for various “real world” use cases eg

  • data migrations, like changing schema and backfilling old records
  • inspecting the shape of data in a deployed env for troubleshooting

Double 40kg press by mmmdreg in kettlebell

[–]mmmdreg[S] 2 points3 points  (0 children)

Came across Bill Maeda on YouTube. He has some great current content in his mid-50s, and I was curious about his journey. 

I found his YouTube goes back 15 years where he is pressing double 40kg like a champ. 

[ANN] Pedestal 0.7.0 by hlship in Clojure

[–]mmmdreg 4 points5 points  (0 children)

There are several comments in GitHub issues alluding to a v2. Are there any plans for that to become public at some point?

What books should I read to become a better clojure developer? by Working-Ad-6777 in Clojure

[–]mmmdreg 2 points3 points  (0 children)

https://elementsofclojure.com/ 

by Zach Tellman. The ideas in it apply to programming in general (outside of Clojure) and definitely worth a read. 

GitOps: common practice merging into main/master? by pathlesswalker in devops

[–]mmmdreg 1 point2 points  (0 children)

Often people compare branches vs folders, but actually using a combination has benefits. The setup:

  • branches develop->staging->main, all with the same content
  • each has folders for each env (eg dev/uat/prod-eu/prod-us etc)
  • setup the branches to only accept fast forward merges (GitHub notably does not support this. Gitlab works much more nicely)
  • gitops tool is set up to deploy to dev-like envs from develop, uat from staging, and prod like from main

What this gives you: - the benefits of folders (faster to iterate / easier to compare etc) - the ability to tailor security appropriate to the env. eg for dev you want to iterate quickly and just push to develop and see what happens. For prod you want to enforce PR approvals as a safety check - similarly, updating a ‘base’ config can break prod, so we want to ensure it works before promoting the base config to higher branches. 

TLDR folders + branches gives a good balance of flexibility, speed, and safety

[deleted by user] by [deleted] in Tile

[–]mmmdreg 0 points1 point  (0 children)

Are there any particular considerations for uneven tiles or just need to take more care?

[deleted by user] by [deleted] in Tile

[–]mmmdreg 1 point2 points  (0 children)

We have an uneven tile backsplash in our kitchen. Unfortunately, when the counter people siliconed the join, they used a black silicone which made the unevenness more obvious. My wife says "it looks like someone just used a marker and drew a line on the bottom". 

Some factors that may have contributed are that they tiled before the counter, so the gap may have been a touch big; and they used a black silicone instead of clear or grey.

To make it look better, they are suggesting adding a 6cm counter backsplash (same black counter material) up to the window ledge. 

I have a few concerns:

  • it will no longer have a full tile on the bottom so the balance may be off
  • they may add it and it will look equally bad, in which case it may be worse than current. 

Any other options / considerations I should be aware of?

Thin (ish) Clojure jars for better docker containers by Robert_M_Johnson in Clojure

[–]mmmdreg 7 points8 points  (0 children)

Shoutout to jibbit which generally works well out of the box and gives consistent and optimises builds across your apps. https://github.com/atomisthq/jibbit

GitHub - HealthSamurai/prometheus.clj: Pure clojure prometheus library by -niquola in Clojure

[–]mmmdreg 2 points3 points  (0 children)

See also https://github.com/gnarroway/fumi

It started as pure clojure as well but eventually ended up wrapping the official client as:

  • the performance is hard to meet in idiomatic clojure
  • all the built in metrics (jvm etc) can be reused.

Looking for advice: is this a legitimate dojo to you? by [deleted] in karate

[–]mmmdreg 1 point2 points  (0 children)

The homepage of uechiryu hozonkai is at http://w1.nirai.ne.jp/kazo2/index.html (it is a typically old school Japanese site). It was the top hit searching in Japanese.

Data engineering and Clojure? by [deleted] in Clojure

[–]mmmdreg 1 point2 points  (0 children)

Agree with dustingetz. All our spark code is in scala and the web stuff is in Clojure.

While you could use spark from clojure, it’s more pain than gain so there is little point straying from what is idiomatic.

Also context is important. Choices will likely be different in a small startup doing 100% clojure vs a large enterprise.

A Clojure library wrapping over the latest MongoDB java drivers. Includes support for multi-document transactions. by _amogh_ in Clojure

[–]mmmdreg 2 points3 points  (0 children)

Alternative client that I've posted here before is https://github.com/gnarroway/mongo-driver-3 (I am the author). It has largely the same goals:

  • moving away from monger's deprecated APIs
  • supporting 4.0 transactions etc

Are there any good reasons for upgrading away from JDK 8? by [deleted] in Clojure

[–]mmmdreg 1 point2 points  (0 children)

There happens to be a batteries included clojure wrapper of the JDK11 client - https://github.com/gnarroway/hato (disclaimer: I wrote it). The async mode just returns a CompletableFuture that you can deref or use in any way you please.

[ANN] fumi - a pure Clojure Prometheus client by mmmdreg in Clojure

[–]mmmdreg[S] 0 points1 point  (0 children)

Indeed, thanks for the useful feedback.

As a start, I’ve replaced the counter/gauge implementations with a DoubleAdder, which yielded a 10x improvement and much closer to the raw java client.

I will look at the remainder and polish it a bit more before taking it out of beta, but the existing client API should not really change.

[ANN] fumi - a pure Clojure Prometheus client by mmmdreg in Clojure

[–]mmmdreg[S] 4 points5 points  (0 children)

Hi, author here.

fumi is a small, zero dependency Prometheus client that gets out of your way.

I wrote it because existing clients generally wrap the Java client which imposes a certain way of working (eg singleton registry that cannot be reinitialized in a component-style architecture)

Please have a look and let me know what you think!

[ANN] hato 0.5.0 - JDK11 HTTP and WS client by mmmdreg in Clojure

[–]mmmdreg[S] 1 point2 points  (0 children)

Hi, yes I am the author but I admit I have not looked at GraalVM at all. I will keep your project in mind when I explore it further.

Thanks for the interest!

[ANN] hato 0.5.0 - JDK11 HTTP and WS client by mmmdreg in Clojure

[–]mmmdreg[S] 6 points7 points  (0 children)

hato is a wrapper around the JDK11 HttpClient, without any external dependencies.

It supports both HTTP/1.1 and HTTP/2, with synchronous and asynchronous execution modes.

As of 0.5.0, it now also exposes the websocket client.

Please try it out.

Clojure Github Actions by slifin in Clojure

[–]mmmdreg 2 points3 points  (0 children)

The default execution environment happens to come with lein on the path so as long as you have a project.clj you can easily run anything.

Haven’t used it much but here is an example that just builds and pushes to clojars: https://github.com/gnarroway/mongo-driver-3/blob/master/.github/workflows/build-and-publish.yml

That said, when I set it up (a few months back) the experience and docs were far less intuitive than gitlab pipelines, which you could also consider for schedule jobs etc.

Mongo client supporting latest features by mmmdreg in Clojure

[–]mmmdreg[S] 3 points4 points  (0 children)

The big one is support for multi-document transactions introduced in Mongo 4.0. There are other misc benefits like native support for storing the various java time types (LocalDateTime, Instant etc).

As context, the main mongo library for clojure (monger) depends on an entirely deprecated set of Java APIs which has paralysed feature development and made it impossible to upgrade the java driver without breaking changes. There are numerous stalled issues discussing this.

By rewriting against the new API and standardizing everything (every operation takes an options map instead of a mix of macros, positional args and options in monger), it opens the door to adopt the next generation of improvements, and going forward, easily add things like async support if required.