A software engineer website

#abaks

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 -

#access control

Access Control: Biscuit -

Access Control: topaz -

Access Control: Open Policy Agent -

Access Control: Capabilities -

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 -

#architecture

Architecture Heuristic YNIA: Events metadata -

Architecture Heuristic YNIA: Participants -

Architecture Heuristic YNIA: Queues -

What a good design is -

Dependencies management -

Problems before solution -

#build

Nix: optimizing Haskell build size -

#c

OOP has not invented encapsulation -

#cardano

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

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

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

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

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

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

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

Plutus: Pioneers Program 4th cohort - Ouroboros -

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

Plutus: Pioneers Program 4th cohort kick start -

#career

The end of a 666 days streak -

A case against Haskell immersion -

Language tourist -

#CI

Nix: optimizing Haskell build size -

#cloud

My encounter with Caddy -

#code kata

Fizzbuzz kata: branchless version -

Game of Life kata: branchless Grid -

TDD: optimizing for inputs vs for outputs -

Write for debug -

GDCR 2022: My feedback -

GDCR 2023: My participation summary -

#code retreat

Write for debug -

GDCR 2022: My feedback -

GDCR 2023: My participation summary -

#coding dojo

Fizzbuzz kata: branchless version -

Game of Life kata: branchless Grid -

TDD: optimizing for inputs vs for outputs -

Write for debug -

GDCR 2022: My feedback -

GDCR 2023: My participation summary -

#contributions

Haskell contributions kick-start -

#design

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 -

Screaming Architecture -

Architecture Heuristic YNIA: Participants -

From custom Monad to Polysemy -

Implementation-oriented Monad -

Architecture Heuristic YNIA: Queues -

Haskell Type Reflection Anti-pattern -

QuasiQuoting Smart Constructors -

Witness functions -

Test-Driven Development Freedom -

What a good design is -

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 -

Polysemy: Scoped -

Polysemy: Opaque -

Polysemy: Onion architecture -

Polysemy: Design heuristics: Hiding vs Exposing -

Polysemy: Design heuristics: Dispatcher -

Polysemy: Design heuristics: Hiding interpreters -

Design for collaboration -

Polysemy: 1.9.0.0 released! -

Polysemy: Design heuristics: Grouping interpreters -

Polysemy: Design heuristics: Effects layering -

Polysemy: Design heuristics: Split by responsibility -

Polysemy: Design heuristics: IO hunting -

Polysemy: Async gotchas -

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 -

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 -

Problems before solution -

Write for debug -

User Driven Design -

#dev

NeoViM: Improve Telescope (last edited) find files -

My history with ViM -

Zsh: debugging git remotes completion -

Language tourist -

#development

NeoViM: Improve Telescope (last edited) find files -

Homelab: Monitoring Withings -

My history with ViM -

Zsh: debugging git remotes completion -

#devops

My encounter with Caddy -

#docker

Nix: optimizing Haskell-based Docker-size -

#draft concepts

Access Control: Biscuit -

Access Control: topaz -

Access Control: Open Policy Agent -

Access Control: Capabilities -

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 -

#effects systems

Polysemy: Scoped -

Polysemy: Opaque -

Polysemy: Onion architecture -

Polysemy: Design heuristics: Hiding vs Exposing -

Polysemy: Design heuristics: Dispatcher -

Polysemy: Design heuristics: Hiding interpreters -

Polysemy: 1.9.0.0 released! -

Polysemy: Design heuristics: Grouping interpreters -

Polysemy: Design heuristics: Effects layering -

Polysemy: Design heuristics: Split by responsibility -

Polysemy: Design heuristics: IO hunting -

Polysemy: Async gotchas -

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 -

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 -

#engineering

Haskell Ecosystem Workshop & ZuriHac 2024 -

The end of a 666 days streak -

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 -

Witness functions -

Test-Driven Development Freedom -

What a good design is -

Dependencies management -

A case against Haskell immersion -

#feedbacks

Retrospective of my first CTO experience -

#flow

NeoViM: Improve Telescope (last edited) find files -

My history with ViM -

Zsh: debugging git remotes completion -

#foss

Haskell Ecosystem Workshop & ZuriHac 2024 -

The end of a 666 days streak -

Hacktoberfest 2023: My contributions -

Haskell contributions kick-start -

Contributors management -

Hacktoberfest 2022: My feedback -

Hacktoberfest 2022: My contributions -

#functional programming

Prescriptivism and Descriptivism -

#gdcr

Write for debug -

GDCR 2022: My feedback -

GDCR 2023: My participation summary -

#git

Zsh: debugging git remotes completion -

#hacktoberfest

Hacktoberfest 2023: My contributions -

Hacktoberfest 2022: My feedback -

Hacktoberfest 2022: My contributions -

#haskell

Haskell Ecosystem Workshop & ZuriHac 2024 -

Introduction to GHC's Generics -

Fix aeson ToJSONKey/FromJSONKey derivation -

Fizzbuzz kata: branchless version -

Types for building and types for running -

Types strengthening -

eDSLs for tests -

Type-driven development applied: librarian -

Types and Tests -

Haskell: imports vs exports -

Haskell refactorings -

Bypassing Prometheus SDK push model -

Prescriptivism and Descriptivism -

Access Control: Capabilities -

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 -

Game of Life kata: branchless Grid -

From custom Monad to Polysemy -

Implementation-oriented Monad -

Haskell Type Reflection Anti-pattern -

QuasiQuoting Smart Constructors -

Nix: optimizing Haskell build size -

Haskell contributions kick-start -

Witness functions -

Test-Driven Development Freedom -

A case against Haskell immersion -

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 -

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 -

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

Polysemy: 1.9.0.0 released! -

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

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 -

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 -

#heuristics

Architecture Heuristic YNIA: Events metadata -

Architecture Heuristic YNIA: Participants -

Architecture Heuristic YNIA: Queues -

#hiring

A reasonable hiring process -

#infra

My encounter with Caddy -

#leadership

Personal README -

Team owned architecture -

#lean

Software inventory -

#learning

Language tourist -

#lgtm-stack

Bypassing Prometheus SDK push model -

Homelab: Monitoring Withings -

Announcing grafana-dashboards.nix -

Homelab: Monitoring alerting through AlertManager -

Homelab: Monitoring alerting -

Homelab: Monitoring dashboards -

Homelab: Monitoring introduction -

#library

New library: kill-bool -

#lua

NeoViM: Improve Telescope (last edited) find files -

#monitoring

Bypassing Prometheus SDK push model -

Homelab: Monitoring Withings -

Announcing grafana-dashboards.nix -

Homelab: Monitoring alerting through AlertManager -

Homelab: Monitoring alerting -

Homelab: Monitoring dashboards -

Homelab: Monitoring introduction -

#neovim

NeoViM: Improve Telescope (last edited) find files -

#news

My history with ViM -

Initial log -

#nix

Homelab: Monthly certificate regeneration deployment issue -

Homelab: client certificates CRL regeneration -

Nix: optimizing Haskell build size -

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 -

Nix: optimizing Haskell-based Docker-size -

#nixos

Homelab: Monthly certificate regeneration deployment issue -

Homelab: client certificates CRL regeneration -

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 -

#object-oriented programming

Prescriptivism and Descriptivism -

#ops

Homelab: Monthly certificate regeneration deployment issue -

Homelab: client certificates CRL regeneration -

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 -

#optimization

Nix: optimizing Haskell build size -

Nix: optimizing Haskell-based Docker-size -

#pki

Homelab: Monthly certificate regeneration deployment issue -

Homelab: client certificates CRL regeneration -

Homelab: Regenerating certificates -

Homelab: Intermediate CA -

Homelab: client certificates -

Homelab: server certificates -

#polysemy

From custom Monad to Polysemy -

Polysemy: Scoped -

Polysemy: Opaque -

Polysemy: Onion architecture -

Polysemy: Design heuristics: Hiding vs Exposing -

Polysemy: Design heuristics: Dispatcher -

Polysemy: Design heuristics: Hiding interpreters -

Polysemy: 1.9.0.0 released! -

Polysemy: Design heuristics: Grouping interpreters -

Polysemy: Design heuristics: Effects layering -

Polysemy: Design heuristics: Split by responsibility -

Polysemy: Design heuristics: IO hunting -

Polysemy: Async gotchas -

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 -

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 -

#product

Software inventory -

Screaming Architecture -

Personal README -

Team owned architecture -

Design for collaboration -

A reasonable hiring process -

Retrospective of my first CTO experience -

Local vs Global optimum -

User Driven Design -

#programming languages

Language tourist -

#project

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 -

#refactoring

Witness functions -

#retrospective

Haskell Ecosystem Workshop & ZuriHac 2024 -

The end of a 666 days streak -

Retrospective of my first CTO experience -

#secrets-management

Homelab: Secrets management -

#security

Access Control: Biscuit -

Access Control: topaz -

Access Control: Open Policy Agent -

Access Control: Capabilities -

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 -

#smart contracts

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

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

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

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

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

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

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

Plutus: Pioneers Program 4th cohort - Ouroboros -

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

Plutus: Pioneers Program 4th cohort kick start -

#software engineering

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 -

Team owned architecture -

Design for collaboration -

A reasonable hiring process -

Retrospective of my first CTO experience -

Local vs Global optimum -

User Driven Design -

#team

Personal README -

Team owned architecture -

Design for collaboration -

A reasonable hiring process -

Retrospective of my first CTO experience -

Local vs Global optimum -

#test-driven development

eDSLs for tests -

Type-driven development applied: librarian -

Types and Tests -

Test-Driven Development Freedom -

#tools

NeoViM: Improve Telescope (last edited) find files -

My history with ViM -

Zsh: debugging git remotes completion -

#type-driven design

Types for building and types for running -

Types strengthening -

eDSLs for tests -

Type-driven development applied: librarian -

Types and Tests -

#vim

My history with ViM -

#zsh

Zsh: debugging git remotes completion -