A few of my thoughts on web-related issues. Feel free to contact me at michal@charemza.name.

6 rules when making data dashboards

Use these rules to help you make decisions when designing and making dashboards

Questions to ask yourself when talking with users

Have a small conversation with yourself as well as with them

How to offer better downloads

HTTP headers for pain-free downloads of largish files

S3 is not a filesystem

and that's OK

Django's transaction.atomic()

It may not be as atomic as you think: it wasn't for me

JavaScript task queue

Simple FIFO task queue with limited concurrency

I admit it: I like Python's asyncio

The useful API is actually nice and small

Streaming: a skill gap?

It's not just for big data

Python generators

Neatly manage stream processing pipelines for medium data

Mini HTTP guide for developers

A glance behind the curtain: it can affect engineering decisions

The core S3 API is beautiful

Just PUT and GET: it couldn't be simpler

Questions to ask yourself when considering a dependency

You can have dependencies: but keep your eyes open

You might not need a class

Class-like functions: an alternative way of dealing with state

I admit it: I like Python's ternary operator

With a bit of whitespace, even when nested, I find it clear and safe

Reducing risk of release day

Large changes do not have to fill you with fear

S3 path/pseudo-folder locking

Efficient concurrent access when using S3 as a filesystem using read/write tree locking

Python asyncio read/write lock

Using asynccontextmanager to create a read/write lock

You might not need Boto 3

To call AWS APIs all you need are the right headers

Questions to ask yourself when handling exceptions

Safety is not always marching forwards

Structured data in environment variables

A straightforward way to store nested dictionaries and lists in environment variables

Programming design choices in the face of changing requirements

The best gift you can give to the future is code that makes its current behaviour clear

Type simplicity

If you can't have type safety, have the next best thing

Questions to ask yourself when writing tests

Talk to yourself to make sure your tests help you achieve your aims

The list monad's bind

It can map, filter, and locally transform a list

Hidden structure

The unexpected similarities between mapping over a list and function composition

The beauty and the horror of Haskell monads

They are wonderful, but terrible

Haskell do notation protects you from parentheses

Nested monads and function application $ do not play well with bind >>=

Long files are not the enemy

Spend your time wisely: moving code about may be counterproductive

Avoid stateful variables

How I gently prod myself to write purer code

Non atomic deployments

Cron-free deferred delete of obsolete static resources

Overriding methods is spaghetti in disguise

An argument for composition over inheritance

E2E Tests: Test as a user would

Make your E2E tests less of a time-sink

Reasons to not use page objects in E2E tests

They can result in code that is harder to reason about

Say no to more optional arguments

They're often smelly and biased towards historical code

Pragmatic Purity

Keep pure and impure code separate, with fewer impure code paths

Blue-Green Deployment of Static Site on S3

API Gateway in a blue-green deployment strategy

Defer node stream processing

Delay chain of piped streams until a promise is resolved

Animating elements moving between lists

Anchored CSS transitions to move elements between ng-repeat lists

Throttled variable changes

Delay variable changes in AngularJS templates using shadowing

Same-domain iframe communication

AngularJS scope events for same-domain bi-directional iframe communication

AngularJS Transclude

Break free from the DOM: move compiled elements to arbitrary locations

AngularJS Promises

Chaining, failures, notifications

ECONNRESET Errors in node.js

Socket.io and Express on the same port

Dependency-Based Cache Invalidation

Russian doll dependency-based cache invalidation system for PHP and Memcached. Part 1: Design.

About This Site

Jekyll, S3 and Cloudfront

JQuery UI Datepicker Incorrect Century

On certain yearRange options

Thinking Fast and Slow

A few thoughts / review

AWS Load Balancer

Beware long POSTS: they duplicate