<?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>DEV Community: JLi</title>
    <description>The latest articles on DEV Community by JLi (@jli).</description>
    <link>https://dev.to/jli</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%2F701933%2F1b112a45-0125-4ced-8426-3eec4fdaf16f.jpg</url>
      <title>DEV Community: JLi</title>
      <link>https://dev.to/jli</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jli"/>
    <language>en</language>
    <item>
      <title>Release 0.4 - Release</title>
      <dc:creator>JLi</dc:creator>
      <pubDate>Sat, 11 Dec 2021 01:44:33 +0000</pubDate>
      <link>https://dev.to/jli/release-04-release-10l6</link>
      <guid>https://dev.to/jli/release-04-release-10l6</guid>
      <description>&lt;p&gt;This week I finished all of the issues I was working on for my 0.4 release assignment. &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Issues&lt;/th&gt;
&lt;th&gt;Pull Requests&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/Seneca-ICTOER/IPC144/issues/111"&gt;#111&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Seneca-ICTOER/IPC144/pull/139"&gt;PR #139&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/Seneca-ICTOER/IPC144/issues/122"&gt;#122&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Seneca-ICTOER/IPC144/pull/140"&gt;PR #140&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/Seneca-ICTOER/IPC144/issues/123"&gt;#123&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Seneca-ICTOER/IPC144/pull/141"&gt;PR #141&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/Seneca-ICTOER/IPC144/issues/127"&gt;#127&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Seneca-ICTOER/IPC144/pull/146"&gt;PR #146&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I think I was able to do a good job meeting my goals I gave myself in my planning phase of this release. I was able to finish the issues well on schedule while balancing my other courses like I hoped and I was able to properly audit and fix both issues #122 and #123 without needing too many changes after review. What I learned from those two issues is the importance to read and checkout other issues/pull requests, especially for smaller repos. As I was told in the review for both my issues, I learned that the project recently made changes with how we would format the frontmatter. In &lt;a href="https://github.com/Seneca-ICTOER/IPC144/pull/142"&gt;PR #142&lt;/a&gt; we no longer use the slug for pages due to inconsistency with links and we also need to include a description to follow the standardized Frontmatter as updated in &lt;a href="https://github.com/Seneca-ICTOER/IPC144/pull/143"&gt;PR #143&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So I updated the Frontmatter to match the new standard, removing the &lt;code&gt;slug&lt;/code&gt; and adding a &lt;code&gt;description&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;text-files&lt;/span&gt;
&lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Text Files&lt;/span&gt;
&lt;span class="na"&gt;sidebar_position&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Stream data using standard library functions to access persistent text.&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;While it is fine to simply communicate with other devs to learn about changes that are made, and by no means are you expected to know absolutely everything that is happening in a project, its still very helpful to checkout other pull requests and issues occasionally to see if any significant changes are going to be made. But most importantly of all its best to simply keep up with group communications, most projects will have a Discord or Slack group to communicate with all the developers working on the project. Because generally standardization changes like this would be discussed/announced. But I think occasionally reading other issues/PRs is just a good skill to practice for any developer working in open source.&lt;/p&gt;

&lt;p&gt;As for my Issue #127, I was supposed to add some CSS that would make all tables generated from the markdown files to be centered. I have taken several web development courses before but CSS was never a main focal point in them, rather it was more of a side lesson. So I never really had much confidence in my CSS so I didn't really know how to tackle this issue. HumpD my professor, gave a suggestion to wrap the tables in a custom &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; element with a &lt;code&gt;class&lt;/code&gt; so we could center the tables easily in the global CSS. I had trouble figuring out how to do this because I wasn't sure how to get the markdown tables wrapped globally without manually adding a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; to each file. After some searching I realized that I could simply apply the CSS to &lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt; elements directly instead of a wrapper. So I tried to do the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;table&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;margin-left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin-right&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, for some reason the tables were not being centered even with these properties. So I was wondering if I actually had to wrap the tables after all. Thus I asked my professor how I would go about doing so, but he showed me that I was missing another property to center the tables.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;table&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;margin-left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin-right&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;fit-content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By adding &lt;code&gt;width: fit-content;&lt;/code&gt; the table's width would be properly calculated and would in turn allow both &lt;code&gt;margin&lt;/code&gt; properties to be applied properly. That allowed the tables to be centered. So I learned that to center objects using CSS the width is important to be determined.&lt;/p&gt;

&lt;p&gt;So throughout my PRs I was able to solve them by either referencing other pull requests from the community, getting reviews to my pull requests, or by discussing in the comments with other developers how to make some changes. Communication is a very vital part of open source and it is something I really appreciate a lot. I usually try to solve things by myself through trial &amp;amp; error and google searches, but having a community you can go ask for help is incredibly nice to have to fall back on, especially when some issues/questions can be incredibly specific to a project. All in all this was a great learning experience for me developing in open source. So until next time take care!&lt;/p&gt;

</description>
      <category>opensource</category>
    </item>
    <item>
      <title>Release 0.4 Progress</title>
      <dc:creator>JLi</dc:creator>
      <pubDate>Thu, 02 Dec 2021 21:25:06 +0000</pubDate>
      <link>https://dev.to/jli/release-04-progress-3o68</link>
      <guid>https://dev.to/jli/release-04-progress-3o68</guid>
      <description>&lt;p&gt;So this week I continued to work on the issues I collected from the &lt;a href="https://dev.to/jli/release-04-planning-278n"&gt;previous planning week&lt;/a&gt;. I found that the progress of auditing and fixing the pages were a lot smoother than the first time I did it in my Release 0.3 assignment. I was able to have a better idea of what to look for and I was also able to reference the pull requests of what many of my classmates did for their audits. For example, in my first PR I didn't know how to make the Frontmatter for the markdown file, but I learned that from one of my reviews what it looked like.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;data-conversions&lt;/span&gt;
&lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Data&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Conversions"&lt;/span&gt;
&lt;span class="na"&gt;sidebar_position&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;
&lt;span class="na"&gt;slug&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/resources-appendices/data-conversions&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That made creating the Frontmatter much easier this time because I knew what I was doing and I also could double check with the other audited pages in the chapter to see if the slug was correct.&lt;/p&gt;

&lt;p&gt;Another thing I didn't have to audit in my 0.3 PR was markdown tables and code blocks. The computers.md file that I audited in 0.3 did not have any tables or code so I never had to audit them. However, one of the PRs I reviewed before did have both so I was able to reference the fixes they made to also make similar checks for my pages.&lt;/p&gt;

&lt;p&gt;The final significant change I had to fix were quoteblocks that used &lt;code&gt;&amp;gt;&lt;/code&gt;. I had to change these to Admonitions, originally I did not really know what these were. However, from &lt;a href="https://github.com/Seneca-ICTOER/IPC144/pull/84"&gt;PR #84&lt;/a&gt; I learned how make Admonitions in markdown:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;:::note
Notice how the newline character (&lt;span class="sb"&gt;`'\n'`&lt;/span&gt;) (which was assigned to the tax &lt;span class="gs"&gt;**status**&lt;/span&gt; variable) places the closing parenthesis on a newline.
:::
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So far I have accomplished my goal for this week and was able to complete the three issues I wanted to complete for this week. Now I just need to wait for those to get reviewed and make any fixes that my reviewers find. Hopefully I managed to do a better job this time and have less mistakes that I missed, if so then that's my other personal goal achieved. While waiting for that I will continue to work on my &lt;a href="https://github.com/Seneca-ICTOER/IPC144/issues/127"&gt;final issue&lt;/a&gt;, so until next time take care!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Release 0.4 Planning</title>
      <dc:creator>JLi</dc:creator>
      <pubDate>Sun, 28 Nov 2021 21:14:26 +0000</pubDate>
      <link>https://dev.to/jli/release-04-planning-278n</link>
      <guid>https://dev.to/jli/release-04-planning-278n</guid>
      <description>&lt;p&gt;For my 0.4 release we were assigned to continue our venture into open source repositories. For this release I decided to continue working on the &lt;a href="https://github.com/Seneca-ICTOER/IPC144"&gt;Seneca IPC144 repo&lt;/a&gt; because I had gotten to know the project better from my 0.3 release and I wanted to explore more of how the website worked. I also learned a lot from taking a look and reviewing my peers' PRs in that repository so I think this time around I could do a better job. &lt;br&gt;
I selected 4 issues that were within the same area:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Seneca-ICTOER/IPC144/issues/111"&gt;#111&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Seneca-ICTOER/IPC144/issues/122"&gt;#122&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Seneca-ICTOER/IPC144/issues/123"&gt;#123&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Seneca-ICTOER/IPC144/issues/127"&gt;#127&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I plan on going through each issue one-by-one in the order listed because I think as I work on one it will help me get a better understanding of how to take on the next. My goal is to finish the first three issues for this week and then to begin figuring out how to achieve a solution for issue 127. For my audit and fixing issues I will use the knowledge I gained from my previous audits/reviews of audits, my goal is to attempt to fix the page so when it is reviewed there will be if not none then, less mistakes than I had the first time I made an audit. That is the basic plan for my release 0.4 we shall see how it goes the end of this week. So until next time take care!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Releasing LENNAH</title>
      <dc:creator>JLi</dc:creator>
      <pubDate>Fri, 26 Nov 2021 23:08:29 +0000</pubDate>
      <link>https://dev.to/jli/releasing-lennah-49p3</link>
      <guid>https://dev.to/jli/releasing-lennah-49p3</guid>
      <description>&lt;p&gt;This week we got the chance to learn how to package and release our SSGs. For my release I decided to use &lt;a href="https://conan.io/"&gt;conan&lt;/a&gt; as my package manager and &lt;a href="https://gitlab.com/"&gt;GitLab&lt;/a&gt; as my package repository. In order to make my package I had to do a few steps first, I needed to install conan and &lt;a href="https://cmake.org/download/"&gt;cmake&lt;/a&gt; so I could run the commands. I already had cmake installed from testing Andrew's SSG so that was nice. Then I had to make a new GitLab account and link it to my GitHub account so I could import my &lt;a href="https://github.com/joshuali7536/LennahSSG"&gt;repo&lt;/a&gt; over to GitLab. &lt;/p&gt;

&lt;h2&gt;
  
  
  Steps for packaging and deploying to repo
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;First I had to create a new Conan recipe.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;conan new LennahSSG/1.0.1 &lt;span class="nt"&gt;-t&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Then a package for the recipe.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;conan create &lt;span class="nb"&gt;.&lt;/span&gt; LennahSSG/beta
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The next step is to add a global remote that will allow conan to connect to your GitLab repository. This step requires you to find your project ID, which can be found in the Settings -&amp;gt; General page of your GitLab repo. It will be near the top of the page beside the repo name.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;conan remote add gitlab https://gitlab.example.com/api/v4/projects/&amp;lt;project_id&amp;gt;/packages/conan
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Once that is done you need to authenticate your connection. You can provide a few different options.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;conan user &amp;lt;gitlab_username or deploy_token_username&amp;gt; &lt;span class="nt"&gt;-r&lt;/span&gt; gitlab &lt;span class="nt"&gt;-p&lt;/span&gt; &amp;lt;personal_access_token or deploy_token&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Finally I uploaded the package to the package repository by using the following command:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;conan upload LennahSSG/1.0.0@LennahSSG/beta &lt;span class="nt"&gt;--all&lt;/span&gt; &lt;span class="nt"&gt;--remote&lt;/span&gt;:gitlab
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It is important to add the &lt;code&gt;--remote:gitlab&lt;/code&gt; part otherwise it will go to the default &lt;code&gt;conancenter&lt;/code&gt; remote. I had some trouble figuring this out, so this we definitely my "ah ha!" moment. You can also set the &lt;code&gt;gitlab&lt;/code&gt; remote as the default instead by using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;conan remote add_ref LennahSSG/1.0.0@LennahSSG/beta gitlab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;(Obviously replacing &lt;code&gt;LennahSSG&lt;/code&gt; with your own project name)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Conan is nice because I didn't have to modify any of my existing files, by running the commands it added any necessary files on its own.&lt;/p&gt;

&lt;p&gt;Testing the installation of the package was pretty easy to do, I had my friend Raymond who doesn't have direct experience with C++ or using Conan, but with some programming experience with web development, test the process. All he had to do to add it as a dependency was add a new text file to a project and run a few commands.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;He added a 'conanfile.txt' file with the following inside:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[requires]
LennahSSG/1.0.0@LennahSSG/beta
[generators]
cmake_find_package
msbuild
make
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then he ran the following commands:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;conan remote add gitlab https://gitlab.example.com/api/v4/projects/31641611/packages/conan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;conan &lt;span class="nb"&gt;install &lt;/span&gt;LennahSSG/1.0.0@LennahSSG/beta &lt;span class="nt"&gt;--remote&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gitlab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;build &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;conan &lt;span class="nb"&gt;install&lt;/span&gt; ..
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;cmake .. &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; cmake &lt;span class="nt"&gt;--build&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;He was able to install LennahSSG as a dependency for his project and could use it in it. You can checkout the package &lt;a href="https://gitlab.com/joshuali7536/LennahSSG/-/packages/3940266"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It was an interesting process making a release, I think for future project I would want to try out using other methods as well to see if I find one that I like more or find easier. Because while I did eventually manage to figure out how to create the package with Conan, it was still a bit difficult to figure out how and follow the documentation. It also has a lot of commands you would need to remember, so maybe there are easier options to use. If you want to read more information on how to publish, install, or run packages using conan checkout these docs: &lt;a href="https://docs.gitlab.com/ee/user/packages/conan_repository/"&gt;publish &amp;amp; install&lt;/a&gt;,  &lt;a href="https://docs.conan.io/en/latest/cheatsheet.html#consuming-packages"&gt;running&lt;/a&gt;. Until next time take care!&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Reviewing PRs</title>
      <dc:creator>JLi</dc:creator>
      <pubDate>Sat, 20 Nov 2021 03:59:46 +0000</pubDate>
      <link>https://dev.to/jli/reviewing-prs-2ei4</link>
      <guid>https://dev.to/jli/reviewing-prs-2ei4</guid>
      <description>&lt;p&gt;Our final task for release 0.3 was to review two PRs made by our peers. The two PRs that I reviewed were from the IPC144 repo, just like the PR I made. I helped do reviews of PRs that were also auditing and fixing markdown files. You can check them out &lt;a href="https://github.com/Seneca-ICTOER/IPC144/pull/84"&gt;here&lt;/a&gt; and &lt;a href="https://github.com/Seneca-ICTOER/IPC144/pull/100"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The process I took was slightly different from what I did for my own pull request. First I took a look at the changes that they made in their PR. I would check every line that was modified and run that against the checklist to make sure that it matched the changes needed. Then I would just read through them normally as well to just check for any human error. Afterwards, I copied their updated markdown and tested it locally on my own machine to do my own audit of their audited version to see if I could spot any issues. I checked both the raw markdown file and the website version just like my own PR. Then I ran it through Lighthouse and Web Hint to check for any issues. Finally double check for any issues with light/dark mode and the mobile version of the webpage.&lt;/p&gt;

&lt;p&gt;Both of the PRs I reviewed were very well done and thorough, they had very minimal errors to them and I was really only able to be nitpicky with one spacing mistake. It was interesting to see how different people approach the different changes such as alt text for images. While there is a best way to describe an image I was having some trouble naming some of the diagrams in my own PR but seeing how other people approached it allowed me to learn from their methods. As I stated in my previous blog post, this is really the power of open source allowing us to pool together our collective knowledge and methodologies, in turn making each other smarter and better. Anyways that's all for now, so until next time take care!&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>javascript</category>
      <category>markdown</category>
    </item>
    <item>
      <title>PR 2 for release 0.3</title>
      <dc:creator>JLi</dc:creator>
      <pubDate>Sat, 20 Nov 2021 03:40:44 +0000</pubDate>
      <link>https://dev.to/jli/pr-2-for-release-03-8ad</link>
      <guid>https://dev.to/jli/pr-2-for-release-03-8ad</guid>
      <description>&lt;p&gt;For my second PR, I worked on &lt;a href="https://github.com/Seneca-ICTOER/IPC144"&gt;Seneca's IPC144 Course Notes website&lt;/a&gt;. This is a docusaurus created website that has markdown files for chapters taught in the IPC144 course. This was a cool one to work on because I recognized a bunch of the notes and diagrams from one of my first courses at Seneca. The issue I was helping fix was &lt;a href="https://github.com/Seneca-ICTOER/IPC144/issues/18"&gt;a massive list of markdown files we needed to audit and fix&lt;/a&gt;. So I helped out by working on &lt;a href="https://github.com/Seneca-ICTOER/IPC144/issues/45"&gt;one of the markdown files in a separate issue&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We were given a checklist of stuff we would need to check for and fix. This included things like formatting adjustments, typos, fixing clarity, adding links to connect the notes better, running the website through testers, etc. For my &lt;a href="https://github.com/Seneca-ICTOER/IPC144/pull/78"&gt;pull request&lt;/a&gt; I just went through the document both as the raw markdown and the ran website versions to double check for any errors, while going down the checklist to make sure everything looked correct. Auditing took a surprisingly long amount of time and even then afterwards I was given some very good reviews that helped me fix a few things I didn't catch the first time. It really shows the power of open source, where even after spending hours auditing you can easily still make mistakes, either by tunneling on some stuff, or just missing something, or even not knowing about stuff. You can learn a lot from other people giving a review to your pull request. I didn't know about docusaurus' front matter implementation so getting a review teaching me about that was really cool.&lt;/p&gt;

&lt;p&gt;It was also cool to learn about &lt;a href="https://developers.google.com/web/tools/lighthouse"&gt;Lighthouse&lt;/a&gt; and &lt;a href="https://webhint.io/"&gt;Web Hint&lt;/a&gt;. I never used either before but now that I know of their existence I will definitely use them in the future for any web projects that I work on.&lt;/p&gt;

&lt;p&gt;In the end I was able to make changes to the markdown file, and adjusted to match what feedback I received from my peers. The changes were successfully approved and merged into the main branch.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>javascript</category>
      <category>markdown</category>
    </item>
    <item>
      <title>PR 1 for release 0.3</title>
      <dc:creator>JLi</dc:creator>
      <pubDate>Sat, 20 Nov 2021 03:11:10 +0000</pubDate>
      <link>https://dev.to/jli/pr-1-for-release-03-ci</link>
      <guid>https://dev.to/jli/pr-1-for-release-03-ci</guid>
      <description>&lt;p&gt;For our release 0.3 project we were to make a pull request for a external project outside of our class's repos and one pull request for an internal repo. For my external PR I worked and still am working on a library project that my professor maintains outside of Seneca called &lt;a href="https://github.com/filerjs/filer"&gt;Filer&lt;/a&gt;. Filer is a drop-in library that works like node's &lt;code&gt;fs&lt;/code&gt; module but for browsers. &lt;a href="https://github.com/filerjs/filer/issues/794"&gt;The issue I was working on&lt;/a&gt; was making a migration of parcel 1 to &lt;a href="https://github.com/parcel-bundler/parcel"&gt;parcel 2&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;I have never done a migration before so I figured it would be a good learning experience and also something not too complicated to do. Turns out despite it not require too many lines of code it can be more complicated than expected. I was able to follow along their migration instructions to update any lines of code that needed changing. Such as updating &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; to include a module type where needed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"module"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"../node_modules/chai/chai.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I also had to update the package.json with new arguments in scripts, and provide new properties to it such as &lt;code&gt;target&lt;/code&gt; and paths to specific files.&lt;/p&gt;

&lt;p&gt;The complicated part came in when I tried to test the program after the migration changes. For some reason parcel 2 was having trouble seeing built-in node_modules types such as &lt;code&gt;buffer&lt;/code&gt; and &lt;code&gt;path&lt;/code&gt;. It would give this error when tested:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;npm &lt;span class="nb"&gt;test
&lt;/span&gt;Building...
× Build failed.

@parcel/core: Failed to resolve &lt;span class="s1"&gt;'path'&lt;/span&gt; from &lt;span class="s1"&gt;'./src/path.js'&lt;/span&gt;

  C:&lt;span class="se"&gt;\U&lt;/span&gt;sers&lt;span class="se"&gt;\J&lt;/span&gt;oshua&lt;span class="se"&gt;\D&lt;/span&gt;ocuments&lt;span class="se"&gt;\G&lt;/span&gt;itHub&lt;span class="se"&gt;\f&lt;/span&gt;iler&lt;span class="se"&gt;\s&lt;/span&gt;rc&lt;span class="se"&gt;\p&lt;/span&gt;ath.js:12:26
    11 |  &lt;span class="k"&gt;*&lt;/span&gt;/
  &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 12 | const nodePath &lt;span class="o"&gt;=&lt;/span&gt; require&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'path'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;    |                          ^^^^^^
    13 | const filerPath &lt;span class="o"&gt;=&lt;/span&gt; Object.assign&lt;span class="o"&gt;({}&lt;/span&gt;, nodePath&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    14 |

@parcel/resolver-default: External dependency &lt;span class="s2"&gt;"path"&lt;/span&gt; is not declared &lt;span class="k"&gt;in &lt;/span&gt;package.json.

  C:&lt;span class="se"&gt;\U&lt;/span&gt;sers&lt;span class="se"&gt;\J&lt;/span&gt;oshua&lt;span class="se"&gt;\D&lt;/span&gt;ocuments&lt;span class="se"&gt;\G&lt;/span&gt;itHub&lt;span class="se"&gt;\f&lt;/span&gt;iler&lt;span class="se"&gt;\p&lt;/span&gt;ackage.json:49:3
    48 |   &lt;span class="o"&gt;}&lt;/span&gt;,
  &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 49 |   &lt;span class="s2"&gt;"dependencies"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;    |   ^^^^^^^^^^^^^^
    50 |     &lt;span class="s2"&gt;"buffer"&lt;/span&gt;: &lt;span class="s2"&gt;"^6.0.3"&lt;/span&gt;,
    51 |     &lt;span class="s2"&gt;"chai"&lt;/span&gt;: &lt;span class="s2"&gt;"^4.3.4"&lt;/span&gt;,

  ℹ Add &lt;span class="s2"&gt;"path"&lt;/span&gt; as a dependency.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This would require adding the dependencies as external dependencies. But that wouldn't be what we wanted to do because of outdated versions. We wanted to use the versions that already existed inside of the node_modules folder. Thus, I spent hours trying to find the solution to our problem. Through this I learned that GitHub had built-in &lt;a href="https://github.com/parcel-bundler/parcel/discussions"&gt;FAQ sections&lt;/a&gt; and that allowed me to easily browse through other people's questions and issues. I managed to find a similar issue where &lt;a href="https://github.com/parcel-bundler/parcel/discussions/7046"&gt;the person's node_modules were seen as external&lt;/a&gt;, but after trying their solution it would still give the same error. Thus, after searching issues and questions I made a &lt;a href="https://github.com/parcel-bundler/parcel/issues/7329"&gt;new issue report&lt;/a&gt; to hopefully get the answer.&lt;/p&gt;

&lt;p&gt;This PR is still a work in progress, but I learned a lot about migration and learned more about using GitHub as well in the process. Despite it seeming like a pretty simple issue on paper its cool to see that I was able to learn some stuff and gain experience with this type of task. If any of you reading want to take a look at the issue feel free to do so. Hopefully I will be able to make an update soon once I get a response for my issue, but until then take care!&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Adding Continuous Integration</title>
      <dc:creator>JLi</dc:creator>
      <pubDate>Fri, 19 Nov 2021 23:51:56 +0000</pubDate>
      <link>https://dev.to/jli/adding-continuous-integration-2e8f</link>
      <guid>https://dev.to/jli/adding-continuous-integration-2e8f</guid>
      <description>&lt;p&gt;This week we learned how to use the tests we made last week and directly implement them into our GitHub repositories. By adding continuous integration we no longer have to run our tests manually every time we make a new commit to our repos, instead it does it automatically every time we make a new pull request or merge into the main branch!&lt;/p&gt;

&lt;p&gt;Since I've been coding my project using Visual Studio I used MSBuild as my workflow template, because Visual Studio uses MSBuild to compile and build projects when running the built in debugger. So that makes it easy to make sure that it will compile properly on GitHub's side. Other than that decision it was really easy to setup the YAML file, I just needed to add two lines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;msbuild LennahSSG.sln /p:OutDir=D:\a\LennahSSG\LennahSSG\LennahSSG&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to build the executable and&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;D:\a\LennahSSG\LennahSSG\LennahSSG\LennahSSG.exe -t&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to run the test.&lt;/p&gt;

&lt;p&gt;After setting up my own CI and ensuring everything was working properly I teamed up with &lt;a href="https://dev.to/drew5494"&gt;Andrew Tassone&lt;/a&gt; to work on &lt;a href="https://github.com/drew5494/the-great-site-generator"&gt;his SSG&lt;/a&gt;. I added a new test case to his that would check for proper markdown conversion with the &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; tag, you can check out the PR &lt;a href="https://github.com/drew5494/the-great-site-generator/pull/14"&gt;here&lt;/a&gt;. It was a bit more difficult to add a new test case to a different project, mainly because his structure for his project was still a larger collection of code, rather than many smaller functions. He did not refactor his project like I did so I had to think of how to test things with the project in one piece.&lt;/p&gt;

&lt;p&gt;After setting up CI for the first time it is incredibly convenient. It is a bit annoying to set up tests the first time and then making sure they cover as many things as possible but once you have it up and running. Turning tests into CI is very simple to do and in the long run it makes adding new features and just making changes in general so much better, because then you will know when something breaks and where it breaks.&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Adding tests to LENNAH</title>
      <dc:creator>JLi</dc:creator>
      <pubDate>Fri, 12 Nov 2021 04:33:33 +0000</pubDate>
      <link>https://dev.to/jli/adding-tests-to-lennah-540m</link>
      <guid>https://dev.to/jli/adding-tests-to-lennah-540m</guid>
      <description>&lt;p&gt;This week we learned about built in unit tests and E2E(end-to-end) testing for opensource projects. Its a really great way to easily test your code to make sure everything is working as intended without having to check it all manually after every modification. Instead you write code that will do all the testing for you, so you can check everything works with just a click of a button, or in my case a quick CLI command.&lt;/p&gt;

&lt;p&gt;Since LENNAH is written in C++ I had to look around for a good unit testing framework and I came across &lt;a href="https://github.com/catchorg/Catch2"&gt;Catch2&lt;/a&gt;. Catch2 is a very easy to use testing framework because all you need to do is add a single header file to your project then &lt;code&gt;#define&lt;/code&gt; and &lt;code&gt;#include&lt;/code&gt; it! This was the main reason I wanted to use this framework, because I saw a lot of people online recommend it since it is quick to set up and easy to use. And they are absolutely right about that, it only need two lines of code to set it up.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="cp"&gt;#define CATCH_CONFIG_MAIN
#include "catch.hpp"
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's all you need! But if you have a &lt;code&gt;main()&lt;/code&gt; already and don't want to use the auto-generated one that Catch2 creates. All you need to do is change the &lt;code&gt;#define&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="cp"&gt;#define CATCH_CONFIG_RUNNER
#include "catch.hpp"
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will allow you to run the tests from your own main function. You just need to call it with &lt;code&gt;Catch::Session().run();&lt;/code&gt;. So you can set it up how you want. What I did was add another command line argument &lt;code&gt;--test&lt;/code&gt; or &lt;code&gt;-t&lt;/code&gt; that would run the test. Very simple!&lt;/p&gt;

&lt;p&gt;To create tests all you need to do is add &lt;code&gt;TEST_CASE&lt;/code&gt;s like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="n"&gt;TEST_CASE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Inline Code function"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"[code]"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Formatter&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;SECTION&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Strings with ` markdown"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;REQUIRE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;inlineCode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"`Hello World`"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;code&amp;gt;Hello World&amp;lt;/code&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first string is the name of the Test Case and the second one with the &lt;code&gt;[]&lt;/code&gt; is the tag. Then you just add &lt;code&gt;REQUIRE&lt;/code&gt; statements to check for correct results. You can also use &lt;code&gt;SECTION&lt;/code&gt; to make specific sections for each Test Case.&lt;/p&gt;

&lt;p&gt;While I was creating these test cases I actually discovered a handful of smaller bugs that I didn't notice before. My formatting functions for handling markdown syntax had a few missing characters from the code that Gus created way back when he added them. It appears there were just a few copy pasting mistakes that he left behind that I didn't catch, so the tests helped a lot with finding those. Furthermore, I learned that some of the logic with his functions was actually flawed because of the use of &lt;code&gt;string::find_last_of()&lt;/code&gt;, this string function did not work how we both thought it did originally. Rather than finding the sequence given as a parameter it only looked at individual characters. Thus, I learned to change the code to use &lt;code&gt;string::rfind()&lt;/code&gt; instead, which does the same thing as &lt;code&gt;string::find()&lt;/code&gt; but from the end of the string instead.&lt;/p&gt;

&lt;p&gt;I learned a lot after doing this, it taught me how to setup testing frameworks, and the importance of refactoring your code into smaller functions. Thankfully I made these changes previously, but now I really see the impact it made. By refactoring the code it made the task of implementing unit tests for each function 1000 times easier. I've never set up automatic unit testing before. I've only done manual testing of each function through console messages or doing code follow throughs. But this is a fantastic way to test my programs without the constant tediousness of doing it manually, I only need to make the test code once and occasionally update it as necessary. This saves me so much time and effort in comparison.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>cpp</category>
    </item>
    <item>
      <title>Learning how to use Static Analysis tools</title>
      <dc:creator>JLi</dc:creator>
      <pubDate>Fri, 05 Nov 2021 14:33:17 +0000</pubDate>
      <link>https://dev.to/jli/learning-how-to-use-static-analysis-tools-jie</link>
      <guid>https://dev.to/jli/learning-how-to-use-static-analysis-tools-jie</guid>
      <description>&lt;p&gt;So this week we learned about static analysis tools such as formatters and linters. I also got a little prior experience with using these analysis tools because of my Hacktoberfest PRs, two of the repositories I made PRs had these tools and also had bots on their repo that automatically checked that these tools were ran.&lt;/p&gt;

&lt;p&gt;For my LENNAH SSG, I decided to use &lt;a href="https://www.clangpowertools.com/" rel="noopener noreferrer"&gt;Clang&lt;/a&gt; for both the formatter and linter. I chose to use clang because it had both the formatter and linter in one package for C++ and it look extremely user friendly, especially their Visual Studio extension. Clang also has commands you can use in the command line to run both the formatter and linter if you don't want to use extensions. However, this took me a bit of time figuring out how to do, so I will give a quick explanation on how to set it up to simply the process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Installing + Running Clang for Command Line
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Download the build &lt;a href="https://llvm.org/builds/" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;img src="https://media.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%2Fbwtgyri2hqxprry0rit2.png" alt="Image description"&gt;
&lt;/li&gt;
&lt;li&gt;Then when running the installer make sure to add LLVM to the system PATH
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F49960519%2F140510707-8ca0c68e-737e-400f-8109-d271897849af.png" alt="image"&gt;
&lt;/li&gt;
&lt;li&gt;Once installed, in the terminal go to the project folder and then you can use the following commands to format or find lint.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;clang-format &lt;span class="nt"&gt;-style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;file LennahSSG/&lt;span class="k"&gt;*&lt;/span&gt;.cpp LennahSSG/&lt;span class="k"&gt;*&lt;/span&gt;.h
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;clang-tidy &lt;span class="nt"&gt;--config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt; LennahSSG/&lt;span class="k"&gt;*&lt;/span&gt;.cpp LennahSSG/&lt;span class="k"&gt;*&lt;/span&gt;.h &lt;span class="nt"&gt;--extra-arg&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nt"&gt;-std&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;c++17 &lt;span class="nt"&gt;--extra-arg&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nt"&gt;-xc&lt;/span&gt;++ &lt;span class="nt"&gt;--&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Installing Clang Extension for Visual Studio
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open Visual Studio and go to the Extensions drop down at the top.&lt;/li&gt;
&lt;li&gt;Open Manage Extensions and search for Clang Power Tools.&lt;/li&gt;
&lt;li&gt;Then download and restart Visual Studio.&lt;/li&gt;
&lt;li&gt;You will have new buttons in the top of your bar that will allow you to format, tidy, and use other features Clang provides.
For more information you can check out their &lt;a href="https://clangpowertools.com/blog/get-started-with-clang-power-tools.html" rel="noopener noreferrer"&gt;getting started guide on their website&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Formatting and Removing Lint from LENNAH
&lt;/h3&gt;

&lt;p&gt;When I ran the formatter and linter I found out that there were a good handful of simple changes that actually made my code nicer to read. The biggest change was the use of additional whitespace before lines. Specifically for parts where I am outputting to a file using &lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt; whenever I made a new line it wouldn't line up with the first line. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;    &lt;span class="n"&gt;outputFile&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;/ul&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But after the formatter it made the readability much better and more satisfying to look at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;    &lt;span class="n"&gt;outputFile&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;/ul&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
               &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
               &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This was a small change but something I didn't really think much about because of how Visual Studio's base spacing worked. I think this is a really nice fix that improves the code greatly, even though it is just simple spacing. &lt;/p&gt;

&lt;p&gt;As for the Linter, there was only one piece of lint in my code and it was an extra boolean variable that I forgot to remove from a previous iteration of a function. That was very nice because it was just a small variable surrounded by many other variables so it would have taken me a long time to notice that, were it not for the Linter.&lt;/p&gt;

&lt;p&gt;This was a great learning experience for setting up Static Analysis tools, and it really shows how powerful they can be. I will always be using these tools, especially the extensions, from now on because they are so easy to use and they make quality of life so much better. The way I have been writing code before is like using Microsoft Word without spell/grammar check, literally making it so much harder for myself. So be sure to do yourself a solid and look into static analysis tools for your own projects if you haven't already. Until next time take care!&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>cpp</category>
    </item>
    <item>
      <title>My 4th Hacktoberfest PR</title>
      <dc:creator>JLi</dc:creator>
      <pubDate>Sun, 31 Oct 2021 20:19:38 +0000</pubDate>
      <link>https://dev.to/jli/my-4th-hacktoberfest-pr-306a</link>
      <guid>https://dev.to/jli/my-4th-hacktoberfest-pr-306a</guid>
      <description>&lt;p&gt;For my fourth issue I wanted to find something a bit more challenging, so as I was searching around I came across a cool WIP application being created by one developer. She was creating a desktop client for &lt;a href="https://www.looperman.com/"&gt;Looperman&lt;/a&gt;, which is a cool website that houses a pro audio community that shares music loops, acapellas, vocals, beats, and much more. It is like the opensource equivalent for audio, where you can share your work and get feedback/help from others, or help others as well. This app is still in its early stages of development so I was able to contribute by adding a new volume slider feature. The &lt;a href="https://github.com/stxarixdust/looperman-desktop/issues/7"&gt;issue&lt;/a&gt; was that whenever the user would preview audio clips it would only be able to play at 100% volume, so for user experience she wanted a volume slider to be added. This was a fun issue to work out as I have never worked with audio files in javascript, so it was a great learning experience. &lt;/p&gt;

&lt;p&gt;There was a few things I had to do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add a slider for volume (HTML)&lt;/li&gt;
&lt;li&gt;Add a function to modify the volume of the audio player (JS)&lt;/li&gt;
&lt;li&gt;Fix the appearance of the slider to match the theme (CSS)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I ran into a few troubles with trying to adjust volume with the audio player at first, but after playing around with it a bit I learned that volume is between 0-1 not 0-100 which helped solve my major problems at first. After getting the base functionality down I needed to fix the appearance of the slider because it was just the default slider like this:&lt;/p&gt;

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

&lt;p&gt;I think this step was the most difficult thing I faced, throughout my classes I never really got a lot of practice with CSS so figuring out how to customize the slider took a bunch of research. Eventually I came across a helpful &lt;a href="https://www.youtube.com/watch?v=BrpiNUf2XCk"&gt;video&lt;/a&gt; explaining how to create a custom slider. The biggest trouble I had was trying to figure out how to make the bar colour of the slider to be different from the background colour of the slider. This video helped me understand how to implement it through javascript. After finishing the CSS the initial version looked like this:&lt;/p&gt;

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

&lt;p&gt;The developer &lt;a href="https://github.com/stxarixdust"&gt;stxarixdust&lt;/a&gt; was happy with the initial commit, but also gave some &lt;a href="https://github.com/stxarixdust/looperman-desktop/pull/13#issuecomment-955674667"&gt;suggestions&lt;/a&gt; to improve it. She wanted the Volume label to be replaced with a speaker icon, and for the sliders to be right aligned. This gave me the chance to learn about &lt;a href="https://feathericons.com/"&gt;feather icons&lt;/a&gt;, which is a really cool opensource collection of icons. They have a large library of your standard icons and also are customizable! This collection is something I will definitely bookmark for any future projects that need high quality icons.&lt;/p&gt;

&lt;p&gt;For changing the label I wanted to take it a step further and make the icon responsive based on what the volume is at. This was a pretty simple addition since I already had a function that adjusted volume I just needed to also adjust the icon that is displayed depending on the volume. Additionally, I figured that a mute button function would also make sense to have so I added a function that simply toggled the audio player volume between 0 and the current volume when the speaker icon was clicked. So the final version looked like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--P-zq8PwC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i.gyazo.com/d0be72881b3db6955b278661bcc38dee.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P-zq8PwC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i.gyazo.com/d0be72881b3db6955b278661bcc38dee.gif" alt="Final Demo" width="880" height="139"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This was a very fun PR to work on, it allowed me to learn about some features and libraries for javascript and also let me practice some CSS. You can checkout the full PR &lt;a href="https://github.com/stxarixdust/looperman-desktop/pull/13"&gt;here&lt;/a&gt;. Until next time, take care!&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>opensource</category>
      <category>javascript</category>
    </item>
    <item>
      <title>My 3rd Hacktoberfest PR</title>
      <dc:creator>JLi</dc:creator>
      <pubDate>Sun, 31 Oct 2021 04:12:28 +0000</pubDate>
      <link>https://dev.to/jli/my-3rd-hacktoberfest-pr-2p8h</link>
      <guid>https://dev.to/jli/my-3rd-hacktoberfest-pr-2p8h</guid>
      <description>&lt;p&gt;For my third pull request I was actually able to checkout a project that previous students of my open source class made in this class called &lt;a href="https://github.com/Seneca-CDOT/telescope"&gt;Telescope&lt;/a&gt;. Telescope is a web server and client application that is used to keep track of Seneca students' blogs; just like the one you are reading right now! Since we were eventually to contribute to the Telescope project later in the semester, I figured I should get a bit of a head start and become a little familiar with the project.&lt;/p&gt;

&lt;p&gt;For this &lt;a href="https://github.com/Seneca-CDOT/telescope/issues/653"&gt;issue&lt;/a&gt; there was some problems with the validity of specific feeds. However, this issue was not easily solved because the error logging was not working. Thus, for this issue I had to help add error logging for when feeds were not being parsed. This task while is a simple task on paper was still a bit difficult for me to understand. I think my biggest hurdle for this issue was to follow along with what everything was doing. The Telescope project is a fairly large project that has a lot of parts to it so it was really easy for me to feel a bit overwhelmed. However, one of the developers humphd (who is also my professor :winkyface:) made it much easier on me by directing me to which file I would be modifying and what I should take a look at. From there I still wanted to get a bit of an understanding of what was going on so I took the time to read through the code and other files it required from. Despite me feeling very lost at first I was able to understand what I needed to do and managed to make a good &lt;a href="https://github.com/Seneca-CDOT/telescope/pull/2388"&gt;pull request&lt;/a&gt;. &lt;em&gt;Aside from a little mistake where I missed a part of the code (Whoops!)&lt;/em&gt; It was a simple fix where I needed to modify the signature of a function to allow error messages and then store/log the error message. &lt;/p&gt;

&lt;p&gt;While it was a quick and easy fix, the process to get there took a while because I had a bit of trouble following along with the code. But after taking the time to read through I was able to figure out what was needed. So after this PR I think I feel a bit more confident in viewing larger projects, its important to remember that you are not expected to know the ins and outs of the entire project. Just reading and understanding the necessary components is all you really need, and you can always ask the developers for help where to look.&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
