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