<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>NotionNext BLOG</title>
        <link>/</link>
        <description>这是一个由NotionNext生成的站点</description>
        <lastBuildDate>Wed, 26 Apr 2023 08:29:46 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en-US</language>
        <copyright>All rights reserved 2023, Shek</copyright>
        <item>
            <title><![CDATA[How to set up your web app project that helps you write high quality code]]></title>
            <link>/article/41611882-e14f-43bd-ad28-2177d765d768</link>
            <guid>41611882-e14f-43bd-ad28-2177d765d768</guid>
            <pubDate>Tue, 14 Mar 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[This article introduces a basic project set up that help you write and maintain high quality code]]></description>
            <content:encoded><![CDATA[<div id="container" class="font-medium mx-auto undefined"><main class="notion light-mode notion-page notion-block-41611882e14f43bdad282177d765d768"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-fa5759d11fa2413abdedb17717b5a77a">This article introduces tools that can help you boost code quality and detect errors early. The life cycle of development can be described as follows:</div><div class="notion-blank notion-block-f7eae4fa5bc3472385ecb1fce5560d4e"> </div><div class="notion-text notion-block-131cdcedd8d446ee973177712d5b5008">Development → Commit &amp; Push → Build</div><div class="notion-blank notion-block-d1be387dbe3b4606840c8250e1f97fe8"> </div><div class="notion-text notion-block-0aadec835ef247b09acc9f2c424e47ed">In each stage, there are tools that help us. </div><div class="notion-blank notion-block-b3fdb4ce68b6486bae60fcfc73c8372c"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-0894dec5c1a54dcf85a41a8e3a9e2ca2" data-id="0894dec5c1a54dcf85a41a8e3a9e2ca2"><span><div id="0894dec5c1a54dcf85a41a8e3a9e2ca2" class="notion-header-anchor"></div><a class="notion-hash-link" href="#0894dec5c1a54dcf85a41a8e3a9e2ca2" title="Development Stage"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">Development Stage</span></span></h3><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-0f3d166025d64b8eac99463ed8c9a1e2" data-id="0f3d166025d64b8eac99463ed8c9a1e2"><span><div id="0f3d166025d64b8eac99463ed8c9a1e2" class="notion-header-anchor"></div><a class="notion-hash-link" href="#0f3d166025d64b8eac99463ed8c9a1e2" title="Linting"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">Linting</span></span></h4><div class="notion-text notion-block-6ee313932b5d4f988182368ef605871c">Linting tools help enforces coding best practise. With the use of IDE, like VSCode it can flag issues at runtime. But it can also be integrated as pre-commit hook (more on this later) to detect issues. Some of the widely used linting tools for each programming language are </div><ul class="notion-list notion-list-disc notion-block-a53b63df43ac41f8b159c59a6e2c60ed"><li>PyLint for Python</li></ul><ul class="notion-list notion-list-disc notion-block-cafe73ca5ed24ed6bf7de42aa6f8c36b"><li>RuboCop for Ruby</li></ul><ul class="notion-list notion-list-disc notion-block-95c090b877cc439cb89fd5313b877074"><li>PHP_CodeSniffer for PHP</li></ul><ul class="notion-list notion-list-disc notion-block-8ce4f9bc61de4f0184a4975e810e5823"><li>TSLint for TypeScript</li></ul><ul class="notion-list notion-list-disc notion-block-e5a98fc508c44f32b0eefab03ce3f527"><li>Stylelint for CSS and other web languages</li></ul><ul class="notion-list notion-list-disc notion-block-a993720115754dfa94c932a909e7935a"><li>ESLint for JavaScript</li></ul><div class="notion-blank notion-block-e0102d0d48914c9fa4b6c7fe468c3c2a"> </div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-885287e6fa764b58b5dad58777e481c5" data-id="885287e6fa764b58b5dad58777e481c5"><span><div id="885287e6fa764b58b5dad58777e481c5" class="notion-header-anchor"></div><a class="notion-hash-link" href="#885287e6fa764b58b5dad58777e481c5" title="Code formatter"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">Code formatter</span></span></h4><div class="notion-text notion-block-21c706c210ea41e48ce3b518c76362a7">The purpose of code formatter is to automatically format code according to a set of predefined rules, helping to ensure consistent code formatting across a project or team. Here are some examples of code formatter for some programming languages</div><ul class="notion-list notion-list-disc notion-block-4b9c3c75f06e413fbc6efd6242b6edd3"><li>JavaScript/TypeScript: Prettier</li></ul><ul class="notion-list notion-list-disc notion-block-d480655e26c9485da3bfc5f1b2b9ae58"><li>Python: Black</li></ul><ul class="notion-list notion-list-disc notion-block-dcfc4ffaa8344521b02935a36ecc6080"><li>Java: Google Java Format</li></ul><ul class="notion-list notion-list-disc notion-block-3a91c79bdd7743139ef8df0ced22b1c8"><li>Ruby: RuboCop</li></ul><ul class="notion-list notion-list-disc notion-block-32094ac654ed401b87afff5464824865"><li>Go: gofmt</li></ul><ul class="notion-list notion-list-disc notion-block-dce6f4f1d4904dd6bc341fadc602a2c7"><li>C/C++: ClangFormat</li></ul><div class="notion-blank notion-block-642b753b8d2a4a07b2607a015a8bcb0e"> </div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-9010a7966ac64498b4001c9c1c558c56" data-id="9010a7966ac64498b4001c9c1c558c56"><span><div id="9010a7966ac64498b4001c9c1c558c56" class="notion-header-anchor"></div><a class="notion-hash-link" href="#9010a7966ac64498b4001c9c1c558c56" title="Unit Test"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">Unit Test</span></span></h4><div class="notion-text notion-block-264be37f0b484616b7c7ecd07dbb0b9a">Unit test is one of the most important parts of development as it detects error early on in the development process. Unit tests should be introduced in more details, but for the sake of the length of this article, lets just look at some general rule of thumb for unit test briefly.</div><ol start="1" class="notion-list notion-list-numbered notion-block-86ad15011226452dbdb53040756aae82"><li>Test only one thing at a time.</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-cffca9b77b7f4491a8cb1f1b6805eeaa"><li>Test all possible paths through the code.</li></ol><ol start="3" class="notion-list notion-list-numbered notion-block-23428de2d5d949dfbfa88047d158920b"><li>Use real-world data.</li></ol><ol start="4" class="notion-list notion-list-numbered notion-block-75663ae426fc4accb165ef5877e95c79"><li>Keep tests independent and repeatable.</li></ol><ol start="5" class="notion-list notion-list-numbered notion-block-dfefd2507a12412fb4763712650a1ecd"><li>Keep tests fast and efficient.</li></ol><ol start="6" class="notion-list notion-list-numbered notion-block-1789ec58256847bd886a6e883a1f6687"><li>Use assertions to check for expected results.</li></ol><ol start="7" class="notion-list notion-list-numbered notion-block-f383ecff89a84ec091dff118cdd9be9b"><li>Maintain and update tests as the code evolves.</li></ol><div class="notion-blank notion-block-a82dcaf74493421ca85f9d88fa891c2f"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-52a2846fefb746189bf0756ac7393dbc" data-id="52a2846fefb746189bf0756ac7393dbc"><span><div id="52a2846fefb746189bf0756ac7393dbc" class="notion-header-anchor"></div><a class="notion-hash-link" href="#52a2846fefb746189bf0756ac7393dbc" title="Commit &amp; Push"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">Commit &amp; Push</span></span></h3><div class="notion-text notion-block-beedd7b0a8ba4ca59ebda306b416215b">Before publishing your code, it&#x27;s important to ensure that it meets certain standards of quality and is free of errors. To do this, several tools can automatically run processes such as linting checks and unit tests to help catch any potential issues and safeguard against errors.</div><div class="notion-blank notion-block-559f4cdac85a45df8aa4c430959b7038"> </div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-a6d43ed6323c46c587fc7004e11cfe86" data-id="a6d43ed6323c46c587fc7004e11cfe86"><span><div id="a6d43ed6323c46c587fc7004e11cfe86" class="notion-header-anchor"></div><a class="notion-hash-link" href="#a6d43ed6323c46c587fc7004e11cfe86" title="Git commit hook"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">Git commit hook</span></span></h4><div class="notion-text notion-block-ff29af1468cc4d4089e4c184b2bc5775">Git hooks are scripts that run automatically at specific points during the Git workflow, such as before or after a commit is made. By using commit hook tools, developers can automate processes such as code formatting, linting, and testing, and ensure that changes meet certain standards of quality before they are committed to the repository</div><div class="notion-blank notion-block-faf07a2364764157a4a3d1bdc850a298"> </div><div class="notion-text notion-block-a00c5e366fe147fe871d2099a56dbb3c">As usual, here is the list of git commit hook tools for different programming languages</div><ul class="notion-list notion-list-disc notion-block-4785621ad6e141b297a9c34a4c32afc0"><li>Java: JGit</li></ul><ul class="notion-list notion-list-disc notion-block-98c3dbbf668b48d3a4e3ee3d6dce5ce4"><li>Python: GitPython</li></ul><ul class="notion-list notion-list-disc notion-block-89e454096c5946358ba29eb70bd7e9a7"><li>Ruby: Rugged</li></ul><ul class="notion-list notion-list-disc notion-block-d7d1a3eacdec438f9e47b9cc8e0bf1a7"><li>C#: LibGit2Sharp</li></ul><ul class="notion-list notion-list-disc notion-block-bc03e6daa9414dc28549198c17523b09"><li>PHP: PHP Git Hook</li></ul><ul class="notion-list notion-list-disc notion-block-6d8a0a025c094c6ea35e40465ca50dbb"><li>Javascript: Husky</li></ul><div class="notion-blank notion-block-0f53ac935ab44a7c8621f6e00c2429f0"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-c45e1d931c654b41ae5fafc5f6206d42" data-id="c45e1d931c654b41ae5fafc5f6206d42"><span><div id="c45e1d931c654b41ae5fafc5f6206d42" class="notion-header-anchor"></div><a class="notion-hash-link" href="#c45e1d931c654b41ae5fafc5f6206d42" title="Build"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">Build</span></span></h3><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-903f142344a84e709b73b20a9ae21b94" data-id="903f142344a84e709b73b20a9ae21b94"><span><div id="903f142344a84e709b73b20a9ae21b94" class="notion-header-anchor"></div><a class="notion-hash-link" href="#903f142344a84e709b73b20a9ae21b94" title="CI/CD Pipeline"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">CI/CD Pipeline</span></span></h4><div class="notion-text notion-block-3e237be6736b4a259785202b1b2885f7">CI/CD is again another huge topic. So here I just give a short introduction first. CI/CD stands for Continuous Integration/Continuous Deployment (or Continuous Delivery).</div><div class="notion-text notion-block-74009f93faa64d769505576351cf0e23">Continuous Integration involves automatically building, testing, and merging code changes into a shared repository frequently to catch and resolve conflicts early. It ensures that the code is always in a working state and that changes made by developers do not break the build.</div><div class="notion-text notion-block-a8ec022b2ea448819eb922a992d1c801">Continuous Deployment/Delivery, on the other hand, involves automatically deploying the code changes to production as soon as they are ready, with minimal manual intervention. It allows for faster and more frequent releases, reducing the time it takes for new features and bug fixes to reach users.</div><div class="notion-blank notion-block-3ad8737f7a4c47e090002f68c53ece5d"> </div><div class="notion-blank notion-block-868a5455a0e84e33baae525823d0fd0d"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-f303a6e74e3443968e4155b88283a8cf" data-id="f303a6e74e3443968e4155b88283a8cf"><span><div id="f303a6e74e3443968e4155b88283a8cf" class="notion-header-anchor"></div><a class="notion-hash-link" href="#f303a6e74e3443968e4155b88283a8cf" title="Other Tools"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">Other Tools</span></span></h3><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-607dc0297e19482bbca3e4fd20dd6dbd" data-id="607dc0297e19482bbca3e4fd20dd6dbd"><span><div id="607dc0297e19482bbca3e4fd20dd6dbd" class="notion-header-anchor"></div><a class="notion-hash-link" href="#607dc0297e19482bbca3e4fd20dd6dbd" title="SonarQube"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">SonarQube</span></span></h4><div class="notion-text notion-block-811b92e8a542459dab130f6b1def656f">SonarQube is a cool tool that helps developers make sure their code is high-quality and free of bugs and security issues. It does this by providing a bunch of helpful metrics and reports that show how well your code is written, and it integrates with all sorts of popular software development tools. By using SonarQube, developers can catch and fix issues early on, making sure their software works well and is reliable for users.</div><div class="notion-blank notion-block-ea8ee74225f1446eaaeccc5dc330a0ca"> </div><div class="notion-blank notion-block-07eb5bad11f8498d9b5c4c6e324b4fdc"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-abee79e217e147559ef8cf21e352eda1" data-id="abee79e217e147559ef8cf21e352eda1"><span><div id="abee79e217e147559ef8cf21e352eda1" class="notion-header-anchor"></div><a class="notion-hash-link" href="#abee79e217e147559ef8cf21e352eda1" title="Conclusion"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">Conclusion</span></span></h3><div class="notion-text notion-block-f616b894ac4c4831a06c52f0ad0fc0d6">That’s it. These are the tools and processes that used in my previous projects. Happy Coding!</div><div class="notion-blank notion-block-405767fcf0524427a786a74195f2e694"> </div><div class="notion-blank notion-block-d5c7ad74edaf499fa8f5202dcc5c384a"> </div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-ff4825a67de94f8399ec9d2d4b6e0587" data-id="ff4825a67de94f8399ec9d2d4b6e0587"><span><div id="ff4825a67de94f8399ec9d2d4b6e0587" class="notion-header-anchor"></div><a class="notion-hash-link" href="#ff4825a67de94f8399ec9d2d4b6e0587" title="Other resources"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">Other resources</span></span></h4><div class="notion-text notion-block-d1166513362343c58ed81babaac0e4f8"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://paulintrognon.fr/blog/typescript-prettier-eslint-next-js">NextJs + Typescript project setup </a></div><div class="notion-blank notion-block-999ae17b2ba24f2a8eab3fcd3567faf1"> </div><div class="notion-blank notion-block-6cd4193847bb4f0c936a636982a52a2f"> </div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Reinventing and controlling my life financially]]></title>
            <link>/article/f02e1186-0a4b-4fda-b15f-a76aa5c8ebec</link>
            <guid>f02e1186-0a4b-4fda-b15f-a76aa5c8ebec</guid>
            <pubDate>Mon, 10 Apr 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[A contemplation of use of money and investment]]></description>
            <content:encoded><![CDATA[<div id="container" class="font-medium mx-auto undefined"><main class="notion light-mode notion-page notion-block-f02e11860a4b4fdab15fa76aa5c8ebec"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-d242a59d292a401b98a6f276a1e65b58">I used to save every penny and invest at least half of my salary into the stock market. But there is always an unsettling feeling in my heart. What if the return isn’t as much as the theory promised? Shouldn’t I try more when I am still young and have nothing to lose? After reading several books about personal finance, I have decided the best investment I can make is to invest in myself and take risks when I still can. </div><div class="notion-blank notion-block-c8b5c9f2b69749709a76d89776a32048"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-ff43f35b08f847408bcfa2d382c9af6c" data-id="ff43f35b08f847408bcfa2d382c9af6c"><span><div id="ff43f35b08f847408bcfa2d382c9af6c" class="notion-header-anchor"></div><a class="notion-hash-link" href="#ff43f35b08f847408bcfa2d382c9af6c" title="1. Know your expenses and cut unnecessary one"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1. Know your expenses and cut unnecessary one</span></span></h3><div class="notion-text notion-block-dff71464639c4b248380900b819fcad6">To save more, you either increase more income or lower your expense. I choose to lower my expense because I think it brings me more autonomy and less dependent on materials. It is a matter of lifestyle and personal choice. The most important thing is you should always know where your money goes. </div><div class="notion-blank notion-block-2fe3f26be89a4ef88b627374b15a59c5"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-9b5c2a9b63d343c5b8e1b8374eceaa25" data-id="9b5c2a9b63d343c5b8e1b8374eceaa25"><span><div id="9b5c2a9b63d343c5b8e1b8374eceaa25" class="notion-header-anchor"></div><a class="notion-hash-link" href="#9b5c2a9b63d343c5b8e1b8374eceaa25" title="2. Invest in a passive index fund — the baseline of investment"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2. Invest in a passive index fund — the baseline of investment</span></span></h3><div class="notion-text notion-block-70d8ecbb58ac437e9ca90131dffb0f66">Investment is not an all-or-nothing game and it is better to invest in something than nothing at all. If you ask me what is the return rate of a passive index fund in the future decades, I don’t have a single clue. I don’t believe the future rate will be as high as 7% on average in the past. But right now, I couldn’t find a better alternative that allows me to sleep peacefully at night. </div><div class="notion-blank notion-block-5ff528510cec453abe6db0d671b55be6"> </div><div class="notion-text notion-block-f67b4badcb124570a974ab37c3808447">However, to balance the risk and reward, I would lower my investment to a passive index fund. Why? Let’s see the next section.</div><div class="notion-blank notion-block-911828b232f848e485a5503eb9983911"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-9abef2cabdfe4c21a330b82b077c2562" data-id="9abef2cabdfe4c21a330b82b077c2562"><span><div id="9abef2cabdfe4c21a330b82b077c2562" class="notion-header-anchor"></div><a class="notion-hash-link" href="#9abef2cabdfe4c21a330b82b077c2562" title="3. Invest in yourself"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">3. Invest in yourself</span></span></h3><div class="notion-text notion-block-ddad9361c03c4233a6140bc5a6944cb3">I consider passive index funds a relatively low-risk investment (at least for my age). Low risk means low return or moderate return. Controllable risk and predictable return are good for long-term investment. But I think life is too boring without some risk and I have nothing to lose right now (except my few investments in the index fund). After all, the best investment we make is ourselves. So I would reinvest the other part of the saving that should go to the index fund into myself and my side hustle. </div><div class="notion-blank notion-block-9406efbd7f7b42a0b9de6fb9dccb2c00"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-4e93a4e0465e42d2b815891e337bf596" data-id="4e93a4e0465e42d2b815891e337bf596"><span><div id="4e93a4e0465e42d2b815891e337bf596" class="notion-header-anchor"></div><a class="notion-hash-link" href="#4e93a4e0465e42d2b815891e337bf596" title="4. Know the game you are playing "><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">4. Know the game you are playing </span></span></h3><div class="notion-text notion-block-e72032f5a36a433cbac42f330d092f63">Is cosmetic an expense or an investment? I used to think that it is an expense because I am a software engineer and I don’t have a need to present myself beautifully in front of the client. But for others, it may be an investment. Or even for me, you know, pretty girls always have advantages. Anyway, what I am saying is everyone is playing different games. Everyone is playing their own game. Don’t compare yourself to others. Know what game you are playing and focus on it. </div><div class="notion-blank notion-block-d5ee94e60b9e4397868a1dad26646060"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-cac551bff65e40bb905a106645019200" data-id="cac551bff65e40bb905a106645019200"><span><div id="cac551bff65e40bb905a106645019200" class="notion-header-anchor"></div><a class="notion-hash-link" href="#cac551bff65e40bb905a106645019200" title="5. Saving money doesn’t need a reason"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">5. Saving money doesn’t need a reason</span></span></h3><div class="notion-text notion-block-05b76319cc6e42e9b2699d58e341568b">Saving and investment are lifelong games. The more you save, the more you can invest. When you have enough money, you can buy a car. We don’t start saving when we want to buy a car. We should save when we can (in a moderate way). Personally, I save whenever I can and I actually have to teach myself to spend when I should. But I have friends that save when they have the need. But the problem is it lacks a long-term perspective. Imagine one day, you decide to study an expensive course, which causes 5000 dollars, but you have no savings. It may take you one or two years to reach the amount of saving you need. When you form the habit of saving without the immediate need, you can use it when you need it immediately. </div><div class="notion-blank notion-block-0244aed74f1e40b09a3132c8d03f0750"> </div><div class="notion-text notion-block-dc25c57012f04b568318ae5e7a4b6a56">So these are some of my principles of personal finance. I have been trying to find a balance between risk and reward. After being a person who is extremely conservative on money, I realise that life is much more than saving for retirement. There are countless people who enjoy a fruitful life but don’t invest a penny into the index fund, instead, they invest in themselves. There is more than one way to be financially secure and we all need to find our own. </div><div class="notion-blank notion-block-0c924bb25e5543daa2740f4a5e253b4c"> </div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Thing is always better than you think]]></title>
            <link>/article/e7dd93cc-0749-459d-8c2f-8d0b51a897fa</link>
            <guid>e7dd93cc-0749-459d-8c2f-8d0b51a897fa</guid>
            <pubDate>Tue, 11 Apr 2023 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<div id="container" class="font-medium mx-auto undefined"><main class="notion light-mode notion-page notion-block-e7dd93cc0749459d8c2f8d0b51a897fa"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-ff68feb043184fc4981802a050e5f096">So I break down again. It was supposed to be another quiet night, but as I focus more on coding my portfolio, my disappointment in myself continues to build me. I keep pushing myself to do a bit more but my mind said otherwise. I want to move around, I want to challenge myself to all sorts of challenging yoga positions. I hate programming. I hate having to seat down in front of the computer every night after work and doing the same thing as work. </div><div class="notion-blank notion-block-3adb205edad04f4db03a9fe827524d6d"> </div><div class="notion-text notion-block-68f04969833a413a856490776c21dcc8">One small thing became the trigger. My mum occupied my desk for an hour, just an hour. She said my computer was on the desk anyway and I wasn’t going to do anything anyway. Yes, what I am doing is unimportant. I was already really unhappy about myself and yeah what I am doing is unimportant. </div><div class="notion-blank notion-block-029a41100f8b48e881e6afc8c7485f5d"> </div><div class="notion-text notion-block-82eaa5280201481880963840c9a21fa5">I don’t understand why I am so angry. </div><div class="notion-blank notion-block-26fa67c67d3944baa05a4a31984ee727"> </div><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-4059810c22cf4e1f9bd8f0ae7d675cab" data-id="4059810c22cf4e1f9bd8f0ae7d675cab"><span><div id="4059810c22cf4e1f9bd8f0ae7d675cab" class="notion-header-anchor"></div><a class="notion-hash-link" href="#4059810c22cf4e1f9bd8f0ae7d675cab" title="Take out a pen and write, understand your anger"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">Take out a pen and write, understand your anger</span></span></h4><div class="notion-text notion-block-9bc853a44c574362a97e8a1e650956d3">I don’t understand where my anger comes from. Everything seems so trivial. At least the trigger point is trivial. To understand the emotion, instead of expressing it verbally or even worse violently, I write everything down on paper. I didn’t control myself, I just let my anger be expressed on the paper. If someone looks at how I am writing, s/he would have known I am angry. </div><div class="notion-blank notion-block-5adfb659506a4062991dfdbe4dca527b"> </div><div class="notion-text notion-block-266f4438e4204d9bbce451496040e0f7">Don’t try to control any emotion. Don’t try to calm yourself down. Just write whatever comes to your mind. </div><div class="notion-blank notion-block-07139c8c0cf34ef7b5339d0312c42c67"> </div><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-e87d9fb6f3434227a81aa1e4c550d47b" data-id="e87d9fb6f3434227a81aa1e4c550d47b"><span><div id="e87d9fb6f3434227a81aa1e4c550d47b" class="notion-header-anchor"></div><a class="notion-hash-link" href="#e87d9fb6f3434227a81aa1e4c550d47b" title="As I write I get more understanding.."><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">As I write I get more understanding..</span></span></h4><div class="notion-text notion-block-075f1f5a804c48e79444318b0d27031a">I am about to move to a new country with a very high probability that I would be able to find an IT job, given how bad the economy right now is. I am insecure. On the other hand, I always want to try something else, because I don’t feel like I like software engineering is my true calling. If you ask me whether I would regret when I die if I didn’t try out the other career path, it is a definitive yes. But, software engineering is a high-paying and stable job. I am afraid of losing my current living standard. The uncertainty is great. The risk is great. ‘</div><div class="notion-blank notion-block-50286e2aedb8485daa5183c59977f832"> </div><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-857a0556d2d442a6bbf95e095ab82f6d" data-id="857a0556d2d442a6bbf95e095ab82f6d"><span><div id="857a0556d2d442a6bbf95e095ab82f6d" class="notion-header-anchor"></div><a class="notion-hash-link" href="#857a0556d2d442a6bbf95e095ab82f6d" title="Is the risk really that big?"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">Is the risk really that big?</span></span></h4><div class="notion-text notion-block-25b9d498ea314ce69611ae6a9eb2f530">What’s the worst-case scenario? Losing my saving and have to go back to Hong Kong and wasted a year or two. How likely is that scenario? How likely that I learn nothing during that two year? Well, I can get a job as a waiter at least. But I will still have enough income to cover my expense. I will waste two years exploring a new country. But I would also set my IT career for 2 years if I have to go back. </div><div class="notion-blank notion-block-dfad27a0dc734019ae0dd5d39eca7396"> </div><div class="notion-text notion-block-56fa183f00f943f8b11385bfafc9e20a">What’s the potential return? Finding a career that I enjoy more. Finding a country that I am willing to stay.</div><div class="notion-blank notion-block-d89a4531c09e4faa8e16b6ddfc4e82c1"> </div><div class="notion-text notion-block-10da381f49284a03b637bf006e383438">The risk is limited and the reward is immense! Why do I worry?</div><div class="notion-blank notion-block-97282426a5a74072b4c1927982ad5da7"> </div><div class="notion-blank notion-block-481debf17b1f413792a5123fccc71858"> </div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[from Reading to Action]]></title>
            <link>/article/3ffd9720-8199-4c12-ad1f-53af9c4f52f4</link>
            <guid>3ffd9720-8199-4c12-ad1f-53af9c4f52f4</guid>
            <pubDate>Sun, 09 Apr 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[This is the inspiration I get from reading an interview with a founder of a renowned company in Taiwan]]></description>
            <content:encoded><![CDATA[<div id="container" class="font-medium mx-auto undefined"><main class="notion light-mode notion-page notion-block-3ffd972081994c12ad1f53af9c4f52f4"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-0f6c0a3050414db1b70d0466aef245b2">Notes: This article is the notes inspired by another article, which is the interview with the founder of Advantech. Unfortunately, it is only in Chinese. But I put the link below anyway. </div><div class="notion-blank notion-block-6a008ebd6bc649f28659f4d7d28301dc"> </div><div class="notion-text notion-block-fdfb9375f9e04de5a6564efe25081f98">Link to the article: <a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://www.cheers.com.tw/article/article.action?id=5100821&amp;page=3">https://www.cheers.com.tw/article/article.action?id=5100821&amp;page=3</a></div><div class="notion-blank notion-block-e1b2999570184e948a5d99e7cb85029a"> </div><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-dded94acb7ee4830b3e946be579c6525" data-id="dded94acb7ee4830b3e946be579c6525"><span><div id="dded94acb7ee4830b3e946be579c6525" class="notion-header-anchor"></div><a class="notion-hash-link" href="#dded94acb7ee4830b3e946be579c6525" title="Read to assist your thinking"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">Read to assist your thinking</span></span></h4><div class="notion-text notion-block-003fb0e5e98e441390a012c6ebe2fc85">3 steps. Read, think and act. From reading to acting, we need to think and internalise the knowledge we get from books. Often I feel there is a disconnection between reading to living. When I read a book, I usually get an urge for motivation that lasts for a few days. When the motivation faded, so did the book and all the knowledge. The missing step in between is thinking and building a system or integrating everything into our system. </div><div class="notion-blank notion-block-f4687ac8894c4a3f92df72a30ecc24cf"> </div><div class="notion-text notion-block-d68e6a896f46478e917265cb1311e5ff">In fact, thinking is more important than reading. Only when you have the habit of thinking, and forming your own opinion, would you be able to act in the right direction. Reading is the tool to open the horizon. But the knowledge will never be yours if you can’t integrate it into your own system. So forming the habit of thinking is prior to forming the habit of reading. To think clearly, you would need the habit of writing. </div><div class="notion-blank notion-block-04ac1ad3e5ca43ca9a276224e7d6ccaf"> </div><div class="notion-text notion-block-b9ad5028a1904566a4ae1a52f0b22bb0">Think → Write → Read → Think → Write... </div><div class="notion-blank notion-block-9055dc6bf14041979c0b7c7e6e5ca626"> </div><div class="notion-text notion-block-5aa6a0b7122d43988bf4943e1f814cd9">Think and write is output and read is input. The ratio of input and output is at best 20/80 and the input needs to be of high quality. </div><div class="notion-blank notion-block-6c37ffac7edc40a4aecdbb64f90793f5"> </div><div class="notion-text notion-block-03cfe2eda6e04c31b94c75aa55664fb7">But, the quality of the reading is determined by the reader. A poorly written article can also inspire you to write a good one. Think creatively and you will be able to turn any material into a magic piece. That’s why thinking is essential. Without thinking, any form of reading won’t give you any value. </div><div class="notion-blank notion-block-6d823f7c200c470d8af66da4a55a9bb5"> </div><div class="notion-text notion-block-71293a0f38cf42c99df03f78a5e3735d"><b><b><b><b>From reading to acting</b></b></b></b></div><div class="notion-text notion-block-7f262db6e56b4a69b0f399c04fd474bb">In the article, it mentioned a framework that the founder uses to aid his thinking. </div><div class="notion-text notion-block-df08dfdf13534cf995a014665d8ed42a">1. Subject</div><div class="notion-text notion-block-3d772e56281c447291de5398d29034b6">2. Key point</div><ol start="1" class="notion-list notion-list-numbered notion-block-86b9f084328f4a6c888a5923d6677b60"><li>Fact</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-7e06f1829a044b6a85ace38b80552474"><li>Analyse</li></ol><ol start="3" class="notion-list notion-list-numbered notion-block-0557754aa9664fe3bfb0a8d40a986a0e"><li>Action</li></ol><div class="notion-blank notion-block-fc6388d6e79f48bcbae2ae28dfb48be6"> </div><div class="notion-text notion-block-d1316745d1d942cf88a2fd80fcdc5aac">Personally, I think it is a pretty solid thinking framework, that emphasises asking the right question and ultimately leads to actions. Actions don’t need to be perfect at first. The use of the first initial few steps is to build momentum. </div><div class="notion-blank notion-block-68ffad3e30b24173b641a7e5ab0f73fe"> </div><div class="notion-text notion-block-aa94da7816b640a983bbf22a3b9fc3a9">So this is the take away of the article! I am writing this article casually to build momentum as well!</div><div class="notion-blank notion-block-f2f74b7edb7b4ecaa0a71fce70fd2ad3"> </div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Subtle Art of Not Giving a Fu*k]]></title>
            <link>/article/06504e2c-44f5-460b-a2f4-30190ad5b85f</link>
            <guid>06504e2c-44f5-460b-a2f4-30190ad5b85f</guid>
            <pubDate>Tue, 28 Mar 2023 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<div id="container" class="font-medium mx-auto undefined"><main class="notion light-mode notion-page notion-block-06504e2c44f5460ba2f430190ad5b85f"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-blank notion-block-179e8a7759fc48c5963f35297e2f196c"> </div><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-01fdb1e095dc45d68dc6259bf2e40d91" data-id="01fdb1e095dc45d68dc6259bf2e40d91"><span><div id="01fdb1e095dc45d68dc6259bf2e40d91" class="notion-header-anchor"></div><a class="notion-hash-link" href="#01fdb1e095dc45d68dc6259bf2e40d91" title="A few words about this book"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">A few words about this book</span></span></h4><div class="notion-text notion-block-ff7282d692f049df8c2ad34eb0899fee">Recently I have been repressing myself from reading self-help books because I am tired of it. They are repetitive and can only give you a burst of motivation just for that short period of time. </div><div class="notion-blank notion-block-96724464f5ea48a08371388e5b3e05e3"> </div><div class="notion-text notion-block-0ea444f4634c4cdf8ef2c596691f90e8">But this book is different. I didn’t get more motivated after reading this. My life still sucks and is full of problems. Mark Manson, the author, didn’t claim to solve all of my life problems after all. Instead, he told you the truth that <b>suffering is inevitable, but what matters is what are you suffering for</b>. This is the biggest talk away I have from this book. </div><div class="notion-blank notion-block-eba2e40e75054554940596cb92b6c581"> </div><div class="notion-text notion-block-524cf791b6b1463ea713a1186706ab24"><b>Real happiness is solving problems that matter.</b> It is the second biggest takeaway for me. Our work is solving problem after problem. I am the happiest when I can focus on solving a coding problem. I am depressed when I have nothing to do at work and am idle in front of the computer.  But not every problem is worth solving, even at work. In fact, I often think most of the tasks at work doesn’t worth spending time on and I have tried hard to discover their meaning (or invent their meaning). So happy life is about solving meaningful problems is indeed the very truth for me. </div><div class="notion-blank notion-block-ced4b05800ab4f5d918e8ce35c1c0ddd"> </div><div class="notion-text notion-block-be08d5d0d0904831978c70b44f2d5985">Another thing I like about this book is that it didn’t tell you to be positive. I have been trying for years to be positive all the time, but each trial only gets me more depressed. I got stuck in the feedback loop from hell. I am guilty of my guilt, which makes me more guilty. No one can be positive all the time. The pursuit of happiness can only result in unhappiness. The pursuit itself already indicates that you are not happy. </div><div class="notion-blank notion-block-0977970b02d54d85801caf698fff40a2"> </div><div class="notion-text notion-block-e349efd457a54785a8a5f34be246321f">Ask and solve the right problem ←- The motto of life </div><div class="notion-blank notion-block-2df23cd35f824e83a29803c45dd1ee63"> </div><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-7bd77de1e54e4bd68d2bb3f30e784eba" data-id="7bd77de1e54e4bd68d2bb3f30e784eba"><span><div id="7bd77de1e54e4bd68d2bb3f30e784eba" class="notion-header-anchor"></div><a class="notion-hash-link" href="#7bd77de1e54e4bd68d2bb3f30e784eba" title="So WTF does this book talk about in short? "><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">So WTF does this book talk about in short? </span></span></h4><ul class="notion-list notion-list-disc notion-block-aea82849d515410293c8a92feebc4f69"><li>Only gives a fuck on what matters. </li></ul><ul class="notion-list notion-list-disc notion-block-e340751c37cf4ce99bf8ce4e9c9851d0"><li>Pain is inevitable. Accept it and be open to it</li></ul><ul class="notion-list notion-list-disc notion-block-f6437cc21d1642e19ac92702146c2a3f"><li>Real happiness in life comes from solving the problem of what matters</li></ul><ul class="notion-list notion-list-disc notion-block-61a29a3e75ce4b7b8f2eb47f78e9fc6c"><li>The meaning of life is solving problems that mean something</li></ul><ul class="notion-list notion-list-disc notion-block-c4563cf3877c4010a40d5b671d13e63b"><li>Self-worth is being able to look at your negative side honestly and seek improvement.</li></ul><ul class="notion-list notion-list-disc notion-block-f3ea5519ab4c40bbb4035d7fb0ecf0e8"><li>Entitlement and victimised are the real dangers, self-deceptive and create false confidence. Selfishness</li></ul><ul class="notion-list notion-list-disc notion-block-05d4bc65d92c4ef9a202fbbbecf61206"><li>The question to ask is what you are suffering? Too precise for what value you are suffering for. Suffering always exists. But we should suffer for good value, worthy that worth pursuing</li></ul><ul class="notion-list notion-list-disc notion-block-1492c1fa3fbd4229a6c99a5bf7f6fa3c"><li>You always have a choice and you are always choosing.
Fault and responsibility are two things. It may not be your fault but it is your responsibility to act or not to act, to give a fuck or to not give a fuck</li></ul><ul class="notion-list notion-list-disc notion-block-353b214fea984fb2909e639b00c3fcb2"><li>We are often very wrong about ourselves.</li></ul><ul class="notion-list notion-list-disc notion-block-2c8ad8c056404d5db4930d82b1e12e3c"><li>Value is an ongoing process of lifelong fulfilment. Failure is part of growth. Pain is unavoidable when we fail. But success is made by countless attempts and failures</li></ul><ul class="notion-list notion-list-disc notion-block-d7904573c5584c21b18f521a5abe5707"><li>Rejection could make your life better by allowing you to focus on what you should give a fuck on. Don’t be afraid that rejection could break a relationship. Solid relationships should build upon trust, not condition.</li></ul><ul class="notion-list notion-list-disc notion-block-fa793ecd782b4b2fbb5135d99cfe417a"><li>Don’t exchange breadth for depth. There are things you can only experience when you commit to it</li></ul><div class="notion-blank notion-block-f44e14a3b4c84c668ca2c130667dd3c0"> </div></main></div>]]></content:encoded>
        </item>
    </channel>
</rss>