<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Kyohei Fukuda</title>
    <description>The latest articles on Forem by Kyohei Fukuda (@handdot).</description>
    <link>https://forem.com/handdot</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%2F86068%2Fa743d83b-4590-42e3-9e35-e576bbb592d9.png</url>
      <title>Forem: Kyohei Fukuda</title>
      <link>https://forem.com/handdot</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/handdot"/>
    <language>en</language>
    <item>
      <title>Visualized Communication Strengthens Both Individuals and Teams - Featuring CleanShot X</title>
      <dc:creator>Kyohei Fukuda</dc:creator>
      <pubDate>Wed, 20 Sep 2023 04:01:08 +0000</pubDate>
      <link>https://forem.com/handdot/visualized-communication-strengthens-both-individuals-and-teams-featuring-cleanshot-x-569m</link>
      <guid>https://forem.com/handdot/visualized-communication-strengthens-both-individuals-and-teams-featuring-cleanshot-x-569m</guid>
      <description>&lt;h2&gt;
  
  
  Asynchronous Communication for Remote Workers
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MZplAdaV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://storage.googleapis.com/zenn-user-upload/2c7cd9445925-20230920.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MZplAdaV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://storage.googleapis.com/zenn-user-upload/2c7cd9445925-20230920.png" alt="cat" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In a time where remote work has become the norm, I find that asynchronous communication on platforms such as GitHub and Slack has become an essential factor in determining whether or not work can be accomplished efficiently.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Personally, I was not very good at remote communication. Therefore, I was searching for ways to collaborate effectively.&lt;/p&gt;

&lt;p&gt;During this process, I noticed something and it eased by CleanShot X, which I will introduce here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://cleanshot.sjv.io/eKaybj"&gt;CleanShot X&lt;/a&gt;&lt;/strong&gt; is a paid (one-time purchase) screenshot extension tool. I have been using it for a while and recommended it to friends. Recently, they started an &lt;a href="https://cleanshot.sjv.io/4P2Oz9"&gt;affiliate program&lt;/a&gt;, so I thought I'd write an article about it. Purchases made through the links in this article will give me a 25% kickback.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Combining Images and Videos&lt;/strong&gt; in Communication
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Communication isn't just about words
&lt;/h3&gt;

&lt;p&gt;As developers, we write code and documents daily, but I believe that remote worker’s asynchronous communication is only 50 points if it is only based on text. In other words, communication has aspects of mixed martial arts; we should use everything available to us. (This is even more so for me as I develop in a non-native language environment)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conveying messages by combining images and videos not only reduces the burden on the reader but also provides a specific visual, preventing misunderstandings.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Work Efficiently Using CleanShot X
&lt;/h3&gt;

&lt;p&gt;For example, when pasting a screenshot in GitHub Issues, there are times when you want to edit it to mask personal information or depict reproduction steps. You can easily achieve this as shown below. &lt;strong&gt;Moreover, images are saved to the clipboard, so your desktop won’t be cluttered with screenshots.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xhnbQl4p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://storage.googleapis.com/zenn-user-upload/70fba7b19926-20230920.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xhnbQl4p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://storage.googleapis.com/zenn-user-upload/70fba7b19926-20230920.gif" alt="GitHub Issues" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I want you to use it and experience the smoothness and high UX. It’s truly easy to use! They offer a 30-day money-back guarantee, so I encourage you to try it out with the intention of getting a refund...!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I find it very useful for various tasks including creating documents, using Slack and email, creating slides, etc., both for work and personal use on my PC. I use it daily.&lt;/p&gt;

&lt;p&gt;I especially love and frequently use the following features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Quick Access&lt;/strong&gt;&lt;br&gt;
You can quickly capture and edit after taking a shot. It's modeless and offers the highest UX.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BDe9aZ8Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://storage.googleapis.com/zenn-user-upload/a57b78ece6b0-20230920.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BDe9aZ8Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://storage.googleapis.com/zenn-user-upload/a57b78ece6b0-20230920.gif" alt="Quick Access" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Convenient &lt;strong&gt;annotations&lt;/strong&gt; that can't be done with Mac's preview app&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mosaic&lt;/strong&gt;&lt;br&gt;
You can hide personal and confidential information using the mosaic feature.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PzfzMVHb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://storage.googleapis.com/zenn-user-upload/a747e320ca22-20230920.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PzfzMVHb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://storage.googleapis.com/zenn-user-upload/a747e320ca22-20230920.png" alt="Mosaic" width="800" height="624"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Numbering&lt;/strong&gt;&lt;br&gt;
It's handy when creating step-by-step explanations or instructions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PENwqO0s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://storage.googleapis.com/zenn-user-upload/1cc4edf194ba-20230920.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PENwqO0s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://storage.googleapis.com/zenn-user-upload/1cc4edf194ba-20230920.png" alt="Numbering" width="800" height="621"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;


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

&lt;p&gt;&lt;strong&gt;GIF, MP4 (including 4K) recording possible&lt;/strong&gt;&lt;br&gt;
You can easily screen record, including mouse clicks, keystrokes, and even include your face, which is great.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R-xvAVp2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://storage.googleapis.com/zenn-user-upload/fe09a80dc550-20230920.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R-xvAVp2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://storage.googleapis.com/zenn-user-upload/fe09a80dc550-20230920.png" alt="GIF, MP4" width="800" height="579"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As you can see, &lt;strong&gt;&lt;a href="https://cleanshot.sjv.io/eKaybj"&gt;CleanShot X&lt;/a&gt;&lt;/strong&gt; facilitates communication using images and videos and is a useful tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Actual Valuable Use Cases
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Development
&lt;/h3&gt;

&lt;p&gt;For instance, adding a video eliminates the need to write reproduction steps and can significantly avoid misleading information.&lt;/p&gt;

&lt;p&gt;Example: &lt;br&gt;
&lt;a href="https://github.com/pdfme/pdfme/pull/196#issuecomment-1640880711"&gt;https://github.com/pdfme/pdfme/pull/196#issuecomment-1640880711&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FaJ38Cg0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://storage.googleapis.com/zenn-user-upload/3fe819cabde6-20230920.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FaJ38Cg0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://storage.googleapis.com/zenn-user-upload/3fe819cabde6-20230920.png" alt="pdfme PR" width="800" height="653"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conveying the usefulness of attaching screenshots and videos to teammates, a screenshot culture naturally emerged in the pdfme repository.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Example: &lt;br&gt;
&lt;a href="https://github.com/pdfme/pdfme/pull/230"&gt;https://github.com/pdfme/pdfme/pull/230&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s_ag3Rxi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://storage.googleapis.com/zenn-user-upload/4c9610cd1d2a-20230920.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s_ag3Rxi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://storage.googleapis.com/zenn-user-upload/4c9610cd1d2a-20230920.png" alt="pdfme PR" width="800" height="689"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Communication costs have reduced, and collaboration has become easier. It’s truly helpful.&lt;/p&gt;

&lt;h3&gt;
  
  
  Documentation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;To prevent readers from losing interest, utilizing visual elements (images and videos) to convey information is extremely effective, along with keeping paragraphs short.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Example: &lt;br&gt;
&lt;a href="https://pdfme.com/docs/getting-started#template"&gt;https://pdfme.com/docs/getting-started#template&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cVt9zFGY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://storage.googleapis.com/zenn-user-upload/66088152c5ee-20230920.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cVt9zFGY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://storage.googleapis.com/zenn-user-upload/66088152c5ee-20230920.png" alt="pdfme Doc" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, GIFs can easily convey UI movements and behavior within documents, which is very convenient.&lt;/p&gt;

&lt;p&gt;Example: &lt;br&gt;
&lt;a href="https://pdfme.com/docs/getting-started#designer"&gt;https://pdfme.com/docs/getting-started#designer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ULcf6HPV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://storage.googleapis.com/zenn-user-upload/0d68b84bd4c4-20230920.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ULcf6HPV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://storage.googleapis.com/zenn-user-upload/0d68b84bd4c4-20230920.gif" alt="pdfme Doc" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Training
&lt;/h3&gt;

&lt;p&gt;Video content creates a sense of familiarity and enables efficient training.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CleanShot X’s screen recording can include camera footage at the corner, highlighting mouse clicks and keystrokes.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I usually create code explanatory videos using iPhone and CleanShot X. If you're interested in that, please check out my past presentation materials on "DevRel video production".&lt;br&gt;
&lt;a href="https://www.docswell.com/s/hand-dot/58GV1E-2023-05-09-175645"&gt;https://www.docswell.com/s/hand-dot/58GV1E-2023-05-09-175645&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.docswell.com/s/hand-dot/58GV1E-2023-05-09-175645"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0WZ8yI54--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://storage.googleapis.com/zenn-user-upload/5821da2d6b1e-20230920.png" alt="docswell" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Visualized communication is a technique that can easily cover weaknesses such as being poor at communication, not being able to explain things well, and operating in a non-native language environment.&lt;/p&gt;

&lt;p&gt;Of course, this technique can be practiced right away even without using &lt;strong&gt;&lt;a href="https://cleanshot.sjv.io/eKaybj"&gt;CleanShot X&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And &lt;strong&gt;the greatest advantage of visualized communication is that it reduces the burden on the recipient&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is especially the case if your written message, proposal, or comments are being seen by many people. The more recipients there are, the more you can confer this benefit.&lt;/p&gt;

&lt;p&gt;I would be happy if this article encourages you to skillfully utilize screenshots and screen recordings to facilitate smoother communication.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://cleanshot.sjv.io/eKaybj"&gt;CleanShot X is available here!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's all for now.&lt;/p&gt;

</description>
      <category>productivitytools</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Published Chrome extension for streamlined React development🎉</title>
      <dc:creator>Kyohei Fukuda</dc:creator>
      <pubDate>Tue, 06 Sep 2022 02:54:49 +0000</pubDate>
      <link>https://forem.com/handdot/published-chrome-extension-for-streamlined-react-development-23b</link>
      <guid>https://forem.com/handdot/published-chrome-extension-for-streamlined-react-development-23b</guid>
      <description>&lt;p&gt;I created a Chrome extension called &lt;strong&gt;React Inspector&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It launches the inspector on Chrome and opens the source code of the clicked React component in an editor. (Currently only VSCode is supported)&lt;/strong&gt;&lt;br&gt;
PS: ↑2022/09/12 "Open in Editor URL" can be set from the options page to open with &lt;strong&gt;Any Editor&lt;/strong&gt; 's URL schema...!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chrome web store: &lt;a href="https://chrome.google.com/webstore/detail/react-inspector/gkkcgbepkkhfnnjolcaggogkjodmlpkh" rel="noopener noreferrer"&gt;https://chrome.google.com/webstore/detail/react-inspector/gkkcgbepkkhfnnjolcaggogkjodmlpkh&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/hand-dot/react-inspector" rel="noopener noreferrer"&gt;https://github.com/hand-dot/react-inspector&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can jump directly to the React source code, which makes it very easy to identify the code from the UI.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Newly joined projects&lt;/li&gt;
&lt;li&gt;Multilingual website&lt;/li&gt;
&lt;li&gt;Maintenance of old apps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think it would be convenient and save time to identify the source code if you can use it for projects such as&lt;/p&gt;




&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;You are probably already familiar with &lt;a href="https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi" rel="noopener noreferrer"&gt;React Developer Tools&lt;/a&gt;, a Chrome extension officially provided by the React team.&lt;/p&gt;

&lt;p&gt;React Developer Tools sets a global named &lt;code&gt;__REACT_DEVTOOLS_GLOBAL_HOOK__&lt;/code&gt;, then React communicates with that hook during initialization. &lt;/p&gt;

&lt;p&gt;The &lt;code&gt;__REACT_DEVTOOLS_GLOBAL_HOOK__&lt;/code&gt; has a Map object called &lt;code&gt;renderers&lt;/code&gt;.&lt;br&gt;
The method &lt;code&gt;findFiberByHostInstance&lt;/code&gt; of &lt;code&gt;renderers&lt;/code&gt; can be used to find React Fiber from HTML elements on a web page.&lt;/p&gt;

&lt;p&gt;Fiber is a reconciliation engine for React.&lt;br&gt;
&lt;strong&gt;But in addition to the information needed for reconciliation, Fiber has some other information that the developer can use for debugging that is added during development builds.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/facebook/react/blob/f0efa1164b7ca8523b081223954d05c88e92053b/packages/react-reconciler/src/ReactInternalTypes.js#L193" rel="noopener noreferrer"&gt;https://github.com/facebook/react/blob/f0efa1164b7ca8523b081223954d05c88e92053b/packages/react-reconciler/src/ReactInternalTypes.js#L193&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;React Inspector opens files in VSCode using the &lt;code&gt;_debugSource&lt;/code&gt; information set in Fiber.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;p&gt;As explained above, it works using the React Developer Tools setting of &lt;code&gt;REACT_DEVTOOLS_GLOBAL_HOOK&lt;/code&gt; and React Fiber at development build time, so it will not work unless the following two points are satisfied.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi" rel="noopener noreferrer"&gt;React Developer Tools&lt;/a&gt; must be installed.&lt;/li&gt;
&lt;li&gt;React must be in development build.
If you visit a site with React in development mode, the icon will have a red background
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fzenn-user-upload%2F9dc1772acda4-20220905.png" alt="react development build"&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  How to start the Inspector
&lt;/h2&gt;

&lt;p&gt;With the React Developer Tools installed and the React development server up and running, you can launch the inspector in the following three ways.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click on the extension icon
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fzenn-user-upload%2F5d0a54d3ef4c-20220905.png" alt="chrome extension icon"&gt;
&lt;/li&gt;
&lt;li&gt;From context menu
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstorage.googleapis.com%2Fzenn-user-upload%2F2bbe83a46578-20220906.png" alt="context menu"&gt;
&lt;/li&gt;
&lt;li&gt;By Shortcut
Mac: &lt;code&gt;Command+Shift+X&lt;/code&gt;
Win: &lt;code&gt;Ctrl+Shift+X&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Impressions on how I made it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I could develop Chrome extension quickly with TS using &lt;a href="https://crxjs.dev/" rel="noopener noreferrer"&gt;https://crxjs.dev/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;I learned a little bit about the internal structure of React, and I discovered many things when I read the source code of React.&lt;/li&gt;
&lt;li&gt;I've opened a &lt;a href="https://github.com/hand-dot/react-inspector" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;, so if you have any ideas or problems, please feel free to open an Issue!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://chrome.google.com/webstore/detail/react-inspector/gkkcgbepkkhfnnjolcaggogkjodmlpkh" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F24843808%2F188106077-ff409aeb-0145-4977-9be2-16d04809cc78.gif" alt="CleanShot 2022-09-02 at 18 08 23"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chrome web store: &lt;a href="https://chrome.google.com/webstore/detail/react-inspector/gkkcgbepkkhfnnjolcaggogkjodmlpkh" rel="noopener noreferrer"&gt;https://chrome.google.com/webstore/detail/react-inspector/gkkcgbepkkhfnnjolcaggogkjodmlpkh&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/hand-dot/react-inspector" rel="noopener noreferrer"&gt;https://github.com/hand-dot/react-inspector&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>react</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Why are you setting disabled property for each input element?</title>
      <dc:creator>Kyohei Fukuda</dc:creator>
      <pubDate>Thu, 09 Jun 2022 12:03:18 +0000</pubDate>
      <link>https://forem.com/handdot/why-do-you-set-disabled-for-each-input-11ce</link>
      <guid>https://forem.com/handdot/why-do-you-set-disabled-for-each-input-11ce</guid>
      <description>&lt;p&gt;If you set a disabled property on the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/fieldset"&gt;fieldset&lt;/a&gt; element, there is no need to set disabled on each input element.&lt;/p&gt;

&lt;p&gt;Before😅:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt; &lt;span class="na"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleSubmit&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      Email:
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      Password:
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"password"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After😎:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt; &lt;span class="na"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleSubmit&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;fieldset&lt;/span&gt; &lt;span class="na"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        Email:
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        Password:
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"password"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;fieldset&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DG0Vl-lf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fxccrioxs89e49h5z7d3.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DG0Vl-lf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fxccrioxs89e49h5z7d3.gif" alt="form with fieldset" width="800" height="130"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Bonus: Use &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/legend"&gt;legend&lt;/a&gt; element to display caption in the fieldset element&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt; &lt;span class="na"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleSubmit&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;fieldset&lt;/span&gt; &lt;span class="na"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;legend&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Login&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;legend&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        Email:
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        Password:
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"password"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;fieldset&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--J5JKI54g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7fvzvk5gt0ziss2y0r4n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--J5JKI54g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7fvzvk5gt0ziss2y0r4n.png" alt="fieldset with legend" width="880" height="182"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>html</category>
      <category>react</category>
      <category>frontend</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Manage your life task with GitHub</title>
      <dc:creator>Kyohei Fukuda</dc:creator>
      <pubDate>Wed, 08 Jun 2022 07:11:11 +0000</pubDate>
      <link>https://forem.com/handdot/manage-your-life-task-with-github-365d</link>
      <guid>https://forem.com/handdot/manage-your-life-task-with-github-365d</guid>
      <description>&lt;p&gt;&lt;a href="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%2F5o748xbkmqoc4xnupddw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5o748xbkmqoc4xnupddw.png" alt="Topimage"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Many things happen in life. Sometimes nothing happens, and we are bored.&lt;br&gt;&lt;br&gt;
Why don't you create a &lt;code&gt;life&lt;/code&gt; repository to "To Create Issue for now" to move forward in the direction you want as much as possible?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This article describes my efforts to make my life as stress-free as possible using GitHub, which I am sure many developers use.&lt;/p&gt;

&lt;p&gt;Many task management and blogging services are available, but I assume you are engineers here. So, I suggest that you use GitHub, which &lt;strong&gt;you are probably familiar with&lt;/strong&gt;, for task management and blogging. All of the services introduced here are free of charge, so please look at them until the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  There are many things to do in my life. I tried to handle it on GitHub, and it was good.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F24843808%2F146141423-4974c17f-b09c-40b5-a37a-0ae76f5913c2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F24843808%2F146141423-4974c17f-b09c-40b5-a37a-0ae76f5913c2.png" alt="GitHub project board"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a life repository on GitHub&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then, create an issue from a life repository, like below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To renew a lease agreement.&lt;/li&gt;
&lt;li&gt;Dental treatment&lt;/li&gt;
&lt;li&gt;Open an investment account.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Register daily tasks as Issues and list them on the &lt;a href="https://docs.github.com/en/issues/organizing-your-work-with-project-boards/managing-project-boards/about-project-boards" rel="noopener noreferrer"&gt;project board&lt;/a&gt; to do them.&lt;/p&gt;

&lt;p&gt;I've been operating it for almost a year already, and the key points that have kept it going are.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Because I use this service for my work, I can manage it with the same operation, so I don't have to switch my brain on how to operate it&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
That is one of the main reasons I recommend GitHub as a task management tool for engineers outside of development.&lt;/p&gt;

&lt;p&gt;Just as in typical software development, let's register more and more issues that you want to realize or improve.&lt;br&gt;&lt;br&gt;
Unlike a general TODO list, as you may know, We can write issue descriptions in markdown, milestones can create, and we can create on the project board, etc.&lt;br&gt;&lt;br&gt;
It is very functional. You should be able to use these features right now without learning new operations because we're using them all the time in our work.&lt;/p&gt;

&lt;p&gt;For example: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can create a project called "house moving," create an Issue of things to do, write down the procedures and other details, and manage them in the Kanban section.&lt;/li&gt;
&lt;li&gt;Set up an Issue of the book to read, and then once you read it, you can leave a comment on your Issue notes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Like that, you can imagine a use case.&lt;/p&gt;

&lt;p&gt;The point is to register more than TODOs.&lt;br&gt;
Tasks too simple, such as shopping, are not enough to be an issue, so I use &lt;a href="https://todo.microsoft.com/" rel="noopener noreferrer"&gt;Microsoft To-Do&lt;/a&gt; for the TODO list that I share with my wife.&lt;br&gt;
I think you will know what is suitable after operating it for a while.  &lt;/p&gt;

&lt;p&gt;We can divide complex tasks using a &lt;a href="https://docs.github.com/en/issues/tracking-your-work-with-issues/about-task-lists" rel="noopener noreferrer"&gt;task list&lt;/a&gt;.&lt;br&gt;
This function is also handy, and I use it often.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F24843808%2F146147129-e4549bf3-659b-4feb-a092-793b5ff153f4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F24843808%2F146147129-e4549bf3-659b-4feb-a092-793b5ff153f4.png" alt="task-list-rendered"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Commit to today's events and daily emotions!
&lt;/h2&gt;

&lt;p&gt;Since the above life repository has successfully managed issues, I have also started keeping a diary. Here are some of them.   &lt;/p&gt;

&lt;p&gt;There is a Github repository called "TIL" (Today I Learned) to make small outputs a habit; think of it as a diary version.&lt;/p&gt;

&lt;p&gt;GitHub is also straightforward to use in point for writing a diary. Photos are an essential part of a diary, aren't they?&lt;/p&gt;

&lt;p&gt;See below.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F24843808%2F146118711-501fd335-157b-4465-a927-ef36e90a2252.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F24843808%2F146118711-501fd335-157b-4465-a927-ef36e90a2252.gif" alt="movei2"&gt;&lt;/a&gt;&lt;strong&gt;When editing GitHub source code in a browser, I noticed that I could directly upload images by drag and drop if the code was markdown.&lt;/strong&gt; &lt;a href="https://github.blog/2021-05-13-video-uploads-available-github/" rel="noopener noreferrer"&gt;Also, Since May 2021, we can upload &lt;code&gt;.mp4&lt;/code&gt; and &lt;code&gt;.mov&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The scalability of blogging on GitHub is the best of any service.&lt;/p&gt;

&lt;p&gt;Because: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Image URLs are &lt;code&gt;https://user-images.githubusercontent.com/xxxx~&lt;/code&gt; instead of relative paths to image files, so they can be easily transferred when publishing to other media such as DEV.

&lt;ul&gt;
&lt;li&gt;Note that the URL of &lt;code&gt;https://user-images.githubusercontent.com/xxxx~&lt;/code&gt; is published on the web even in private repositories.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;If you write &lt;a href="https://jekyllrb.com/docs/front-matter/" rel="noopener noreferrer"&gt;Front Matter&lt;/a&gt;, you can create a site anytime with &lt;a href="https://www.gatsbyjs.com/" rel="noopener noreferrer"&gt;Gatsby&lt;/a&gt;, &lt;a href="https://jekyllrb.com/" rel="noopener noreferrer"&gt;Jekyll&lt;/a&gt;, etc. &lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;I write Front Matter like this.&lt;/p&gt;

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

---
title: GitHubで人生を管理する
description: 人生はいろんなことが起こります。なにも起こらなくて退屈な時もあります。
少しでも自分の望む方向に進めるために「とりあえずIssue立てるか」というレポジトリ life を作ってみてはいかがですか？
author: hand-dot
layout: post
date : 2021-12-17T12:04
category: 雑記
tags:
    - ブログ
---


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This article was also written on GitHub and copied and pasted for posting.&lt;/p&gt;

&lt;p&gt;If you are not satisfied with GitHub's online editor, don't worry, you can open VS Code by pressing the '.' key on the repository. &lt;br&gt;
That is useful if you need to do batch replacements, etc.&lt;br&gt;
&lt;a href="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%2Fajg7mkbqkhh052399uls.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fajg7mkbqkhh052399uls.gif" alt="github dev"&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;Many things happen in life. Sometimes nothing happens, and we are bored.&lt;br&gt;&lt;br&gt;
Why don't you create a &lt;code&gt;life&lt;/code&gt; repository to "To Create Issue for now" to move forward in the direction you want as much as possible?&lt;/p&gt;

&lt;p&gt;That was a unique way to use GitHub.&lt;br&gt;
If you are an engineer, you will be able to use it well.&lt;/p&gt;

&lt;p&gt;Thank you for reading to the end.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>productivity</category>
      <category>career</category>
      <category>github</category>
    </item>
    <item>
      <title>A full comparison of 6 JS libraries for generating PDFs</title>
      <dc:creator>Kyohei Fukuda</dc:creator>
      <pubDate>Mon, 15 Mar 2021 11:45:22 +0000</pubDate>
      <link>https://forem.com/handdot/generate-a-pdf-in-js-summary-and-comparison-of-libraries-3k0p</link>
      <guid>https://forem.com/handdot/generate-a-pdf-in-js-summary-and-comparison-of-libraries-3k0p</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In this article, we’ll talk about a series of Javascript libraries for&lt;br&gt;
generating PDFs.&lt;br&gt;
We'll look into real-world use cases and we'll mainly focus on 5&lt;br&gt;
things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the running environment&lt;/li&gt;
&lt;li&gt;the supported modules&lt;/li&gt;
&lt;li&gt;typings&lt;/li&gt;
&lt;li&gt;custom fonts&lt;/li&gt;
&lt;li&gt;easy to use&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After this read, you'll be able to find the right PDF library for your&lt;br&gt;
Javascript application.&lt;br&gt;
In the end, we'll also introduce &lt;a href="https://pdfme.com/" rel="noopener noreferrer"&gt;pdfme&lt;/a&gt;, a very handy and&lt;br&gt;
powerful PDF library!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pdfme.com/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2l3pb0a3efmzioc6lpu9.png" alt="pdfme" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://pdfme.com/" rel="noopener noreferrer"&gt;Let's GO pdfme Official Site&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;if you like it, give me a start⭐ &lt;a href="https://github.com/pdfme/pdfme" rel="noopener noreferrer"&gt;https://github.com/pdfme/pdfme&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Comparison
&lt;/h2&gt;

&lt;p&gt;Compare 6 libraries&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://pdfkit.org/" rel="noopener noreferrer"&gt;1. PDFKit&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://pdfkit.org/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3cro9v0439m2cg8zyvav.png" alt="スクリーンショット-2020-09-23-14.14.32" width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;PDFKit is one of the first pdf libraries released in the huge&lt;br&gt;
Javascript ecosystem. Available since 2012 has gained strong&lt;br&gt;
popularity and it is still receiving updates as of 2021.&lt;br&gt;
A little bit more difficult to use if compared to other libraries offers&lt;br&gt;
support to both Node and the browser through Webpack.&lt;/p&gt;

&lt;p&gt;And as we will see later in this comparison some PDF libraries are&lt;br&gt;
wrappers around PDFKit.&lt;/p&gt;

&lt;p&gt;It supports custom fonts and image embedding, but lacks of a high-&lt;br&gt;
level API;&lt;/p&gt;

&lt;p&gt;In addition, the documentation tends to be complex.&lt;br&gt;
As you can expect, it requires a certain amount of time to get used&lt;br&gt;
to it, and at the very beginning,&lt;br&gt;
you'll find that designing PDFs will not be the easiest thing to do.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Point of evaluation&lt;/th&gt;
&lt;th&gt;Evaluation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Works in Node and browser&lt;/td&gt;
&lt;td&gt;△(a bit complicated)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typings&lt;/td&gt;
&lt;td&gt;○(DefinitelyTyped)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom fonts&lt;/td&gt;
&lt;td&gt;○(Be careful when using this in a browser)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Easy to use&lt;/td&gt;
&lt;td&gt;△(a bit complicated)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  &lt;a href="http://pdfmake.org/" rel="noopener noreferrer"&gt;2. pdfmake&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://pdfmake.org/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9qu1y1vyj10ifynjfksu.png" alt="スクリーンショット-2020-09-23-14.15.29" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;pdfmake is a wrapper library built around PDFKit. The main&lt;br&gt;
the difference is in the programming paradigm:&lt;/p&gt;

&lt;p&gt;while PDFKit adopts the classic imperative style, pdfmake has a&lt;br&gt;
declarative approach.&lt;/p&gt;

&lt;p&gt;That's why it's easier to focus on what you want to do, instead of&lt;br&gt;
spending time telling the library how to achieve a determined result.&lt;/p&gt;

&lt;p&gt;But not all that glitters is gold, you might encounter issues when&lt;br&gt;
you try to embed custom fonts while using Webpack. Unfortunately,&lt;br&gt;
there is no much documentation available on the web about this&lt;br&gt;
issue. However, if you are not using Webpack you can easily clone&lt;br&gt;
the git repository and run the font embedding script.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Point of evaluation&lt;/th&gt;
&lt;th&gt;Evaluation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Works in Node and browser&lt;/td&gt;
&lt;td&gt;△(Be careful using Webpack)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typings&lt;/td&gt;
&lt;td&gt;○(DefinitelyTyped)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom fonts&lt;/td&gt;
&lt;td&gt;△(Need to build your own)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Easy to use&lt;/td&gt;
&lt;td&gt;○&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  &lt;a href="https://github.com/MrRio/jsPDF" rel="noopener noreferrer"&gt;3. jsPDF&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/MrRio/jsPDF" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo4zizr45174hem7j1arv.png" alt="スクリーンショット-2020-09-23-14.16.48" width="800" height="644"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;jsPDF has the highest number of start among the pdf libraries in&lt;br&gt;
GitHub, and not by chance it’s very stable and well maintained.&lt;br&gt;
The modules are exported according to the AMD module standard,&lt;br&gt;
which makes easy to use it with node and browsers.&lt;/p&gt;

&lt;p&gt;As for PDFKit the APIs provided have an imperative pattern, with&lt;br&gt;
the result that creating a complex layout tend to be very hard.&lt;/p&gt;

&lt;p&gt;Embedding fonts it’s not difficult but needs an extra step: converting&lt;br&gt;
the fonts to TTF files.&lt;/p&gt;

&lt;p&gt;jsPDF is not the easiest library to master, but the documentation is&lt;br&gt;
very rich so you’ll not encounter any particular obstacle while&lt;br&gt;
working with it. &lt;a href="https://rawgit.com/MrRio/jsPDF/master/docs/index.html" rel="noopener noreferrer"&gt;https://rawgit.com/MrRio/jsPDF/master/docs/index.html&lt;/a&gt;)&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Point of evaluation&lt;/th&gt;
&lt;th&gt;Evaluation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Works in Node and browser&lt;/td&gt;
&lt;td&gt;○&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typings&lt;/td&gt;
&lt;td&gt;○&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom fonts&lt;/td&gt;
&lt;td&gt;○(ttf files need to be converted)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Easy to use&lt;/td&gt;
&lt;td&gt;△(a bit complicated)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  &lt;a href="https://github.com/puppeteer/puppeteer" rel="noopener noreferrer"&gt;4. Puppeteer&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/puppeteer/puppeteer" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foospj2rpne4ml3q6nmgh.png" alt="スクリーンショット-2020-09-23-14.20.49" width="800" height="563"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you may know, Puppeteer is a Node library that provides a high-&lt;br&gt;
level API to control Chrome, but it can also be used to create PDFs as well.&lt;/p&gt;

&lt;p&gt;The templates have to be written in HTML, which makes jsPDF&lt;br&gt;
very easy to use for web developers.&lt;/p&gt;

&lt;p&gt;The following article is a good reference to use while you are&lt;br&gt;
developing: &lt;a href="https://dev.to/damcosset/generate-a-pdf-from-html-and-back-on-the-front-5ff5"&gt;Generate a PDF from HTML with puppeteer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Puppeteer has mainly two disadvantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need to implement a backend solution.&lt;/li&gt;
&lt;li&gt;You need to start Puppeteer every-time you need to create a
PDF, which creates some overhead. It is slow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the disadvantages listed above are not a big problem for you,&lt;br&gt;
then it may be a good option especially if you need to design&lt;br&gt;
HTML-tables etc.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Point of evaluation&lt;/th&gt;
&lt;th&gt;Evaluation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Works in Node and browser&lt;/td&gt;
&lt;td&gt;x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typings&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom fonts&lt;/td&gt;
&lt;td&gt;○(web fonts)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Easy to use&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  &lt;a href="https://pdf-lib.js.org/" rel="noopener noreferrer"&gt;5. pdf-lib&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://pdf-lib.js.org/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8mvrlzekucvs86f8wlqs.png" alt="スクリーンショット-2020-09-23-14.18.03" width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;pdf-lib is a library for creating and editing PDFs implemented&lt;br&gt;
entirely in Typescript, and as for pdfmake is built around PDFKit.&lt;/p&gt;

&lt;p&gt;Although it was released after all the other libraries, it’s very popular&lt;br&gt;
with thousands of stars on GitHub.&lt;/p&gt;

&lt;p&gt;The design of the APIs are awesome and of course, works with&lt;br&gt;
both: node and browsers.&lt;/p&gt;

&lt;p&gt;It supports PDF merging, splitting, embedding, and has a lot of&lt;br&gt;
features that other libraries just don’t have;&lt;/p&gt;

&lt;p&gt;pdf-lib is very powerful, but also very simple to use.&lt;/p&gt;

&lt;p&gt;One of the hottest features is the support to Unit8Array and&lt;br&gt;
ArrayBuffer to embed font files, which allows using &lt;code&gt;fs&lt;/code&gt; in case you&lt;br&gt;
are working with node and &lt;code&gt;xhr&lt;/code&gt; in case you are working in the&lt;br&gt;
browser. You’ll be able to feel its superiors in terms of performance&lt;br&gt;
when you compare it with other libraries, and of course it can be&lt;br&gt;
used with Webpack.&lt;/p&gt;

&lt;p&gt;Also, this library has an imperative approach, and as can be&lt;br&gt;
deduced working with complex layouts it’s not so easy.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Point of evaluation&lt;/th&gt;
&lt;th&gt;Evaluation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Works in Node and browser&lt;/td&gt;
&lt;td&gt;○&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typings&lt;/td&gt;
&lt;td&gt;○&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom fonts&lt;/td&gt;
&lt;td&gt;○&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Easy to use&lt;/td&gt;
&lt;td&gt;△(a bit complicated, the layout needs to be calculated)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  &lt;a href="https://pdfme.com/" rel="noopener noreferrer"&gt;6. pdfme&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://pdfme.com/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2l3pb0a3efmzioc6lpu9.png" alt="pdfme" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, we are at the end, so let me introduce pdfme. I personally developed this library, with the aim of&lt;br&gt;
making Pdf-lib as declarative as possible.&lt;/p&gt;

&lt;p&gt;In contraposition with pdf-lib, pdfme doesn’t require the&lt;br&gt;
developer to calculate the layout by himself:&lt;br&gt;
no need to define every time alignments, line-height, etc.&lt;/p&gt;

&lt;p&gt;With the advantages of pdf-lib, such as the ability to use Uint8Array and ArrayBuffer for font data, and the ability to embed PDF files,&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;pdfme allows developers to create complex layouts efficiently.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can also try &lt;a href="https://pdfme.com/template-design" rel="noopener noreferrer"&gt;Template Design &amp;amp; Code Generator&lt;/a&gt; to design your&lt;br&gt;
favorite PDF layout and generate some executable code!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pdfme.com/template-design" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgjylp352hofez091ba2s.png" alt="pdfme's Template Design &amp;amp; Code Generator" width="800" height="610"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Point of evaluation&lt;/th&gt;
&lt;th&gt;Evaluation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Works in Node and browser&lt;/td&gt;
&lt;td&gt;○&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typings&lt;/td&gt;
&lt;td&gt;○&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom fonts&lt;/td&gt;
&lt;td&gt;○&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Easy to use&lt;/td&gt;
&lt;td&gt;○&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://pdfme.com/" rel="noopener noreferrer"&gt;Let's GO pdfme Official Site&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;if you like it, give me a start⭐ &lt;a href="https://github.com/pdfme/pdfme" rel="noopener noreferrer"&gt;https://github.com/pdfme/pdfme&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>typescript</category>
      <category>pdf</category>
    </item>
  </channel>
</rss>
