<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>OSD600 on My Little Blog</title><link>https://www.parkerchenca.com/osd600/</link><description>Recent content in OSD600 on My Little Blog</description><generator>Hugo</generator><language>en-us</language><copyright>Parker Chen</copyright><lastBuildDate>Thu, 10 Sep 2026 11:50:00 +0000</lastBuildDate><atom:link href="https://www.parkerchenca.com/osd600/index.xml" rel="self" type="application/rss+xml"/><item><title>OSD600 Release 0.4 Part 3 - Reflecting</title><link>https://www.parkerchenca.com/osd600/release-0-4-part-3-reflecting/</link><pubDate>Thu, 10 Sep 2026 11:50:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/release-0-4-part-3-reflecting/</guid><description>Wrapping it all together</description><content:encoded><![CDATA[<h2 id="intro">Intro</h2>
<p>My original goal for Release 0.4 was to contribute real code to a large open-source project related to finance. I completed that goal by working on Actual Budget, which is a fairly big project with around 23k stars.</p>
<h3 id="thoughts-about-the-future">Thoughts About the Future</h3>
<hr>
<p>Now that I understand the workflow better, I hope I can eventually try adding a feature or modifying core code in a large codebase. I’m also paying attention to bigger finance-related libraries such as QuantLib, and maybe one day I will be able to contribute there as well.</p>
<p>Overall, I would say I accomplished what I wanted for this release — just not as fully as I expected. But it’s still a good start.</p>
<h3 id="how-i-worked-through-the-problem">How I Worked Through the Problem</h3>
<hr>
<p>Most of my technical work is understanding the project’s structure and figuring out how to safely fix the type issue. One important thing I learned was that the <code>.d.ts</code> files inside <code>/node_modules/@actual-app/...</code> are not the source code, even though ESLint and TypeScript errors pointed me there.</p>
<p><img alt="*.d.ts files for the issue desc" loading="lazy" src="/osd600/release-0-4-part-3-reflecting/Screenshot_2025-12-12_at_15.54.17.png"></p>
<p>*.d.ts files for the issue desc</p>
<p>These files only describe the types, so the real fix needed to be applied in the actual source files with the same paths (not totally same).</p>
<p><img alt="… And their corresponding original files" loading="lazy" src="/osd600/release-0-4-part-3-reflecting/Screenshot_2025-12-12_at_15.47.13.png"></p>
<p>… And their corresponding original files</p>
<p>Another useful technique I learned was compiling files directly using <code>tsc</code>. By compiling only the files I changed, I could quickly check whether the error was fixed.</p>
<p>But since I had to temporarily update the config to include my test files, it was easy to break something by accident. In this case, I relied on Git to get rid of all temp files and keep the repo clean before submitting the changes (To be honest, creating a totally new test branch is another good idea).</p>
<p>I must mention that, the “fork first, then work separately” workflow we learned in class this semester did help me a looooot for managing my chaotic developing process.</p>
<h3 id="community-communication-and-the-open-source-mindset">Community, Communication, and the Open Source Mindset</h3>
<hr>
<p>After watching my classmates’ presentations, I realized that mastering a specific language is not the main requirement for open-source contribution. The real skill is always the communication: reading existing discussions, following instructions, asking questions when unsure, and respecting the time of maintainers.</p>
<p>Large projects usually have clear contributing guides, and Actual Budget is no exception. Their documentation explains workflow, expectations, and review rules in detail. As contributors, our responsibility is to follow these instructions first before doing anything else. Good communication keeps the whole project running smoothly; ignoring guidelines only creates extra work for others.</p>
<p>My PR also helped me experience the interaction between contributors and automated tools like Copilot, Coderabbitai, and many other review bots. They gave suggestions and asked for tests. Sometimes I felt a bit frustrated that I couldn’t discuss things with a real human; however, if I can solve the issue with bots alone, I guess it means I did a pretty good job, right…?</p>
<p>Overall, this release helped me understand more about two key concepts of the open source community: communication and respect.</p>
<p>I really enjoy the friendly and efficient communication among the contributors.</p>
]]></content:encoded></item><item><title>OSD600 Release 0.4 Part 2 - Processing</title><link>https://www.parkerchenca.com/osd600/release-0-4-part-2-processing/</link><pubDate>Thu, 10 Sep 2026 11:49:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/release-0-4-part-2-processing/</guid><description>Pushing things forward</description><content:encoded><![CDATA[<blockquote>
<p>🔔 <strong>Prelude:</strong>
Me working with a big project… Wait, me?</p>
</blockquote>
<h2 id="starting-the-contribution">Starting the Contribution</h2>
<hr>
<p>This week I finally moved from planning into actually contributing. I decided to work on <strong>Actual Budget</strong> again, and honestly, I was kinda nervous because this repository has 23.6k stars, real users, and an active core team.</p>
<p>I chose a TypeScript issue related to incompatible type definitions</p>
<p>(<a href="https://github.com/actualbudget/actual/issues/6290">https://github.com/actualbudget/actual/issues/6290</a>).</p>
<p>In short, the <code>Query</code> type was missing a few methods and caused type errors inside the API package.</p>
<p>My PR is small and touches only a few lines of code (PR: <a href="https://github.com/actualbudget/actual/pull/6331">https://github.com/actualbudget/actual/pull/6331</a>). The challenge was not writing the code only, but understanding what the project expected from contributors.</p>
<h3 id="understanding-the-project-and-the-rules">Understanding the Project and the Rules</h3>
<hr>
<p>Before writing anything, I spent most of my time reading the project structure and the Contributing guide. Actual Budget has an entire website explaining how to participate:</p>
<p><a href="https://actualbudget.org/docs/contributing/">https://actualbudget.org/docs/contributing/</a></p>
<p>Compared to our previous workflows, the overall process is similar — fork repo, create branch, implement change, send PR. However, the attitude and expectations are much more formal.</p>
<p>The contributing guide explains:</p>
<ul>
<li>development workflow</li>
<li>expectations for PR quality</li>
<li>how reviews work</li>
<li>and, very directly, that not every PR will be accepted</li>
</ul>
<blockquote>
<p>“We aren’t going to take every single little change. Don’t be offended if we close your PR…”</p>
</blockquote>
<p>So even for a small fix like mine, discussion might still be required, and reviewers could ask for adjustments. It’s more serious, but also very professional.</p>
<p>In addition, I got in touch with <code>yarn</code> in this project, and the project has a set of commands to generate a release note instead of describing PR on GitHub.</p>
<h3 id="the-pr-experience">The PR Experience</h3>
<hr>
<p>After pushing my code, I first marked it with <code>[WIP]</code>. Soon after, Copilot automatically reviewed the PR and suggested writing tests. That’s kind of strange because when I checked the file, I found there were no dedicated tests at all for that file, so I asked the question directly inside the discussion and waited for a reviewer to reply.</p>
<p>When I removed <code>[WIP]</code>, another automated reviewer (coderabbitai) appeared, plus almost 30 checks waiting to finish. Seeing that number made me feel how large and complex this project really is.</p>
<p>So far, the review and discussion are still ongoing.</p>
<h3 id="final-thoughts">Final Thoughts</h3>
<hr>
<p>Even though this PR is small, the experience means huge for me. I got to know about how large open-source projects manage quality and how serious review standards can be.</p>
<p>I also feel more confident contributing to large projects now. I’m planning to share more details and personal reflections during Friday’s meeting, and hopefully continue contributing after Release 0.4.</p>
]]></content:encoded></item><item><title>OSD600 Release 0.4 Part 1 - Planning</title><link>https://www.parkerchenca.com/osd600/release-0-4-part-1-planning/</link><pubDate>Thu, 10 Sep 2026 11:48:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/release-0-4-part-1-planning/</guid><description>Scheduling things out</description><content:encoded><![CDATA[<blockquote>
<p>🔔 <strong>Prelude:</strong>
Tough week, and it will get tougher</p>
</blockquote>
<h2 id="planning-for-the-release-04">Planning for the release 0.4</h2>
<p>Last week, we wrapped up some final tasks for Release 0.3, and now I’m officially moving into the work for Release 0.4. I mentioned earlier that I was still waiting for my PR for Release 0.3 to be merged. Fortunately, right after the lecture, someone from Opsimate finally reviewed my changes and gave me feedback. The response time was a bit slow, but at least things are moving again.</p>
<p>The real issue, however, is the schedule. The end of the semester is approaching, and last week I was completely occupied with assignments from other courses. Because of that, I didn’t spend as much time exploring Release 0.4 as I had hoped.</p>
<p>The good news is that during Release 0.3, I had already identified a few projects I really wanted to contribute to: <a href="https://www.parkerchenca.com/en/article/2aaf0ccf-d7f8-8015-91e1-e557e20be6b3">My last post</a>. I also spent some time understanding their codebases, so I’m not starting from zero. I’ll talk about those projects below.</p>
<p>My plan is to clear out the most urgent schoolwork first, then fully commit myself to Release 0.4.</p>
<h3 id="microsoft-qlib"><a href="https://github.com/microsoft/qlib"><strong>Microsoft Qlib</strong></a></h3>
<p>I already finished setting up the environment using <code>pyenv</code> and <code>uv</code>, which allows me to manage Python dependencies very cleanly. I also prepared the example dataset used in the project.</p>
<p>My next step is to go through the latest issues on their GitHub repo and see if there are any that interest me or are suitable for my skill level. Once I choose an issue, I can start analyzing the relevant parts of the code.</p>
<p>I don’t intend to fully understand the entire codebase, because Qlib is large and complex. Instead, I plan to learn the sections that are directly related to the issue I want to work on.</p>
<h3 id="actual-budget"><a href="https://github.com/actualbudget/actual"><strong>Actual Budget</strong></a></h3>
<p>When I was reading the code earlier, I actually found an approach for solving this issue: <a href="https://github.com/actualbudget/actual/issues/6149"><strong>https://github.com/actualbudget/actual/issues/6149</strong></a></p>
<p>However, the problem mainly involves the UI, and the fix probably requires only around ten lines of code(In fact, the existing PR for this issue modifies fewer than 20 lines.) Because of that, I eventually decided not to work on this issue, since it feels too small for Release 0.3.</p>
<p>My next step is to continue exploring the parts of Actual Budget’s codebase that I already understand and look for issues that are more meaningful to contribute to.</p>
<p>One thing I realized while reading the code is that in a well‑designed project, adding a new feature—even a large one—doesn’t necessarily require changing many lines of code. The architecture handles most of the complexity. For an assignment, this might make the contribution look “too small on the surface,” but the real difficulty lies in reading and understanding the existing code.</p>
<h3 id="-summary">🧳 Summary</h3>
<p>In my current plan for Release 0.4, I expect to focus mainly on these two projects. The most difficult part for me right now isn’t the code itself, but managing my time during this extremely busy part of the semester.</p>
<p>I hope everyone in the course has a smooth development process, and I’ll try my best to push forward as well.</p>
]]></content:encoded></item><item><title>OSD600 Lab 9</title><link>https://www.parkerchenca.com/osd600/lab-9/</link><pubDate>Thu, 10 Sep 2026 11:47:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/lab-9/</guid><description>&lt;blockquote&gt;
&lt;p&gt;🔔 &lt;strong&gt;Prelude:&lt;/strong&gt;
Rocket lift off&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="answering-main-lab-questions"&gt;Answering Main Lab Questions&lt;/h2&gt;
&lt;p&gt;Originally I had a &lt;strong&gt;reflection&lt;/strong&gt; section for this blog, but my Professor provides some wonderful questions for me to share my experience and thoughts, so, my reflection has been melted into my answers. I hope you can find useful information directly in there.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Which release tool and package registry did you choose? Provide links to everything you mention.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Go has it’s unique release system — basically, if I init my module locally, push to the GitHub, have a right git tag version, and finally click the “Request” on &lt;a href="https://pkg.go.dev/example.com/my/module"&gt;&lt;code&gt;https://pkg.go.dev/example.com/my/module&lt;/code&gt;&lt;/a&gt; … then, done, I don’t need to handle rest things, the module will be indexed on the official module platform, and anyone should be able to &lt;code&gt;go install&lt;/code&gt; my module. So convenience.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;What was the process for creating a release? Be detailed so that other developers could read your blog and get some idea how to do the same.&lt;/strong&gt;&lt;/p&gt;</description><content:encoded><![CDATA[<blockquote>
<p>🔔 <strong>Prelude:</strong>
Rocket lift off</p>
</blockquote>
<h2 id="answering-main-lab-questions">Answering Main Lab Questions</h2>
<p>Originally I had a <strong>reflection</strong> section for this blog, but my Professor provides some wonderful questions for me to share my experience and thoughts, so, my reflection has been melted into my answers. I hope you can find useful information directly in there.</p>
<ul>
<li>
<p><strong>Which release tool and package registry did you choose? Provide links to everything you mention.</strong></p>
<ul>
<li>Go has it’s unique release system — basically, if I init my module locally, push to the GitHub, have a right git tag version, and finally click the “Request” on <a href="https://pkg.go.dev/example.com/my/module"><code>https://pkg.go.dev/example.com/my/module</code></a> … then, done, I don’t need to handle rest things, the module will be indexed on the official module platform, and anyone should be able to <code>go install</code> my module. So convenience.</li>
</ul>
</li>
<li>
<p><strong>What was the process for creating a release? Be detailed so that other developers could read your blog and get some idea how to do the same.</strong></p>
<ul>
<li>Ok, assume that you already have a “ready-to-go” codebase (you cannot release empty folder)</li>
<li>Then, you should use <code>git tag</code> related commands for tagging you current commit (Use <code>git tag --help</code> for help)</li>
<li>Next, you should push your commit to GitHub, maybe you have already done that, so, you should <strong>push your tag</strong> separately to GitHub</li>
<li>Don’t forget to change your documentation… I used to notice that my release still shows <strong>v0.0.1</strong> for the version flag, which means I have to repeat my work again (depressedly).</li>
<li>Finally, you can release your package. I used <strong>Go</strong>, and put some useful links in the <strong>Reference</strong> section. If you are also using GO, them can help you make your way.</li>
</ul>
</li>
<li>
<p><strong>What did you learn while doing your release? Did you have any &ldquo;aha!&rdquo; moments or get stuck?</strong></p>
<ul>
<li>A lot of “aha!” moments, actually.</li>
<li>Go’s release workflow feels almost suspiciously simple—so simple that sometimes I overthought things.</li>
<li>The biggest challenge wasn’t complexity but the danger of skipping steps because the process looked too easy.</li>
<li>You can find more of my “aha!” moments in the detailed experience I describe below.</li>
</ul>
</li>
<li>
<p><strong>How much did you have to alter your code, files, build, etc. to use the chosen package format and registry?</strong></p>
<ul>
<li>I didn’t need to change my code structure at all (But actually, I still need to change the documents).</li>
<li>Go’s build system is easy, clean and straightforward. I think this is one of the reasons many developers love Go — compared to languages like C++, incremental builds and direct code fetching “just work.” (Disclaimer: I also really like C++.)</li>
<li>One thing to be careful about is that git tags <strong>must</strong> follow the <strong><code>vX.X.X</code></strong> format, such as <strong><code>v1.0.1</code></strong>. Otherwise, the Go package platform may fail to recognize the version or cause unexpected issues.</li>
</ul>
</li>
<li>
<p><strong>How did the User Testing session with your partner go? Describe what it was like, where they got stuck, and how you corrected the problems.</strong></p>
<ul>
<li>Before the session, I tested installation myself on my Raspberry Pi.</li>
<li>Interestingly, because my package URL is <strong><code>https://pkg.go.dev/github.com/BHChen24/repo2context</code></strong>, the default installed binary is named <strong><code>repo2context</code></strong>, not the short alias <strong><code>r2c</code></strong> that I used throughout my documentation.</li>
<li>This confused both me at first — I couldn’t find the installed executable because I was searching for <strong><code>r2c</code></strong>.</li>
<li>To avoid further confusion, I updated my <strong>README</strong> to explicitly mention this and show how to rename the binary if users prefer a shorter command.</li>
<li>Still waiting for feedbacks from my partners</li>
</ul>
</li>
<li>
<p><strong>How do users install and use your project now that it has been released? Provide links and some instructions.</strong></p>
<ul>
<li>I have provided full installation instructions in my README:</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="gu">## Installation
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### Prerequisites
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">-</span> [<span class="nt">Go</span>](<span class="na">https://go.dev/</span>) installed on your system
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### Quick Install
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">```bash
</span></span><span class="line"><span class="cl">go install github.com/BHChen24/repo2context<span class="ni">@latest</span>
</span></span></code></pre></div><p>This installs the binary as <code>repo2context</code> to your <code>$GOPATH/bin</code> (or <code>$HOME/go/bin</code> by default).</p>
<p><strong>Add Go bin to PATH</strong> (if not already configured):</p>
<p>Linux/macOS:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># For bash</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s1">&#39;export PATH=$PATH:$HOME/go/bin&#39;</span> &gt;&gt; ~/.bashrc <span class="o">&amp;&amp;</span> <span class="nb">source</span> ~/.bashrc
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># For zsh</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s1">&#39;export PATH=$PATH:$HOME/go/bin&#39;</span> &gt;&gt; ~/.zshrc <span class="o">&amp;&amp;</span> <span class="nb">source</span> ~/.zshrc
</span></span></code></pre></div><p>Windows (PowerShell as Administrator):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="p">[</span><span class="no">Environment</span><span class="p">]::</span><span class="n">SetEnvironmentVariable</span><span class="p">(</span><span class="s2">&#34;Path&#34;</span><span class="p">,</span> <span class="nv">$env:Path</span> <span class="p">+</span> <span class="s2">&#34;;</span><span class="nv">$env:USERPROFILE</span><span class="s2">\go\bin&#34;</span><span class="p">,</span> <span class="s2">&#34;User&#34;</span><span class="p">)</span>
</span></span></code></pre></div><p>Then restart your terminal.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Verify installation</span>
</span></span><span class="line"><span class="cl">repo2context --version
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># (Optional) Rename to shorter command</span>
</span></span><span class="line"><span class="cl">mv ~/go/bin/repo2context ~/go/bin/r2c
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">I found once my app is released on the go pkg platform, all these instructions also appear on the home page, which is really cool and convenient. I put it again here for you to quickly navigate: [https://pkg.go.dev/github.com/BHChen24/repo2context](https://pkg.go.dev/github.com/BHChen24/repo2context)
</span></span></code></pre></div></li>
</ul>
<h3 id="references"><strong>References</strong></h3>
<ul>
<li><a href="https://pkg.go.dev/about#adding-a-package">https://pkg.go.dev/about#adding-a-package</a></li>
<li><a href="https://semver.org/">https://semver.org/</a></li>
</ul>
]]></content:encoded></item><item><title>OSD600 Release 0.3 Part 2 - Fixing bugs</title><link>https://www.parkerchenca.com/osd600/release-0-3-part-2-fixing-bugs/</link><pubDate>Thu, 10 Sep 2026 11:46:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/release-0-3-part-2-fixing-bugs/</guid><description>Oops, I’m not meaning to discover them ..</description><content:encoded><![CDATA[<blockquote>
<p>🔔 <strong>Prelude:</strong>
Bugs in the middle of the way</p>
</blockquote>
<h2 id="opsimate-bugs-fixing">OpsiMate bugs fixing</h2>
<p>During the development of the new Coralogix integration, I ended up discovering two UI bugs — because of course things like this always happen, right?</p>
<ol>
<li>The first issue was a missing icon. This one was extremely small: a one‑line fix in a single file. Honestly the PR felt almost too tiny.</li>
<li>Fortunately, another bug appeared at exactly the right time. This one involved a UI element that refused to trigger properly, which required a bit more investigation and work.</li>
</ol>
<h3 id="missing-dog">Missing dog</h3>
<ol>
<li>
<p>In my first blog post, I mentioned that OpsiMate includes a DataDog integration. Ironically, the dog went missing</p>
<p><img alt="Where is the dog?" loading="lazy" src="/osd600/release-0-3-part-2-fixing-bugs/Screenshot_2025-11-20_224841.png"></p>
<p>Where is the dog?</p>
</li>
<li>
<p>I attached the screenshot directly to the issue. It more or less explains the entire situation by itself <a href="https://github.com/OpsiMate/OpsiMate/issues/557">https://github.com/OpsiMate/OpsiMate/issues/557</a>.</p>
</li>
<li>
<p>I wasn’t sure if I had to follow the full issue template… describing such a simple visual bug felt also a little bit painful.</p>
</li>
<li>
<p>The fix was straightforward, and again, a screenshot was enough to show the completed result: <a href="https://github.com/OpsiMate/OpsiMate/pull/560">https://github.com/OpsiMate/OpsiMate/pull/560</a></p>
<p><img alt="Doggy is back!" loading="lazy" src="/osd600/release-0-3-part-2-fixing-bugs/Screenshot_2025-11-21_014414.png"></p>
<p>Doggy is back!</p>
</li>
</ol>
<h3 id="indifference-button">Indifference button</h3>
<ol>
<li>
<p>The other issue was a button labeled “Add Provider” that refused to open the sidebar.</p>
</li>
<li>
<p>While researching good tools for recording UI interactions, I discovered ScreenToGif: <a href="https://github.com/NickeManarin/ScreenToGif">https://github.com/NickeManarin/ScreenToGif</a> . It turned out to be incredibly useful, and I used it to record a small gif video and attach it to the issue.</p>
<p><img alt="So easy for using" loading="lazy" src="/osd600/release-0-3-part-2-fixing-bugs/image.png"></p>
<p>So easy for using</p>
</li>
<li>
<p>You can see the lively demonstration right in the issue: <a href="https://github.com/OpsiMate/OpsiMate/issues/558">https://github.com/OpsiMate/OpsiMate/issues/558</a>. It’s one of those situations that is very hard to explain clearly with text alone.</p>
<p><img alt="Wow I can also insert it here!" loading="lazy" src="/osd600/release-0-3-part-2-fixing-bugs/bug.gif"></p>
<p>Wow I can also insert it here!</p>
</li>
<li>
<p>The root cause was improper state management. Once I identified which component and function were supposed to be triggered, the fix itself was not too difficult.</p>
</li>
</ol>
<h3 id="reflects">Reflects</h3>
<p>Overall, even when you focus on a single PR, bugs still have a way of appearing continuously (sadly). There’s never a shortage of issues to work on — you don’t have to worry about “running out” of them.</p>
]]></content:encoded></item><item><title>OSD600 Release 0.3 Part 2 - Adding features</title><link>https://www.parkerchenca.com/osd600/release-0-3-part-2-adding-features/</link><pubDate>Thu, 10 Sep 2026 11:45:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/release-0-3-part-2-adding-features/</guid><description>LEGOING</description><content:encoded><![CDATA[<blockquote>
<p>🔔 <strong>Prelude:</strong>
API document reading — totally as hell</p>
</blockquote>
<h2 id="coralogix-integration">Coralogix Integration</h2>
<h3 id="what-is-it">What is it?</h3>
<p>According to the official description, Coralogix provides “real-time insights and trend analysis for logs, metrics, and security data with no reliance on storage or indexing.”</p>
<p>In simpler terms, it is essentially a real-time server monitoring and observability service. Coralogix helps track logs, visualize metrics, and detect anomalies without requiring developers to manage complex storage systems. For projects with active deployments, this kind of integration makes debugging and performance monitoring much easier.</p>
<p><img alt="Coralogix’s Main Dashboard" loading="lazy" src="/osd600/release-0-3-part-2-adding-features/Screenshot_2025-11-21_164213.png"></p>
<p>Coralogix’s Main Dashboard</p>
<p>My main task is to first fetch all the dashboards’ information to support further features.</p>
<h3 id="challenges">Challenges</h3>
<ol>
<li>
<p>Reading the API documentation turned out to be much harder than I expected. As shown in the screenshot：</p>
<p><img alt="API Docs" loading="lazy" src="/osd600/release-0-3-part-2-adding-features/Screenshot_2025-11-21_164425.png"></p>
<p>API Docs</p>
<p>The example on the API usage page points to <strong><code>https://api.coralogix.com/</code></strong>. However, when I used this endpoint, I didn’t receive any meaningful response—only an API key permission error.</p>
</li>
<li>
<p>I went back to the dashboard and expanded my API key permissions all the way to the admin, but the error still appeared. That was when things started feeling really strange.</p>
</li>
<li>
<p>Since the issue clearly wasn’t about permissions, I began to suspect the endpoint itself. It didn’t make much sense that <strong>everyone</strong> would use the same entry point. So I spent a long time digging around the documentation… and eventually found the endpoint control page: <a href="https://coralogix.com/docs/integrations/coralogix-endpoints/"><strong>https://coralogix.com/docs/integrations/coralogix-endpoints/</strong></a></p>
<p><img alt="End Point demonstration" loading="lazy" src="/osd600/release-0-3-part-2-adding-features/Screenshot_2025-11-21_164248.png"></p>
<p>End Point demonstration</p>
</li>
<li>
<p>I was a bit frustrated — why wasn’t this mentioned anywhere on the main API page? And because the service is still relatively new, there is almost no discussion online; even AI tools didn’t help much. Honestly, I think it was part luck and part persistence that led me to the correct page. Otherwise, I would have wasted much more time.</p>
</li>
<li>
<p>By the way… there are also outdated API references still visible in the docs</p>
<p><img alt="Huh?" loading="lazy" src="/osd600/release-0-3-part-2-adding-features/Screenshot_2025-11-21_164312.png"></p>
<p>Huh?</p>
<p>which makes things even more confusing.</p>
</li>
<li>
<p>Through this experience, I realized how important high-quality developer documentation is…</p>
</li>
</ol>
<h3 id="fixing">Fixing</h3>
<ol>
<li>
<p>To implement the new feature, I mostly referenced another integration in the project : <a href="https://github.com/OpsiMate/OpsiMate/blob/main/apps/server/src/bl/integrations/integration-connector/datadog-integration-connector.ts">https://github.com/OpsiMate/OpsiMate/blob/main/apps/server/src/bl/integrations/integration-connector/datadog-integration-connector.ts</a>.</p>
<p>Their implementation was very clean, so I could follow the structure and focus mainly on handling the data — the request and response parts.</p>
</li>
<li>
<p>And although the Coralogix documentation has some organization issues, the API page itself is straightforward. It clearly shows the response format, and the examples are easy to follow:</p>
<p><img alt="A clear API response" loading="lazy" src="/osd600/release-0-3-part-2-adding-features/Screenshot_2025-11-21_164435.png"></p>
<p>A clear API response</p>
<p>This made writing the actual code much easier.</p>
</li>
<li>
<p>Apart from the time I spent searching for the correct endpoint, the actual development process was quite enjoyable. Nothing beats the satisfaction of running a <code>curl</code> command and finally seeing the server return the correct data.</p>
</li>
</ol>
]]></content:encoded></item><item><title>OSD600 Release 0.3 Part 1</title><link>https://www.parkerchenca.com/osd600/release-0-3-part-1/</link><pubDate>Thu, 10 Sep 2026 11:44:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/release-0-3-part-1/</guid><description>Houston, we have a problem.</description><content:encoded><![CDATA[<blockquote>
<p>🔔 <strong>Prelude:</strong>
I have a bad feeling about this: once again, I find myself stuck trying to choose the right project.</p>
</blockquote>
<h2 id="main-content">Main Content</h2>
<h3 id="still-wip">Still WIP</h3>
<p>At the end of this week, I haven’t submitted my first PR yet. Most of my time went into searching for a suitable open‑source project, and my plan is to update this post again after I finally publish my first PR.</p>
<p>Since I previously mentioned that I want to contribute to a repo related to <strong>$<em>finance</em>$</strong>🤑, I spent a good amount of time exploring that topic. Here are some projects currently on my list:</p>
<h3 id="ai-powered-investment-platform">AI-powered investment platform</h3>
<p><strong>Microsoft Qlib</strong> (<a href="https://github.com/microsoft/qlib"><strong>https://github.com/microsoft/qlib</strong></a>)</p>
<p><strong>Qlib</strong> describes itself as “an AI‑oriented quantitative investment platform,” but in simpler words, it’s a framework that provides data tools, modeling support, and workflow automation to help build AI‑driven quantitative trading strategies.</p>
<ul>
<li>I’m personally very interested in this project and have already started exploring it. The development activity is not bad — issues and PRs are still being handled as recently as this week.</li>
<li>It uses Python, has plenty of issues to choose from, focuses on a hot topic (AI), and the documentation is fairly complete.</li>
<li>But…I spent an entire afternoon debugging my Python environment. Absolutely terrifying.</li>
</ul>
<h3 id="opensource-banking-system">Open‑source banking system</h3>
<p><strong>Apache Fineract</strong> (<a href="https://github.com/apache/fineract"><strong>https://github.com/apache/fineract</strong></a>)</p>
<ul>
<li>This is an open‑source banking system written in Java. I feel that its tech stack aligns well with what employers in the industry expect. If I can learn its design principles and make meaningful contributions, it could be very helpful for my future job search.</li>
<li>However, the repo doesn’t have a typical Issues section, and its contribution rules seem quite different. I might need extra time to figure out how to get started.</li>
<li>Still, this is the project I’m currently most interested in.</li>
</ul>
<h3 id="personal-finance-app">Personal-finance app</h3>
<p><strong>Actual Budget</strong> (<a href="https://github.com/actualbudget/actual"><strong>https://github.com/actualbudget/actual</strong></a>)</p>
<ul>
<li>This personal finance platform is super active: around 30 PRs were handled within just a week, and it has around 23k stars. Clearly a very popular project.</li>
<li>It mainly uses TypeScript and focuses on “practical frontend” features. The demo isn’t such fancy, but the features look solid and well‑built.</li>
<li>It doesn’t feel “technically fancy” or groundbreaking, but it solves real problems — exactly the type of project I care about and would like to contribute to.</li>
</ul>
<h3 id="-summary">🧳 Summary</h3>
<p>Overall, I’m still in the process of selecting the right project and diving into the code, but I’m getting closer. Hopefully I can finally report back with my first PR on weekend.</p>
<h3 id="updates">Updates</h3>
<p>Over the past several days, a few things happened that changed the direction of my work.</p>
<ol>
<li>At first, I planned to continue exploring Qlib. However, when I tried to set up the environment, <strong><code>uv</code></strong> and <strong><code>pyenv</code></strong> ended up conflicting with each other again.</li>
<li>I spent additional time rebuilding a clean environment, but unexpectedly, Python packages started throwing compilation errors—some of them simply refused to build.</li>
<li>At that point, I felt I had already invested too much time just dealing with environment issues. So I decided to switch back to a project I’m more familiar with: <strong>OpsiMate</strong> (<a href="https://github.com/OpsiMate/OpsiMate"><strong>https://github.com/OpsiMate/OpsiMate</strong></a> ), which I worked on during release 0.2.</li>
<li>While reviewing feature requests, I found an issue that has not been implemented yet: <a href="https://github.com/OpsiMate/OpsiMate/issues/94"><strong>https://github.com/OpsiMate/OpsiMate/issues/94</strong></a> . It’s new, has reference implementations, and involves a reasonable amount of work. It felt like the right fit, so I decided to focus my efforts on contributing to OpsiMate.</li>
</ol>
]]></content:encoded></item><item><title>OSD600 Lab 8</title><link>https://www.parkerchenca.com/osd600/lab-8/</link><pubDate>Thu, 10 Sep 2026 11:43:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/lab-8/</guid><description>CI, linters, and testing</description><content:encoded><![CDATA[<blockquote>
<p>🔔 <strong>Prelude:</strong>
Another helpful hand, and more</p>
</blockquote>
<h2 id="main-content">Main Content</h2>
<p>This week I worked on GtHub Actions CI for my Go project, added a Go linter, and wrote tests for a partner’s repository. The lab overlapped with my Cloud Computing (CCP) course, so the CI work fit well with what I’m learning there.</p>
<p>Reflections</p>
<ul>
<li>I’m also taking CCP, so CI-related tasks felt practical.</li>
<li>I had already added CI in a previous lab (I thought “why not?” while I was adding tests), so I extended that work here.</li>
<li>Adding a Go linter was new to me (I know the eslint), but following the <code>golangci-lint</code> repo made it straightforward.</li>
</ul>
<h3 id="answering-questions">Answering questions</h3>
<h4 id="how-did-you-set-up-your-github-actions-ci-workflow-what-did-the-yaml-for-this-workflow-look-like">How did you set up your GitHub Actions CI Workflow? What did the YAML for this workflow look like?</h4>
<p>I searched “How can I set up my GitHub Actions CI Workflow?”, as just same as the question title. Then, I found a Go workflow templates by clicking the action button in GitHub. The workflow builds and tests on push and pull requests to <strong><code>main</code></strong> and <strong><code>dev</code></strong>. Super straightforward again.</p>
<p>Template YAML:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Go</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">on</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">push</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">branches</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="s2">&#34;main&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;dev&#34;</span><span class="w"> </span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">pull_request</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">branches</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="s2">&#34;main&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;dev&#34;</span><span class="w"> </span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">jobs</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">build</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">runs-on</span><span class="p">:</span><span class="w"> </span><span class="l">ubuntu-latest</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">steps</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l">actions/checkout@v4</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Set up Go</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l">actions/setup-go@v4</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">with</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">go-version</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;1.25.1&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Build</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l">go build -v ./...</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Test</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l">go test -v ./...</span><span class="w">
</span></span></span></code></pre></div><h4 id="how-did-your-partners-repo-and-testing-setup-differ-from-yours-what-was-it-like-writing-tests-for-a-project-you-didnt-create">How did your partner&rsquo;s repo and testing setup differ from yours? What was it like writing tests for a project you didn&rsquo;t create?</h4>
<hr>
<p>My partner’s repo did not initially have CI now(I will check again later). They did provide example tests, which helped me a lot. Writing tests for someone else feels just like writing a feature, but you must understand more about the intended behavior before you can test it well.</p>
<h4 id="what-do-you-think-of-ci-now-that-youve-set-it-up-for-yourself">What do you think of CI now that you&rsquo;ve set it up for yourself?</h4>
<ul>
<li>CI acts as an automatic safety layer — it finds flaws before the changes are really applied to the main (or other danger zone).</li>
<li>It saves manual steps: every push triggers the same checks.</li>
<li>CI is also flexible: you can configure testing closer to the real deployment environment, which local runs can’t always match.</li>
</ul>
<h4 id="if-you-did-the-optional-challenges-talk-about-how-that-went-and-what-you-learned">If you did the optional challenges, talk about how that went and what you learned.</h4>
<p>I added <strong><code>golangci-lint</code></strong> via GitHub Action (the repo/documentation has a ready template). Check their repo and instruction: <a href="https://github.com/golangci/golangci-lint-action">https://github.com/golangci/golangci-lint-action</a></p>
<p>I was surprised when I found they actually have provided “ready-to-use” config lines that allow me to copy and paste and then run everything correctly.</p>
<p>Lesson: read official docs and search the marketplace before creating the wheel — many reusable actions already exist.</p>
]]></content:encoded></item><item><title>OSD600 Lab 7</title><link>https://www.parkerchenca.com/osd600/lab-7/</link><pubDate>Thu, 10 Sep 2026 11:42:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/lab-7/</guid><description>Testing and testing the tests and test the testing</description><content:encoded><![CDATA[<blockquote>
<p>🔔 <strong>Prelude</strong>:
Code everywhere, tests everywhere, tokens everywhere, budget nowhere</p>
</blockquote>
<h2 id="main-content">Main Content</h2>
<h3 id="testing-commit">Testing commit:</h3>
<p><a href="https://github.com/BHChen24/repo2context/pull/36/commits">https://github.com/BHChen24/repo2context/pull/36/commits</a></p>
<h3 id="answering-lab-questions">Answering Lab Questions</h3>
<hr>
<ul>
<li>Which testing framework/tools did you choose? Why did you choose them? Provide links to each tool and briefly introduce them.
<ul>
<li>Since I my project is written by Go, so I just use the go test for testing: <a href="https://pkg.go.dev/testing">https://pkg.go.dev/testing</a></li>
<li>As described on the official page, it “provides support for automated testing of Go packages.” It’s also a part of the standard library, so it can be used directly when the Go environment is set.</li>
<li>At the beginning, I put the test files in another folder just like what I used to do with Typescript testing, but then I found it’s better to just place them beside the source code as a standard way in Go projects.</li>
<li>Use <code>go test [target folder/file]</code> to run tests, and use <code>go test -cover [target]</code> to see the test coverage</li>
</ul>
</li>
<li>How did you set them up in your project? Be detailed so that other developers could read your blog and get some idea how to do the same.
<ul>
<li>See above~ :)</li>
</ul>
</li>
<li>What did you learn while writing your test cases? Did you have any &ldquo;aha!&rdquo; moments or get stuck?
<ul>
<li>I felt writing tests is painful.</li>
<li>I have to consider each possible way to trigger an error, which is literally difficult to cover all the cases - also means I have to fully understand the tested target (mostly functions in Go).</li>
<li>Always, when I hand my tests to AI for reviewing, it will give more comprehensive test cases, like missing values, edge cases, input format, etc. I did learned a lot.</li>
<li>But I also begin to doubt that I can really memorize all useful cases. There are at least 10 to 15 cases for each function, even though there are some common cases I can reuse.</li>
<li>Maybe a test cases document is the truly practical tool for the testing.</li>
<li>I also made good use of “given-when-then” pattern for writing the tests. (See <a href="https://github.com/BHChen24/repo2context/blob/main/pkg/scanner/scanner_test.go">https://github.com/BHChen24/repo2context/blob/main/pkg/scanner/scanner_test.go</a>) It’s super helpful for planning the test process.</li>
</ul>
</li>
<li>Did your tests uncover any interesting bugs or edge cases?
<ul>
<li>No for this time. But I am curious about why I didn&rsquo;t find any bugs… Maybe more tests will reveal some, or I need more time to review my tests.</li>
</ul>
</li>
<li>What did you learn from this process? Had you ever done testing before? Do you think you&rsquo;ll do testing on projects in the future?
<ul>
<li>Actually I have done the tests in the Lab6 (See <a href="https://github.com/BHChen24/repo2context/blob/main/pkg/tokenCounter/tokenCounter_test.go">https://github.com/BHChen24/repo2context/blob/main/pkg/tokenCounter/tokenCounter_test.go</a>)</li>
<li>At that time, I just simply thought that, “oh, since I will develop a new feature, maybe developing the tests at the same time is a good idea,” and then I created the tests beside it.</li>
<li>I think doing the testing is a standard step for developing reliable applications, so I definitely will do that in my future projects.</li>
<li>But I am actually feeling weird… Since each test case can be different, I’d like to say I’ve learned a lot from past tests, but for the next test I may still go blank with the new situation… Even though I know how to apply the test pattern, most of the time I still need to find some references to implement the test logic. Is it normal or not?</li>
</ul>
</li>
</ul>
<h3 id="experience-with-speckit">Experience with Speckit</h3>
<hr>
<p>As the additional content, I’d like to mention the new AI related tool called <a href="https://github.com/github/spec-kit">**Speckit</a>, built by GitHub.**</p>
<p><img alt="Speckit installing screen" loading="lazy" src="/osd600/lab-7/Screenshot_2025-11-05_at_18.20.28.png"></p>
<p>Speckit installing screen</p>
<p>This week, I tried it on my project and generated some scope-focused documentation for adjusting the AI assistant’s behavior towards my project.</p>
<p>Tldr, it looks good, but it didn’t reach my expectation for budget and left some confusion about how it understands the project context.</p>
<p>Firstly, as a CLI tool, it can generate corresponding commands for popular AI assistant tools such as Claude Code, Codex CLI (I use cursor-agent cli), <strong>and then</strong>, helps you to generate the project documentation. Which means you still have to call the api for creating the docs, and it has a lot of strict rules:</p>
<p><img alt="To-do list for generating plans" loading="lazy" src="/osd600/lab-7/Screenshot_2025-11-05_at_18.18.52.png"></p>
<p>To-do list for generating plans</p>
<p>As you may see, besides the plan, we also have <strong>constitution</strong> and <strong>specify</strong> that need to be created before, and then we have <strong>tasks</strong> to generate, finally <strong>implement</strong> it.</p>
<p>The full chain is <strong>constitution</strong> → <strong>specify</strong> → <strong>plan</strong> → <strong>tasks</strong> → <strong>implement;</strong> they all could be generated or run in the chat box with the AI assistant by slash commands like <code>/speckit.* [your chat content]</code>.</p>
<p>The quality of documentation is fantastic, as you have all the practical built-in rules in the speckit:</p>
<p><img alt="A lot of .md files" loading="lazy" src="/osd600/lab-7/Screenshot_2025-11-05_at_18.19.00.png"></p>
<p>A lot of .md files</p>
<p>Good project understanding and constitution set up:</p>
<p><img alt="Nearly wonderful and comprehensive documentation" loading="lazy" src="/osd600/lab-7/Screenshot_2025-11-06_at_16.08.26.png"></p>
<p>Nearly wonderful and comprehensive documentation</p>
<p>And quality checking:</p>
<p><img alt="Screenshot 2025-11-05 at 18.18.40.png" loading="lazy" src="/osd600/lab-7/Screenshot_2025-11-05_at_18.18.40.png"></p>
<p>But, the token consumption is also beautiful:</p>
<p><img alt="3 million token cost in minutes" loading="lazy" src="/osd600/lab-7/Screenshot_2025-11-05_at_18.23.51.png"></p>
<p>3 million token cost in minutes</p>
<p>At that point it exactly hit me like: for some project this small, <strong>Speckit</strong> steering the ship was overkill.</p>
<p>In addition, it did help me to create a new branch for implementing new test:</p>
<p><img alt="Helpful hand" loading="lazy" src="/osd600/lab-7/Screenshot_2025-11-05_at_18.18.19.png"></p>
<p>Helpful hand</p>
<p>However, it ignored my git context and named “001-test-xxx” (implicitly pointing to issue 1) the new branch, while I am currently at the “33-add-more-tests” branch. I think it’s just, not perfect, though I still paid a lot of token.</p>
<p>In the end, I found the <strong>Speckit</strong> is a really practical tool - there’s so much documentation for the AI to follow, that its behavior stays nicely in check (though I still think any AI-generated docs need a human adjust). However, for a small personal project like mine, I haven’t felt a huge payoff yet.</p>
<p>If you are interested, you can also have a try on it in your projects. :&gt;</p>
]]></content:encoded></item><item><title>OSD600 Release 0.2 recap</title><link>https://www.parkerchenca.com/osd600/release-0-2-recap/</link><pubDate>Thu, 10 Sep 2026 11:41:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/release-0-2-recap/</guid><description>Everything you did in October</description><content:encoded><![CDATA[<blockquote>
<p>🔔 <strong>Prelude:</strong>
Journey of open-source contribution</p>
</blockquote>
<h2 id="in-october-in-hacktoberfest">In October, in Hacktoberfest…</h2>
<h3 id="what-i-did"><strong>What I did</strong></h3>
<hr>
<p>At first, I helped my friend build <strong>his open-source project</strong>. I introduced him to Hacktoberfest and added issue and PR templates to his project to make it easier for more people to contribute. Project link: <a href="https://github.com/TemaDeveloper/library_proj"><strong>https://github.com/TemaDeveloper/library_proj</strong></a></p>
<p>Then, I found a fun “<strong>cat card battle</strong>” project on GitHub. I joined it just because it looked interesting - and I love cat pictures. I also noticed that it is a new project created for Hacktoberfest, not too hard, but still meaningful (Not just “add yourself to the Contributors.md”). I contributed code to help the project fetch cat images correctly. Project link: <a href="https://github.com/JessieVela/cat-card-battle"><strong>https://github.com/JessieVela/cat-card-battle</strong></a></p>
<p>My next two PRs were for the <strong>OpsiMate</strong> project. This project has about 200 stars with a very active open-source community. They even use Slack to make announcements regularly. The reason why I choose this project is after working on two smaller projects, I wanted to join a bigger one that needed more communication and coordination - and OpsiMate was a good match. I unified their <code>eslint</code> and <code>prettier</code> config files, and also helped write some tests. Project link: <a href="https://github.com/OpsiMate/OpsiMate"><strong>https://github.com/OpsiMate/OpsiMate</strong></a></p>
<h3 id="how-ive-progressed">how I&rsquo;ve progressed</h3>
<hr>
<p>The beginning was difficult. Honestly, the assignment really pushed me to start - because I needed to complete something for the marks. But once I made the first try, I realized most problems were not as hard as I thought.</p>
<p>The hardest part for me was <strong>finding the right issues</strong>. The hacktoberfest tag and my classmates’ sharing on Teams helped a lot. I also learned a lot about GitHub search. Here&rsquo;s a document I often used and recommend to others:</p>
<p><a href="https://docs.github.com/en/search-github/github-code-search/understanding-github-code-search-syntax"><strong>https://docs.github.com/en/search-github/github-code-search/understanding-github-code-search-syntax</strong></a></p>
<p>Then came <strong>reading and understanding code</strong> - or more exactly, understanding the whole structure of a repository. Usually, a repo has many tools like ESLint, pnpm, biome, etc. These tools may not be part of the main logic, but if they are not configured correctly, the project cannot even run, and there is no way to develop and test the project. I once tried a project that I couldn’t make run locally, and I finally had to give up: <a href="https://github.com/BHChen24/flexprice">**https://github.com/BHChen24/flexprice</a>** (If you are interested, you can give it a try.)</p>
<p>Another important part is using <strong>soft skills</strong>, like time management and communication. Good <strong>time management</strong> is important. our professor has told us many times not to push all PRs at the last minute. I tried to make a detailed schedule with flexible options. For example, one week I was sick and couldn’t finish my PR by Friday, but I finished it during the weekend. That was the “acceptable case” in my plan. I also had other priority levels and fallback plans, such as contacting the professor if needed. In longer projects, unexpected things can always happen, so it’s important to track progress and prepare alternatives.</p>
<p>About <strong>communication</strong> - I noticed many open-source contributors communicate in a very casual way. Maybe that’s a community habit. But some comments like “Hey, give me the issue” feel a bit rude to me. I saw that some people spoke like that and then received no reply 😂. So  I try to be polite and neutral, and keep my messages short. Being too formal can also confuse others, I think.</p>
<p>I also learned that timely <strong>follow-up</strong> is important, because not everyone is a full-time open-source developer. For example, when I was debugging in the cat card project, the author only replied after I mentioned them - so if I had stayed silent, nothing would have moved forward.</p>
<h3 id="what-i-learned">What I learned</h3>
<hr>
<p>I think my biggest improvement is getting to know <strong>how to read code</strong> in a better way. Now, when I start working on a project, I know exactly what to check first: read the <strong><code>README.md</code></strong>, look at the repository’s insights ****tab, read the <strong><code>CONTRIBUTE.md</code></strong> file, etc. I also learned how to use good tools when reading code — I always search first, and then use “go to definition/references” to jump precisely to related code. I scroll much less with my mouse now.</p>
<p>I also became more confident using <strong>Git</strong>. I use Git often in assignments and at my internship, and I’ve learned some useful details. For example, if I publish a branch first and then rebase, the history becomes very messy like spaghetti - and everyone can see it. But if I don’t publish before rebasing, the worst thing is just a local conflict, which I can solve privately. Then when I publish, the history looks clean and is easier for reviewers to follow.</p>
<p>I also gained inspiration on how to build reliable projects by reading <strong>clean repositories</strong>, like this one: <a href="https://github.com/yamadashy/repomix/"><strong>https://github.com/yamadashy/repomix/</strong></a></p>
<p>Another repo I liked is <a href="https://github.com/juspay/hyperswitch"><strong>https://github.com/juspay/hyperswitch</strong></a> . I didn’t have a chance to contribute yet, but it’s a great example of how to build a financial project in Rust, a direction I’m very interested in. I’ll keep following it.</p>
<h3 id="considerations"><strong>Considerations</strong></h3>
<hr>
<p>I think I made some progress during Hacktoberfest, but this is still just the beginning.</p>
<p>I had planned to contribute to larger projects (with maybe over 2k stars), but due to time, strange build errors, and some unexpected competition, I chose a safer way to meet the requirements of the course first. Still, I really want to contribute to big projects. Some of my classmates have already done that, and after this round of Hacktoberfest, I finally feel confident enough to try it too in the future.</p>
<p>By the way… seeing my avatar appear in the Contributors list makes me feel kind of proud.</p>
]]></content:encoded></item><item><title>OSD600 Release 0.2 Week 4</title><link>https://www.parkerchenca.com/osd600/release-0-2-week-4/</link><pubDate>Thu, 10 Sep 2026 11:40:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/release-0-2-week-4/</guid><description>Last PR for the release 0.2</description><content:encoded><![CDATA[<blockquote>
<p>🔔 <strong>Prelude:</strong>
We ****need to be tested for sure</p>
</blockquote>
<h2 id="in-release-02-week-4">In release 0.2 week 4…</h2>
<hr>
<h3 id="what-i-did"><strong>What I did</strong></h3>
<p>This week I contributed in another issue in the project <a href="https://github.com/OpsiMate/OpsiMate"><strong>OpsiMate</strong></a>, - the same one I contributed to last week.</p>
<p>My main task was to add test cases for one of the APIs.</p>
<hr>
<h3 id="working-on-issuepr"><strong>Working on (issue/PR)</strong></h3>
<p>Here’s the issue I picked up: <a href="https://github.com/OpsiMate/OpsiMate/issues/371">https://github.com/OpsiMate/OpsiMate/issues/371</a></p>
<p>And here’s my pull request:  <a href="https://github.com/OpsiMate/OpsiMate/pull/537">https://github.com/OpsiMate/OpsiMate/pull/537</a></p>
<p>This issue was a bit of a “legacy” one. Someone had tried working on it before, but their PR was rejected. Another contributor also took it but later unassigned themselves.</p>
<p>When I saw it sitting there for a while, I thought “Why not give it a try?” So I volunteered to take it on. Right now, both the issue and my PR are still waiting for review.</p>
<hr>
<h3 id="need-to-know"><strong>Need to know</strong></h3>
<p>The issue focused on writing tests using the <code>Supertest</code> framework, which is quite similar to <code>Vitest</code>. By looking at existing tests in the project, I quickly figured out how to use it.</p>
<p>It was also very helpful to check some closed issues and PRs - there are lots of good examples there.</p>
<hr>
<h3 id="difficulties--fixes"><strong>Difficulties &amp; Fixes</strong></h3>
<p>While testing, I actually found a few bugs in the original API code.</p>
<p>It seems the API didn’t have proper <code>try-catch</code> logic, so it couldn’t return the correct response status. Because of that, I had to mention this problem in my PR - basically saying, “Hey, this API might have a bug. It should be fixed before we can finalize the tests.”</p>
<p>I submitted a draft PR temporarily. The maintainers might ask me to fix the bug as well, or maybe just provide more guidance on the tests. Either way, I just need to wait for the review.</p>
<hr>
<h3 id="considerations"><strong>Considerations</strong></h3>
<p>I’ve seen some test code that doesn’t really “test” anything - it just exists to make the tests pass.</p>
<p>With AI tools becoming more common in development, this problem might get even more serious: AI can help you generate tests quickly, but those tests might only aim to pass instead of really verifying quality (especially when you tell the AI, “Hey, this code doesn’t work!”).</p>
<p>In my experience, my tests did help me discover real issues and hidden bugs, which shows how valuable testing can be - even if it’s sometimes tedious.</p>
<p>Combining AI-assisted coding with good testing practices is definitely an interesting topic worth exploring in the future.</p>
]]></content:encoded></item><item><title>OSD600 Lab 6 Developing</title><link>https://www.parkerchenca.com/osd600/lab-6-developing/</link><pubDate>Thu, 10 Sep 2026 11:39:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/lab-6-developing/</guid><description>Implement new feature for my project</description><content:encoded><![CDATA[<h2 id="main-content">Main Content</h2>
<h3 id="the-feature">The feature</h3>
<p>I implemented the token counting feature inspired by the <strong>Repomix</strong> project in this lab.</p>
<p>The feature displays the token cost calculated by a specific model align with each file in the file tree. Users can better manage API call budget now. For example:</p>
<p><img alt="Screenshot 2025-10-27 at 16.34.20.png" loading="lazy" src="/osd600/lab-6-developing/Screenshot_2025-10-27_at_16.34.20.png"></p>
<p>I also added corresponding tests to ensure reliability.</p>
<h3 id="the-development">The development</h3>
<p>In the development step, I tried to apply the TDD pattern</p>
<p>To follow it, I wrote the tests first with AI assistance. Tests provided a clear direction for developing, though some tests turned out to be tricky or hard to satisfy (because they are generated by AI… A strict tech leader!)</p>
<p>In the end, I still have to ask AI for help or frequently search my question online… But I think this experience is valuable.</p>
<h3 id="the-inspiration">The inspiration</h3>
<ul>
<li>Directly referring the pattern for applying tiktoken library in Repomix:
<ul>
<li><code>this.encoding = get_encoding(encodingName);</code> → <code>tke, err := tiktoken.GetEncoding(encoding)</code></li>
</ul>
</li>
<li>Writing test to make the feature more robust (just like what Repomix has done)</li>
<li>The difference, which is also the challenge, is passing text into the new function and handling the output. Due to the project structure, this is totally different from Repomix so I have to review my code again and try to find a best way to integrate the function into my project
<ul>
<li>Then I noticed that I need to do more refactoring work later.</li>
</ul>
</li>
</ul>
<h3 id="next-step">Next step</h3>
<p>I want to add more tests for all features in the project. Also, there are more and more lines piling up in the <code>core.go</code> so I may have to refactor most of the code in it (blame the past me) by wrapping more logic into functions.</p>
<h3 id="other-interesting-things">Other Interesting things..</h3>
<p>CodeRabbitAI gave a wrong suggestion for code changing that broke my CI/CD pipeline! (Do not trust AI so hard&hellip;)</p>
]]></content:encoded></item><item><title>OSD600 Lab 6 Reading</title><link>https://www.parkerchenca.com/osd600/lab-6-reading/</link><pubDate>Thu, 10 Sep 2026 11:38:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/lab-6-reading/</guid><description>Read the code, understand the project</description><content:encoded><![CDATA[<blockquote>
<p>🔔 <strong>Prelude:</strong>
If I cannot understand the project, how can I write my own code?</p>
</blockquote>
<h2 id="main-content">Main Content</h2>
<h3 id="introduction-of-the-target-feature">Introduction of the target feature</h3>
<p>The feature I focused on is <strong>token counting</strong>. This component is responsible for calculating how many tokens a given text input contains.</p>
<p>I ran the <a href="https://github.com/yamadashy/repomix">**repomix</a>** project locally and got output like below:</p>
<p><img alt="Screenshot 2025-10-27 at 10.57.03.png" loading="lazy" src="/osd600/lab-6-reading/Screenshot_2025-10-27_at_10.57.03.png"></p>
<p>Which I think it’s exactly the feature I need for controlling the cost of calling LLM APIs.</p>
<h3 id="explore-the-codebase">Explore the codebase</h3>
<p>To understand the implementation, I went through the official documentation and source code of the project.</p>
<ul>
<li><strong>Read <a href="https://repomix.com/">the official website</a></strong> – This provided a general overview of what the project does and how it can be used.</li>
<li><strong>Read <a href="https://github.com/yamadashy/repomix">the GitHub main page</a></strong> –The project is written in <strong>TypeScript</strong>, and the main repository offers clear descriptions of the project’s capabilities and setup process.</li>
<li><strong>Read <code>README.md</code></strong> – This basically is the main content of the GitHub page.</li>
<li><strong>Read <code>package.json</code></strong> – From here, I learned about the project’s dependencies, scripts, and build process.</li>
<li><strong>Read <code>CONTRIBUTING.md</code></strong> – This document describes how to develop and contribute to the project. While reading, I also noticed that there is an additional instruction file called <strong><code>repomix-instruction.md</code></strong>, which gives more detailed guidelines.</li>
<li><strong>Build and run locally</strong> – After understanding the setup, I built and executed the project on my local machine to test it directly.</li>
<li><strong>Locate feature implementations</strong> – I identified the files where the token counting logic is implemented by:
<ul>
<li><strong>Ask <code>Claude Code</code></strong> – The project provides a <strong><code>CLAUDE.md</code></strong> file with instructions for AI-assisted development.</li>
</ul>
</li>
<li><strong>Most important file</strong> – The core logic resides in <a href="https://github.com/yamadashy/repomix/blob/main/src/core/metrics/TokenCounter.ts"><strong><code>src/core/metrics/TokenCounter.ts</code></strong></a>. Other related implementations can be found by tracing symbol references from this file.</li>
<li><strong>Read both the main source code and test files</strong> – Doing this helped me understand the internal structure and how the feature is being used in different contexts:</li>
</ul>
<p><img alt="Screenshot 2025-10-27 at 11.09.52.png" loading="lazy" src="/osd600/lab-6-reading/Screenshot_2025-10-27_at_11.09.52.png"></p>
<h3 id="the-way-to-understand-the-project">The way to understand the project</h3>
<p>One challenge was understanding the <strong>tiktoken</strong> library.</p>
<p>Originally, <strong><code>tiktoken</code></strong> is a Python package, but this project uses its TypeScript implementation. Since my project uses Go, I had to search for a Go version online. I found <a href="https://github.com/pkoukk/tiktoken-go"><strong><code>pkoukk/tiktoken-go</code></strong></a>, but after reviewing its issues I discovered that a newer maintained fork exists: <a href="https://github.com/localit-io/tiktoken-go"><strong><code>localit-io/tiktoken-go</code></strong></a>. I decided to use the newer one.</p>
<p>While exploring the implementation, I also found some hardcoded parameters in Repomix, which indicate the project’s default behavior (as shown in my screenshots):</p>
<p><img alt="Screenshot 2025-10-27 at 11.45.04.png" loading="lazy" src="/osd600/lab-6-reading/Screenshot_2025-10-27_at_11.45.04.png"></p>
<p>It wasn’t very difficult to understand the class pattern in TypeScript, since we have already learned similar concepts in our C++ and Java courses.</p>
<p>I also noticed there are many utility (“util”) functions used throughout the code:</p>
<p><img alt="Screenshot 2025-10-27 at 11.48.46.png" loading="lazy" src="/osd600/lab-6-reading/Screenshot_2025-10-27_at_11.48.46.png"></p>
<p>As you can see, except for the line <code>this.encoding = ...</code>, most of the other lines are mainly responsible for:</p>
<ul>
<li>setting timers for performance testing</li>
<li>logging the operations</li>
</ul>
<p>These parts are not the core logic of token counting; they mainly support it by monitoring and recording runtime behavior.</p>
<p>And, it also has a lot of error handling code:</p>
<p><img alt="Screenshot 2025-10-27 at 11.48.55.png" loading="lazy" src="/osd600/lab-6-reading/Screenshot_2025-10-27_at_11.48.55.png"></p>
<p>Being able to identify their purposes can reduce the mental load when reading the code.</p>
<h3 id="learned">Learned</h3>
<p>The key to understanding a large codebase is to focus on the core business logic first. Identify which parts handle essential functionality, and which are for error handling, performance monitoring, or utility purposes. While those are important, they are not the main focus for my target feature.</p>
<p>In addition, navigating through references is also very helpful for understanding the codebase. I spent some time learning how to use the “Go to Definition / Type Definition / Implementation / References” features in my editor, and once I got used to them, they saved a lot of time by precisely revealing the details I needed to know.</p>
]]></content:encoded></item><item><title>OSD600 Release 0.2 Week 3</title><link>https://www.parkerchenca.com/osd600/release-0-2-week-3/</link><pubDate>Thu, 10 Sep 2026 11:37:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/release-0-2-week-3/</guid><description>The third PR. Be a part of the project.</description><content:encoded><![CDATA[<blockquote>
<p>🔔 <strong>Prelude:</strong>
I am one part of a group of a hundred developers?!</p>
</blockquote>
<h2 id="in-release-02-week-3">In release 0.2 week 3…</h2>
<hr>
<h3 id="what-i-did"><strong>What I did</strong></h3>
<p>This week I participated in the project that was recommended by my classmates: <a href="https://github.com/OpsiMate/OpsiMate"><strong>OpsiMate</strong></a>; it&rsquo;s truly an active open-source project—once I commented on an issue, there was a contributor to reply to me in time.</p>
<p>I also joined their slack channel and found they even have short but regular reports for community growth, which makes me really feel like I am a part of the project.</p>
<hr>
<h3 id="working-on-issuepr"><strong>Working on (issue/PR)</strong></h3>
<p>The issue I worked on is: <a href="https://github.com/OpsiMate/OpsiMate/issues/517">https://github.com/OpsiMate/OpsiMate/issues/517</a> and this is the related PR for it: <a href="https://github.com/OpsiMate/OpsiMate/pull/521">https://github.com/OpsiMate/OpsiMate/pull/521</a></p>
<p>This issue is about adjusting the project’s linting and formatting configurations. Before, there were several config files in different folders, such as the app server folder, the client folder, and the shared package folder. So one of the main contributors wants to create unified base configs for both the linter and the formatter in order to manage them in a standardized way.</p>
<hr>
<h3 id="need-to-know"><strong>Need to know</strong></h3>
<p>After analyzing the codebase, I realized that the project is mainly using <code>eslint.config.js/mjs</code> and <code>.prettierrc</code> as the configuration files. S
the first thing I need to figure out is how prettier and eslint reads their configs from specific files.</p>
<p>And, obviously, <code>.prettierrc</code> doesn’t support importing or exporting, so I need to find a way to transit config objects within config files.</p>
<hr>
<h3 id="difficulties"><strong>Difficulties</strong></h3>
<p>It’s not so hard to find the online resources and apply them to create a new base config file that is accepted by prettier. But the eslint configs seem to be more complex.</p>
<p>Furthermore, once the eslint configuration is broken, it will spread out to subdomains and eventually lead to a failed CI/CD workflow (I made one mistake and then there were a huge number of red error messages that freaked me out). So I need to take it more carefully and frequently ask for help.</p>
<hr>
<h3 id="fixes"><strong>Fixes</strong></h3>
<p>To be honest, the fixings are not so special or awesome; I basically just followed online instructions plus a little bit of my personal experience to accomplish this issue. If I made a mistake, the local IDE tools like SonarQube, eslint and prettier plugin would correct me before making changes; besides, this project applied the CodeRabbitAI for GitHub PR reviewing. I got a lot of useful suggestions for improving my bug-fixing code. Everything just looks like it&rsquo;s running smoothly and under control.</p>
<hr>
<h3 id="considerations"><strong>Considerations</strong></h3>
<p>There are a few interesting thoughts I want to mention here but, I don’t know if I should write some super long paragraphs for each of those 😂, so I decide to list them below as bullet points:</p>
<ul>
<li>Technically speaking, this is my first time participating in a project that has a public developing community; my first PR was made for my friend, and my second PR was made for a hacktoberfest-specific project (I think. But it still is a fun project!). So I am very exciting for this week’s work.</li>
<li>Eslint9 doesn&rsquo;t support <code>extend</code> syntax anymore, but my work was based on a previous version, so I did pay for it with some useless effort. Thankfully I noticed this problem from the code reviewer. Should take more care about the version of developing tools next time.</li>
<li>Slack seems super useful for communication. It also likes the discord… Maybe I should take some time to learn about it.</li>
<li>Do not feel afraid of following up on the work. Eventually we should push the process somehow.</li>
</ul>
]]></content:encoded></item><item><title>OSD600 Release 0.2 Week 2</title><link>https://www.parkerchenca.com/osd600/release-0-2-week-2/</link><pubDate>Thu, 10 Sep 2026 11:36:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/release-0-2-week-2/</guid><description>The second PR</description><content:encoded><![CDATA[<blockquote>
<p>🔔 <strong>Prelude:</strong>
Shall we have a talk about the strange issues?</p>
</blockquote>
<h2 id="in-release-02-week-2">In release 0.2 week 2…</h2>
<hr>
<h3 id="what-i-did"><strong>What I did</strong></h3>
<p>This week I mainly worked on a small but interesting project: Cat Card battle (<a href="https://github.com/JessieVela/cat-card-battle">https://github.com/JessieVela/cat-card-battle</a>). It’s a web-based game built with <strong>Vue</strong> and <strong>TypeScript</strong>, and styled using <strong>Tailwind CSS</strong>.</p>
<hr>
<h3 id="working-on-issuepr"><strong>Working on (issue/PR)</strong></h3>
<p>Early this week, I found a bug that caused some image URLs from <strong>The Cat API</strong> to redirect to Tumblr’s “content violation” placeholder instead of showing actual cat photos. Like this:</p>
<p><img alt="Screenshot 2025-10-17 at 10.42.19.png" loading="lazy" src="/osd600/release-0-2-week-2/Screenshot_2025-10-17_at_10.42.19.png"></p>
<p>(Also see: <a href="https://github.com/JessieVela/cat-card-battle/issues/23">https://github.com/JessieVela/cat-card-battle/issues/23</a>)</p>
<p>So I decided to file this bug as an issue, and see if I can be assigned then fix it.</p>
<hr>
<h3 id="need-to-know"><strong>Need to know</strong></h3>
<p>I have some experience with the <strong>Vue</strong> framework, but I needed to review a few of its concepts. Fortunately, the bug didn’t require any functional changes, so I could focus purely on <strong>TypeScript</strong> logic.</p>
<p>The next thing I needed was to understand how to use <strong>The Cat API</strong>. Luckily, they provide detailed documentation:</p>
<p><a href="https://developers.thecatapi.com/view-account/ylX4blBYT9FaoVd6OhvR?report=bOoHBz-8t">https://developers.thecatapi.com/view-account/ylX4blBYT9FaoVd6OhvR?report=bOoHBz-8t</a></p>
<hr>
<h3 id="difficulties"><strong>Difficulties</strong></h3>
<p>The main challenge this week was Tumblr’s redirection behavior.</p>
<p>I used the <strong>Network</strong> tab in DevTools to trace why placeholder images were being returned and where they came from. Eventually, I found that some image requests returned a <strong>301</strong> status code, with a <strong>Location</strong> header pointing to a placeholder image.</p>
<p>To handle this, I added logic to detect 301 responses and fetch the image again. But strangely, even after refetching, the placeholder problem was still there. This make me wonder that whether I should dig deeper into Tumblr’s API mechanism — though that might have been too complex.</p>
<p>I finally decided that the issue was likely on <strong>The Cat API’s</strong> side, and it wasn’t worth pursuing further.</p>
<hr>
<h3 id="fixes"><strong>Fixes</strong></h3>
<p>For the Tumblr image issue, I implemented a simple workaround: <strong>temporarily filter out Tumblr-sourced images.</strong> If an image source is detected to be from Tumblr, the app simply re-fetches until it gets the required number of images.</p>
<p>Now, all images come from CDN sources, which should theoretically be more stable.</p>
<p>Another challenge was <strong>communication</strong>.</p>
<p>After submitting the issue, the repository owner didn’t respond, but they did close another issue during that time. I feel a little bit confused about that but also not sure if I should follow up with them.</p>
<p>Since I already submitted a PR, I decided to wait for a while and may reach out to them proactively if there’s still no reply.</p>
<hr>
<h3 id="considerations"><strong>Considerations</strong></h3>
<p>While handling the Tumblr image issue in the PR, I felt a lot of pain — every attempt to “check and re-fetch” still resulted in placeholder images. Then I realized something: if the goal is simply to <strong>solve</strong> the problem, a simpler solution works just as well — the source is unreliable, then I can just don’t use it.</p>
<p>Perhaps in practice, solving a problem doesn’t always require overthinking — sometimes the simplest solution is still effective.</p>
]]></content:encoded></item><item><title>OSD600 Lab 5</title><link>https://www.parkerchenca.com/osd600/lab-5/</link><pubDate>Thu, 10 Sep 2026 11:35:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/lab-5/</guid><description>Rebase and amend</description><content:encoded><![CDATA[<blockquote>
<p>🔔 <strong>Prelude:</strong>
Even more powerful commands for version control</p>
</blockquote>
<h2 id="main-content">Main Content</h2>
<p>Write a blog post about the process of refactoring your code.</p>
<ul>
<li>What did you focus on in your improvements? How did you fix your code so it would be better in each step?</li>
<li>How did your interactive rebase go? Did you find any bugs in your code while you did this? Did you break your program while changing things?</li>
<li>How did it go using Git to change your project&rsquo;s history?</li>
</ul>
<h3 id="what-did-you-focus-on-in-your-improvements">What did you focus on in your improvements?</h3>
<p>I mainly focused on looking for big code blocks to implement my improvements because it has a higher chance of discovering a function that can be exacted. At the same time, I was also looking for a chance to rename some vague variables and add comments to logic.</p>
<p>I used a code quality checking plugin called <strong>SonarQube</strong> (<a href="https://www.sonarsource.com/products/sonarlint/">https://www.sonarsource.com/products/sonarlint/</a>) to find potential issues in my code. Here is the showcase:</p>
<p><img alt="Screenshot 2025-10-06 at 17.50.13.png" loading="lazy" src="/osd600/lab-5/Screenshot_2025-10-06_at_17.50.13.png"></p>
<p>As you can see, SonarQube lists its concerns for my codebase. It’s convenient, but if you are also using Go for programming, you must have noticed that: <code>if err != nil</code> is basically inevitable, counting it into the complexity value is meaningless. It&rsquo;s still a good tool for pre-checking our code though.</p>
<h3 id="how-did-your-interactive-rebase-go">How did your interactive rebase go?</h3>
<p>Interactive rebase is surprisingly good, plus I found that <strong>GitLens</strong> (<a href="https://www.gitkraken.com/gitlens">https://www.gitkraken.com/gitlens</a>) provides a pretty UI with the IDE like VS Code.</p>
<p><img alt="Screenshot 2025-10-06 at 18.00.41.png" loading="lazy" src="/osd600/lab-5/Screenshot_2025-10-06_at_18.00.41.png"></p>
<p>(Reference: <a href="https://www.gitkraken.com/learn/git/problems/git-interactive-rebase">https://www.gitkraken.com/learn/git/problems/git-interactive-rebase</a>)</p>
<p>I don’t need to be too concerned about the looking of the submit tree now because I learned how to rearrange it by &ldquo;rebase.&rdquo; Separately creating small commits also makes the workflow clearer when we are developing. But since it will break the branch - specifically, drop some commit histories - we should always use it on our own, personal topic branch (and we’d better know what we are exactly doing).</p>
<p>Since I only made minor changes, I didn&rsquo;t confront big issues in this lab, but I do have a story to tell in the next section.</p>
<h3 id="how-did-it-go-using-git-to-change-your-projects-history">How did it go using Git to change your project&rsquo;s history?</h3>
<p>Here is the concise story of using Git in my lab 5:</p>
<ul>
<li>I created new branch</li>
<li>I made changes</li>
<li>Too smoothly! I finished all 3 targets without making a commit!</li>
<li>Had to pick the file that need to be committed, and saved others for later commits… Used <code>add</code></li>
<li>In the middle of the way, noticed that the names of the local branch and the remote were different! Had to change them… (Then I deleted the remote one first, I don’t know why I did that.)</li>
<li><code>Rebase</code> but failed! Since Git couldn’t find the remote branch…</li>
<li>…</li>
</ul>
<p>Well you see, even though I finally managed to rebase my branch, the most difficult part still wasn&rsquo;t applying some Git commands but driving Git well from the very beginning. However, I got to know at least one thing: Git has most of the methods to help you keep the code history safe and operable (again, if you know what you’re doing there).</p>
<p>I feel like I only touched 30%~40% of Git&rsquo;s usages. It’s definitely worth investing time to learn it well.</p>
]]></content:encoded></item><item><title>OSD600 Release 0.2 Week 1 (Updated)</title><link>https://www.parkerchenca.com/osd600/release-0-2-week-1-updated/</link><pubDate>Thu, 10 Sep 2026 11:34:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/release-0-2-week-1-updated/</guid><description>First step in Hacktoberfest</description><content:encoded><![CDATA[<blockquote>
<p>🔔 <strong>Prelude:</strong>
<em>Everything&rsquo;s hard in the beginning</em></p>
</blockquote>
<h2 id="in-release-02-week-1">In release 0.2 week 1…</h2>
<h3 id="what-i-did"><strong>What I did</strong></h3>
<p>This week I mainly focused on searching for suitable open source projects to contribute to. I haven’t started submitting any pull requests yet, but I did managed to create an issue (see link below) and am waiting for it to be assigned.</p>
<p><a href="https://github.com/TemaDeveloper/library_proj/issues/17">https://github.com/TemaDeveloper/library_proj/issues/17</a></p>
<h3 id="working-on-issuepr"><strong>Working on (issue/PR)</strong></h3>
<p>I opened an issue about setting up <strong>issue templates</strong> for a repository. Although I think it was a simple one, it still was my first time dealing with this topic, so I referred to the official GitHub documentation. I surprisingly learned that using a <strong><code>.yml</code></strong> file for the issue template allows better formatting and a cleaner layout for users filling in issue forms than the <code>.md</code> template.</p>
<p>The process has been updated; please have a check on the &ldquo;Updated&rdquo; section in this post</p>
<h3 id="need-to-know"><strong>Need to know</strong></h3>
<p>Still waiting for feedback or assignment on my issue. Once that’s done, I plan to contribute my first PR to this project or one of the other candidates I’ve found.</p>
<h3 id="difficulties"><strong>Difficulties</strong></h3>
<p>The main challenge this week was <strong>finding the right project</strong> to start with. Some repositories are attractive and popular but have too many contributors already. It’s so hard to find available “good first issues.” in those repos.</p>
<h3 id="fixes"><strong>Fixes</strong></h3>
<p>After rewatching a previously recorded lecture, I realized I had overlooked GitHub’s <strong>advanced search</strong> feature. By also researching on the GitHub official documentation, I improved my efficiency in locating suitable issues by using <code>no:assignee</code>, etc. I’ve already starred several projects for upcoming work.</p>
<h3 id="considerations"><strong>Considerations</strong></h3>
<p>Some classmates shared potential projects on our team channel, and I found that exchanging ideas and experiences is really helpful. I believe active communication and collaboration will be key to achieving our release goals.</p>
<h3 id="updated">Updated</h3>
<p>I have added templates to the repo and The PR has been merged.</p>
<p><a href="https://github.com/TemaDeveloper/library_proj/pull/18">https://github.com/TemaDeveloper/library_proj/pull/18</a></p>
<p>Here are some things I want to share:</p>
<ol>
<li>Even though this PR is simple, it is somehow a little bit tricky. Because the templates will not be applied until the PR has been merged into the main repo (Github needs to read them), I have to create a new test repository in my account to test the templates.</li>
<li>And, this testing procedure did cause a bug: I mistakenly placed the templates in <code>.github/workflow/ISSUE_TEMPLATES</code> instead of the correct path <code>.github/ISSUE_TEMPLATES</code> in the original repo. However, in my separated test repo, the path is correct so that it didn&rsquo;t reflect any issue.</li>
<li>So after noticing the PR has been merged and the bug appeared, I still need to communicate with the owner to let him know I will create a new PR to fix the minor bug (<a href="https://github.com/TemaDeveloper/library_proj/pull/19">https://github.com/TemaDeveloper/library_proj/pull/19</a>). This cost extra time.</li>
</ol>
<p>This little issue got me thinking about how to handle PRs whose results only show after merging&hellip; I’d like to explore this topic further.</p>
]]></content:encoded></item><item><title>OSD600 Lab 4</title><link>https://www.parkerchenca.com/osd600/lab-4/</link><pubDate>Thu, 10 Sep 2026 11:33:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/lab-4/</guid><description>Git remotes and merges to collaborate</description><content:encoded><![CDATA[<blockquote>
<p>🔔 <strong>Prelude:</strong>
PR, code review and communication.</p>
</blockquote>
<h2 id="refelction">Refelction</h2>
<hr>
<h3 id="first-how-did-the-code-itself-go"><strong>First, how did the code itself go?</strong></h3>
<p>The Python project I worked with is clean and straightforward. It made me reconsider my tech stack: I may use Python as my primary prototyping language, and only turn to Go, Rust, or C++ when specific requirements demand it.</p>
<h3 id="did-you-run-into-any-problems"><strong>Did you run into any problems?</strong></h3>
<p>Implementing the logic was simple, but writing tests was more difficult. Too many cases could be included!</p>
<h3 id="how-did-you-tackle-the-work"><strong>How did you tackle the work?</strong></h3>
<p>I looked up examples online and used some tools to inspire different test cases.</p>
<hr>
<h3 id="second-how-did-it-go-using-git"><strong>Second, how did it go using git?</strong></h3>
<p>Since I’ve been using Git continuously in recent months, I didn’t face major technical issues. The only recurring problem was occasionally forgetting to create a new branch, etc.</p>
<h3 id="did-you-find-any-of-it-difficult-how-did-you-get-around-this"><strong>Did you find any of it difficult? How did you get around this?</strong></h3>
<p>There was a tricky issue: I directly worked on my forked main branch and mentioned the original issue in one of the commit, so, the issue pointed back to my commit on the main branch. It’s a little bit confused because for a new feature I should have a clearly named branch links to the issue.</p>
<p>Luckily, I could still use the correct branch for making the new PR, but the comments are still left in the issue… And I feel like it’s troublesome to change the recorded behavior on Github.</p>
<p>I haven’t found a perfect solution for human-caused fault yet, so I simply try to be more careful. Fortunately, Git and GitHub are well-designed, so there’s usually a way to recover mistakes.</p>
<hr>
<h3 id="what-would-you-do-differently-next-time-what-did-you-learn-from-the-experience"><strong>What would you do differently next time? What did you learn from the experience?</strong></h3>
<p>In this week’s lab, a couple of tests passed locally but failed on the maintainer’s machine, so weird. I later realized that the issue was due to a mismatch between my local and pushed code.</p>
<p>Through communication we resolved it, but next time I will double-check my final code version. I also learned that consistent CI/CD pipelines and active communication are essential for online code contributing.</p>
]]></content:encoded></item><item><title>OSD600 Lab 3</title><link>https://www.parkerchenca.com/osd600/lab-3/</link><pubDate>Thu, 10 Sep 2026 11:32:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/lab-3/</guid><description>Manage multiple simultaneous changes and use git merges</description><content:encoded><![CDATA[<blockquote>
<p>🔔 <strong>Prelude:</strong>
Made a lot of mistakes, yet the actual merging process is very smoothly.</p>
</blockquote>
<h2 id="main-content">Main Content</h2>
<p>Project repo: <a href="https://github.com/BHChen24/repo2context">https://github.com/BHChen24/repo2context</a></p>
<p>Your issues:</p>
<p><a href="https://github.com/BHChen24/repo2context/issues/19">https://github.com/BHChen24/repo2context/issues/19</a></p>
<p><a href="https://github.com/BHChen24/repo2context/issues/20">https://github.com/BHChen24/repo2context/issues/20</a></p>
<p>Your merge commits:</p>
<p><a href="https://github.com/BHChen24/repo2context/commit/c9ae3957f1fa1749659181ba6c0773c1a7c9d0b8">https://github.com/BHChen24/repo2context/commit/c9ae3957f1fa1749659181ba6c0773c1a7c9d0b8</a></p>
<p><a href="https://github.com/BHChen24/repo2context/commit/4817fc097517a3c6a7daa8bbd7bcd1d02f25e2a3">https://github.com/BHChen24/repo2context/commit/4817fc097517a3c6a7daa8bbd7bcd1d02f25e2a3</a></p>
<p><strong>Reflections</strong>:</p>
<p>Discuss what you did, the changes you made for your features, and the process of doing your merges. What problems did you have? What did you learn? What would you do differently next time?</p>
<h3 id="merging-branches"><strong>Merging branches</strong></h3>
<p>I basically just followed the lab instructions and completed the main assignment, but I need to develop two extra features in separate branches because:</p>
<p>My initial approach was straightforward: create a branch, finish the feature, then make a PR. Since I followed this workflow step-by-step for each feature, I did not encounter any merge conflicts at all.</p>
<p>Later I realized I misunderstood the instructions. I actually need to trigger the merge conflicts by developing features in parallel, and then merging branches back in a line. I managed to develop two more features and did the fast-forward merge and a three-way merge.</p>
<p>Besides, I also filed some issues to reduce the number of function parameters or refine the output format.</p>
<p>Paid more effort due to begin the work so fast.</p>
<h3 id="what-i-learned"><strong>What I learned</strong></h3>
<p>The biggest lesson in this lab was not about the merges themselves but the importance of carefully reading instructions before diving in.</p>
<p>On the positive side of the first two issues (totally no conflicts but not align with the requirement), I confirmed that my personal development process could be good-for-work: open an issue, create a branch, link the issue to the branch commit (using GitHub keywords like <code>fixes #num</code>), then develop step by step.</p>
<p>For solo development this procedure keeps conflicts to a minimum. I  will still follow these steps next time.</p>
<p>However, in a collaborative environment, I think the conflicts are inevitable. That makes it essential to understand Git commands deeply and to take advantage of the rich ecosystem of version control tools.</p>
<p>(I also think that so many tools exist is proof that developers have been tortured by merge conflicts for years…)</p>
<h3 id="coderabbitai-code-review"><strong>CodeRabbitAI code review</strong></h3>
<p>Surprisingly, I discovered an auto-review tool while I was looking through examples of “how to file a good issue” on open-source projects.</p>
<p>What impressed me most was that tools like <strong>CodeRabbitAI</strong> can automatically generate a pull request summary, provide next-step suggestions, and even create sequence diagrams based on the code changes in the PR：</p>
<p><img alt="image.png" loading="lazy" src="/osd600/lab-3/image.png"></p>
<p>The whole report can be auto-generated and triggered by the work-in-process PR!</p>
<p>Here is an example I explored: <a href="https://github.com/BHChen24/repo2context/pull/25">https://github.com/BHChen24/repo2context/pull/25</a></p>
]]></content:encoded></item><item><title>OSD600 Release 0.1</title><link>https://www.parkerchenca.com/osd600/release-0-1/</link><pubDate>Thu, 10 Sep 2026 11:31:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/release-0-1/</guid><description>Building a Repository Context Packager command-line tool</description><content:encoded><![CDATA[<blockquote>
<p>🔔 <strong>Prelude:</strong>
This is my first step into building an open‑source style CLI tool in Go.</p>
</blockquote>
<h2 id="release-01">Release 0.1</h2>
<h3 id="project-description">Project Description</h3>
<p>For this assignment, I built a “Repository Context Packager” tool named <strong>repo2context</strong>, which can scan a local git repository and generate a single, well-structured text file with repository information optimized for sending to LLMs such as ChatGPT and Gemini.</p>
<h3 id="technology-choice">Technology Choice</h3>
<ul>
<li><strong>Language</strong>: Go (Golang)</li>
<li><strong>Output format</strong>: Markdown</li>
<li><strong>Why Go?</strong>: Although many people are talking about Go’s advantages all the time, my main reason to do this was simply that I wanted to challenge myself.</li>
</ul>
<h3 id="implemented-features">Implemented Features</h3>
<h4 id="required-features">Required Features</h4>
<ul>
<li>Basic CLI interface with <code>--help</code> and <code>--version</code></li>
<li>Repository/file analysis</li>
<li>Path tree structure</li>
<li>Git commit/branch metadata</li>
<li>Summary statistics (file count, lines of code)</li>
<li>Standard streams (stdout for output, stderr for errors)</li>
<li>Error handling</li>
</ul>
<h4 id="optional-features-implemented">Optional Features Implemented</h4>
<ol>
<li><strong>Gitignore Integration</strong>
<ul>
<li>The tool automatically excludes files and directories listed in <code>.gitignore</code>.</li>
<li>Provide a <code>--no-gitignore</code> to disable <code>.gitignore</code> filtering</li>
</ul>
</li>
<li><strong>Output to File</strong> (<code>-o</code> / <code>--output</code>)
<ul>
<li>
<p>Users can save the formatted repository context into a file (markdown text).</p>
</li>
<li>
<p>Example:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">toolname . --output context.md
</span></span><span class="line"><span class="cl"><span class="c1"># usually the toolname is &#34;r2c&#34; but can be built as other names</span>
</span></span></code></pre></div></li>
</ul>
</li>
</ol>
<h3 id="development-experience">Development Experience</h3>
<h4 id="process">Process</h4>
<ol>
<li>Set up GitHub repository</li>
<li>Implement CLI argument parsing in Go (with <code>cobra</code> package)</li>
<li>Add recursive directory/file reading; Implement project structure tree displaying; tests…</li>
<li>Extract Git info (<code>os/exec</code> to run git commands and parse metadata)</li>
<li>Get data together and format output</li>
<li>Implement the two optional features: .gitignore handling + output to file</li>
<li>Also invite classmates to file issues</li>
</ol>
<h4 id="challenges">Challenges</h4>
<ul>
<li><strong>Git env:</strong> Needed to handle different situations like Git may not be available or the repo may not be initialized. (To be honest, I found this type of check should be applied to basically everywhere, and that’s a bit painful handling errors in Go..)</li>
<li><strong>Starting from scratch:</strong> This was my first time writing a full CLI tool in Go, so I had to set up everything from zero — project structure, flags, Git integration, error handling, etc. (Have to do a lot of research)</li>
</ul>
<h4 id="learnings">Learnings</h4>
<ul>
<li>Learned how to build a demo project from 0 to 0.1 in Go.</li>
<li>Gained experience reading Git metadata and filtering files dynamically.</li>
<li>Deepened understanding of how to do file system traversal, file I/O and error handling in Go.</li>
</ul>
<h3 id="summary">Summary</h3>
<ul>
<li>Implemented <strong>all required features</strong></li>
<li>Completed <strong>2 optional features</strong></li>
<li>A not bad foundation for future extensions</li>
<li>Good start for practicing open-source contribution process</li>
</ul>
<h3 id="links">Links</h3>
<ul>
<li><strong>GitHub Repository</strong>: <a href="https://github.com/BHChen24/repo2context/">https://github.com/BHChen24/repo2context/</a></li>
</ul>
]]></content:encoded></item><item><title>OSD600 Lab 2</title><link>https://www.parkerchenca.com/osd600/lab-2/</link><pubDate>Thu, 10 Sep 2026 11:30:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/lab-2/</guid><description>Contributing and submitting Pull Requests</description><content:encoded><![CDATA[<blockquote>
<p>🔔 <strong>Prelude:</strong>
About the process of contributing a code change to another project</p>
</blockquote>
<h2 id="-main-content">🖋️ Main Content</h2>
<p>The project repo: <a href="https://github.com/RiverDave/rust-cli-tool">https://github.com/RiverDave/rust-cli-tool</a></p>
<p>Your issue: <a href="https://github.com/RiverDave/rust-cli-tool/issues/27">https://github.com/RiverDave/rust-cli-tool/issues/27</a></p>
<p>Your pull request: <a href="https://github.com/RiverDave/rust-cli-tool/pull/28">https://github.com/RiverDave/rust-cli-tool/pull/28</a></p>
<h3 id="1-what-i-did">1. What I did</h3>
<p>Briefly speaking, I did:</p>
<ul>
<li>First take a look at the whole project to see the current situation</li>
<li>Check if the “recent file” feature has been implemented</li>
<li>Analyze code base to see how to add custom commands</li>
<li>Search online for obtaining file metadata in certain language</li>
<li>Raise issue, fork repo, switch branch, develop logics</li>
<li>Test my code</li>
<li>Update documentation</li>
<li>Create PR</li>
<li>Communicate with repo owner</li>
<li>Close issue</li>
<li>Write blog</li>
</ul>
<h4 id="11-the-changes-i-made-for-my-feature">1.1 The changes I made for my feature</h4>
<ul>
<li>
<p>I found the rust project used <code>clap</code> — a famous and solid <strong>Command Line Argument Parser for Rust</strong>.</p>
</li>
<li>
<p>Thanks for that, I have a very clear pattern to follow then create a new command for the application:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="cp">#[arg(long = </span><span class="s">&#34;recent&#34;</span><span class="cp">)]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">pub</span><span class="w"> </span><span class="n">recent</span>: <span class="kt">bool</span><span class="p">,</span><span class="w">
</span></span></span></code></pre></div><p>As simple as it looks like!</p>
</li>
<li>
<p>Then, I extended the <code>Config</code> struct to include a <code>recent_only</code> field, which controls whether to filter for recent files.</p>
</li>
<li>
<p>Next, I create useful logics in the <code>file.rs</code>. The main filtering logic checks if files were modified within the last 7 days — if a file is older than 7 days, it gets skipped.</p>
</li>
</ul>
<h4 id="12-the-process-of-getting-your-work-accepted">1.2 The process of getting your work accepted</h4>
<ul>
<li>First, review the codebase and existing issues to make sure I understand the basics of the project and avoid raising a duplicate issue.</li>
<li>Then, communicate with the repo owner — by Teams, by issue, by email, or whatever I like (but also must check the comfortable way for the owner first), to say, “hi, can I add a feature to your project, because…” The core of this is to “let them know.”</li>
<li>During the coding process, we’ll mainly communicate by the issue. I code, they give feedback, I change my code until we are all good for the issue.</li>
</ul>
<h3 id="2-technical-aspects">2. Technical aspects</h3>
<h4 id="21-how-did-file-timestamps-work-in-the-language-you-were-working-with">2.1 How did file timestamps work in the language you were working with?</h4>
<blockquote>
<p><a href="https://doc.rust-lang.org/std/fs/struct.Metadata.html#method.modified">https://doc.rust-lang.org/std/fs/struct.Metadata.html#method.modified</a></p>
</blockquote>
<p>According to this file metadata documentation, we have a lot of tools for obtaining info of a file, including the timestamps for the last modified time. Noticed that this method may “<strong>not be available on all platforms</strong>” so I added some error-handling code to it.</p>
<p>Next, we should also obtain the current system time (<a href="https://doc.rust-lang.org/std/time/struct.SystemTime.html#method.now">https://doc.rust-lang.org/std/time/struct.SystemTime.html#method.now</a>), minus 7 days, then compare these two variables. If the file wasn’t touched in 7 days, it is not a “recent” file.</p>
<h4 id="22-what-challenges-did-you-face-integrating-with-the-existing-codebase">2.2 What challenges did you face integrating with the existing codebase?</h4>
<p>I think there is one main challenge I want to mention: It takes time to understand the project.</p>
<p>I had to trace through the code to see how <code>clap</code> handles commands. Well… Actually I noticed soon that if I follow the coding pattern in the repo then I should be OK to write the new code. Fully understanding the <code>clap</code> is a hard task itself.</p>
<p>And I also need to figure out how the <code>Config</code> struct flows through the application (The really important task) and where the file processing logic lives in <code>file.rs</code>. Reading other people&rsquo;s code is always slower than writing your own, plus you have to spend a lot of time researching the language that you are not so familiar with.</p>
<h4 id="23-in-addition">2.3 In addition…</h4>
<p>In the process of collaboration, I do have a question I really want to ask: Should I use AI tools to quickly understand other people’s open-source projects?</p>
<p>Theoretically, feeding an open-source project into an AI shouldn’t pose security or legal issues, because it’s “open-source”; but, the AI technology is still so new (and the legal issues are always tricky) that no one really knows what the hidden costs might be. Even if I let the AI summarize someone else’s project, who can tell if its summary is reliable?</p>
<p>On the other hand, if I try to research and interpret things completely on my own, there’s still a high chance that I’ll make human mistakes. So, whether or not to use AI tools ends up becoming more of a “trade-off” decision to me…</p>
<h4 id="24-how-did-you-handle-edge-cases">2.4 How did you handle edge cases?</h4>
<p>There was an interesting thing I want to mention in testing. So when I implemented my feature and first tested it, I found that the app would output all the files in the target folder, which made me confused. But later I noticed that because:</p>
<ol>
<li>The target folder for testing is one of this project&rsquo;s folders.</li>
<li>When I use <code>git clone</code> to clone the repo to a local place, it also means that I “modified” all the local files in the folder.</li>
</ol>
<p>So, the “recent” feature will not filter anything out because all the files are “recently” edited. I think this case can be considered an edge case.</p>
<p>My solution is to manually create a <code>recent_test_files</code> folder that contains some old files and some new files, then test the feature on them. This leads to a correct test result and also prevents the application from reading too many unnecessary files at once.</p>
<h3 id="3-if-your-repo-received-a-pull-request">3. If your repo received a pull request…</h3>
<p>Haven’t got a PR yet. 😶‍🌫️</p>
]]></content:encoded></item><item><title>OSD600 Lab 1</title><link>https://www.parkerchenca.com/osd600/lab-1/</link><pubDate>Thu, 10 Sep 2026 11:29:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/lab-1/</guid><description>Blog about the process and outcomes for Lab 1</description><content:encoded><![CDATA[<blockquote>
<p>🔔 <strong>Prelude:
Doing cool things with classmates</strong></p>
</blockquote>
<ul>
<li>How did you go about doing your code reviews? Do you prefer an async or sync approach? Why?</li>
</ul>
<p>I prefer the async approach to doing the code reviews; it gives me a flexible schedule to handle my work and life. And I feel relaxed when I need to read something alone.</p>
<ul>
<li>What was it like testing and reviewing someone else&rsquo;s code? Did you run into any problems? Did anything surprise you?</li>
</ul>
<p>Just like learning new concepts! I may know about the programming language, but the ideas from others are always new and valuable to me. I sometimes could not understand the meaning of others’ code, but thankfully, except for directly asking them, we can also leverage AI in these days.</p>
<ul>
<li>What was it like having someone test and review your code? Were you surprised by anything?</li>
</ul>
<p>It&rsquo;s just like being judged … but I considered it a little bit; in an open-source community, being reviewed by someone is for making the product better, and then I got relief with this thought. The collaborators always surprise me by discovering new bugs and applying new tests in a way that I never thought of before!</p>
<ul>
<li>What kind of issues came up in your testing and review? Discuss a few of them in detail.</li>
</ul>
<p>Well, for example, I got stuck in the middle when I tried to write tests for a C++ project (although I found that I don’t need to actually write them for this lab in the end). It doesn’t mean I don’t know about C++, but I need time to remind myself of how to write tests in C++ because it has been a while since I used C++ to build something. I have to search online for how to write the tests properly and look for examples. When I face some unfamiliar frameworks, testing and review take time.</p>
<ul>
<li>Provide links to issues you filed, and summarize what you found</li>
</ul>
<p><a href="https://github.com/ElshadHu/RepositoryContextManager/issues/3">https://github.com/ElshadHu/RepositoryContextManager/issues/3</a></p>
<p>This is a tricky one because I am not so familiar with CMakefile. When I tried to build the project the system kept showing errors, I had no idea at that time. But I finally found that it was triggered by the hardcoded PATH setting when I truly dove into the file. I want to tell myself, “If you want to fix a bug, don’t just stare at the error prompts, you have to dive into the file!”</p>
<p>All issues I filed should be under the same issues page; here is another repo I filed issues for: <a href="https://github.com/RiverDave/rust-cli-tool/issues">https://github.com/RiverDave/rust-cli-tool/issues</a></p>
<ul>
<li>Provide links to issues that were filed on your repo, and what they were about</li>
</ul>
<p><a href="https://github.com/BHChen24/repo2context/issues/1">https://github.com/BHChen24/repo2context/issues/1</a></p>
<p>And all other issues are under the “issues” page.</p>
<p>I noticed I included a configuration management tool in my project but since I haven’t used it, I didn’t write any comment or mention it in my “README.md”, and this did cause some confusion. Thanks a lot David!</p>
<ul>
<li>Were you able to fix all your issues? What was that like?</li>
</ul>
<p><a href="https://github.com/BHChen24/repo2context/issues/4">https://github.com/BHChen24/repo2context/issues/4</a></p>
<p>For documentation issues, I can, but for some feature requirements and tricky bugs I cannot yet. Actually, I fixed the markdown file syntax error immediately: the embedding link <code>[https://go.dev/](GO)</code> should be like <code>[Go](https://go.dev/)</code> .(And this is the first time I asked copilot to review my code for the PR, wow!)</p>
<ul>
<li>What did you learn through the process of doing the testing and reviewing?</li>
</ul>
<p>It’s definitely a necessary process for improving our products. The key point here is barely anyone can accomplish a high-quality project by working totally alone. In ancient China there is an idiom: “When everybody adds fuel, the flames rise high,” which means, “Great things can be achieved by mass effort.” This is a wonderful description of the meaning of testing and reviewing in the open-source community.</p>
]]></content:encoded></item><item><title>First post for OSD600</title><link>https://www.parkerchenca.com/osd600/first-post-for-osd600/</link><pubDate>Thu, 10 Sep 2026 11:28:00 +0000</pubDate><guid>https://www.parkerchenca.com/osd600/first-post-for-osd600/</guid><description>My introduction post for the OSD600 course in Seneca</description><content:encoded><![CDATA[<p>Hi, my name is Baihua Chen, but you can also call me Parker. You can find more information about me on my GitHub page at <a href="https://github.com/BHChen24">https://github.com/BHChen24</a> and on my personal website at <a href="https://www.parkerchenca.com/en/about">https://www.parkerchenca.com/en/about</a> .</p>
<p>Yes, I am taking the OSD600 course. To be honest, I have been very eager to take this course because many of my friends told me how valuable it is, and I have already felt the power of the open‑source community — I use Linux daily, I hear stories about open‑source projects and people all the time. In addition, I had never really thought too much about how open‑source projects can influence a company’s business before our first OSD600 lecture; that lecture really caught my interest.</p>
<p>I want to be someone who can confidently say “I am able to develop software for real‑world use” after this term, with open‑source contributing experience. I am especially interested in contributing to projects in the finance field, such as high‑precision computation, trading systems, backtesting systems, and so on.</p>
<p>I researched a project on the daily trend page called “everyone-can-use-english.” [<a href="https://github.com/ZuodaoTech/everyone-can-use-english/tree/main">https://github.com/ZuodaoTech/everyone-can-use-english/tree/main</a>] Since English is my second language, I often feel I am not good enough at using it. This project provides a way to improve my spoken English by correcting tone and pronunciation. For example, it has a feature called “Pronunciation Assessment,” which allows me to record my speaking and get feedback on whether it is correct, or how it can be improved.</p>
<p>I also noticed that its documentation is not very complete yet, and currently they only provide some demos in Chinese. Maybe these could be potential entry points for making contributions.</p>
]]></content:encoded></item></channel></rss>