"Writing for Software Developers focuses on teaching you how to envision, create, and publish mid-length technical tutorials and articles, but the principles and practices you’ll develop will help you write anything from a short README to an entire technical book. And regardless of why you write, this guide aims to provide you with the techniques you will need to reach your goals."
"Peter Seibel interviews 15 of the most interesting computer programmers alive today in Coders at Work, offering a companion volume to Apress’s highly acclaimed best-seller Founders at Work by Jessica Livingston."
Finishing up the book, Laws of UX. It’s a great primer on the topic and I’m looking forward to sharing it with my team. Also reading “Saving Time: Discovering a Life Beyond the Clock” by Jenny O’Dell.
Slowly moving to San Jose, California. The apartment has been finalized, and we have two months to move in. Also, planning my wedding for May 2024.
Deployed and continually making improvements to this website. I’m using Astro.js and re-learning Svelte along the way.
I’m nearly done with playing through Hogwarts Legacy.
I’ll add my schedule, written down so I have a better grasp of it.
It’s equivalent to writing it down on a calendar for the day. Helps remind me I have meetings coming up
I’ll also use this opportunity to interstitial journal to discover retroactively
This Day In The Past
I’ll review my daily review from last year to discover any insights
Mood Ranking
I’ll rank my mood out of 10, which I review at the end of the week.
This helps me see even if there are down days, there will be up days in the future.
Share your daily routine! If you’re systematic like me, I’d love to hear about it. If you free ball it, I’d love to hear from you too!
I took Tiago Forte’s course, “Building a Second Brain” back in 2021, and one of the first exercises we did was “12 Favorite Problems”. The idea is to lay out your favorite questions, and these questions are long-term problems without easy answers. The following are some questions that I continue to think about often, and take notes when I find new insights.
Questions
How can I build my relationship to be of equal partnership, while respecting what makes us unique?
How do I create and maintain a healthy lifestyle?
How do I maintain relationships with family, friends, and community that builds and encourages bonds, trust, and healthy lifestyles?
How do I incorporate rest alongside the stress of everyday life? Related: Tidying up and clear mental space
How do I build a solid financial future for my family and myself?
How can I grow my technical and interpersonal capabilities that continues to solve problems rather than cranking out widgets?
Interpersonal meaning soft-skills
What are the small, incremental changes that, if continued on a short time interval, can have compounding effects over time? Thinking habits, routines
How can I foster inspiration for creative output? Related: music, writing, and painting
How do I actively engage with content rather than passively consume it?
What are your favorite problems? Feel free to email them to me 😄.
One of those picturesque romance movies from a Merchany-Ivory production of an E. M. Forrester novel. And a punchable performance from Daniel-Day Lewis.
Cate Blanchett stars as Lydia Tár, chief conductor of a major German orchestra. In a strongly, yet still and resounding piece that leaves you contemplating why we stopped tolerating bad people making good art, and if that's ok.
A challenge to conventional time management advice, highlighting the finite nature of life and urging readers to prioritize meaningful experiences. The book emphasizes intentional living, encouraging a shift from constant busyness to a purpose-driven approach.
The author recounts her experiences in Bhutan and how it relates back to how the Bhutanese feel towards happiness and other contemplative thoughts on life.
A paper which provides an extensive exploration of memory, covering topics such as management, organization, and optimization. Despite being over a decade old, the paper remains highly relevant to software engineering today, as some of its insights and concepts continue to be applicable for optimal code performance.
Ira Glass, the host of This American Life, shared his insights on storytelling in a short 30 minute interview revolving around the importance of engaging the audience, using vivid language, and focusing on the structure and characters of the story.
When you start the year heartbroken and scared to start again, where do you go? In my mind, being 32 meant looking forward to getting married, starting a family, buying a home. Life had other plans for me. I took some time to reflect, and I started by selecting an annual theme. It was my “Year of Challenges”, where the theme at first meant to start again and regain a sense of agency. It ended as a way to look at events outside your control.
Wake Up Call
One of my biggest takeaways from the past year came from the book “Four Thousand Weeks ”, by Oliver Burkeman. “Seek out novelty in the mundane”, Burkeman writes. When you’re a child, more experiences are novel because those are first time experiences. When you’re an adult, most experiences are mundane because most experiences are routine. Burkeman’s suggestion for making those mundane activities novel is to take the time to notice them and reflect.
A way I’ve been tracking this is by utilizing a second brain and reviewing notes that I’ve saved throughout the week. Little tidbits from articles I read, ideas that are in their infancy, potential future projects I may want to start. It’s like reviewing your journal in a more systematic way, and remembering what your past self said to help inform your present self, and potentially make decisions for your future self. (In the future, I will write about my experiences with developing a second brain, what it means, and how I utilize it).
How Love Lasts
I never expected the year to be where I entered heart broken, and exited engaged. I had a lot of re-learning to do when it came to love. Furthermore, I read through How Not To Die Alone by Logan Ury to be an indispensable resource. Some big takeaways were “Date for a life partner, not a prom date”, and “Screw the spark”.
I had this erroneous belief that you should wait three years to propose to someone.
Year 1. The honeymoon phase.
Year 2. Share life experiences together through integrating with your partner’s family and friends.
Year 3. Share a home together.
But when you know, you know. Instead, I scrapped waiting years and I jumped straight to the ring and question. I was second guessing my plan. I wanted to surprise her at a rose garden in Oakland, but it was far too dark when we arrived. She was annoyed by the midterm elections, and I was thinking, what could a Plan B mean? I proposed in front of Fenton’s Creamery, and her annoyance became a delightful surprise. She was in tears, and I’ll never forget that moment.
A Run To Remember
I ran a marathon! I hadn’t been to the gym in two years, neglected my physical health during the COVID years, and was afraid to start working out again. What was different from the last time I found myself in similar circumstances was that I learned many lessons from my former physical trainer. I found an accountability partner in a friend who moved back to the area.
At first, it was just running every Saturday morning at Golden Gate Park. Then a different friend suggested I run the SF Half Marathon with her. I created a daily workout plan to get myself back in shape in 7 months, and it paid off. I ran the fastest half-marathon I could ever ask for, and it felt much better than the past two years combined. My biggest hope is that I take this feeling away with me for future years to come.
Exiting Thoughts
I intend to write about more experiences in short essays. Returning to writing is scary. I remember the video Ze Frank made about the “An Invocations on Beginnings”. He says “Let me think about the people who I care about the most, and how when they fail or disappoint me, I still love them, I still give them chances, and I still see the best in them. Let me extend that generosity to myself.” I think it’s hard to give yourself another chance, and easy to say “I’ll do this again another day”. Writing was my form of zen, and I miss it so much. Please consider continuing to read what I have to write, and support me in future endeavors.
I decided to re-write my personal website back in 2017, when I was much more active in writing on my blog. However, that changed quickly when I abandoned making updates in 2018 when I started my job at Clear Labs. There was no longer any time to write as we were working on their Clear Safety product.
I’ve had one or two failed attempts at doing a full re-write, and never fully committed to doing it until this past month. Part of the reason is I dreaded the migration from Jekyll. I knew most of my content was in markdown, but there was this fear in the back of my mind like it was an insurmountable task. Of course, that’s a fallacy, and when you know you could do other things with your time, this project inevitable went into my backlog.
Comeback with Astro
I’ve been itching to write again, and the urge trumped my fear of the migration. I decided to use Astro as my static site generator, with plans to run it as a server as a future. I wrote a small project in Astro, and thought how delightful it was, so I decided to see what the starter had for its blog starter kit. I was pleasantly surprised. It had a great base foundation to start migrating over blog posts, as long as I followed their markdown frontmatter, typically written as Yaml. By taking a look at their base schema, I could easily re-adapt the posts and get something rendering on the page write away.
import { defineCollection, z } from "astro:content";const blog = defineCollection({ // Type-check frontmatter using a schema schema: z.object({ title: z.string(), description: z.string(), // Transform string to Date object pubDate: z .string() .or(z.date()) .transform((val) => new Date(val)), updatedDate: z .string() .optional() .transform((str) => (str ? new Date(str) : undefined)), heroImage: z.string().optional(), }),});export const collections = { blog };
I needed additional metadata for my blog posts, like tags, post type, and a boolean for whether it was a draft.
I’ve created Next.js and Remix projects before, so the file-based routing system was intuitive. The preset included a blog folder with an index.astro and [[...slug]].astro file pre-filled. This made it super easy for my to figure out what was going on by reading the code and commenting the parts I didn’t understand.
After the blog posts migrated over, I quickly threw myself into the other pages that weren’t migrated over, specifically the about page, projects, logs, and newsletter series. Each of those became their own schemas. I updated their markdown frontmatter as well, and the personal site started to look like my old site again.
Deployment
The website was using Netlify, and while I personally would’ve preferred Vercel, it was a good choice. I setup some Github actions to continue to push to Github Pages as well. Netlify’s migration was a pain, because the configuration and its cache were set to build to Jekyll’s configuration. Migrating it over to Astro took some finagling to get the settings just right. I spent a good evening scratching my head until I found the correct environment variable to set it to.
A Side Note about Git
I created my old blog back in 2014, and I was still using master branch as the main branch. With this migration, I moved it over to main. For configuration reasons, it was having trouble moving over in my CI pipeline the first two or three builds. So please remember to check your settings.
Styling
At first, Astro gives you the css from the Bear Blog. While the minimalism was great, that’s not my type of styling. So I adapted it until it started the look the way I wanted it to. Quickly, I realized this isn’t going to be scalable. While astro limits their styling to the component you’re working on, it wasn’t good enough. And the global styles weren’t to my taste.
I knew I wanted to use Tailwind in a full project. Previously, I’ve only used it for tiny pet projects. I went full in immersion. At first, my global styles were being modified by the base.css injected styles from Tailwind. I put too much effort in trying to modify them when I realized, “I started from a base project, and I don’t need these base style files”. That’s when I stopped caring about my blog’s styling conventions and migrated over to Tailwind’s conventions.
Sometimes, it’s hard to break hard habits. The mantra of “Convention over configuration”, as heralded by Ruby on Rails”, was echoing in the back of my mind. While I am not fully migrated over to Tailwind yet, I plan to.
Conclusion
There’s a bunch of things left-over from this migration that I have to still work on.
Analytics (ideally, an alternative to Google Analytics)
Add filters for the writing so you can filter by tags
Migrate over my Newsletter from TinyLetter to Buttondown
Overall though, I’m happy with my switch, and plan on working on my website more. Astro makes it incredible easy to add components from other libraries that I’ve worked with in the past (personally used React, Vue, Svelte, and Solid), so I plan on making more interactive blog posts and projects for this website in the future.
If you have any questions about the migration, want to give me feedback, or would like some help on your own Astro blog, feel free to email me. I’m always happy to help. (Email is in the footer of all pages).
In Astro, there’s this concept of islands. You have a few options on making your page interactive.
From the Astro docs,
these are your options.
---// Example: hydrating framework components in the browser.import DemoApp from "../../components/DemoApp.svelte";---<!-- This component's JS will begin importing when the page loads --><DemoApp client:load /><!-- This component's JS will not be sent to the client untilthe user scrolls down and the component is visible on the page --><DemoApp client:visible /><!-- This component won't render on the server, but will render on the client when the page loads --><DemoApp client:only="svelte" />
I’ll go ahead and try each of these and see what happens.
Initially from OpenAI’s fine-tuned GPT-3 version called Codex
AI-powered Code Generation, a smarter text expansion
Trained on open source code from Github
Reinforcement learning means it gets better with time, but maybe just incrementally
Prompt Engineering
Surprising use cases
Giving enough in the comments for generate decent code. Still needs some analysis
Giving a template for unit tests.
A lot of times, developers skip this step. By having an outline for it, the time to write tests go down
AI-powered tools as paired programming
Great alternative to the question and answer sites like StakeOverflow
Limitations
Answers are generative, meaning what you use in the prompt and how the model was training will determine the output
If you are looking for structured data, Google and Wolfram|Alpha do a much better job
Code that’s complexity is still hard to write
Can get very buggy
Training models in a rut w/ a Glitch Token
SMEs need to be the adult in the room
Legality
A class-action lawsuit against GitHub, OpenAI, and Microsoft claims that the training of Codex violated open source licensing agreements. The outcome could have legal implications for models that generate text, images, and other media as well.
Places like PromptBase are an open marketplace for text strings that generate interesting output
Limitations
Training set based off online images, which have inherit biases (see bad algorithms)
For example, sexualizing women unfairly
Concerns
Concern with legality
Concern with artists
ArtStation, an online community for visual artists, launched its own text-to-image features. Many artists, feeling threatened by computer programs that can reproduce an artist’s hard-won personal style in seconds, boycotted the website.