RSSAmplifier

Blog

shazow.net | Andrey Petrov

Recent content on shazow.net | Andrey Petrov

shazow.netRSS feed ↗37 posts

Latest posts

Permissive vs Copyleft Open Source

The premise of copyleft licenses is attractive: Create more open source! With permissive licenses, someone can take the code and make proprietary modifications to it and sell it to other people without releasing the modifications. We want people to publish their improvements, right? With copyleft, we can force people to publish their improvements to copyleft code. Businesses will want to use our…

urllib3 Origin Story

Syndicated This post was featured on opensource.org/maintainers/shazow My first big open source project was urllib3 . Today it’s used by almost every Python user and receives about a billion downloads each month, but it started in 2007 out of necessity. I was working at TinEye (formerly known as Idée Inc.) as my first “real” job out of university, and we needed to upload billions of images to…

Hanlon-Clarke Corollary

I went into a deep research hole trying to discover the origin of the quote: “Any sufficiently advanced incompetence is indistinguishable from malice.” tl;dr: Earliest online record of this quote is by Vernon Schryver on May 1, 2002. Grey’s Law, 1996? Wikipedia, LLMs, and various random blog posts cite it as “Grey’s Law” which I haven’t been able to…

How can open social protocols fail us in 2025

Let’s compare the possible failure modes of various open social protocols: ActivityPub/Mastodon ATProto/Bluesky Farcaster/Warpcast Some scenarios I’d like to consider: Can my identity be taken away? Can my audience be taken away? Can my ability to extend it and build on the protocol be taken away? Some specific failure modes I’m concerned about: What happens when the most popular…

Post-Growth

Imagine thousands of years in the future, when humanity is dispersed across the stars. We are fully actualized and have reached the final leafs of the universe’s tech tree. We are happy and in control of our destiny. Are the trillions of us spanning many solar systems? What if there are only millions, or even thousands of us? It’s tempting to take our history of swarming through…

Conditioning

I think of conditioning as a long-term conversation between decentralized components. After breaking my foot, I’ve been working on conditioning all of the tiny ligaments to properly support movements and impacts I haven’t practiced in months. I can’t just say “hey foot, you’re not broken anymore, go back to normal.” I have to slowly and incrementally reinforce…

1231

I wrote down the names of 5 friends, I’m going to send each of them a gratitude email by the end of the year. Want to join me? It can be just a couple of sentences of how they positively impacted your life, or a brief story of a positive shared experience, or what you admire about them. ...

Why Blockchain?

A blockchain like Ethereum 1 provides a collectively owned programmable substrate, allowing us to build more decentralized “onchain” applications where the consumers have more agency over how things behave. Let’s break down “collectively owned programmable substrate”: Collectively Owned The Ethereum consensus is a communal mechanism which enforces certain rights for…

Trustless

“There are no such thing as zero trust assumptions.” Trustless is a confusing word: We don’t use it in common speech; it means “not trust worthy” in the dictionary; decentralized technologies sometimes use it as “not needing to trust”; and the uninitiated might interpret it to mean that it’s advocating for less trust? Despite the confusion, there is…

Decentralization

As technological advancements march on, we’re having a lot of very important conversations about what we want out of the platforms we use day to day. We often talk about “decentralization” since it carries so much meaning, but it’s also easy to talk past each other because we may be thinking about different components of decentralization in different contexts. If we have…

How does DeFi yield?

Decentralized Finance (DeFi) is a technology that exploded in popularity in 2020, taking place almost entirely on the Ethereum network . There are many things about it that are outright fascinating: Algorithmic stablecoins, automated market makers, flash loans, flash mints! Every month there is a wild new invention that changes the landscape, often increasingly difficult to understand which is…

I tried the Oculus Quest 2 for a couple of hours and wrote a review

For context, this is comparing with my Valve Index which is not very apples-to-apples. This is specific to the wireless embedded mode, not tethered Quest Link mode. I tested it with the Elite Strap, which ought to be included by default. Tracking Tracking is “surprisingly good” as everyone says, especially superficially. It’s hard to visually detect glitches when the system is…

Using Github Issues as a Hugo frontend with Github Actions and Netlify

I got into the habit of dumping quick blog post ideas into issues on my blog’s repo. It’s a convenient place to iterate on them and share with friends for feedback before actually publishing on my blog post. The drafts keep accumulating, how do I trick myself into publishing more? Perhaps by reducing the effort required for the next step? Let’s do it! Architecture My blog is…

Beginner Sourdough: Does anything really matter?

There are bazillions of sourdough recipes in the wild, foaming with traffic from eager bakers trapped in quarantine, ready for their sourdough starter baby with a punny name to graduate into a tube of sustenance and distraction during dark times. Sourdough recipes are more involved than regular bread recipes, that’s for sure. There are many steps, and bakers can’t seem to agree on many of them.…

Open sourcing urllib3’s finances

Proud to be part of the team who built this chonk of vital internet infrastructure. ❤️ Big sincere thank you to our maintainers: @theavalkyrie @sethmlarson @haikuginger @Lukasaoz @sigmavirus24 , and to all the other contributors for this very important work. https://t.co/ea3iFClKD5 — Andrey 🦃 Petrov (@shazow) December 17, 2018 Since urllib3 was created in 2008, we have gained several…

My computer is my home

I spent fifty hours setting up my new computer, and I feel a mixture of shame and pride about it. We spend a lot of our lives in our computers. Working, socializing, relaxing. On the work laptop, at the home desktop, on the phone in bed. We live in our computers, and we do little things to make ourselves feel more at home in them — a little more cozy. We change the wallpaper, install some new…

How to hand over an Open Source project to a new maintainer

After maintaining a project for many years, maybe you’re no longer using it yourself? Or maybe you’re burned out from the grind? Or you can’t afford to allocate time to it? Maybe it’s time to pass it on to somebody else. I feel like there is more to learn from failure stories than success stories, so let’s start with those. What not to do I’ve handed over several projects before, and some didn’t…

Quitting Twitter… ish.

It has been over two months and I feel better. @hyfen pong — Andrey 🦃 Petrov (@shazow) April 20, 2007 My first tweet. I haven’t tweeted in over two months. This is very unusual for me. I’ve been an avid tweeter since 2007. Writing tweets has become a part of my identity to the point where most my bios mention that I’m a tweet ghostwriter—composing and editing tweets for friends is one of my…

Code boilerplate: Is it always bad?

A case study between Python and Go. In Go, a common complaint from newly-minted gophers who come from another language is the error handling pattern: result, err := DoSomething() if err != nil { return nil, err } another, err := SomethingElse(result) if err != nil { return nil, err } // We can be a bit more terse if we don't need to save any // variables outside of the if-scope: if err :=…

Choosing a new master password

I’ve been meaning to change and improve my master password for years. I knew the steps but I really wanted someone to spell it out for me anyways, so I’ll spell out the concrete steps for you. Popular password managers work by maintaining an encrypted database of many secrets, protected by a combination of the master password and access to the encrypted database file that is synchronized across…

Neither self nor this: Receivers in Go

When getting started with Go, there is a strong temptation to bring baggage from your previous language. It’s a heuristic which is usually helpful, but sometimes counter-productive and inevitably results in regret. Go does not have classes and objects, but it does have types that we can make many instances of. Further, we can attach methods to these types and they kind-of start looking like the…

See Python, See Python Go, Go Python Go @ PyCon 2016

...

In VR, Would a Rose Smell Sweeter?

In a few months, the first iteration of modern consumer virtual reality headsets are going to start shipping. A lot is rapidly changing and new applications are being discovered every week. I present three stories that use VR technology to push our crafts beyond what was possible. Each story is focused around an amazing short video that is very much worth watching. “This is not why I became an…

How I design JSON API responses

The goal of designing a public API response layout is to balance ease of use for consumers with commitment of stability from the provider. We can bolt on all kinds of crazy metadata and embedded values that we’ll regret having to maintain years later, like complex pagination schemes that don’t scale for evolving domain spaces or when we’re finally Web Scale and wasting millions on extra bandwidth…

Why aren’t we using SSH for everything?

SSH, how does it even? A few weeks ago, I wrote ssh-chat . ssh http://t.co/E7Ilc0B0BC pic.twitter.com/CqYBR1WYO4 — Andrey 🦃 Petrov (@shazow) December 13, 2014 The idea is simple: You open your terminal and type, $ ssh chat.shazow.net Unlike many others, you might stop yourself before typing “ls” and notice — that’s no shell, it’s a chat room! While the little details sink in, it dawns on…

Urllib3, Stripe, and Open Source Grants

Helping the future come a little sooner Six years ago, I built a better Python http library . It had then-novel things like connection pooling, thread-safety, multipart encoding, and more. Today, every Python user depends on it. Maintaining something for six years on my own time is not easy, even with a slew of coping strategies . A few hours here and there, every week, and slowly it chugs…

Re: Facebook acquires Oculus

A letter of concern Hello, John Carmack. (1/3) Everyone has had some time to digest the FB deal now. I think it is going to be positive, but clearly many disagree. — John Carmack (@ID_AA_Carmack) March 28, 2014 (2/3) Much of the ranting has been emotional or tribal, but I am interested in reading coherent viewpoints about objective outcomes. — John Carmack (@ID_AA_Carmack) March 28,…

What is your fantasy?

Finding the North Star for your career What do I really want? I’ve been thinking about this for many years. Do I want to build a venture capital funded startup? A sustainable humble life-style business? An innovative independent game studio? A wildly-profitable consulting enterprise? Perhaps follow in the foot-steps of 37Signals, Github, Twitter, or Google? Or maybe I would be happy working for…

How to maintain a successful open source project

Lessons learned from five years of maintaining one of the most-used Python libraries. I’ve published dozens of open source projects over the years, mostly in Python and JavaScript. Few are old and stable, others are new and immature, some are wildly popular with a constant stream of contributors, but most linger until one day a trickle of users suddenly discover them. This is a guide on how to…

Laser Eye Surgery

“What was it like?” More than anything else, it was creepy. … But worth it. Bespectacled My first vision correction was prescribed in the midst of my high school years. I could see well enough to get around but with great effort and strain. By the time I got home from school, I had to take a long nap just to make it through the rest of the day. My eyes were exhausted and glasses…

List of must-have apps on OSX

Or, first things I install when I nest into a fresh Apple computing device: Adium Chrome Firefox Clyppan Colloquy Dropbox Growl Homebrew Fink MacPorts MacVim (via Homebrew!) Notifyapp Google Notifier Pandoraboy Quicksilver Skype iTerm2 TotalTerminal Visor Transmission VLC Virtualbox XCode (Based on my older post, New Macbook Pro, list of things I installed. What am I missing? ) ...

Considering job offers? A checklist in alphabetical order

Every offer you get will include some details and omit others. To perform a proper comparison between multiple offers and reach a good decision, you’ll need all the details for all offers. After numerous back-and-forths with several companies, I composed a checklist ideal for anyone on the verge of deciding the next stage of their career. Benefits : Medical, dental, vision. Yes, you’re…

Password Management Utilities

We live in a time when cleartext usernames and passwords are leaked on a daily basis. In the last couple of months my accounts got compromised on Gawker, Sony, and MtGox. I decided it’s time to start using the one-password-per-service technique. These are tools I found in my research. I’m currently using SuperGenPass, but considering writing my own version that uses customizeable…

Arbitrarily-Structured Data in Relational Databases

This approach is similar to FriendFeed’s schemaless database framework . The key difference is in the data locality. The goal is not to build an effective schemaless database on top of a relational database, but rather to accomodate for rapidly-evolving relational schemas and reducing the difficult of migrating forward. Hypothesis In an evolving relational (SQL) database schema, we store two…

Rules of thumb for novice designers (like myself)

My strategy as a novice designer is to keep track of some rules of thumb to reduce the probability of making bad mistakes from lack of experience. If I’m careful enough, then I can often get to a point where just a little polish from an experienced designer is what it takes to get it from the 80% to the 100% mark. Keep a grid , always align to the vertical columns, but also strive to align…

What it's like to stutter

Drawing without using reference is one of my favourite hobbies. Struggling to pull an image out of the depths of my mind, like a fierce fish fighting for freedom. Reeling and reeling, until the moment when the fish bursts out of the still surface of the water, when the splash from the water blankets me as a sign of impending success. The rod sways unbalanced from the weight of the catch. The line…

(untitled)

Everything Not Chronological This is a repository for my knowledge and thoughts about everything that is not time-sensitive. Blog posts I need to port to this repository Protip for ambitious engineers looking for a cool job: Forget job boards, talk to angel investors. Considering offers? A checklist in alphabetical order Circadian Somersault: 28 hour days for 1 week Invention: Pass-through…