Cooked chow mein (recipe discovered on YouTube shorts)
The Karate Kid – The Musical
My appreciation for musicals have increased, as someone who has started practicing dance seriously these past couple years. I also enjoyed this particular musical — The Karate Kid — because the film holds a special place in my heart, as someone who binge watched the whole Kobra Kai (Netflix) series. And I the lessons that The Karate Kid tries to convey, are applicable not just to the discipline of Karate, but across other domains, including dance as well.
“He gets injured a lot doesn’t he?”
I was cackling when E nonchalantly said this, her (not so) whispering these words during the scene in which Mr. Myagi was healing Daniel LaRusso’s knee that was injured during the semi finals of the All valley championships.
Unexpectedly cried when Mr. Myagi appeared out of thin air when Daniel was getting beaten up by the outnumbered Kobra Kai. Unsure why I felt so emotional seeing Mr. Myagi step in and defuse the situation. Something beautiful about someone else witnessing injustice and taking action someone else’s behalf.
Dinner
During dinner, E was scarfing down the chow mein, the dish becoming one of her favorites. And while we eat at the kitchen dinner table, we’ve sort of established a routine of playing snakes and ladders. While I am fully aware the game is pure luck — come on, you roll a dice — I find it apocryphal that E wins … every time.
Speaking of winning every time, I had explained to E a few weeks ago how, while of course we all want to win (i.e. competitiveness), cheating — she was re-rolling the dice during board games and peeking during other card games — reduces the likelihood of anyone (including me) wanting to play with her since nobody likes playing when it’s unfair. And I’m proud that she was receptive to my explanation and I do so in a way that was non-judgemental and did not induce any unnecessary guilt or shame on her.
It’s 08:08am and my daughter is still sleeping. So, I’m taking advantage of the limited solo time I have, using the last 60 minutes or so to play catch up on Math Academy Foundation I:
My goal is to work towards Calculus I again and in order for that to happen, I need to finish the following courses:
Mathematical Foundations I
Mathematical Foundations II
Mathematical Foundations III
I’m currently playing the long game. I’ve always wanted to learn about machine learning as well as take a linear algebra course. However, I recognize within myself that I’m shaky on “foundations” and as such, I’m pursuing a path that is both effective and efficient, although of course there’s an urge to jump straight into the deep end, which would no doubt create a sense of overwhelm and in fact, slow down progression due to missing requisite knowledge.
Missing Metric
Every morning, I wake up and think of Metric. Today is no exception. I’ve had the thought to get some grief counseling. I long for her. I wish she were still here. These thoughts and feelings, they are normal. I recognize that pet owners out there get it. Actually, I know that that’s the case because after posting (2) Instagram reels of Metric, the outreach has been insane.
I didn’t expect to get such high engagement from these two clips. Between two clips, about 100k views each. Hundreds of comments per video. My interpretation? My pain and suffering is not unique. I’m not alone. And that brings some solace.
A few days leading up to this 1:1, I revisited my Beyond The Moves (BTM) portal, where I found and watched a couple videos on attitude and facial expressions. Looking into this area was triggered by Kev’s Kitchen session that occurred a couple days prior, earlier in the week, when I had (once again) found myself entranced by Jess’s rounds, her ability to draw us spectators, into her world.
Key Takeaways 🔐
Walking – with intensity and intention. Run around and move like you are a “boxer”, bobbing and weaving, angles
Two parallel textures – say you are doing a farmer, one on the left and one on the right. On the left, can apply a (say) soft texture, and the on the right a hard texture. Similarly, small on the left, big on the right
Riding the pocket – it’s important not only to land in the pocket, but to ride it. As Kashmire had pointed out, I’m not sitting in the music. In other words, when landing on the beat, keep moving through the beat instead of landing on the dot and then transitioning to the next step
Shortcomings
Not finishing a step before transitioning to the next
Exercises
Swing upper cut with arms – emphasizing the drive of the hips and legs
Although my main “platform” for posting is Instagram, I’m going to experiment with cross-posting videos onto YouTube. Why? As a thought experiment. For whatever reason, some of the videos I have published recently have gone somewhat viral. That is, 40-70k views per reel. And so I wonder, could those some views (and interactions and comments) be replicated across YouTube? Maybe. Maybe not. However, I think, for me, one benefit from cross-posting is building consistency (a skill in itself) and perhaps, my ability to practice my digital organization skills.
I miss posting daily entries in my blog and I’d like to return to the practice. I’m unsure if the cerebral sensations when the creative juices flow or whether the process helps me brain dump and gain more clarity (or give me the illusion of sense of control) but my intention is to start (once again) posting more on my blog and writing about some of the current activities in my life, which tend to predominately revolve around my dance journey (on the path to becoming a professional house dancer) as well as developing hardcore math foundations (using Math Academy) and navigating single parent life.
Dance Journey – Newsletter
I had thought about starting an e-mail newsletter that documents the dance journey, written prose accompanying the edited training videos that I create (some of which have gone viral, accumulating tens and thousands of views). The idea would be to for the emails to contain something along the lines of:
What we worked on
What was challenging
New insights (for me) that were gleaned
Basically, documenting not just my own progression, but documenting the new knowledge accumulated throughout this predictably unpredictable journey.
Projects and scattered brain
What’s fascinating, I’m finding, is as I type all this out, there’s this inner feeling — this urge — tugging me in so many directions and suddenly, I’m reminded of all the various projects that I want to work on, ones that I somewhat accept that I may never have time for, including (but not limited to)
Re-taking “Writing from a reader’s perspective” by George Gopen
Creating an e-book similar to “The Math Academy Way” but for street-style dance
Producing some additional house music beats
Increasing my flexibility and mobility and continuing to document the journey on Stretch Therapy
Re-reading “Meditation for mortals” and practicing daily habits (e.g. “figure out the price and pay it”, “adopting a kayak mindset approach”)
Re-start “Waves of Focus” and re-develop organizational habits and come to terms with my wandering mind
Re-visiting “Rhetorical Structure Theory” since, I find, those concepts help me write better prose
Finishing the e-book “The Math Academy Way” (follow up from “Advice on upskilling by Justin Skycak”)
Creating a “Fix your farmer” tutorial video to post on both YouTube and Instagram
Begin marketing process for “Taste of the Kitchen”, (2) 120 minute workshops by DJ Renegade / Kevin Gopie
Dating another dancer in the scene
I’ve been very very reluctant to date someone in the (house dance) scene, despite being attracted to quite a few of the women. And although I’ve dated several other dancers, they were members of other dance communities (e.g. salsa, contemporary) and I had felt would reduce the blast radius, the impact, if/when the relationship dissolved.
Despite being careful, I still had/have thoughts on the idea of dating someone who is as ambitious (if not more) in achieving their own dance goals, with the idea that the two of us can train together, debate with one another, support one another. At the same time, I recognize that good things come in small doses as well, and that, sometimes it is beneficial for two individuals to have their own hobbies, own social circle.
Despite all this, I’ve recently started seeing someone who is, in my opinion, fairly integral to the scene. And while I am exciting, I am going to be fairly cautious and tread lightly.
AWS CloudWatch is a corner service used by almost all AWS Service teams for monitoring and scaling software systems. Though it is a foundational software service that most businesses could benefit from, CloudWatch’s features are unintuitive and therefore often overlooked.
Out of the box, CloudWatch offers users the ability to plot both standard infrastructure and custom application metrics. However, new users can easily make the fatal mistake of plotting their graphs using the default statistic: average. Stop right there! Instead of averages, use percentiles. By switching the statistic type, you are bound to uncover operational issues that have been hiding right underneath your nose.
In this post, you’ll learn:
About the averages that can hide performance issues
Why software teams favor percentiles
How percentiles are calculated.
Example scenario: Slowness hiding in plain sight
Imagine the following scenario between a product manager, A, and an engineer, B, both of them working for SmallBusiness.
A sends B a slack message, alerting B that customers are reporting slowness with CoffeeAPI:
A: “Hey — some of our customers are complaining. They’re saying that CoffeeAPI is slower than usual”.
B: “One second, taking a look…”
B signs into the AWS Console and pulls up the CloudWatch dashboard. Once the page loads, he scrolls down to the specific graph that plots CoffeeAPI latency, execution_runtime_in_ms
He quickly reviews the graph for the relevant time period, the last 24 hours.
There’s no performance issue, or so it seems. Latencies sit below the team defined threshold, all data points below the 600 milliseconds threshold:
Plotting the average execution runtime in millseconds
B: “Um…Look good to me” B reports back.
A: “Hmm…customers are definitely saying the system takes as long as 900ms…”
Switching up the statistic from avg to p90
In B’s mind, he has a gut feeling that something’s off — something isn’t adding up. Are customers misreporting issues?
Second guessing himself, B modifies the line graph, duplicating the `execution_runtine_in_ms` metric. He tweaks one setting -under the **statistic** field, he swaps out Average for P90.
Duplicating the metric and changing statistic to P90
He refreshes the page and boom — there it is: datapoints revealing latency above 600 milliseconds!
Some customers’ requests are even taking as long as 998 milliseconds, 300+ milliseconds above the team’s defined service level operation (SLO).
P90 comparison
Problematic averages
Using CloudWatch metrics may seem simple at first. But it’s not that intuitive. What’s more is that by default, CloudWatch plots metrics with the average as the default statistic. As we saw above, this can hide outliers.
Plans based on assumptions about average conditions usually go wrong.
Sam Savage
For any given metric with multiple data points, the average may show no change in behavior throughout the day, when really, there are significant changes.
Here’s another example: let’s say we want to measure the number of requests per second.
Sounds simple,right? Not so fast.
First we need to talk measurements. Do we measure once a second, or by averaging requests over a minute? As we have already discovered, averaging requests can hide higher latencies that arrive in small bursts. Let’s consider a 60 second period as an example. If during the first 30 seconds there are 200 requests per second, and during the last 30 seconds there are zero requests per second, then the average would be 100 requests per second. However, in reality, the “instantaneous load” is twice that amount if there are 200 requests/s in odd-numbered seconds and 0 in others.
How to use Percentiles
Using percentiles makes for smoother software.
Swapping out average for percentile is advantageous for two reasons:
metrics are not skewed by outliers and just as important
every percentile data is an actual user experience, not a computed value like average
Continuing with the above example of a metric that tracks execution time, imagine an application publishing the following data points:
If you average the above data, it comes out to 540 milliseconds, yet for the P90, we get 999 milliseconds. Here’s how we arrived at that number:
How to calculate the P90
Let’s look at the above graphic in order to calculate the p90. First, start with sorting all the data points for a given time period, sorting them in ascending order from lowest to highest. Next, split the data points into two buckets. If you want the P90, you split the first 90% of data points into bucket one, and the remaining 10% into bucket two. Similarly, if you want the P50 (i.e. the median), assign 50% of the data points to the first bucket and 50% into the second.
Finally, after separating the data points into the two buckets, you select the first datapoint in the second bucket. The same steps can be applied to any percentile (e.g. P0, P50, P99).
Some common percentiles that you can use are p0, p50, p90, p99 and p99.9. You’ll want to use different percentiles for different alarm thresholds (more on this in an upcoming blog post). Say you are exploring CPU utilization, the p0, p50, and p100 give you the lowest usage, medium usage, and highest usage, respectively.
Summary
To conclude, let’s make sure that you’re using percentiles instead of averages so that when you use CloudWatch, you aren’t getting false positives.
Take your existing graphs and switch over your statistics from average to percentile today, and start uncovering hidden operational issues. Let me know if you make the change and how it positively impacts your systems.
I began my intermittent fasting (i.e. time restricted eating) journey just over 3 weeks ago and since the beginning, I’ve been measuring, tracking, monitoring both my glucose and ketone body levels. Collecting these data points require pricking my fingers with a lancet and feeding small blood samples into the monitoring devices.
Although the process of drawing blood is somewhat painful, annoying and sometimes inconvenient, these minor drawbacks are worth the trade off: developing a deeper understanding of my body. An additional downside of this routine blood sampling is that it can be somewhat cost prohibitive: each ketone test strip costs about $1.00 and because I collect about 8-12 blood samples per day, the total cost per week ranges anywhere between $50-75 dollars.
Nutritional Ketosis
With the test strips, I now know when my body enters nutritional ketosis, a metabolic state when one’s body produces an elevated amount of ketone bodies (i.e. acetoacetate, acetone, beta-hydroxybutyrate). Nutritional ketosis is an indicator of lypolysis — a process in which bodies burn fat for fuel, a desirable state when trying to lose weight.
So … how do you know your body is in nutritional ketosis?
Nutritional ketosis can be defined as 0.5 to 3.0 millimoles per liter (mmol/L) of beta-hydroxybutyrate being present in blood. So if the meter reports a value within that range, then you are burning fat!
A not-so-strict ketogenic diet
My body is still able to transition into nutritional ketosis despite not adhering to a strict ketogenic diet, which is defined a very low carbohydrate or low carbohydrate diet, consuming between 30-50g or consuming less than 150g per day, respectively. Instead of adding more constraints into my life, I’m (more or less) just restricting my eating window, following what is known as a 16:8 intermittent fast — 16 hours window of fasting, 8 hour of eating (also known as post-postprandial state).
Not following a strict ketogenic diet does lower the probability of entering nutritional ketosis. I had initially thought that right off the bat, my body would fairly quickly (maybe within three or four days) enter nutritional ketosis at the tail of my fasting window. But according to the data I’ve collected, I’ve discovered that normally, throughout the day, my ketone body levels hover anywhere between 0.1 and 0.4 mmol/L — below the nutritional ketosis range.
Four discrete instances of nutritional ketosis
0.5 mmol/L – Playing pickle ball early in the morning while in the fasted state
0.8 mmol/L – Playing tennis during while in the fasted state
In 2019, Sal Khan wrote a letter to his past self as a reflection exercise and made that letter public and published it on his blog. Thanks Sal.
Inspired by his post and this reflection exercise, I decided to write a letter from my future self (Matt in 2029). In other words, I wrote the letter from future Matt (2029) to present Matt (2019). Of course, I wrote this letter before the global pandemic, before my first daughter born. So much has changed since a year ago. That being said, the exercise is super valuable and allows me to gauge whether I am walking the course that I had once charted.
And I think you should also do the same reflection exercise. Set aside about an hour. Just lay it all out. Then, set the letter aside and revisit it six months from now, a year from now, five years from now. You’ll be surprised how accurate (and inaccurate) your predictions are.
A letter to myself
Dear 2019 Matt,
You see that wife of yours? Go give her a big wet kiss on the lips. Then throw your arms around her, giving her a big bear hug. Hold it. Now tell her you love her — I’ll wait while you do it — because you really don’t tell her enough. Have no fear: she’s not going anywhere. And while you are at it, kiss Metric on the nose and pat Mushroom on the head. They’re both in doggy heaven now, smiling down on me, 2029 Future Matt.
Moving on, here are some suggestions.
First off, up your Vietnamese speaking skills (and your written skills while you are at it). Seriously. You are a Vietnamese American man. Vietnamese — the mother tongue of your two, refugee parents. Use the language to connect (and reconnect) with your loved ones, friends and family, especially your grandma. It’s important Matt — she’s no longer around. Don’t make the mistake of not being able to not only articulate and share your thoughts and feelings and your life story, but listen to her stories. How did she do it all — having kids at 19 and then fleeing Vietnam without a lick of English? Separately, don’t you want your children to speak the language as well?
Next up, get involved with the community. I understand you are naturally introverted and insular. But you aren’t alone: join a community of like minded people. People who care about the things you care about. Cannot find that community? Make one. Like your wife tells you — you are a community builder. You have this ability to attract and bring people together, make them feel comfortable under their own skin (since that’s something you’ve worked so hard on: learning to accept yourself).
Keep up the singing and guitar lessons. They’ve come in handy. No — future you is not a rock star and you are not touring across the globe. But you’ve breathed music into your children’s lives. They’re constantly yanking on your t-shirt, inviting you to sing and dance. And of course you do it because you not only love them to pieces but you want to teach them how to be comfortable under their own skin. That’s important to you because you know what it feels like not feel completely okay with who you are.
Keep plugging away at that Computer Science Master’s program from Georgia Tech. It’s serving a couple purposes. On one hand, you are doing it because you are mastering your craft, learning the ins and outs of your discipline. On the other hand, you know there’s shadow side to why you are doing it: you can feel a bit insecure at times (even though you don’t let it show) since you are in the big leagues, working at Amazon and being surrounded smart folks with their fancy degrees. But once you finish up that program, use that lunch time to actually have lunch with folks instead of studying.
Now, on the emotional side, keep walking that path of forgiveness. Remember that Oprah interview you watched, the interview with Wade and James, the two brave men speaking out about their sexual abuse from Michael Jackson? Remember what James Safechuck poignantly said: forgiveness is not a line you cross, but a path you take. With that quote in mind, learn not only how to forgive yourself for the things you’ve done and people you hurt but learn how to forgive others around you — like your father. Yes, he’s still around but he’s old now: 70. He doesn’t have that much time left on this earth. Basically, keep up with what you are doing: you no longer imagine what life could be if things were different. No. That’s not you anymore and future you is proud.
One more thing: reintroduce meditation to your life. Cause 2029 is crazier than you’d expect, even more so than now. You think Trump being the president is ludicrous ? Can you guess who is the president in 2029?
So far, I’ve been naming a bunch of things for you to do and for to think about. But also take it easy on yourself. Acknowledge how far you have come. You are piling so much on your plate: you are working full time as a software engineer at Amazon, playing husband 24 x 7, walking the dogs at 06:30 AM every morning (from your cozy 2 story Northgate house to Maple Leaf park) because the dogs deserve daily exercise to keep them healthy, taking singing lessons every Tuesday evening, mastering the fret board of your guitar, refining your writing skills.
I know your mind constantly races. You want to be a good husband (you are). You want to be a good son (you are). You want to be a good brother (you are). You want to be a good father (you will be).
For next semester, Spring 2020, I enrolled in what I expect to be one of the most difficult (yet rewarding) courses: compilers – theory and practice. I’m stoked and at the same time, feeling very nervous.
I’m stoked for several reasons. First, according to the previous semester’s syllabus, I’ll be learning a ton of theory: Automata, finite state machines, grammars, predictive parsers. Many of these concepts I’ve learned on my own with my self directed education.
The second reason that I’m elated is that I’ll be given the opportunity of building an entire compiler, from the ground up! No existing code base, all from scratch. That in itself strikes fear in me.
And third, Steve Yegge’s executive summary (on his post on compilers) — “If you don’t know how compilers work, then you don’t know how computers work” — motivates me, making me want to prove (to myself) that I know how computers work.
So with all that good stuff, why am I feeling nervous?
Normally, taking a master’s course while working is manageable. I often carve out about an hour (or sometimes 90 minutes) of my early morning, studying while eating an avocado toast and sipping a ginger tea, headphones wrapped around my head while people are buzzing in the background at a near by café. In addition to the early mornings, I will leverage my one hour lunches, again watching lectures or banging out code for a (school) project.
But my life has changed.
Although my previous routines and rituals worked well for me for the last several years, my life has changed in significant ways. Most obvious is the arrival of my (first) child, Elliott. With Elliott now here (and no longer just an abstract creature curled up in my wife’s belly), I want to make sure that I’m present for her: not just for the big moments (like her first vaccinations) but for the little, day to day moments (in fact, I had one of the weirdest feelings when I stepped into the office this past Monday, my first day back in the office after 4 weeks off of paternity. while staring into the wide screen monitor pinned up against the wall of my not too shabby cubicle, I wanted to be at home, changing Elliott’s dirty diaper).
Elliott with her thinking hat on
On top of all of this, omscentral reviews (the unofficial review website for courses offered by online master’s program at Georgia Tech) suggest that the course demands anywhere between 15-25 hours per week. Those extra 10 hours gotta come from somewhere. But from where? Sacrifice it from hanging out with my life? Or strumming my guitar? Or singing? Or writing music? Or exercising at the gym? Or playing with my dogs? Or spending time with other friends and family?
You see, there’s only so much time (you already knew that) and all the decisions (small and large) are trade offs. These choice reflect our ethos. The sum of where and how we spend our time essentially defines who we are and what we believe in.
Okay. Rant over.
Back to studying (information security and computer networks) on my day off of work — thank you Amazon for offering a ramp back period, allowing me to work 50% (of course my salary is pro rated) and allowing me to pitch in with my family on Thursdays and Fridays.
This afternoon, I started on project 4 for introduction to information security (IIS). This goal for this project is to have us students learn more about web security and consists of three objectives, manufacturing three web attacks: cross site scripting, cross site forgery and structure query language (SQL) injection attack. And although I’m very familiar with the terms, I’ve actually never carried out any of those attacks in neither an academic or professional setting. In this post, I’ll share some of the things I learned while spending 4 hours in a cafe chipping away at the project.
Cross site request forgery (CSRF)
This attack was very straight forward: inspect the source code of the (PHP) files and carefully tease out which form inputs could be set in the body of the HTTP POST.
Cross site scripting (XSS)
This task was a ton of fun. Initially, I headed down an entirely wrong path and found myself getting very frustrated. Initially, because of the video lectures, I had wrongly assumed that the only way to perform the attack was to embed an iFrame my hand crafted HTML page, the iFrame loading the contents of the remote website, the target of the attack. And although this entirely possible, embedding an iFrame is unnecessary: what I really need to do is basically send an HTTP post to the remote site, embedding javascript in one of FORM values, carefully ensuring that when the page renders in the browser, it’s identical to the original website.