A software engineer website

2024

Extreme branchless: containers -

No value Software Engineer -

Coding challenges retrospective -

Event sourcing migrations retrospective -

10 years mark -

Designing strongly typed range -

Bowling kata as a zipper -

Haskell Legacy: Adding features -

Retrospective of my time at Autogriff -

Haskell Legacy: Pure projection -

Haskell Legacy: CQRS -

Haskell Legacy: Going event-first -

Haskell Legacy: Reversing writes -

Haskell Legacy: Creating events -

Haskell Legacy: Extracting business logic and introducing effects -

Haskell Legacy: Testing -

Haskell Legacy: Introduction -

Pace in pair programming -

In-depth programming language is not the point -

Haskell Ecosystem Workshop & ZuriHac 2024 -

The end of a 666 days streak -

Introduction to GHC's Generics -

Fix aeson ToJSONKey/FromJSONKey derivation -

Fizzbuzz kata: branchless version -

OOP has not invented encapsulation -

Types for building and types for running -

Types strengthening -

eDSLs for tests -

Type-driven development applied: librarian -

Types and Tests -

Architecture Heuristic YNIA: Events metadata -

Haskell: imports vs exports -

Haskell refactorings -

Bypassing Prometheus SDK push model -

Naming has a social convention -

Prescriptivism and Descriptivism -

Software inventory -

Screaming Architecture -

Personal README -

NeoViM: Improve Telescope (last edited) find files -

Access Control: Biscuit -

Access Control: topaz -

Access Control: Open Policy Agent -

Access Control: Capabilities -

2023

Access Control: Mandatory vs Discretionary -

Access Control: Relationship-based Access control -

Access Control: Organisation-based Access control -

Access Control: Graph-based Access control -

Access Control: Attribute-based Access control -

Access Control: Role-based Access control -

Access Control: Context-based Access control -

Access Control: ACL -

Homelab: Monthly certificate regeneration deployment issue -

Architecture Heuristic YNIA: Participants -

Game of Life kata: branchless Grid -

Hacktoberfest 2023: My contributions -

From custom Monad to Polysemy -

Implementation-oriented Monad -

Homelab: client certificates CRL regeneration -

Architecture Heuristic YNIA: Queues -

Haskell Type Reflection Anti-pattern -

QuasiQuoting Smart Constructors -

Nix: optimizing Haskell build size -

Haskell contributions kick-start -

Team owned architecture -

Witness functions -

Homelab: Monitoring Withings -

Announcing grafana-dashboards.nix -

Homelab: Monitoring alerting through AlertManager -

Homelab: Monitoring alerting -

Homelab: Monitoring dashboards -

Homelab: Monitoring introduction -

Homelab: Secrets management -

Homelab: Regenerating certificates -

Homelab: Intermediate CA -

Homelab: client certificates -

Homelab: server certificates -

Homelab: current state and plan -

Test-Driven Development Freedom -

What a good design is -

My history with ViM -

Dependencies management -

A case against Haskell immersion -

My encounter with Caddy -

Bloodhound redesign progress -

Haskell macros -

Nix: optimizing Haskell-based Docker-size -

New library: kill-bool -

Abaks: OpenAPI -

Abaks: Views -

Abaks: A word on testing -

Abaks: Drivers -

Abaks: Interface Adapters - API -

Abaks: Testing Use Cases -

Abaks: Use Cases -

Abaks: testing core domain -

Abaks: commands -

Abaks: events -

Abaks: initial requirements -

Zsh: debugging git remotes completion -

Polysemy: Scoped -

Polysemy: Opaque -

Polysemy: Onion architecture -

Polysemy: Design heuristics: Hiding vs Exposing -

Polysemy: Design heuristics: Dispatcher -

Plutus: Pioneers Program 4th cohort - Lecture 10 - Built with plutus -

Polysemy: Design heuristics: Hiding interpreters -

Plutus: Pioneers Program 4th cohort - Lecture 9 - Stablecoin -

Design for collaboration -

Plutus: Pioneers Program 4th cohort - Lecture 8 - Staking -

Polysemy: 1.9.0.0 released! -

A reasonable hiring process -

Plutus: Pioneers Program 4th cohort - Lecture 7 - Marlowe and hosted smart contracts -

Retrospective of my first CTO experience -

Plutus: Pioneers Program 4th cohort - Lecture 6 - Testing -

Polysemy: Design heuristics: Grouping interpreters -

Plutus: Pioneers Program 4th cohort - Lecture 5 - Minting -

Polysemy: Design heuristics: Effects layering -

Plutus: Pioneers Program 4th cohort - Lecture 4 - On-chain/Off-chain smart contract code and indexers -

Polysemy: Design heuristics: Split by responsibility -

Plutus: Pioneers Program 4th cohort - Ouroboros -

Polysemy: Design heuristics: IO hunting -

Plutus: Pioneers Program 4th cohort - lecture 3: Tests, Times, and Dapps -

Polysemy: Async gotchas -

Plutus: Pioneers Program 4th cohort kick start -

Polysemy: Strategy internals -

Polysemy: Changing return -

Polysemy: IO -

Polysemy: NonDet -

Polysemy: AtomicState -

Polysemy: Fixpoint -

Polysemy: Bundle -

Polysemy: Higher order Effects and combined interpreters -

Polysemy: Final vs Embed -

Polysemy: Tactics binding deprecated workaround -

Polysemy: Tactics binding -

Polysemy: Strategies binding -

Polysemy: Async -

Polysemy: Higher-order effects with Final -

Polysemy: Final -

Polysemy: Higher-order effects introductions -

Polysemy: Input -

Polysemy: Embed -

2022

Polysemy: Interceptors to buffer -

Polysemy: Introduction to Interceptors -

Polysemy: Tagged effects -

Polysemy: Interpretation and effects inline injection -

Polysemy: Interpretation and effects injection -

Polysemy: Introduction to Effect interpretation -

Polysemy: Introduction to Effect definition -

Polysemy: EffectRow design -

Polysemy: EffectRow -

Polysemy: Introduction to interpreters -

Polysemy: An introduction -

TDD: optimizing for inputs vs for outputs -

Contributors management -

Local vs Global optimum -

Hacktoberfest 2022: My feedback -

Problems before solution -

Hacktoberfest 2022: My contributions -

Language tourist -

Write for debug -

User Driven Design -

GDCR 2022: My feedback -

GDCR 2023: My participation summary -

Initial log -