After downloading a website as HTML with cURL or any other workflow, you can convert the HTML code to the Markdown syntax with pandoc
.
pandoc -o output.md input.html
You can download any website as an HTML file (without the site's assets) using cURL in the command line, using the -L
flag to follow any existing redirects.
curl -L https://nono.ma --output nono-ma.html
The manual alternative is to right-click on a website on your browser of choice (say, Google Chrome or Firefox), select Save As..
, and save the site as HTML with some of its assets in a subfolder.
Afterwards, you can convert the downloaded HTML page into a Markdown document with pandoc.
Here's how to get the raw String
value of a Stringable
object. Laravel's Illuminate\Support\Stringable
has lots of helper functions, but sometimes you want to get the raw string value. For that, you just need to use the strval
PHP built-in function on an object of the Stringable
class.
// Define Strintable object
$stringable = Str::of('laravel-stringable-to-string');
get_class($stringable); // returns Illuminate\Support\Stringable
gettype($stringable); // returns object
// Get its raw String value
$string = strval($stringable);
get_class($string); // returns PHP Warning: get_class() expects parameter 1 to be object, string given in […]
gettype($string); // returns string
They say you need to write a couple of nonsense pages to warm up before you are ready to write something meaningful, and I've experienced this to be true. I rarely sit and write with a clear idea in mind but begin by pouring random thoughts.
Writing is about creating a daily practice where you repeatedly show up and do your thing waiting for the magic to appear. Without this practice (time-based labor to some extent), you won't be able to get to the good parts—even if you've been practicing for decades—as it's hard to write anything meaningful in thirty minutes. I reserve time to sit and write every day without the pressure of having to get anywhere specific. A thirty-minute daily practice can take you far. (That's 182 hours of writing a year.)
My current goal is to write a minimum of two hundred words per day, but it's easy to go over once you get going. I practice deliberately to better articulate my thoughts, communicate and share my ideas, and express myself more clearly; I believe writing and storytelling benefit my podcast conversations, talks, and live streams.
Right now, the only pressure comes from writing publicly once a week, posting a story with a hand-sketched illustration on Tuesdays (which you're reading). Publishing frees me up from the fear of sharing what's on my mind, telling the world who I am, and being judged, and forces me to refine my writing and direct it to my readers. One essay at a time, I share my worldview and accept that my perspective will inevitably change. But that's okay—that means I'm evolving—and you should feel the same way.
Two hundred words won't get you far, but showing up day after day can translate into writing more than seventy thousand words per year, which will surely make a difference.
Clack! Clack! Clack! The wind pushes a cluster of bamboo logs against one another. Grrr! A tall log resists the wind. Bamboo is known for its structural soundness and its relaxing sounds. I sit with my partner next to a bush of common bamboo—the bambusa vulgaris, native to Indochina and the province of Yunnan, China1—in what feels like a humid piece of jungle. But we're far from the jungle. We're in Málaga's La Conception Botanical Gardens, our hometown. The pandemic forced us to stay during our vacation and trade the expensive flight and accommodation fees for a calm week of rest and light local tourism. The admission ticket is five euros and is free on Sunday afternoons. In minutes, we walked by exotic plants brought from remote parts of China, Japan, Australia, New Zealand, Africa. As a curiosity, April is the month of erythrina caffra. People mark wood logs and cactuses with love messages and graffiti signatures as a memorandum of their time on earth. The trash can by the historical gazebo—signed with a multi-color marker—reads, Imon Boy ❤️.
Common bamboo. Wikipedia. ↩
I believe all of us do.
Even when you can't find the right words for us to understand what you're trying to say, the exercise is worth the effort; you can clarify your message by explaining it to others.
We have more mediums to deliver our message than we could have ever wished for—think blogs, newsletters, podcasts, live videos, or social media—and no shortage of people who want to talk.
What continues to be scarce (and we should work on) are trust, authenticity, and messages worth our attention.
Will you care enough to try?
Do you remember when music was sold on compact discs? The amount of audio that could ship in a CD was limited to 74 minutes and later extended to 80 minutes. Some albums will be sold with two, three, or four discs to be able to pack more songs. This limitation made it essential to select the contents that were going to be shipped carefully.
Nowadays, we have unlimited audio available in our pockets, and we don't even need to think how much we ship or even its length. YouTube makes millions of hours of video and audio available, and streaming services like Spotify provide us with an immense catalog of music and podcasts available to us without worrying about where the music is stored. With enough time and internet bandwidth, we can stream anything.
In the 2000s, I got a portable CD player, the Sony Walkman E-220, which I didn't get to use that much with the advent of the internet. It still works, and it looks as new. Apart from the standard playing function—which plays all the tracks on the CD ones—this device could play songs on repeat mode, looping over the entire disc in order; on shuffle mode, looping through songs in random order; or on single track mode, playing a single track repeatedly. The number of songs we could carry with us was limited, and we paid for each new album. Streaming services and the internet let us bring with us millions of songs today.
There is a little arrow symbol that seems to have stick until today—it shows up on Spotify and other digital music players. The arrow goes left, down, and right, and it means you're going to be looping through a specific block of audio; a playlist, an album, or a song.
Can you imagine situations in which you may want to play a song over and over and over? I want to share with you a habit I've been practicing for many years. Listen to this Getting Simple episode on looping playlists.
If you're getting this message when encrypting files with a GnuPG—the GNU Pretty Good Privacy (PGP) package—you can mark your key as trusted (if that's the case). This often happens when you copy a trusted key from one machine to another.
Here's what I was getting before 'trusting' my own key.
gpg: <KEY_ID>: There is no assurance this key belongs to the named user
It is NOT certain that the key belongs to the person named
in the user ID. If you *really* know what you are doing,
you may answer the next question with yes.
Use this key anyway? (y/N) y
Every time, I'd have to answer y
to complete the encryption process.
I learned how to skip this step from this StackOverflow post.
gpg --edit-key <KEY_ID>
gpg › trust
Then you set the degree to which you trust the specified key.
1 = I don't know or won't say
2 = I do NOT trust
3 = I trust marginally
4 = I trust fully
5 = I trust ultimately
m = back to the main menu
I selected 5 as this is a key I created for myself.
Your decision? 5
Do you really want to set this key to ultimate trust? (y/N) y
Confirm, then quit.
gpg › quit
Now you can use your GPG key without confirm every operation.
Charts.css is a modern CSS framework. It uses CSS utility classes to style HTML elements as charts.
When I lived in London in 2015, I left my job two months before going to live and study in Cambridge, Massachusetts. Instead of accruing two more months of pay, I would take a break, travel to Japan for two weeks, and spend the summer back home. I planned for a two-month pause.
A question submitted to the podcast by Marc Exposito1 made me reflect on 'mini-retirements'—what they are and potential techniques, challenges, and reasons to live as if you were retired—and, in retrospect, understand my 2015 break like one. I deliberately reserved time to wander around Japan's streets at my own pace (like that of a turtle) and enjoy Málaga's sunny weather. What would happen if, instead of working for forty years and retiring for twenty, you distributed those twenty years throughout your career? Marc asked.
Listen to a Getting Simple podcast on mini-retirements.
You can submit a question here. I'd love to hear from you. =) ↩
A few months ago, I started working with a new set of watercolors — the St. Petersburg White Nights Nevskaya palette — which comes in a plastic box with twelve pans. On their website, St. Petersburg lists dozens of colors; standard, pastel shades, and metallics.1 The Nevskaya palitra (Russian for palette) refers to the colors of the 74-kilometer-long Russian Neva River, more vivid than my Winsor & Newton set; which may vary depending on when and where you buy the set. My palette contains cadmium yellow medium (201), Indian gold (244), cadmium red light (302), carmine (319), ceruleum blue (503), ultramarine (511), emerald green (713), sap green (716), raw sienna (405), burnt sienna (406), sepia (413), and Payne's gray (812).
You can Download St. Petersburg's color chart. ↩
If you multiple Vue components of the same type throughout your application but they're not in the same parent DOM element, mounting them may not be as easy as calling their parent.
In this first example, we can mount all of our button-counter
components by mounting their parent, #button-container
.
<div id="button-container">
<button-counter></button-counter>
<button-counter></button-counter>
<button-counter></button-counter>
</div>
We just need to make one call.
new Vue({ el: '#button-container' });
But what if our components are spread throughout different HTML elements?
Imagine you have components of the same (or different) types spread throughout your website's DOM.
<div>
<button-counter></button-counter>
<button-counter></button-counter>
</div>
<div>
<button-counter></button-counter>
</div>
<button-counter></button-counter>
We can iterate through the DOM elements and mount them one by one.
// Obtain all button-counter elements
let elements = document.getElementsByTagName('button-counter');
// Convert HTMLCollection to array
let arr = Array.prototype.slice.call( elements )
// Loop through array and mount all elements
arr.forEach((el) => {
new Vue( { el });
});
Note that we had to convert the HTMLCollection
to a JavaScript array before we could call the .forEach()
function to iterate over the button-counter
host DOM nodes.
This works with Vue 2, and Vue 3 recently released new features for multi-root components and optional TypeScript support.
Change this.
window.Vue = require('vue');
For this.
window.Vue = require('vue').default;
Then this should work.
window.Vue = require('vue').default;
window.VueResource = require('vue-resource');
window.Vue.use(window.VueResource);
When trying to use the newest features of Laravel 8.x to automatically install Babel plugins with the .vue()
call after using mix.js()
, I kept getting the following error.
AssertionError [ERR_ASSERTION]: mix.js() is missing required parameter 1: entry
Even though I was using Laravel 8.x, my application had been migrated from older versions and my JavaScript dependencies in package.json
were old. Specifically, I was still using Laravel Mix 5 while the newest version 6 had been released.
The solution was to change to version ^6.0.6
in package.json
and run npm install
, as the .vue()
call is a new feature in Laravel Mix 6.
"devDependencies": {
// ...
"laravel-mix": "^6.0.6",
// ...
},
Then on webpack.mix.js
.
mix.js('resources/js/app.js', 'public/js')
.vue();
I could then run the following commands successfully.
npm run dev
npm run watch
npm run hot
npm run prod
I believe this works with Vue 2 and Vue 3, and that the Vue version wasn't the problem but the version of Mix. (Note that I had also run npm update
previously to update other dependencies and had to remove the --inline
, --hide-modules
and --no-progress
options from my development
and production
commands in the scripts
property of package.json
.)
This script re-encodes the seconds between second 25 and 45 of an input.mov
video from mov
to mp4
; rotates the frames 180 (the hflip,vflip
flags flip all pixels vertically and horizontally); removes the audio (with the -an
flag); and speeds up the video (i.e., skips frames, with the flag setpts=0.05*PTS
, which you could adjust to have more frames, for instance, as setpts=0.1*PTS
).
ffmpeg -ss 00:00:25 -to 00:00:45 \
-i "input.mov" \
-an -filter:v "hflip,vflip,setpts=0.05*PTS" \
"output.mp4"
Hi Friends—
Today I bring you an episode with James Melouney and Selene Urban on how to get started with meditation, self-discovery, building trust and connection with your audience through a humane and authentic message, and key learnings from their entrepreneurial journey.
We also talked about different meditation and breathing techniques, marketing and automation tools, the struggles of having your own business, and how James and Selene approach work and life.
I truly hope you enjoy it.
I learned about pranayama, the yoga practice of controlling your breath, in an interview with James Melouney and Selene Urban. As Selene explained, a particular type of pranayama called sama vritti (equal length in the Sanskrit language) consists of breathing in and out in equal-length intervals. Say, counting four as you breathe in, hold, breathe out, and hold again. I added a bonus recording at minute 1:37:50 of this podcast episode, in which Selene guides us through a five-minute breathing session that you can use to relax, meditate, and calm down.
Breathe in.
One, two, three, four.
Hold.
Four, three, two, one.
Breathe in.
One, two, three, four.
Hold.
Four, three, two, one.
unoconv
is a tool to "convert between any document format supported by OpenOffice," available to install via Homebrew on macOS. You can convert, for instance, ppt
files to png
images (or to a multi-page PDF files) by running a command with this command-line interface program. The project is open source and you can browse its code on GitHub.
brew install unoconv
I ran into this issue when I first ran the unoconv
command.
unoconv
# unoconv: Cannot find a suitable office installation on your system.
# ERROR: Please locate your office installation and send your feedback to:
# http://github.com/dagwieers/unoconv/issues
That's because unoconv
can't find libreoffice
. You can install its Homebrew Cask.
brew install --cask libreoffice
After doing that, unoconv
can find the libreoffice
installation.
unoconv
# unoconv: you have to provide a filename or url as argument
# Try `unoconv -h' for more information.
unoconv slides.pptx -f pdf
Even though you can directly export a PowerPoint presentation to JPEG or PNG format, unoconv
exports only the first page by default.
You can use ImageMagick's convert
tool to rasterize the PDF pages as images.
convert -density 300 slides.pdf image%d.jpg
Here's a bash script that will convert all ppt
presentations in a folder to jpg
images by folders.
# Convert all pptx files to multi-page pdf files
unoconv -f pdf *.pptx
# Loop through pptx files
for f in *.pptx
do
echo "${f}.."
mkdir -p ${f}-jpg
convert -density 20 ${f%.*}.pdf "./${f}-jpg/image%d.jpg"
done
You can see the extensive list of supported input and output formats on unoconv's documentation and read more about how to use unoconv
in its help manual page or by running unoconv -h
.
To read environment variables from a Python script or a Jupyter notebook, you would use this code—assuming you have a .env
file in the directory where your script or notebook lives.
# .env
FOO=BAR
S3_BUCKET=YOURS3BUCKET
S3_SECRET_KEY=YOURSECRETKEYGOESHERE
# script.py
import os
print(os.environ.get('FOO')) # Empty
But this won't return the value of the environment variables, though, as you need to parse the contents of your .env
file first.
For that, you can either use python-dotenv
.
pip install python-dotenv
Then use this Python library to load your variables.
# Example from https://pypi.org/project/python-dotenv/
from dotenv import load_dotenv
load_dotenv()
# OR, the same with increased verbosity
load_dotenv(verbose=True)
# OR, explicitly providing path to '.env'
from pathlib import Path # Python 3.6+ only
env_path = Path('.') / '.env'
load_dotenv(dotenv_path=env_path)
# Print variable FOO
print(os.environ.get('FOO')) # Returns 'BAR'
Or load the variables manually with this script.
import os
env_vars = !cat ../script/.env
for var in env_vars:
key, value = var.split('=')
os.environ[key] = value
# Print variable FOO
print(os.environ.get('FOO')) # Returns 'BAR'
From the outside, Cal Newport looks to me as a superhuman. On top of having family and kids, he teaches computer science at Georgetown University, Washington, publishes academic research papers, writes about the intersection of digital technology and culture, has published six books, and will be releasing his seventh book—A World Without Email: Reimagining Work in an Age of Communication Overload—next Tuesday, March 2, 2021, which is now available for pre-order.
Newport started writing and publishing books while he was a student—his first titles include How to Win at College, How to Become a Straight-A Student, and How to Be a High School Superstar—and started building a community of readers who enjoyed his Study Hacks blog.
So Good They Can't Ignore You was Newport's first book outside of the college or high school arena, which walks you through how to "build a career you truly love [where] you're not only paid well, but you're doing work that matters." Newport teaches the Top Performer course online—based on this book—together with Scott Young.
I've lost count of how many times I've recommended his latest books on the podcast and my writing, mainly Digital Minimalism and Deep Work.
Deep Work was a response to readers' questions on how to structure their workday. As reads the summary of his Wall Street Journal bestseller, "deep work is the ability to focus without distraction on a cognitively demanding task. It's a skill that allows you to quickly master complicated information and produce better results in less time." Newport firmly believes we can only do deep work with full concentration without distractions. His approach consists of working in a series of 1 h 30 min blocks separated by one-hour breaks that he uses for productive meditation (recharge walks or breaks in which your mind can continue pondering about the problems you're trying to solve at work). To keep track of your time, Newport created The Time-Block Planner, a notebook that lets you plan your day using this technique.
For the past years, I've been using this method using this 7:00–19:00 time-blocking sheet that you can download here. It contains four planning cards to print in an A4- or Letter-sized sheet to fold in four. Works best with two-sided printing to create eight cards to cover an entire week. I try to block time for deep tasks one day in advance at the end of my workday.
Digital Minimalism was a response to readers who asked how to manage their non-work time. My takeaway from this book is that a social media sabbath—going cold turkey for thirty days in a row—can help you get rid of the habit of mindlessly scrolling through your social media feeds and reclaim your leisure time, only getting back to using social media after you've identified what value you're getting out of them if any, and making sure to schedule your leisure time as well as your workday to ensure the activities you want to do are happening. It's interesting how much Newport—a person who's never been on social media—can contribute with his digital minimalism philosophy. In my case, I spent three months in a row without social media. I decided I would be present by sharing the content I created but wouldn't routinely interact in other ways and would remove the social media apps that remained on my phone.
A World Without Email will be released next week. As Newport mentions on his podcast—Deep Questions—online communication as we know it today isn't the result of careful thinking in search of the best way for knowledge workers to communicate but something that happened because the technology was there. We embraced email and instant messaging as the solution, but Newport explains how this constant influx of messages depletes our ability to perform deep work. He sees applications like Slack or Teams as transient applications that will go away sometime soon, as we devise new methods that will let us—as knowledge workers—work without distractions. I already pre-ordered a copy.
I doubt Cal Newport is superhuman, but I applaud his work and life approach and his consistency to ship work that matters.
The 2020 pandemic broke my 'urban sketching' habit and I don't sketch outside as much as I used to.
Yesterday, the blue sky pushed me to leave the keyboard and adventure myself out with my sketchbook, pens, and watercolors.
I enjoyed drawing a concrete mixer truck as I caught up on the phone with Grandma, who will get her first COVID vaccine shot tomorrow.
The truck comes and goes to a huge building site at Hoyo de Esparteros, Málaga, for the ongoing construction of an H10 'high-rise'1 hotel by Pritzker Prize architect Rafael Moneo.
It'd be great to capture the hotel's evolution on my sketchbook, as days get longer and sunnier. That, surely, will help to get back the urban sketching habit.
The building is just eight floors, but most buildings around it aren't more than three or four floors. ↩
Here's how I installed pandoc
on my MacBook Pro (13–inch, M1, 2020) to run with Rosetta 2 — not natively, but on the x86_64
architecture — until a universal binary for macOS is built that supports the arm64
architecture in new Appple Silicon Macs.
This guide may be used to install other non-universal brew packages.
# Install Homebrew for x86_64 architecture
# https://soffes.blog/homebrew-on-apple-silicon
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
# Install pandoc using that version of Homebrew
arch -x86_64 /usr/local/bin/brew install pandoc
Outputs
==> Downloading https://homebrew.bintray.com/bottles/pandoc-2.11.4.big_sur.bottle.tar.gz
Already downloaded: /Users/nono/Library/Caches/Homebrew/downloads/34e1528919e624583d70b1ef24381db17f730fc69e59144bf48abedc63656678--pandoc-2.11.4.big_sur.bottle.tar.gz
==> Pouring pandoc-2.11.4.big_sur.bottle.tar.gz
🍺 /usr/local/Cellar/pandoc/2.11.4: 10 files, 146.0MB
# Check pandoc's version
arch -x86_64 pandoc --version
Outputs
pandoc 2.11.4
Compiled with pandoc-types 1.22, texmath 0.12.1, skylighting 0.10.2,
citeproc 0.3.0.5, ipynb 0.1.0.1
User data directory: /Users/nono/.local/share/pandoc or /Users/nono/.pandoc
Copyright (C) 2006-2021 John MacFarlane. Web: https://pandoc.org
This is free software; see the source for copying conditions. There is no
warranty, not even for merchantability or fitness for a particular purpose.
arch -x86_64 pandoc sample.md -o sample.html
Contents of sample.md:
# Hello, Apple Silicon!
- Pandoc
- seems
- to
- work.
Contents of sample.html:
<h1 id="hello-apple-silicon">Hello, Apple Silicon!</h1>
<ul>
<li>Pandoc</li>
<li>seems</li>
<li>to</li>
<li>work.</li>
</ul>
If you draw every day, it's inevitable to repeat certain objects. The items I bring with me daily—Airpods, phone, watch—and the ones I work with at my desk—computer mouse, microphone, laptop, chair—show up every once in a while on my sketchbooks. Yet each sketch is different. Think of the omnipresent face masks. Every time a mask sits on the table or hangs from a wall, it takes on a unique shape and sketching it becomes a brand new challenge.
Other artifacts and scenes, however, only appear once—the drawing of a place I traveled to, a gathering with family or friends, a building, a distinct palm tree—and become tied to a memory.
When running any git command — including git pull
, git push
, git status
, etc. — I was getting this error on macOS Big Sur.
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
The message means the Xcode Developer Tools are not properly installed, and you need to run the following command to fix this.
xcode-select --install
A window will prompt you to Install
the Developer Tools. After two minutes, a message saying "The software was installed" showed up on my machine, a MacBook Pro (13-inch, M1, 2020). I was good to go.
Ever since I lived in Cambridge, Massachusetts, I receive emails from the City of Boston. Yesterday, Mayor Martin J. Walsh declared a snow emergency ahead of the forecasted winter storm, scheduled to start yesterday at noon and end today's afternoon (Boston time). "I am urging everyone to be ready and prepared for tomorrow's forecasted snowstorm," said Mayor Walsh. According to the warning, my fellow Bostonians are better off removing their vehicles from main roads, using caution outside, and staying home.
Here, in Málaga, Spain, all non-essential business is about to close for fifteen days. The weather doesn't invite us to stay inside; the high was 25 Celsius degrees last week. Mask ok, I walked more than twenty kilometers over the weekend, wearing my sunglasses and enjoying the sunny weather. We'll get colder days before the summer, but nothing compared to the snowy winters of Cambridge.
I get nostalgic of my days in Cambridge when friends send pictures; I used to walk to class under the snow, boots on, enjoying this buffer time to be alone with my thoughts, call, or listen to podcasts. That nostalgia might be why I don't click the 'unsubscribe' button at the end of the City of Boston.
There's barely anything we can do. But we can still walk outside.
Be safe, stay sane, and stay healthy.
P.S. You can now listen to a new Getting Simple podcast episode with Mike Gabour on Falling in Love With the Ocean, Dark Showers, Attention, The Sensorium, and The Contents of his Backpack.
Hi Friends!
Today, I bring you an insightful conversation with Mike Gabour, a good friend of mine whom I admire and have been meaning to get into the show for a while. I love the attention he puts into everything he does and his peaceful and quieting worldview. Listening to him talk is soothing.
I hope you enjoy learning how Mike fell in love with the Ocean, his take on mindfulness, meditation, attention, and love, his experiments with dark showers, the Sensorium, a detailed commentary on the contents of his backpack (of which we'll share a video in the coming weeks), and much, much more.
Without further ado, let's dive into Mike's mind.
Awhile back, I wrote about my sketchbook of choice: the A4, landscape, 300-gram watercolor Moleskine (29.7 x 21.0 cm, 8.25 x 11.75 in). After going through four of these sketchbooks, I've grown used to their format. But it feels as if the Italian brand decreased the paper quality of their sketchbooks; its pages don't hold watercolors as well as they once did.
While I investigate whether it's the sketchbook or my use of it that's changed, its apparent decline in paper quality made me look for alternatives. Luis Ruiz recommended the Alpha and Gamma Series from Stillman & Birn—an American company founded in 1958 by the black hardbound sketchbook pioneer, a Viennese bookbinder by the name of Philip Birn (1911–2004).1 I decided to go for the hardbound, 150–gram, white-paper Alpha Series (22.9 x 15.2 cm, 9 x 6 in), slightly bigger than an A5 sheet. The Sakura Micron 005 and 01 pens run smoothly on the Stillman & Birn sketchbook, whereas they scratch the surface of my 300-gram watercolor Moleskine paper. And I can work with my watercolors reasonably well, as long as I don't apply too much water.
Here's the first page of my Stillman & Birn sketchbook. I'll be sharing more of my sketches and thoughts on this sketchbook in the coming months.
If you use them, what are your notebook and sketchbook of choice?
Stillman & Birn. (2021). About Stillman & Birn. Accessed Monday, January 25, 2021. ↩
Here's how to execute a deployed AWS Lambda function with the AWS command-line interface.
Create a payload.json
file that contains a JSON payload.
{
"foo": "bar"
}
Then convert the payload to base64
.
base64 payload.json
# returns ewogICJmb28iOiAiYmFyIgp9Cg==
And replace the contents of payload.json
with that base64
string.
ewogICJmb28iOiAiYmFyIgp9Cg==
Invoke your Lambda function using that payload.
aws lambda invoke \
--function-name My-Lambda-Function-Name \
--payload file://payload.json \
output.json
The request's response will be printed in the console and the output will be saved in output.json
.
If you're developing locally, you can use the aws lambda update-function-code function to synchronize your local code with your Lambda funciton.
There's no edit button.
Whatever happens, goes online in real-time—live.
Viewers can engage and interact.
You can produce as many hours of content as you invest in live streaming.
After the fact, you can edit videos, curate, filter, censor, and re-upload your content as separate clips; in a more digestible format.
But post-processing is a time sink.
(Even when machine-learning-based tools—think Descript—help you out.)
What comes with live streaming, as with any other public speaking gig, is that, over time, you get more comfortable and are willing to ship content with fewer edits, and that's something I'm working hard to improve.
P.S. In case you missed it, I started live-streaming four months ago. For now, streams focus on machine learning, but I plan to cover topics related to creative coding, podcasting, design, writing, sketching, and workflow automation.
I got this error while trying to pip3 install tensorflow
. I tried python3 -m pip install tensorflow
as well — it didn't work.
ERROR: Could not find a version that satisfies the requirement tensorflow
ERROR: No matching distribution found for tensorflow
As was my case, the reason for this error might be that you are using pip
from a Python version not yet supported by any version of TensorFlow. I was running Python 3.9 and TensorFlow only had compatibility up to Python 3.8. By creating a new environment with Python 3.8 (or reverting the current environment to use 3.8) I could pip3 install tensorflow
successfully.