Week 50: What are you working on this week

You’re all doing these amazing things, whether it’s for work, open source, or some personal project, and that’s great and all except for the fact that we can’t see what you are doing!

So what are you working on this week? Maybe are you implementing an exciting feature, fixing mundane bugs (or writing them?), or are you caught in a massive yak shave? Share! :slight_smile:

1 Like

Well, I’m continuing my work on PartsBox (https://partsbox.io/), which would not have been possible if not for Clojure and ClojureScript.

Interesting technicalities I intend to work on soon:

  • migration to Clojure 1.9 and corresponding ClojureScript (I’m on alpha14 and ClojureScript 1.9.521 now and I’ve seen strange problems with the closure compiler when I tried to advance past those versions,
  • try out the newer ClojureScript modularization support, it’s becoming really important and for the first time it seems like it could actually work for me,
  • try out Nikita’s compact-uuids library https://github.com/tonsky/compact-uuids as I use a lot of uuids in string form,
  • look for relational algebra helper tools to (maybe, possibly) replace DataScript in the future with something simpler

I think I finally got the last issue blocking Reagent 0.8 release fixed last week (fix in ClojureScript compiler, CLJS-2430, fix), so this week I can hopefully finish testing this and get everything ready for release once new Cljs is out.

In addition I started working on updating Closure-compiler version ClojureScript compiler uses, Google has broken few things so this seems to be quite hard once again: CLJS-2389.

1 Like

I’m working on a new release of Expound which will include better handling for cat specs and a description of any missing key specs:

  (require '[expound.alpha :as expound])
  (require '[clojure.spec.alpha :as s])
  (require '[clojure.spec.test.alpha :as st])

  (s/def :demo.loc/city string?)
  (s/def :demo.loc/state string?)
  (s/def :demo/loc (s/keys :req-un [:demo.loc/city :demo.loc/state]))

  (s/fdef loc-str
          :args (s/cat :loc :demo/loc))
  (defn loc-str [loc]
    (str (:city loc) ", " (:state loc)))

  ;; with no instrumentation
  (loc-str)    ;; Wrong number of args (0) passed to: alpha/loc-str
  (loc-str {}) ;; ", "

  ;; with instrumentation
  (set! s/*explain-out* expound/printer)

  ;; -- Syntax error -------------------

  ;; Function arguments

  ;;   nil

  ;; should have additional elements. The next element ":loc" should
  ;; satisfy

  ;;   map?

  (loc-str {})
  ;; -- Spec failed --------------------

  ;; Function arguments

  ;; ({})
  ;;  ^^

  ;; should contain keys: `:city`, `:state`

  ;; |    key |    spec |
  ;; |--------+---------|
  ;; |  :city | string? |
  ;; | :state | string? |

I realize the following part is not helpful:

  ;; Function arguments

  ;;   nil

  ;; should have additional elements.

It should say something like Function arguments to (loc-str) should have additional elements

but right now, clojure.spec does not include enough information to display the original function name. If you’d like to see this feature in Expound, please vote for https://dev.clojure.org/jira/browse/CLJ-2166 :slight_smile:


I’m spending all my time right now on a Tweetdeck style web application for Steem, the decentralized blockchain based social network that is getting popular lately.

I’ve only been using ClojureScript and Reagent for a month after checking out Zach Oakes’ Lightmod, but in just two weeks I’ve been getting quite far with this project, you can check it out here. You don’t need a Steem account right now and the app runs right in the browser (latest stable versions of Firefox and Chrome are supported). The app is fully client side ClojureScript, no server code. In fact, it also works fully decentralized on IPFS.

I’ve created an app like this before in CoffeeScript + jQuery, worked full time for about two years on that. After this short time I can already say that the combination of ClojureScript + Reagent has made me more productive by many orders of magnitude, even compared to CoffeeScript + Vue.js. It’s a really amazing toolset and I would not want to go back to something else now :slight_smile:

Spent whole Monday assembling furniture -_-
Started doing basic backend for functional cave in js/node (no Clojure sorry, nodejs is super lightweight, I prefer it for small projects). Playing with MongoDB Cloud, looks good so far.

Spent most of my free time up to now writing code examples and making diagrams for a talk I’m doing tomorrow on Clojure spec and some ideas about how it can be useful beyond basic usage. I’ve been meaning to blog about this for ages but committing to give a talk was what it took to motivate me enough to sit down and structure my scribbles properly. I’ll see what feedback I get from the talk and turn it into a blog afterwards.