I was getting some errors in my unit test output because I converted my SVGs to React components using SVGR.
As such, I needed to re-configure Jest accordingly.
Create the mock file
export default "svgr-div"; // This is the kebab case that jest is looking forexport const ReactComponent = "div";// @see https://react-svgr.com/docs/jest/ for setup
In practice, you try to eliminate task barriers that require back and forth communication by setting dedicated block of time to meet. An office hour, reminiscent of your professor’s office hours, means you broadcast to your working network you are available in this block of time to chat about open loops.
The problem this solves is eliminating the number of unknowns in your work, whether that be client feedback, questions about a design contract, or ambiguous bug tickets. These tasks become open loops are require external help in order to uncover what tasks you have to do next. It also lowers the communication gap with your work network or team and bridge that gap of understanding. The end goal is it helps with end output and/or goals.
Championed by Cal Newport and highlighted in his book, Slow Productivity.
I periodically try to dump all of my mental contexts into my notes. I noticed this comes in a few different flavors.
Safari Tabs on my iPhone and iPad: Goes into daily notes
Random thoughts - go into drafts and get processed daily
Shopping - including groceries, bills, and things I would like but not need. Those all go into a task manager
Dangling tasks - gets reviewed in the task manager inbox weekly
Personal thoughts - journaling every two weeks, although I want to do this more often
Events I have not logged - go into my calendar.
Downloads folder - weekly processed into other folders.
Long-term storage in Dropbox and backup drive.
Short-term in Inbox folder
Photos - place special ones in folders. Select shots in favorites.
I am trying to think of other things that I purge. I used to write in a notepad and write on the page of everything I was thinking about. I used to write about people I have not spoken to in a long time that I should reach out to, mantras I came up with, or completely random thoughts.
Last week, I launched the Stream which I’m proud of. I finally have a short space to write things down quickly and post to the website, rather than the longer posts for my essays. It all blurs together as I work on different output types. At some point, I want a more robust content funnel for writing. Or somewhere I can see the progress of different writing pieces visible on one dashboard.
The stream is a personal feed of my thoughts on things I’m working on, interested in, or a random shower thought that might be worth putting some additional thought into. The stream is a form of expression, posting something spur of the moment, without the crowdedness of a social network like Twitter or Facebook. Don’t get me wrong, those places are great for comment and reply interactions. But I also need my own trail of what I’m writing and thinking about that’s not hammered by likes, comments, and other social features that I find distracting.
There’s something nice and calming about seeing half-formed thoughts and ideas on a screen that’s wholly yours. I wish there was more of this kind of web. I was drawn to Tumblr back in 2008 because you could Microblog before you had a Facebook, LinkedIn, Twitter, Threads, or your variant of Fediverse website. Or even prior like posting your thoughts, fan-fiction, and other inspired writing on LiveJournal. Nowadays, that’s all we read from and post to. Or graduated to video like an algorithmic feed like TikTok. No shade for these companies vying for our limited attention. I think I’d rather take it slow and read some stranger’s beautifully designed blog that has little nuggets than an endless scrolling monstrosity that makes you wonder why you’ve spent hours on Reddit, but can’t recall much of what you did.
There’s more I want to add here, like better search capability, pagination, and an updated description of the stream. It’s designed minimally to emphasize the point that it’s not supposed to be too rich nor attention grabbing. And its flow is based on my writing, and no one else. Welcome to The Stream.
Stands for Observe-Orient-Decide-Act (“OODA”) Loop. It’s an iteration because it
feeds back into itself. Initially applied for military use, but has since been
used for business decision-making and personal development.
Observe the situation and mentally note any key data points.
Orient by placing data in the context of existing knowledge and mental maps to create a picture of the current situation.
Make a decision on how to act in light of that situation.
I’m finally cleaning up my RSS feeds because it’s too untenable. In my Readwise Reader, my inflow is far greater with things I know I won’t read over things that I know I’ll read later. Hence trapping me in a cycle of scrolling over reading. I’m going to unsubscribe from a bunch of things.
For the past few years, I’ve kept a note of inspirational websites. These websites include blogs that I continue to follow, creatives showing their talents, and web design that makes me wonder. I remember years ago, Ayush and I would break down websites that made us go, “How did they do that?” and reverse engineer them. It was interesting going into the source code, trying to solve how someone managed to wrangle with CSS to create a pretty infinite scrolling experience.
I wanted to share some of those websites with you. In the inspirations section, I break down which websites I’ve found and share them with you. I am starting with people whose work I admire and ideas within it that I want to remix back to this website.
Sometimes these websites are minimal, and there’s elegance to it. Sometimes, there’s a lot of interactivity and media, and it’s not overwhelming. When I think back to this website, I’m constantly wondering what I could add, and more importantly, remove. It’s a constant battle to strike the right balance in design.
Watch out for more updates to inspirations, including written work, YouTubers, and so much more. There’s overlap with creators, but that’s a deeper dive into an artist’s work. I’m looking forward to updating these inspirations from time to time.
I’ve slowed down on the website updates and have focused more on projects and
writing. I think there’s always a balance to strike with what more I could do
versus what really matters.
We have a little over a month until the wedding. The final details are being looked
at. When people tell me wedding planning is no joke, I can echo that sentiment.
Brooklyn Nine-Nine Promo
We bought the Brooklyn Nine-Nine boxset and have been watching through the series.
Netflix has the first four seasons, but there wasn’t enough closure for the remaining
seasons, and iTunes or Apple TV had a sale, so we’ve been putting that in the
background while we work on the wedding. It’s nice to have something grounding.
As for books, I’ve been wondering if I should read “The Power Broker” by Robert Caro.
It’s a monster of a book about Robert Moses. I was listening to 99% Invisible’s mini-series
about the book, and it sounds intense.
I’ve been slowly making my way through Cal Newport’s new book, “Slow Productivity: The Lost Art of Accomplishment Without Burnout” as well as Emily Nagoski’s new book, “Come Together: The Science (and Art!) of Creating Lasting Sexual Connections”.
My partner is starting to use Capacities, and I set up
an account to also try it out in tandem. There’s a lot of good ideas in that app,
but I’m not sure I’m going to covert from Obsidian. I’m used to my tool, and I’m
probably going to stick with it for now.
For the past few years, I’ve been trying something new instead of New Year’s resolutions: a yearly theme.
But first, what is a “yearly theme”? Instead of setting resolutions at the start of the year, you set an overall idea of how you would like to approach each year or season. This then becomes a guide for your personal and/or professional life throughout that period.
Ideally, you would also think of what the ideal outcome is for a set period and some key actions you would like to complete. This helps you maintain focus throughout the year when considering new projects.
My yearly theme for 2024 is “Year of Renewal”. As I mentioned in the last newsletter, I was under a lot of stress last year, and I thought I would take a step back and gather myself again.
In practice, this looks like a goal a month, focusing on a different part of renewal. January was defining boundaries. I answered the following questions:
What do I have to accept?
What do I leave behind?
What do I adopt?
This helped me determine how to bring in the new year by making these identifications.
In February, I wanted to renew my sense of play. As I’ll go over in my highlights, I’ve been playing with code again. ChatGPT and other LLMs have renewed my interest in bespoke applications, i.e. one-off applications that serve a singular purpose. It’s renewed my sense of what I like to work on, even if it’s a selfish purpose to fulfill my curiosities.
I’ll go over March’s goal in the next newsletter, as I’m still in the middle of it.
Craft By Zen Highlights
Now that I have a routine of adding content to my website, here’s a recap of what I did in March.
Weekly Notes - Weekly notes continue! I’ve been using that as a scratch pad collecting what I’ve discovered over the past week. I’ve wanted a reflection process that slows down the hose of information presented to us daily. There’s too much endless scrolling, and by forcing myself to review what it is I’m looking at. And also, at a second glance, I realize what’s important and not important to share.
Case in point, here’s an article about a couple who reconnected 77 years later.
Recruiters - as recruiters reach out to me, I’ve been adding their job postings to my classifieds.
Curations - I haven’t been as active in adding more curations. I have plans on adding a micro-blog at some point that will distinguish longer posts and a free-form stream of thought. I love the examples like The stream and The Verge authors.
Projects / Experiments - I was messing around with ChatGPT to create a Guitar Fingering tool to help me quickly look up a chord. I wasn’t satisfied with what I found online, so I aided ChatGPT to build on it, although, at the end of the day, I took what it outputted as a template and finished it myself.
Lastly, I was putting together some small scripts to help me parse through my Google Contacts export and add them to my Obsidian vault as a personal CRM. I will have an article to follow up with how I use the personal CRM soon.
Thanks for all of the support from everyone! If you like these updates, you can always reply to these emails and let me know what’s going on in your life.
Honestly, I didn’t know there was a community called Web of Weeknotes that posts on Medium and gets picked up by this filter. Right on. I stopped posting on Medium after everything got locked up in paywalls. I don’t feel right having to make people pay for a platform they don’t own. I thought freely writing on a platform means you should be able to share it with anyone. But then again, this isn’t Blogger or LiveJournal of yesteryear.
What’s interesting is when they mentioned the two party system in the early 1900s was not all that much different.
Progressivism wasn’t a thing yet, or was still its own party
Presidents were giving people jobs. The merit system wasn’t a thing yet either. Robert Moses wanted to enact a point-based system (much like how we use algorithms today)
Open-source intelligence (OSINT) is intelligence collected from publicly available sources. In the intelligence community (IC), the term “open” refers to overt, publicly available sources (as opposed to covert or clandestine sources)
By 2013, Netflix had begun entering into a series of “Facebook Extended API” agreements, including a so-called “Inbox API” agreement that allowed Netflix programmatic access to Facebook’s users’ private message inboxes, in exchange for which Netflix would “provide to FB a written report every two weeks that shows daily counts of recommendation sends and recipient clicks by interface, initiation surface, and/or implementation variant (e.g., Facebook vs. non-Facebook recommendation recipients). … In August 2013, Facebook provided Netflix with access to its so-called “Titan API,” a private API that allowed a whitelisted partner to access, among other things, Facebook users’ “messaging app and non-app friends.”
Honestly, I’m not depressed. I remember Austen Kleon’s book inspired me to read more obituaries. There’s some notable people (and throw in an aspect of design) that have passed away this past week.
The 2 pillars of strong relationships: High expectations and high support.
…
High expectations are the belief that the other person is capable of excellence, that their potential is only limited by their own views. High support is the ability and willingness to provide the love, support, and engagement to help the person meet those high expectations. Both are necessary to achieve a strong relationship.
— Sahil Bloom
Notable Videos
I didn’t realize how relatively new this all was with our switch to Natural Gas. And how much we’re shipping. This “bridge” seems quite permanent to me.
I keep a list of projects I want to work on called “Someday Builds”.
Many of these are bespoke apps that I know could help me, like an automation.
However, automations take time to build, and typically I’ll be able to finish
that task far faster than I can build the automation to reduce that overhead.
Case in point, I wanted to build a chrome extension that by running the
extension, the clipboard takes the head title and the full, cleaned link,
and copies it in markdown format. The reason I want this is to add quick links
to my daily notes without having to find the title of the article, put it in
the markdown format, grab a clean link, then add that to the parentheses in the
markdown format. Also, Obsidian loves to grab headings, so I will get a # symbol
for the description of the link. It’s a few extra keystrokes, and really not
worth the efforts (about an extra few seconds of my day, plus some extra effort).
Of course, the time to build is reduced to an hour of work with the help of
ChatGPT.
Prompt
I want you to act as a programmer. You have a deep knowledge of writing chrome extensions and understand the best practices. I will provide the purpose of the application and a feature set. If there are any ambiguities in the features, please pause in the next step and clarify questions using a numerical list format. Next, you will come up with the basic outline for the code as pseudocode before writing the program. The next message you will ask me is what the feature set is.
Want to build a chrome extension that by running the extension, the clipboard takes the head title and the full, cleaned link, and copies it in markdown format.
The chrome extension takes the webpage metadata and extracts the title. Then, it takes the URL. The output should be a string that is copied to the clipboard in markdown format as follows [Title](Link). I want the link to be clean, so no url queries like utm should be added. We can also register a shortcut that can trigger the extension. There should be a settings menu to modify this shortcut. Also, the settings menu should have a modifier for the output format. The name of this extension should be called “Copy Link to Markdown”.
Installing the Chrome Extension Locally
It’s been awhile since I’ve done this, so I Google searched an article to help me.
I used the Chrome dev team’s hello world extension as a guide.
Developing the Extension
The first generated codebase did not work. Of course, my prompt above says to pseudocode it first, which was a struggle because there were actual code snippets with a bunch of comments where the code should be. So I had to continue prompting it to give me the final code.
After about 15 minutes, I got the code working. That was after passing it back and forth a few errors and working through those one at a time. Then I saw opportunities everywhere of what I wanted it to do next, as well as places I knew where the codebase needs to be refactored.
I made it generate an image for the extension icon.
A screenshot of the extension in action
For whatever reason, the extension shortcut key needed to be set differently, so
I had to use a different menu for that.
Final Thoughts
I placed the extension on Github where you can play with it today. There’s a lot more work I need to do to make this extension publishable. But for a v1, it’s good enough.
The total development time was a little over an hour, and I’m happy about that because I’m already using it. And I can tell it makes a huge difference because I save links all of the time in my daily notes.
Instead of vertical format, which classes might tend to be presented with, you rewrite your concepts and smaller shots, especially when there’s a lot of information filled out to you lecture. This might be really good for understanding how to better study, especially when you go back to memorizing things for an exam and you Have to get better at the studying part of studying prepare for an exam
I did a really big re-write of my contacts in my personal rolodex, which I covered as part of a blog post I wrote recently. I was thinking about dissecting this further and exploring what next avenues to do with that. I was super curious what other people had to say about this topic, but it led to further discussion about how it relates to sales and marketing for their business. Or focuses on a specialized tool, like Monica. I have a few notes about this that I could also share as well.
In other news, my sleep has been destroyed again by springing forward for Day Light Savings, and I can’t seem to get to bed at a consistent hour. And I’m out of shape, as proven by running and biking again. Going full speed after stopping for a long interval was not a great idea.
Notable of the week
Gleam - Gleam is a friendly language for building type-safe systems that scale!
Running on the battle-tested Erlang virtual machine that powers planet-scale systems such as WhatsApp and Ericsson, Gleam is ready for workloads of any size.
I went through the language tour, and for the most part, it was straight forward. I learned about tail calls as recursion is used for looping.
Results are another thing I can’t really grapple with yet. As well as the left-handed arrow syntax for use, but I’m sure if I work with some Erlang, it will make more sense.
When designing from the ground up, create small, atomic components that can be combined into bigger components. Using biology as a guide, the complexity is organized into molecules, organisms, then pages. Templates are also used as layouts for those pages.