Fork me on GitHub
#babashka
<
2021-08-28
>
borkdude12:08:45

@grzm and I are working on adding java 11 http client support to bb. In short that will enable you to do requests like:

(ns net
  (:import [java.net.http HttpClient HttpRequest HttpResponse$BodyHandlers]
           [ URI]))

(def req
  (-> (HttpRequest/newBuilder (URI. ""))
      (.GET)
      (.build)))

(def client
  (-> (HttpClient/newBuilder)
      (.build)))

(def resp (.send client req (HttpResponse$BodyHandlers/ofString)))
[(.statusCode resp) (.response resp)]
and offers async, websocket, etc. support. The only trade-off there is: it does add size to the image. Currently about 4.8mb. The question is: is this worth adding compared to the increase in size? We could consider dropping the httpkit client in the future to get some size back (but that one is only about 1mb or so). It will be a breaking change, we will notify users for at least 6 month or so before doing so. After adding support via interop, we could start building some convenience in a babashka.http-client namespace. Please respond in a 🧵 . I might also make a Github discussions topic about it after gathering some feedback here.

borkdude18:08:53

@U3L6TFEJF

$ bb -cp src -e "(require '[java-http-clj.core :as http]) (:status (http/get \"\"))"
200
This is with bb from the jdk-11-http-client branch and with your lib with specs commented out

schmee18:08:18

amazing! 😄

schmee18:08:33

I’ll make a release with the specs moved tomorrow :thumbsup:

borkdude18:08:35

I think the specs will work with spartan.spec but it'd be nice if those can be moved to an optional namespace anyway as this will improve loading time in bb

schmee18:08:53

only one question: would that be considered a breaking change? :thinking_face:

borkdude18:08:09

$ time bb -cp src -e "(require '[java-http-clj.core :as http]) (:status (http/get \"\"))"
200
bb -cp src -e    0.04s  user 0.02s system 65% cpu 0.085 total
Pretty fast too

🎉 2
borkdude18:08:42

@U3L6TFEJF Well, don't remove the specs but move them to, say, java-http-clj.specs

borkdude18:08:52

and then advice people to require that namespace if they want to use those specs

borkdude18:08:00

I don't consider that breaking

borkdude18:08:26

In the future bb will also support clojure.spec but not in its alpha state

schmee18:08:28

that was my plan, I agree that that shouldn’t be a breaking change :thumbsup:

borkdude18:08:57

one thing that your lib has over telex is that it's more minimal so supported in bb more easily. the telex one has more deps on other exoscale deps

schmee19:08:09

excellent, that was one of the goals with the lib and I’m happy to see that it helps facilitate things like use in Babashka 😄

borkdude20:08:22

It does. Would you mind some clj-kondo inspired cleanup? E.g. the Executor class (and some others) aren't really used (and not in bb yet). Commenting out Executor makes it work.

borkdude20:08:34

The websocket.clj namespace can benefit from the same approach

borkdude20:08:43

When I move the specs aside that also loads in bb

borkdude20:08:05

Haven't tested it at runtime though (because I don't know an example of the top of my head)

schmee20:08:54

I’ll take a look! :thumbsup:

borkdude20:08:58

I can also link you to a bb binary for testing, if you let me know your os

schmee20:08:27

branch updated :thumbsup:

schmee20:08:16

note to self: reserve time to play around with clj-kondo 😄

borkdude20:08:34

yep, both work now:

borkdude@MBP2019 /tmp/java-http-clj (separate-spec-ns) $ bb -cp src -e "(require '[java-http-clj.websocket])"
borkdude@MBP2019 /tmp/java-http-clj (separate-spec-ns) $ bb -cp src -e "(require '[java-http-clj.core])"

borkdude20:08:11

@U3L6TFEJF what editor are you using? I can give you some help with that if you want

borkdude20:08:24

also, let me know if you want to test this locally with the work in progress bb

schmee20:08:39

I’m using Vim + Conjure

borkdude20:08:04

Ah I see. neovim by any chance?

borkdude20:08:37

Ah then you're in for a treat with clojure-lsp probably as neovim (0.5.1 or so?) has an lsp client built in

borkdude20:08:52

and clojure-lsp provides nice features like navigation, etc. but also comes with clj-kondo

schmee20:08:32

nice! I have it on my backlog to look into all the nice Neovim 0.5 features but haven’t gotten around to it yet 🙂

schmee20:08:11

great that the lib works now! I’ll do some housekeeping and then push a new release during the day tomorrow :thumbsup:

schmee20:08:30

thanks for your advice and your interest in java-http-clj 😄

borkdude20:08:52

awesome thanks. and when the new bb comes out, we could add a note to the readme of your iib: babashka compatible

borkdude20:08:43

I will add your lib to bb CI as well to ensure it loads also after upgrading

🙏 2
schmee20:08:46

is there an official Babashka badge you can put in READMEs?

borkdude20:08:20

I don't think there is, but that's a cool idea :)

lispyclouds05:08:39

@U3L6TFEJF you can try out my neovim 0.5+ config, all setup for clojure+lsp+conjure and lua powered! 😄 https://github.com/lispyclouds/dotfiles

lispyclouds05:08:43

@U04V15CAJ @U3L6TFEJF here is a https://img.shields.io/badge/babashka-compatible-green?style=flat-square&amp;logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNDcyIDE0NzIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOTk1LjkxMSAxMTkzLjg5QzExMTAuOTMgMTExMi4zOCAxMTg2IDk3OC4yMDYgMTE4NiA4MjYuNUMxMTg2IDU3Ny45NzIgMTAxNCAyNTQuNSA3MzYgMTEzQzQ2MC41IDI2MiAyODYgNTc3Ljk3MiAyODYgODI2LjVDMjg2IDk3OC4yMDYgMzYxLjA3IDExMTIuMzggNDc2LjA4OSAxMTkzLjg5QzQ3MS45ODMgMTE5NC40NCA0NjcuOTQ5IDExOTUuMTQgNDY0IDExOTZDMzc2LjYxMSAxMjE1LjA3IDI3MCAxMzU5LjA1IDI3MCAxMzU5LjA1SDUzNEM1ODAuOTcyIDEzNTkuMDUgNjI1LjYzMSAxMzQxLjQxIDY2MC45NTYgMTMyMS42MkM2NzguMTE1IDEzNDQuMzIgNzA1LjM0NCAxMzU5IDczNiAxMzU5Qzc2Ni42NTYgMTM1OSA3OTMuODg1IDEzNDQuMzIgODExLjA0NCAxMzIxLjYyQzg0Ni4zNjkgMTM0MS40MSA4OTEuMDI4IDEzNTkuMDUgOTM4IDEzNTkuMDVIMTIwMkMxMjAyIDEzNTkuMDUgMTA5NS4zOSAxMjE1LjA3IDEwMDggMTE5NkMxMDA0LjA1IDExOTUuMTQgMTAwMC4wMiAxMTk0LjQ0IDk5NS45MTEgMTE5My44OVoiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcikiLz4KPGNpcmNsZSBjeD0iNzM1LjUiIGN5PSI4NTIuNSIgcj0iMzExLjUiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik00NDMgNzUwLjQxN0M2NjIgNzY1Ljg2NiA3OTEuMzgyIDcxMi4zODggODgxIDU3OS44ODFDODgxIDU3OS44ODEgNzA4LjI5MyA1MjEuNjQ5IDYwMy4yNDQgNTc5Ljg4MUM0OTguNTUgNjM3LjkxNiA0NDMgNzUwLjQxNyA0NDMgNzUwLjQxN1oiIGZpbGw9IiNCNEI0QjQiLz4KPHBhdGggZD0iTTEwMzkuOTkgNzQ4LjI4MkM5MTQuODYyIDczNC43NDUgODAzLjI2NCA2OTQuMTM1IDc1MCA1NDFDNzUwIDU0MSA4NjAuNjMzIDU2Ni4yNzIgOTcyLjM1NSA2NjguMTAxQzEwODguMzkgNzczLjg1NyAxMDM5Ljk5IDc0OC4yODIgMTAzOS45OSA3NDguMjgyWiIgZmlsbD0iI0I0QjRCNCIvPgo8Y2lyY2xlIGN4PSI3MzUuNSIgY3k9Ijg1Mi41IiByPSIzMTEuNSIgc3Ryb2tlPSIjMEEwMDAwIiBzdHJva2Utd2lkdGg9IjQwIi8+CjxwYXRoIGQ9Ik03OTcgNzE5SDY3NEw3MDQgNzQ5VjgzOUM3MDguNSA4MDkuNSA3NjQuNSA4MDguNSA3NjcuNSA4MzlMNzc1IDc0OUw3OTcgNzE5WiIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTM1MS4xMTcgNzU5QzM1MS4xMTcgNzM2LjkwOSAzNjkuMDI2IDcxOSAzOTEuMTE3IDcxOUg2NzYuMDE4QzcwMC4yIDcxOSA3MTguODUyIDc0MC4yOTIgNzE1LjY3IDc2NC4yNjRMNjkwLjkxIDk1MC43NjRDNjg4LjI3IDk3MC42NDYgNjcxLjMxNCA5ODUuNSA2NTEuMjU4IDk4NS41SDM5MS4xMTdDMzY5LjAyNiA5ODUuNSAzNTEuMTE3IDk2Ny41OTEgMzUxLjExNyA5NDUuNVY3NTlaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNNzU2LjAxMiA3NjQuMjY3Qzc1Mi44MjggNzQwLjI5NCA3NzEuNDgxIDcxOSA3OTUuNjY0IDcxOUgxMDgwQzExMDIuMDkgNzE5IDExMjAgNzM2LjkwOSAxMTIwIDc1OVY5NDUuMDk2QzExMjAgOTY3LjE4NyAxMTAyLjA5IDk4NS4wOTYgMTA4MCA5ODUuMDk2SDgyMC4zODFDODAwLjMyNSA5ODUuMDk2IDc4My4zNyA5NzAuMjQ0IDc4MC43MjkgOTUwLjM2Mkw3NTYuMDEyIDc2NC4yNjdaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTAyNCA5NTJWOTIxLjQ3SDEwMTMuNzFDMTAwNy4wMyA5MjEuNDcgMTAwMi41OCA5MTYuNzUyIDEwMDAuMzUgOTA5LjgxM0w5NTguMDY0IDc4Mi42OTdDOTU1LjI4MiA3NzQuNjQ5IDk1MS45NDQgNzY4LjgyIDk0Ny40OTIgNzY0LjM3OUM5MzkuMTQ2IDc1NS43NzUgOTI4LjI5NiA3NTMgOTE2LjA1NCA3NTNIOTAyLjdWNzg0LjkxOEg5MTEuNjAzQzkxOS4xMTUgNzg0LjkxOCA5MjQuOTU3IDc4Ny42OTMgOTI3LjQ2MSA3OTYuNTc1TDkzMy4zMDMgODE3LjExM0w4ODEgOTUySDkxOS4xMTVMOTUwLjU1MyA4NjMuMTg1TDk2Ny4yNDUgOTE2Ljc1MkM5NzMuNjQ0IDkzNy41NjggOTg0LjQ5NCA5NTIgMTAwOC45OCA5NTJIMTAyNFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik01OTAgOTUyVjkyMS40N0g1NzkuNzA2QzU3My4wMjkgOTIxLjQ3IDU2OC41NzggOTE2Ljc1MiA1NjYuMzUyIDkwOS44MTNMNTI0LjA2NCA3ODIuNjk3QzUyMS4yODIgNzc0LjY0OSA1MTcuOTQ0IDc2OC44MiA1MTMuNDkyIDc2NC4zNzlDNTA1LjE0NiA3NTUuNzc1IDQ5NC4yOTYgNzUzIDQ4Mi4wNTQgNzUzSDQ2OC43Vjc4NC45MThINDc3LjYwM0M0ODUuMTE1IDc4NC45MTggNDkwLjk1NyA3ODcuNjkzIDQ5My40NjEgNzk2LjU3NUw0OTkuMzAzIDgxNy4xMTNMNDQ3IDk1Mkg0ODUuMTE1TDUxNi41NTMgODYzLjE4NUw1MzMuMjQ1IDkxNi43NTJDNTM5LjY0NCA5MzcuNTY4IDU1MC40OTQgOTUyIDU3NC45NzcgOTUySDU5MFoiIGZpbGw9IndoaXRlIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXIiIHgxPSI3NTIiIHkxPSIxMTMiIHgyPSI3NTIiIHkyPSIxMzU5LjUyIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiNFNDFGMjYiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjQjcwMDAwIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg== i put together, hope its a starting point!

deleted19:08:06

is clojure.tools.logging.readable something you'd be interested in including in babashka? https://github.com/clojure/tools.logging/blob/master/src/main/clojure/clojure/tools/logging/readable.clj