Speaker's notes : discover event-driven programming

General advice:

  • Make sure to have a bottle of water nearby
  • Open xrandr options before it starts
  • Open pursuit before it starts
  • Changing the police is CTRL + 6 and CTRL + = on alacritty
  • Find a high contrast theme for alacritty (no light green or yellow)
  • Prepare some slides to tell the audience what they have to do
  • One screen, one window
  • Purescript ain’t rocket science but make sure to explain basic syntax when introducing it (pattern matching, function signatures, records, hof, etc.)
  • We’re using purescript, but it can obviously be done in any language

Next up, how should I present each steps:

Event storming

Quick Recap on The Manager's Path

The Manager’s Path is the reference book if you want to learn about engineer management, that is anything ranging from a mentor position to being CTO. The book emphasizes on the obvious state of becoming a manager as a technical engineer: you will code less, you will have more responsibilities and your capacity to lead others will be key to your success. Here’s what I learned by reading it.

Mentoring

The first step to enter in a manager’s position is to mentor an intern or a junior dev entering the company. If you are assigned to the task, don’t discard the importance of taking care of her. Take time and attention to:

  • Provide clear goals: how do you expect your mentee to perform
  • Provide guidance and reassurance: entering a new company can be disturbing and stressful. Your action can make a change
  • Assess your mentee progression with regular 1-to-1s

Luttons contre les pouvoirs réactionnaires et autoritaires

Nous caricaturons nos adversaires politiques par facilité et pour éviter les ambiguïtés sur des réseaux prompts à l’interprétation facile. Pourtant connaissez-vous bien le discours et la rhétorique de vos adversaires politiques ? Quand j’ai suggéré que les propos défendus par Thomas Pierrain, aka υѕe caѕe drιven, dans son article les dangers du politiquement correct étaient proches de ceux tenus par Alain Finkielkraut, il s’est insurgé. Quoi de plus naturel quand on est comparé à l’intellectuel souvent présenté comme Parangon de l’intelligentzia réactionnaire ?! L’objectif de cet article est d’étayer ma réponse pour éviter les raccourcis, malentendus et comprendre pourquoi ce rapprochement m’a semblé naturel.

Pour commencer, je tiens à préciser que je ne vais pas traiter de l’histoire que l’article relate. Ce qui m’intéresse c’est l’interprétation de υѕe caѕe drιven du discours qui lui a été opposé. Cette interprétation renferme une vision du monde proche des courants réactionnaires, dont Alain Finkielkraut est pour moi le théoricien le plus explicite.

La pensée d’Alain Finkielkraut

L’Archipel du Goulag par Alexandre Soljenitsyne est publié en 1974 en France. Ce livre va pousser beaucoup d’intellectuels communistes, dont Alain Finkielkraut, membre actif de l’Union des jeunesses communistes marxistes-léninistes, à rejeter en bloc l’union soviétique. Ce rejet sera le fondement d’un nouveau courant français : les “nouveaux philosophes”. Ils sont jeunes, antisoviétiques, ne refusent aucune participation aux plateaux de télé et n’hésitent pas à dénoncer la pensée de leurs aînées (Michel Foucault, Gilles Deleuze, Félix Guattari, Jacques Derrida, etc.) trop sympathiques à l’URSS à leurs yeux.

Hors sujet : impératif catégorique de Kant et masculinité toxique

Je regarde de temps en temps des vidéos essais sur youtube mais rarement celle-ci provoque en moi l’effet que ces deux vidéos que je vous présente. La première m’a fait réaliser que l’impératif catégorique de Kant n’est pas l’idiotie que l’on m’a toujours été expliqué. La seconde est une chaîne dédiée aux représentations de la masculinité toxique dans la culture populaire.

De l’impératif catégorique

Agis seulement d’après la maxime grâce à laquelle tu peux vouloir en même temps qu’elle devienne une loi universelle

Cette phrase, ainsi que d’autres, sont les termes utilisés pour décrire formellement l’impératif catégorique. Pour vulgariser ce concept, on préfère les exemples simplistes du style :

Moving the blog to Purerl, the journey into type safety land

I started implementing my own blog more than a year and a half ago. Since I was working with Ruby on Rails at the time, I wanted to experiment Phoenix. It was an introduction to functional programming and I really enjoyed it. I wrote a small guide for beginners and later learned Purescript. I consider myself as an intermediate haskeller (my understanding goes as far as ReaderT). I used to enjoy dynamically typed languages, but my experience with sum types really changed my perspective. I cheer on the static side now!

I implemented my blog with a full event driven approach. It allowed me to fix issues more safely than ever. At least that was what I thought. A year after the first lines, it had become very difficult to fix bugs. The problem is really about refactoring the code. Not declaring types had become a pain. In the following code, focus on the publication.publication_date variable:

def execute({state, new_events}, %PublishDraft{} = publication) do
  cond do
    state == nil -> {state, {:error, "Does not exist yet"}}
    draft_should_not_be_published?(state) -> {state, {:error, "Draft non conform to publication"}}
    true ->
      {state, new_events}
      |> apply_event(%PostPublished{
        aggregate_id: publication.aggregate_id,
        publication_date: publication.publication_date,
        slug: slugify(state.title)
      })
  end
end

What is its type? Is it type that my database driver expects, NaiveDateTime? Or is it a string that I need to format? What does the apply_event function expect as an argument, a string or a NaiveDateTime? If I want to answer those questions, I need to dig in two directions in my code and I might not even find a satisfying answer, since some library might hide the details of implementation. I really enjoy Elixir as a language, but refactoring can be really problematic, especially when you don’t actively maintain the code base.

Older posts...