<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Rudy Chung</title>
    <description>The latest articles on Forem by Rudy Chung (@rudychung).</description>
    <link>https://forem.com/rudychung</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F921386%2Ff42230e2-210e-40a0-b3b4-dfd2fa0b4817.png</url>
      <title>Forem: Rudy Chung</title>
      <link>https://forem.com/rudychung</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/rudychung"/>
    <language>en</language>
    <item>
      <title>Release 0.4 Final</title>
      <dc:creator>Rudy Chung</dc:creator>
      <pubDate>Sun, 11 Dec 2022 22:37:12 +0000</pubDate>
      <link>https://forem.com/rudychung/release-04-final-321</link>
      <guid>https://forem.com/rudychung/release-04-final-321</guid>
      <description>&lt;h2&gt;
  
  
  What I did
&lt;/h2&gt;

&lt;p&gt;After creating the project creation UI, I used my experience in contributing to the UI to improve the contributing document. I updated any references to tools such as Node.js and Jest with links to the webpages for these tools. &lt;/p&gt;

&lt;h2&gt;
  
  
  Goals
&lt;/h2&gt;

&lt;p&gt;I think I mostly achieved my goals. The form has its data fields updated as they change. Although this data is not sent anywhere currently, with the way it is set up it should not take too much more effort for the form UI that I have created to perform its function. I would have liked to have aimed higher, but with the project still in a preliminary phase it is difficult to integrate the difference components together without them all being present. &lt;/p&gt;

&lt;h2&gt;
  
  
  How I did it
&lt;/h2&gt;

&lt;p&gt;It was difficult to get the UI to look close to what I wanted, since I had to integrate what already exists and its CSS styling with my own additions. However, I managed to get it done by using the existing CSS stylesheet with my own component. &lt;/p&gt;

&lt;p&gt;Since I had free rein over what I could use, within the limits of what already existed for the project (using &lt;a href="https://reactjs.org/" rel="noopener noreferrer"&gt;React&lt;/a&gt;), I decided to use &lt;a href="https://mui.com/" rel="noopener noreferrer"&gt;Material UI&lt;/a&gt; components to create the UI.&lt;/p&gt;

&lt;p&gt;For the text input fields I used the &lt;a href="https://mui.com/material-ui/react-text-field/" rel="noopener noreferrer"&gt;TextField&lt;/a&gt; components, which was fairly straightforward. For the date field, I used MUI X &lt;a href="https://mui.com/x/react-date-pickers/date-picker/" rel="noopener noreferrer"&gt;DatePicker&lt;/a&gt; component. Validating dates manually is difficult to do, so the DatePicker component was perfect for this use. It also allowed for a more intuitive way to select a date than a simple text input. All of this was contained within Items in a a vertical &lt;a href="https://mui.com/material-ui/react-stack/" rel="noopener noreferrer"&gt;Stack&lt;/a&gt; component container in order to arrange the inputs. In the App level, I placed the existing upload interface as well as my project creation form UI within a reverse horizontal Stack component. &lt;/p&gt;

&lt;h2&gt;
  
  
  What did I learn
&lt;/h2&gt;

&lt;p&gt;I learned that open-source project creation can be an slow process. Waiting for code reviews and approval for changes can take a long time. With larger communities for a project, it would probably be a faster process since the community would be more organized, with more contributors to conduct code reviews.&lt;/p&gt;

&lt;p&gt;I also learned a bit more about the Material UI library. I had previously learned about the library through previous projects but have never created a UI of my own using it. I had to chance to build my own UI from scratch using the library and found it very simple to use and find documentation for.&lt;/p&gt;

&lt;h2&gt;
  
  
  How did I leverage the community?
&lt;/h2&gt;

&lt;p&gt;After I created the project creation UI, I asked in the community Slack channel if there were any further issues I could work on to add to my contributions. One contributor filed a few issues which I could work on. This is how I managed to start working on the issue to update the contribution document.&lt;/p&gt;

</description>
      <category>jvm</category>
      <category>testing</category>
    </item>
    <item>
      <title>Release 0.4 Progress</title>
      <dc:creator>Rudy Chung</dc:creator>
      <pubDate>Tue, 06 Dec 2022 19:35:52 +0000</pubDate>
      <link>https://forem.com/rudychung/release-04-progress-5h6m</link>
      <guid>https://forem.com/rudychung/release-04-progress-5h6m</guid>
      <description>&lt;h2&gt;
  
  
  What I have done so far
&lt;/h2&gt;

&lt;p&gt;I have had &lt;a href="https://github.com/humphd/my-photohub/pull/28" rel="noopener noreferrer"&gt;my pull request&lt;/a&gt; merged for creating the UI for creating a new project. What I have created is purely visual and has little functionality. With my contribution, I have integrated my UI with what already exists. &lt;/p&gt;

&lt;h2&gt;
  
  
  Obstacles
&lt;/h2&gt;

&lt;p&gt;In addition to the work I have for other courses, the open-source contribution process has been much slower than I expected. I am currently trying to get a better understanding of how the project is meant to work and how each contributor's work moves toward it. With a project which has not yet completed its basic functionality, it is hard to understand what can be done to further it along the development process. &lt;/p&gt;

&lt;h2&gt;
  
  
  What I will do next
&lt;/h2&gt;

&lt;p&gt;I will ask the project's contributors what can be done to move the project forward, and try to have that done before the deadline. To accomplish this, I will create a new issue and a pull request after discussing with the other contributors. &lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Release 0.4 Planning</title>
      <dc:creator>Rudy Chung</dc:creator>
      <pubDate>Tue, 06 Dec 2022 18:33:27 +0000</pubDate>
      <link>https://forem.com/rudychung/release-04-planning-3ip8</link>
      <guid>https://forem.com/rudychung/release-04-planning-3ip8</guid>
      <description>&lt;h2&gt;
  
  
  The Project I chose
&lt;/h2&gt;

&lt;p&gt;For 0.4, I plan to create the UI for &lt;a href="https://github.com/humphd/my-photohub" rel="noopener noreferrer"&gt;my-photohub&lt;/a&gt;. I am choosing this project because I thought the concept of it was interesting. Also, I wanted to work on a React project, I had previously worked on a personal project using React and wanted to put that practice to use on a real project. Another reason I chose this project was because did not want to spend too much time looking for an external project to work on that was viable. &lt;/p&gt;

&lt;h2&gt;
  
  
  My Plan
&lt;/h2&gt;

&lt;p&gt;I first looked at the UI at already existed for the project. Then, I created a mock-up for the changes that I was proposing. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqa4s6f927zaooh4ky8pa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqa4s6f927zaooh4ky8pa.png" alt="UI Mock-up" width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First I will create a UI allowing for submission of project details. There is already an &lt;a href="https://github.com/humphd/my-photohub/issues/6" rel="noopener noreferrer"&gt;existing issue&lt;/a&gt; for this. Then, I will add the functionality for the form. Currently, it is being contributed to by others who are adding the different components for the project. Hopefully, the project will be closer to being function through my contributions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Goals
&lt;/h2&gt;

&lt;p&gt;I plan to create the basic UI for the project, and have the form perform its functionality. I do not want to aim so high that I will not be able to achieve my goal by its deadline, but I also want to contribute something substantial to the project. Hence, I will aim to contribute as much to the project regarding the UI as possible.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>codepen</category>
      <category>javascript</category>
    </item>
    <item>
      <title>OSD600 Lab 10</title>
      <dc:creator>Rudy Chung</dc:creator>
      <pubDate>Sat, 26 Nov 2022 05:50:19 +0000</pubDate>
      <link>https://forem.com/rudychung/osd600-lab-10-4165</link>
      <guid>https://forem.com/rudychung/osd600-lab-10-4165</guid>
      <description>&lt;h2&gt;
  
  
  The first try
&lt;/h2&gt;

&lt;p&gt;I originally planned to use &lt;a href="https://build2.org/" rel="noopener noreferrer"&gt;build2&lt;/a&gt;, but I found it to be much more complex than I expected. There was plenty of documentation to read for build2. &lt;a href="https://build2.org/build2-toolchain/doc/build2-toolchain-intro.xhtml" rel="noopener noreferrer"&gt;The main documentation&lt;/a&gt; was all about the setup process, but there were also documentation pages for &lt;a href="https://build2.org/build2/doc/build2-build-system-manual.xhtml" rel="noopener noreferrer"&gt;building&lt;/a&gt;, &lt;a href="https://build2.org/build2/doc/build2-testscript-manual.xhtml" rel="noopener noreferrer"&gt;testing&lt;/a&gt;, and &lt;a href="https://build2.org/bpkg/doc/build2-package-manager-manual.xhtml" rel="noopener noreferrer"&gt;package management&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The second try
&lt;/h2&gt;

&lt;p&gt;As a result, I decided to use &lt;a href="https://conan.io/" rel="noopener noreferrer"&gt;Conan&lt;/a&gt; instead. I installed Conan through pip, which requires Python. After installing Python, I ran&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install conan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This installed Conan for use in the command-line terminal. After installing Conan, I had to add a &lt;code&gt;conanfile.py&lt;/code&gt; file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;conan new SauSaGe/1.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The file has a bunch of fields with dummy info that need to be filled in. The next step requires a &lt;code&gt;CMakeLists.txt&lt;/code&gt; file as well as &lt;a href="https://cmake.org/" rel="noopener noreferrer"&gt;CMake&lt;/a&gt;, of which how to create is &lt;a href="https://cmake.org/cmake/help/latest/guide/tutorial/A%20Basic%20Starting%20Point.html#exercise-1-building-a-basic-project" rel="noopener noreferrer"&gt;a process of its own&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The next step is building the package.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;conan create . SauSaGe/beta
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will build the package in &lt;code&gt;~/.conan/data&lt;/code&gt; directory, which will contain the source code as well as the executable file. &lt;/p&gt;

&lt;h2&gt;
  
  
  Releasing
&lt;/h2&gt;

&lt;p&gt;I used &lt;a href="https://about.gitlab.com/" rel="noopener noreferrer"&gt;GitLab&lt;/a&gt; for this step, which requires a GitLab account. I set up an account and created a project. After that, go to the project's page to obtain the project id. Now you can add your remote to your list of remotes in Conan run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;conan remote add &amp;lt;remote-name&amp;gt; https://gitlab.com/api/v4/projects/&amp;lt;project-id&amp;gt;/packages/conan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You also need to log in to to upload your package, this requires an access token, which can be found on GitLab in &lt;strong&gt;Edit Profile -&amp;gt; Access Tokens&lt;/strong&gt;. After you create your access token, you can run this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;conan user &amp;lt;gitlab-user&amp;gt; -r gitlab -p &amp;lt;access-token&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With the remote in your list, and your GitLab account logged into, you can finally upload your package.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;conan upload SauSaGe/1.0.0@SauSaGe/beta --all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Released
&lt;/h2&gt;

&lt;p&gt;My package is &lt;a href="https://gitlab.com/rudychung/SauSaGe/-/packages/11004579" rel="noopener noreferrer"&gt;here&lt;/a&gt;, after a few hours of research. &lt;br&gt;
To install using this package registry, create a &lt;code&gt;SauSaGe&lt;/code&gt; directory containing a &lt;code&gt;conanfile.txt&lt;/code&gt; file, the contents of which are&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[requires]
SauSaGe/1.0.0@SauSaGe/beta

[generators]
make
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, install the package&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; conan install SauSaGe --remote=&amp;lt;remote-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I did not have to change much about my code to set it up for the package registry. Although I did need to install a variety of tools to go through the process. The whole process only added 2 files to my project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing
&lt;/h2&gt;

&lt;p&gt;I had a classmate test test the code through the package registry. There were some struggles due to having to install Python, Conan and CMake. There were also some issues with adding the applications to PATH environment variable in order to run all these tools through the command-line terminal. But overall, it went smoothly.&lt;/p&gt;

</description>
      <category>learning</category>
      <category>community</category>
    </item>
    <item>
      <title>Release 0.3 External Pull Request</title>
      <dc:creator>Rudy Chung</dc:creator>
      <pubDate>Wed, 23 Nov 2022 03:52:42 +0000</pubDate>
      <link>https://forem.com/rudychung/release-03-external-pull-request-2ai0</link>
      <guid>https://forem.com/rudychung/release-03-external-pull-request-2ai0</guid>
      <description>&lt;p&gt;For my release 0.3 for OSD600, I have to create a pull request for an external repo. The repo I contributed to was &lt;a href="https://github.com/intel/cve-bin-tool" rel="noopener noreferrer"&gt;cve-bin-tool&lt;/a&gt;. This post was late because I had was busy with other commitments and projects compounded with problems finding workable issues. In the future, I would definitely follow my own advice and search for issues early and often. I didn't follow this advice and found myself in this position.&lt;/p&gt;

&lt;h2&gt;
  
  
  My pull request
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/intel/cve-bin-tool/pull/2392" rel="noopener noreferrer"&gt;My pull request&lt;/a&gt; involved updating syntax for some files in order to modernize the code in the project. I've had minimal exposure to Python, only having worked on &lt;a href="https://github.com/sfrunza13/SiteGenerationTool" rel="noopener noreferrer"&gt;another student's SSG&lt;/a&gt; made in Python, so it was somewhat of a shift to understand the basics of Python syntax. There isn't much more to say at the moment, but I will update this post as I receive feedback from the maintainers and hopefully have my pull request merged.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;Definitely look for issues that are "good enough", and as stated earlier to look for issues early and often. I took the last few days just too search for issues only to come up with nothing. There definitely are much less viable issues now that Hacktoberfest is over, which though I expected but didn't didn't anticipate a drought to this degree. For release 0.4, I will keep these things in mind and try my best to set myself up for success.&lt;/p&gt;

</description>
      <category>testing</category>
    </item>
    <item>
      <title>Release 0.3 Internal Pull Request</title>
      <dc:creator>Rudy Chung</dc:creator>
      <pubDate>Mon, 21 Nov 2022 05:47:47 +0000</pubDate>
      <link>https://forem.com/rudychung/release-03-internal-pull-request-200g</link>
      <guid>https://forem.com/rudychung/release-03-internal-pull-request-200g</guid>
      <description>&lt;p&gt;For my release 0.3 for OSD600, I have to create a pull request for an internal Seneca College open-source project. The repo I contributed to was &lt;a href="https://github.com/humphd/my-photohub"&gt;my-photohub&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  My pull request
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/humphd/my-photohub/issues/12#event-7847417336"&gt;My pull request&lt;/a&gt; involved moving some auto-generated documentation from the top of a file into the contributing document. After submitting my pull request, I was asked to make some changes by a contributor. This involved making some script arguments more generic. After this, more contributors reviewed my pull request before it was merged into the project. &lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;From this pull request, along with actually making code reviews, I learned more about how the code review process worked. Previously, I had only worked on repos that were managed by a single author. However, this is the first time I have created a pull request reviewed by multiple people. This is also the first time I had changes requested for my pull request. I feel like integrating requested changes was quite simple as those who are requesting changes will often provide good guidance on how to make those changes. &lt;/p&gt;

</description>
      <category>beginners</category>
      <category>opensource</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Release 0.3 Code Reviews</title>
      <dc:creator>Rudy Chung</dc:creator>
      <pubDate>Mon, 21 Nov 2022 05:19:03 +0000</pubDate>
      <link>https://forem.com/rudychung/release-03-code-reviews-3872</link>
      <guid>https://forem.com/rudychung/release-03-code-reviews-3872</guid>
      <description>&lt;p&gt;As a part of my release 0.3 for OSD600, I had to create 2 code reviews for internal Seneca College open-source projects. Both of my  code reviews were for &lt;a href="https://github.com/Seneca-CDOT/vscode-seneca-college"&gt;vscode-seneca-college&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  My Reviews
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/Seneca-CDOT/vscode-seneca-college/pull/13#pullrequestreview-1186590432"&gt;The first review&lt;/a&gt; I made was for a pull request for creating a readme and contributing documents. My review comments were concerned mostly more on grammar and formatting. With documentation, some things may be unclear especially instructions for setup. This can cause a lot of confusion, especially when many people will be reading that documentation. That's why it's very important for documentation not only to be accurate but clear to the reader as well as to avoid confusion. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Seneca-CDOT/vscode-seneca-college/pull/14#pullrequestreview-1187332031"&gt;The second review&lt;/a&gt; I did was for a pull request adding a snippet for a Visual Studio Code extension. I was not really familiar with how snippets worked initially, so I had to do some reading on them before doing this review. The code in the pull request looked similar to the documentation example, and testing it seemed to function properly. My issue with the the pull request was with the terminology used in it. The term "course" seemed more appropriate to me than "Class" in that context, and the change I suggested was made. &lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;I learned what is possible for code reviews, they are not always purely technical or even coding related. I can help by proofreading and improving the readability of not just code contributions but documentation contributions as well. I can learn from code reviews as well. By testing code contributions and reading their related documentation, I can learn things I didn't know before. I learned what it is like on the other side of a pull request as well. Having to read other's code and provide suggestions if necessary was a much different experience than actually contributing to another's code. &lt;/p&gt;

</description>
      <category>beginners</category>
      <category>opensource</category>
      <category>javascript</category>
      <category>vscode</category>
    </item>
    <item>
      <title>OSD600 Lab 9</title>
      <dc:creator>Rudy Chung</dc:creator>
      <pubDate>Fri, 18 Nov 2022 17:23:10 +0000</pubDate>
      <link>https://forem.com/rudychung/osd600-lab-9-5adm</link>
      <guid>https://forem.com/rudychung/osd600-lab-9-5adm</guid>
      <description>&lt;h2&gt;
  
  
  Setting up CI using GitHub Actions
&lt;/h2&gt;

&lt;p&gt;This week, I set up CI for &lt;a href="https://github.com/rudychung/SauSaGe"&gt;my SSG project&lt;/a&gt;. This involves creating a GitHub workflow for GitHub Actions to use. I started with one of the &lt;a href="https://github.com/actions/starter-workflows/tree/main/ci"&gt;starter workflows&lt;/a&gt;. Specifically I used the &lt;a href="https://github.com/actions/starter-workflows/blob/main/ci/msbuild.yml"&gt;msbuild&lt;/a&gt; one. To give a brief explanation of what adding this file will do, upon pushing changes or, a pull request it will create an environment that can be used to run my program. This is helpful if any tests, or other checks need to be made to verify that everything is in working order after changes to the project have been made. &lt;/p&gt;

&lt;h2&gt;
  
  
  My YAML file
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/rudychung/SauSaGe/blob/main/.github/workflows/ci.yml"&gt;My YAML file&lt;/a&gt; built the project on Windows and used my &lt;code&gt;.sln&lt;/code&gt; file to build the project. Then, it ran the tests for my project using the built executable file. Other tasks such as using a linter to check the source code could also be performed at this point in order to validate it further. &lt;/p&gt;

&lt;h2&gt;
  
  
  Testing another project
&lt;/h2&gt;

&lt;p&gt;How did your partner's repo and testing setup differ from yours? &lt;br&gt;
I worked with &lt;a href="https://github.com/sfrunza13"&gt;sfrunza13&lt;/a&gt; once again on &lt;a href="https://github.com/sfrunza13/SiteGenerationTool"&gt;his SSG&lt;/a&gt;. Even though he used Python and I used C++ for our projects, the tests were similar since they both accomplish the same task. With the understanding of the task being performed, the difference between languages did not matter significantly. Both the projects and tests were very similar. Although one significant difference was that my repo outsourced the Markdown parsing to a external module. &lt;/p&gt;

&lt;p&gt;It was very simple to create new tests when using the existing tests as an example. Since I am still not 100% familiar with Python, it took me a little getting used to before writing my tests. However, I had worked with a previous iteration of the project before, so I did have prior understanding of how it functioned. But, there were some changes made to it in the time between the last time I worked on it and now that I had to re-read and understand the changes made to the project. &lt;/p&gt;

&lt;h2&gt;
  
  
  My opinion on CI
&lt;/h2&gt;

&lt;p&gt;It's a very convenient way of handling contributions to my project. I can see it being very helpful in larger projects, which may get hundreds of pull requests. They would help greatly in ensuring that changes being merged do not break the project. The powerful thing about CI is that all these checks are done automatically, which greatly eases the burden of the authors and contributors of the project in terms of checking incoming changes.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>opensource</category>
      <category>cpp</category>
      <category>python</category>
    </item>
    <item>
      <title>OSD600 Lab 8</title>
      <dc:creator>Rudy Chung</dc:creator>
      <pubDate>Fri, 11 Nov 2022 16:32:20 +0000</pubDate>
      <link>https://forem.com/rudychung/osd600-lab-8-1a0i</link>
      <guid>https://forem.com/rudychung/osd600-lab-8-1a0i</guid>
      <description>&lt;h2&gt;
  
  
  What I did this week
&lt;/h2&gt;

&lt;p&gt;This week, I added a testing module to &lt;a href="https://github.com/rudychung/SauSaGe"&gt;my SSG&lt;/a&gt;. Since my SSG was created using C++, I used &lt;a href="https://github.com/catchorg/Catch2"&gt;Catch2&lt;/a&gt; as my testing framework. I chose Catch2 as my testing framework since it seemed to be the most popular among C++ developers, and it was all contained within a single header file. &lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up Catch2
&lt;/h2&gt;

&lt;p&gt;The setup for Catch2 was very simple. I had to include the header to run testing, and using my own command-line argument parsing, I ran the tests from the main function. Then, by calling &lt;code&gt;Catch::Session().run()&lt;/code&gt; in the main function, it executed my tests, which I created in a testing file that contained all my test cases. This testing file also included the Catch2 header as well. &lt;br&gt;
Using the macros defined by Catch2 (&lt;code&gt;TEST_CASE&lt;/code&gt;, &lt;code&gt;SECTION&lt;/code&gt;, and &lt;code&gt;REQUIRE&lt;/code&gt;), I was able to specify names for test cases and their sections and define what was expected from each test. Overall, it functioned like Jest, and I'm assuming most other testing frameworks for other languages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing my patience
&lt;/h2&gt;

&lt;p&gt;Since I offloaded my markdown parsing to &lt;a href="https://github.com/progsource/maddy"&gt;maddy&lt;/a&gt;, I did not test for it because it was not my own code. As a result, it was difficult to find parts that I could test. I mostly created my test cases for end to end testing. Since the number of things to test for is always numerous, I ended up finding a few things I could test for. But, I definitely am not satisfied with the number of tests I currently have and will be adding more in the future. &lt;/p&gt;

&lt;h2&gt;
  
  
  Caught in the bug net
&lt;/h2&gt;

&lt;p&gt;In one of my tests, I parsed both a &lt;code&gt;.md&lt;/code&gt; and &lt;code&gt;.txt&lt;/code&gt; file into an &lt;code&gt;.html&lt;/code&gt; file and compared them to what I expected the parsed &lt;code&gt;.html&lt;/code&gt; to look like. While parsing my &lt;code&gt;.md&lt;/code&gt; file, I noticed that it did not product the same &lt;code&gt;.html&lt;/code&gt; file as the one produced by parsing the &lt;code&gt;.txt&lt;/code&gt; file even though both files' contents were identical. This uncovered something about maddy that I was not aware was happening. It would append a space to each paragraph before the paragraph closing tag. I made a small change to one of maddy's headers that seemed to fix the issue. &lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;I learned how testing can be done in C++. Using Catch2, it was very simple to create and run tests. Previously I had only done testing in JavaScript using Jest. In future projects, I will be sure to add testing as it is a good way to maintain all the required functionality and ensure it all functions as intended.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>beginners</category>
      <category>cpp</category>
      <category>testing</category>
    </item>
    <item>
      <title>OSD600 Lab 7</title>
      <dc:creator>Rudy Chung</dc:creator>
      <pubDate>Fri, 04 Nov 2022 00:05:53 +0000</pubDate>
      <link>https://forem.com/rudychung/osd600-lab-7-44cd</link>
      <guid>https://forem.com/rudychung/osd600-lab-7-44cd</guid>
      <description>&lt;h2&gt;
  
  
  What I did this week
&lt;/h2&gt;

&lt;p&gt;This week, I added static analysis tools to my SSG project. The tools I added were the C++ code formatter &lt;a href="https://clang.llvm.org/docs/ClangFormat.html"&gt;clang-format&lt;/a&gt; and C++ code linter &lt;a href="https://clang.llvm.org/extra/clang-tidy/"&gt;clang-tidy&lt;/a&gt;. Both of them can be integrated into Visual Studio 2022 using the &lt;a href="https://marketplace.visualstudio.com/items?itemName=caphyon.ClangPowerTools"&gt;Clang Power Tools&lt;/a&gt; extension, which made it handy to configure and use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Clang Power Tools
&lt;/h2&gt;

&lt;p&gt;In regards to the Clang Power Tools extension, it's usage is rather simple. After installing the extension, right-clicking the toolbar should show all available toolbar extensions. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3FG45i6Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mg4gsrprv1b9np466t1b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3FG45i6Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mg4gsrprv1b9np466t1b.png" alt="toolbars" width="880" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Clang Power Tools toolbar extension appears as so:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ea9DRn4y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mkd47h6e3kgkrg09m3lu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ea9DRn4y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mkd47h6e3kgkrg09m3lu.png" alt="clang toolbar" width="143" height="30"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clang Power Tools also contains extensive configuration options. I played around with them until I got the code formatting I desired and saved those configurations into a &lt;code&gt;.clang-format&lt;/code&gt; file to be used in the command-line. I did the same with clang-tidy, saving them into a &lt;code&gt;.clang-tidy&lt;/code&gt; file. &lt;/p&gt;

&lt;h2&gt;
  
  
  clang-formatting and clang-tidying my code
&lt;/h2&gt;

&lt;p&gt;Using clang-format, I didn't find many problems with my code, since I used the built-in code formatter in VS2022 often. However, I did find that there were some formatting standards that I preferred, so I set clang-format to adjust my code to meet those standards. &lt;/p&gt;

&lt;p&gt;With clang-tidy, there were a few issues that I had not spotted. These were mostly related to performance with arguments that were received as copies rather than references. I made those changes accordingly. There were also some minor conventions that I had neglected to follow, so I had clang-tidy adjust those as well. &lt;/p&gt;

&lt;h2&gt;
  
  
  Problems
&lt;/h2&gt;

&lt;p&gt;I struggled a lot in setting up the clang tools in my project. Although the Clang Power Tools extension was quite easy to set up, the command-line versions of them was a different story. At first I downloaded the LLVM installer from &lt;a href="https://releases.llvm.org/"&gt;here&lt;/a&gt;. But, I realized that these tools were accessible via modifying the Visual Studio 2022 installation using the Visual Studio Installer. I decided to do the latter, since my project did not require all of the LLVM tools, though I did provide a link to it in my contributing document for those who do not use VS2022. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LDbePmY1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/61764259/199850257-8936d373-3792-4489-a666-a1e16d36a508.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LDbePmY1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/61764259/199850257-8936d373-3792-4489-a666-a1e16d36a508.PNG" alt="install" width="880" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By adding the components using the Visual Studio Installer, the clang tools are accessible through the terminal in VS2022. They can be executed using their commands as though installed through LLVM. &lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;In this lab, I learned about static analysis tools in C++. I had not previously used them, instead sticking to the standards set by my professors and using the built-in code formatter in Visual Studio. Although I do have some experience with static analysis tools in Javascript/Typescript, I did not know of any such tools for C++. They are quite a bit more finicky in C++ (at least in my experience) however they are just as useful.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>opensource</category>
      <category>cpp</category>
    </item>
    <item>
      <title>My Hacktoberfest Recap</title>
      <dc:creator>Rudy Chung</dc:creator>
      <pubDate>Mon, 31 Oct 2022 16:47:54 +0000</pubDate>
      <link>https://forem.com/rudychung/my-hacktoberfest-recap-mc2</link>
      <guid>https://forem.com/rudychung/my-hacktoberfest-recap-mc2</guid>
      <description>&lt;h2&gt;
  
  
  My Experience
&lt;/h2&gt;

&lt;p&gt;My first Hacktoberfest has been a long one, spanning all of October. I saw other students had gotten all their PRs merged a week early, so I knew I had to hurry and finish mine as well. I just barely managed to get all 4 of my PRs approved within October, which was a stressful experience. But, overall I feel like I learned a lot about open-source, GitHub and Git. &lt;/p&gt;

&lt;p&gt;I found the most difficult part to be actually finding viable issues. Issues often tended to be taken very quickly, or were too complex and required development experience with the project. I spent each day looking at new issues that matched my search criteria and I found brief moments of success between long droughts of good issues. &lt;/p&gt;

&lt;h2&gt;
  
  
  My PRs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;My &lt;a href="https://github.com/ACM-VIT/golly-bot/pull/60"&gt;first PR&lt;/a&gt; was on &lt;a href="https://github.com/ACM-VIT/golly-bot"&gt;golly-bot&lt;/a&gt; a discord bot. My PR added the feature of sending a goodbye message tagging the leaving user.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;My &lt;a href="https://github.com/gregrickaby/reddit-image-viewer/pull/407"&gt;second PR&lt;/a&gt; was on &lt;a href="https://github.com/gregrickaby/reddit-image-viewer"&gt;reddit-image-viewer&lt;/a&gt;, which allows users to purely view visual media on reddit. My PR changed the default video player to use Hls.js. This way, videos could be played with sound. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;My &lt;a href="https://github.com/gregrickaby/reddit-image-viewer/pull/413"&gt;third PR&lt;/a&gt; was once again on &lt;a href="https://github.com/gregrickaby/reddit-image-viewer"&gt;reddit-image-viewer&lt;/a&gt;. My PR added the title of the post which linked to the original post under each image/video. This was in response to clicking images linking to the original post, while videos being clicked played the video. Thus, there was a need to place the title to link to the post.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;My &lt;a href="https://github.com/JianLoong/word-cloud-generator/pull/13"&gt;fourth PR&lt;/a&gt; was on &lt;a href="https://github.com/JianLoong/word-cloud-generator"&gt;word-cloud-generator&lt;/a&gt;, which allows users to generate word clouds using various settings. My PR added capitalisation settings to the settings panel, allowing for users to specify the capitalisation of the words in the word cloud.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tips
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Get searching early, and often&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In my first week and third week I had little success in finding a good issue to work on. However, I found sporadic success in the second and last weeks. There may be some dry weeks where it is difficult to find something good to work on. However, you should try to set yourself up for success and be persistent in your search for issues that you can work on. Keep searching for issues and eventually good ones will come your way.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cast a wide net&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Try to look for as many different issues as possible. Search for any projects that use the languages you know. Search for any projects that use languages you would like to know. Search for issues that under different tags. Try to cast as wide a net as possible. That way you can broaden your horizons and see as many candidate issues as possible, even if many of them may not be viable for you.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>beginners</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>My Fourth Hacktoberfest PR</title>
      <dc:creator>Rudy Chung</dc:creator>
      <pubDate>Mon, 31 Oct 2022 14:23:31 +0000</pubDate>
      <link>https://forem.com/rudychung/my-fourth-hacktoberfest-pr-4amf</link>
      <guid>https://forem.com/rudychung/my-fourth-hacktoberfest-pr-4amf</guid>
      <description>&lt;h2&gt;
  
  
  What Did I Work on?
&lt;/h2&gt;

&lt;p&gt;This week, I worked on a new repo &lt;a href="https://github.com/JianLoong/word-cloud-generator"&gt;word-cloud-generator&lt;/a&gt;. This project allows the user to generate a word cloud based on a body of text provided to it. This word cloud can be generated using different methods and with different stylings and can be saved as a &lt;code&gt;.png&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/JianLoong/word-cloud-generator/issues/4"&gt;The issue&lt;/a&gt; I worked on was adding a feature that allowed for selecting the capitalisation of the words in the generated word cloud. This allowed for all words in the word cloud to be all lower-case, all upper-case, or have only the first letter capitalised. &lt;/p&gt;

&lt;h2&gt;
  
  
  What Changes did I make?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/JianLoong/word-cloud-generator/pull/13"&gt;My pull request&lt;/a&gt; involved making changes to both the front-end and back-end. The front-end changes I made were relatively simple, just placing radio buttons and labels on the settings panel of the page.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZeXu1lg8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/61764259/198921781-019ddc60-2484-4304-8f24-b8e895a206ce.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZeXu1lg8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/61764259/198921781-019ddc60-2484-4304-8f24-b8e895a206ce.png" alt="Front-end changes" width="880" height="722"&gt;&lt;/a&gt;&lt;br&gt;
On the back-end, the default capitalisation was all lower-case, which was where I started. I had to first check the radio button that was checked, then modify the words received in the corresponding way.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--k-H5dDGD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/61764259/198922214-3fbbb074-536e-4ca0-80b7-1c35f34833b3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k-H5dDGD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/61764259/198922214-3fbbb074-536e-4ca0-80b7-1c35f34833b3.png" alt="All upper-case" width="880" height="722"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There was not a built-in method to capitalize the first letter in every word, so I had to find my own solution. This involved iterating through every word, and modifying them to a value built from appending the capitalised first letter to the remainder of the word.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oynsIfAs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/61764259/198922248-35947387-1907-46e5-b6c8-b29fe6cecccf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oynsIfAs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/61764259/198922248-35947387-1907-46e5-b6c8-b29fe6cecccf.png" alt="First letter upper-case" width="880" height="709"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Difficulties
&lt;/h2&gt;

&lt;p&gt;This project used webpack, which caches the page. This also made it so that my changes were not being made when I reloaded the page. It took me a few hours to figure out, but once I found a workaround the process of finding the solution to the issue was only a matter of time. &lt;/p&gt;

</description>
      <category>opensource</category>
      <category>beginners</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
