{"componentChunkName":"component---src-templates-tags-js","path":"/tags/regression","result":{"pageContext":{"posts":{"Mutation Testing":[{"excerpt":"Mutation Testing Mutation Testing - very interesting idea to verify your tests are actually testing something. Wonder if it is any good for real code. Thinking about a big organization, the only way to track the progress and make sure the code…","html":"<h1>Mutation Testing</h1>\n<p><a href=\"https://www.guru99.com/mutation-testing.html\">Mutation Testing</a> - very interesting idea to verify your tests are actually testing something. Wonder if it is any good for real code.</p>\n<p>Thinking about a big organization, the only way to track the progress and make sure the code quality meets the bar is measuring the code coverage rate, and this could be a good tool to make sure those tests are good and valid.</p>\n<ul>\n<li><a href=\"https://stryker-mutator.io/\">Stryker</a></li>\n</ul>","id":"cfe7fb20-ef49-56f3-a7cd-c6818413e501","timeToRead":1,"frontmatter":{"date":"2020-03-08T23:45:54.543Z","path":"/mutation-testing","tags":["Mutation Testing"],"title":"Mutation Testing"}}],"quarkus":[{"excerpt":"Quarkus Cheat Sheet Found a really good cheat sheet for . https://lordofthejars.github.io/quarkus-cheat-sheet/","html":"<h1>Quarkus Cheat Sheet</h1>\n<p>Found a really good cheat sheet for <code class=\"language-text\">Quarkus</code>. <a href=\"https://lordofthejars.github.io/quarkus-cheat-sheet/\">https://lordofthejars.github.io/quarkus-cheat-sheet/</a></p>","id":"e816ac4d-e4c6-5eb9-a3af-3cda8fc59344","timeToRead":1,"frontmatter":{"date":"2020-03-02T11:54:39.287Z","path":"/quarkus-cheat-sheet","tags":["quarkus","CheatSheet"],"title":"Quarkus Cheat Sheet"}},{"excerpt":"Quarkus And Spring I spent few days learning different Micro-service frameworks. The first framework I choose is actually , but once I start investigating , I realized one thing that seems important to me. It looks like , but it's another . Once you…","html":"<h1>Quarkus And Spring</h1>\n<p>I spent few days learning different Micro-service frameworks. The first framework I choose is actually <code class=\"language-text\">Micronaut</code>, but once I start investigating <code class=\"language-text\">Micronaut</code>, I realized one thing that seems important to me. It looks like <code class=\"language-text\">Spring</code>, but it's another <code class=\"language-text\">Spring</code>. Once you locked in the eco-system. it's hard to get out. So I start looking for something that is more standard so I choose <code class=\"language-text\">Quarkus</code>, backed by RedHat that implements <code class=\"language-text\">Eclipse MicroProfile</code>, that should make it relatively easy to port to other platform that also support <code class=\"language-text\">MicroProfile</code>.</p>\n<p>The more I use, the more I like it, even it is still a new framework.</p>\n<p>Things I like <code class=\"language-text\">Quarkus</code> so far</p>\n<ul>\n<li>Fast. It is faster then Spring. With hot reload, it’s save you lots of waiting time.</li>\n<li>Standard. It support Eclipse MicroProfile, means it uses more standard ways to do things like rest endpoint annotations, dependency injection, openapi …etc.  That also means porting to another platform should be less painful then others.</li>\n<li>Easy to learn. It’s similar to Spring, if you have some Spring background, should be really easy to pick up.</li>\n<li>GraalVM supports. Building native images is build-in, it could significantly reduce the startup time and memory usage.</li>\n</ul>\n<p>Things I thing it can improve</p>\n<ul>\n<li>Building with <code class=\"language-text\">Gradle</code> is still in progress. I just hit some known issue and have to switch to Maven.</li>\n<li>IDE support is not as good as Spring. It’s Ok, but still needs a bit of setup in order to get debugger working.</li>\n</ul>","id":"9ea1209c-d7e8-549b-91b5-311f639340a9","timeToRead":1,"frontmatter":{"date":"2020-03-02T04:18:56.083Z","path":"/quarkus-and-spring","tags":["quarkus","spring","microservice","mircoprofile"],"title":"Quarkus And Spring"}}],"CheatSheet":[{"excerpt":"Quarkus Cheat Sheet Found a really good cheat sheet for . https://lordofthejars.github.io/quarkus-cheat-sheet/","html":"<h1>Quarkus Cheat Sheet</h1>\n<p>Found a really good cheat sheet for <code class=\"language-text\">Quarkus</code>. <a href=\"https://lordofthejars.github.io/quarkus-cheat-sheet/\">https://lordofthejars.github.io/quarkus-cheat-sheet/</a></p>","id":"e816ac4d-e4c6-5eb9-a3af-3cda8fc59344","timeToRead":1,"frontmatter":{"date":"2020-03-02T11:54:39.287Z","path":"/quarkus-cheat-sheet","tags":["quarkus","CheatSheet"],"title":"Quarkus Cheat Sheet"}}],"spring":[{"excerpt":"Quarkus And Spring I spent few days learning different Micro-service frameworks. The first framework I choose is actually , but once I start investigating , I realized one thing that seems important to me. It looks like , but it's another . Once you…","html":"<h1>Quarkus And Spring</h1>\n<p>I spent few days learning different Micro-service frameworks. The first framework I choose is actually <code class=\"language-text\">Micronaut</code>, but once I start investigating <code class=\"language-text\">Micronaut</code>, I realized one thing that seems important to me. It looks like <code class=\"language-text\">Spring</code>, but it's another <code class=\"language-text\">Spring</code>. Once you locked in the eco-system. it's hard to get out. So I start looking for something that is more standard so I choose <code class=\"language-text\">Quarkus</code>, backed by RedHat that implements <code class=\"language-text\">Eclipse MicroProfile</code>, that should make it relatively easy to port to other platform that also support <code class=\"language-text\">MicroProfile</code>.</p>\n<p>The more I use, the more I like it, even it is still a new framework.</p>\n<p>Things I like <code class=\"language-text\">Quarkus</code> so far</p>\n<ul>\n<li>Fast. It is faster then Spring. With hot reload, it’s save you lots of waiting time.</li>\n<li>Standard. It support Eclipse MicroProfile, means it uses more standard ways to do things like rest endpoint annotations, dependency injection, openapi …etc.  That also means porting to another platform should be less painful then others.</li>\n<li>Easy to learn. It’s similar to Spring, if you have some Spring background, should be really easy to pick up.</li>\n<li>GraalVM supports. Building native images is build-in, it could significantly reduce the startup time and memory usage.</li>\n</ul>\n<p>Things I thing it can improve</p>\n<ul>\n<li>Building with <code class=\"language-text\">Gradle</code> is still in progress. I just hit some known issue and have to switch to Maven.</li>\n<li>IDE support is not as good as Spring. It’s Ok, but still needs a bit of setup in order to get debugger working.</li>\n</ul>","id":"9ea1209c-d7e8-549b-91b5-311f639340a9","timeToRead":1,"frontmatter":{"date":"2020-03-02T04:18:56.083Z","path":"/quarkus-and-spring","tags":["quarkus","spring","microservice","mircoprofile"],"title":"Quarkus And Spring"}}],"microservice":[{"excerpt":"Quarkus And Spring I spent few days learning different Micro-service frameworks. The first framework I choose is actually , but once I start investigating , I realized one thing that seems important to me. It looks like , but it's another . Once you…","html":"<h1>Quarkus And Spring</h1>\n<p>I spent few days learning different Micro-service frameworks. The first framework I choose is actually <code class=\"language-text\">Micronaut</code>, but once I start investigating <code class=\"language-text\">Micronaut</code>, I realized one thing that seems important to me. It looks like <code class=\"language-text\">Spring</code>, but it's another <code class=\"language-text\">Spring</code>. Once you locked in the eco-system. it's hard to get out. So I start looking for something that is more standard so I choose <code class=\"language-text\">Quarkus</code>, backed by RedHat that implements <code class=\"language-text\">Eclipse MicroProfile</code>, that should make it relatively easy to port to other platform that also support <code class=\"language-text\">MicroProfile</code>.</p>\n<p>The more I use, the more I like it, even it is still a new framework.</p>\n<p>Things I like <code class=\"language-text\">Quarkus</code> so far</p>\n<ul>\n<li>Fast. It is faster then Spring. With hot reload, it’s save you lots of waiting time.</li>\n<li>Standard. It support Eclipse MicroProfile, means it uses more standard ways to do things like rest endpoint annotations, dependency injection, openapi …etc.  That also means porting to another platform should be less painful then others.</li>\n<li>Easy to learn. It’s similar to Spring, if you have some Spring background, should be really easy to pick up.</li>\n<li>GraalVM supports. Building native images is build-in, it could significantly reduce the startup time and memory usage.</li>\n</ul>\n<p>Things I thing it can improve</p>\n<ul>\n<li>Building with <code class=\"language-text\">Gradle</code> is still in progress. I just hit some known issue and have to switch to Maven.</li>\n<li>IDE support is not as good as Spring. It’s Ok, but still needs a bit of setup in order to get debugger working.</li>\n</ul>","id":"9ea1209c-d7e8-549b-91b5-311f639340a9","timeToRead":1,"frontmatter":{"date":"2020-03-02T04:18:56.083Z","path":"/quarkus-and-spring","tags":["quarkus","spring","microservice","mircoprofile"],"title":"Quarkus And Spring"}}],"mircoprofile":[{"excerpt":"Quarkus And Spring I spent few days learning different Micro-service frameworks. The first framework I choose is actually , but once I start investigating , I realized one thing that seems important to me. It looks like , but it's another . Once you…","html":"<h1>Quarkus And Spring</h1>\n<p>I spent few days learning different Micro-service frameworks. The first framework I choose is actually <code class=\"language-text\">Micronaut</code>, but once I start investigating <code class=\"language-text\">Micronaut</code>, I realized one thing that seems important to me. It looks like <code class=\"language-text\">Spring</code>, but it's another <code class=\"language-text\">Spring</code>. Once you locked in the eco-system. it's hard to get out. So I start looking for something that is more standard so I choose <code class=\"language-text\">Quarkus</code>, backed by RedHat that implements <code class=\"language-text\">Eclipse MicroProfile</code>, that should make it relatively easy to port to other platform that also support <code class=\"language-text\">MicroProfile</code>.</p>\n<p>The more I use, the more I like it, even it is still a new framework.</p>\n<p>Things I like <code class=\"language-text\">Quarkus</code> so far</p>\n<ul>\n<li>Fast. It is faster then Spring. With hot reload, it’s save you lots of waiting time.</li>\n<li>Standard. It support Eclipse MicroProfile, means it uses more standard ways to do things like rest endpoint annotations, dependency injection, openapi …etc.  That also means porting to another platform should be less painful then others.</li>\n<li>Easy to learn. It’s similar to Spring, if you have some Spring background, should be really easy to pick up.</li>\n<li>GraalVM supports. Building native images is build-in, it could significantly reduce the startup time and memory usage.</li>\n</ul>\n<p>Things I thing it can improve</p>\n<ul>\n<li>Building with <code class=\"language-text\">Gradle</code> is still in progress. I just hit some known issue and have to switch to Maven.</li>\n<li>IDE support is not as good as Spring. It’s Ok, but still needs a bit of setup in order to get debugger working.</li>\n</ul>","id":"9ea1209c-d7e8-549b-91b5-311f639340a9","timeToRead":1,"frontmatter":{"date":"2020-03-02T04:18:56.083Z","path":"/quarkus-and-spring","tags":["quarkus","spring","microservice","mircoprofile"],"title":"Quarkus And Spring"}}],"gatsbyjs":[{"excerpt":"Install Prism Plugin Prism is a lightweight, extensible syntax highlighter. Gatsby JS comes with a well integrated plugin. Follow the instruction then you can render code snippets in a nice looking way.  Here is an example. The follwing markdown…","html":"<h1>Install Prism Plugin</h1>\n<p>Prism is a lightweight, extensible syntax highlighter. Gatsby JS comes with a well integrated <a href=\"https://www.gatsbyjs.org/packages/gatsby-remark-prismjs/?=\">plugin</a>. Follow the instruction then you can render code snippets in a nice looking way. </p>\n<p>Here is an example. The follwing markdown </p>\n<div class=\"gatsby-highlight\" data-language=\"markdown\"><pre class=\"language-markdown\"><code class=\"language-markdown\">```javascript\n// In your gatsby-config.js\nplugins: [\n  {\n    resolve: <span class=\"token code keyword\">`gatsby-transformer-remark`</span>,\n    options: {\n      plugins: [\n        <span class=\"token code keyword\">`gatsby-remark-prismjs`</span>,\n      ]\n    }\n  }\n]</code></pre></div>\n<p>will become</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// In your gatsby-config.js</span>\nplugins<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n  <span class=\"token punctuation\">{</span>\n    resolve<span class=\"token operator\">:</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">gatsby-transformer-remark</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">,</span>\n    options<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n      plugins<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n        <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">gatsby-remark-prismjs</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">,</span>\n      <span class=\"token punctuation\">]</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">]</span></code></pre></div>\n<p>And we can try some typescript code as well.</p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">interface</span> <span class=\"token class-name\">Person</span> <span class=\"token punctuation\">{</span>\n    name<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">,</span>\n    age<span class=\"token operator\">:</span> <span class=\"token builtin\">number</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">let</span> john <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n    name<span class=\"token operator\">:</span> <span class=\"token string\">\"John\"</span><span class=\"token punctuation\">,</span>\n    age<span class=\"token operator\">:</span> <span class=\"token number\">39</span>\n<span class=\"token punctuation\">}</span> <span class=\"token keyword\">as</span> Person<span class=\"token punctuation\">;</span></code></pre></div>","id":"40b1ec34-5356-5cec-b23f-d9f3fe357d69","timeToRead":1,"frontmatter":{"date":"2018-08-23T12:02:03.913Z","path":"/install-prism-plugin","tags":["gatsbyjs","prismjs"],"title":"Install Prism Plugin"}}],"prismjs":[{"excerpt":"Install Prism Plugin Prism is a lightweight, extensible syntax highlighter. Gatsby JS comes with a well integrated plugin. Follow the instruction then you can render code snippets in a nice looking way.  Here is an example. The follwing markdown…","html":"<h1>Install Prism Plugin</h1>\n<p>Prism is a lightweight, extensible syntax highlighter. Gatsby JS comes with a well integrated <a href=\"https://www.gatsbyjs.org/packages/gatsby-remark-prismjs/?=\">plugin</a>. Follow the instruction then you can render code snippets in a nice looking way. </p>\n<p>Here is an example. The follwing markdown </p>\n<div class=\"gatsby-highlight\" data-language=\"markdown\"><pre class=\"language-markdown\"><code class=\"language-markdown\">```javascript\n// In your gatsby-config.js\nplugins: [\n  {\n    resolve: <span class=\"token code keyword\">`gatsby-transformer-remark`</span>,\n    options: {\n      plugins: [\n        <span class=\"token code keyword\">`gatsby-remark-prismjs`</span>,\n      ]\n    }\n  }\n]</code></pre></div>\n<p>will become</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// In your gatsby-config.js</span>\nplugins<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n  <span class=\"token punctuation\">{</span>\n    resolve<span class=\"token operator\">:</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">gatsby-transformer-remark</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">,</span>\n    options<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n      plugins<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n        <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">gatsby-remark-prismjs</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">,</span>\n      <span class=\"token punctuation\">]</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">]</span></code></pre></div>\n<p>And we can try some typescript code as well.</p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">interface</span> <span class=\"token class-name\">Person</span> <span class=\"token punctuation\">{</span>\n    name<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">,</span>\n    age<span class=\"token operator\">:</span> <span class=\"token builtin\">number</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">let</span> john <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n    name<span class=\"token operator\">:</span> <span class=\"token string\">\"John\"</span><span class=\"token punctuation\">,</span>\n    age<span class=\"token operator\">:</span> <span class=\"token number\">39</span>\n<span class=\"token punctuation\">}</span> <span class=\"token keyword\">as</span> Person<span class=\"token punctuation\">;</span></code></pre></div>","id":"40b1ec34-5356-5cec-b23f-d9f3fe357d69","timeToRead":1,"frontmatter":{"date":"2018-08-23T12:02:03.913Z","path":"/install-prism-plugin","tags":["gatsbyjs","prismjs"],"title":"Install Prism Plugin"}}],"dry":[{"excerpt":"Feature Toggle And Regression It is OK to violate DRY principls to copy the code when working on a new feature that is high couple to old behaviour. As a professional software engineer, I kind of strickly obey the DRY principals, and don't want to…","html":"<h1>Feature Toggle And Regression</h1>\n<p>It is OK to violate DRY principls to copy the code when working on a new feature that is high couple to old behaviour.</p>\n<p>As a professional software engineer, I kind of strickly obey the DRY principals, and don't want to introduce any regression. But this could end up you can not easily to write a clean code and refactor. You need to branch your code in the exisitng code base. </p>\n<p>Copy the exisitng code will ease your regresion nightmare. Once toggle is removed, the old code will disappear, so you are not violating DRY prinsipal any more. But you need to make sure the toggle will be removed and old behaviour will not needed. Otherwise, you could put yourself in a situation that DRY try to address, maintain multiple codes that basically indentical.</p>","id":"542576fb-98c8-5d3b-ae45-751baaf7b524","timeToRead":1,"frontmatter":{"date":"2018-08-09T21:12:26.441Z","path":"/feature-toggle-and-regression","tags":["dry","feature-toogle","regression"],"title":"Feature Toggle And Regression"}}],"feature-toogle":[{"excerpt":"Feature Toggle And Regression It is OK to violate DRY principls to copy the code when working on a new feature that is high couple to old behaviour. As a professional software engineer, I kind of strickly obey the DRY principals, and don't want to…","html":"<h1>Feature Toggle And Regression</h1>\n<p>It is OK to violate DRY principls to copy the code when working on a new feature that is high couple to old behaviour.</p>\n<p>As a professional software engineer, I kind of strickly obey the DRY principals, and don't want to introduce any regression. But this could end up you can not easily to write a clean code and refactor. You need to branch your code in the exisitng code base. </p>\n<p>Copy the exisitng code will ease your regresion nightmare. Once toggle is removed, the old code will disappear, so you are not violating DRY prinsipal any more. But you need to make sure the toggle will be removed and old behaviour will not needed. Otherwise, you could put yourself in a situation that DRY try to address, maintain multiple codes that basically indentical.</p>","id":"542576fb-98c8-5d3b-ae45-751baaf7b524","timeToRead":1,"frontmatter":{"date":"2018-08-09T21:12:26.441Z","path":"/feature-toggle-and-regression","tags":["dry","feature-toogle","regression"],"title":"Feature Toggle And Regression"}}],"regression":[{"excerpt":"Feature Toggle And Regression It is OK to violate DRY principls to copy the code when working on a new feature that is high couple to old behaviour. As a professional software engineer, I kind of strickly obey the DRY principals, and don't want to…","html":"<h1>Feature Toggle And Regression</h1>\n<p>It is OK to violate DRY principls to copy the code when working on a new feature that is high couple to old behaviour.</p>\n<p>As a professional software engineer, I kind of strickly obey the DRY principals, and don't want to introduce any regression. But this could end up you can not easily to write a clean code and refactor. You need to branch your code in the exisitng code base. </p>\n<p>Copy the exisitng code will ease your regresion nightmare. Once toggle is removed, the old code will disappear, so you are not violating DRY prinsipal any more. But you need to make sure the toggle will be removed and old behaviour will not needed. Otherwise, you could put yourself in a situation that DRY try to address, maintain multiple codes that basically indentical.</p>","id":"542576fb-98c8-5d3b-ae45-751baaf7b524","timeToRead":1,"frontmatter":{"date":"2018-08-09T21:12:26.441Z","path":"/feature-toggle-and-regression","tags":["dry","feature-toogle","regression"],"title":"Feature Toggle And Regression"}}],"probelm solving":[{"excerpt":"Looking At The Root Problem Sometime when we are working on a hard problem, we will kind of stuck in the middle and found lots of hacky way to overcome the problem. But lots of time, the solution is not perfect and you need to keep coming back cause…","html":"<h1>Looking At The Root Problem</h1>\n<p>Sometime when we are working on a hard problem, we will kind of stuck in the middle and found lots of hacky way to overcome the problem. But lots of time, the solution is not perfect and you need to keep coming back cause sometime it simply doesn't work. Sometimes, you need to look at the big picture, it might solve the problem entirely.</p>\n<p>Here is an example, the product I am working on has to support i18n. Means need to support multiple languages. The problem we have is we don't know when we will recieve the translations. If the translation doesn't come back by the time we ship our code, user will see some missing string when viewing in the languages other then English.</p>\n<p>To overcome this problem, we come up with an idea by adding fallback logic in our code base. If user is not viewing English, then we inject the missing translation in English. This works well, but it is time consuming. Adding the fallback logic is time consuming, removing the logic when translation came back is time consuming too.</p>\n<p>By looking at the problem again, we found we can simply using webpack plugin to merge the translation file, all the missing string in the translation files will be replace with English string. This only took me few hours to implement, but the on going cost of adding and removing fallback logic is uncountable.</p>","id":"5ee5b110-e95b-5143-a043-a56280d46113","timeToRead":1,"frontmatter":{"date":"2018-08-09T06:34:51.232Z","path":"/looking-at-the-root-problem","tags":["probelm solving"],"title":"Looking At The Root Problem"}}],"productivity":[{"excerpt":"Thoughts About Productivity Distrative Spot any steps in thw workflow that could easily distract from your work. For example, a developer might occarually run an end to end test. This e2e srcipts need few steps to complete.  install dependencies…","html":"<h1>Thoughts About Productivity</h1>\n<h2>Distrative</h2>\n<p>Spot any steps in thw workflow that could easily distract from your work. For example, a developer might occarually run an end to end test. This e2e srcipts need few steps to complete. </p>\n<ol>\n<li>install dependencies</li>\n<li>update webdriver</li>\n<li>start webdriver</li>\n<li>run the test scripts\nThe steps might look simple and easy to follow. But to an ordanary developer like myself, can only vaguely remember how to do this few weeks later. So what ends up is, I alwasy need to check the README or whatever that document the process. This is a distraction. A distraction will end up lots of mental cost, including context switching.\nA developer might developing a feature and just want to know wheather his code will pass the e2e tests, but now he has forced to switch context to learn how to run the tests again.\nIf these steps can be run in a single command, like <code class=\"language-text\">npm run e2e-test</code>, then it is a way better improvement in terms of distraction. A single command is way easy to remember than a sequnce of commands.</li>\n</ol>\n<p>Scripting all simple process if possible.</p>","id":"92d39662-079d-5be0-8933-2519895f0c0d","timeToRead":1,"frontmatter":{"date":"2018-08-08T22:38:22.164Z","path":"/thoughts-about-productivity","tags":["productivity"],"title":"Thoughts About Productivity"}}],"mermaid":[{"excerpt":"I really like the idea to embed a chart in the makedown with a very simple and readable syntax. And gatsby already have a plugin for it. gatsby-remark-graph This is a test chart with mermaid plugin.","html":"<p>I really like the idea to embed a chart in the makedown with a very simple and readable syntax. And gatsby already have a plugin for it. <a href=\"https://www.gatsbyjs.org/packages/gatsby-remark-graph/\">gatsby-remark-graph</a></p>\n<p>This is a test chart with mermaid plugin.</p>\n<div class=\"mermaid\" data-processed=\"true\"><svg id=\"mermaid-1583711384349\" width=\"407.8046875\" xmlns=\"http://www.w3.org/2000/svg\" height=\"166.71875\" viewBox=\"0 0 407.8046875 166.71875\"><style>#mermaid-1583711384349 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);color:#333}#mermaid-1583711384349 .label text{fill:#333}#mermaid-1583711384349 .node rect,#mermaid-1583711384349 .node circle,#mermaid-1583711384349 .node ellipse,#mermaid-1583711384349 .node polygon,#mermaid-1583711384349 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-1583711384349 .node .label{text-align:center}#mermaid-1583711384349 .node.clickable{cursor:pointer}#mermaid-1583711384349 .arrowheadPath{fill:#333}#mermaid-1583711384349 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-1583711384349 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-1583711384349 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-1583711384349 .cluster text{fill:#333}#mermaid-1583711384349 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-1583711384349 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-1583711384349 text.actor{fill:#000;stroke:none}#mermaid-1583711384349 .actor-line{stroke:grey}#mermaid-1583711384349 .messageLine0{stroke-width:1.5;stroke-dasharray:'2 2';stroke:#333}#mermaid-1583711384349 .messageLine1{stroke-width:1.5;stroke-dasharray:'2 2';stroke:#333}#mermaid-1583711384349 #arrowhead{fill:#333}#mermaid-1583711384349 .sequenceNumber{fill:#fff}#mermaid-1583711384349 #sequencenumber{fill:#333}#mermaid-1583711384349 #crosshead path{fill:#333 !important;stroke:#333 !important}#mermaid-1583711384349 .messageText{fill:#333;stroke:none}#mermaid-1583711384349 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-1583711384349 .labelText{fill:#000;stroke:none}#mermaid-1583711384349 .loopText{fill:#000;stroke:none}#mermaid-1583711384349 .loopLine{stroke-width:2;stroke-dasharray:'2 2';stroke:#ccf}#mermaid-1583711384349 .note{stroke:#aa3;fill:#fff5ad}#mermaid-1583711384349 .noteText{fill:black;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:14px}#mermaid-1583711384349 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-1583711384349 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-1583711384349 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-1583711384349 .mermaid-main-font{font-family:\"trebuchet ms\", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-1583711384349 .section{stroke:none;opacity:0.2}#mermaid-1583711384349 .section0{fill:rgba(102,102,255,0.49)}#mermaid-1583711384349 .section2{fill:#fff400}#mermaid-1583711384349 .section1,#mermaid-1583711384349 .section3{fill:#fff;opacity:0.2}#mermaid-1583711384349 .sectionTitle0{fill:#333}#mermaid-1583711384349 .sectionTitle1{fill:#333}#mermaid-1583711384349 .sectionTitle2{fill:#333}#mermaid-1583711384349 .sectionTitle3{fill:#333}#mermaid-1583711384349 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-1583711384349 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-1583711384349 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-1583711384349 .grid path{stroke-width:0}#mermaid-1583711384349 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-1583711384349 .task{stroke-width:2}#mermaid-1583711384349 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-1583711384349 .taskText:not([font-size]){font-size:11px}#mermaid-1583711384349 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-1583711384349 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-1583711384349 .task.clickable{cursor:pointer}#mermaid-1583711384349 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-1583711384349 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-1583711384349 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-1583711384349 .taskText0,#mermaid-1583711384349 .taskText1,#mermaid-1583711384349 .taskText2,#mermaid-1583711384349 .taskText3{fill:#fff}#mermaid-1583711384349 .task0,#mermaid-1583711384349 .task1,#mermaid-1583711384349 .task2,#mermaid-1583711384349 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-1583711384349 .taskTextOutside0,#mermaid-1583711384349 .taskTextOutside2{fill:#000}#mermaid-1583711384349 .taskTextOutside1,#mermaid-1583711384349 .taskTextOutside3{fill:#000}#mermaid-1583711384349 .active0,#mermaid-1583711384349 .active1,#mermaid-1583711384349 .active2,#mermaid-1583711384349 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-1583711384349 .activeText0,#mermaid-1583711384349 .activeText1,#mermaid-1583711384349 .activeText2,#mermaid-1583711384349 .activeText3{fill:#000 !important}#mermaid-1583711384349 .done0,#mermaid-1583711384349 .done1,#mermaid-1583711384349 .done2,#mermaid-1583711384349 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-1583711384349 .doneText0,#mermaid-1583711384349 .doneText1,#mermaid-1583711384349 .doneText2,#mermaid-1583711384349 .doneText3{fill:#000 !important}#mermaid-1583711384349 .crit0,#mermaid-1583711384349 .crit1,#mermaid-1583711384349 .crit2,#mermaid-1583711384349 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-1583711384349 .activeCrit0,#mermaid-1583711384349 .activeCrit1,#mermaid-1583711384349 .activeCrit2,#mermaid-1583711384349 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-1583711384349 .doneCrit0,#mermaid-1583711384349 .doneCrit1,#mermaid-1583711384349 .doneCrit2,#mermaid-1583711384349 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-1583711384349 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-1583711384349 .milestoneText{font-style:italic}#mermaid-1583711384349 .doneCritText0,#mermaid-1583711384349 .doneCritText1,#mermaid-1583711384349 .doneCritText2,#mermaid-1583711384349 .doneCritText3{fill:#000 !important}#mermaid-1583711384349 .activeCritText0,#mermaid-1583711384349 .activeCritText1,#mermaid-1583711384349 .activeCritText2,#mermaid-1583711384349 .activeCritText3{fill:#000 !important}#mermaid-1583711384349 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-1583711384349 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-1583711384349 g.classGroup text .title{font-weight:bolder}#mermaid-1583711384349 g.clickable{cursor:pointer}#mermaid-1583711384349 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-1583711384349 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-1583711384349 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-1583711384349 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-1583711384349 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-1583711384349 .dashed-line{stroke-dasharray:3}#mermaid-1583711384349 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-1583711384349 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-1583711384349 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-1583711384349 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-1583711384349 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-1583711384349 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-1583711384349 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-1583711384349 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-1583711384349 .commit-id,#mermaid-1583711384349 .commit-msg,#mermaid-1583711384349 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-1583711384349 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-1583711384349 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-1583711384349 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-1583711384349 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px}#mermaid-1583711384349 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-1583711384349 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-1583711384349 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-1583711384349 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-1583711384349 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-1583711384349 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-1583711384349 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-1583711384349 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-1583711384349 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-1583711384349 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}:root{--mermaid-font-family: '\"trebuchet ms\", verdana, arial';--mermaid-font-family: \"Comic Sans MS\", \"Comic Sans\", cursive}\n\n#mermaid-1583711384349 .node rect { fill: cornflowerblue; }\n:root { --mermaid-font-family: \"trebuchet ms\", verdana, arial;}</style><style>#mermaid-1583711384349 {\n    color: rgb(0, 0, 0);\n    font: normal normal 400 normal 16px / normal \"trebuchet ms\", verdana, arial;\n  }</style><g transform=\"translate(0, 0)\"><g class=\"output\"><g class=\"clusters\"></g><g class=\"edgePaths\"><g class=\"edgePath\" style=\"opacity: 1;\"><path class=\"path\" d=\"M63.015625,72.17198090692125L117.34375,38.859375L191.5234375,38.859375\" marker-end=\"url(#arrowhead15)\" style=\"fill:none\"></path><defs><marker id=\"arrowhead15\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerUnits=\"strokeWidth\" markerWidth=\"8\" markerHeight=\"6\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker></defs></g><g class=\"edgePath\" style=\"opacity: 1;\"><path class=\"path\" d=\"M63.015625,105.90614409307875L117.34375,139.21875L171.671875,139.21875\" marker-end=\"url(#arrowhead16)\" style=\"fill:none\"></path><defs><marker id=\"arrowhead16\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerUnits=\"strokeWidth\" markerWidth=\"8\" markerHeight=\"6\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker></defs></g><g class=\"edgePath\" style=\"opacity: 1;\"><path class=\"path\" d=\"M253.2421875,38.859375L298.09375,38.859375L340.5459038469809,72.5869086530191\" marker-end=\"url(#arrowhead17)\" style=\"fill:none\"></path><defs><marker id=\"arrowhead17\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerUnits=\"strokeWidth\" markerWidth=\"8\" markerHeight=\"6\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker></defs></g><g class=\"edgePath\" style=\"opacity: 1;\"><path class=\"path\" d=\"M273.09375,139.21875L298.09375,139.21875L340.5459038469809,106.4912163469809\" marker-end=\"url(#arrowhead18)\" style=\"fill:none\"></path><defs><marker id=\"arrowhead18\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerUnits=\"strokeWidth\" markerWidth=\"8\" markerHeight=\"6\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker></defs></g></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(117.34375,38.859375)\" style=\"opacity: 1;\"><g transform=\"translate(-29.328125,-9.5)\" class=\"label\"><foreignObject width=\"58.65625\" height=\"19\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: inline-block; white-space: nowrap;\"><span class=\"edgeLabel\">Links To</span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"\" style=\"opacity: 1;\"><g transform=\"translate(0,0)\" class=\"label\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: inline-block; white-space: nowrap;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"\" style=\"opacity: 1;\"><g transform=\"translate(0,0)\" class=\"label\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: inline-block; white-space: nowrap;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"\" style=\"opacity: 1;\"><g transform=\"translate(0,0)\" class=\"label\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: inline-block; white-space: nowrap;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node\" id=\"A\" transform=\"translate(35.5078125,89.0390625)\" style=\"opacity: 1;\"><rect rx=\"0\" ry=\"0\" x=\"-27.5078125\" y=\"-19.5\" width=\"55.015625\" height=\"39\" class=\"label-container\"></rect><g class=\"label\" transform=\"translate(0,0)\"><g transform=\"translate(-17.5078125,-9.5)\"><foreignObject width=\"35.015625\" height=\"19\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: inline-block; white-space: nowrap;\">Start</div></foreignObject></g></g></g><g class=\"node\" id=\"B\" transform=\"translate(222.3828125,38.859375)\" style=\"opacity: 1;\"><circle x=\"-30.859375\" y=\"-19.5\" r=\"30.859375\" class=\"label-container\"></circle><g class=\"label\" transform=\"translate(0,0)\"><g transform=\"translate(-20.859375,-9.5)\"><foreignObject width=\"41.71875\" height=\"19\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: inline-block; white-space: nowrap;\">Circle</div></foreignObject></g></g></g><g class=\"node\" id=\"C\" transform=\"translate(222.3828125,139.21875)\" style=\"opacity: 1;\"><rect rx=\"5\" ry=\"5\" x=\"-50.7109375\" y=\"-19.5\" width=\"101.421875\" height=\"39\" class=\"label-container\"></rect><g class=\"label\" transform=\"translate(0,0)\"><g transform=\"translate(-40.7109375,-9.5)\"><foreignObject width=\"81.421875\" height=\"19\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: inline-block; white-space: nowrap;\">Round Rect</div></foreignObject></g></g></g><g class=\"node\" id=\"D\" transform=\"translate(361.44921875,89.0390625)\" style=\"opacity: 1;\"><polygon points=\"38.35546875,0 76.7109375,-38.35546875 38.35546875,-76.7109375 0,-38.35546875\" transform=\"translate(-38.35546875,38.35546875)\" class=\"label-container\"></polygon><g class=\"label\" transform=\"translate(0,0)\"><g transform=\"translate(-13.1171875,-9.5)\"><foreignObject width=\"26.234375\" height=\"19\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: inline-block; white-space: nowrap;\">End</div></foreignObject></g></g></g></g></g></g></svg></div>\n<div class=\"mermaid\" data-processed=\"true\"><svg id=\"mermaid-1583711384344\" width=\"322.28125\" xmlns=\"http://www.w3.org/2000/svg\" height=\"233\" viewBox=\"0 0 322.28125 233\"><style>#mermaid-1583711384344 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);color:#333}#mermaid-1583711384344 .label text{fill:#333}#mermaid-1583711384344 .node rect,#mermaid-1583711384344 .node circle,#mermaid-1583711384344 .node ellipse,#mermaid-1583711384344 .node polygon,#mermaid-1583711384344 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-1583711384344 .node .label{text-align:center}#mermaid-1583711384344 .node.clickable{cursor:pointer}#mermaid-1583711384344 .arrowheadPath{fill:#333}#mermaid-1583711384344 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-1583711384344 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-1583711384344 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-1583711384344 .cluster text{fill:#333}#mermaid-1583711384344 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-1583711384344 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-1583711384344 text.actor{fill:#000;stroke:none}#mermaid-1583711384344 .actor-line{stroke:grey}#mermaid-1583711384344 .messageLine0{stroke-width:1.5;stroke-dasharray:'2 2';stroke:#333}#mermaid-1583711384344 .messageLine1{stroke-width:1.5;stroke-dasharray:'2 2';stroke:#333}#mermaid-1583711384344 #arrowhead{fill:#333}#mermaid-1583711384344 .sequenceNumber{fill:#fff}#mermaid-1583711384344 #sequencenumber{fill:#333}#mermaid-1583711384344 #crosshead path{fill:#333 !important;stroke:#333 !important}#mermaid-1583711384344 .messageText{fill:#333;stroke:none}#mermaid-1583711384344 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-1583711384344 .labelText{fill:#000;stroke:none}#mermaid-1583711384344 .loopText{fill:#000;stroke:none}#mermaid-1583711384344 .loopLine{stroke-width:2;stroke-dasharray:'2 2';stroke:#ccf}#mermaid-1583711384344 .note{stroke:#aa3;fill:#fff5ad}#mermaid-1583711384344 .noteText{fill:black;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:14px}#mermaid-1583711384344 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-1583711384344 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-1583711384344 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-1583711384344 .mermaid-main-font{font-family:\"trebuchet ms\", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-1583711384344 .section{stroke:none;opacity:0.2}#mermaid-1583711384344 .section0{fill:rgba(102,102,255,0.49)}#mermaid-1583711384344 .section2{fill:#fff400}#mermaid-1583711384344 .section1,#mermaid-1583711384344 .section3{fill:#fff;opacity:0.2}#mermaid-1583711384344 .sectionTitle0{fill:#333}#mermaid-1583711384344 .sectionTitle1{fill:#333}#mermaid-1583711384344 .sectionTitle2{fill:#333}#mermaid-1583711384344 .sectionTitle3{fill:#333}#mermaid-1583711384344 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-1583711384344 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-1583711384344 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-1583711384344 .grid path{stroke-width:0}#mermaid-1583711384344 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-1583711384344 .task{stroke-width:2}#mermaid-1583711384344 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-1583711384344 .taskText:not([font-size]){font-size:11px}#mermaid-1583711384344 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-1583711384344 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-1583711384344 .task.clickable{cursor:pointer}#mermaid-1583711384344 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-1583711384344 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-1583711384344 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-1583711384344 .taskText0,#mermaid-1583711384344 .taskText1,#mermaid-1583711384344 .taskText2,#mermaid-1583711384344 .taskText3{fill:#fff}#mermaid-1583711384344 .task0,#mermaid-1583711384344 .task1,#mermaid-1583711384344 .task2,#mermaid-1583711384344 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-1583711384344 .taskTextOutside0,#mermaid-1583711384344 .taskTextOutside2{fill:#000}#mermaid-1583711384344 .taskTextOutside1,#mermaid-1583711384344 .taskTextOutside3{fill:#000}#mermaid-1583711384344 .active0,#mermaid-1583711384344 .active1,#mermaid-1583711384344 .active2,#mermaid-1583711384344 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-1583711384344 .activeText0,#mermaid-1583711384344 .activeText1,#mermaid-1583711384344 .activeText2,#mermaid-1583711384344 .activeText3{fill:#000 !important}#mermaid-1583711384344 .done0,#mermaid-1583711384344 .done1,#mermaid-1583711384344 .done2,#mermaid-1583711384344 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-1583711384344 .doneText0,#mermaid-1583711384344 .doneText1,#mermaid-1583711384344 .doneText2,#mermaid-1583711384344 .doneText3{fill:#000 !important}#mermaid-1583711384344 .crit0,#mermaid-1583711384344 .crit1,#mermaid-1583711384344 .crit2,#mermaid-1583711384344 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-1583711384344 .activeCrit0,#mermaid-1583711384344 .activeCrit1,#mermaid-1583711384344 .activeCrit2,#mermaid-1583711384344 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-1583711384344 .doneCrit0,#mermaid-1583711384344 .doneCrit1,#mermaid-1583711384344 .doneCrit2,#mermaid-1583711384344 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-1583711384344 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-1583711384344 .milestoneText{font-style:italic}#mermaid-1583711384344 .doneCritText0,#mermaid-1583711384344 .doneCritText1,#mermaid-1583711384344 .doneCritText2,#mermaid-1583711384344 .doneCritText3{fill:#000 !important}#mermaid-1583711384344 .activeCritText0,#mermaid-1583711384344 .activeCritText1,#mermaid-1583711384344 .activeCritText2,#mermaid-1583711384344 .activeCritText3{fill:#000 !important}#mermaid-1583711384344 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-1583711384344 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-1583711384344 g.classGroup text .title{font-weight:bolder}#mermaid-1583711384344 g.clickable{cursor:pointer}#mermaid-1583711384344 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-1583711384344 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-1583711384344 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-1583711384344 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-1583711384344 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-1583711384344 .dashed-line{stroke-dasharray:3}#mermaid-1583711384344 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-1583711384344 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-1583711384344 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-1583711384344 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-1583711384344 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-1583711384344 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-1583711384344 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-1583711384344 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-1583711384344 .commit-id,#mermaid-1583711384344 .commit-msg,#mermaid-1583711384344 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-1583711384344 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-1583711384344 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-1583711384344 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-1583711384344 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px}#mermaid-1583711384344 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-1583711384344 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-1583711384344 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-1583711384344 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-1583711384344 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-1583711384344 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-1583711384344 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-1583711384344 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-1583711384344 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-1583711384344 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}:root{--mermaid-font-family: '\"trebuchet ms\", verdana, arial';--mermaid-font-family: \"Comic Sans MS\", \"Comic Sans\", cursive}\n\n#mermaid-1583711384344 .node rect { fill: cornflowerblue; }\n:root { --mermaid-font-family: \"trebuchet ms\", verdana, arial;}</style><style>#mermaid-1583711384344 {\n    color: rgb(0, 0, 0);\n    font: normal normal 400 normal 16px / normal \"trebuchet ms\", verdana, arial;\n  }</style><g transform=\"translate(0, 0)\"><g class=\"output\"><g class=\"clusters\"></g><g class=\"edgePaths\"><g class=\"edgePath\" style=\"opacity: 1;\"><path class=\"path\" d=\"M49.885508130160275,92.63380112297648L88.484375,27.5L113.484375,27.5\" marker-end=\"url(#arrowhead9)\" style=\"fill:none\"></path><defs><marker id=\"arrowhead9\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerUnits=\"strokeWidth\" markerWidth=\"8\" markerHeight=\"6\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker></defs></g><g class=\"edgePath\" style=\"opacity: 1;\"><path class=\"path\" d=\"M63.484375,116.5L88.484375,116.5L122.34375,116.5\" marker-end=\"url(#arrowhead10)\" style=\"fill:none\"></path><defs><marker id=\"arrowhead10\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerUnits=\"strokeWidth\" markerWidth=\"8\" markerHeight=\"6\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker></defs></g><g class=\"edgePath\" style=\"opacity: 1;\"><path class=\"path\" d=\"M49.885508130160275,140.36619887702352L88.484375,205.5L132.6796875,205.5\" marker-end=\"url(#arrowhead11)\" style=\"fill:none\"></path><defs><marker id=\"arrowhead11\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerUnits=\"strokeWidth\" markerWidth=\"8\" markerHeight=\"6\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker></defs></g></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"\" style=\"opacity: 1;\"><g transform=\"translate(0,0)\" class=\"label\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: inline-block; white-space: nowrap;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"\" style=\"opacity: 1;\"><g transform=\"translate(0,0)\" class=\"label\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: inline-block; white-space: nowrap;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"\" style=\"opacity: 1;\"><g transform=\"translate(0,0)\" class=\"label\"><foreignObject width=\"0\" height=\"0\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: inline-block; white-space: nowrap;\"><span class=\"edgeLabel\"></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node\" id=\"A\" transform=\"translate(35.7421875,116.5)\" style=\"opacity: 1;\"><circle x=\"-27.7421875\" y=\"-19.5\" r=\"27.7421875\" class=\"label-container\"></circle><g class=\"label\" transform=\"translate(0,0)\"><g transform=\"translate(-17.7421875,-9.5)\"><foreignObject width=\"35.484375\" height=\"19\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: inline-block; white-space: nowrap;\">Agile</div></foreignObject></g></g></g><g class=\"node\" id=\"TDD\" transform=\"translate(213.8828125,27.5)\" style=\"opacity: 1;\"><rect rx=\"0\" ry=\"0\" x=\"-100.3984375\" y=\"-19.5\" width=\"200.796875\" height=\"39\" class=\"label-container\"></rect><g class=\"label\" transform=\"translate(0,0)\"><g transform=\"translate(-90.3984375,-9.5)\"><foreignObject width=\"180.796875\" height=\"19\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: inline-block; white-space: nowrap;\">Test Driven Development</div></foreignObject></g></g></g><g class=\"node\" id=\"CI\" transform=\"translate(213.8828125,116.5)\" style=\"opacity: 1;\"><rect rx=\"0\" ry=\"0\" x=\"-91.5390625\" y=\"-19.5\" width=\"183.078125\" height=\"39\" class=\"label-container\"></rect><g class=\"label\" transform=\"translate(0,0)\"><g transform=\"translate(-81.5390625,-9.5)\"><foreignObject width=\"163.078125\" height=\"19\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: inline-block; white-space: nowrap;\">Continuous Integration</div></foreignObject></g></g></g><g class=\"node\" id=\"CD\" transform=\"translate(213.8828125,205.5)\" style=\"opacity: 1;\"><rect rx=\"0\" ry=\"0\" x=\"-81.203125\" y=\"-19.5\" width=\"162.40625\" height=\"39\" class=\"label-container\"></rect><g class=\"label\" transform=\"translate(0,0)\"><g transform=\"translate(-71.203125,-9.5)\"><foreignObject width=\"142.40625\" height=\"19\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: inline-block; white-space: nowrap;\">Continuous Delivery</div></foreignObject></g></g></g></g></g></g></svg></div>","id":"2a0a38e8-da3d-52cb-9014-dc2ef1f0b66a","timeToRead":1,"frontmatter":{"date":"2018-08-06T23:53:19.791Z","path":"/hello-mermaid","tags":["mermaid"],"title":"Hello Mermaid"}}],"blog":[{"excerpt":"Writing things down is always a good thing. Especially when you are solving a difficult problem. You need to analyze the problem, and digest your solution then come up with something. This is why I want to reboot this blog.","html":"<p>Writing things down is always a good thing. Especially when you are solving a difficult problem. You need to analyze the problem, and digest your solution then come up with something. This is why I want to reboot this blog.</p>","id":"a9909f0b-c492-5413-ad7f-93381eade64a","timeToRead":1,"frontmatter":{"date":"2018-08-06T09:17:16.525Z","path":"/reboot/","tags":["blog"],"title":"Blog Reboot"}}],"tools":[{"excerpt":"Manage your bookmark cross different browsers I was a heavy google chrome user, but since I a little bit scared about their privacy policy. I was seeking for alternative, turns of Opera is my first choose. The first problem I hit strait away is…","html":"<h1>Manage your bookmark cross different browsers</h1>\n<p>I was a heavy google chrome user, but since I a little bit scared about their privacy policy. I was seeking for alternative, turns of Opera is my first choose. The first problem I hit strait away is bookmarks, the more I use a browser the more I addict to it. All my collections of bookmarks need to migrate, is there a proper solutions for this? It depends. But I find a website that change the way I manage my bookmarks in a nice looking UI, and it's pretty easy to use. That is <a href=\"https://start.me\">start.me</a>.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 650px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 102.44161358811041%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAACXBIWXMAAAsTAAALEwEAmpwYAAADmUlEQVQ4y01Ty4okRRTNX/J7BPeuhAFxITLgYlBctYLKIEwzgptm1IW48THIONNNd2d1dU1VTb0ysypfla+IjHdERmZWeqt6Y3C5GRnEiXPi3hPOdDpdr1ab9WY6n7uj0ch1r66uRu713ehmcj9+OxkvpxOI21v38vLSdd3ZdDaZvB2Px7eu6xijAz/YZ/mA60apxtph6O/eJVfjXTsMoh0uQ/YmZL01WbZHVSWF6LtugE39wfHvXi9n14vVu9D3s31mTNO35unF9dnz19eRuEvUl38uILpGIaEqJnLCc8pLKlJEnG8+efTXxfez5QzI9/t9mqaMc1KhMsktrm1ZUN3UXHIpqTJUaaYNUYabphbSOfvs02dffzWZvwVJYRimSSLatrz4uXj6Q/T48+CjR0TQPNwqZWzTWUjGUsIwwowyRwiRpnCdDGirqoJfriSLk3oT8PsJH90RzmA35xWqVlrFxsRaRRBKpg6lNI7iwPODIADmLE257coX5/nZY2yMlyRQm8NhAIoif1Njdxg2w7AahmVrvSM4jEL/iIwiQG+3AC5++TH/9klZocV8/gCWoC95FYX/2mY+HP4HDoItjF0Y7na7LMsooQQKY1vCGMiVSkmlcZ3ielHjBSVLbbaNCZQMHXbcIQilRVHUdd00lnOOiyLZBrQqO6WsFA3nWklSZUGUCtN2jW1tq41xgCpLorIsBBzCmJYc17VhVGOsw1B4nt4GfbK9Xxe/vdwkJUqqGpc5hT2NcQjli5QxZSJmhe69tAWSWlAsieSCU7arkt5WXzyfvffhK1Tu4W6e59cENDYOaI5xo23nZTU33XKvj2DOsOASbkTIHhXQu99f3j/57u+qLNL9EQ+VNSAbtG7kjhszTmVPSTt2hTaSIklr0jS80Yqgrh9+/en84w/eB2/kRR5F0W67qxCGgtEq86Cm914hlfHDApgR5eDhtrVQPyKYtubmZvLs/ALsC8gojMDFUkqHYCTmN5iwP0ZBxfU/69woUdQ6yuVDh0/5oJQCmoeOQgJH1YQ4hJG92nYdvL/+0PfDoSeEoqpEqDp2+TTgC12M4xgwQAwTyFAQB9coReuu74DjRDPAKvQ8jpPGGFAO57bWwmISJwD2fT/PM4TQUTbUfRs81C+MTiPPcwJEuAIVTaOP4PboHPAivJyyKCEjhGHFWa1W6zXEerPZeKcBeK2N1ho6CRNK4fFxjPHJrBzMCxOghbP+A7oUPlBogsziAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Start me screen shot\"\n        title=\"Start me screen shot\"\n        src=\"/blog/static/6bdc448ac18808324d38529e3d90b191/a6d36/start-me.png\"\n        srcset=\"/blog/static/6bdc448ac18808324d38529e3d90b191/222b7/start-me.png 163w,\n/blog/static/6bdc448ac18808324d38529e3d90b191/ff46a/start-me.png 325w,\n/blog/static/6bdc448ac18808324d38529e3d90b191/a6d36/start-me.png 650w,\n/blog/static/6bdc448ac18808324d38529e3d90b191/f1901/start-me.png 942w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>The first thing you will notice is Start.Me is pretty much looks like a portal, things like iGoogle. The functionality is similar too. You can add tabs to organize your things. Widgets are also available to use, such like weather or todo list.</p>\n<p>The only thing I was interested is bookmark manager. It allows you to login using google account and access it cross all your devices. Yes, it's responsive. So not just your desktop browsers, but also on your mobile. This is way I would like to keep my bookmarks in one place and cross all browsers.</p>\n<p>Of course, you would still have privacy concerns here. But this is how I made my decision, I don't like one service controls all my data.</p>","id":"3f312839-8c10-57cb-8465-c9b696b1bfb9","timeToRead":1,"frontmatter":{"date":"2017-05-22","path":"/start-me/","tags":["tools","bookmark"],"title":"Manage your bookmark cross different browsers"}}],"bookmark":[{"excerpt":"Manage your bookmark cross different browsers I was a heavy google chrome user, but since I a little bit scared about their privacy policy. I was seeking for alternative, turns of Opera is my first choose. The first problem I hit strait away is…","html":"<h1>Manage your bookmark cross different browsers</h1>\n<p>I was a heavy google chrome user, but since I a little bit scared about their privacy policy. I was seeking for alternative, turns of Opera is my first choose. The first problem I hit strait away is bookmarks, the more I use a browser the more I addict to it. All my collections of bookmarks need to migrate, is there a proper solutions for this? It depends. But I find a website that change the way I manage my bookmarks in a nice looking UI, and it's pretty easy to use. That is <a href=\"https://start.me\">start.me</a>.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 650px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 102.44161358811041%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAACXBIWXMAAAsTAAALEwEAmpwYAAADmUlEQVQ4y01Ty4okRRTNX/J7BPeuhAFxITLgYlBctYLKIEwzgptm1IW48THIONNNd2d1dU1VTb0ysypfla+IjHdERmZWeqt6Y3C5GRnEiXPi3hPOdDpdr1ab9WY6n7uj0ch1r66uRu713ehmcj9+OxkvpxOI21v38vLSdd3ZdDaZvB2Px7eu6xijAz/YZ/mA60apxtph6O/eJVfjXTsMoh0uQ/YmZL01WbZHVSWF6LtugE39wfHvXi9n14vVu9D3s31mTNO35unF9dnz19eRuEvUl38uILpGIaEqJnLCc8pLKlJEnG8+efTXxfez5QzI9/t9mqaMc1KhMsktrm1ZUN3UXHIpqTJUaaYNUYabphbSOfvs02dffzWZvwVJYRimSSLatrz4uXj6Q/T48+CjR0TQPNwqZWzTWUjGUsIwwowyRwiRpnCdDGirqoJfriSLk3oT8PsJH90RzmA35xWqVlrFxsRaRRBKpg6lNI7iwPODIADmLE257coX5/nZY2yMlyRQm8NhAIoif1Njdxg2w7AahmVrvSM4jEL/iIwiQG+3AC5++TH/9klZocV8/gCWoC95FYX/2mY+HP4HDoItjF0Y7na7LMsooQQKY1vCGMiVSkmlcZ3ielHjBSVLbbaNCZQMHXbcIQilRVHUdd00lnOOiyLZBrQqO6WsFA3nWklSZUGUCtN2jW1tq41xgCpLorIsBBzCmJYc17VhVGOsw1B4nt4GfbK9Xxe/vdwkJUqqGpc5hT2NcQjli5QxZSJmhe69tAWSWlAsieSCU7arkt5WXzyfvffhK1Tu4W6e59cENDYOaI5xo23nZTU33XKvj2DOsOASbkTIHhXQu99f3j/57u+qLNL9EQ+VNSAbtG7kjhszTmVPSTt2hTaSIklr0jS80Yqgrh9+/en84w/eB2/kRR5F0W67qxCGgtEq86Cm914hlfHDApgR5eDhtrVQPyKYtubmZvLs/ALsC8gojMDFUkqHYCTmN5iwP0ZBxfU/69woUdQ6yuVDh0/5oJQCmoeOQgJH1YQ4hJG92nYdvL/+0PfDoSeEoqpEqDp2+TTgC12M4xgwQAwTyFAQB9coReuu74DjRDPAKvQ8jpPGGFAO57bWwmISJwD2fT/PM4TQUTbUfRs81C+MTiPPcwJEuAIVTaOP4PboHPAivJyyKCEjhGHFWa1W6zXEerPZeKcBeK2N1ho6CRNK4fFxjPHJrBzMCxOghbP+A7oUPlBogsziAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Start me screen shot\"\n        title=\"Start me screen shot\"\n        src=\"/blog/static/6bdc448ac18808324d38529e3d90b191/a6d36/start-me.png\"\n        srcset=\"/blog/static/6bdc448ac18808324d38529e3d90b191/222b7/start-me.png 163w,\n/blog/static/6bdc448ac18808324d38529e3d90b191/ff46a/start-me.png 325w,\n/blog/static/6bdc448ac18808324d38529e3d90b191/a6d36/start-me.png 650w,\n/blog/static/6bdc448ac18808324d38529e3d90b191/f1901/start-me.png 942w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>The first thing you will notice is Start.Me is pretty much looks like a portal, things like iGoogle. The functionality is similar too. You can add tabs to organize your things. Widgets are also available to use, such like weather or todo list.</p>\n<p>The only thing I was interested is bookmark manager. It allows you to login using google account and access it cross all your devices. Yes, it's responsive. So not just your desktop browsers, but also on your mobile. This is way I would like to keep my bookmarks in one place and cross all browsers.</p>\n<p>Of course, you would still have privacy concerns here. But this is how I made my decision, I don't like one service controls all my data.</p>","id":"3f312839-8c10-57cb-8465-c9b696b1bfb9","timeToRead":1,"frontmatter":{"date":"2017-05-22","path":"/start-me/","tags":["tools","bookmark"],"title":"Manage your bookmark cross different browsers"}}]},"post":[{"excerpt":"Feature Toggle And Regression It is OK to violate DRY principls to copy the code when working on a new feature that is high couple to old behaviour. As a professional software engineer, I kind of strickly obey the DRY principals, and don't want to…","html":"<h1>Feature Toggle And Regression</h1>\n<p>It is OK to violate DRY principls to copy the code when working on a new feature that is high couple to old behaviour.</p>\n<p>As a professional software engineer, I kind of strickly obey the DRY principals, and don't want to introduce any regression. But this could end up you can not easily to write a clean code and refactor. You need to branch your code in the exisitng code base. </p>\n<p>Copy the exisitng code will ease your regresion nightmare. Once toggle is removed, the old code will disappear, so you are not violating DRY prinsipal any more. But you need to make sure the toggle will be removed and old behaviour will not needed. Otherwise, you could put yourself in a situation that DRY try to address, maintain multiple codes that basically indentical.</p>","id":"542576fb-98c8-5d3b-ae45-751baaf7b524","timeToRead":1,"frontmatter":{"date":"2018-08-09T21:12:26.441Z","path":"/feature-toggle-and-regression","tags":["dry","feature-toogle","regression"],"title":"Feature Toggle And Regression"}}],"tag":"regression"}}}