<?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: Yuan-Hsi Lee</title>
    <description>The latest articles on DEV Community by Yuan-Hsi Lee (@yuanleemidori).</description>
    <link>https://dev.to/yuanleemidori</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%2F470970%2F28c3f1bd-faee-4bb3-b3dd-d06a6b4c30ab.png</url>
      <title>DEV Community: Yuan-Hsi Lee</title>
      <link>https://dev.to/yuanleemidori</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yuanleemidori"/>
    <language>en</language>
    <item>
      <title>My last telescope post as a student (hopefully)</title>
      <dc:creator>Yuan-Hsi Lee</dc:creator>
      <pubDate>Sat, 24 Apr 2021 04:46:32 +0000</pubDate>
      <link>https://dev.to/yuanleemidori/my-last-telescope-post-as-a-student-hopefully-5fg2</link>
      <guid>https://dev.to/yuanleemidori/my-last-telescope-post-as-a-student-hopefully-5fg2</guid>
      <description>&lt;p&gt;This week, I still work with user accessibility. The footer has 2 corners that didn't meet the AA/AAA level of WCAG, &lt;a href="https://github.com/Seneca-CDOT/telescope/issues/2049"&gt;contributor card&lt;/a&gt;, &lt;a href="https://github.com/Seneca-CDOT/telescope/issues/2168"&gt;search result message&lt;/a&gt;, and &lt;a href="https://github.com/Seneca-CDOT/telescope/issues/2050"&gt;slack icon&lt;/a&gt;. I want to talk about the &lt;strong&gt;slack icon&lt;/strong&gt; one.&lt;/p&gt;

&lt;p&gt;The slack icon we had was a &lt;code&gt;svg&lt;/code&gt; file included in the project. We implemented it as a &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; like this,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;img&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;slackLogo&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;alt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;logo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;20&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;20&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What I needed to do is to change the color filling of this icon. This can be done by changing the &lt;code&gt;fill&lt;/code&gt; value of &lt;code&gt;svg&lt;/code&gt; element. The solution I wanted to try is to &lt;a href="https://create-react-app.dev/docs/adding-images-fonts-and-files/#adding-svgs"&gt;make this svg file as a react component&lt;/a&gt; so that I can configure the &lt;code&gt;fill&lt;/code&gt; value. However, I &lt;a href="https://stackoverflow.com/questions/44717164/unable-to-import-svg-files-in-typescript"&gt;wasn't able to import the svg file in typescript&lt;/a&gt;. I ended up using the easier way which is using &lt;code&gt;react-icon&lt;/code&gt; and find the similar slack icon so that the filling color can be configured. I'd love to try more with the &lt;em&gt;making svg a react component&lt;/em&gt; next time with &lt;a href="https://react-svgr.com/"&gt;SVGR&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;It's been 4 months working with telescope team, and I'm very grateful with the chance of working with a group of amazing people. &lt;/p&gt;

&lt;p&gt;Thanks to Dave for the astonishing lectures and leading, I'm so lucky to have your courses and to learn from you in my last year of college. Working in web development is totally unexpected to me, but you're one of the people who make me enjoy this field more than yesterday.&lt;/p&gt;

&lt;p&gt;Thanks to Anton who helped me with git and your blog posts are always informative! Thanks to Chris, Royce, Abdul, Ilya, Tony, Huy, and Mo. It's a bit of overwhelming to work with a team that all people are more experienced and smarter than me, but it is lucky that I get to learn from you.&lt;/p&gt;

&lt;p&gt;Thanks to Pedro, you're the first person who talked to me in the team and have always been supportive and kind to me! &lt;/p&gt;

&lt;p&gt;I'm not good at saying good-bye, so I'm no gonna. But I want to tell everyone in the project that I truly appreciate everything you've done. It was amazing working with you all, wish you all the best :) ū-iân tsài siong-huē! (Meaning: We'll meet up again when the timing is right.) (This is Taiwanese, my mother language)&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/I_izvAbhExY"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>react</category>
      <category>typescript</category>
      <category>opensource</category>
      <category>a11y</category>
    </item>
    <item>
      <title>Keep working on accessibility</title>
      <dc:creator>Yuan-Hsi Lee</dc:creator>
      <pubDate>Sun, 18 Apr 2021 19:00:46 +0000</pubDate>
      <link>https://dev.to/yuanleemidori/keep-working-on-accessibility-5176</link>
      <guid>https://dev.to/yuanleemidori/keep-working-on-accessibility-5176</guid>
      <description>&lt;p&gt;Keep working with user accessibility this week. A simple change on our &lt;a href="https://github.com/Seneca-CDOT/telescope/pull/2152"&gt;search help&lt;/a&gt;, the old font color is hard to read with the background color. I also make the title of the search help bolder and have some padding to make it more like a title.&lt;/p&gt;

&lt;p&gt;Meanwhile, Royce is working with &lt;a href="https://github.com/Seneca-CDOT/telescope/pull/2163"&gt;improve search help logic&lt;/a&gt;. The search help was only appeared before the user search anything. However, when the user can't find any result after the searching, it is possible that she could use some search help to get the wanted searching result. I believe this change of search help makes more sense and can be more helpful for the user.&lt;/p&gt;

&lt;p&gt;When I was testing this PR, I found another issue related to user accessibility. (I thought I've been checking all corners already) There is a line of message telling the user "No results found" or "No more posts". This line of message in the search page has black color in both light and dark mode. Therefore, this line can't be seen in dark mode.&lt;/p&gt;

&lt;p&gt;The issues that I've been working but not able to finish is to &lt;a href="https://github.com/Seneca-CDOT/telescope/issues/2050"&gt;improve contrast ratio of slack icon&lt;/a&gt;. This &lt;a href="https://github.com/Seneca-CDOT/telescope/blob/master/src/web/public/slack-logo.svg"&gt;slack icon&lt;/a&gt; is a svg file that we include in our repo. The color is white, and I'm not able to convert or fill in a darker color into it. This is my first time working with svg, the team gave me some suggestions in the weekly meeting, I will try to find out a fine solution to it!&lt;/p&gt;

</description>
      <category>ux</category>
      <category>opensource</category>
      <category>react</category>
      <category>a11y</category>
    </item>
    <item>
      <title>First Attempt at Intersection Observer</title>
      <dc:creator>Yuan-Hsi Lee</dc:creator>
      <pubDate>Mon, 12 Apr 2021 01:15:16 +0000</pubDate>
      <link>https://dev.to/yuanleemidori/first-attempt-at-intersection-observer-129i</link>
      <guid>https://dev.to/yuanleemidori/first-attempt-at-intersection-observer-129i</guid>
      <description>&lt;p&gt;Thanks to Pedro, I learned a cool API this week and applied it in our favorite project &lt;a href="https://github.com/Seneca-CDOT/telescope"&gt;telescope&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I was assigned an issue to accomplish the new banner design, which is to &lt;a href="https://github.com/Seneca-CDOT/telescope/issues/2041"&gt;make the navbar appear only when the user scroll to the timeline&lt;/a&gt;. In other word, the navbar should not be showed in the banner, but, it should be showed when the first post is at the top of the screen.&lt;/p&gt;

&lt;p&gt;To accomplish this feature, I need to track the element in the current screen. The API that Pedro introduced to me is &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API"&gt;Intersection Observer&lt;/a&gt;. The basic idea of this API is to &lt;strong&gt;observe&lt;/strong&gt; the element in the viewport. The function &lt;code&gt;isIntersecting()&lt;/code&gt; tells you if the element that you're observing is still in the viewport. It doesn't have to 100% in the screen or 100% out of the screen, the observed percentage can be configured as well.&lt;/p&gt;

&lt;p&gt;Therefore, since our goal is to show the navbar when the user scrolls to the timeline, and the first post is at the top of the screen. In other word, the navbar should be showed when the banner is totally gone. We put the observer to our banner.&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://github.com/Seneca-CDOT/telescope/pull/2094"&gt;this PR&lt;/a&gt;, I move &lt;code&gt;&amp;lt;navbar&amp;gt;&lt;/code&gt; into &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt;, so that I can separate it from the &lt;code&gt;&amp;lt;Banner&amp;gt;&lt;/code&gt;. Moreover, to add props for &lt;code&gt;&amp;lt;Banner&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;navbar&amp;gt;&lt;/code&gt; in order to share the result of intersection observer. After moving the position of navbar, I also need to add navbar to about page and search page, because all pages used to share the navbar when it was in the banner header. The other changes that needed to make is the CSS styling of navbar in about page. In about page, &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; uses a certain color from our palettes. Once we move navbar to about page, the navbar will be applied with these color because navbar icons all have &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; in their links. By adding another styling setting to &lt;code&gt;&amp;lt;svg&amp;gt;&lt;/code&gt;, the color can be overridden. I'm still thinking if there is a better way to do so, since the original styling for navbar should not be overridden, and the solution should not be overridden to correct.&lt;/p&gt;

&lt;p&gt;It was an amazing experience to work with something new. Thanks to Pedro and Dave's help and suggestion in this PR! The initial thought was actually using React context. However, it &lt;em&gt;is&lt;/em&gt; too complicated to use, and since we only need to share the state with one component, we can do it without using context. But, I'm definitely gonna check out more practices of React context.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>css</category>
      <category>ui</category>
      <category>intersectionobserver</category>
    </item>
    <item>
      <title>Prepare for telescope 2.0</title>
      <dc:creator>Yuan-Hsi Lee</dc:creator>
      <pubDate>Tue, 06 Apr 2021 04:10:59 +0000</pubDate>
      <link>https://dev.to/yuanleemidori/prepare-for-telescope-2-0-em8</link>
      <guid>https://dev.to/yuanleemidori/prepare-for-telescope-2-0-em8</guid>
      <description>&lt;p&gt;This week, I've been working mostly with UI changes, including user accessibility and investigating an &lt;a href="https://github.com/Seneca-CDOT/telescope/issues/2041"&gt;issue in landing page for UI 2.0&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  User accessibility
&lt;/h3&gt;

&lt;p&gt;Use accessibility is one thing that I want to focus on telescope 2.0 release. There are many rules to follow to improve our user accessibility, and I started with the obvious one, which is checking the color contrast and size of all our pages and components. I've found &lt;a href="https://github.com/Seneca-CDOT/telescope/issues/2048"&gt;the links color in dark mode&lt;/a&gt;, &lt;a href="https://github.com/Seneca-CDOT/telescope/issues/2049"&gt;contribution card in dark mode&lt;/a&gt;, &lt;a href="https://github.com/Seneca-CDOT/telescope/issues/2051"&gt;search help&lt;/a&gt;, &lt;a href="https://github.com/Seneca-CDOT/telescope/issues/2050"&gt;slack icon&lt;/a&gt; can be improved. Also, since I'm working with mostly color styling, I also start to update the colors in our dark and light mode palette for better management.&lt;/p&gt;

&lt;p&gt;Royce will be working with me on user accessibility, looking forward to working with him!&lt;/p&gt;

&lt;h3&gt;
  
  
  Landing page for UI 2.0
&lt;/h3&gt;

&lt;p&gt;In Pedro's UI 2.0 project, he also plans to modify our banner. I'm assigned the part of moving nav bar from banner to timeline. The goal is to remove the nav bar from the banner, but show the nav bar when the user scrolls to timeline (posts). I've considered different solutions so far,&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Move nav bar to timeline (posts) component&lt;br&gt;
Currently, nav bar is above &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt; so that we can always see it in the top-right corner of the page.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Only display nav bar when the timeline component touches the top of the screen&lt;br&gt;
This one is challenging for me. I haven't worked with element positions with screen before, not sure how much time do I need to investigate it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make the nav bar component invisible in banner&lt;br&gt;
If we don't want it to be showed on the banner area, why don't we make it invisible in that area? For example, make the navbar element "under" the banner element?&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Developer experience
&lt;/h3&gt;

&lt;p&gt;As mentioned in previous post(s), I've been updating documents to follow the changes in telescope (mostly microservice). I closed my old PR for adding a new, temporary document for microservice transition. Instead, I go back to existing documents, and update them. Start with &lt;a href="https://github.com/Seneca-CDOT/telescope/pull/2081"&gt;environment-setup.md&lt;/a&gt;, I believe there are lots of documents can be updated.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>User Accessibility and Developer Experience</title>
      <dc:creator>Yuan-Hsi Lee</dc:creator>
      <pubDate>Sun, 28 Mar 2021 03:36:24 +0000</pubDate>
      <link>https://dev.to/yuanleemidori/user-accessibility-and-developer-experience-251g</link>
      <guid>https://dev.to/yuanleemidori/user-accessibility-and-developer-experience-251g</guid>
      <description>&lt;p&gt;Telescope 1.9 release is shipped! Hooray!&lt;/p&gt;

&lt;p&gt;In this week, I gain some new experience in user experience and developer experience. I'll explain them in this post.&lt;/p&gt;

&lt;h4&gt;
  
  
  UX
&lt;/h4&gt;

&lt;p&gt;As discussed in the &lt;a href="https://dev.to/yuanleemidori/what-are-users-thinking-1jk9"&gt;last post&lt;/a&gt;, Pedro and I want to handle the title issue. The old title has big font size which causes the title wrapped easily, and will need to expand the title to 2 lines, which is what we want to avoid.&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://github.com/Seneca-CDOT/telescope/pull/2006"&gt;this PR&lt;/a&gt;, I shrunk the title size to make titles showed in one line (in most cases), and with smaller space used.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Before&lt;/em&gt;:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UiuBsQ-_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v6nyrtfn98l6htkn36gd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UiuBsQ-_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v6nyrtfn98l6htkn36gd.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;After&lt;/em&gt;:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6ng_ZhSC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zwqihww6pvvmea1a9pdu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6ng_ZhSC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zwqihww6pvvmea1a9pdu.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This PR also solved the &lt;a href="https://github.com/Seneca-CDOT/telescope/issues/1917"&gt;letter-spacing issue on mobile&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Before&lt;/em&gt;:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bBiqakJh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hiqkoh3h08646lpei388.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bBiqakJh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hiqkoh3h08646lpei388.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;After&lt;/em&gt;:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--n8VCybTF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q6al3hhcypgdv1bkiux5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--n8VCybTF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q6al3hhcypgdv1bkiux5.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The other 2 PRs I want to mention is to improve user accessibility. We have an amazing dark mode to switch, but some font/element colors does not meet WCAG AAA rating, or even AA level.&lt;/p&gt;

&lt;p&gt;Our old color choosing for links in dark mode looks like this,&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Z6LIv08u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hrh9l2h5iuzpt4lml6zo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Z6LIv08u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hrh9l2h5iuzpt4lml6zo.png" alt="image"&gt;&lt;/a&gt;&lt;br&gt;
The gray one is visited link and the light blue one is unvisited link. The gray one is hard to read, but when I check the contrast ratio, the blue one also has AA rating instead of AAA.&lt;/p&gt;

&lt;p&gt;There are many colors I can choose to meet the required contrast ratio. However, I want it to be more consistent with light mode (the default mode). In light mode, unvisited link has blue color, and visited link has the color like dark red-violet.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kXFn4b86--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bsajdqe8jhtiltx1vyu7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kXFn4b86--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bsajdqe8jhtiltx1vyu7.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Therefore, I stick with blue for unvisited link in dark mode (but make it brighter to meet AAA rating) and change gray to a pale pink with a hint of purple.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--O4ubfn_o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1qvfemjlr3ecd5hy0v3r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--O4ubfn_o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1qvfemjlr3ecd5hy0v3r.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/Seneca-CDOT/telescope/pull/2029"&gt;other PR&lt;/a&gt; is to change the search bar color in dark mode. There is no config for dark mode &lt;strong&gt;hovered&lt;/strong&gt; search bar. Therefore, the color is using the same one with light mode. I changed the color based on the same design pattern with light mode (same color with background but use border to tell apart).&lt;/p&gt;

&lt;p&gt;These couple of weeks gave me lots of chance to work with user accessibility and I enjoy it. I took over another &lt;a href="https://github.com/Seneca-CDOT/telescope/issues/1608"&gt;user accessibility issue&lt;/a&gt; and will be discussing with other developers to file more specific improvement issues.&lt;/p&gt;

&lt;h4&gt;
  
  
  DX
&lt;/h4&gt;

&lt;p&gt;When I was shipping &lt;a href="https://github.com/Seneca-CDOT/telescope/pull/2018"&gt;this PR&lt;/a&gt; to bring back our admin button in &lt;a href="https://github.com/Seneca-CDOT/telescope/projects/21#card-57567002"&gt;UI2.0&lt;/a&gt;, I found that the old method to run login server does not work. The reason is that we're in the transition to change to microservice. There are easier ways to start the needed services separately.&lt;/p&gt;

&lt;p&gt;After talked to professor Dave, he suggested me to write a new document to help other developers handling these environment setups. (Since this is the second time I asked him about it)&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://github.com/Seneca-CDOT/telescope/pull/2020"&gt;this PR&lt;/a&gt;, I gather different scenarios and explain how to do env setup and explain why we do that. It is challenging for me since I need to read other people's code and to understand. This PR is still in progress, I hope I can get more people to review it and get it merged!&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>react</category>
      <category>css</category>
    </item>
    <item>
      <title>What are users thinking</title>
      <dc:creator>Yuan-Hsi Lee</dc:creator>
      <pubDate>Sun, 21 Mar 2021 00:26:46 +0000</pubDate>
      <link>https://dev.to/yuanleemidori/what-are-users-thinking-1jk9</link>
      <guid>https://dev.to/yuanleemidori/what-are-users-thinking-1jk9</guid>
      <description>&lt;p&gt;This week, Pedro discussed his thoughts with me about the title design in &lt;a href="https://github.com/Seneca-CDOT/telescope"&gt;telescope&lt;/a&gt;. He wants to make the title section smaller.&lt;/p&gt;

&lt;p&gt;This is how telescope handling the post title,&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_dBZ29GI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9ry9kweztzu0atabt1ml.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_dBZ29GI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9ry9kweztzu0atabt1ml.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
The title stick to the top when you scroll up, so that you can always see the title while you keep scrolling down and reading the post.&lt;br&gt;
If the title length is too long, we wrapped it with &lt;code&gt;...&lt;/code&gt;; and it can be expanded after user click the title.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MunXgjAz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/29gwa0bizqfq1or1jhc0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MunXgjAz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/29gwa0bizqfq1or1jhc0.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, once the title is expanded, the title section is twice big. It'll occupy too much space of the screen.&lt;/p&gt;

&lt;p&gt;It's smart to find out this issue. I have little knowledge of user experience, so I never figure this out. This is a great chance for me to dig into this field.&lt;/p&gt;




&lt;p&gt;The solution Pedro came up is to &lt;strong&gt;dynamically adjust font size&lt;/strong&gt;. In the other word, when the title overflowed, the font-size will be adjusted to be smaller and able to fit the div element.&lt;/p&gt;

&lt;p&gt;We've tried different approaches to make it work, but none of them came with an expected result. Therefore, we were thinking removing the sticky title feature. As Dave suggested, when we're making changes on the UI design, we should always consider user's "habit". For example, in other similar kinds of websites, how do they design this feature? Users usually get used to one kind of design in a specific type of website. There, browsing other blog-post websites about how they handle a long title is a good way to start.&lt;/p&gt;

&lt;p&gt;In medium and dev.to, there is no sticky title design. The title goes to the second or the third line if it's too long. However, it's not the same as our telescope. We have only one timeline, gathering all the posts (&lt;strong&gt;the whole post&lt;/strong&gt;, without "read more" feature) from &lt;strong&gt;different authors&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;In the meeting, some team members said that they don't really need the title once they start to read one post; but some do. The team came up with a solution which is to make the font-size of title &lt;em&gt;smaller&lt;/em&gt; so that in most cases, the title will remain one line. Our title font-size is about 3 times bigger than the content font-size. To compare with some similar websites, they're doing much smaller size for their title.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uvmImUJs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zlyvkaw52suqvibr5k9y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uvmImUJs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zlyvkaw52suqvibr5k9y.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Better? Can you still tell this is a title of the post?&lt;/p&gt;




&lt;p&gt;Biweekly release makes us keep shipping changes. Sometimes, there is no &lt;strong&gt;perfect&lt;/strong&gt; solution for one issue. But, shipping changes in each release makes our project better and better, even if it's just a small change in every release.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>design</category>
      <category>ux</category>
    </item>
    <item>
      <title>Telescope 1.8 Release</title>
      <dc:creator>Yuan-Hsi Lee</dc:creator>
      <pubDate>Sat, 13 Mar 2021 02:10:47 +0000</pubDate>
      <link>https://dev.to/yuanleemidori/telescope-1-8-release-6j</link>
      <guid>https://dev.to/yuanleemidori/telescope-1-8-release-6j</guid>
      <description>&lt;p&gt;Release 1.8 for telescope is quite of a special one, because GitHub was down in our scheduled release time. According to our experienced professor, this is the first time he has ever seen GitHub down like this. I assume I'm lucky to see this in my first year of open-source.&lt;/p&gt;

&lt;p&gt;Therefore, we did the PR review through video call. It was surprisingly efficient. We fixed our PRs and tried to get them passed to 1.8 release.&lt;/p&gt;




&lt;p&gt;The issue I want to talk about is &lt;a href="https://github.com/Seneca-CDOT/telescope/pull/1911"&gt;add the avatar component&lt;/a&gt;. The plan for avatar is to integrate with GitHub so that we can get users' profile picture. Before that, we still need a temporary avatar to replace the blank circle like the below picture.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oL9Rq8Bd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n23gm0z6np4ufd6h7jvp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oL9Rq8Bd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n23gm0z6np4ufd6h7jvp.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jIxyr5MX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nlj4tkp4zm7ocstmfsfn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jIxyr5MX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nlj4tkp4zm7ocstmfsfn.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pedro suggested the &lt;a href="https://evergreen.segment.com/components/avatar/"&gt;avatar component from evergreen&lt;/a&gt;. But Dave wanted to stick with what we have, which is material-UI, there is also &lt;a href="https://material-ui.com/components/avatars/#avatar"&gt;avatar component from material-UI&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;However, material-Ui avatar component only provide a circle, it doesn't generate initials with the given name value, we'll need to generate it by ourselves. Therefore, my task is to wrap the material-UI avatar component with customize functionalities.&lt;/p&gt;

&lt;p&gt;We want to make our avatar component to accept author name or image value. Image value is preferred, but if there is no image value, we'll take name value instead, and generate the initials for the avatar.&lt;/p&gt;

&lt;p&gt;I want to talk about how to generate initials. I checked evergreen's avatar component code, it actually generates initials by the first 2 words in the name. It might work for most cases since most people have 1 word for first name and 1 word for last name (e.g. Piper Chapman). However, there are still some people having more than 2 words in there name, it could be a long first name with multiple words, or middle name.&lt;/p&gt;

&lt;p&gt;The other problem is, should we use space or hyphen to separate the words in a name? This is a comment I got in my PR. Personally, I'd use space instead of hyphen. Hyphen is more like linking words to one part of name.&lt;/p&gt;

&lt;p&gt;My initials generator code looks like this,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;initials&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                     &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;splitName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
                     &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; 
                     &lt;span class="nx"&gt;splitName&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                     &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&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 generator will separate words in names by space, and ignore the words other than first name and last name. &lt;code&gt;splitName&lt;/code&gt; represents the current value, &lt;code&gt;i&lt;/code&gt; represents the index of it, and &lt;code&gt;arr&lt;/code&gt; represent the whole array of splitted names. &lt;code&gt;i === 0&lt;/code&gt; takes care of the first word of the name, and &lt;code&gt;i + 1 === arr.length&lt;/code&gt; takes care of the last word of the name. For example, my friend Abu from OSD600 has 5 words in his name (Abu Zayed Kazi Masudan Nabi). His initials will be AN, instead of AZ. And for me, my name is Yuan-Hsi Lee, there is a hyphen in my first name to link 2 syllables, therefore, my initials will be YL instead of YH.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RcRfW5wy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k6xrbh7os4sg0imfwn3h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RcRfW5wy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k6xrbh7os4sg0imfwn3h.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YbAti15h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/96wyqv7nep3gyzpwzhx9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YbAti15h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/96wyqv7nep3gyzpwzhx9.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Above are how the name initials avatar look like.&lt;/p&gt;

&lt;p&gt;The other PR which is related with this one is to &lt;a href="https://github.com/Seneca-CDOT/telescope/pull/1923"&gt;centre the initials text&lt;/a&gt;. Somehow, this font makes the text slightly toward the top. Thanks to Anton, Ilya and Minh's help, the puzzle is solved and the solution is made.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>javascript</category>
      <category>react</category>
      <category>css</category>
    </item>
    <item>
      <title>Telescope 1.8 Release</title>
      <dc:creator>Yuan-Hsi Lee</dc:creator>
      <pubDate>Sat, 06 Mar 2021 03:18:48 +0000</pubDate>
      <link>https://dev.to/yuanleemidori/telescope-1-8-release-2ho0</link>
      <guid>https://dev.to/yuanleemidori/telescope-1-8-release-2ho0</guid>
      <description>&lt;p&gt;After midterm week and study week, it's time to plan for the 1.8 release of telescope. In this post, I want to talk about my plans and the projects that I'm looking forward to seeing them be implemented in the release.&lt;/p&gt;




&lt;p&gt;In the last release, I was working on updating dependencies and the auto-update tools including Renovate and dependabot. After working with that, I started to have an interest in GitHub CI/CD, and plan to learn to write GitHub action.&lt;/p&gt;

&lt;p&gt;In OSD600 (the first open-source course that I took in Winter 2020), we implemented GitHub action workflow to apply code formatter and linter to our repo by selecting template &lt;code&gt;.yml&lt;/code&gt; file to create our needed actions.&lt;/p&gt;

&lt;p&gt;When working with dependabot, it also uses &lt;code&gt;.yml&lt;/code&gt; file to implement GitHub actions workflow. &lt;/p&gt;

&lt;p&gt;After introducing dependabot, the PR that was generated by dependabot is a bit of confusing for contributor. For example, what should we do for the PR? How to test it? Isn't the major bumping to risky? What to do if the bumping causes test failure or error?&lt;/p&gt;

&lt;p&gt;Therefore, I wrote a &lt;a href="https://github.com/Seneca-CDOT/telescope/pull/1825"&gt;document&lt;/a&gt; to explain a simple workflow for handling dependabot PRs.&lt;/p&gt;

&lt;p&gt;However, it will be more convenient to append the documentation &lt;strong&gt;with&lt;/strong&gt; the PR so that contributors can read the document when they're reviewing the PR.&lt;/p&gt;

&lt;p&gt;Currently, it is &lt;a href="https://github.com/dependabot/dependabot-core/issues/2091"&gt;not possible to customize the description&lt;/a&gt; of dependabot PR. Therefore, I tried to append a comment with the link of dependabot documentation whenever the dependabot PR is created.&lt;/p&gt;




&lt;p&gt;The other challenge for me in release 1.8 is about UI 2.0. Thanks for my team member &lt;a href="https://pedrofonsecadev.medium.com/"&gt;Pedro&lt;/a&gt; assigning me a CSS and JS involved issue. The issue is to &lt;a href="https://github.com/Seneca-CDOT/telescope/issues/1810"&gt;adjust font-size dynamically in order to fit the title div size&lt;/a&gt;. For example, if the default font-size causes the title overflow (which means the title is too long), the title's font-size should be set to smaller size in order to display the whole title with any wrapping. This is a very interesting issue. After research, in order to adjust the font-size by character number, the scrollHeight and the clientHeight will be involved. By comparing these 2 value, we can get the result of if the text is too long, then, we adjust it's font-size, until the text (title) can be fully displayed.&lt;/p&gt;

&lt;p&gt;Currently, I'm trying different plug-ins and to write a function myself. Hopefully, I can finish this feature by release 1.8.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>github</category>
      <category>css</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Update Dependencies by Human and Dependabot</title>
      <dc:creator>Yuan-Hsi Lee</dc:creator>
      <pubDate>Sun, 21 Feb 2021 21:23:28 +0000</pubDate>
      <link>https://dev.to/yuanleemidori/update-dependencies-by-human-and-dependabot-5b4d</link>
      <guid>https://dev.to/yuanleemidori/update-dependencies-by-human-and-dependabot-5b4d</guid>
      <description>&lt;p&gt;Last week, we brought a new member, dependabot, to our project. Everything looks great, and he did his job perfectly. However, due to the large amount of dependency updating PRs (approximately 40 PRs was created when we added dependabot that day) and the automatic rebase feature, all the PRs sent by dependabot keep rebasing whenever there is a new PR merged to master branch. This unfortunately broke our CI, and we had no choice to let him leave.&lt;/p&gt;

&lt;p&gt;Since dependabot left, I &lt;a href="https://dev.to/yuanleemidori/package-version-update-or-not-update-16d8"&gt;got my old job back&lt;/a&gt;. I manually updated about 35 outdated packages. Surprisingly, most of them did not break a thing in our project, even the major ones. I follow these steps to update dependencies,&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Read &lt;code&gt;CHANGELOG.md&lt;/code&gt; or release note. This will help you to have basic understanding of the new version of packages&lt;/li&gt;
&lt;li&gt;update the dependency with &lt;code&gt;npm i &amp;lt;package-name&amp;gt;@latest&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;run test units and look into fails if any. The knowledge from step 1 is helpful here.&lt;/li&gt;
&lt;li&gt;if tests are all passed, run the application make sure all the functionalities are as good as old time&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There was only one dependency did pass the test, which is &lt;a href="https://github.com/felixmosh/bull-board"&gt;bull-board&lt;/a&gt;. Our old version was &lt;code&gt;0.9.0&lt;/code&gt; and the latest version is &lt;code&gt;1.3.1&lt;/code&gt;. Version &lt;code&gt;0.9.0&lt;/code&gt; is not only outdated, but also cause a warning because of its dependency, highlight.js. Version &lt;code&gt;0.9.0&lt;/code&gt; of bull-board uses version 9 highlight.js. Therefore, even if we have updated our highlight.js to version 10+, the highlight.js in bull-board is still version 9 and causes the warning.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Verion 9 of Highlight.js has reached EOL.  It will no longer
  be supported or receive security updates in the future.
  Please upgrade to version 10 or encourage your indirect
  dependencies to do so.

  For more info:

  https://github.com/highlightjs/highlight.js/issues/2877
  https://github.com/highlightjs/highlight.js/blob/master/VERSION_10_UPGRADE.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Therefore, this update of &lt;code&gt;bull-board&lt;/code&gt; is critical.&lt;/p&gt;

&lt;p&gt;However, from &lt;code&gt;bull-board 0.9.0&lt;/code&gt; to &lt;code&gt;1.3.0&lt;/code&gt;, there are some major changes, such as they switch to typeScript from JavaScript. These changes from newer version didn't pass our tests.&lt;/p&gt;

&lt;p&gt;Here are the changes I made,&lt;/p&gt;

&lt;p&gt;1.Include &lt;code&gt;BullAdaptor&lt;/code&gt; due to the change of API&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// okay with old version; not okay with newer version&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;setQueues&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bull-board&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;setQueues&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// fit with new version, new API&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;setQueues&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;BullAdapter&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bull-board&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;setQueues&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;BullAdapter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;)]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2.Change middleware&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// old&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;UI&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bull-board&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/queues&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;protectAdmin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;UI&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// new&lt;/span&gt;
&lt;span class="c1"&gt;// router: bullBoardRouter is to solve the naming conflict with router from expressjs&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;router&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;bullBoardRouter&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bull-board&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/queues&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;protectAdmin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;bullBoardRouter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eventually, I updated all the outdated dependencies before &lt;a href="https://github.com/Seneca-CDOT/telescope/releases/tag/1.7.0"&gt;release 1.7&lt;/a&gt;. Release 1.7 is also where we get rid of Gatsby front-end and use Nextjs front-end, which is quite a meaningful release. I'm glad we can have a fresh start in this release with new front-end and all dependencies updated.&lt;/p&gt;

&lt;p&gt;After Anton's modification of dependabot config, dependabot's PR limit has been narrowed down to one from a package file. Moreover, the automatic rebase feature is turned off. Even though this will bring us more work to manually rebase the dependabot PRs, this is the best solution for having dependabot and not breaking Github CI at the same time.&lt;/p&gt;

</description>
      <category>npm</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Automatically Update Dependencies</title>
      <dc:creator>Yuan-Hsi Lee</dc:creator>
      <pubDate>Sun, 14 Feb 2021 04:17:35 +0000</pubDate>
      <link>https://dev.to/yuanleemidori/automatically-update-dependencies-3cic</link>
      <guid>https://dev.to/yuanleemidori/automatically-update-dependencies-3cic</guid>
      <description>&lt;p&gt;This week, I was working with automatically updating dependencies for projects. Well-maintained packages release new versions frequently, in order to get more features, bug fixing, and improvement in general, we usually want our project to have the latest version of packages. However, it is overwhelming when you have hundreds of packages to update.&lt;/p&gt;

&lt;p&gt;In GitHub, there is a tool called &lt;strong&gt;dependabot&lt;/strong&gt;. It is like a robot helping you find out any security vulnerability. Moreover, it can also help you to update the outdated packages with proper configuration.&lt;/p&gt;

&lt;p&gt;Telescope had a dependabot for sending PRs when there is a security vulnerability. But, it didn't send PRs when there are outdated packages.&lt;/p&gt;

&lt;p&gt;A team member Anton wants to add this feature for our project, to have automatically generated PRs when there is any outdated packages. I'm also interested in this, therefore, we had a discussion about how we can apply this feature to our repo.&lt;/p&gt;

&lt;p&gt;Professor Dave mentioned one tool called &lt;a href="https://github.com/renovatebot/renovate"&gt;Renovate&lt;/a&gt;, which is a very similar tool like GitHub's dependabot. Therefore, we decided that Anton try dependabot on his GitHub repo; and I try Renovate on my Github repo.&lt;/p&gt;

&lt;p&gt;We came up with couples of basic requirements for this automatically sending PR for outdated dependency thing.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Able to set schedule (e.g. daily, weekly; and specific time or time range) and proper time zone&lt;/li&gt;
&lt;li&gt;Auto-assign reviewers&lt;/li&gt;
&lt;li&gt;Format commit message&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And some nice-to-have but not mandatory features,&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Auto-merge PRs for patch (e.g. 4.8.4 to 4.8.8)&lt;/li&gt;
&lt;li&gt;Specify GitHub labels to PRs&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Renovate bot is able to do every thing on this list. It is also very configurable. After install renovate through &lt;a href="https://github.com/apps/renovate"&gt;GitHub application&lt;/a&gt;, renovate bot will send a PR in order to merge a &lt;code&gt;renovate.json&lt;/code&gt; file to your repo. This file is where you configure the automation bot setting. The default one looks like this,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"extends"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"config:base"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The default setting will scan through your repo, finding out every package files, not just to root! For example, in our telescope project, there are more than one package files hold our current version of dependencies; and renovate is able to find all the file.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ln6QBjb---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7eb0ai4nn3bdvecfg3km.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ln6QBjb---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7eb0ai4nn3bdvecfg3km.png" alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To change the default setting, renovate provides lots of &lt;a href="https://docs.renovatebot.com/configuration-options/"&gt;configuration options&lt;/a&gt;. I change my &lt;code&gt;renovate.json&lt;/code&gt; to something like this,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"extends"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"config:base"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timezone"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Canada/Eastern"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"schedule"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"after 7am before 9pm every weekday"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reviewers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"c3ho"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"manekenpix"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"raygervais"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"cindyledev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"team: Seneca-CDOT/Winter-2021-Telescope"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"npm"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"packageRules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"matchUpdateTypes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"minor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"patch"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"schedule"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"after 7am before 9pm"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"automerge"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, renovate has the configuration to set time zone, arrange schedule, and assign PR reviewers (can assign to individual github username or team name). Moreover, we can specify which type of package file (e.g. npm or docker) that we want to make special schedule or features like auto-merge; the type of package update (major, minor, or patch) can be configured as well.&lt;/p&gt;

&lt;p&gt;Comparing with GitHub dependabot, they can both meet our requirements. Auto-merge is a bit of complicated in dependabot, but still doable. However, after discussing with team, we don't need auto merge feature for now (still manually testing all updates no matter its type). We decided to go with GitHub dependabot since it has all the feature we need, and it's integrate with GitHub.&lt;/p&gt;

&lt;p&gt;This is my first time working with something like auto-bot and I honestly do enjoy it. I'm thinking about learning more in this field. Thanks the team and Anton for giving me this chance to know something cool!&lt;/p&gt;

</description>
      <category>github</category>
      <category>npm</category>
      <category>docker</category>
    </item>
    <item>
      <title>How Many Releases Do We Need?</title>
      <dc:creator>Yuan-Hsi Lee</dc:creator>
      <pubDate>Sat, 06 Feb 2021 04:51:58 +0000</pubDate>
      <link>https://dev.to/yuanleemidori/how-many-releases-do-we-need-87k</link>
      <guid>https://dev.to/yuanleemidori/how-many-releases-do-we-need-87k</guid>
      <description>&lt;p&gt;We just got our &lt;a href="https://github.com/Seneca-CDOT/telescope/releases/tag/1.6.0"&gt;telescope 1.6 release&lt;/a&gt; this afternoon! Ya!&lt;/p&gt;

&lt;p&gt;I want to talk our new header (including menu bar and logo) ported to the Nextjs front-end (we're moving our front-end stuff from Gatsby to Nextjs). It's amazing to see the Nextjs front-end to have about 70% similar with the old Gatsby front-end. The reason I want to talk about it is how the developer work on this issue when he got stuck. He reached out on Slack and there happen to have people having time to debug with him, they even had a 3-hour screen-sharing meeting to code together. This is something that I always want to do but never get a chance to do so. Before the pandemic, it's easy to check on each other's work when you're in the same room. You could just stand up and walk to your team member's desk and ask her for help. In this pandemic, it's impossible to gather and meet up as a group.&lt;/p&gt;

&lt;p&gt;Anyways, what I want to discuss is, after merging this PR, we found some bug in this newly ported header. For example, the logo should be a clickable link and lead us back to home; but it isn't. And, some CSS styling is not consistent. We still push it to our 1.6 release today. And we'll be fixing these small bugs in the upcoming release. This is quite different compare with what I thought about release. I always think, there should be some criteria about a specific release, and we have to make it before the release date. The thing is, people are not perfect, and there is always something we can't expect or control. The goal of release is to make it on that release date, instead of waiting for everything is done. Because there will never be one day that &lt;strong&gt;everything&lt;/strong&gt; is done, it's not possible. We'll always come up with new ideas for enhancement or find some new bug that we didn't notice before.&lt;/p&gt;

&lt;p&gt;No matter how careful we were before merging a PR, we sometimes forgot things. The good thing about working as a team is we can always check each other's works, finding bugs, and fixing them. It's even better when doing an open-source project, more people are helping you to check your code! How many releases do we need for a project? There is no answer. As long as we want to make the project get better and better, we need more releases to do so.&lt;/p&gt;

</description>
      <category>github</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Package Version - Update or Not Update?</title>
      <dc:creator>Yuan-Hsi Lee</dc:creator>
      <pubDate>Sat, 06 Feb 2021 01:54:19 +0000</pubDate>
      <link>https://dev.to/yuanleemidori/package-version-update-or-not-update-16d8</link>
      <guid>https://dev.to/yuanleemidori/package-version-update-or-not-update-16d8</guid>
      <description>&lt;p&gt;Packages are helpful and sometimes critical for projects. However, packages have new release all the time, so as their dependency packages. A developer should learn how to determine if we need to update the latest version of packages or not.&lt;/p&gt;

&lt;p&gt;I've been checking on something like this these days. There is a warning while building the telescope project, it complains about one of our package is too old to get supported. And this old version package is one of the dependency of the other package. Therefore, we need to look into both packages' new versions and see if the new version of packages can fit in our project; and if they can't, how to modify our project or should we look into other packages?&lt;/p&gt;

&lt;p&gt;Also, it's a big work for checking all these outdated packages. Should we check each of them and see if the update breaks our program? Should we build a bot to always update the packages automatically when it's just a minor update (such as 1.6.7 to 1.6.8)? Does automatically updating packages save our time or give us more work (to fixing it) in the future?&lt;/p&gt;

&lt;p&gt;There are a lot to think about when it comes to maintaining a project with its packages. I'm glad that I have this chance to dig into this new field :)&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>npm</category>
      <category>javascript</category>
      <category>github</category>
    </item>
  </channel>
</rss>
