off-topic 2025-10-13

What is best library for using google apis, google sheets in particular ,that handles server to server auth well. I've used gmail using happygapi in client side web app before, but in server to server I'm not sure browser dependency is a good idea or possible for production. The code/readme also relies on service.json but google cloud downloaded credentials.json keyfile for service account (maybe google just changed the name later ๐Ÿคท๐Ÿผ ) In nodejs, we have a straightforward approach which is perfect for my use case. Do we something similar in clojure? For some reason google https://developers.google.com/workspace/sheets/api/quickstart/java. Copilot generated clojure code based on it but it keeps running into a preconditions.java not satisfied error :(

const auth = new google.auth.GoogleAuth({
    keyFile: "credentials.json",
    scopes: [""],
});


const sheets = google.sheets({ version: "v4", auth });

So, what are the specific problems that you have with the Java guide? It seems that the majority of steps are pretty much irrelevant. Unless they require something like JVM modules or an extra compilation step somewhere, all you need is the right code and credentials.json on your classpath, that's it. But yeah, the code is more complicated than it should be, in a typical Java fashion. Two builders, a transport, a flow, a receiver. :D

๐Ÿ˜„ 1

Here's a couple of libraries found via http://grep.app: โ€ข https://github.com/SparkFund/google-apps-clj โ€ข https://github.com/pvgomes/clojure-google-sheets But no clue whether they're up to date or not. I myself would definitely just use the Java SDK. While the number of concepts is larger than it could be, it will all be under a hundred locs so not a huge deal.

I ended up using Google-apps-clj and that worked out for my use case. Will check the other one. Thanks @p-himik

๐Ÿ‘ 1

Anyone here use some kind of internal company-forum setup that they'd recommend? Time and again I see the same questions come in through slack at $JOB, and it'd be great to have a structured Q+A/forum-post that I can point to/have people ask questions in first. Was looking at Discourse, because I see it used everywhere, but I also just as frequently see it decried by others. We use confluence for documentation, but it's only really used for set-in-stone docs and onboarding atm, and is otherwise inconsistently referenced/updated...

Also interested in this question. If there was more interest at my company for adding another communication tool I might try https://twist.com/. I haven't ever used it for real though. discourse also seems like it would probably/maybe be fine? since you're specifically thinking about Q&A, maybe stack overflow for teams would be worth looking at? (I also haven't tried that though.) for myself, I've been wondering if I could make some kind of internal on-prem app that would ingest stuff from slack/asana/notion and try to present it in some sort of unified forum-ish view.

We also use confluence and have taken to writing "blog posts" for these sorts of things.

Thereโ€™s a new one from 37 signals thatโ€™s one of their buy once software that I would look into

๐Ÿ‘€ 2

That's more of a chat-app though, which I'm sure is nice compared to slack (most things are, imo), but the problem with chats-as-information-banks (assuming chats are even stored long-term to begin with) is that they're too, well, 'chatty'. I'm aware that this is ultimately a cultural thing, but Slack doesn't have the structural/moderation tools that would help us coalesce our conversation-stew into more topic-based info.

though this invites the obvious criticism/problem of "stale docs," what's wrong with an old-fashioned wiki?

I think maintaining a knowledge base in as-close-to-plain-text-as-possible is a good idea because it's simple, transferable, minimizes burden of understanding, and for those that are so inclined, they can dump it all into an LLM

A very fair question, the most honest response I can give is: it's a bit more technical/overhead than our people can handle. The number of people in our company is around 16-18, and thats spread somewhat-evenly across 4 business units, 'tech' being one of those 4, and obviously very broad. I'd trust our tech-side to maintain a wiki for tech-centric things, but there's a lot of implicit business/industry-rules that get added to the mix for everything else when other teams get involved. Example: "we use tool X to do Y, but for clients like Foo we instead have to use process Z". This kind of information is best 'administered' by the team that knows about it, but they frankly aren't great at recording info like that. Like I said, that's ultimately a cultural problem, a forum-like solution is my hope for structured info dissemination that's still somewhat 'natural'/low-overhead enough for our less-technical employees

Zulip, 100% ... ask the clojurinas zulip people how useful and flexible it is as a forum as well as its integrations with other stuff like wikis

i am also on the Recurse center zulip, where Q&A formats abound ... we have some threads going for months and even years ... and mods can join threads / split threads etc (by moving messages between threads)

and that is why i picked Zulip to run my "writing for nerds" workshops

plus, its open source software, so if you ever want to self host it, its possible

one trick to visuallty connect confluence and zulip is to set up an api hook to create a zulip topic for a confluence page ... stick an action button for the api call in each confluence page, using a confluence wiki page template

I use Confluence / Notion / etc. to capture knowledge, including FAQs. The 'playbook' and 'runbook' style specific guides are a long standing way of capturing common tasks (which usually answer common questions). But its a cultural thing. If people don't value succinctly writing things down to share with others, no tool will work.

Does anyone code with Cursor? I really enjoy it, it's been a productivity booster. I don't know if I can control the underlying model that is queried, it seems to do an auto-select. Have you tried any of the other IDEs w/ LLM chat built-in? If so, what do you reckon?

I'm not a Cursor user myself, but I've seen other people use it, you can select the model from a drop-down - https://cursor.com/docs/models#auto

I believe they removed the selection of model from more recent

@v1nc3ntpull1ng Click on the pencil

๐Ÿ˜‚ 1
โœ๏ธ 1

I use cursor and find it works better combined with clojure-mcp. Obviously garbage in = garbage out, it helps when you know what you're doing and give decent instructions.

You're a genius!

๐Ÿ˜› 1

FWIW, I use VS Code + GitHub Copilot, mostly with Claude Sonnet 4 in agent mode these days. I tried gpt5 but it's less predictable, although it has also done some good one-shot stuff for me. We have the $19/month GitHub plan at work for Copilot -- but GitHub are changing how premium requests are handled next month so we'll see how that affects things.

Iโ€™ve tried Cursor. I wish it would stick to the instructions. Iโ€™ll say: add a button that says โ€œEditโ€ by the title. Cursor: Okay, Iโ€™ll add a button and set up an edit page as well as the logic to do the edits, also did you know that the text on a completely different page should be in German? Do you want a martini? I could really use a martini.

One martini, coming right up! I also took the liberty of changing several unrelated files and here's a checklist of all my accomplishments. Yeah I have to create a spec sheet for each "sprint" and comb it over. Sometimes I run into problems because the LLM decided that sequential IDs are better than UUIDs or goofy things like that, and I gotta rewind (discard progress via git)

๐Ÿ‘ 1

@v1nc3ntpull1ng You can ask these sorts of questions in #ai-assisted-coding too.

to be sure that I skimmed this article in the most cursory manner, but isn't this a bit of a loose application of the term "formally verified"? When I think of formally verified code, code produces by the likes of Coq (I guess it's Rocq now) comes to mind.

The article is talking about formal verifications using solvers like Coq, but you can also handwrite such proofs and manually assess them.

But I thought it was a good example, where even the most advanced form of static verification, beyond what any standard language type checker normally does, and still in something as trivial as left pad it cannot actually make the program correct for sure. And I find the call outs it mentions, wrong assumptions, wrong environment, wrong specification, and so on. Now say you ask yourself, what could help reduce these errors? If even formal proofs cannot do anything about them? Personally I find this is where running the program and manually verifying it comes in handy, or setting up runtime test. You have to move away from static verification to runtime dynamic verification.... Like the REPL !

I don't know anything about formal verification, but my intuition is that when it comes to writing code intended for commercial usage, a good balance between static analysis (of some form or another) and quick feedback cycles achieved through a combination of 1) a language that privileges productivity, 2) some kind of interactive evaluation for use by the developer, 3) an ability to involve the customer, is the right place to start. I think the 3rd point is important because while ostensibly orthogonal to the first two, it brings two benefits as far as I can see: being able to describe something technical to someone is a way to increase understanding of that thing (and notice errors in one's understanding) and it allows other people with fresh eyes to participate in that process.

As for the first two things, I think the jury is out: comfort and familiarity will always be the dominant considerations of tooling, and I think you'd be hard pressed to demonstrate unequivocally that dynamic languages are more "productive" than static, for some definition of productive

I think Clojure is a good example of a dynamic language that achieves some or all of these things, and I think OCaml is to me a good candidate in the category of languages with robust type systems