Thanks for the feedback! I will update the blog article regarding Babashka library support, I missed that page you are referring! I advertised the blog article in my LinkedIn account. I don't use Twitter. But if you feel the blog article is good enough for sharing, please feel free to share it!
Changed the text regarding Babashka built-in namespaces. Thanks for the feedback!
Thanks π I shared the article on Twitter. On the libraries page there is also a library for psql. Also we have a pod so you can directly use jdbc.next and honeysql with Postgres
Ok. Good to know. I'll use the library support for sql next time!
At one point I had the JDBC driver for PostgreSQL included in babashka, so you could use next.jdbc directly from babashka, but I wasn't sure if this was the right approach, since I maybe would have also include drivers for other databases and this would maybe bloat babashka. But it is still possible to compile babashka with postgres support using a feature flag as well. So, several options. But your basic approach is also valid, whatever works :)
Sure. Happy to share the awesome stuff you and @djblue have made π
To be honest I hadn't used clojure.datafy that much myself, but I'm mind blown now ;)
Related to datafy, do you know if the pod edn format preserves metadata? I tried some of the https://github.com/babashka/babashka-sql-pods examples but wasnβt seeing any of the metadata next-jdbc puts on its results for datafy
Hmmmmm
I wasn't aware of the metadata on that and I think you need to turn this on explicitly, it's probably not currently
Even if there is metadata support, not sure this would work because the metadata it puts on are protocol fns
yeah, I think this doesn't work with pods probably
well maybe we could make it work
a pod can also define client side functions
Example metadata:
#:clojure.core.protocols{datafy #object[next.jdbc.result_set$navize_row$fn__17145 0x4c1ea0ab "next.jdbc.result_set$navize_row$fn__17145@4c1ea0ab"]}
oh functions
we could hack around that by representing the function using a name, but if it's a closure then that won't work
ah yep
can you point me to the place where next.jdbc attaches that metadata?
if everything was in babashka itself, it would work. I'm partial about including only postgres, but we could
it's still available behind a feature flag
if you compile bb on your own system
https://github.com/seancorfield/next-jdbc/blob/97332c1a1a7f7b630d9909ff05fe8928cc644d62/src/next/jdbc/datafy.clj#L126-L152 is one place where datafy support is added
Forgot about the feature flag. Iβll try that π Iβm definitely not advocating for bloating bb core. It is interesting to see where podβs limitations are
I'm very tempted to add postgres support, since it's so cool ;)
ah yeah, so it's a closure over this
What am I missing? It is a library right? So I don't have to install a pod, correct?
cat deps.edn | bb -cp
clojure -Spath -Sdeps '{:deps {djblue/portal {:mvn/version "RELEASE"}}}'` -m portal.main edn`
clojure.lang.ExceptionInfo: Could not resolve symbol: realized? [at portal/http_socket_server.clj, line 65, column 20]
@mmz Are you using bb 0.2.0?
That one is required
let me check ... bb -v
?
$ bb --version
babashka v0.2.0
Works now! (did a brew update
before testing ... should have done a brew upgrade babashka
:face_palm::skin-tone-3: )
This is indeed pretty awesome! :thumbsup::skin-tone-3:
I just got a new mac from work and I cannot run bb, it tells me itβs an unknown developer. Any work around?
Got this working by turning off gatekeeper, (sudo spctl --master-disable) then running bb, and turning gatekeeper back on (sudo spctl --master-enable).
Cool. Maybe this should be documented in the README?
I think you can alternatively use sudo xattr -d com.apple.quarantine path-to-bb
I actually downloaded it manually I did not realize there was a brew for it. Testing brew now to see if I have the same issue. New to mac so I just did what I do on linux.
Yeah my manual download is what caused the problem. I think the readme is good, it does not happen using brew which is your recommended way to install it. I should have read the readme
ok!
@kari.marttila Your blog post is now featured on the front page of HN :)
1π¦Heh, I'm a dinosaur, what's HN? π
Hacker News
Aah... I try to find it. π
At Metosin they didn't believe that I don't play video games. π (Actually I started playing video games last spring.) I don't use Twitter. I guess I'm a bit of a dinosaur. π
2πI also don't play video games, I like playing with Clojure better ;)
Heh, me too! π My kids are already adults and I have a lot of free time - nice to study Clojure, do these exercises and write blogs in my study room.
I see it! The news is at #10.
Thanks for telling me, you made my day. π
Kind of off topic, but after 55 years of not playing video games, a few hours ago my mum became addicted to Beat Saber, a VR (virtual reality) game
Hi BB team! After reading this article https://dev.to/prasannagnanaraj/i-just-created-a-todo-cli-with-clojure-1133, when I saw the code, I couldn't help but think it was perfect for an Babashka usage. So here is the gist: https://gist.github.com/PrestanceDesign/d2f6ba223e418298618966937062dda0
#!/usr/bin/env bb
(require '[clojure.string :refer [split]])
(require '[<http://clojure.java.io|clojure.java.io> :refer [writer reader]])
(require '[clojure.pprint :refer [print-table]])
(def file-location (System/getenv "TODO_LOCATION"))
(defn now [] (new java.util.Date))
(defn add-content
"appends content to todo file"
[file-location text-content]
(with-open [file (writer file-location :append true)]
(.write file (str text-content "\t" (now) "\n"))))
(defn print-helper
"Converts line content to a row obj"
[line-content]
(let [[todo created_at] (split line-content #"\t")]
{:todo todo :created_at (or created_at "UNKNOWN")}))
(defn read-content
"reads content from todo file"
[file-location]
(with-open [file (reader file-location)]
(let [file-content (slurp file)]
(print-table
(map print-helper
(split file-content #"\n"))))))
(let [args *command-line-args*]
(when (nil? file-location)
(throw (AssertionError. "empty $TODO_LOCATION")))
(case (first args)
"a" (do
(add-content file-location (second args))
(read-content file-location))
"ls" (read-content file-location)
(println "Choose either a or ls")))
1Excellent :) Maybe I should also open source my own TODO app at some point
8