<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="4.3.4">Jekyll</generator><link href="https://itstrieu.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://itstrieu.github.io/" rel="alternate" type="text/html" hreflang="en" /><updated>2026-05-16T07:18:24+00:00</updated><id>https://itstrieu.github.io/feed.xml</id><title type="html">it’s trieu</title><subtitle>building things, figuring things out</subtitle><author><name>Kathy Trieu</name></author><entry><title type="html">Why I Call Myself an AI Systems Builder</title><link href="https://itstrieu.github.io/why-i-call-myself-an-ai-systems-builder" rel="alternate" type="text/html" title="Why I Call Myself an AI Systems Builder" /><published>2026-05-07T00:00:00+00:00</published><updated>2026-05-07T00:00:00+00:00</updated><id>https://itstrieu.github.io/why-i-call-myself-an-ai-systems-builder</id><content type="html" xml:base="https://itstrieu.github.io/why-i-call-myself-an-ai-systems-builder"><![CDATA[<p>My title is project coordinator. I’m a contractor through Tundra Technical Solutions, stationed at Meta. <strong>That is not what I do.</strong></p>

<p>What I do is study problems, design systems to solve them, and build those systems myself. On any given day I have multiple terminals open, each one a different project requiring an entirely different set of skills: data analysis, software engineering, product design. Most of that goes well beyond my job description. I do it because it needs doing and because I can. I also have a manager who recognized that before I did, and gave me the room to prove it.</p>

<p>The closest I’ve come to a name for it is AI systems builder. It’s not perfect, but it’s closer to the truth than any title I’ve been given. And it took a long time to get here. The path didn’t look like a path while I was on it.</p>

<hr />

<p>I’ve always been this way. I spent over a decade cycling through careers: law, journalism, teaching, data science, restaurant management, nonprofit human rights work. As a kid, I kept discovering I was good at things without trying very hard. That sounds like a gift, but it was also a trap. I never had to push through difficulty, so I never learned how. I just moved on to the next thing that came easily.</p>

<p>That pattern carried a cost I didn’t talk about. Every year I watched people I’d started alongside build something: a practice, a title, a reputation, a trajectory that made sense to other people. I kept starting over. At first, people around me thought I was on my way somewhere. <em>She’s figuring it out, she’ll land.</em> But it took so long that I could feel their confidence fading. The question behind their eyes shifted from “where will she end up?” to “will she ever get it together?” That was painful, because I was asking myself the same thing. I had faith in myself longer than most people did, but even that was dying. I could learn so much, do so much, and still get nowhere.</p>

<p>The shame of being almost-good-enough at a dozen things and not able to point to a single one and say <em>this is mine</em>. It’s a specific kind of loneliness, being surrounded by people who know what they are and not having an answer when someone asks you the same question.</p>

<p>Early on, while I was still doing nonprofit work, I read David Epstein’s <em>Range</em>. It was the first time I’d encountered the argument that breadth wasn’t a deficiency. For a moment, I felt like maybe I wasn’t broken. But that feeling didn’t hold. Every time I changed direction after that, it still felt like failing. A book can tell you the pattern is valid. It can’t make the pattern stop hurting.</p>

<hr />

<p>The first time I tried data science, I quit. I’d done a bootcamp, and one of the assignments, writing a KNN algorithm from scratch, destroyed me. I finished it eventually, but the experience left me feeling completely out of my league. Another thing I was almost good enough at. I went back to restaurants and bars, work I genuinely liked, and tried not to think about it too much. Then COVID shut that down too.</p>

<p>Somehow I ended up back in data science. I honestly don’t remember the moment I decided on a master’s program. I just know that when I came back, I wanted to be stronger. My bachelor’s was in Asian Studies. Not a single math class on the transcript. So I enrolled in community college, took the required calculus courses, aced them, and got into the Statistics Masters Program at Texas A&amp;M University.</p>

<p><strong>That was the first time I proved to myself I could go deep.</strong> Not because it came easy, but because I decided to do it anyway.</p>

<hr />

<p>I graduated with the goal of becoming a data scientist. Around the same time, I started an AI book club and finished the deep learning specialization on Coursera. Machine learning engineering went from an interest to an obsession. And something shifted in me that had nothing to do with credentials or career planning. I stopped caring about being behind, about following a path, about what other people thought. For the first time I was just genuinely passionate, and that was enough to keep moving.</p>

<p>Then I landed a contract role at Meta, a job that required my weaknesses rather than my strengths. The role was data labeling analyst, reviewing code used to train Llama. I was honest in the interview: my background was in statistics and data science, not software engineering. They brought me on anyway.</p>

<p>The plan was to use this job as a bridge. By day I reviewed MLE code at Meta. By night I studied to become one: textbooks, research papers, Python, object-oriented programming. I ground through LeetCode, voluntarily, which is how you know something had fundamentally changed. <strong>For the first time in my life, I was choosing difficulty, and I loved it.</strong></p>

<p>The two tracks fed each other. Every script I reviewed at work, I studied closely, looking at what made code robust, what made it fragile, what patterns held up under pressure. I had a knack for reading systems even when I couldn’t yet build them fluently. The breadth I’d accumulated turned out to be exactly the right lens for evaluating training data quality. I was learning as the model learned.</p>

<p>I didn’t stay in that lane long. I started taking the lead on different workflows, then reached for coordination, then project ownership. I just kept seeing what needed doing and doing it.</p>

<p>An unexpected opportunity came up: an interview for a DevOps and data engineering role. I’d been studying engineering on my own for months, but this was the first time I had to prove it in a room. I didn’t get the job. But I walked away knowing the ceiling I’d assumed was there didn’t actually exist.</p>

<hr />

<p>If you read the earlier posts on this blog, you’ll see someone who was all in on becoming a machine learning engineer. That was real. I meant every word of it.</p>

<p><strong>Then I watched the ground shift under the field I’d just fought my way into.</strong></p>

<p>AI tools got good. Really good. I started building with them and realized something uncomfortable: the models already knew more than I did. I wasn’t just racing other engineers to get good enough. I was trying to outrun a machine that would always be faster, and I was starting from behind. The bottleneck would no longer be who could write the code. It would be who could see the problem, design the solution, and get people to actually use it.</p>

<p>That recognition felt like another pivot, and pivots still felt like failing. But this time I had something I’d never had before: enough depth to trust my own read. Statistics gave me intuition for what these models were actually doing under the hood. The MLE work gave me fluency with the ecosystem. I wasn’t guessing. I could see exactly how and why the field was shifting. That understanding is what gave me the confidence to step off the MLE track instead of doubling down on it.</p>

<hr />

<p>I leaned into project management. When I looked back, I realized that nearly every role I’d held across that decade of wandering was management in some form: running a classroom, running a restaurant floor, coordinating a nonprofit. I hadn’t noticed the pattern because I was too busy feeling ashamed of it.</p>

<p>I moved into a project coordinator role, and for the first time I treated a role as a craft. A lot of that is because of my manager. She’s someone who gets things done exceptionally well on her own, which made it mean something when she chose to trust me with real responsibility instead. She mentored me, advocated for me, and gave me room to grow into work that was well beyond my title.</p>

<p>Then in early 2026, AI tools took another leap. Meta integrated AI across nearly every workflow. The gap between what I could imagine and what I could build essentially disappeared. So I stopped worrying about roles and titles and did what I’d always done, I solved problems. Except now, for the first time, I could also build the solutions myself.</p>

<p>My manager was running a large workforce and had no shortage of problems. She’d surface one, like no visibility on contractor performance across the program, and trust me to figure it out. I designed an evaluation system from scratch: real-time dashboard, clean data model, the right metrics, low enough friction that people used it without being asked. Another gap: QA work buried in Google Sheets, invisible to leadership. I built an add-on, partnered with data engineering, and connected it into Meta’s data ecosystem. The tool spread to other pillars on its own. I kept expanding it.</p>

<p>Full ownership, no title. And from the start, I was designing these systems with AI in mind, not as an afterthought but as part of the architecture. LLM integrations, automated pipelines, bots. It’s not about using AI to make things run faster. It’s about rethinking the entire design so that AI and humans work together in ways that help both do better work. Every decision I made, from the data model to the prompt design, drew on something from a phase I once dismissed as aimless exploration.</p>

<hr />

<p>AI collapsed the distance between understanding a problem and building the solution. Before these tools, I would have specced those systems out for an engineering team and waited. Instead, I made a different bet: master the tools and think harder about product. I put myself in founder communities, not to start a company but to absorb the mentality. See a problem. Own it end to end. Ship it. Iterate. That bet paid off.</p>

<p>AI gave generalists execution speed they never had. But speed without judgment is just noise. The reason these tools work for me is that I spent years building the judgment first: the statistical thinking, the data intuition, the product instinct, the management experience. AI removed the bottleneck that kept people like me from acting on what we could already see. The depth is what made the seeing worth anything.</p>

<p><strong>Breadth got me to the door. Depth gave me the foundation. AI gave me the speed to use both at once.</strong></p>

<hr />

<p>That’s why I call myself an AI systems builder, for now. It doesn’t fit perfectly. Maybe nothing ever will. But it’s closer to the truth than any title I’ve been given, and <strong>I’m done waiting for a label that captures all of it before I let myself claim any of it.</strong> I spent years resigned to a landscape that rewarded specialists and didn’t have a category for people like me. I’m still adjusting to the fact that it shifted in my direction.</p>

<p>I think back to reading <em>Range</em> all those years ago, how I wanted to believe it but couldn’t quite let myself. The validation I was looking for didn’t come from a book. It came from the work finally catching up to the pattern.</p>

<p>If you’re where I was, feeling behind, trying to pick a lane, embarrassed that nothing you do fits a clean title, here’s what I’d offer. At some point, you do have to go deeper into something. If you’ve been exploring long enough, you already know what feels right. Let yourself commit to it.</p>

<p>The fear is that depth closes doors. That choosing one thing means losing everything else. But that’s not how it works. Specializing is never-ending. You can always go further, and every time you do, it opens lateral doors you couldn’t have seen from the surface. Going deep into statistics opened data science. Data science opened machine learning. Machine learning opened AI systems. Each commitment revealed more than it foreclosed. There has never been a shortage of things to be curious about. If anything, <strong>depth is what finally gave my curiosity somewhere to land.</strong></p>]]></content><author><name>Kathy Trieu</name></author><category term="AI" /><category term="career" /><category term="generalist" /><summary type="html"><![CDATA[Breadth got me to the door. Depth gave me the foundation. AI gave me the speed to use both at once.]]></summary></entry><entry><title type="html">Tennis Ball Bot Progress</title><link href="https://itstrieu.github.io/tennis_ball_bot_progress" rel="alternate" type="text/html" title="Tennis Ball Bot Progress" /><published>2025-04-06T00:00:00+00:00</published><updated>2025-04-06T00:00:00+00:00</updated><id>https://itstrieu.github.io/tennis_ball_bot_progress</id><content type="html" xml:base="https://itstrieu.github.io/tennis_ball_bot_progress"><![CDATA[<p>This project began when a group of mechanical engineering friends came to me with an idea: build a robot that could find and retrieve tennis balls. They had the hardware vision but needed someone with programming and machine learning skills to bring it to life. It felt exciting—but also almost unreachable. Robotics was unfamiliar terrain, so I decided to start where I felt some footing: computer vision.</p>

<p>Right now, I’m fine-tuning a YOLOv8n model to detect tennis balls. I collected my own dataset and recently finished training the first solid version. The model is performing well on the validation set, with best weights showing over 92% recall and over 96% precision. I’m now doing error analysis to see where it struggles—especially in tricky or real-world conditions—so I can keep improving it before deploying to the HAiLO AI accelerator. Spending this much time on error analysis has been helpful. It’s forcing me to notice edge cases and understand model training better.</p>

<p><img src="https://github.com/itstrieu/itstrieu.github.io/blob/main/assets/img/val_batch2_pred.jpg?raw=true" alt="Validation Set Predictions" /></p>

<p>Lately, I’ve been deeply involved with hardware: programming movement using omnidirectional wheels, testing encoder DC motors, and troubleshooting all the unpredictable behaviors that come with real-world components. I recently hit a milestone that felt like a real turning point: I built a motion controller that actually works. We cheered when the robot completed each direction we programmed for it from forward movement to strafing right. I also wrote a centralized logger so I could track what each wheel was doing in real time. </p>

<p><img src="https://github.com/user-attachments/assets/3e39787b-551c-4f2c-b1a6-3052a9e0be3f" alt="Tennis Ball Bot Prototype" /></p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">MotionController</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="n">self</span><span class="p">):</span>
        <span class="sh">"""</span><span class="s">
        Initialize the motion controller.

        - Sets up the logger for the motion control module.
        - Claims GPIO control for the motor-related pins.
        </span><span class="sh">"""</span>
        <span class="c1"># Set up the logger
</span>        <span class="n">motion_logger</span> <span class="o">=</span> <span class="nc">Logger</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="sh">"</span><span class="s">motion</span><span class="sh">"</span><span class="p">,</span> <span class="n">log_level</span><span class="o">=</span><span class="n">logging</span><span class="p">.</span><span class="n">INFO</span><span class="p">)</span>
        <span class="n">self</span><span class="p">.</span><span class="n">logger</span> <span class="o">=</span> <span class="n">motion_logger</span><span class="p">.</span><span class="nf">get_logger</span><span class="p">()</span>

        <span class="n">self</span><span class="p">.</span><span class="n">chip</span> <span class="o">=</span> <span class="n">lgpio</span><span class="p">.</span><span class="nf">gpiochip_open</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>  <span class="c1"># Open GPIO chip 0
</span>        <span class="n">self</span><span class="p">.</span><span class="n">stby</span> <span class="o">=</span> <span class="n">STBY</span>  <span class="c1"># Pin that enables/disables motor driver
</span>
        <span class="c1"># Motor pin groups for each wheel (IN1, IN2, PWM)
</span>        <span class="n">self</span><span class="p">.</span><span class="n">motors</span> <span class="o">=</span> <span class="p">{</span>
            <span class="sh">"</span><span class="s">FL</span><span class="sh">"</span><span class="p">:</span> <span class="n">FRONT_LEFT</span><span class="p">,</span>  <span class="c1"># Front Left
</span>            <span class="sh">"</span><span class="s">FR</span><span class="sh">"</span><span class="p">:</span> <span class="n">FRONT_RIGHT</span><span class="p">,</span>  <span class="c1"># Front Right
</span>            <span class="sh">"</span><span class="s">RL</span><span class="sh">"</span><span class="p">:</span> <span class="n">REAR_LEFT</span><span class="p">,</span>  <span class="c1"># Rear Left
</span>            <span class="sh">"</span><span class="s">RR</span><span class="sh">"</span><span class="p">:</span> <span class="n">REAR_RIGHT</span><span class="p">,</span>  <span class="c1"># Rear Right
</span>        <span class="p">}</span>

        <span class="c1"># Direction patterns for movement
</span>        <span class="n">self</span><span class="p">.</span><span class="n">patterns</span> <span class="o">=</span> <span class="p">{</span>
            <span class="sh">"</span><span class="s">forward</span><span class="sh">"</span><span class="p">:</span> <span class="p">{</span><span class="sh">"</span><span class="s">FL</span><span class="sh">"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="sh">"</span><span class="s">FR</span><span class="sh">"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="sh">"</span><span class="s">RL</span><span class="sh">"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="sh">"</span><span class="s">RR</span><span class="sh">"</span><span class="p">:</span> <span class="mi">1</span><span class="p">},</span>
            <span class="sh">"</span><span class="s">backward</span><span class="sh">"</span><span class="p">:</span> <span class="p">{</span><span class="sh">"</span><span class="s">FL</span><span class="sh">"</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="sh">"</span><span class="s">FR</span><span class="sh">"</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="sh">"</span><span class="s">RL</span><span class="sh">"</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="sh">"</span><span class="s">RR</span><span class="sh">"</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</span><span class="p">},</span>
            <span class="sh">"</span><span class="s">strafe_left</span><span class="sh">"</span><span class="p">:</span> <span class="p">{</span><span class="sh">"</span><span class="s">FL</span><span class="sh">"</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="sh">"</span><span class="s">FR</span><span class="sh">"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="sh">"</span><span class="s">RL</span><span class="sh">"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="sh">"</span><span class="s">RR</span><span class="sh">"</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</span><span class="p">},</span>
            <span class="sh">"</span><span class="s">strafe_right</span><span class="sh">"</span><span class="p">:</span> <span class="p">{</span><span class="sh">"</span><span class="s">FL</span><span class="sh">"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="sh">"</span><span class="s">FR</span><span class="sh">"</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="sh">"</span><span class="s">RL</span><span class="sh">"</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="sh">"</span><span class="s">RR</span><span class="sh">"</span><span class="p">:</span> <span class="mi">1</span><span class="p">},</span>
            <span class="sh">"</span><span class="s">rotate_left</span><span class="sh">"</span><span class="p">:</span> <span class="p">{</span><span class="sh">"</span><span class="s">FL</span><span class="sh">"</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="sh">"</span><span class="s">FR</span><span class="sh">"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="sh">"</span><span class="s">RL</span><span class="sh">"</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="sh">"</span><span class="s">RR</span><span class="sh">"</span><span class="p">:</span> <span class="mi">1</span><span class="p">},</span>
            <span class="sh">"</span><span class="s">rotate_right</span><span class="sh">"</span><span class="p">:</span> <span class="p">{</span><span class="sh">"</span><span class="s">FL</span><span class="sh">"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="sh">"</span><span class="s">FR</span><span class="sh">"</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="sh">"</span><span class="s">RL</span><span class="sh">"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="sh">"</span><span class="s">RR</span><span class="sh">"</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</span><span class="p">},</span>
            <span class="sh">"</span><span class="s">diagonal_fr</span><span class="sh">"</span><span class="p">:</span> <span class="p">{</span><span class="sh">"</span><span class="s">FL</span><span class="sh">"</span><span class="p">:</span> <span class="mf">1.0</span><span class="p">,</span> <span class="sh">"</span><span class="s">FR</span><span class="sh">"</span><span class="p">:</span> <span class="mf">0.5</span><span class="p">,</span> <span class="sh">"</span><span class="s">RL</span><span class="sh">"</span><span class="p">:</span> <span class="mf">0.5</span><span class="p">,</span> <span class="sh">"</span><span class="s">RR</span><span class="sh">"</span><span class="p">:</span> <span class="mf">1.0</span><span class="p">},</span>
            <span class="sh">"</span><span class="s">diagonal_fl</span><span class="sh">"</span><span class="p">:</span> <span class="p">{</span><span class="sh">"</span><span class="s">FL</span><span class="sh">"</span><span class="p">:</span> <span class="mf">0.5</span><span class="p">,</span> <span class="sh">"</span><span class="s">FR</span><span class="sh">"</span><span class="p">:</span> <span class="mf">1.0</span><span class="p">,</span> <span class="sh">"</span><span class="s">RL</span><span class="sh">"</span><span class="p">:</span> <span class="mf">1.0</span><span class="p">,</span> <span class="sh">"</span><span class="s">RR</span><span class="sh">"</span><span class="p">:</span> <span class="mf">0.5</span><span class="p">},</span>
            <span class="sh">"</span><span class="s">diagonal_br</span><span class="sh">"</span><span class="p">:</span> <span class="p">{</span><span class="sh">"</span><span class="s">FL</span><span class="sh">"</span><span class="p">:</span> <span class="o">-</span><span class="mf">0.5</span><span class="p">,</span> <span class="sh">"</span><span class="s">FR</span><span class="sh">"</span><span class="p">:</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="sh">"</span><span class="s">RL</span><span class="sh">"</span><span class="p">:</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="sh">"</span><span class="s">RR</span><span class="sh">"</span><span class="p">:</span> <span class="o">-</span><span class="mf">0.5</span><span class="p">},</span>
            <span class="sh">"</span><span class="s">diagonal_bl</span><span class="sh">"</span><span class="p">:</span> <span class="p">{</span><span class="sh">"</span><span class="s">FL</span><span class="sh">"</span><span class="p">:</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="sh">"</span><span class="s">FR</span><span class="sh">"</span><span class="p">:</span> <span class="o">-</span><span class="mf">0.5</span><span class="p">,</span> <span class="sh">"</span><span class="s">RL</span><span class="sh">"</span><span class="p">:</span> <span class="o">-</span><span class="mf">0.5</span><span class="p">,</span> <span class="sh">"</span><span class="s">RR</span><span class="sh">"</span><span class="p">:</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">},</span>
        <span class="p">}</span>

        <span class="c1"># Claim GPIO control over all motor-related pins
</span>        <span class="n">self</span><span class="p">.</span><span class="nf">_claim_output_pins</span><span class="p">()</span>
</code></pre></div></div>

<p>This phase has been messy. I’ve spent hours debugging motors that turned out to have a single miswired pin or a loose ground connection. But I’ve also started to feel like I’m building something real. I refactored the codebase into cleaner modules: <code class="language-plaintext highlighter-rouge">navigation</code>, <code class="language-plaintext highlighter-rouge">detection</code>, <code class="language-plaintext highlighter-rouge">sensors</code>, <code class="language-plaintext highlighter-rouge">strategy</code>, etc.  </p>

<p>Integration is next: connecting the object detection model to the robot’s control logic and sensor input so it can start making actual decisions. I’m planning to use bounding box size and location to estimate object distance and direction, while using ultrasonic sensors to avoid collisions or stop at just the right distance.</p>

<div class="language-markdown highlighter-rouge"><div class="highlight"><pre class="highlight"><code>│   ├── core/                        # Core functionality of the robot
│   │   ├── __init__.py              # Marks this folder as a package
│   │   ├── navigation/              # Navigation and motion control logic
│   │   │   ├── __init__.py          # Marks this folder as a package
│   │   │   ├── encoders.py          # Encoder-related logic
│   │   │   └── motion_controller.py # Controls motor movement and direction
│   │   │
│   │   ├── detection/               # Object detection (YOLO) logic
│   │   │   ├── __init__.py          # Marks this folder as a package
│   │   │   ├── vision_tracker.py    # Tracks and handles object detection
│   │   │   └── yolo_inference.py    # YOLO inference for real-time object detection
│   │   │
│   │   ├── sensors/                 # Sensor control and integration
│   │   │   ├── __init__.py          # Marks this folder as a package
│   │   │   └── ultrasonic_sensor.py # Ultrasonic sensor for distance measurement
│   │   │
│   │   ├── strategy/                # AI decision-making logic
│   │   │   ├── __init__.py          # Marks this folder as a package
│   │   │   ├── movement_decider.py  # Decides robot movement strategy
│   │   │   └── __init__.py          # Marks this folder as a package
│   │   │
│   │   └── streaming/               # Streaming and remote access components
│   │       ├── __init__.py          # Marks this folder as a package
│   │       ├── camera_streamer.py   # Manages camera feed streaming
│   │       ├── performance_monitor.py # Monitors system performance in real-time
│   │       └── stream_client.py     # Handles communication with streaming services
</code></pre></div></div>

<p>A big part of what’s kept me going is how much this project is teaching me about <em>how</em> I learn. Early on, I used large language models to help generate basic test scripts and wire up examples. That was helpful, but surface-level. Now, I often start high-level—thinking through design choices like class structure, logic flow, and how I want the code to behave. Then I’ll use large language models to help scaffold that vision into actual code. Having that kind of sounding board has made me more deliberate and confident in how I architect things.<br />
<img src="https\://github.com/itstrieu/itstrieu.github.io/blob/main/assets/img/motion\_controller\_skeleton.png?raw=true" alt="Motion Controller Skeleton generated by ChatGPT" /></p>

<p>As the project grows, I’m realizing that I need systems not just for the robot—but for myself. I’ve added internal documentation, a structured to-do list by subsystem, and a <code class="language-plaintext highlighter-rouge">dev_notes.md</code> file that helps me track what I’m working on and why. This is on top of taking notes in my physical notebook. Writing things down keeps me sane when I feel like I’m drowning in tiny problems with no clear next step.</p>

<p>This robot is still a work in progress, but it already represents something bigger to me. It’s not just a machine I’m building—it’s a way for me to prove to myself that I can handle complexity, learn what I don’t know, and keep going even when I feel lost or overwhelmed. </p>]]></content><author><name>Kathy Trieu</name></author><category term="Machine Learning" /><category term="AI" /><category term="Robotics" /><category term="Computer Vision" /><category term="Object Detection" /><category term="YOLO" /><summary type="html"><![CDATA[A personal reflection on building a tennis ball-retrieving robot using machine learning and robotics from the ground up.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://itstrieu.github.io/assets/img/pi.jpg" /><media:content medium="image" url="https://itstrieu.github.io/assets/img/pi.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Sunday Summary - 2</title><link href="https://itstrieu.github.io/sunday-summary-2" rel="alternate" type="text/html" title="Sunday Summary - 2" /><published>2025-03-16T00:00:00+00:00</published><updated>2025-03-16T00:00:00+00:00</updated><id>https://itstrieu.github.io/sunday-summary-2</id><content type="html" xml:base="https://itstrieu.github.io/sunday-summary-2"><![CDATA[<h3 id="sunday-march-16-2025"><strong>Sunday, March 16, 2025</strong></h3>

<p>This week, I:</p>

<ul>
  <li><strong>Developed an AI Assistant:</strong>
    <ul>
      <li>Set up an AI assistant using <strong>Ollama</strong> and <strong>FastAPI</strong>.</li>
      <li>Integrated <strong>RAG</strong> with <strong>FAISS</strong> for document retrieval and built a <strong>Streamlit UI</strong> to interact with the assistant.</li>
      <li>Improved retrieval and response accuracy by refining context handling and prompt structure.</li>
    </ul>
  </li>
  <li><strong>Explored LLMs and Conversational AI:</strong>
    <ul>
      <li>Compared <strong>Mistral</strong>, <strong>Mixtral</strong>, and <strong>Llama</strong> models for RAG and conversational AI use cases.</li>
    </ul>
  </li>
  <li><strong>Optimized RAG Document Storage:</strong>
    <ul>
      <li>Explored scalable methods for storing and organizing RAG documents using <strong>SQLite</strong> and <strong>MongoDB</strong>.</li>
    </ul>
  </li>
  <li><strong>Worked on Tennis Ball Bot:</strong>
    <ul>
      <li>Completed tests on the <strong>wheel motors</strong> and <strong>rotating cylinder fins</strong> motor of the Tennis Ball Bot.</li>
      <li>Learned how to stream the object detection feed from the bot using <strong>FastAPI</strong> and <strong>Cloudflare</strong>.</li>
    </ul>
  </li>
  <li><strong>AWS Setup:</strong>
    <ul>
      <li>Ran instances on <strong>EC2</strong> to host the AI assistant I built with RAG.</li>
      <li>Learned how to configure <strong>security settings</strong>, adjust volume sizes, and configure other essential instance settings to ensure proper deployment and optimization.</li>
    </ul>
  </li>
  <li><strong>Machine Learning &amp; Systems Design:</strong>
    <ul>
      <li>Finished <strong>week 1 of Machine Learning in Production</strong> from <strong>DeepLearning.AI</strong>.</li>
      <li>Read <strong>Chapter 3 of <em>Designing Machine Learning Systems</em></strong>.</li>
    </ul>
  </li>
  <li><strong>Leetcode &amp; Study Group:</strong>
    <ul>
      <li>Resumed <strong>Leetcode</strong> practice by joining a local study group.</li>
    </ul>
  </li>
  <li><strong>Python Debugging</strong>:
    <ul>
      <li>Finally learned how to use a Python debugger to troubleshoot and step through code more effectively.</li>
    </ul>
  </li>
</ul>]]></content><author><name>Kathy Trieu</name></author><category term="Machine Learning" /><category term="AI" /><category term="Career" /><category term="Progression" /><category term="Productivity" /><summary type="html"><![CDATA[A weekly learning log to track my progress, reflect on motivation patterns, and challenge the mindset of “not doing enough.”]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://itstrieu.github.io/assets/img/flower.jpg" /><media:content medium="image" url="https://itstrieu.github.io/assets/img/flower.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Sunday Summary - 1</title><link href="https://itstrieu.github.io/sunday_summary_1" rel="alternate" type="text/html" title="Sunday Summary - 1" /><published>2025-03-02T00:00:00+00:00</published><updated>2025-03-02T00:00:00+00:00</updated><id>https://itstrieu.github.io/sunday_summary_1</id><content type="html" xml:base="https://itstrieu.github.io/sunday_summary_1"><![CDATA[<h3 id="sunday-march-2-2025"><strong>Sunday, March 2, 2025</strong></h3>

<p>This week, I:</p>
<ul>
  <li><strong>Completed more work on the Tennis Ball Bot:</strong>
    <ul>
      <li>Learned enough <strong>Prometheus</strong> and <strong>Grafana</strong> to set up a working dashboard.</li>
      <li>Collected more data for the <strong>Tennis Bot</strong>.</li>
      <li>Finished a couple of sets of <strong>annotations</strong>.</li>
      <li>Learned about <strong>IMU and ultrasonic sensors</strong>.</li>
    </ul>
  </li>
  <li><strong>Customized an LLM locally using Ollama:</strong>
    <ul>
      <li>Set up a basic <strong>RAG</strong> pipeline.</li>
      <li>Used <strong>MLflow</strong> to track model training.</li>
      <li>Explored the differences between <strong>popular LLMs</strong> available through Ollama (<strong>Llama 3.3, Mistral, DeepSeek-r1</strong>, and others).</li>
      <li>Gained insight into the <strong>computational demands</strong> of running an LLM locally.</li>
    </ul>
  </li>
  <li><strong>Created an AWS account and increased the EC2 instance quota:</strong>
    <ul>
      <li>Realized that learning <strong>AWS</strong> will be a larger endeavor than expected.</li>
    </ul>
  </li>
  <li><strong>Completed a lecture on Markov Decision Processes.</strong></li>
  <li><strong>Read up to 60% of <em>Life 3.0</em>.</strong></li>
  <li><strong>Completed <em>Foundations of Convolutional Neural Networks</em> from DeepLearning.AI.</strong></li>
  <li><strong>Listened to at least three AI/Neuroscience podcast interviews.</strong></li>
  <li><strong>Hosted the first session of Weekly ML/AI Interview Prep.</strong></li>
</ul>

<p>This is my first time writing a summary of what I’ve accomplished over the past week, and I plan to make it a weekly habit. It’s a great way to track my progress and reflect on what I’ve learned. Looking back, I noticed that I wasn’t as motivated to read this week but felt more engaged when learning through building. Making this list also helps me recognize the effort I’ve put in—something I tend to overlook. My default mindset has been, <em>“I’m not doing enough”</em> or <em>“I can’t learn fast enough,”</em> but I need to reframe that perspective.</p>]]></content><author><name>Kathy Trieu</name></author><category term="Machine Learning" /><category term="AI" /><category term="Career" /><category term="Progression" /><category term="Productivity" /><category term="Ollama" /><category term="LLM" /><category term="RAG" /><category term="MLflow" /><category term="MDP" /><summary type="html"><![CDATA[A weekly learning log to track my progress, reflect on motivation patterns, and challenge the mindset of “not doing enough.”]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://itstrieu.github.io/assets/img/start.jpg" /><media:content medium="image" url="https://itstrieu.github.io/assets/img/start.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Fluent Python and Special Methods</title><link href="https://itstrieu.github.io/python_special_methods" rel="alternate" type="text/html" title="Fluent Python and Special Methods" /><published>2025-02-22T00:00:00+00:00</published><updated>2025-02-22T00:00:00+00:00</updated><id>https://itstrieu.github.io/python_special_methods</id><content type="html" xml:base="https://itstrieu.github.io/python_special_methods"><![CDATA[<h1 id="saturday-february-22-2025">Saturday, February 22, 2025</h1>

<p>Failing the Python portion of my technical interviews in December was both embarrassing and disappointing. However, it turned out to be an invaluable first technical interview experience. The interviewers were all incredibly talented and kind, and I walked away with a clear understanding of where to focus my efforts—an important win.</p>

<p>Out of four interviews, one focused on traditional data structures and algorithms (DSA), while another was a pure Python assessment. I could have performed significantly better in both had I done one crucial thing: <strong>practice</strong>.</p>

<p>I’m not sure how common it is to absorb a lot of knowledge through reading and watching videos and assume that’s enough, but that’s exactly what I did. I spent two weeks cramming as much as I could about DSA and Python programming. I completed numerous Leetcode problems, but not nearly enough to truly internalize the patterns and implementation strategies. Instead of reinforcing what I learned through repetition and testing myself, I continuously sought out new concepts. This was my biggest mistake—I should not have considered myself prepared until I had thoroughly tested my ability to apply what I learned.</p>

<p>This time around, I’m taking a different approach—learning at a slower pace. Not having an immediate deadline is helpful. Since my preferred way of absorbing knowledge is through reading (followed by watching videos), I decided to read <a href="https://www.oreilly.com/library/view/fluent-python-2nd/9781492056348/"><em>Fluent Python</em></a> by <a href="https://www.oreilly.com/search?q=author:%22Luciano%20Ramalho%22">Luciano Ramalho</a> in its entirety while re-evaluating my Leetcode strategy. Unlike before, I’m prioritizing hands-on practice and assessment, making them just as—if not more—important than passive learning. Additionally, I’ve introduced a structured review process. Initially unsure of the best approach, I’ve settled on writing about the exercises I complete, incorporating teaching as part of my learning workflow.</p>

<h3 id="study-plan">Study Plan:</h3>

<blockquote>
  <p><strong>Read Fluent Python Chapters → Complete Exercises → Review/Teach</strong></p>
</blockquote>

<p>So far, I’ve completed Chapters 1, 2, 3, and 5 of <em>Fluent Python</em>. After finishing Chapter 3, I asked ChatGPT to generate exercises:</p>

<blockquote>
  <p>“I want to work on exercises to reinforce what I learned from <em>Fluent Python</em>, Chapters 1–3. Give me short exercises/assignments.”</p>
</blockquote>

<p>Chapter 1 covers <em>The Python Data Model</em>, Chapter 2 covers <em>An Array of Sequences</em>, and Chapter 3 covers <em>Dictionaries and Sets</em>.</p>

<p>Here’s one of the exercises along with my solution:</p>

<h3 id="exercise-1-understanding-__repr__-and-__str__"><strong>Exercise 1: Understanding <code class="language-plaintext highlighter-rouge">__repr__</code> and <code class="language-plaintext highlighter-rouge">__str__</code></strong></h3>

<p>Write a class called <code class="language-plaintext highlighter-rouge">Card</code> representing a playing card with a rank (e.g., ‘Ace’, ‘2’, ‘3’, …) and a suit (e.g., ‘Hearts’, ‘Clubs’). Implement the <code class="language-plaintext highlighter-rouge">__repr__</code> and <code class="language-plaintext highlighter-rouge">__str__</code> methods so that:</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">__repr__</code> returns a formal representation: <code class="language-plaintext highlighter-rouge">Card('Ace', 'Hearts')</code>.</li>
  <li><code class="language-plaintext highlighter-rouge">__str__</code> returns a user-friendly representation: <code class="language-plaintext highlighter-rouge">'Ace of Hearts'</code>.</li>
</ul>

<h4 id="learning-objective"><strong>Learning Objective:</strong></h4>

<p>Understanding the difference between <code class="language-plaintext highlighter-rouge">__repr__</code> and <code class="language-plaintext highlighter-rouge">__str__</code>.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">Card</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="n">self</span><span class="p">,</span> <span class="n">suit</span><span class="o">=</span><span class="sh">'</span><span class="s">Spades</span><span class="sh">'</span><span class="p">,</span> <span class="n">rank</span><span class="o">=</span><span class="sh">'</span><span class="s">Ace</span><span class="sh">'</span><span class="p">):</span>
        <span class="n">self</span><span class="p">.</span><span class="n">suit</span> <span class="o">=</span> <span class="n">suit</span>
        <span class="n">self</span><span class="p">.</span><span class="n">rank</span> <span class="o">=</span> <span class="n">rank</span>
    
    <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="n">self</span><span class="p">):</span>
        <span class="k">return</span> <span class="sa">f</span><span class="sh">"</span><span class="s">Card(</span><span class="sh">'</span><span class="si">{</span><span class="n">self</span><span class="p">.</span><span class="n">rank</span><span class="si">}</span><span class="sh">'</span><span class="s">, </span><span class="sh">'</span><span class="si">{</span><span class="n">self</span><span class="p">.</span><span class="n">suit</span><span class="si">}</span><span class="sh">'</span><span class="s">)</span><span class="sh">"</span>
    
    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="n">self</span><span class="p">):</span>
        <span class="k">return</span> <span class="sa">f</span><span class="sh">"</span><span class="si">{</span><span class="n">self</span><span class="p">.</span><span class="n">rank</span><span class="si">}</span><span class="s"> of </span><span class="si">{</span><span class="n">self</span><span class="p">.</span><span class="n">suit</span><span class="si">}</span><span class="sh">"</span>
    
    <span class="k">def</span> <span class="nf">__iter__</span><span class="p">(</span><span class="n">self</span><span class="p">):</span>
        <span class="k">return</span> <span class="nf">iter</span><span class="p">((</span><span class="n">self</span><span class="p">.</span><span class="n">rank</span><span class="p">,</span> <span class="n">self</span><span class="p">.</span><span class="n">suit</span><span class="p">))</span>

<span class="c1"># Example usage:
</span><span class="n">card</span> <span class="o">=</span> <span class="nc">Card</span><span class="p">(</span><span class="sh">'</span><span class="s">Hearts</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">Four</span><span class="sh">'</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="n">card</span><span class="p">)</span>  <span class="c1"># Four of Hearts
</span><span class="nf">print</span><span class="p">(</span><span class="nf">repr</span><span class="p">(</span><span class="n">card</span><span class="p">))</span>  <span class="c1"># Card('Four', 'Hearts')
</span>
<span class="n">suits</span> <span class="o">=</span> <span class="p">[</span><span class="sh">'</span><span class="s">Spades</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">Clubs</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">Hearts</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">Diamonds</span><span class="sh">'</span><span class="p">]</span>
<span class="n">ranks</span> <span class="o">=</span> <span class="p">[</span><span class="sh">'</span><span class="s">Two</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">Three</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">Four</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">Five</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">Six</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">Seven</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">Eight</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">Nine</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">Ten</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">Jack</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">Queen</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">King</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">Ace</span><span class="sh">'</span><span class="p">]</span>
<span class="n">deck</span> <span class="o">=</span> <span class="p">[</span><span class="nc">Card</span><span class="p">(</span><span class="n">suit</span><span class="p">,</span> <span class="n">rank</span><span class="p">)</span> <span class="k">for</span> <span class="n">suit</span> <span class="ow">in</span> <span class="n">suits</span> <span class="k">for</span> <span class="n">rank</span> <span class="ow">in</span> <span class="n">ranks</span><span class="p">]</span>

<span class="nf">print</span><span class="p">(</span><span class="n">deck</span><span class="p">[:</span><span class="mi">10</span><span class="p">])</span>
<span class="nf">print</span><span class="p">([</span><span class="nf">str</span><span class="p">(</span><span class="n">card</span><span class="p">)</span> <span class="k">for</span> <span class="n">card</span> <span class="ow">in</span> <span class="n">deck</span><span class="p">[:</span><span class="mi">10</span><span class="p">]])</span>
</code></pre></div></div>

<h4 id="expected-output"><strong>Expected Output:</strong></h4>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Four of Hearts
Card('Four', 'Hearts')
[Card('Two', 'Spades'), Card('Three', 'Spades'), Card('Four', 'Spades'), Card('Five', 'Spades'), Card('Six', 'Spades'), Card('Seven', 'Spades'), Card('Eight', 'Spades'), Card('Nine', 'Spades'), Card('Ten', 'Spades'), Card('Jack', 'Spades')]
['Two of Spades', 'Three of Spades', 'Four of Spades', 'Five of Spades', 'Six of Spades', 'Seven of Spades', 'Eight of Spades', 'Nine of Spades', 'Ten of Spades', 'Jack of Spades']
</code></pre></div></div>

<p>This was an excellent starting exercise because, right away, I had to write a class—something I struggled with during my interview.</p>

<p>The exercise directly reinforces the main concept of Chapter 1: Python’s special methods. These methods are enclosed with double underscores (e.g., <code class="language-plaintext highlighter-rouge">__repr__</code>, <code class="language-plaintext highlighter-rouge">__str__</code>). As someone who initially learned Python for data analysis and machine learning, I had only encountered <code class="language-plaintext highlighter-rouge">__init__</code>, so I hadn’t realized how fundamental special methods are for object-oriented programming. These methods aren’t meant to be called directly by users but instead define how objects behave when used with built-in Python functions. For example, <code class="language-plaintext highlighter-rouge">__len__</code> allows an object to return its length when passed to <code class="language-plaintext highlighter-rouge">len(obj)</code>, rather than requiring <code class="language-plaintext highlighter-rouge">obj.__len__()</code>.</p>

<p>So, what’s the difference between <code class="language-plaintext highlighter-rouge">__repr__</code> and <code class="language-plaintext highlighter-rouge">__str__</code>?</p>

<ul>
  <li>
    <p><strong><code class="language-plaintext highlighter-rouge">__repr__</code></strong> provides an unambiguous string representation of an object, ideally one that could be used to recreate the object. Without it, printing an object would return a default type reference instead. According to <em>Fluent Python</em>, <code class="language-plaintext highlighter-rouge">__repr__</code> should “be unambiguous and, if possible, match the source code necessary to re-create the represented object.”[^1] In my implementation, <code class="language-plaintext highlighter-rouge">repr(card)</code> returns <code class="language-plaintext highlighter-rouge">Card('Four', 'Hearts')</code>, which satisfies this requirement.</p>
  </li>
  <li>
    <p><strong><code class="language-plaintext highlighter-rouge">__str__</code></strong> returns a human-readable, user-friendly string representation of an object. In my implementation, <code class="language-plaintext highlighter-rouge">str(card)</code> returns <code class="language-plaintext highlighter-rouge">"Four of Hearts"</code>.</p>
  </li>
</ul>

<p>I also included <code class="language-plaintext highlighter-rouge">__iter__</code> in my class because I planned to reuse it for later exercises.</p>

<p>ChatGPT provided me with six exercises, which you can find <a href="https://github.com/itstrieu/fluent-python-notes/blob/main/1_3_exercises.ipynb">here</a> on my GitHub. While I’ve completed them, I haven’t written up my reflections yet. I’ll be posting more as I review my solutions and continue my reading.</p>]]></content><author><name>Kathy Trieu</name></author><category term="Python" /><summary type="html"><![CDATA[An overview of my plan to improve Python skills along with a writeup for a Python exercise on special methods.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://itstrieu.github.io/assets/img/python_special_methods.jpg" /><media:content medium="image" url="https://itstrieu.github.io/assets/img/python_special_methods.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Learning Log</title><link href="https://itstrieu.github.io/learning_log" rel="alternate" type="text/html" title="Learning Log" /><published>2025-02-19T00:00:00+00:00</published><updated>2025-02-19T00:00:00+00:00</updated><id>https://itstrieu.github.io/learning_log</id><content type="html" xml:base="https://itstrieu.github.io/learning_log"><![CDATA[<h1 id="wednesday-february-19-2025">Wednesday, February 19, 2025</h1>

<p>I started this blog with the intentions laid out in my first post. However, getting started felt daunting. Months after writing that first post, I was listening to an interview with Daliana Liu on <em>Super Data Science</em> when she said something along the lines of, “If you’re one of those people with drafts lined up but are too afraid to publish, you should just do it.” I felt like she was talking directly to me. Her message was clear: the most important thing is to start. It’s okay to put out an imperfect product and improve over time. Another point that stuck with me was to write with intention—but that intention doesn’t have to be perfection or gaining thousands of followers. Writing is a way to process thoughts, reinforce learning, and build clarity. I’ve spent too many years not creating because I felt inadequate in a world already saturated with content.</p>

<p>With that in mind, I’ve decided to use this blog as a learning log, at least for now. Managing the knowledge, skills, and concepts I’ve been absorbing has been overwhelming. It often feels like I’m learning a lot yet not making any significant progress. Writing it down will help reinforce my learning and allow me to see tangible growth. I rarely recognize my own progress unless someone points it out or I force myself to take a step back and give myself credit. Another benefit is simply getting comfortable with taking up space online—imperfectly.</p>

<p>To be honest, I have over a dozen tabs open right now. I just finished a long-winded conversation with ChatGPT about my skills, progress, and next steps. I know I need to update my resume. I installed FastAPI, only to immediately switch directions and start learning Apache Airflow instead. My mind felt so cluttered that I finally sat down to write this—to get clarity before moving forward.</p>

<p>Another approach I’ve taken is keeping a real notebook with grid paper to jot down my thoughts, ideas, questions, and project progress. Since starting this, I’ve been able to capture so much more of what’s going on in my mind, helping me revisit essential problems and stay on track. I might expand on this in a future blog post.</p>

<p>But today, I want to set a foundation for my learning log by reflecting on my journey and laying out my roadmap—however dynamic it may be.</p>

<hr />

<p>I spent years working toward a Master’s in Statistics, expecting to become a statistician or researcher. After a few failed interviews, I landed a role as a Coding Data Labeling Analyst at Meta. I found it hilarious that they hired me for a job requiring my weaknesses rather than my strengths. However, I quickly realized there was no good reason for coding and engineering to be a weakness. I became obsessed, and suddenly, the possibilities expanded.</p>

<p>An unexpected opportunity to interview for a DevOps/Data role lit a fire under me, and I started learning fast. Though I didn’t ultimately get the job, the experience gave me a much clearer understanding of what I like, what I know, and what I need to learn. Before that, I never thought I could be the kind of person who participated in coding interviews or aimed for engineering roles. I never even thought DevOps or data engineering would interest me. I was so wrong.</p>

<p>Preparing for that interview meant hours of watching YouTube videos on data structures and algorithms, reading <em>Ace the Data Science Interview</em> and <em>Cracking the Coding Interview</em>, and completing courses on CI/CD and testing. By the time I was done, the outcome of the interview didn’t even matter as much—I wanted the job, but I also walked away knowing I had leveled up. If I could do that, I could do more.</p>

<p>Now, I want to join the innovative AI and MLE engineers shaping this incredible era of AI potential. To do that, I feel like I need to learn <em>everything</em>—and that excites me.</p>

<p>Every day, I log off work and dive into my ever-changing, massively ambitious, self-made ‘curriculum,’ assisted by ChatGPT. My decisions are shaped by a mix of passion, interest, and the need to build essential skills. I’m also working on a challenging computer vision and robotics project (which I’ll probably write about in another post). There are skills I need now for roles I can realistically reach and skills I need to start learning for the roles I see myself growing into.</p>

<p>To get us up to speed, this was my most recent message to ChatGPT:</p>

<blockquote>
  <p><em>“I think I might not be focusing my immediate skill progression correctly. I’m advancing Python skills, completing the Deep Learning Specialization, reading Fluent Python, completing Leetcode DSA, and reading Reinforcement Learning and papers in the LLM, RL, and Agents space.”</em></p>
</blockquote>

<p>I left out that I’m also working on a robotics project, leading a local AI book club, and reading Chip Huyen’s <em>AI Engineering</em>.</p>

<hr />

<p>I can’t even keep track of everything I’m doing, so it’s time to refocus again.</p>

<h3 id="im-reading">I’m reading:</h3>

<ul>
  <li><em>Reinforcement Learning: An Introduction</em> – Because RL fascinates me, and understanding its theory will help me work on practical implementations in AI.</li>
  <li><em>Fluent Python</em> – Because I need to level up my Python programming skills to write cleaner, more efficient code.</li>
  <li><em>AI Engineering</em> – Because it offers an eye-opening perspective on AI deployment and the challenges beyond model training.</li>
  <li>Research papers on LLMs, Agents, and RL – Because I want to understand the research trajectory and anticipate where the field is heading.</li>
  <li><em>Life 3.0</em> by Max Tegmark – Because my AI Book Club picked it for the month, and it adds a philosophical dimension to AI discussions.</li>
</ul>

<h3 id="im-taking">I’m taking:</h3>

<ul>
  <li><em>Deep Learning Specialization</em> (Coursera, DeepLearning.ai) – Because mastering deep learning concepts is foundational to my career in AI.</li>
  <li><em>Machine Learning in Production</em> – Because understanding how to deploy and scale AI models is just as critical as training them.</li>
</ul>

<h3 id="im-building">I’m building:</h3>

<ul>
  <li>A robot that detects and picks up tennis balls autonomously – Because it’s a fun challenge, and collaborating with mechanical engineers pushes my practical programming skills.</li>
</ul>

<h3 id="im-practicing">I’m practicing:</h3>

<ul>
  <li>Leetcode problems – Because strong algorithmic skills will prepare me for technical interviews.</li>
  <li>Python exercises generated by ChatGPT – To reinforce my understanding of advanced Python concepts from <em>Fluent Python</em>.</li>
  <li>Git and GitHub – Because version control and collaboration are fundamental for working in AI teams.</li>
  <li>Docker and WSL – Because containerization and system environments are essential for ML and deployment.</li>
</ul>

<p>And somehow, it still doesn’t feel like enough.</p>

<p>Additionally, I need to start building skills in ML production and data engineering.</p>

<h3 id="ill-start-with">I’ll start with:</h3>

<ul>
  <li>Apache Airflow – To gain experience in workflow automation and data pipelines.</li>
  <li>GitHub Actions – To automate software workflows and CI/CD.</li>
  <li>Data Pipelines (maybe on AWS) – To work on scalable data infrastructure for AI applications.</li>
</ul>

<h3 id="then-eventually">Then eventually:</h3>

<ul>
  <li>LLM Engineering – To understand and contribute to the next wave of AI advancements.</li>
  <li>FastAPI – To build high-performance APIs for deploying AI models.</li>
  <li>Agentic AI – To explore autonomous AI systems and decision-making models.</li>
</ul>

<p>Every time I write out a plan, I feel an immediate sense of comfort. If I just follow it, execute, and refine it occasionally, I’ll inch closer and closer to my goals. And for now, that’s enough for me.</p>]]></content><author><name>Kathy Trieu</name></author><category term="Machine Learning" /><category term="AI" /><category term="Career" /><category term="Neurodiversity" /><category term="Productivity" /><summary type="html"><![CDATA[An explanation of how I plan to use this blog as a learning log.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://itstrieu.github.io/assets/img/learning.jpg" /><media:content medium="image" url="https://itstrieu.github.io/assets/img/learning.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Welcome to Cognitive Curiosities</title><link href="https://itstrieu.github.io/welcome" rel="alternate" type="text/html" title="Welcome to Cognitive Curiosities" /><published>2024-10-01T00:00:00+00:00</published><updated>2024-10-01T00:00:00+00:00</updated><id>https://itstrieu.github.io/welcome</id><content type="html" xml:base="https://itstrieu.github.io/welcome"><![CDATA[<p>Hello! I’m Kathy, and I’m excited to welcome you to <strong>Cognitive Curiosities</strong>. This blog marks the beginning of my journey toward becoming a <strong>Machine Learning Engineer (MLE)</strong>. My fascination with artificial intelligence drives me to document my experiences, challenges, and triumphs along the way. I hope that by sharing my insights, I can help others on similar paths and inspire engaging conversations.
<br />
<br /></p>
<h1 id="what-can-you-expect-here">What Can You Expect Here?</h1>
<p><br /></p>
<h3 id="1-machine-learning-techniques-and-tools">1. Machine Learning Techniques and Tools</h3>

<p>My passion for machine learning compels me to delve deep into its intricacies. To solidify my understanding, I often employ the <em>Feynman Method,</em> which allows me to simplify complex concepts. By sharing what I learn, I not only reinforce my knowledge but also hone my professional writing and editing skills. Expect posts that include:</p>

<ul>
  <li>Explorations of various algorithms and techniques</li>
  <li>Hands-on tutorials and project write-ups</li>
</ul>

<p><br />
<br /></p>

<h3 id="2-my-career-journey">2. My Career Journey</h3>

<p>Transparency is vital to me as I navigate my transition to a machine learning engineer role. This path is undoubtedly challenging, but I am eager to share my experiences with you. Look forward to posts covering:</p>

<ul>
  <li>Steps I’m taking to build my skills and portfolio</li>
  <li>Reflections on both my successes and challenges</li>
</ul>

<p><br />
<br /></p>

<h3 id="3-neurodiversity-in-tech">3. Neurodiversity in Tech</h3>

<p>As someone who identifies as neurodivergent, my late ADHD diagnosis has profoundly influenced my learning and working style in technology. This newfound awareness has allowed me to better understand my mind and discover effective strategies for managing it. While I may only occasionally dedicate full posts to my ADHD experiences, I will weave this perspective throughout my writing, covering topics such as:</p>

<ul>
  <li>How neurodiversity shapes my problem-solving approach</li>
  <li>Strategies for maintaining focus and productivity in a fast-paced tech environment</li>
  <li>Celebrating the strengths arising from diverse cognitive styles</li>
</ul>

<p><br />
<br /></p>

<h3 id="4-ethical-considerations-in-ai">4. Ethical Considerations in AI</h3>

<p>My background in human rights and democracy advocacy informs my approach to technology. I am committed to using AI to enhance society for all. Currently, I host a book club in LA where we explore different AI books each month, fostering meaningful discussions about their implications.</p>

<p>Machine learning and AI extend beyond technology; they raise critical ethical questions. As I navigate this landscape, I will discuss:</p>

<ul>
  <li>The societal impacts of AI</li>
  <li>The responsibilities of machine learning engineers in ensuring fairness and transparency</li>
  <li>Philosophical considerations surrounding the technology we develop</li>
</ul>

<p>I am genuinely excited to witness groundbreaking advancements in AI and eager to share my reflections with you.</p>

<p><br />
<br /></p>

<h3 id="5-curated-resources">5. Curated Resources</h3>

<p>I understand how overwhelming it can be to sift through the multitude of available resources, especially for those building self-discipline and optimizing productivity on their own. I’ll curate materials tailored for individuals like myself—those dedicated to deep understanding, possibly navigating ADHD, and pursuing their goals without a formal degree program. Expect:</p>

<ul>
  <li>Reviews of books that have significantly shaped my understanding of machine learning</li>
  <li>Recommendations for online courses and learning platforms designed for self-directed learners</li>
</ul>

<p><br />
<br /></p>

<h2 id="why-i-started-this-blog">Why I Started This Blog</h2>

<p>Reading <em>A Brief History of Intelligence</em> revealed the interconnectedness of my diverse interests, including mental health, productivity, pedagogy, machine learning, technology, neurodivergence, mindfulness, consciousness, and humanity. These themes converge around the concept of intelligence, which I find endlessly fascinating—especially regarding the brain and consciousness.</p>

<p>My passion for learning and sharing insights motivates this blog. Documenting my journey not only fosters my reflection and growth but also connects me with others who share similar interests. As I pursue this career path without a formal research degree, I aim to create tangible evidence of my efforts. I’ve always valued community-building, finding joy in bringing people together around both shared and contrasting interests. Establishing a blog that nurtures such a community resonates deeply with me, allowing me to connect with others who share my passions.</p>

<p>Whether you are a fellow learner, an experienced professional, or simply curious about artificial intelligence, I hope you find valuable insights here. Together, let’s navigate this fascinating landscape, celebrate our diverse perspectives, and cultivate a supportive community.</p>

<p>Thank you for visiting <strong>Cognitive Curiosities</strong>! I’m excited to share my journey with you and look forward to where this adventure takes us.</p>

<p><br />
<br /></p>

<p>Until next time,<br />
<strong>Kathy</strong></p>]]></content><author><name>Kathy Trieu</name></author><category term="Machine Learning" /><category term="AI" /><category term="Career" /><category term="Neurodiversity" /><category term="Productivity" /><summary type="html"><![CDATA[An introduction to Cognitive Curiosities and what you can expect from this blog.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://itstrieu.github.io/assets/img/welcome.jpg" /><media:content medium="image" url="https://itstrieu.github.io/assets/img/welcome.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>