Yield to temptation
Oscar Wilde famously wrote, “The only way to get rid of a temptation is to yield to it.” But this quote is as profound as it is misunderstood.
People believe that giving in to a temptation is a weakness. And they judge harshly those who can’t resist their unhealthy urges. Yet, they don’t apply the same standard to people obsessed with, say, sports or arts. The difference between these two is thinner than most think.
Distributed Ops for Distributed Apps
My proposal for a talk I delivered at Velocity Amsterdam, 2016. Slides are included at the bottom of the page. For the full transcript of the talk, visit https://sudarkoff.blog/p/distributed-ops-for-distributed-apps (paid subscription, free trial available).
Description
In the world of microservices, when things are moving fast and constantly breaking, the accepted wisdom is that teams must own the whole stack and operate their services themselves. But how much stack is “the whole stack”? How do we ensure that operational standards are consistent across the organization? What’s the right balance between consistent standards and the ability to move fast?
Crêpes
Ingredients
- 3 eggs
- 1 pinch of salt
- 3 tbs of brown sugar
- 30g of butter
- 200g of all purpose flower
- 0.5L of whole milk
- 1 generous splash of Amaretto (alt: vanilla extract, Rhum, any other flavorful booze)
Method
Batter
- Beat the eggs
- Add the sugar and salt, and stir well
- Add the melted butter, and stir well
- Add some flour until the batter gets more uniform and then add some milk to make it smooth, continue until all flour rand milk have been added
- Add Amaretto
- Let the batter rest for an hour
Cooking
- You will need a ladle, some melted butter in a small container and a brush to oil the pan
- Set the pan on a medium heat
- Brush the pan with a little bit of melted butter (repeat every 5-6 crêpes)
- Using the ladle, pour some batter onto the pan while tilting and turning it to cover the entire surface of the pan with batter
- Take care not to make it too thick, these are not pancakes!
- Once the edges of the batter start to lift and the crêpe does not stick to the pan anymore, turn it over
- Let the crêpe cook for a minute more, then slide it to a warm plate and optionally brush some butter on it
Scripting versus automation
This was originally shared with the engineering org of a company I worked for at the time. It’s my stream of consciousness about the type of system my team was building at the time. Reproducing here without modifications, enjoy the chaos of my unedited remblings.
Team,
It became clear to me in the last few days that there’s not enough clarity about what we’re trying to build.
We keep talking about relatively small and specific things, but we never discuss the philosophy behind it all. What type of system are we building? Can’t we just install Puppet and Terraform and call it done? And focus instead on something more glamorous than spinning VMs?
Does It Make You A Better Person?
Does running make you a better person? Does climbing mountains make you a better person? Does becoming a parent make you a better person?
Some people seem to believe that it does. And there are plenty of those (especially those that don’t run, climb, or have kids) who believe that it doesn’t. And I tend to agree with them.
My deep conviction is that nothing extrinsic can ever make you a better person. Or a worse person, for that mater. Being rich won’t make you a better person. Being poor won’t either. Believing in God won’t make you a better person. Nor being an atheist. Surviving cancer or becoming terminally ill won’t make you a better person. And even helping others won’t magically turn you into a better person.
Buckwheat pancakes
This is my favorite recipe for pancakes. I made it a dozen times in the last few months and they inevitable turn out delicious.
These recipe is gluten-free, but not vegan. And I’m not sure how I would adopt it. Also be warned, your kids are probably not gonna love you anymore after you betray their trust by serving them these on a beautiful Sunday morning.
Please note that all the ratios in this recipe are by weight.
Borscht
My dad’s borscht recipe that he has been cooking for 50 years.
Ingredients
- 500g of beef with bones
- 3L of water
- 200g of root vegetables (e.g., onion, carrot, parsley root, radish)
- 200g of shredded cabbage
- 200g of beets
- 100g of tomates
- 300g of potatoes
- bay leaf, pepper, salt, herbs to taste
Method
- put the beef in the pot and add water
- simmer for a minimum of 2 hours, add salt after about 1h30m
- cut the root vegetables into 10mm cubes and sauté in vegetable oil
- separately sauté shredded cabbage until soft
- coarsely grate the beets and sauté for 15-20 minutes, until fully cooked
- blanche the tomatoes, cut them into pieces, and sauté in vegetable oil for 10-15 minutes on low heat
- remove the beef from the pot and filter the broth
- then add the sauteed root vegetables and cabbage to the broth and set on medium heat
- when it starts to boil again, reduce the heat to simmer
- add the potatoes cut into 15mm cubes and cook for 10-15 min
- add the sauteed beets and cook for another 10 min
- cut or shred the beef into small-ish pieces and add back to the soup
- finally add the sauteed tomatoes, bay leaf, pepper, herbs and the borscht is ready!
- serve with sour cream
Key Git concepts
Understanding a few key concepts will help you make sense of how Git works and how to use it effectively.
Full history
With Git, every repository contains a full copy of the project history, and no repository is inherently more important than any other.
Content-addressable
Git stores content in files with names that are 40-hexdigit (160-bit) SHA1 hashes. This has some interesting implications. It means for example that Git will never store the same data twice within a repository because identical data would have identical SHA1 hashes and therefore be stored in the same file. It also means that the contents of a Git object will never change because that would change the name the object is stored under.
Fitness Proportionate Disk Selection
This is a proposal I made for improving the disk selection algorithm of a distributed file storage system.
Current Disk Selection Algorithm
The current algorithm randomly selects a disk among the top N percent and assigns it to a given equivalence class. This strategy is suboptimal for a couple of reasons:
- Even when there’s a great variability of fitness values among the top N percent of the disks, the most suitable disks will have the same probability of being selected as the least suitable disks, thus leading to unbalanced placement. Simply decreasing the value of N is not sufficient to resolve the problem, as it is always possible to have a situation when the fitness variability is great regardless of how small the N is.
- When nearly all disks in the pool have similar fitness values, they all deserve equal chance, yet only the top N percent will be considered. It’s tempting to assume that the next round of placements will favor a different set of disks. But the selection of the next eligible set is determined by the weights that each fitness parameter is assigned. And it is possible that the same group of disks will be used for placement for a while, thus, once again, leading to unbalanced placement.
Undoubtedly, we would like to preserve some randomness in the selection algorithm to minimize the chances of overwhelming the same disks and nodes with placements and IO. But for reasons stated above, a fitness proportionate selection algorithm is more desirable.
Rock climbing lessons
There are many lessons to be learned from rock climbing, but the following three are the main ones for me.
Don’t give up
Very often giving up in rock climbing is scarier than persisting—nobody likes falling. Especially if it’s a long and nasty fall. And what you very quickly discover is that in rock climbing, like in life (or Jazz, if you’re a musician), sticking with it for long enough eventually gets you up there. If you are persistent and don’t give up, you sooner or later find your groove and come on top victorious.