Last month, I asked you for questions.
Among other questions, a listener from South Africa asked whether, during my commute, I listen to music or podcasts, and why. It's interesting as I've been working from home for the past two years and barely had to commute.
I chose this as the first podcast question and enjoyed answering it live. The episode will come out soon.
What's your take? Do you prefer to listen to music or podcasts?
If you want, you can reply to this email, send a voice note, or ask a question at gettingsimple.com/voice.
I'd love to hear from you.
For the last episode of Getting Simple, Roberto Molinos highlights the benefits of being patient and embracing uncertainty and shares a series of techniques, theories, and books that can help you rethink your company, market your products, and have a 4-day workweek.
Toggl Track is on. Every second counts toward the active task. But I'm frozen. The time block I allocated to this piece of work has ended, and I can't decide whether to continue or move onto the next item. Tasks often take longer than I initially thought.
What should I do? Time is ticking.
Andy Warhol's artworks have sold for millions of dollars. His most famous works—think of Campbell's Soup Cans (1962) and Marylin Diptych (1962)—are limited edition paintings. Campbell's Soup Cans' piece consists of 32 images produced over five months1, and Marilyn Monroe's artwork consists of 50 portraits.2
After hand-painting thirty-two soup cans by hand, Warhol moved to photo-silkscreen, a printmaking technique originally invented for commercial use that allowed Warhol and other artists to create reproductions of the same artwork using a silkscreen.3
Warhol painted the soup cans with acrylic paint. Each canvas corresponded to a soup variety sold by Campbell's back in the 1960s.
Screen printing speeds up the reproduction of an artwork. Once the silkscreen is ready, colors are applied, one by one, using a squeegee to push the ink through the mesh screen4, either by hand or automatically with a machine, a process being used at the time to mass-produce advertisements.3
"I don't think art should be only for the select few," Warhol claimed, "I think it should be for the mass of the American people."
Nowadays, we could argue this vision is a reality. Large corporations and artisans deploy a wide range of mediums to automate what used to be done by hand, producing goods en masse, lessening their price and uniqueness while improving its quality and availability. You can buy a ready-to-hang print of Vang Goh's The Starry Night at IKEA for $49.99 while the Museum of Modern Art in Midtown Manhattan shields and exhibits the original painting.
Contrary to his statement, Warhol created artwork for the selected few that could pay for it. In 2007, a 1964 Large Campbell's Soup Can sold for $7.4 million, and Silver Car Crash sold for $105.4 million in 2013.
Aesthetics and taste aside, it's all about the story behind each piece.
Who made it, why, and in what context?
Campell's Soup Cans. (n.d.). In Wikipedia. Retrieved November 9, 2020.
Today, I bring you an episode that celebrates a year and a half of weekly sketches and stories. At the time I published this essay on my blog, I was at fifty-three publications. But as I write these lines, I'm at seventy-one posts. Happy Newsletter-versary!
The Amazon Web Services (AWS) command-line interface — the
awscli — lets you update the code of a Lambda function right from the cli. Here's how.
aws lambda update-function-code \ --function-name my-function-name \ --region us-west-2 \ --zip-file fileb://lambda.zip
Let's understand what you need to run this command.
aws lambda update-function-code- to execute this command you need the
awscliinstalled on your machine and your authentication information has to be configured to your account
--function-name- this is the name of an existing Lambda function in your AWS account
--region- the region in which your Lambda lives (in this case, it's Oregon, whose code is
us-west-2, you can see a list of regions and their codes here)
--zip-file- this is the path to your zipped Lambda code with the
fileb://prefix, in the example, there's a
lambda.zipfile in the current directory, alternatively you can use the
--s3-keyto use a zip file from an S3 bucket)
In a quest to spend more time writing and less time sharing online what I write, I developed an automated workflow to share my posts on social media with minimal effort.
What used to take me up to ninety minutes per week happens now automatically.
I can focus on sketching and writing while the machine takes care of formerly-manual labor.
I sketch and write daily, pairing up my sketches and essays as little stories. I have to manually scan and edit my drawings, as well as polish my writing drafts and translate them into Spanish. I then upload the sketch and story to my website and schedule them for publication.
On the publication date, a series of automated events take place.
Let's see what those are.
First, the story shows up on my RSS feed — a standardized system to distribute content online so users and applications can receive updates1 — which contains all my publications. The story also appears on the main page of my website, at Nono.MA, and on my sketches page, Sketch.Nono.MA.
In the early morning of the scheduled date, a Mailchimp newsletter campaign reads my RSS feed and sends the Spanish version via email to Spanish subscribers. Later that day, early morning in the United States, another newsletter campaign emails the original English story. (The one you're reading now.)
The same feed is read by Zapier, an online service I've configured to share my weekly sketch and story on multiple social media accounts, including Facebook, Twitter, Tumblr, LinkedIn, and Instagram.
The post is shared on two Facebook pages, two Twitter accounts, two Instagram accounts, one Tumblr account, and my personal LinkedIn profile, and scheduled to be re-shared on Twitter on Friday, two weeks later, using Buffer. An image-processing and optimization service called Imgix resizes my sketch's canvas to be shared as a square image on Instagram.
Two optional manual steps make this process feel a bit more human: sharing on Hacker News, something I might not want to do every week, and sharing on my Facebook timeline. (Neither Hacker News nor Facebook's API let you automate this step.)
Sharing each story used to steal ten to ninety minutes of my time.
Now my job is to supervise the pipeline works and make little adjustments here and there.
I can focus on sketching and writing.
I've recently started answering reader and listener questions on my podcast.
I encourage you to ask me anything related to the topics I write about on this newsletter and talk about on the Getting Simple podcast.
Go to gettingsimple.com/question and hit record.
I'd love to hear from you.
For the last episode of Getting Simple, I had the chance to talk to Microsoft's Adam Menges, former employee at Apple and founder at Lobe.ai, a company that helps people build intelligence into their apps by making it simple and understandable.
Tune in to discover Adam's unconventional education and career, why he strives to have death present in his day-to-day, and his life hacks and daily routines, including custom-made clothing, note-taking and file-management workflows, meditation, and much more.
The compact disc—the CD—was co-developed by Philips and Sony back in the 1980s.1 This format was initially developed to store and play music but was then adapted to what we know as the CD-ROM to store data as well, and other formats followed that allowed us to read and write different kinds of data.
In 1995, Microsoft shipped Windows 95 as a CD-ROM and also as a pack of 13 or 26 floppy disks for compatibility with older computers that didn't have a compact disc reader. The entire Windows 95 operating system was only around 22 to 24 megabytes. (More than four times smaller than Instagram for iPhone!)
Priced at dozens or hundreds of dollars, software used to come packed in a huge box. The lucky software, the one that could afford the development costs, would update every couple of years. Windows 95, for instance, released a few updates and patches in 1996 and 1997, while Windows 98 was cooking.
The transaction happened at a physical store where we were buying something tangible: a program packed in a box.
The Office Suite—Microsoft Word, Excel, and PowerPoint—was bought in a box and installed in your machine with a CD. Every time you formatted your computer or bought a new one, you would come back to those CDs and re-install the software. Office 2003. 2009. 2013. These updates demarcated the appearance of file formats and new functionality that wouldn't work in older versions.
Today you buy a phone with a set of preinstalled apps and, right at your fingertips, you have an app store. With a payment method, you can make a transaction with a finger tap, your fingerprint, or a scan of your face. The app starts installing right away. Maybe free, maybe a couple of dollars. This world is cheaper but gets more and more expensive as we transition into a subscription model. And stores are not only on your phone but on your tablet, laptop, browser, and even on your photo camera or game console.
We get notified of new versions of the apps we use daily. And there's a culture of constant improvement in which applications like Dropbox, Spotify, or Uber release a new version weekly or bi-weekly to keep up-to-date.
At any stage, software bugs can be introduced, existing ones fixed, and new functionality added. We used to have a program that would continue to work the same way for years. But we now have what's called liquid software. Ever-changing code and hundreds of version numbers. (Dropbox is up to version 107.4.443 as I write these lines!)
We're in an era of constant updates, and there's no way back. If there's a bug today, we expect a fix tomorrow. A patch, an update. The problem comes when we can't say no and need to keep programs up-to-date to run on the latest operating systems that would otherwise stop functioning.
In the mobile world, there's a chance that you never upgrade and use a fixed set of functionality. But the web is different. When you load a website, it might have been re-deployed. A new version, updated seconds ago, runs in your browser. The red button you used yesterday to send an email might have changed its place, color, or shape overnight. A piece of functionality you liked (or the annoying bug you had yesterday) might suddenly go away.
An alternative might be to use custom systems or systems with slower update cycles in which backward compatibility is a priority.
Yet it's unlikely we'll ever go back to the once-a-year update, the diskette, or the CD.
With automations in place, the need to spend time on manual tasks disappears; you can do more in less time and your duties are delegated to the machine, which completes them in the background while you do other things. You're free to move onto new endeavors. As John Maeda says, "Savings in time feel like simplicity."
I guess you'd agree with me that, while the job of scribes was fundamental for spreading knowledge back when printers didn't exist, there's no point in copying documents by hand today.
Automation shifts our perception of what we do and augments our production capacity, often devaluing the human labor involved.
When the technology allows for it, we relegate essential tasks to automated systems which don't require any human input, while other tasks—less important but harder to automate—end up filling the bulk of our time with manual labor.
Effortless automated processes are easy to underestimate. One click and you've got access to millions of online publications, books, and other content. One more click and the book is sent to your Kindle, printed at home, or shipped to your house.
If it can be automated, it will.
However, it's important to remember that the amount of labor involved to complete a task—or the lack thereof—doesn't determine its importance, and that the time and effort required to perform a task heavily depends on skill.
Even when we assign excessive value to processes that involve manual labor, the importance and necessity of a task should be defined with independence of the amount of hours required to complete it and its complexity.
Still, difficulty and expertise highly determine how much you'll get paid for work and, as more and more processes are automated, we'll have a harder time finding jobs that pay well.
This trend to delegate processes to the machine contributes to the undervaluation of manual work, except when the human factor provides something different that makes it unique.
To write text to a file using Python, you can either append text or overwrite all existing contents with new text.
To append text, open the file in
append mode, write to it to add lines of text, and close it.
file = open('/path/to/file.txt', 'a') # 'a' is append-to-end-of-file mode file.write('Adding text to this document.') file.close()
You can also write the entire contents of the files, overwriting any existing content using the
w mode instead of
file = open('/path/to/file.txt', 'w') # 'w' is overwrite mode file.write('This will override any existing content in the text to this document.') file.close()
You can use
\n and other codes to add line breaks to your document.
file = open('/path/to/file.txt', 'w') # 'w' is overwrite mode file.write('First line.\nSecond line.\nThird line.\n\nNono.MA') file.close()
# file.txt First line. Second line. Third line. Nono.MA
To determine whether a file or directory exists using Python you can use either the
os.path or the
os library offers three methods:
import os # Returns True if file or dir exists os.path.exists('/path/to/file/or/dir') # Returns True if exists and is a file os.path.isfile('/path/to/file/or/dir') # Returns True if exists and is a directory os.path.isdir()
pathlib library has many methods (not covered here) but the
pathlib.Path('/path/to/file').exists() also does the job.
import pathlib file = pathlib.Path('/path/to/file') # Returns True if file or dir exists file.exists()
Before the invention of printing, professional scribes copied manuscripts by hand. Woodblock printing, movable type, etching, and other inventions preceded the printing press, in our efforts to automate such a labor-intensive task as the duplication and production of text documents.
It would be hard to make a living rewriting books with pen nowadays. Printers and the internet make it easy and cheap to reproduce text documents or ship books to your house.
If we were to travel back in time and gifted a professional copyist a printer, they'd probably lit it on fire. I wonder how their life would change if, instead of burning the printer, they decided to use it.
When manipulating semantic segmentation datasets, I found myself having to downsize segmentation masks without adding extra colors. If the image is cleanly encoded as a PNG, only the colors representing each of the classes contained in the label map will be present, and no antialias intermediate colors will exist in the image.
When resizing, though, antialias might add artifacts to your images to soften the edges, adding new colors that don't belong to any class in the label map. We can overcome this problem loading (or decoding) input images with TensorFlow as PNG and resizing our images with TensorFlow's
NEAREST_NEIGHBOR resizing method.
import tensorflow as tf # Read image file img = tf.io.read_file('/path/to/input/image.png') # Decode as PNG img = tf.io.decode_png( img, channels=3, dtype=tf.uint8 ) # Resize using nearest neighbor to avoid adding new colors # For that purpose, antialias is ignored with this resize method img = tf.image.resize( img, (128, 128), # (width, height) antialias=False, # Ignored when using NEAREST_NEIGHBOR method=tf.image.ResizeMethod.NEAREST_NEIGHBOR ) # Save the resize image back to PNG tf.keras.preprocessing.image.save_img( '/path/to/output/image.png', img )
..they'd probably be surprised by how you do certain things.
Things they never thought of doing that way and assumed everyone else did differently.
What would you surprise us with?
Linters analyze code to catch errors and suggest best practices (using the abstract syntax tree, or AST). (Function complexity, syntax improvements, etc.)
Formatters fix style. (Spacing, line jumps, comments, etc.)
In 1942, Albert Camus published a philosophical essay titled The Myth of Sisyphus and his novel The Stranger. According to Encyclopaedia Britannica, Camus' essay "contains a sympathetic analysis of contemporary nihilism and touches on the nature of the absurd." These two works, often seen as thematically complementary, are believed to have established his reputation.1
"Camus argues that life is essentially meaningless, although humans continue to try to impose order on existence and to look for answers to unanswerable questions. Camus uses the Greek legend of Sisyphus, who is condemned by the gods for eternity to repeatedly roll a boulder up a hill only to have it roll down again once he got it to the top, as a metaphor for the individual’s persistent struggle against the essential absurdity of life."
In 2020, it's easy to fall into the trap of mindlessly repeating the same routine over and over again. Every once in a while, we need to stop and reflect; To meditate on whether what we’re doing makes sense and find out how to get out of the loop to spend time doing what gives us joy. I believe there’s no need to constantly measure productivity—some of what we do should just be play. That's exactly what, as I understand, happens in the Greek myth of Sisyphus, in which a man is condemned to repeat a useless task day after day. How far is our daily loop of work from this punishment? There's more work after today's tasks. The ball repeatedly rolls down as we near the top.
"According to Camus, the first step an individual must take is to accept the fact of this absurdity. If, as for Sisyphus, suicide is not a possible response, the only alternative is to rebel by rejoicing in the act of rolling the boulder up the hill. Camus further argues that with the joyful acceptance of the struggle against defeat, the individual gains definition and identity."1
In Cal Newport's words, "the key to thriving in our high-tech world […] is to spend much less time using technology." But regardless of how much technology is available to us, we struggle to spend less time in front of our screens, constantly exploring new life hacks in search of the elusive perfect life.
Last year, Daniel Natoli and yours truly worked together on Sisyphus, a short film produced by Getting Simple and Peripheria Films based on the Greek myth and Albert Camus' essay that attempts to portray our repetitive days running around, hunted by a sense of urgency.
It's been a pleasure to work with Daniel Natoli, Marina Diaz Garcia, and Pablo de la Ossa and I hope we'll bring you other works in the near future. I invite you to keep an eye on the work of Peripheria Films.
You can now watch the short film online and listen to a podcast interview with its director—Daniel Natoli—on his experience making the film.
For the latest episode of Getting Simple, I had a great conversation with director Daniel Natoli on his experience making Sisyphus, Getting Simple's first short film, which we are releasing online today.
It's easy to fall into the trap of mindlessly repeating the same routine over and over again. Every once in a while, we need to be reminded to stop and reflect; To meditate on whether what you’re doing makes sense; To find out how to get out of the loop and do what gives you joy. There’s no need to measure how productive each of your actions is—some of it should just be play.
That's exactly what, as I understand, happens in the Greek myth of Sisyphus, in which a man is condemned to repeat a useless task day after day.
In his book—Atomic Habits—James Clear presents a four-step pattern as the backbone of every habit. The four stages of habit are: cue, craving, response, and reward.
In his own words, "The cue is what triggers your brain to initiate a behavior. […] Cravings are the motivational force behind every habit. […] The response is the actual habit you perform. […] Rewards are the end goal of every habit."1
Clear mentions that we chase rewards because they satisfy us and they teach us. His framework involves four laws to create a good habit that go hand in hand with the four stages of a habit I just mentioned: make it obvious, make it attractive, make it easy, and make it satisfying.
By inverting these four laws to create good habits, Clear establishes four laws to break bad ones: make it invisible, make it unattractive, make it difficult, and make it unsatisfying.
This text is an excerpt of my Getting Simple podcast episode on Atomic Habits, where you can learn more on how I try to apply this method to strengthen my habits.
Here are resources that are helping me get started with machine learning, and a few that I would have loved to have known about earlier. I'll probably be updating this page with new resources from time to time.
A summary of terms, algorithms, and equations. (I barely understand the equations.=) These sheets, developed by Afshine and Shervine Amidi, differentiate between artificial intelligence (AI), machine learning (ML), and deep learning (DL) but many concepts overlap with each other. See this Venn diagram.
I highly recommend this book I'm going through at the moment, written by an ex-Googler who worked in YouTube's video-classification algorithm. It's dense but it introduces you to all relevant artificial intelligence, machine learning, and deep learning concepts, and guides you through preparing custom datasets to train algorithms, a bit of data science I guess. At the same time, it introduces you to three of the most-used machine learning frameworks—Sci-Kit Learn, Keras, and TensorFlow, being this last one the one I use on my day-to-day job developing and releasing machine learning models for production. Similar frameworks are Caffe or PyTorch, this one being used by Facebook developers. (Thanks for Keith Alfaro for the recommendation.)
I got started with machine learning by trying open-source algorithms. It's common to visit the GitHub repository corresponding to a paper and give it a try. Two examples are Pix2Pix (2016) and EfficientDet (2020). You try to use their code as is, then try to use a custom dataset for training and see how the model performs for your needs.
TensorFlow re-writes many of these models and makes easy-to-follow tutorials.
As I was waiting to depart to Spain, I met Lei and his son, Eric, at Boston Logan's Terminal E, right before boarding their plane to Beijing—back when there was no need to wear face masks or to stay two-meters away from strangers.
Eric watched over my shoulder to see what I was drawing. As far as my notes say, he spoke in broken English. But we managed to communicate with the help of his dad. They were both impressed of the Pentel water brush, which they hadn't seen before.
Eric pointed out his nickname—Dodo—when I said my name was Nono.
With a Croquetilla sticker stuck to his chest, Eric recorded a time-lapse of myself sketching an Air France plane.
In his own sketchbook, he was drawing a face in what I believe was an attempt to portray Lei—his dada—who showed me Eric's sketches on his phone (among which was an Iron-Man-looking character and a gun of his own design).
Lei an a few of his friends are architects, and he was sad to hear I'm not an architect anymore.
Here's a new episode on how generating lots of ideas might help you achieve originality from the Sketches series, a combination of two of my previous sketches post turned into audio.
"Many people fail to achieve originality because they generate a few ideas and then obsess about refining them to perfection." —Adam Grant, Originals
Listen to "Sketches — Quantity or Quality"
My drawing process is (nearly) always the same; I grab a pen, stroke the main lines of something I see, add detail, and shade. Afterwards, I make a decision based on how much I like the drawing and how much time is available to finish it—whether to add color or not.
I might get in love with the plain, black-and-white drawing and feel scared of spoiling the piece with watercolor even when I know color adds another dimension to the story told by my sketch. But I've been practicing.
The stress of coloring fades away the more I practice, and the positive feedback loop makes me color more of my sketches, improving my skill at the same time.
I've scanned certain drawings before and after coloring. This, apart from letting me keep a copy of the uncolored version of the drawing, might serve to train a machine learning algorithm which might learn how I color my sketches.
That fear of ruining what's half-done prevents us from improving.
Let's beat the resistance.
An easy way to avoid distractions while working on your device is to logout from email, social media, and any other accounts that often steal your time.
Next time you try to check out one of those sites you'll hit a wall—the login page.
You'll get a second chance to decide whether to give into the distraction or to continue working and come back to the site later.
Apache Groovy (Groovy Lang) "is a powerful, optionally typed and dynamic language, with static-typing and static compilation capabilities, for the Java platform aimed at improving developer productivity thanks to a concise, familiar and easy to learn syntax. It integrates smoothly with any Java program, and immediately delivers to your application powerful features, including scripting capabilities, Domain-Specific Language authoring, runtime and compile-time meta-programming and functional programming."
The fact that you will go to sleep tonight and wake up tomorrow makes you feel immortal. A seventy-year-old person has gone through this loop more than 25,000 times. There's still plenty of time to live—you think.
But despite science's lengthy efforts to vanquish death itself: we all die eventually. A feeling of permanence fools us into thinking that what surrounds us today will be there forever.
Around twenty five years ago, I moved with my family into a new house. Among other greenery, two lemon trees were planted by the porch.
Last year, I sat in the garden and sketched one of them.
Under the right conditions, certain tree species live for centuries. For citrus trees, the average life expectancy is fifty years.
Barely a few months after my drawing, the lemon tree dried out and got cut off the ground. Now the grass covers its trunk's remains while his twin brother is still kicking.
Every day is a new opportunity to acknowledge what you have.
Nothing lasts forever.
macOS ships with Python 2 by default, you can install set Python 3 as the default Python version on your Mac.
First, you install Python 3 with Homebrew.
brew update && brew install python
To make this new version your default add the following line to your
Then open a new Terminal and Python 3 should be running.
Let's verify this is true.
python --version # e.g. Python 3.8.5
Homebrew provides info about any installed "bottle" via the
brew info python # firstname.lastname@example.org: stable 3.8.5 (bottled) # Interpreted, interactive, object-oriented programming language # https://www.python.org/ # /usr/local/Cellaremail@example.com/3.8.5 (4,372 files, 67.7MB) * # ...
And you can find the path we're looking for
brew info python | grep bin # /usr/local/bin/python3 # /firstname.lastname@example.org/libexec/bin
Your system's Python 2.7 is still there.
/usr/bin/python --version # e.g Python 2.7.16
You can also use Homebrew's Python 2.
brew install python@2