A permanent place to keep important reads on Tech topics
Nice Tech Blogs
- Elegantnetwork.github.io – Network, automation and nnnnnnnnnnn
- Hynek.me – Python and Go
- LWN.net – News from the Source
- unixsheikh.com – Unix related operating system and ponderings
- Julia Evans – jvns.ca
- Major Network
- Bright Yellow
- Tall Snarky Canadian
- Spencer Baugh’s homepage
- Michael Ablassmeier
- Kevin Cox
- Bharat Chauhan
- Anton Z – Python, SQL and software
- Thomwright – software engineering and architecture
- Roman Imankulov – Full Stack Python
- James Bennet – Python
- Explained from First Principles…
Performance Optimisations – Real World
Compression
Databases
- DB-Engines Rankings
- How to Discover all your Data Sources
- Postgres Flaws
- Heroku Devcentre – PostgreSQL Concurrency with MVCC
- UUIDv4, UUIDv7 adn Hash Indexes
- When to use the different UUIDs
Encoding
Hashing
.Well-Known Urls
CLI Tools
Interesting RFCs
GUI
Making Money on Youtube
Videos
books
Topics
Economics
Startup
- Free to Trial Conversion Rates
- How a webservice startup was monetised
- How Dollar Flight Club increased it’s trial-to-paid conversion rate
- Side Hustles: The 4 Kinds of Businesses you can Start
- eCommerce site that does one thing and one thing well
- Hype Cycles in Tech
- How Instagram scaled with 3 Engineers
- Getting Used to Microservices
- Avoid Blundering: 80% of a Winning Strategy
Engineering Management
- Climbing the ladder and what is expected at each level
- Quality is Systemic
- Old Tech: Choose Boring Technology
- There is still no Silver Bullet
SRE
- How to Build Software like an SRE
- Containers Insecure by Default and Running Containers as root
- Kubernetes Debugging – tcpflow and ss
- Kubernetes: Haters (Practical) Guide to Kubernetes
Benchmarking
Tales of Production Issues
DNS
Datetime
Git
Open Source
Programming
- How do I know I am good at Programming?
- Problem breakdown and solving useful for your entire career
- 2 years, 12 lessons thoughtworks
- New to development? Being a better programmer and making it easier to write better code
- All About Finite State Machines
- Design Patterns, Practices, Principles and Values
- What kind of Asynchronous is right for you?
- Don’t DRY your code prematurely
- Microlibraries need to die already
- Python 3.13 GIL and Jit
Reliable and Proven Software Manifesto:
- 3-tier applications over micro services
- relational database over NoSQL
- page reloads over single page applications
Workplace, People and Companies
- How to Keep your Best Programmers
- Ten Laws of the Physics of People (and software development)
- Why resignations happens
- The Company isn’t a Family
- Being in the Zone as a Programmer
- Management and Hierachies: Do we need them?
- Interrupting vs Waiting your Turn
- What Work Looks like…Collaboration is no good
- The Case Against Collaboration
Process and Management
The big wastes in development:
- Defects
- Overproduction
- Waiting
- Not utilizing talent
- Transportation
- Inventory excess
- Motion waste
- Excess processing
Continuous Delivery
Site Reliability
Project Management
- How one jira ticket made my employer $1 million dollars
- All that is wrong with Development Estimates
History
Design and UX
Databases
- Why Ionel thinks MySQL is a terrible choice with django
- High Availability MySQL from github engineering
- PgExercises – Do Postgres exercises for fun
- database.guide – fundamental teachings on databases
- Querying for a the most recent per group and differeing performance – and the O(n) complexity
- Red Book on Databases – Michael Stonebreaker
- Removing a message queue and using NoSQL
- SQlite vs Postgresql
- Discord and Cassandra – storing billions of messages
Event Driven Architecture
Web Servers
Unicode
Javascript
Never a shortage of people telling you what you should know…
Java
API’s
- API testing is exploratory testing – testing API’s is more exploratory in nature than just automating and regression testing. The data they provide (or don’t) is rich in nature and needs to be aligned with what people need to get or do with them.
- How to and how not to design rest APIs
Erlang
Python
- Variable Names should be as short as possible but still be Clear
- The background to the Zen of python
- is vs ==
- Refactoring: The rule of 3 and practical refactoring with python
- Refactoring: The fallacy of DRY
- Solid Principles of Object Oriented Design
- Pickles nine flaws
- The proprietary Investment Bank version of Python
- Long Decorator Shortcut – Ned Batchelder
- The perfect commit – developing with tests, decs etc
- Google Python Styleguide
- Python Supply Chain
- Makefiles for python
- The Python Family of Languages
Django
Testing
- Test Driven Development: the thinking behind Red, Green and Refactor
- On Test Coverage by Martin Fowler
- SQLite thorough testing – the thorough testing of sqlite
Linked Lists
Scale
- Scaling Lessons learned at Dropbox
- Moving away from AWS and building your own kubernetes cluster in a datacentre
Data Science
- Altair Charts
- A nice Introduction to R Lang by John Cook
- 101 numpy exercises
- Introduction to Deep Learning with Dries Cronje
Data Science Visualisation with Python
Living Well
- The disease of Being Busy
- Is REST good?
- K8s secret compared
- The demise of the mildly dynamic website
- Github: Question for employers
- Knowledge is a house of cards – you need strong foundations
- 3 Tribes in Programming
Python
- iPython Debugging
- Async python vs Sync python performance
- Python Logging: Do’s and Don’ts
- Requirements.txt is not enough
- Don’t Mock What You Don’t Own
- Timsort: Python’s default sort arising from real-world pragmatism
- Original Timsort Intro
- Dependency Versioning
- More Seamntic versioning gripes
- A guy complaining about upper version constraints
- Python type hints and mypy in production
- Asyncio: The Complete Guide
- Python antipatterns: Little book of…
Go Lang
Software Architecture
Networking
Markdown
Load Testing and Performance
- How to Load Test – Nice Tools
- Finding Performance Bottlenecks
- Nginx vs Caddy Web Server
- A Visualisation and Explanation of Load Balancing
Do Less, Say No
- Entropy is Fatal
- The collapse of complex software – say no – get simpler
- A single mess: unneeded abstractions
- Finish what you start – do one thing at a time
Project Management
- When Everything is Important But Nothing is Getting Done
- Planning and its perils
- Modern Software Development and why traditional car companies can’t let it happen
- Code Ownership
- Leading vs Participating
- Products and projects with long term plans fail
- Cognitive Load
Version Control
Distributed Systems
- Decomposing Microservices
- Autoscaling: Chairs and k8s HPA
- Fallacies of Distributed Systems
- Give me back my Monolith
- Segment Goodbye Microservices
- Netflix introducing microservices
- Traces over Metrics
Queues
APIs
Rust
Javascript
UI
Web, Internet and Networking
- Why you should serve your own static assets and not rely on a public cdn
- TCP slow start, how a website loads from a satellite and why to keep your website small
- The 14kb and an article going into more depth explaining that it does not matter much
- Small Websites – under 1KB
- IPV6 Peering
- An Introduction to Computer Networks – Peter L Dordal
- A different Internet: ownership and data
- VOIP, SIP and Setting up your own PBX Open source
Billing Systems
Scaling and Performance
- Options for Scaling
- Kubernetes Maximalism
- Kubernetes: Do we need it
- Making Programs faster: Why GNU grep > bsd grep
SQL Performance
Containerisation
Companies
Kubernetes
Linux
- Linux CLI tools debugging: top, sar, free -m, iostat, pidstat, mpstat, vmstat, dmesg, uptime
- No – Linux is not eating your RAM
Testing
- TDD Process Smells
- TDD
- How To Test
- Test Aginst what won’t Change
- Introduction to Python Testing: Miguel Grinberg