<?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: Kien Nguyen Chi</title>
    <description>The latest articles on DEV Community by Kien Nguyen Chi (@kiennguyenchi).</description>
    <link>https://dev.to/kiennguyenchi</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%2F701669%2F495f9b8e-3160-4e33-aae3-c1fc86c00361.jpg</url>
      <title>DEV Community: Kien Nguyen Chi</title>
      <link>https://dev.to/kiennguyenchi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kiennguyenchi"/>
    <language>en</language>
    <item>
      <title>OSD600 Final Project Blog 3</title>
      <dc:creator>Kien Nguyen Chi</dc:creator>
      <pubDate>Wed, 08 Dec 2021 01:33:58 +0000</pubDate>
      <link>https://dev.to/kiennguyenchi/osd600-final-project-blog-3-43km</link>
      <guid>https://dev.to/kiennguyenchi/osd600-final-project-blog-3-43km</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;🔥This is a mini-series including 3 blogs that shows the process how I work on my final project in my Open-Source Development class (OSD600) at Seneca College.&lt;/p&gt;

&lt;p&gt;📝In the first blog, I introduced how I found an open-source repo to work for Final Project. In the second blog, I introduced my process of installation and setup the app. In this &lt;strong&gt;last blog&lt;/strong&gt;, I will introduce my process to implement the feature and how the result looks like.&lt;/p&gt;

&lt;h2&gt;
  
  
  Process
&lt;/h2&gt;

&lt;h3&gt;
  
  
  First Impression
&lt;/h3&gt;

&lt;p&gt;It was a wow when I first looked at the code of the repo. It contains so many folders and functionalities. Some folders had the views of the features and code of functionalities. Some folders contained classes and database connection.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zzUntb5a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/taha8i1vrdao6b7v9l4v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zzUntb5a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/taha8i1vrdao6b7v9l4v.png" alt="Image description" width="231" height="685"&gt;&lt;/a&gt;&lt;br&gt;
I did not know where to start. So, I picked &lt;strong&gt;Category&lt;/strong&gt; folder to read the code first because my feature implemented is about &lt;strong&gt;Pin Category&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Difficulties
&lt;/h3&gt;

&lt;p&gt;I decided to add an attribute to &lt;strong&gt;Category&lt;/strong&gt; class named &lt;strong&gt;pinned&lt;/strong&gt;. I planned to mark it as a boolean. I would set it to be true whenever user pins, and set it to be false for default value. And I would display all the pinned categories on top.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public struct AWSCategory: Model {
  public let id: String
  public var name: String
  public var imageName: String?
  public var tweets: List&amp;lt;AWSTweet&amp;gt;?
  public var pinned: Bool?

  public init(id: String = UUID().uuidString,
      name: String,
      imageName: String? = nil,
      tweets: List&amp;lt;AWSTweet&amp;gt;? = []
      pinned: Bool) {
      self.id = id
      self.name = name
      self.imageName = imageName
      self.tweets = tweets
      self.pinned = pinned
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That was be the best shortcut for me to implement pin feature. But it would change the structure of the whole database system. So I needed to figure out other way.&lt;/p&gt;

&lt;h3&gt;
  
  
  Implementation
&lt;/h3&gt;

&lt;p&gt;I created a button &lt;strong&gt;Pin to top&lt;/strong&gt; whenever users press-hold on any category.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Button {
     viewModel.pinCategory(category: category)
} label: {
     Text("Pin to top")
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The button would show the text &lt;strong&gt;Pin to top&lt;/strong&gt;. And when users hold-press it. It would call &lt;strong&gt;pinCategory()&lt;/strong&gt; accepting parameter of current row &lt;strong&gt;category&lt;/strong&gt; to do the functionality.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;pinCategory()&lt;/strong&gt; function, firstly, I made a loop to found the index of the category in the array.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func pinCategory(category: AWSCategory){
   var categoryIndex = -1;
   for (index, each) in categories.enumerated() {
        if(each.id == category.id){
           categoryIndex = index
        }
   }
   ...
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the index found is valid, I would remove the current category from the array, insert it to the front. So, when the page is reloaded, it would appear on the top of the list.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if(categoryIndex != -1){
    categories.remove(at: categoryIndex)
    categories.insert(category, at: 0)
    ...
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;categories&lt;/strong&gt; is the array of the imported categories from the database. So, I needed to update the categories to the database when I had done my feature. I had a chance to understand how to implement AWI Amplify Datastore. I read the &lt;a href="https://docs.amplify.aws/start/q/integration/ios/"&gt;articles&lt;/a&gt; and followed the implementation in &lt;strong&gt;/Managers/DataStoreManager.swift&lt;/strong&gt; to see how actually this database system works.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for category in categories {
   DataStoreManger.shared.deleteCategory(category: category)
}
for category in categories {
   DataStoreManger.shared.createCategory(category: category)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Result
&lt;/h3&gt;

&lt;p&gt;This is 3 folders that I created: &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Fl4Ptsyp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r4udvyg1ncqwov7htlf7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Fl4Ptsyp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r4udvyg1ncqwov7htlf7.png" alt="Image description" width="880" height="514"&gt;&lt;/a&gt;&lt;br&gt;
When I hold-press on &lt;strong&gt;Folder 2&lt;/strong&gt;, it will show:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WEeGwpGw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/03c1nlzj7m3lg8ys9im2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WEeGwpGw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/03c1nlzj7m3lg8ys9im2.png" alt="Image description" width="880" height="517"&gt;&lt;/a&gt;&lt;br&gt;
And here is the final result:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YedBj6cK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wtlmimfa3mi1yupcb2jf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YedBj6cK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wtlmimfa3mi1yupcb2jf.png" alt="Image description" width="880" height="517"&gt;&lt;/a&gt;&lt;br&gt;
When I close the app and reopen it, the categories are saved as before. I ensured the persistence of database. &lt;strong&gt;Folder 2&lt;/strong&gt; is still on top.&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Ayn3SM6haq8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;💻This has been the first open-source project that I spent so much time in it. From the process to find interesting project to work on, to the installation process and finally implementation process.&lt;/p&gt;

&lt;p&gt;💪I'm happy to see my overall process and I'm looking forward to push myself in the open-source world.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;p&gt;📚Read my mini-series at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/kiennguyenchi/osd600-final-project-blog-1-lf7"&gt;OSD600 Final Project Blog 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/kiennguyenchi/osd600-final-project-blog-2-i62"&gt;OSD600 Final Project Blog 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💻Take a look at my work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/mikaelacaron/brain-marks/issues/101"&gt;Filing Issue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mikaelacaron/brain-marks/pull/102"&gt;Pull Request&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiennguyenchi/brain-marks"&gt;GitHub Repo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>opensource</category>
    </item>
    <item>
      <title>OSD600 Final Project Blog 2</title>
      <dc:creator>Kien Nguyen Chi</dc:creator>
      <pubDate>Wed, 08 Dec 2021 00:14:45 +0000</pubDate>
      <link>https://dev.to/kiennguyenchi/osd600-final-project-blog-2-i62</link>
      <guid>https://dev.to/kiennguyenchi/osd600-final-project-blog-2-i62</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;🔥This is a mini-series including 3 blogs that shows the process how I work on my final project in my Open-Source Development class (OSD600) at Seneca College.&lt;/p&gt;

&lt;p&gt;📝In the first blog, I introduced how I found an open-source repo to work for Final Project. In this &lt;strong&gt;second blog&lt;/strong&gt;, I will introduce my process of installation and setup the app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Process
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Twitter API
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;I had to register for &lt;a href="https://developer.twitter.com/en/docs/twitter-api/getting-started/getting-access-to-the-twitter-api"&gt;Twitter API&lt;/a&gt; because the app requires API from Twitter. &lt;/li&gt;
&lt;li&gt;I had to fill out the registration form from Twitter and waited 1 day to be approved for the access granted.&lt;/li&gt;
&lt;li&gt;I got the &lt;strong&gt;API Key&lt;/strong&gt; in order to implement into &lt;strong&gt;Secrets.swift&lt;/strong&gt; file in the project later.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import Foundation

// swiftlint:disable line_length

enum Secrets{
    static let bearerToken = "myAPIKey"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: AWS Amplify DataStore
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;I had to install &lt;a href="https://docs.amplify.aws/start/getting-started/setup/q/integration/ios/"&gt;AWS Amplify DataStore&lt;/a&gt; in case I needed to change the model of the app. &lt;/li&gt;
&lt;li&gt;I opened the terminal and type:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -sL https://aws-amplify.github.io/amplify-cli/install | bash &amp;amp;&amp;amp; $SHELL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;amplify package&lt;/strong&gt; is already added to the repo when I folked it my computer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 3: Setup Repo
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;I folked the repo to my GitHub.&lt;/li&gt;
&lt;li&gt;I cloned it to my computer.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone git@github.com:kiennguyenchi/brain-marks.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;I set the remote upstream to the maintainer's repo.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git remote add upstream https://github.com/mikaelacaron/brain-marks.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;I checked out new branch with formatted name by &lt;strong&gt;Contributing.md&lt;/strong&gt; rule.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout -b 101-feature-pin-category
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Finally, I could run the app on XCode and opened iPhone 11 Simulator:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dnhGSNnA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zu2h1xjso6hsbnz6mfno.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dnhGSNnA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zu2h1xjso6hsbnz6mfno.png" alt="Image description" width="880" height="567"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This is the main screen of categories of the app:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--m12SbI-F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/khguqc0iy3qlxi7dcakj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--m12SbI-F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/khguqc0iy3qlxi7dcakj.png" alt="Image description" width="880" height="568"&gt;&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This is the screen when I hold my finger on each category.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T4CLuhsJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rlme8la2gcn5xktydza1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--T4CLuhsJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rlme8la2gcn5xktydza1.png" alt="Image description" width="880" height="568"&gt;&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;My target is to show the option &lt;strong&gt;pin&lt;/strong&gt; under &lt;strong&gt;edit&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;💻During the installation process, it took me a while to get the API, install the necessary packages and run the app properly. &lt;/p&gt;

&lt;p&gt;❗At first, I could not run the app. I researched and watched youtube videos to see if I installed correctly or not. Finally, I found out that I could not run the app because all the added packages (Amplify, SQLite, Starscream,..) were not finished loading yet. I had to leave them some time to finish loading, then I could run the app.&lt;/p&gt;

&lt;p&gt;💪Stay tuned and look forward to my last blog about my implementation process and final result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;p&gt;📚Read my mini-series at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/kiennguyenchi/osd600-final-project-blog-1-lf7"&gt;OSD600 Final Project Blog 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/kiennguyenchi/osd600-final-project-blog-3-43km"&gt;OSD600 Final Project Blog 3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💻Take a look at my work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/mikaelacaron/brain-marks/issues/101"&gt;Filing Issue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiennguyenchi/brain-marks"&gt;GitHub Repo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>opensource</category>
    </item>
    <item>
      <title>OSD600 Final Project Blog 1</title>
      <dc:creator>Kien Nguyen Chi</dc:creator>
      <pubDate>Wed, 08 Dec 2021 00:13:56 +0000</pubDate>
      <link>https://dev.to/kiennguyenchi/osd600-final-project-blog-1-lf7</link>
      <guid>https://dev.to/kiennguyenchi/osd600-final-project-blog-1-lf7</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;🔥This is a mini-series including 3 blogs that shows the process how I work on my final project in my Open-Source Development class (OSD600) at Seneca College.&lt;/p&gt;

&lt;p&gt;📝In the first blog, I will introduce how I prepare for this project. The final project requires me to add a feature or fix a series of bugs in a huge open-source project. I choose to add a new feature to any project that interests me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Process
&lt;/h2&gt;

&lt;p&gt;I could say it took me &lt;strong&gt;a whole day&lt;/strong&gt; to search for a project that fits to me. I needed to find the one that more difficult than my level right now so I could level up myself. And also it is not too hard so I could have time to do research and code it.&lt;/p&gt;

&lt;p&gt;First thing in my mind, I ran into an existing project of my school that I had a chance to make a &lt;a href="https://github.com/Seneca-ICTOER/IPC144/pull/55"&gt;pull request&lt;/a&gt; before. &lt;a href="https://github.com/Seneca-ICTOER/IPC144"&gt;The project&lt;/a&gt; is about a website of course notes of &lt;em&gt;Introduction to C Programming&lt;/em&gt;. I thought that it was interesting that I can implement a useful thing for future students in my school. I filed an &lt;a href="https://github.com/Seneca-ICTOER/IPC144/issues/138"&gt;issue&lt;/a&gt; to say that the website only has the course contents right now, I wanted to implement more pages that contains assignments, workshops and course outline. Unfortunately, the owner told me that these contents like that would be provided to students in other way (Blackboard), not on public website anymore.&lt;/p&gt;

&lt;p&gt;So, I scrolled down the &lt;strong&gt;Explore&lt;/strong&gt; tab on GitHub to find interesting project. I checked for languages that I'm familiar before, which is C++. But no projects fit to me. Suddenly, a thought jumped in my head &lt;strong&gt;What if I try Swift?&lt;/strong&gt; It may be a good idea. I took an &lt;strong&gt;IOS App Development&lt;/strong&gt; course this semester, I just did some simple assignments but working on an open-source IOS app and implement new feature? Maybe it's worth for me to try.&lt;/p&gt;

&lt;p&gt;Eventually, after looking at some Swift programs. I found &lt;a href="https://github.com/mikaelacaron/brain-marks"&gt;Brain Marks&lt;/a&gt; app. How interesting it is, it is available on App Store to be downloaded on my iPhone. For the format, it is a bit similar to the &lt;strong&gt;Notes&lt;/strong&gt; on iPhone. For the usage, the app organizes user's saved tweets into categories.&lt;/p&gt;

&lt;p&gt;After downloading the app on my phone and explore how it works, I decided to add a feature to the app. I would create a &lt;strong&gt;Pin Feature&lt;/strong&gt;, which means there will be a list of categories in the app, whenever I hold-press the category and choose &lt;strong&gt;pin&lt;/strong&gt;, it will show up on the top of the list.&lt;/p&gt;

&lt;p&gt;I filed an &lt;a href="https://github.com/mikaelacaron/brain-marks/issues/101"&gt;issue&lt;/a&gt; to tell the repo's owner about my idea. She thought that it was unnecessary to implement right now but she still gave me a shot to try. &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;😍I'm so excited to work on a big open-source IOS app first time in my life. I don't know if I can fully develop this functionality or not but I would try my best.&lt;/p&gt;

&lt;p&gt;💪Stay tuned and look forward to my next blog about my implementation process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;p&gt;📚Read my mini-series at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/kiennguyenchi/osd600-final-project-blog-2-i62"&gt;OSD600 Final Project Blog 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/kiennguyenchi/osd600-final-project-blog-3-43km"&gt;OSD600 Final Project Blog 3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💻Take a look at my work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/mikaelacaron/brain-marks/issues/101"&gt;Filing Issue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kiennguyenchi/brain-marks"&gt;GitHub Repo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>opensource</category>
    </item>
    <item>
      <title>First time using Conan to release software</title>
      <dc:creator>Kien Nguyen Chi</dc:creator>
      <pubDate>Thu, 25 Nov 2021 23:30:51 +0000</pubDate>
      <link>https://dev.to/kiennguyenchi/first-time-using-conan-to-release-software-4l0m</link>
      <guid>https://dev.to/kiennguyenchi/first-time-using-conan-to-release-software-4l0m</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;This week, I worked on my Static-Site Generator - &lt;a href="https://github.com/kiennguyenchi/potato-generator"&gt;Potato Generator&lt;/a&gt; to add package registry. My SSG is in C++ language. I chose Conan, GitLab, to publish my package officially.&lt;/p&gt;

&lt;h1&gt;
  
  
  Installation Process
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Firstly, I have to ensure that I have &lt;a href="https://cmake.org/"&gt;CMake&lt;/a&gt; and &lt;a href="https://conan.io/"&gt;Conan&lt;/a&gt; installed on my machine.&lt;/li&gt;
&lt;li&gt;Secondly, I have to make sure that I create &lt;a href="https://gitlab.com/"&gt;GitLab&lt;/a&gt; account, link it to my GitHub's project, create &lt;em&gt;personal access token&lt;/em&gt; to access later.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Set-up Process
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;I build a package with name and version.
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;I build package with user and channel.
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;I add remote to my project (get project_id from GitLab)
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;I add remote for my instance.
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;I need to authenticate with my GitLab account. I use username and &lt;em&gt;personal access token&lt;/em&gt; from installation step.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;conan user &amp;lt;gitlab_username or deploy_token_username&amp;gt; -r gitlab -p &amp;lt;personal_access_token or deploy_token&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;I publish the package.
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Finally, I create a git tag for my first version 1.0.0.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git tag -a v1.0.0 -m "Version 1.0.0"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Install my package instructions
&lt;/h1&gt;

&lt;p&gt;To install my package from Conan, please carefully follow this instructions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install &lt;a href="https://conan.io/"&gt;Conan&lt;/a&gt; and &lt;a href="https://cmake.org/"&gt;CMake&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Install package by Conan command
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;conan install potato-generator --remote=gitlab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Add remote
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;/div&gt;



&lt;p&gt;Otherwise, please take a look at my &lt;a href="https://gitlab.com/kiennguyenchi/potato-generator/-/packages/3923658"&gt;Release&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
    </item>
    <item>
      <title>Set Up GitHub Action, add test to partner's repo</title>
      <dc:creator>Kien Nguyen Chi</dc:creator>
      <pubDate>Wed, 17 Nov 2021 19:53:49 +0000</pubDate>
      <link>https://dev.to/kiennguyenchi/set-up-github-action-add-test-to-partners-repo-3kcj</link>
      <guid>https://dev.to/kiennguyenchi/set-up-github-action-add-test-to-partners-repo-3kcj</guid>
      <description>&lt;h1&gt;
  
  
  GitHub Action
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;This week, I set up GitHub Action for my Static Site Generator (&lt;a href="https://github.com/kiennguyenchi/potato-generator"&gt;SSG&lt;/a&gt;). There are several options with C++ language and I picked &lt;em&gt;C/C++ with Make&lt;/em&gt; to implement.&lt;/li&gt;
&lt;li&gt;It auto generates a yml file with default contents. I had to change a few things. The structure of yml looks like this:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: C/C++ CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: compile
      run: g++ pgprogram.cpp HTMLFile.h HTMLFile.cpp MainPage.h MainPage.cpp -o pgprogram --std=c++17
    - name: Program Test
      run: g++ test/test.cpp test/catch.hpp HTMLFile.h HTMLFile.cpp -o programtest --std=c++17
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;First, I set &lt;em&gt;push&lt;/em&gt; and &lt;em&gt;pull_request&lt;/em&gt; to run the test whenever it is pushed or pulled to the main branch:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Second, I set the &lt;em&gt;run&lt;/em&gt; command of &lt;em&gt;compile&lt;/em&gt; option to the command to compile my program:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;g++ pgprogram.cpp HTMLFile.h HTMLFile.cpp MainPage.h MainPage.cpp -o pgprogram --std=c++17
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Third, I added option to test my program with testing command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;g++ test/test.cpp test/catch.hpp HTMLFile.h HTMLFile.cpp -o programtest --std=c++17
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Finally, the GitHub Action Workflow runs successfully on the project:
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--73FtfYmp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wtkd9kwk4ar4ew5k6iqg.JPG" alt="" width="880" height="377"&gt; &lt;/li&gt;
&lt;li&gt;Take a look at how it runs: &lt;a href="https://github.com/kiennguyenchi/potato-generator/runs/4242038652?check_suite_focus=true"&gt;GitHub Actions Run&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Add Test to partner Repo
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;I picked &lt;a href="https://github.com/gusmccallum/GAS-ssg"&gt;Gus's SSG&lt;/a&gt; to work on. I had work on his project before because we use the same C++ language. We use same testing framework, which is Catch2. So I generally understand how his SSG and Testing Tool work.&lt;/li&gt;
&lt;li&gt;I tested his project with his existing 10 test cases and it showed:
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FWpPs_ei--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l9svwf5em4thfezivdv2.JPG" alt="" width="880" height="91"&gt; &lt;/li&gt;
&lt;li&gt;I'm kind of ignoring failed tests for now and add my tests.&lt;/li&gt;
&lt;li&gt;On his existing test cases, I saw he had 4 functions to check for correct file/folder input. He only had the test cases to test if these functions are returning true values.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TEST_CASE("isText() Testing", "[istext]") {
    REQUIRE(isText("The Adventure of the Speckled Band.txt") == true);
}
TEST_CASE("isMarkDown() Testing", "[ismarkdown]") {
    REQUIRE(isMarkDown("readme.md") == true);
}
TEST_CASE("isFolder() Testing", "[isfolder]") {
    REQUIRE(isFolder("./dist") == true);
}

TEST_CASE("isJson() Testing", "[isjson]") {
    REQUIRE(isJson("ssg-config.json") == true);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;I added test cases to test if these functions are returning false values correctly.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TEST_CASE("isText() Testing (not .txt file)", "[istext]") {
    REQUIRE(isText("The Adventure of the Speckled Band.md") == false);
    REQUIRE(isText("The Adventure of the Speckled Band") == false);
}

TEST_CASE("isMarkDown() Testing (not .md file)", "[ismarkdown]") {
    REQUIRE(isMarkDown("The Adventure of the Speckled Band.txt") == false);
    REQUIRE(isMarkDown("The Adventure of the Speckled Band") == false);
}

TEST_CASE("isFolder() Testing (not folder)", "[isfolder]") {
    REQUIRE(isFolder("The Adventure of the Speckled Band.txt") == false);
    REQUIRE(isFolder("The Adventure of the Speckled Band.json") == false);
}

TEST_CASE("isJson() Testing (not .json file)", "[isjson]") {
    REQUIRE(isJson("The Adventure of the Speckled Band.txt") == false);
    REQUIRE(isJson("The Adventure of the Speckled Band") == false);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;After adding 4 tests, all tests worked perfectly. 
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hF3v7yjr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n8undauy90mz7fdhtfrq.JPG" alt="" width="880" height="85"&gt;
&lt;/li&gt;
&lt;li&gt;Take a look at my &lt;a href="https://github.com/gusmccallum/GAS-ssg/pull/24"&gt;Pull Request&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Overall, it is really useful to add GitHub Action Workflow to my project. The future pull requests, commits, etc will needed to be checked through my compiling command and my test. It is absolutely a safeguard for the project.&lt;br&gt;
Furthermore, it is interesting this week that I can contribute adding tests to my partner's repo. Hopefully, my test cases will be useful for your project.&lt;/p&gt;

</description>
      <category>opensource</category>
    </item>
    <item>
      <title>Code Reviews on IPC Project</title>
      <dc:creator>Kien Nguyen Chi</dc:creator>
      <pubDate>Tue, 16 Nov 2021 22:38:28 +0000</pubDate>
      <link>https://dev.to/kiennguyenchi/code-reviews-on-ipc-project-28jg</link>
      <guid>https://dev.to/kiennguyenchi/code-reviews-on-ipc-project-28jg</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;This week, I have done 2 code reviews on classmates' pull requests on the project operated by my school Seneca College. It is an open source project - built in contents of IPC144 (Introduction To C Programming) course. You can take a look at the &lt;a href="https://github.com/Seneca-ICTOER/IPC144"&gt;GitHub Repo&lt;/a&gt; and the &lt;a href="https://cghub.ca/"&gt;website&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  First Code Review
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;First, I take a look at this &lt;a href="https://github.com/Seneca-ICTOER/IPC144/pull/76"&gt;Pull Request #76&lt;/a&gt;. This commit audits and fixes the &lt;em&gt;arrays.md&lt;/em&gt; file.&lt;/li&gt;
&lt;li&gt;I take a look carefully at every changes of the pull requests and I found 2 issues that needed to be fixed.&lt;/li&gt;
&lt;li&gt;First, there is a hyperlink on the line 19 displayed in the web on:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[structures](../C-Data-Structures/structures "Structures")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;When I try to click the link, it leads to an error link so I put a comment for the maintainer to fix that link.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The second issue is on line 118, there are code displayed as below:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for (i = 0; i &amp;lt; NGRADES; i++) {
    printf("%d" , grade[i]);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;I leave a comment that the maintainer can add &lt;em&gt;int i = 0&lt;/em&gt; so it would make more senses for the code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Second Code Review
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;I take a look at this &lt;a href="https://github.com/Seneca-ICTOER/IPC144/pull/83"&gt;Pull Request #83&lt;/a&gt;. This commit audits and fixes the &lt;em&gt;Operators.md&lt;/em&gt; file.&lt;/li&gt;
&lt;li&gt;I take a closer look at changes of this pull request and I found 2 issues that needed to be fixed for better display.&lt;/li&gt;
&lt;li&gt;The page is currently displayed like this:
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9qYF7dMA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eka1kkynilgxs4vfxvea.JPG" alt="" width="880" height="336"&gt;
&lt;/li&gt;
&lt;li&gt;Section 5 and 6 should be in code block syntax which makes the it looks similarly to the Code Block of Section 1-4.&lt;/li&gt;
&lt;li&gt;I left a comment for the maintainer to fix and he successfully put them into the code blocks.&lt;/li&gt;
&lt;li&gt;The page is now displayed like this:
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eFO71zPe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uq2zm22jwck2v0za9jr7.JPG" alt="" width="880" height="365"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;This is the first time that I reviewed someone code and it is interesting to do that. The more I dig in to the open source world, I cannot deny the fact that GitHub is really useful tool for the coders to work together, add code, review code, etc. It is so convenient and I love it!&lt;/p&gt;

</description>
      <category>opensource</category>
    </item>
    <item>
      <title>Improve Usability to new IPC144 Website</title>
      <dc:creator>Kien Nguyen Chi</dc:creator>
      <pubDate>Tue, 16 Nov 2021 20:25:35 +0000</pubDate>
      <link>https://dev.to/kiennguyenchi/improve-usability-to-new-ipc144-website-4gmg</link>
      <guid>https://dev.to/kiennguyenchi/improve-usability-to-new-ipc144-website-4gmg</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;This week, I contributed to one of projects operated by my school Seneca College. It is an open source project - built in contents of IPC144 (Introduction To C Programming) course. You can take a look at the &lt;a href="https://github.com/Seneca-ICTOER/IPC144"&gt;GitHub Repo&lt;/a&gt; and the &lt;a href="https://cghub.ca/"&gt;website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;At first impression, the new website is more good-looking and user-friendly than the &lt;a href="https://ict.senecacollege.ca/~ipc144/"&gt;old website&lt;/a&gt;. Taking a closer look at the new website. I found out that I can add an additional feature to maintain the usability of the users (students).&lt;/p&gt;

&lt;h1&gt;
  
  
  Issue
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;The page footer is kind of blank right now with a link to &lt;em&gt;Table of Contents&lt;/em&gt; only.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--w0UhLRnZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7o70700608wt7z2rzql1.JPG" alt="" width="880" height="164"&gt; &lt;/li&gt;
&lt;li&gt;I want to add the hyperlink of &lt;em&gt;Weekly Schedule&lt;/em&gt; to the page footer, so that when students scroll down to the end of the page. They can click on either &lt;em&gt;Table of Contents&lt;/em&gt; or &lt;em&gt;Weekly Schedule&lt;/em&gt;, which both pages contain important information.&lt;/li&gt;
&lt;li&gt;I want to remove the hyperlink of &lt;em&gt;Weekly Schedule&lt;/em&gt; in Contents page because we would have the hyperlinks of Weekly Schedule in both left navigation bar and footer.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6tlVMaRG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nn9io1c1qxt4ivovskn7.JPG" alt="" width="880" height="449"&gt;
&lt;/li&gt;
&lt;li&gt;Take a look at my filing &lt;a href="https://github.com/Seneca-ICTOER/IPC144/issues/54"&gt;issue&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Process
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;In order to add additional hyperlink to the footer, I add &lt;em&gt;Weekly Schedule&lt;/em&gt; label and its location to in &lt;em&gt;docusaurus.config.js&lt;/em&gt; file.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
   label: 'Weekly Schedule',
   to: '/weeklyContents',
},
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Here is the result:
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pTqQYIuN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2nqjn7ovfsz7d6fa18v7.JPG" alt="" width="880" height="237"&gt;
&lt;/li&gt;
&lt;li&gt;In order to remove the hyperlink from &lt;em&gt;Table of Contents&lt;/em&gt; page. I removed the line in &lt;em&gt;docs/intro.md&lt;/em&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Weekly Schedule](weeklyContents.md)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Here is the result:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--u7tlhrRT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/33vaflbk8qp22ym43lkg.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u7tlhrRT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/33vaflbk8qp22ym43lkg.JPG" alt="" width="880" height="362"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Take a look at my &lt;a href="https://github.com/Seneca-ICTOER/IPC144/pull/55"&gt;Pull Request&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Overall, my pull request is easy to solve. But it is so amazing to me to be a part of my college's project, that I can actually find an improvement to work on something for future students and people see it as a convenient way for students to use the website. After all, I'm so happy that my Pull Request is merged successfully to the college project.&lt;/p&gt;

</description>
      <category>opensource</category>
    </item>
    <item>
      <title>Catch2 - Testing Framework</title>
      <dc:creator>Kien Nguyen Chi</dc:creator>
      <pubDate>Fri, 12 Nov 2021 02:51:28 +0000</pubDate>
      <link>https://dev.to/kiennguyenchi/catch2-testing-framework-2cdg</link>
      <guid>https://dev.to/kiennguyenchi/catch2-testing-framework-2cdg</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;This week, I work on my Static Site Generator (SSG) - &lt;a href="https://github.com/kiennguyenchi/potato-generator"&gt;Potato Generator&lt;/a&gt;. I implemented the Catch2 - Testing Framework to my project.&lt;/p&gt;

&lt;p&gt;There are many testing tools for C++, I could say MSTest, Google Test, built-in test in Visual Studio,... It may take you times to set up the tools. In contrast, I pick a Catch2 framework for testing because it is easy to set up and easy to use. &lt;/p&gt;

&lt;h1&gt;
  
  
  Process
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;I downloaded &lt;em&gt;catch.hpp&lt;/em&gt; file from &lt;a href="https://github.com/catchorg/Catch2"&gt;Catch2 Repo&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;I created a folder &lt;em&gt;test&lt;/em&gt; to maintain &lt;em&gt;catch.hpp&lt;/em&gt; and other testing files.&lt;/li&gt;
&lt;li&gt;I added testing file with the format &lt;em&gt;test#.cpp&lt;/em&gt; file (# represents for number accordingly)&lt;/li&gt;
&lt;li&gt;After completing the test, I executed the command &lt;em&gt;g++ ./test/test#.cpp -o test# --std=c++17&lt;/em&gt; in the CMD and then opened the Output window to see the success or failure of the test.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Testing file structure
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;First of all, every testing file has the following structure. I defined &lt;em&gt;CONFIG_CATCH_MAIN&lt;/em&gt;, include &lt;em&gt;catch.hpp&lt;/em&gt; file at the beginning of each test file and created each test case with the following format.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#define CONFIG_CATCH_MAIN
#include "catch.hpp"

TEST_CASE("This is the name of the test case")
{
    //code
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;In the &lt;em&gt;TEST_CASE&lt;/em&gt;, I would use REQUIRE function to ensure the outputs of my testing functions are correctly returned.&lt;/li&gt;
&lt;li&gt;If you want to test any functions in any specific file, you need to include it in the testing file. In my first test case &lt;em&gt;test1.cpp&lt;/em&gt;, I included &lt;em&gt;pgprogram.cpp&lt;/em&gt; file to test some functions to validate the command line arguments.&lt;/li&gt;
&lt;li&gt;I checked if there is no arguments provided. Does the function output the correct messages?
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TEST_CASE("No Arguments provided")
{
    char* list[1] = {"./pgprogram"};
    REQUIRE(checkArguments(1, list) == "Failed arguments provided");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;I checked if true argument is provided. Does the function output correct messages? There are tons of tests relating to arguments version, help, input, output, language,... But I gave 1 example here.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TEST_CASE("Arguments Check")
{
    char* list[2] = {"./pgprogram", "-v"};
    REQUIRE(checkArguments(2, list) == "Potato Generator - Version 0.1");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;In &lt;em&gt;test2.cpp&lt;/em&gt;, I included "HTMLFile.h" and I implemented some tests to check for the HTML File implementations.&lt;/li&gt;
&lt;li&gt;Firstly, I checked if the program prints nothing if no files are provided.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TEST_CASE("Check empty files")
{
    HTMLFile file;
    REQUIRE(file.getTitle() == "");
    REQUIRE(file.getURL() != "");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Secondly, I checked if correct file is input and its URL and title are implemented correctly.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TEST_CASE("Check existing files")
{
    HTMLFile file;
    file.openFile("../Sherlock-Holmes-Selected-Stories/Silver Blaze.txt", "fr");
    REQUIRE(file.getTitle() == "Silver Blaze");
    REQUIRE(file.getURL() != "Silver Blaze.html");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Lastly, of course, I need to check if incorrect file is input, does the program process anything? In this case, nothing is implemented.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TEST_CASE("Check non-existing files")
{
    HTMLFile file;
    file.openFile("../Sherlock-Holmes-Selected-Stories/notafile.txt", "fr");
    REQUIRE(file.getTitle() == "");
    REQUIRE(file.getURL() != "");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;You can take a closer look at all the testing files that I created so far and folder structure in the &lt;a href="https://github.com/kiennguyenchi/potato-generator/commit/b2b5321ccf4ec40e7a14506bd15a348dfd27e8dc"&gt;commit&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Overall, the testing tool is really helpful to test our code and it is worth to implement. But also it is overwhelming to brainstorm all the possibilities that could happen to put into the test.&lt;/p&gt;

</description>
      <category>opensource</category>
    </item>
    <item>
      <title>C++ Static Analysis Tool</title>
      <dc:creator>Kien Nguyen Chi</dc:creator>
      <pubDate>Thu, 04 Nov 2021 20:28:36 +0000</pubDate>
      <link>https://dev.to/kiennguyenchi/c-static-analysis-tool-4f46</link>
      <guid>https://dev.to/kiennguyenchi/c-static-analysis-tool-4f46</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;This week, I work on my Static Site Generator (SSG) - &lt;a href="https://github.com/kiennguyenchi/potato-generator" rel="noopener noreferrer"&gt;Potato Generator&lt;/a&gt;. I plan to implement a source code formatter for my project, which is &lt;a href="https://www.clangpowertools.com/blog/getting-started-with-clang-format-style-options.html" rel="noopener noreferrer"&gt;clang-format&lt;/a&gt; and a linter, which is &lt;a href="https://clang.llvm.org/extra/clang-tidy/" rel="noopener noreferrer"&gt;clang-tidy&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Implement the clang-format
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Using CMD, I install clang-format by npm.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install clang-format
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Then I create .clang-format file by the command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;clang-format.exe -style=llvm -dump-config &amp;gt; .clang-format
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;I download &lt;a href="https://clangpowertools.com/CHANGELOG.html" rel="noopener noreferrer"&gt;Clang Format Editor&lt;/a&gt; to test custom format. We can use this app to modify our format for the code. In this case, I use the default format. The app will show the options with switches to modify format (which is convenient), differences between current source code and formatted source code:
&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%2Fxbbq754rqq7l18qd7lk1.JPG"&gt;
&lt;/li&gt;
&lt;li&gt;I run the editor on the all .cpp files and .h files in my project with style WebKit to format my code.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;clang-format -i -style=WebKit *.cpp *.h
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;If you are using Visual Studio Code, you can:

&lt;ul&gt;
&lt;li&gt;Install &lt;em&gt;clang-format extension&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Use &lt;em&gt;Shift+Alt+F&lt;/em&gt; to format your current file&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  Implement clang-tidy
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;I install linter &lt;a href="https://blog.wholetomato.com/2021/01/08/a-brief-introduction-to-clang-tidy-and-its-role-in-visual-assist/" rel="noopener noreferrer"&gt;clang-tidy&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;After installation, I run the tool by this command on cmd
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;clang-tidy --checks='modernize*, readability*' filename.cpp -- -std=c++17
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;It will show a list of warnings and errors in my code.&lt;/li&gt;
&lt;li&gt;In my situation, it shows that I should replace the return type of &lt;em&gt;string&lt;/em&gt; to &lt;em&gt;auto&lt;/em&gt;, which I do not prefer to do, so I keep that warnings.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;warning: use a trailing return type for this function [modernize-use-trailing-return-type]
    string getURL();
    ~~~~~~ ^
    auto            -&amp;gt; string
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;If you are using Visual Studio Code, you can:

&lt;ul&gt;
&lt;li&gt;Install &lt;em&gt;clang-tidy extension&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;It will automatically read through your file and show errors/warnings&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;You can take a look at by implementation and instructions to build Static Analysis Tool for C++ program with &lt;em&gt;clang-format&lt;/em&gt; and &lt;em&gt;clang-tidy&lt;/em&gt; in my &lt;a href="https://github.com/kiennguyenchi/potato-generator/commit/b5f1015d6f10895d42fb25259d458e5d9312fa32" rel="noopener noreferrer"&gt;commit&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Overall, these tools are extremely helpful to restructure the code in nice format and eliminate all the warnings and errors from the code. It is a useful tool for developers to contribute on other project in open-source world.&lt;/p&gt;

</description>
      <category>opensource</category>
    </item>
    <item>
      <title>Hacktoberfest - Working with Swift</title>
      <dc:creator>Kien Nguyen Chi</dc:creator>
      <pubDate>Thu, 28 Oct 2021 18:04:09 +0000</pubDate>
      <link>https://dev.to/kiennguyenchi/hacktoberfest-working-with-swift-7m</link>
      <guid>https://dev.to/kiennguyenchi/hacktoberfest-working-with-swift-7m</guid>
      <description>&lt;h1&gt;
  
  
  Project Introduction
&lt;/h1&gt;

&lt;p&gt;👉 Since starting of this semester, I took an IOS app development class. I was impressed by how XCode is convenient for the user to build the app interface, it is like dragging and dropping things in Adobe Photoshop.&lt;/p&gt;

&lt;p&gt;👉During the Hacktoberfest month, I wanted to work on an open source app in Swift language to explore how the IOS app truly works in the real world.&lt;/p&gt;

&lt;p&gt;👉The project is about Bookmark containing saved important links with categories for user to read them later. You can take a look at its &lt;a href="https://github.com/ACM-VIT/sticky-links"&gt;GitHub Repo&lt;/a&gt; or my &lt;a href="https://github.com/kiennguyenchi/sticky-links"&gt;Folked Repo&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Project Issue
&lt;/h1&gt;

&lt;p&gt;❓I took an issue to add favorite feature to the app. With the following links display, whenever an user clicks on the bookmark button besides it. It would pin to the top of the list &lt;/p&gt;

&lt;p&gt;👉I spent hours to read through the project for to find where to put my code in, run the Simulator to see how the app works.&lt;/p&gt;

&lt;p&gt;👉I took me a lot of time to complete this project since I don't have a Mac yet, it is inconvenient to work with IOS app because XCode serves Mac user only. I had to borrow a Mac from my friend, installed the Xcode 12GB with my slow Internet connection, wrote the code, ran it, returned to her and borrowed back one day.&lt;/p&gt;

&lt;p&gt;🔗This is my filing &lt;a href="https://github.com/ACM-VIT/sticky-links/issues/2"&gt;Issue&lt;/a&gt; on GitHub.&lt;/p&gt;

&lt;h1&gt;
  
  
  Project Process
&lt;/h1&gt;

&lt;p&gt;I knew that what I have exactly to do. First step, I needed to get the data from the view, the table cell data and its index.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var linkView = sender.superview
while let view = linkView, !(view is UITableViewCell) {
     linkView = view.superview
}
guard let tableCell = linkView as? UITableViewCell else {return}
guard let indexPath = tableView.indexPath(for: tableCell) else {return}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, I needed to remove the link from the current index, which was currently showing on the screen.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let link = self.links[indexPath.row]
self.links.remove(at: indexPath.row)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, I needed to insert it at index 0, because after I added it to the bookmark, it would stay on top of the list.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;self.links.insert(link, at: 0)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In final step, I needed to save my modification and reloaded the interface.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;self.saveLink()
self.tableView.reloadData()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔗This is my &lt;a href="https://github.com/ACM-VIT/sticky-links/pull/32"&gt;Pull Request&lt;/a&gt; on GitHub.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;👉The owner of this repo is so slow in replying, which sometimes inconvenient to me to interact. It may take up to a week for a reply.&lt;/p&gt;

&lt;p&gt;👉Overall, it is fantastic to work on an actual open source IOS app in the real world. I can see some very similar code structures and designing tools that I learnt in class. Wanna keep falling in love with Swift and Xcode, I really need to save money to get a Mac.&lt;/p&gt;

&lt;p&gt;✔️During the Hacktoberfest, I worked with total 4 different programming languages/framework, which would make me so excited about open source programming. I had try Rust, Vue, React and Swift, very unfamiliar to me a month ago, but familiar now.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>swift</category>
    </item>
    <item>
      <title>Implement a Docusaurus Feature</title>
      <dc:creator>Kien Nguyen Chi</dc:creator>
      <pubDate>Thu, 28 Oct 2021 17:32:27 +0000</pubDate>
      <link>https://dev.to/kiennguyenchi/implement-a-docusaurus-feature-35oe</link>
      <guid>https://dev.to/kiennguyenchi/implement-a-docusaurus-feature-35oe</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;This week, I'm working on my Static Site Generator (SSG) - &lt;a href="https://github.com/kiennguyenchi/potato-generator"&gt;Potato Generator&lt;/a&gt; to add a new feature for it.&lt;/p&gt;

&lt;p&gt;I was introduced a new tool, which is Docusaurus. It has several useful functionalities that can be used to implement a website such as supporting React components, Themes, Plugins, Markdown support,... It took me a while to download the Docusaurus app, tried to publish it on my own and explored the features. It was interesting, you can take a look at my &lt;a href="https://kiennguyenchi.github.io/knc-docusaurus-website/index.html"&gt;Docusaurus Demo Website&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;I picked Syntax Hightlighting for code block to implement into my SSG. For many programmers, it is needed to have this function in your SSG because every programmer would have the code block in any of their documents.&lt;/p&gt;

&lt;h1&gt;
  
  
  Process
&lt;/h1&gt;

&lt;p&gt;I broke down the tasks into 2 issues to solve: Identify code block and style for code block.&lt;/p&gt;

&lt;p&gt;In order to identify the code block, I wrote code to notice the appearance of code block when I write the output to HTML file. Whenever there is an open syntax of code block, I would put the code following until finding close syntax of code block into a div container.&lt;/p&gt;

&lt;p&gt;This is the result after identifying the code block and write them to HTML.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tYkIVQaS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0tu2r09mq6w9vvuoucdv.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tYkIVQaS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0tu2r09mq6w9vvuoucdv.JPG" alt="" width="880" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After that, I changed the style for the div container to have black background, white text with normal fonts. It would look more similar like a code block.&lt;/p&gt;

&lt;p&gt;Here is the result after modifying the style.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H_edXmzJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h5sg1tedywhdpncl3czd.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H_edXmzJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h5sg1tedywhdpncl3czd.JPG" alt="" width="880" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Whenever there is a code block input into my program, it would be exported to HTML in the following format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div style='background-color: black; color: white;'&amp;gt;

&amp;lt;p style='font-family:Consolas;'&amp;gt; int main(){&amp;lt;/p&amp;gt;
&amp;lt;p style='font-family:Consolas;'&amp;gt; cout &amp;lt;&amp;lt; "Hello World";&amp;lt;/p&amp;gt;
&amp;lt;p style='font-family:Consolas;'&amp;gt; }&amp;lt;/p&amp;gt; 

&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Overall, I felt interesting to implement such an useful feature like this. I would like to improve my SSG with more useful functionalities like this in the future.&lt;/p&gt;

&lt;p&gt;Looking at my &lt;a href="https://github.com/kiennguyenchi/potato-generator/commit/bdc9ca305d581675a9c972e86863e96b7a4596fb"&gt;commit&lt;/a&gt; of new code block feature on SSG.&lt;/p&gt;

</description>
      <category>opensource</category>
    </item>
    <item>
      <title>Hacktoberfest - Working with React</title>
      <dc:creator>Kien Nguyen Chi</dc:creator>
      <pubDate>Tue, 26 Oct 2021 03:28:39 +0000</pubDate>
      <link>https://dev.to/kiennguyenchi/hacktoberfest-working-with-react-4ihd</link>
      <guid>https://dev.to/kiennguyenchi/hacktoberfest-working-with-react-4ihd</guid>
      <description>&lt;h1&gt;
  
  
  Project Introduction
&lt;/h1&gt;

&lt;p&gt;👉During the Hacktoberfest month, I worked a project using React Framework. It has been a long time since I coded React framework, because my concentration is not on web development too much. It is interesting to recall the knowledge from Web class in college.&lt;/p&gt;

&lt;p&gt;👉The project is a website about React component library based on styled components. You can take a look at its &lt;a href="https://github.com/jpalacio0612/react-neon-ui-demo"&gt;GitHub Repo&lt;/a&gt; or my &lt;a href="https://github.com/kiennguyenchi/react-neon-ui-demo"&gt;Folked Repo&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Project Issue
&lt;/h1&gt;

&lt;p&gt;❓I took an issue on this project: which is I need to create a new component named TextArea with new web page, take the component information and put it on the website.&lt;/p&gt;

&lt;p&gt;👉It has been a while since I worked with React App so it took me a bit time of reading at first to remind me of how React components work. Also, the project has a very clear structure. I read the other components and it was very straight forward to make me understand how should I implement my component.&lt;/p&gt;

&lt;p&gt;🔗This is my filing &lt;a href="https://github.com/jpalacio0612/react-neon-ui-demo/issues/18"&gt;Issue&lt;/a&gt; on GitHub.&lt;/p&gt;

&lt;h1&gt;
  
  
  Project Process
&lt;/h1&gt;

&lt;p&gt;This is the website before adding my component.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---2wkErT4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fw64t32vwtlckej4jjuc.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---2wkErT4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fw64t32vwtlckej4jjuc.JPG" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For starting, I work with basic thing from React App by adding Route to app.js.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { TextAreaDemo } from './components/TextAreaDemo'
//code
&amp;lt;Route exact path='/textarea' component={TextAreaDemo} /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, I added my component to the navigation bar by adding my component to routes array.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const routes = [
//some routes
  { url: '/textarea', name: 'TextArea' }
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, I created file for my React component with this format.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// import necessary packages
import { TextArea } from 'react-neon-ui'

export const TextAreaDemo = () =&amp;gt; {
// include some constant databases
  return (
// HTML with React component
  )
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is the final result after implementing the website.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Yf9x1py9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vpxu5agb1ebl2j853h6m.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Yf9x1py9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vpxu5agb1ebl2j853h6m.JPG" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔗This is my &lt;a href="https://github.com/jpalacio0612/react-neon-ui-demo/pull/20"&gt;Pull Request&lt;/a&gt; on GitHub.&lt;/p&gt;

&lt;p&gt;👉The owner of this repo is nice. He corrects me right away when I had problem with updating packages. He showed me steps by steps how to fix my issues. I'm really thankful.&lt;/p&gt;

&lt;p&gt;✔️Overall, it is great to work on React that I have not usually used for a long time during Hacktoberfest. Recalling knowledge from WEB422 in Seneca College, I think that React is a really powerful and pretty framework that web has and I'm looking forward to use it frequently in the future.&lt;/p&gt;

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