Fork me on GitHub
Filip Strajnar00:02:04

@seancorfield I've noticed on discord you've developed software in Java, Groovy and Scala and eventually Clojure. As I assume Clojure is your long term choice nowadays, I'm curious if you ever miss static typing / compile time checks

Filip Strajnar00:02:05

I'm asking for your personal opinion, and maybe any way to mitigate certain disadvantages in a dynamically typed language


@filip.strajnar I do not miss it. That said, I think if I couldn't work in Clojure, I might try to find work in Kotlin which I learned a few years back but haven't had a chance to build anything serious with. I quite like the nullability-in-the-types aspect of that.


I find Java too verbose and its type system annoying (because it isn't powerful enough). I find Scala too cryptic at times and its type system annoying (because it is too complex -- maybe Scala 3 improves things but I think Scala just has stuff I find fundamentally frustrating/annoying, e.g., implicit). I quite liked Groovy for the balance it had between Java and more dynamic languages.


I think Scala 3 is probably more cryptic than Scala 2, as they added more features... For example, I can see indentation-based blocks mixed with braces-based blocks being a problem hard to debug...


Why am I not surprised... But maybe Scala 3's type system is simpler? (he wondered, hopefully) Mind you, at this point I don't think I could ever go back to Scala. It was fascinating to me as a language designer/implementor myself but I did not enjoy programming in it. The conferences and user groups were really interesting though...


What are the "certain disadvantages" you have in mind?

Filip Strajnar00:02:43

mostly compile time warning/errors, statically typed languages can go a long way in preventing a lot of human error, especially from my experience (which is no doubt significantly lesser than yours). most notably I'd point out that statically typed languages (as a side not I'm employed working in C#, which I'm used to but I don't like very much) allow me to do a lot without looking at documentation, as the type system is usually (if used correctly) mostly self documenting, and I get swift feedback from IDE as I type my code in case I make a silly error. some languages particularly in FP family go even further and significantly limit runtime exceptions with Maybe monads and constructs alike (example haskell), and some even claim to remove all possibilities of runtime exceptions (Elm,Idris)

Filip Strajnar00:02:23

in C# and TS (and sometimes unfortunately JS), exceptions are often hidden from me, and are harder to resolve than a mistake of putting the wrong time and IDE warns me in effectively real time

Filip Strajnar00:02:24

from very limited experience with clojure, those issues were quite rare, which I would attribute due to strong immutability (which is great), and quite simple sintax (Lisp), but it's also only fair to mention i used very external libraries which are often important on serious projects


@filip.strajnar I think you get a lot of that sort of support in Clojure via LSP/clj-kondo and having a connected REPL so the editor integration can give you code insight on function calls etc.


I think also, if you have a good workflow with the connected REPL, you're testing a lot more things as you build your functions and can avoid a lot of mistakes that might otherwise get caught only later in testing or production?


Nobody: Me confronting the folly of having proposed yet another conference talk: Posting it here because: • it emerged from a conversation with whip-smart fellow Clojurists whom I've been goading about speaking publicly, • because the conference talk in question is for Clojure newcomers, and • because it looks so patently absurd when placed in context of the absolute rock stars listed around it: (scroll down to "Speakers"). The post speaks to this last point in particular.

❤️ 4

Love it! Yup, as someone who ended up being a regular conference speaker around the world during the '00s, I totally identify with all of this. Especially the last minute "refactoring" of the talk (one time I was "struck by inspiration" during the lunch break before my 1 pm talk -- and completely rewrote my talk instead of eating lunch and thus ended up giving a brand new talk with zero rehearsal that no one in the conference org team had even seen... because it seemed like a good idea with 60 minutes left before I went on stage! 🤯 )

💜 4

haha that's hilarious and so relatable :)


Great post !

gratitude 1

I love your blog @U051MHSEK, great post as always (I'm on step 4.)

gratitude 1

Thank you :) (I'm on step 4 too!)

Fahd El Mazouni11:02:01

@seancorfield sorry for tagging you but I'd love to see it if you have a link to a recording


@U9W44J4RW it was years ago, at an Adobe conference, and I don't remember whether it was recorded. Aside from my RDD talk to London Clojurians I haven't spoken at a conference in about a decade now.




Anyone else find the number of tabs you have open directly indicates how annoying the problem you are working on is ?

👍 1

I see you're still not quite happy with Azure. :D I always have a 100+ tabs open - regardless of what I'm working on. I treat it as a backlog of sorts. Things to read, to watch, to listen to.


Im trying to create a workflow in a github action that will use a cert stored in azure key vault to sign the result of building this project.


I got it working no problem with the cert stored as a secret in github secrets, but apparently azure key vault is better

Lennart Buit18:02:46

I garbage collect my tabs, if I have around 40 and the icons start disappearing I restart my browser


I don’t think that’s garbage collection. That’s restarting the process to clean up a memory leak

Lennart Buit18:02:42

Yeah true :’)


oh no not certs i'm so sorry for your pain


> I don’t think that’s garbage collection. That’s restarting the process to clean up a memory leak Beg to differ. We once had a low-traffic service who's garbage kept building and our GC was a Jenkins job that triggered a rolling restart every six hours. This worked fine for many many weeks. Then someone found the half day to look at it. Apparently we had memoised a function that returned a lambda.


I think of it as Mark and Weep GC.

😄 2

(def is-garbage? (constantly true)) is a strategy i guess


"The null garbage collector is a valid garbage collector."

🎉 2
🍻 1

(After all, a memory leak is just garbage that never gets collected.)

Martynas Maciulevičius18:02:51

We are our own grave diggers. We build these apps guys.


Yeah, I feel like most of my job is now debugging other peoples weekend projects


Thats nothing


i have twice that on weekends


Today was a VERY long day


I audibly gasped when I saw that green tick


> Anyone else find the number of tabs you have open directly indicates how annoying the problem you are working on is ? Not entirely, I find the better metric to be when you close all those tabs, how many duplicates of the same page you had. Debugging az issues usually leaves me with 5 of the same official documentation page, before I stumble across that one corner that didn't go through az support and actually figured out how to fix their issue #notsalty


I feel this metric, in my soul. The only thing more satisfying than finishing the ticket is closing all of the tabs at the end

truestory 3
Joshua Suskalo00:02:00

treetabs, I see a fellow person of culture

Martynas Maciulevičius05:02:24

Eulerian and Hamilton path detection extension in tabs 😄