21st week of 2021
Last updated on
Better daily stand-up meetings, using Parinfer in Cursive IDE, ½ kB state machine hook for React.
Table of contents
In January, I read Critter's (Mike Crittenden) blog post Zombie standups? Try walking the board. Since then, we have been practicing sprint-centric daily stand-ups in our team. Instead of going person by person, we go ticket by ticket.
I think it was a step in the right direction. Previously our daily stand-ups were more chaotic, often not focusing on the sprint enough.
But there's a but. The downside is that there's no good opportunity to discuss ad hoc things. Critter does cover this in his blog post:
But what about general announcements the team needs to hear? After you walk the board, ask "any general things we need to discuss?" and let people speak up.
...but that hasn't worked well. Maybe opening your mouth at the end is just too difficult. For example, some people are shy (including me!).
This week we changed back to people-centric daily stand-ups. To help us keep the main focus on the sprint and its goals, I created quick filters in Jira for each person. For example, when it's my turn to speak, I activate the "Matias" quick filter so that only tasks assigned to me are showing on the board. Then it's easy for me to talk about my tasks plus state any other things I have on my mind because I'm already speaking.
The upside so far has been that there has been more ad hoc discussion, meaning more sharing of information relevant to the team.
We'll see in the coming weeks whether this "new old" way of doing daily stand-ups is better or worse.
I have been working on my first ClojureScript project. I'll finish it next week. That's a bold statement to make, I know, but my project has a deadline on the next Sunday, so I'm fairly certain I'll finish it. Instead of postponing the deadline, I'll just limit the scope of the project.
After that, I'll convert my cookbook recipes to blog posts like I speculated last week.
Editing code in Cursive has been a hassle because I'm using IdeaVim and haven't configured keybindings for Paredit. I haven't found any good tutorials on that, so it feels overwhelming. (Otherwise I have liked Cursive when doing Clojure exercises on Exercism.)
I have dreamed of using Parinfer in Cursive. Parinfer seems so much easier to use than Paredit.
Today my dreams came true because turns out that Cursive supports Parinfer out of the box! Go to Settings → Editor → General → Smart Keys → Clojure and choose "Parinfer Smart mode" from the "Structural editing style" dropdown.
What's infuriating is that there's zero mention of Parinfer in the Cursive docs or in Cursive's GitHub Wiki. 🤦♂️ I have wasted so much time trying to google "cursive ide parinfer" and finding only a few mentions that "Cursive supports Parinfer" but no information how to enable that. I found the setting today by accident because I was just going to disable Paredit.
useStateMachine hook for React
is a tiny (less than half a kilobyte) package
for creating state machines.
Pair it with Preact,
and you have a very small yet powerful bundle
for creating stateful UIs.
If you are not familiar with state machines, Cassio explains them in his YouTube video Getting your act together with State Machines.
State machines are somewhat similar to reducers. From one comment by Cassio under the video:
It's similar, but with one important distinction: with useReducer/redux you can always dispatch any action, and it will always reach the reducer. With state machines, the current state dictates which transitions you can "dispatch" next.
And this small change has a big impact because it empowers you to create your own constraints in the code to make a more robust application.
In the video, Cassio uses a popular state machine library called XState, but the main idea is the same. Sidenotes:
- XState is more featureful,
but also weighs more,
about 19 kB
@xstate/reactpackage required by React). Other differences are mentioned in
useStateMachine's Wiki page XState comparison.
- There's also
@xstate/fsm, a 1 kB implementation of XState. Some differences are mentioned in
useStateMachine's issue #27.
Two more good videos by Cassio on the topic:
- Custom State Machine Hook with useReducer & useEffect
goes through implementing
useStateMachinefrom scratch. The latest version of the library is a bit more robust (and also a bit more cryptic since it's written in fancy TypeScript).
- React useStateMachine hook
shows two examples
how to use the