feat: re-gen all
parent
64c0ddfe80
commit
b12f163266
|
@ -28,13 +28,15 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-backup-my-way">
|
||||
<a class="heading-link" href="#backup-my-way"
|
||||
>Backup my way<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-backup-my-way"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#backup-my-way"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Backup my way
|
||||
</h1>
|
||||
<p>
|
||||
First thing first, I want to list my own devices, which I have through the
|
||||
|
@ -149,13 +151,15 @@
|
|||
<strong>How to backup</strong>, the second is
|
||||
<strong>Recovery strategy</strong>.
|
||||
</p>
|
||||
<h2 id="user-content-how-to-backup">
|
||||
<a class="heading-link" href="#how-to-backup"
|
||||
>How to backup<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-how-to-backup"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#how-to-backup"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>How to backup
|
||||
</h2>
|
||||
<p>
|
||||
Before I talk about backup, I want to talk about data. In specifically,
|
||||
|
@ -256,13 +260,15 @@ restic -r rclone:remote:PrivateData restore latest --target <span class="pl-k">~
|
|||
<li>Store locally in my laptop</li>
|
||||
<li>Don't store locally in phone (can not keep track easily)</li>
|
||||
</ul>
|
||||
<h3 id="user-content-backup-work-related-data">
|
||||
<a class="heading-link" href="#backup-work-related-data"
|
||||
>Backup work related data<span
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-backup-work-related-data"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#backup-work-related-data"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Backup work related data
|
||||
</h3>
|
||||
<p>APIs tools:</p>
|
||||
<ul>
|
||||
|
@ -277,13 +283,15 @@ restic -r rclone:remote:PrivateData restore latest --target <span class="pl-k">~
|
|||
Stay away from Postman, it's lag and you can accidentally upload private
|
||||
data publicly.
|
||||
</p>
|
||||
<h2 id="user-content-recovery-strategy">
|
||||
<a class="heading-link" href="#recovery-strategy"
|
||||
>Recovery strategy<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-recovery-strategy"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#recovery-strategy"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Recovery strategy
|
||||
</h2>
|
||||
<p>
|
||||
There are many strategies that I process to react as if something strange
|
||||
|
@ -306,10 +314,15 @@ restic -r rclone:remote:PrivateData restore latest --target <span class="pl-k">~
|
|||
master password and OTP from Gmail, which I log in previously.
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="user-content-misc">
|
||||
<a class="heading-link" href="#misc"
|
||||
>Misc<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-misc"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#misc"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Misc
|
||||
</h2>
|
||||
<p>
|
||||
To backup everything is hard, so keep it simple and only backup important
|
||||
|
@ -319,10 +332,15 @@ restic -r rclone:remote:PrivateData restore latest --target <span class="pl-k">~
|
|||
<li>TODOis, Evernote, ... -> Google Keep / Notion</li>
|
||||
<li>Dropbox, OneDrive, ... -> Google Drive</li>
|
||||
</ul>
|
||||
<h2 id="user-content-the-end">
|
||||
<a class="heading-link" href="#the-end"
|
||||
>The end<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-the-end"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#the-end"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>The end
|
||||
</h2>
|
||||
<p>This guide will be updated regularly I promise.</p>
|
||||
|
||||
|
|
|
@ -28,13 +28,15 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-dockerfile-for-go">
|
||||
<a class="heading-link" href="#dockerfile-for-go"
|
||||
>Dockerfile for Go<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-dockerfile-for-go"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#dockerfile-for-go"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Dockerfile for Go
|
||||
</h1>
|
||||
<p>
|
||||
Each time I start a new Go project, I repeat many steps. Like set up
|
||||
|
@ -163,10 +165,15 @@
|
|||
<span class="pl-k">ENTRYPOINT</span> [<span class="pl-s">"/app"</span>]</pre>
|
||||
</div>
|
||||
<p>Finally, I copy <code>app</code> to Distroless base image.</p>
|
||||
<h2 id="user-content-thanks">
|
||||
<a class="heading-link" href="#thanks"
|
||||
>Thanks<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-thanks"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#thanks"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Thanks
|
||||
</h2>
|
||||
<ul>
|
||||
<li>
|
||||
|
|
|
@ -28,13 +28,15 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-bootstrap-go">
|
||||
<a class="heading-link" href="#bootstrap-go"
|
||||
>Bootstrap Go<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-bootstrap-go"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#bootstrap-go"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Bootstrap Go
|
||||
</h1>
|
||||
<p>
|
||||
It is hard to write bootstrap tool to quickly create Go service. So I
|
||||
|
@ -42,10 +44,15 @@
|
|||
I need to write a Go service from scratch. Also, this is my personal
|
||||
opinion, so feel free to comment.
|
||||
</p>
|
||||
<h2 id="user-content-structure">
|
||||
<a class="heading-link" href="#structure"
|
||||
>Structure<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-structure"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#structure"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Structure
|
||||
</h2>
|
||||
<div class="highlight highlight-text-adblock">
|
||||
<pre>
|
||||
|
@ -128,13 +135,15 @@ internal
|
|||
<code>business</code>.
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="user-content-do-not-repeat">
|
||||
<a class="heading-link" href="#do-not-repeat"
|
||||
>Do not repeat!<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-do-not-repeat"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#do-not-repeat"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Do not repeat!
|
||||
</h2>
|
||||
<p>If we have too many services, some of the logic will be overlapped.</p>
|
||||
<p>
|
||||
|
@ -148,21 +157,25 @@ internal
|
|||
Another bad practice is adapter service. No need to write a new service if
|
||||
what we need is just common pkg libs.
|
||||
</p>
|
||||
<h2 id="user-content-taste-on-style-guide">
|
||||
<a class="heading-link" href="#taste-on-style-guide"
|
||||
>Taste on style guide<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-taste-on-style-guide"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#taste-on-style-guide"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Taste on style guide
|
||||
</h2>
|
||||
<h3 id="user-content-stop-using-global-var">
|
||||
<a class="heading-link" href="#stop-using-global-var"
|
||||
>Stop using global var<span
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-stop-using-global-var"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#stop-using-global-var"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Stop using global var
|
||||
</h3>
|
||||
<p>
|
||||
If I see someone using global var, I swear I will shoot them twice in the
|
||||
|
@ -173,13 +186,15 @@ internal
|
|||
<li>Can not write unit test.</li>
|
||||
<li>Is not thread safe.</li>
|
||||
</ul>
|
||||
<h3 id="user-content-use-functional-options-but-dont-overuse-it">
|
||||
<a class="heading-link" href="#use-functional-options-but-dont-overuse-it"
|
||||
>Use functional options, but don't overuse it!<span
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-use-functional-options-but-dont-overuse-it"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#use-functional-options-but-dont-overuse-it"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Use functional options, but don't overuse it!
|
||||
</h3>
|
||||
<p>
|
||||
For simple struct with 1 or 2 fields, no need to use functional options.
|
||||
|
@ -225,15 +240,19 @@ internal
|
|||
<code>WithB</code> option. No need to pass direct field inside
|
||||
<code>s</code>.
|
||||
</p>
|
||||
<h3 id="user-content-use-errgroup-as-much-as-possible">
|
||||
<a class="heading-link" href="#use-errgroup-as-much-as-possible">Use </a
|
||||
><a href="https://pkg.go.dev/golang.org/x/sync/errgroup" rel="nofollow"
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-use-errgroup-as-much-as-possible"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#use-errgroup-as-much-as-possible"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Use
|
||||
<a href="https://pkg.go.dev/golang.org/x/sync/errgroup" rel="nofollow"
|
||||
>errgroup</a
|
||||
>
|
||||
as much as possible<span
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span>
|
||||
as much as possible
|
||||
</h3>
|
||||
<p>
|
||||
If business logic involves calling too many APIs, but they are not depend
|
||||
|
@ -266,33 +285,35 @@ internal
|
|||
<span class="pl-c">// Handle error</span>
|
||||
}</pre>
|
||||
</div>
|
||||
<h3 id="user-content-use-semaphore-when-need-to-implement-workerpool">
|
||||
<h3>
|
||||
<a
|
||||
class="heading-link"
|
||||
id="user-content-use-semaphore-when-need-to-implement-workerpool"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#use-semaphore-when-need-to-implement-workerpool"
|
||||
>Use </a
|
||||
><a href="https://pkg.go.dev/golang.org/x/sync/semaphore" rel="nofollow"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Use
|
||||
<a href="https://pkg.go.dev/golang.org/x/sync/semaphore" rel="nofollow"
|
||||
>semaphore</a
|
||||
>
|
||||
when need to implement WorkerPool<span
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span>
|
||||
when need to implement WorkerPool
|
||||
</h3>
|
||||
<p>
|
||||
Please don't use external libs for WorkerPool, I don't want to deal with
|
||||
dependency hell.
|
||||
</p>
|
||||
<h3
|
||||
id="user-content-use-syncpool-when-need-to-reuse-object-mainly-for-bytesbuffer"
|
||||
>
|
||||
<h3>
|
||||
<a
|
||||
class="heading-link"
|
||||
id="user-content-use-syncpool-when-need-to-reuse-object-mainly-for-bytesbuffer"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#use-syncpool-when-need-to-reuse-object-mainly-for-bytesbuffer"
|
||||
>Use </a
|
||||
><a href="https://pkg.go.dev/sync#Pool" rel="nofollow">sync.Pool</a> when
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Use
|
||||
<a href="https://pkg.go.dev/sync#Pool" rel="nofollow">sync.Pool</a> when
|
||||
need to reuse object, mainly for <code>bytes.Buffer</code>
|
||||
<span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
</h3>
|
||||
<p>Example:</p>
|
||||
<div class="highlight highlight-source-go">
|
||||
|
@ -322,15 +343,17 @@ internal
|
|||
<span class="pl-k">return</span> <span class="pl-s1">result</span>, <span class="pl-c1">nil</span>
|
||||
}</pre>
|
||||
</div>
|
||||
<h3 id="user-content-generics-with-some-tricks">
|
||||
<a class="heading-link" href="#generics-with-some-tricks"> </a
|
||||
><a href="https://go.dev/doc/tutorial/generics" rel="nofollow"
|
||||
>Generics</a
|
||||
>
|
||||
with some tricks<span
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-generics-with-some-tricks"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span>
|
||||
tabindex="-1"
|
||||
href="#generics-with-some-tricks"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<a href="https://go.dev/doc/tutorial/generics" rel="nofollow">Generics</a>
|
||||
with some tricks
|
||||
</h3>
|
||||
<p>
|
||||
Take value then return pointer, useful with database struct full of
|
||||
|
@ -349,33 +372,39 @@ internal
|
|||
<span class="pl-k">return</span> <span class="pl-s1">zero</span>
|
||||
}</pre>
|
||||
</div>
|
||||
<h2 id="user-content-external-libs">
|
||||
<a class="heading-link" href="#external-libs"
|
||||
>External libs<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-external-libs"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#external-libs"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>External libs
|
||||
</h2>
|
||||
<h3 id="user-content-no-need-vendor">
|
||||
<a class="heading-link" href="#no-need-vendor"
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-no-need-vendor"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#no-need-vendor"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>No need <code>vendor</code>
|
||||
<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
</h3>
|
||||
<p>
|
||||
Only need if you need something from <code>vendor</code>, to generate mock
|
||||
or something else.
|
||||
</p>
|
||||
<h3 id="user-content-use-buildgo-to-include-build-tools-in-gomod">
|
||||
<h3>
|
||||
<a
|
||||
class="heading-link"
|
||||
href="#use-buildgo-to-include-build-tools-in-gomod"
|
||||
>Use <code>build.go</code> to include build tools in go.mod<span
|
||||
id="user-content-use-buildgo-to-include-build-tools-in-gomod"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#use-buildgo-to-include-build-tools-in-gomod"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Use <code>build.go</code> to include build tools in go.mod
|
||||
</h3>
|
||||
<p>To easily control version of build tools.</p>
|
||||
<p>For example <code>build.go</code>:</p>
|
||||
|
@ -398,16 +427,18 @@ internal
|
|||
We always get the version of build tools in <code>go.mod</code> each time
|
||||
we install it. Future contributors will not cry anymore.
|
||||
</p>
|
||||
<h3
|
||||
id="user-content-dont-use-cli-libs-spf13cobra-urfavecli-just-for-go-service"
|
||||
>
|
||||
<h3>
|
||||
<a
|
||||
class="heading-link"
|
||||
id="user-content-dont-use-cli-libs-spf13cobra-urfavecli-just-for-go-service"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#dont-use-cli-libs-spf13cobra-urfavecli-just-for-go-service"
|
||||
>Don't use cli libs (</a
|
||||
><a href="https://github.com/spf13/cobra">spf13/cobra</a>,
|
||||
<a href="https://github.com/urfave/cli">urfave/cli</a>) just for Go
|
||||
service<span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Don't use cli libs (<a href="https://github.com/spf13/cobra"
|
||||
>spf13/cobra</a
|
||||
>, <a href="https://github.com/urfave/cli">urfave/cli</a>) just for Go
|
||||
service
|
||||
</h3>
|
||||
<p>
|
||||
What is the point to pass many params (<code>do-it</code>,
|
||||
|
@ -420,13 +451,18 @@ internal
|
|||
<a href="https://12factor.net/" rel="nofollow">The Twelve Factors</a>
|
||||
guide.
|
||||
</p>
|
||||
<h3 id="user-content-dont-use-grpc-ecosystemgrpc-gateway">
|
||||
<a class="heading-link" href="#dont-use-grpc-ecosystemgrpc-gateway"
|
||||
>Don't use </a
|
||||
><a href="https://github.com/grpc-ecosystem/grpc-gateway"
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-dont-use-grpc-ecosystemgrpc-gateway"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#dont-use-grpc-ecosystemgrpc-gateway"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Don't use
|
||||
<a href="https://github.com/grpc-ecosystem/grpc-gateway"
|
||||
>grpc-ecosystem/grpc-gateway</a
|
||||
>
|
||||
<span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
</h3>
|
||||
<p>Just don't.</p>
|
||||
<p>
|
||||
|
@ -439,21 +475,31 @@ internal
|
|||
Write 1 for both gRPC, REST sounds good, but in the end, it is not worth
|
||||
it.
|
||||
</p>
|
||||
<h3 id="user-content-dont-use-uberprototool-use-bufbuildbuf">
|
||||
<a class="heading-link" href="#dont-use-uberprototool-use-bufbuildbuf"
|
||||
>Don't use </a
|
||||
><a href="https://github.com/uber/prototool">uber/prototool</a>, use
|
||||
<a href="https://github.com/bufbuild/buf">bufbuild/buf</a>
|
||||
<span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-dont-use-uberprototool-use-bufbuildbuf"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#dont-use-uberprototool-use-bufbuildbuf"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Don't use <a href="https://github.com/uber/prototool">uber/prototool</a>,
|
||||
use <a href="https://github.com/bufbuild/buf">bufbuild/buf</a>
|
||||
</h3>
|
||||
<p>
|
||||
prototool is deprecated, and buf can generate, lint, format as good as
|
||||
prototool.
|
||||
</p>
|
||||
<h3 id="user-content-use-gin-gonicgin-for-rest">
|
||||
<a class="heading-link" href="#use-gin-gonicgin-for-rest">Use </a
|
||||
><a href="https://github.com/gin-gonic/gin">gin-gonic/gin</a> for
|
||||
REST.<span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-use-gin-gonicgin-for-rest"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#use-gin-gonicgin-for-rest"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Use <a href="https://github.com/gin-gonic/gin">gin-gonic/gin</a> for
|
||||
REST.
|
||||
</h3>
|
||||
<p>With <code>c *gin.Context</code>:</p>
|
||||
<ul>
|
||||
|
@ -474,11 +520,16 @@ internal
|
|||
}
|
||||
}()</pre>
|
||||
</div>
|
||||
<h3 id="user-content-if-you-want-log-just-use-uber-gozap">
|
||||
<a class="heading-link" href="#if-you-want-log-just-use-uber-gozap"
|
||||
>If you want log, just use </a
|
||||
><a href="https://github.com/uber-go/zap">uber-go/zap</a>
|
||||
<span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-if-you-want-log-just-use-uber-gozap"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#if-you-want-log-just-use-uber-gozap"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>If you want log, just use
|
||||
<a href="https://github.com/uber-go/zap">uber-go/zap</a>
|
||||
</h3>
|
||||
<p>It is fast!</p>
|
||||
<ul>
|
||||
|
@ -501,11 +552,16 @@ internal
|
|||
for easily debug.
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="user-content-to-read-config-use-spf13viper">
|
||||
<a class="heading-link" href="#to-read-config-use-spf13viper"
|
||||
>To read config, use </a
|
||||
><a href="https://github.com/spf13/viper">spf13/viper</a>
|
||||
<span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-to-read-config-use-spf13viper"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#to-read-config-use-spf13viper"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>To read config, use
|
||||
<a href="https://github.com/spf13/viper">spf13/viper</a>
|
||||
</h3>
|
||||
<p>
|
||||
Only init config in main or cmd layer. Do not use
|
||||
|
@ -520,17 +576,15 @@ internal
|
|||
Also, be careful if config value is empty. You should decide to continue
|
||||
or stop the service if there is empty config.
|
||||
</p>
|
||||
<h3
|
||||
id="user-content-dont-overuse-orm-libs-no-need-to-handle-another-layer-above-sql"
|
||||
>
|
||||
<h3>
|
||||
<a
|
||||
class="heading-link"
|
||||
href="#dont-overuse-orm-libs-no-need-to-handle-another-layer-above-sql"
|
||||
>Don't overuse ORM libs, no need to handle another layer above SQL.<span
|
||||
id="user-content-dont-overuse-orm-libs-no-need-to-handle-another-layer-above-sql"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#dont-overuse-orm-libs-no-need-to-handle-another-layer-above-sql"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Don't overuse ORM libs, no need to handle another layer above SQL.
|
||||
</h3>
|
||||
<p>
|
||||
Each ORM libs has each different syntax. To learn and use those libs
|
||||
|
@ -552,11 +606,16 @@ internal
|
|||
those cases. I hear that
|
||||
<a href="https://github.com/go-gorm/gorm">go-gorm/gorm</a> is good.
|
||||
</p>
|
||||
<h3 id="user-content-connect-redis-with-redisgo-redis">
|
||||
<a class="heading-link" href="#connect-redis-with-redisgo-redis"
|
||||
>Connect Redis with </a
|
||||
><a href="https://github.com/redis/go-redis">redis/go-redis</a>
|
||||
<span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-connect-redis-with-redisgo-redis"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#connect-redis-with-redisgo-redis"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Connect Redis with
|
||||
<a href="https://github.com/redis/go-redis">redis/go-redis</a>
|
||||
</h3>
|
||||
<p>
|
||||
Be careful when use
|
||||
|
@ -618,11 +677,16 @@ internal
|
|||
<ul>
|
||||
<li><code>ReadTimeout</code>, <code>WriteTimeout</code></li>
|
||||
</ul>
|
||||
<h3 id="user-content-connect-mysql-with-go-sql-drivermysql">
|
||||
<a class="heading-link" href="#connect-mysql-with-go-sql-drivermysql"
|
||||
>Connect MySQL with </a
|
||||
><a href="https://github.com/go-sql-driver/mysql">go-sql-driver/mysql</a>
|
||||
<span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-connect-mysql-with-go-sql-drivermysql"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#connect-mysql-with-go-sql-drivermysql"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Connect MySQL with
|
||||
<a href="https://github.com/go-sql-driver/mysql">go-sql-driver/mysql</a>
|
||||
</h3>
|
||||
<p>Remember to config:</p>
|
||||
<ul>
|
||||
|
@ -634,13 +698,18 @@ internal
|
|||
<li><code>CheckConnLiveness</code> to true.</li>
|
||||
<li><code>ReadTimeout</code>, <code>WriteTimeout</code></li>
|
||||
</ul>
|
||||
<h3 id="user-content-connect-sqlite-with-moderncorgsqlite">
|
||||
<a class="heading-link" href="#connect-sqlite-with-moderncorgsqlite"
|
||||
>Connect SQLite with </a
|
||||
><a href="https://gitlab.com/cznic/sqlite" rel="nofollow"
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-connect-sqlite-with-moderncorgsqlite"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#connect-sqlite-with-moderncorgsqlite"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Connect SQLite with
|
||||
<a href="https://gitlab.com/cznic/sqlite" rel="nofollow"
|
||||
>modernc.org/sqlite</a
|
||||
>
|
||||
<span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
</h3>
|
||||
<p>Remember to config:</p>
|
||||
<ul>
|
||||
|
@ -654,11 +723,15 @@ internal
|
|||
<a href="https://github.com/mattn/go-sqlite3">mattn/go-sqlite3</a>, it's
|
||||
required <code>CGO_ENABLED</code>.
|
||||
</p>
|
||||
<h3 id="user-content-connect-kafka-with-ibmsarama">
|
||||
<a class="heading-link" href="#connect-kafka-with-ibmsarama"
|
||||
>Connect Kafka with </a
|
||||
><a href="https://github.com/IBM/sarama">IBM/sarama</a>
|
||||
<span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-connect-kafka-with-ibmsarama"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#connect-kafka-with-ibmsarama"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Connect Kafka with <a href="https://github.com/IBM/sarama">IBM/sarama</a>
|
||||
</h3>
|
||||
<p>
|
||||
Use <code>sarama.V1_0_0_0</code>, because IBM decide to upgrade default
|
||||
|
@ -670,26 +743,32 @@ internal
|
|||
>confluentinc/confluent-kafka-go</a
|
||||
>, it's required <code>CGO_ENABLED</code>.
|
||||
</p>
|
||||
<h3 id="user-content-if-you-want-test-just-use-stretchrtestify">
|
||||
<a class="heading-link" href="#if-you-want-test-just-use-stretchrtestify"
|
||||
>If you want test, just use </a
|
||||
><a href="https://github.com/stretchr/testify">stretchr/testify</a>.<span
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-if-you-want-test-just-use-stretchrtestify"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span>
|
||||
tabindex="-1"
|
||||
href="#if-you-want-test-just-use-stretchrtestify"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>If you want test, just use
|
||||
<a href="https://github.com/stretchr/testify">stretchr/testify</a>.
|
||||
</h3>
|
||||
<p>
|
||||
It is easy to write a suite test, thanks to testify. Also, for mocking,
|
||||
there are many options out there. Pick 1 then sleep peacefully.
|
||||
</p>
|
||||
<h3 id="user-content-if-need-to-mock-choose-matryermoq-or-ubermock">
|
||||
<h3>
|
||||
<a
|
||||
class="heading-link"
|
||||
id="user-content-if-need-to-mock-choose-matryermoq-or-ubermock"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#if-need-to-mock-choose-matryermoq-or-ubermock"
|
||||
>If need to mock, choose </a
|
||||
><a href="https://github.com/matryer/moq">matryer/moq</a> or
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>If need to mock, choose
|
||||
<a href="https://github.com/matryer/moq">matryer/moq</a> or
|
||||
<a href="https://github.com/uber/mock">uber/mock</a>
|
||||
<span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
</h3>
|
||||
<p>
|
||||
The first is easy to use but not powerful as the later. If you want to
|
||||
|
@ -701,11 +780,15 @@ internal
|
|||
<span class="pl-c">// https://jonwillia.ms/2019/12/22/conditional-gomock-mockgen</span>
|
||||
<span class="pl-c">//go:generate sh -c "test service_mock_generated.go -nt $GOFILE && exit 0; moq -rm -out service_mock_generated.go . Service"</span></pre>
|
||||
</div>
|
||||
<h3 id="user-content-be-careful-with-spf13cast">
|
||||
<a class="heading-link" href="#be-careful-with-spf13cast"
|
||||
>Be careful with </a
|
||||
><a href="https://github.com/spf13/cast">spf13/cast</a>
|
||||
<span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-be-careful-with-spf13cast"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#be-careful-with-spf13cast"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Be careful with <a href="https://github.com/spf13/cast">spf13/cast</a>
|
||||
</h3>
|
||||
<p>Don't cast proto enum:</p>
|
||||
<div class="highlight highlight-source-go">
|
||||
|
@ -715,22 +798,21 @@ internal
|
|||
<span class="pl-c">// Good</span>
|
||||
<span class="pl-s1">a</span> <span class="pl-c1">:=</span> <span class="pl-en">int32</span>(<span class="pl-s1">servicev1</span>.<span class="pl-c1">ReasonCode_ABC</span>)</pre>
|
||||
</div>
|
||||
<h3
|
||||
id="user-content-use-stringer-if-you-want-your-type-enum-can-be-print-as-string"
|
||||
>
|
||||
<h3>
|
||||
<a
|
||||
class="heading-link"
|
||||
id="user-content-use-stringer-if-you-want-your-type-enum-can-be-print-as-string"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#use-stringer-if-you-want-your-type-enum-can-be-print-as-string"
|
||||
>Use </a
|
||||
><a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Use
|
||||
<a
|
||||
href="https://pkg.go.dev/golang.org/x/tools/cmd/stringer"
|
||||
rel="nofollow"
|
||||
>stringer</a
|
||||
>
|
||||
if you want your type enum can be print as string<span
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span>
|
||||
if you want your type enum can be print as string
|
||||
</h3>
|
||||
<div class="highlight highlight-source-go">
|
||||
<pre><span class="pl-k">type</span> <span class="pl-smi">Drink</span> <span class="pl-smi">int</span>
|
||||
|
@ -747,40 +829,51 @@ internal
|
|||
<span class="pl-c"><span class="pl-c">#</span> Run inside directory which contains Drink</span>
|
||||
stringer -type=Drink</pre>
|
||||
</div>
|
||||
<h3
|
||||
id="user-content-dont-waste-your-time-rewrite-rate-limiter-if-your-use-case-is-simple-use-rate-or-go-redisredis_rate"
|
||||
>
|
||||
<h3>
|
||||
<a
|
||||
class="heading-link"
|
||||
id="user-content-dont-waste-your-time-rewrite-rate-limiter-if-your-use-case-is-simple-use-rate-or-go-redisredis_rate"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#dont-waste-your-time-rewrite-rate-limiter-if-your-use-case-is-simple-use-rate-or-go-redisredis_rate"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Don't waste your time rewrite rate limiter if your use case is simple,
|
||||
use </a
|
||||
><a href="https://pkg.go.dev/golang.org/x/time/rate" rel="nofollow"
|
||||
use
|
||||
<a href="https://pkg.go.dev/golang.org/x/time/rate" rel="nofollow"
|
||||
>rate</a
|
||||
>
|
||||
or
|
||||
<a href="https://github.com/go-redis/redis_rate">go-redis/redis_rate</a>
|
||||
<span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
</h3>
|
||||
<p>
|
||||
<strong>rate</strong> if you want rate limiter locally in your single
|
||||
instance of service. <strong>redis_rate</strong> if you want rate limiter
|
||||
distributed across all your instances of service.
|
||||
</p>
|
||||
<h3 id="user-content-replace-go-fmt-goimports-with-mvdangofumpt">
|
||||
<a class="heading-link" href="#replace-go-fmt-goimports-with-mvdangofumpt"
|
||||
>Replace <code>go fmt</code>, <code>goimports</code> with </a
|
||||
><a href="https://github.com/mvdan/gofumpt">mvdan/gofumpt</a>.<span
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-replace-go-fmt-goimports-with-mvdangofumpt"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span>
|
||||
tabindex="-1"
|
||||
href="#replace-go-fmt-goimports-with-mvdangofumpt"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Replace <code>go fmt</code>, <code>goimports</code> with
|
||||
<a href="https://github.com/mvdan/gofumpt">mvdan/gofumpt</a>.
|
||||
</h3>
|
||||
<p><code>gofumpt</code> provides more rules when format Go codes.</p>
|
||||
<h3 id="user-content-use-golangcigolangci-lint">
|
||||
<a class="heading-link" href="#use-golangcigolangci-lint">Use </a
|
||||
><a href="https://github.com/golangci/golangci-lint"
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-use-golangcigolangci-lint"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#use-golangcigolangci-lint"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Use
|
||||
<a href="https://github.com/golangci/golangci-lint"
|
||||
>golangci/golangci-lint</a
|
||||
>.<span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
>.
|
||||
</h3>
|
||||
<p>No need to say more. Lint or get the f out!</p>
|
||||
<p>
|
||||
|
@ -799,13 +892,15 @@ go install golang.org/x/tools/go/analysis/passes/fieldalignment/cmd/fieldalignme
|
|||
<span class="pl-c"><span class="pl-c">#</span> Fix</span>
|
||||
fieldalignment -fix ./internal/business/<span class="pl-k">*</span>.go</pre>
|
||||
</div>
|
||||
<h2 id="user-content-snippetscript">
|
||||
<a class="heading-link" href="#snippetscript"
|
||||
>Snippet/script<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-snippetscript"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#snippetscript"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Snippet/script
|
||||
</h2>
|
||||
<p>Change import:</p>
|
||||
<div class="highlight highlight-source-shell">
|
||||
|
@ -815,10 +910,15 @@ fieldalignment -fix ./internal/business/<span class="pl-k">*</span>.go</pre>
|
|||
<div class="highlight highlight-source-shell">
|
||||
<pre>go clean -cache -testcache -modcache -fuzzcache -x</pre>
|
||||
</div>
|
||||
<h2 id="user-content-thanks">
|
||||
<a class="heading-link" href="#thanks"
|
||||
>Thanks<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-thanks"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#thanks"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Thanks
|
||||
</h2>
|
||||
<ul>
|
||||
<li>
|
||||
|
|
|
@ -28,13 +28,15 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-uuid-or-else">
|
||||
<a class="heading-link" href="#uuid-or-else"
|
||||
>UUID or else<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-uuid-or-else"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#uuid-or-else"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>UUID or else
|
||||
</h1>
|
||||
<p>
|
||||
There are many use cases where we need to use a unique ID. In my
|
||||
|
@ -54,15 +56,15 @@
|
|||
<li><a href="https://github.com/segmentio/ksuid">segmentio/ksuid</a></li>
|
||||
<li><a href="https://github.com/oklog/ulid">oklog/ulid</a></li>
|
||||
</ul>
|
||||
<h2 id="user-content-first-use-case-is-trace-id-or-context-aware-id">
|
||||
<h2>
|
||||
<a
|
||||
class="heading-link"
|
||||
href="#first-use-case-is-trace-id-or-context-aware-id"
|
||||
>First use case is trace ID, or context aware ID<span
|
||||
id="user-content-first-use-case-is-trace-id-or-context-aware-id"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#first-use-case-is-trace-id-or-context-aware-id"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>First use case is trace ID, or context aware ID
|
||||
</h2>
|
||||
<p>
|
||||
The ID is used only for trace and log. If same ID is generated twice
|
||||
|
@ -74,15 +76,15 @@
|
|||
My choice for this use case is <strong>rs/xid</strong>. Because it is
|
||||
small (not span too much on log line) and copy friendly.
|
||||
</p>
|
||||
<h2 id="user-content-second-use-case-is-primary-key-also-hard-choice">
|
||||
<h2>
|
||||
<a
|
||||
class="heading-link"
|
||||
href="#second-use-case-is-primary-key-also-hard-choice"
|
||||
>Second use case is primary key, also hard choice<span
|
||||
id="user-content-second-use-case-is-primary-key-also-hard-choice"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#second-use-case-is-primary-key-also-hard-choice"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Second use case is primary key, also hard choice
|
||||
</h2>
|
||||
<p>
|
||||
Why I don't use auto increment key for primary key? The answer is simple,
|
||||
|
@ -99,19 +101,29 @@
|
|||
database is sensitive subject, and I need more testing and battle test
|
||||
proof to trust those libs.
|
||||
</p>
|
||||
<h2 id="user-content-what-else">
|
||||
<a class="heading-link" href="#what-else"
|
||||
>What else?<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-what-else"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#what-else"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>What else?
|
||||
</h2>
|
||||
<p>
|
||||
I think about adding prefix to ID to identify which resource that ID
|
||||
represents.
|
||||
</p>
|
||||
<h2 id="user-content-thanks">
|
||||
<a class="heading-link" href="#thanks"
|
||||
>Thanks<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-thanks"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#thanks"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Thanks
|
||||
</h2>
|
||||
<ul>
|
||||
<li>
|
||||
|
|
|
@ -28,11 +28,15 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-migrate-to-buf-from-prototool">
|
||||
<a class="heading-link" href="#migrate-to-buf-from-prototool"
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-migrate-to-buf-from-prototool"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#migrate-to-buf-from-prototool"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Migrate to <code>buf</code> from <code>prototool</code>
|
||||
<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
</h1>
|
||||
<p>
|
||||
Why? Because <code>prototool</code> is outdated, and can not run on M1
|
||||
|
@ -142,10 +146,15 @@
|
|||
sed -i "" -e "s/import \"marshal-zap\.proto\";//g" ./raw/api.proto
|
||||
sed -i "" -e "s/\[(marshal_zap\.mask) = true]//g" ./raw/api.proto</pre>
|
||||
</div>
|
||||
<h2 id="user-content-faq">
|
||||
<a class="heading-link" href="#faq"
|
||||
>FAQ<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-faq"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#faq"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>FAQ
|
||||
</h2>
|
||||
<p>
|
||||
Remember <code>bufbuild/protoc-gen-validate</code>,
|
||||
|
@ -195,10 +204,15 @@
|
|||
compatibility.
|
||||
</li>
|
||||
</ul>
|
||||
<h1 id="user-content-tips">
|
||||
<a class="heading-link" href="#tips"
|
||||
>Tips<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-tips"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#tips"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Tips
|
||||
</h1>
|
||||
<p>Some experience I got after writing proto files for a living:</p>
|
||||
<ul>
|
||||
|
@ -211,10 +225,15 @@
|
|||
<code>sed</code> to fix the damn things.
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="user-content-thanks">
|
||||
<a class="heading-link" href="#thanks"
|
||||
>Thanks<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-thanks"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#thanks"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Thanks
|
||||
</h2>
|
||||
<ul>
|
||||
<li><a href="https://github.com/uber/prototool">uber/prototool</a></li>
|
||||
|
|
|
@ -28,29 +28,29 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-experiment-go">
|
||||
<a class="heading-link" href="#experiment-go"
|
||||
>Experiment Go<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-experiment-go"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#experiment-go"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Experiment Go
|
||||
</h1>
|
||||
<p>
|
||||
There come a time when you need to experiment new things, new style, new
|
||||
approach. So this post serves as it is named.
|
||||
</p>
|
||||
<h2
|
||||
id="user-content-design-api-by-trimming-down-the-interfacestruct-or-whatever"
|
||||
>
|
||||
<h2>
|
||||
<a
|
||||
class="heading-link"
|
||||
href="#design-api-by-trimming-down-the-interfacestruct-or-whatever"
|
||||
>Design API by trimming down the interface/struct or whatever<span
|
||||
id="user-content-design-api-by-trimming-down-the-interfacestruct-or-whatever"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#design-api-by-trimming-down-the-interfacestruct-or-whatever"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Design API by trimming down the interface/struct or whatever
|
||||
</h2>
|
||||
<p>Instead of:</p>
|
||||
<div class="highlight highlight-source-go">
|
||||
|
@ -104,11 +104,16 @@
|
|||
This pattern is used by
|
||||
<a href="https://github.com/google/go-github">google/go-github</a>.
|
||||
</p>
|
||||
<h2 id="user-content-find-alternative-to-grpcgrpc-go">
|
||||
<a class="heading-link" href="#find-alternative-to-grpcgrpc-go"
|
||||
>Find alternative to </a
|
||||
><a href="https://github.com/grpc/grpc-go">grpc/grpc-go</a>
|
||||
<span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-find-alternative-to-grpcgrpc-go"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#find-alternative-to-grpcgrpc-go"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Find alternative to
|
||||
<a href="https://github.com/grpc/grpc-go">grpc/grpc-go</a>
|
||||
</h2>
|
||||
<p>
|
||||
Why?
|
||||
|
@ -141,10 +146,15 @@
|
|||
<li><a href="https://github.com/twitchtv/twirp">twitchtv/twirp</a></li>
|
||||
<li><a href="https://github.com/storj/drpc">storj/drpc</a></li>
|
||||
</ul>
|
||||
<h1 id="user-content-thanks">
|
||||
<a class="heading-link" href="#thanks"
|
||||
>Thanks<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-thanks"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#thanks"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Thanks
|
||||
</h1>
|
||||
<ul>
|
||||
<li>
|
||||
|
|
|
@ -28,10 +28,15 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-sql">
|
||||
<a class="heading-link" href="#sql"
|
||||
>SQL<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-sql"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#sql"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>SQL
|
||||
</h1>
|
||||
<p>
|
||||
Previously in my fresher software developer time, I rarely write SQL, I
|
||||
|
@ -43,25 +48,29 @@
|
|||
This guide is not kind of guide which cover all cases. Just my little
|
||||
tricks when I work with SQL.
|
||||
</p>
|
||||
<h2 id="user-content-stay-away-from-database-unique-id">
|
||||
<a class="heading-link" href="#stay-away-from-database-unique-id"
|
||||
>Stay away from database unique id<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-stay-away-from-database-unique-id"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#stay-away-from-database-unique-id"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Stay away from database unique id
|
||||
</h2>
|
||||
<p>
|
||||
Use UUID instead. If you can, and you should, choose UUID type which can
|
||||
be sortable.
|
||||
</p>
|
||||
<h2 id="user-content-stay-away-from-database-timestamp">
|
||||
<a class="heading-link" href="#stay-away-from-database-timestamp"
|
||||
>Stay away from database timestamp<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-stay-away-from-database-timestamp"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#stay-away-from-database-timestamp"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Stay away from database timestamp
|
||||
</h2>
|
||||
<p>
|
||||
Stay away from all kind of database timestamp (MySQL timestmap, SQLite
|
||||
|
@ -80,13 +89,15 @@
|
|||
[Business] time, data -> convert to unix timestamp milliseconds -> [Database] int64</pre
|
||||
>
|
||||
</div>
|
||||
<h2 id="user-content-extra-field-for-extra-things">
|
||||
<a class="heading-link" href="#extra-field-for-extra-things"
|
||||
>Extra field for extra things<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-extra-field-for-extra-things"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#extra-field-for-extra-things"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Extra field for extra things
|
||||
</h2>
|
||||
<p>
|
||||
Create new column in database is scary, so I suggest avoid it if you can.
|
||||
|
@ -95,13 +106,15 @@
|
|||
</p>
|
||||
<p>I always use MySQL json data type for extra field.</p>
|
||||
<p>JSON data type also used for dumping request, response data.</p>
|
||||
<h2 id="user-content-use-index">
|
||||
<a class="heading-link" href="#use-index"
|
||||
>Use index!!!<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-use-index"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#use-index"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Use index!!!
|
||||
</h2>
|
||||
<p>
|
||||
You should use index for faster query, but not too much. Don't create
|
||||
|
@ -144,13 +157,15 @@
|
|||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="user-content-be-careful-with-utf-8">
|
||||
<a class="heading-link" href="#be-careful-with-utf-8"
|
||||
>Be careful with UTF-8<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-be-careful-with-utf-8"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#be-careful-with-utf-8"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Be careful with UTF-8
|
||||
</h2>
|
||||
<p>TLDR with MySQL:</p>
|
||||
<div class="highlight highlight-source-sql">
|
||||
|
@ -161,13 +176,15 @@
|
|||
) ENGINE <span class="pl-k">=</span> InnoDB
|
||||
DEFAULT CHARSET <span class="pl-k">=</span> utf8mb4;</pre>
|
||||
</div>
|
||||
<h2 id="user-content-be-careful-with-null">
|
||||
<a class="heading-link" href="#be-careful-with-null"
|
||||
>Be careful with NULL<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-be-careful-with-null"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#be-careful-with-null"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Be careful with NULL
|
||||
</h2>
|
||||
<p>
|
||||
If compare with field which can be NULL, remember to check NULL for
|
||||
|
@ -187,36 +204,46 @@
|
|||
<span class="pl-k">WHERE</span> (field_something IS <span class="pl-k">NULL</span> <span class="pl-k">OR</span> field_something <span class="pl-k">!=</span> <span class="pl-c1">1</span>)</pre>
|
||||
</div>
|
||||
<p>Need clarify why this happpen? Idk :(</p>
|
||||
<h2 id="user-content-varchar-or-text">
|
||||
<a class="heading-link" href="#varchar-or-text">
|
||||
<code>VARCHAR</code> or <code>TEXT</code>
|
||||
<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-varchar-or-text"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#varchar-or-text"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<code>VARCHAR</code> or <code>TEXT</code>
|
||||
</h2>
|
||||
<p>
|
||||
Prefer <code>VARCHAR</code> if you need to query and of course use index,
|
||||
and make sure size of value will never hit the limit. Prefer
|
||||
<code>TEXT</code> if you don't care, just want to store something.
|
||||
</p>
|
||||
<h2 id="user-content-limit">
|
||||
<a class="heading-link" href="#limit"
|
||||
><code>LIMIT</code
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-limit"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#limit"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><code>LIMIT</code>
|
||||
</h2>
|
||||
<p>
|
||||
Prefer <code>LIMIT 10 OFFSET 5</code> to <code>LIMIT 5, 10</code> to avoid
|
||||
misunderstanding.
|
||||
</p>
|
||||
<h2
|
||||
id="user-content-be-super-careful-when-migrate-update-database-on-production-and-online"
|
||||
>
|
||||
<h2>
|
||||
<a
|
||||
class="heading-link"
|
||||
id="user-content-be-super-careful-when-migrate-update-database-on-production-and-online"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#be-super-careful-when-migrate-update-database-on-production-and-online"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Be super careful when migrate, update database on production and
|
||||
online!!!<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
online!!!
|
||||
</h2>
|
||||
<p>
|
||||
Plase read docs about online ddl operations before do anything online
|
||||
|
@ -249,16 +276,26 @@
|
|||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="user-content-heathcheck">
|
||||
<a class="heading-link" href="#heathcheck"
|
||||
>Heathcheck<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-heathcheck"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#heathcheck"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Heathcheck
|
||||
</h2>
|
||||
<p>Use <code>SELECT 1</code> to check if database failed yet.</p>
|
||||
<h2 id="user-content-tools">
|
||||
<a class="heading-link" href="#tools"
|
||||
>Tools<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-tools"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#tools"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Tools
|
||||
</h2>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -271,10 +308,15 @@
|
|||
database reality :)
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="user-content-thanks">
|
||||
<a class="heading-link" href="#thanks"
|
||||
>Thanks<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-thanks"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#thanks"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Thanks
|
||||
</h2>
|
||||
<ul>
|
||||
<li>
|
||||
|
|
|
@ -28,16 +28,26 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-gitignore">
|
||||
<a class="heading-link" href="#gitignore"
|
||||
>gitignore<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-gitignore"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#gitignore"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>gitignore
|
||||
</h1>
|
||||
<p>My quick check for <code>.gitignore</code>.</p>
|
||||
<h2 id="user-content-base">
|
||||
<a class="heading-link" href="#base"
|
||||
>Base<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-base"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#base"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Base
|
||||
</h2>
|
||||
<div class="highlight highlight-text-adblock">
|
||||
<pre><span class="pl-c"># macOS</span>
|
||||
|
@ -52,10 +62,15 @@
|
|||
<span class="pl-c"># VSCode</span>
|
||||
.vscode/</pre>
|
||||
</div>
|
||||
<h2 id="user-content-go">
|
||||
<a class="heading-link" href="#go"
|
||||
>Go<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-go"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#go"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Go
|
||||
</h2>
|
||||
<div class="highlight highlight-text-adblock">
|
||||
<pre><span class="pl-c"># Go</span>
|
||||
|
@ -65,10 +80,15 @@ coverage.out
|
|||
<span class="pl-c"># Should ignore vendor</span>
|
||||
vendor</pre>
|
||||
</div>
|
||||
<h2 id="user-content-python">
|
||||
<a class="heading-link" href="#python"
|
||||
>Python<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-python"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#python"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Python
|
||||
</h2>
|
||||
<div class="highlight highlight-text-adblock"><pre>venv</pre></div>
|
||||
|
||||
|
|
|
@ -28,13 +28,15 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-reload-config">
|
||||
<a class="heading-link" href="#reload-config"
|
||||
>Reload config<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-reload-config"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#reload-config"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Reload config
|
||||
</h1>
|
||||
<p>This serves as design draft of reload config system</p>
|
||||
<div class="highlight highlight-source-wsd">
|
||||
|
|
|
@ -28,13 +28,15 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-install-arch-linux">
|
||||
<a class="heading-link" href="#install-arch-linux"
|
||||
>Install Arch Linux<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-install-arch-linux"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#install-arch-linux"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Install Arch Linux
|
||||
</h1>
|
||||
<p>
|
||||
Install Arch Linux is thing I always want to do for my laptop/PC since I
|
||||
|
@ -44,21 +46,29 @@
|
|||
This is not a guide for everyone, this is just save for myself in a future
|
||||
and for anyone who want to walk in my shoes.
|
||||
</p>
|
||||
<h2 id="user-content-installation-guide">
|
||||
<a class="heading-link" href="#installation-guide"></a
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-installation-guide"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#installation-guide"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a
|
||||
href="https://wiki.archlinux.org/index.php/Installation_guide"
|
||||
rel="nofollow"
|
||||
>Installation guide</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
>
|
||||
</h2>
|
||||
<h3 id="user-content-pre-installation">
|
||||
<a class="heading-link" href="#pre-installation"
|
||||
>Pre-installation<span
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-pre-installation"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#pre-installation"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Pre-installation
|
||||
</h3>
|
||||
<p>Check disks carefully:</p>
|
||||
<div class="highlight highlight-source-shell"><pre>lsblk</pre></div>
|
||||
|
@ -69,37 +79,43 @@
|
|||
>USB flash installation medium</a
|
||||
>
|
||||
</p>
|
||||
<h4 id="user-content-verify-the-boot-mode">
|
||||
<a class="heading-link" href="#verify-the-boot-mode"
|
||||
>Verify the boot mode<span
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-verify-the-boot-mode"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#verify-the-boot-mode"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Verify the boot mode
|
||||
</h4>
|
||||
<p>Check UEFI mode:</p>
|
||||
<div class="highlight highlight-source-shell">
|
||||
<pre>ls /sys/firmware/efi/efivars</pre>
|
||||
</div>
|
||||
<h4 id="user-content-connect-to-the-internet">
|
||||
<a class="heading-link" href="#connect-to-the-internet"
|
||||
>Connect to the internet<span
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-connect-to-the-internet"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#connect-to-the-internet"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Connect to the internet
|
||||
</h4>
|
||||
<p>
|
||||
For wifi, use
|
||||
<a href="https://wiki.archlinux.org/index.php/Iwd" rel="nofollow">iwd</a>.
|
||||
</p>
|
||||
<h4 id="user-content-partition-the-disks">
|
||||
<a class="heading-link" href="#partition-the-disks"
|
||||
>Partition the disks<span
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-partition-the-disks"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#partition-the-disks"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Partition the disks
|
||||
</h4>
|
||||
<p>
|
||||
<a href="https://wiki.archlinux.org/index.php/GPT_fdisk" rel="nofollow"
|
||||
|
@ -224,13 +240,15 @@ mount --mkdir /dev/efi_system_partition /mnt/efi
|
|||
<span class="pl-c"><span class="pl-c">#</span> boot</span>
|
||||
mount --mkdir /dev/extended_boot_loader_partition /mnt/boot</pre>
|
||||
</div>
|
||||
<h3 id="user-content-installation">
|
||||
<a class="heading-link" href="#installation"
|
||||
>Installation<span
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-installation"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#installation"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Installation
|
||||
</h3>
|
||||
<div class="highlight highlight-source-shell">
|
||||
<pre>pacstrap -K /mnt base linux linux-firmware
|
||||
|
@ -250,32 +268,53 @@ pacstrap -K /mnt lvm2
|
|||
<span class="pl-c"><span class="pl-c">#</span> Text editor</span>
|
||||
pacstrap -K /mnt neovim</pre>
|
||||
</div>
|
||||
<h3 id="user-content-configure">
|
||||
<a class="heading-link" href="#configure"
|
||||
>Configure<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-configure"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#configure"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Configure
|
||||
</h3>
|
||||
<h4 id="user-content-fstab">
|
||||
<a class="heading-link" href="#fstab"></a
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-fstab"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#fstab"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://wiki.archlinux.org/index.php/Fstab" rel="nofollow"
|
||||
>fstab</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
>
|
||||
</h4>
|
||||
<div class="highlight highlight-source-shell">
|
||||
<pre>genfstab -U /mnt <span class="pl-k">>></span> /mnt/etc/fstab</pre>
|
||||
</div>
|
||||
<h4 id="user-content-chroot">
|
||||
<a class="heading-link" href="#chroot"
|
||||
>Chroot<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-chroot"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#chroot"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Chroot
|
||||
</h4>
|
||||
<div class="highlight highlight-source-shell">
|
||||
<pre>arch-chroot /mnt</pre>
|
||||
</div>
|
||||
<h4 id="user-content-time-zone">
|
||||
<a class="heading-link" href="#time-zone"
|
||||
>Time zone<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-time-zone"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#time-zone"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Time zone
|
||||
</h4>
|
||||
<div class="highlight highlight-source-shell">
|
||||
<pre>
|
||||
|
@ -284,13 +323,15 @@ ln -sf /usr/share/zoneinfo/Region/City /etc/localtime
|
|||
hwclock --systohc</pre
|
||||
>
|
||||
</div>
|
||||
<h4 id="user-content-localization">
|
||||
<a class="heading-link" href="#localization"
|
||||
>Localization:<span
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-localization"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#localization"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Localization:
|
||||
</h4>
|
||||
<p>Edit <code>/etc/locale.gen</code>:</p>
|
||||
<div class="highlight highlight-text-adblock">
|
||||
|
@ -302,20 +343,27 @@ hwclock --systohc</pre
|
|||
<div class="highlight highlight-text-adblock">
|
||||
<pre>LANG=en_US.UTF-8</pre>
|
||||
</div>
|
||||
<h4 id="user-content-network-configuration">
|
||||
<a class="heading-link" href="#network-configuration"
|
||||
>Network configuration<span
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-network-configuration"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#network-configuration"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Network configuration
|
||||
</h4>
|
||||
<p>Edit <code>/etc/hostname</code>:</p>
|
||||
<div class="highlight highlight-text-adblock"><pre>myhostname</pre></div>
|
||||
<h4 id="user-content-initramfs">
|
||||
<a class="heading-link" href="#initramfs"
|
||||
>Initramfs<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-initramfs"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#initramfs"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Initramfs
|
||||
</h4>
|
||||
<p>Edit <code>/etc/mkinitcpio.conf</code>:</p>
|
||||
<div class="highlight highlight-text-adblock">
|
||||
|
@ -327,25 +375,38 @@ HOOKS=(base udev ... block lvm2 filesystems)
|
|||
<span class="pl-c"># Replace udev with systemd</span></pre>
|
||||
</div>
|
||||
<div class="highlight highlight-source-shell"><pre>mkinitcpio -P</pre></div>
|
||||
<h4 id="user-content-root-password">
|
||||
<a class="heading-link" href="#root-password"
|
||||
>Root password<span
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-root-password"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#root-password"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Root password
|
||||
</h4>
|
||||
<div class="highlight highlight-source-shell"><pre>passwd</pre></div>
|
||||
<h4 id="user-content-addition">
|
||||
<a class="heading-link" href="#addition"
|
||||
>Addition<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-addition"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#addition"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Addition
|
||||
</h4>
|
||||
<h5 id="user-content-networkmanager-wip">
|
||||
<a class="heading-link" href="#networkmanager-wip"></a
|
||||
<h5>
|
||||
<a
|
||||
id="user-content-networkmanager-wip"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#networkmanager-wip"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://wiki.archlinux.org/title/NetworkManager" rel="nofollow"
|
||||
>NetworkManager (WIP)</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
>
|
||||
</h5>
|
||||
<div class="highlight highlight-source-shell">
|
||||
<pre>pacman -Syu networkmanager dhcpcd iwd
|
||||
|
@ -380,35 +441,56 @@ noarp
|
|||
nohook resolv.conf</pre
|
||||
>
|
||||
</div>
|
||||
<h5 id="user-content-bluetooth">
|
||||
<a class="heading-link" href="#bluetooth"
|
||||
>Bluetooth<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h5>
|
||||
<a
|
||||
id="user-content-bluetooth"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#bluetooth"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Bluetooth
|
||||
</h5>
|
||||
<div class="highlight highlight-source-shell">
|
||||
<pre>pacman -Syu bluez
|
||||
systemctl <span class="pl-c1">enable</span> bluetooth.service</pre>
|
||||
</div>
|
||||
<h5 id="user-content-clock">
|
||||
<a class="heading-link" href="#clock"
|
||||
>Clock<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h5>
|
||||
<a
|
||||
id="user-content-clock"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#clock"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Clock
|
||||
</h5>
|
||||
<div class="highlight highlight-source-shell">
|
||||
<pre>timedatectl set-ntp <span class="pl-c1">true</span></pre>
|
||||
</div>
|
||||
<h4 id="user-content-boot-loader">
|
||||
<a class="heading-link" href="#boot-loader"
|
||||
>Boot loader<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-boot-loader"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#boot-loader"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Boot loader
|
||||
</h4>
|
||||
<h5 id="user-content-systemd-boot">
|
||||
<a class="heading-link" href="#systemd-boot"></a
|
||||
<h5>
|
||||
<a
|
||||
id="user-content-systemd-boot"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#systemd-boot"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a
|
||||
href="https://wiki.archlinux.org/index.php/Systemd-boot"
|
||||
rel="nofollow"
|
||||
>systemd-boot</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
>
|
||||
</h5>
|
||||
<p>Install using XBOOTLDR:</p>
|
||||
<div class="highlight highlight-source-shell">
|
||||
|
@ -456,25 +538,33 @@ initrd /initramfs-linux.img
|
|||
<span class="pl-c"># nvidia-drm.modeset=1</span>
|
||||
options root="LABEL=ROOT" rw</pre>
|
||||
</div>
|
||||
<h2 id="user-content-general-recommendations">
|
||||
<a class="heading-link" href="#general-recommendations"></a
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-general-recommendations"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#general-recommendations"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a
|
||||
href="https://wiki.archlinux.org/index.php/General_recommendations"
|
||||
rel="nofollow"
|
||||
>General recommendations</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
>
|
||||
</h2>
|
||||
<p>
|
||||
Always remember to check <strong>dependencies</strong> when install
|
||||
packages.
|
||||
</p>
|
||||
<h3 id="user-content-system-administration">
|
||||
<a class="heading-link" href="#system-administration"
|
||||
>System administration<span
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-system-administration"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#system-administration"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>System administration
|
||||
</h3>
|
||||
<p>
|
||||
<a href="https://wiki.archlinux.org/index.php/sudo" rel="nofollow">Sudo</a
|
||||
|
@ -514,13 +604,15 @@ homectl update joker --shell=/usr/bin/zsh</pre>
|
|||
<strong>Note</strong>: Can not run <code>homectl</code> when install Arch
|
||||
Linux. Should run on the first boot.
|
||||
</p>
|
||||
<h3 id="user-content-desktop-environment">
|
||||
<a class="heading-link" href="#desktop-environment"
|
||||
>Desktop Environment<span
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-desktop-environment"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#desktop-environment"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Desktop Environment
|
||||
</h3>
|
||||
<p>
|
||||
Install
|
||||
|
@ -530,11 +622,17 @@ homectl update joker --shell=/usr/bin/zsh</pre>
|
|||
<div class="highlight highlight-source-shell">
|
||||
<pre>pacman -Syu xorg-server</pre>
|
||||
</div>
|
||||
<h4 id="user-content-gnome">
|
||||
<a class="heading-link" href="#gnome"></a
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-gnome"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#gnome"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://wiki.archlinux.org/index.php/GNOME" rel="nofollow"
|
||||
>GNOME</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
>
|
||||
</h4>
|
||||
<div class="highlight highlight-source-shell">
|
||||
<pre>pacman -Syu gnome-shell \
|
||||
|
@ -557,19 +655,31 @@ systemctl <span class="pl-c1">enable</span> gdm.service</pre>
|
|||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="user-content-list-of-applications">
|
||||
<a class="heading-link" href="#list-of-applications"></a
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-list-of-applications"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#list-of-applications"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a
|
||||
href="https://wiki.archlinux.org/index.php/List_of_applications"
|
||||
rel="nofollow"
|
||||
>List of applications</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
>
|
||||
</h2>
|
||||
<h3 id="user-content-pacman">
|
||||
<a class="heading-link" href="#pacman"></a
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-pacman"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#pacman"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://wiki.archlinux.org/index.php/pacman" rel="nofollow"
|
||||
>pacman</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
>
|
||||
</h3>
|
||||
<p>Uncomment in <code>/etc/pacman.conf</code>:</p>
|
||||
<div class="highlight highlight-text-adblock">
|
||||
|
@ -577,11 +687,17 @@ systemctl <span class="pl-c1">enable</span> gdm.service</pre>
|
|||
Color
|
||||
ParallelDownloads</pre>
|
||||
</div>
|
||||
<h3 id="user-content-pipewire-wip">
|
||||
<a class="heading-link" href="#pipewire-wip"></a
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-pipewire-wip"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#pipewire-wip"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://wiki.archlinux.org/title/PipeWire" rel="nofollow"
|
||||
>Pipewire (WIP)</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
>
|
||||
</h3>
|
||||
<div class="highlight highlight-source-shell">
|
||||
<pre>
|
||||
|
@ -601,22 +717,34 @@ pacman -Syu pipewire wireplumber \
|
|||
<div class="highlight highlight-source-shell">
|
||||
<pre>pacman -Syu sof-firmware</pre>
|
||||
</div>
|
||||
<h3 id="user-content-flatpak-wip">
|
||||
<a class="heading-link" href="#flatpak-wip"></a
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-flatpak-wip"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#flatpak-wip"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://wiki.archlinux.org/title/Flatpak" rel="nofollow"
|
||||
>Flatpak (WIP)</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
>
|
||||
</h3>
|
||||
<div class="highlight highlight-source-shell">
|
||||
<pre>pacman -Syu flatpak</pre>
|
||||
</div>
|
||||
<h2 id="user-content-improving-performance">
|
||||
<a class="heading-link" href="#improving-performance"></a
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-improving-performance"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#improving-performance"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a
|
||||
href="https://wiki.archlinux.org/index.php/improving_performance"
|
||||
rel="nofollow"
|
||||
>Improving performance</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
>
|
||||
</h2>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -679,13 +807,15 @@ pacman -Syu pipewire wireplumber \
|
|||
<pre><span class="pl-c"># https://lwn.net/Articles/911219/</span>
|
||||
kernel.split_lock_mitigate = 0</pre>
|
||||
</div>
|
||||
<h2 id="user-content-hardware-dependent">
|
||||
<a class="heading-link" href="#hardware-dependent"
|
||||
>Hardware dependent<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-hardware-dependent"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#hardware-dependent"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Hardware dependent
|
||||
</h2>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -704,10 +834,15 @@ kernel.split_lock_mitigate = 0</pre>
|
|||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="user-content-experiment">
|
||||
<a class="heading-link" href="#experiment"
|
||||
>Experiment<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-experiment"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#experiment"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Experiment
|
||||
</h2>
|
||||
<p>Do it at your own risk!!!</p>
|
||||
<ul>
|
||||
|
@ -729,10 +864,15 @@ kernel.split_lock_mitigate = 0</pre>
|
|||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="user-content-in-the-end">
|
||||
<a class="heading-link" href="#in-the-end"
|
||||
>In the end<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-in-the-end"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#in-the-end"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>In the end
|
||||
</h2>
|
||||
<p>This guide is updated regularly I promise.</p>
|
||||
|
||||
|
|
|
@ -28,13 +28,15 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-speed-up-writing-go-test-asap">
|
||||
<a class="heading-link" href="#speed-up-writing-go-test-asap"
|
||||
>Speed up writing Go test ASAP<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-speed-up-writing-go-test-asap"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#speed-up-writing-go-test-asap"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Speed up writing Go test ASAP
|
||||
</h1>
|
||||
<p>
|
||||
Imagine your project currently have 0% unit test code coverage. And your
|
||||
|
@ -55,13 +57,15 @@
|
|||
just make sure your code is running excatly as you intent it to be. If you
|
||||
don't think about edge case before, unit test won't help you.
|
||||
</p>
|
||||
<h2 id="user-content-first-rewrite-the-impossible-to-test-out">
|
||||
<a class="heading-link" href="#first-rewrite-the-impossible-to-test-out"
|
||||
>First, rewrite the impossible (to test) out<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-first-rewrite-the-impossible-to-test-out"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#first-rewrite-the-impossible-to-test-out"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>First, rewrite the impossible (to test) out
|
||||
</h2>
|
||||
<p>
|
||||
When I learn programming, I encounter very interesting idea, which become
|
||||
|
@ -85,13 +89,15 @@
|
|||
all global var to fields inside some struct.
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="user-content-let-the-fun-writing-test-begin">
|
||||
<a class="heading-link" href="#let-the-fun-writing-test-begin"
|
||||
>Let the fun (writing test) begin<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-let-the-fun-writing-test-begin"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#let-the-fun-writing-test-begin"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Let the fun (writing test) begin
|
||||
</h2>
|
||||
<p>
|
||||
If you code Go long enough, you know table driven tests and how is that so
|
||||
|
|
|
@ -28,22 +28,26 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-incident-come-and-go">
|
||||
<a class="heading-link" href="#incident-come-and-go"
|
||||
>Incident come and go<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-incident-come-and-go"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#incident-come-and-go"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Incident come and go
|
||||
</h1>
|
||||
<p>This is collect of all incidents I created in the past :(</p>
|
||||
<h2 id="user-content-service-starts-with-empty-port">
|
||||
<a class="heading-link" href="#service-starts-with-empty-port"
|
||||
>Service starts with empty port<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-service-starts-with-empty-port"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#service-starts-with-empty-port"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Service starts with empty port
|
||||
</h2>
|
||||
<p>Because all configs is read from file.</p>
|
||||
<p>
|
||||
|
@ -54,13 +58,15 @@
|
|||
<strong>Solution</strong>: For some configs, make sure to failed first if
|
||||
it's empty.
|
||||
</p>
|
||||
<h2 id="user-content-race-condition-of-series-of-apis">
|
||||
<a class="heading-link" href="#race-condition-of-series-of-apis"
|
||||
>Race condition of series of APIs<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-race-condition-of-series-of-apis"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#race-condition-of-series-of-apis"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Race condition of series of APIs
|
||||
</h2>
|
||||
<p>For example I have 2 APIs:</p>
|
||||
<ul>
|
||||
|
|
|
@ -28,13 +28,15 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-ekyc---the-battle-never-ends">
|
||||
<a class="heading-link" href="#ekyc---the-battle-never-ends"
|
||||
>EKYC - The battle never ends<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-ekyc---the-battle-never-ends"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#ekyc---the-battle-never-ends"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>EKYC - The battle never ends
|
||||
</h1>
|
||||
<p>TODO</p>
|
||||
|
||||
|
|
|
@ -28,10 +28,15 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-fonts">
|
||||
<a class="heading-link" href="#fonts"
|
||||
>Fonts<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-fonts"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#fonts"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Fonts
|
||||
</h1>
|
||||
<p>
|
||||
I always want the best fonts for my terminal, my text editor, my ... But
|
||||
|
@ -63,10 +68,15 @@
|
|||
All images belows is either official images I got from fonts website or my
|
||||
own screenshots. I'm too lazy to screenshot anw :D
|
||||
</p>
|
||||
<h2 id="user-content-jetbrains-mono">
|
||||
<a class="heading-link" href="#jetbrains-mono"></a
|
||||
><a href="https://github.com/JetBrains/JetBrainsMono">JetBrains Mono</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-jetbrains-mono"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#jetbrains-mono"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://github.com/JetBrains/JetBrainsMono">JetBrains Mono</a>
|
||||
</h2>
|
||||
<p>JetBrains branding font.</p>
|
||||
<ul>
|
||||
|
@ -91,10 +101,15 @@
|
|||
<code>cv16</code>, <code>cv18</code>, <code>cv19</code>,
|
||||
<code>cv20</code>.
|
||||
</p>
|
||||
<h2 id="user-content-iosevka">
|
||||
<a class="heading-link" href="#iosevka"></a
|
||||
><a href="https://github.com/be5invis/Iosevka">Iosevka</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-iosevka"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#iosevka"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://github.com/be5invis/Iosevka">Iosevka</a>
|
||||
</h2>
|
||||
<p>I often choose SS08 variant because I also love PragmataPro too.</p>
|
||||
<ul>
|
||||
|
@ -108,10 +123,15 @@
|
|||
Font is narrow, can display much more on small screen. But too much
|
||||
config/variant for ligatures scares me.
|
||||
</p>
|
||||
<h2 id="user-content-recursive">
|
||||
<a class="heading-link" href="#recursive"></a
|
||||
><a href="https://github.com/arrowtype/recursive">Recursive</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-recursive"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#recursive"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://github.com/arrowtype/recursive">Recursive</a>
|
||||
</h2>
|
||||
<p>I often choose Casual variant.</p>
|
||||
<ul>
|
||||
|
@ -123,10 +143,15 @@
|
|||
</ul>
|
||||
<p>Ligatures I prefer: <code>ss10</code>, <code>ss12</code>.</p>
|
||||
<p>Looks good on my phone.</p>
|
||||
<h2 id="user-content-agave">
|
||||
<a class="heading-link" href="#agave"></a
|
||||
><a href="https://github.com/blobject/agave">agave</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-agave"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#agave"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://github.com/blobject/agave">agave</a>
|
||||
</h2>
|
||||
<ul>
|
||||
<li>No Vietnamese</li>
|
||||
|
@ -139,10 +164,15 @@
|
|||
Font is small, can display much more on small screen. I like its curved
|
||||
look.
|
||||
</p>
|
||||
<h2 id="user-content-sudo">
|
||||
<a class="heading-link" href="#sudo"></a
|
||||
><a href="https://github.com/jenskutilek/sudo-font">Sudo</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-sudo"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#sudo"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://github.com/jenskutilek/sudo-font">Sudo</a>
|
||||
</h2>
|
||||
<p>Small fonts, saving space.</p>
|
||||
<ul>
|
||||
|
@ -156,11 +186,17 @@
|
|||
Unique to me. Strange <code>#</code>, looks same as <code>4</code> (I
|
||||
don't like it for now).
|
||||
</p>
|
||||
<h2 id="user-content-fantasque-sans-mono">
|
||||
<a class="heading-link" href="#fantasque-sans-mono"></a
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-fantasque-sans-mono"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#fantasque-sans-mono"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://github.com/belluzj/fantasque-sans"
|
||||
>Fantasque Sans Mono</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
>
|
||||
</h2>
|
||||
<p>Comic vibe. Look smoothly and too much curve.</p>
|
||||
<ul>
|
||||
|
@ -179,11 +215,17 @@
|
|||
style="max-width: 100%"
|
||||
/></a>
|
||||
</p>
|
||||
<h2 id="user-content-apl-385-and-apl386">
|
||||
<a class="heading-link" href="#apl-385-and-apl386"> </a
|
||||
><a href="https://apl385.com/fonts/index.htm" rel="nofollow">APL-385</a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-apl-385-and-apl386"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#apl-385-and-apl386"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<a href="https://apl385.com/fonts/index.htm" rel="nofollow">APL-385</a>
|
||||
and <a href="https://github.com/abrudz/APL386">APL386</a>
|
||||
<span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
</h2>
|
||||
<ul>
|
||||
<li>No Vietnamese</li>
|
||||
|
@ -192,10 +234,15 @@
|
|||
<li>Has display font (APL333)</li>
|
||||
</ul>
|
||||
<p>I love its wide look, also it's feel nostalgic.</p>
|
||||
<h2 id="user-content-ibm-plex">
|
||||
<a class="heading-link" href="#ibm-plex"></a
|
||||
><a href="https://github.com/IBM/plex">IBM Plex</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-ibm-plex"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#ibm-plex"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://github.com/IBM/plex">IBM Plex</a>
|
||||
</h2>
|
||||
<p>
|
||||
IBM branding font, good alternative for Inter, has both monospace and
|
||||
|
@ -209,10 +256,15 @@
|
|||
<li>Has display font</li>
|
||||
</ul>
|
||||
<p>Looks fancy. Strange <code>#</code>.</p>
|
||||
<h2 id="user-content-hermit">
|
||||
<a class="heading-link" href="#hermit"></a
|
||||
><a href="https://github.com/pcaro90/hermit">Hermit</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-hermit"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#hermit"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://github.com/pcaro90/hermit">Hermit</a>
|
||||
</h2>
|
||||
<ul>
|
||||
<li>No Vietnamese</li>
|
||||
|
@ -220,10 +272,15 @@
|
|||
<li>No ligatures</li>
|
||||
</ul>
|
||||
<p>Looks unique to me, with some sharp look.</p>
|
||||
<h2 id="user-content-martian-mono">
|
||||
<a class="heading-link" href="#martian-mono"></a
|
||||
><a href="https://github.com/evilmartians/mono">Martian Mono</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-martian-mono"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#martian-mono"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://github.com/evilmartians/mono">Martian Mono</a>
|
||||
</h2>
|
||||
<ul>
|
||||
<li>No Vietnamese</li>
|
||||
|
@ -246,21 +303,27 @@
|
|||
style="max-width: 100%"
|
||||
/></a>
|
||||
</p>
|
||||
<h2 id="user-content-nerd-fonts">
|
||||
<a class="heading-link" href="#nerd-fonts"></a
|
||||
><a href="https://github.com/ryanoasis/nerd-fonts">Nerd Fonts</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-nerd-fonts"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#nerd-fonts"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://github.com/ryanoasis/nerd-fonts">Nerd Fonts</a>
|
||||
</h2>
|
||||
<p>For fancy terminal, only need <code>NerdFontsSymbolsOnly</code></p>
|
||||
<h2
|
||||
id="user-content-murr-fonts-but-i-dont-use-much-now-some-fonts-i-already-try-in-the-past"
|
||||
>
|
||||
<h2>
|
||||
<a
|
||||
class="heading-link"
|
||||
id="user-content-murr-fonts-but-i-dont-use-much-now-some-fonts-i-already-try-in-the-past"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#murr-fonts-but-i-dont-use-much-now-some-fonts-i-already-try-in-the-past"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Murr fonts, but I don't use much now (some fonts I already try in the
|
||||
past)<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
past)
|
||||
</h2>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -291,13 +354,15 @@
|
|||
font.
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="user-content-bitmapoldschool">
|
||||
<a class="heading-link" href="#bitmapoldschool"
|
||||
>Bitmap/Oldschool<span
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-bitmapoldschool"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#bitmapoldschool"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Bitmap/Oldschool
|
||||
</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -319,13 +384,15 @@
|
|||
>: old school
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="user-content-only-display">
|
||||
<a class="heading-link" href="#only-display"
|
||||
>Only display<span
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-only-display"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#only-display"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Only display
|
||||
</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -338,10 +405,15 @@
|
|||
>: for reading ebook.
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="user-content-trendy">
|
||||
<a class="heading-link" href="#trendy"
|
||||
>Trendy<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-trendy"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#trendy"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Trendy
|
||||
</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
|
|
@ -28,10 +28,15 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-games-4-fun">
|
||||
<a class="heading-link" href="#games-4-fun"
|
||||
>Games 4 fun<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-games-4-fun"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#games-4-fun"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Games 4 fun
|
||||
</h1>
|
||||
<p>
|
||||
Just a little note about apps, games, settings for next time playing :D
|
||||
|
@ -42,13 +47,15 @@
|
|||
<li>My work laptop (Macbook Pro M1 (2020)).</li>
|
||||
</ul>
|
||||
<p>If below links die, I will try to scrape Internet to get a new link.</p>
|
||||
<h2 id="user-content-ps2-emulator">
|
||||
<a class="heading-link" href="#ps2-emulator"
|
||||
>PS2 emulator<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-ps2-emulator"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#ps2-emulator"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>PS2 emulator
|
||||
</h2>
|
||||
<p>
|
||||
I use <a href="https://github.com/PCSX2/pcsx2">PCSX2</a>. Currently it
|
||||
|
@ -96,11 +103,17 @@
|
|||
For cover art of games, please use
|
||||
<a href="https://github.com/xlenore/ps2-covers">xlenore/ps2-covers</a>.
|
||||
</p>
|
||||
<h3 id="user-content-resident-evil-4">
|
||||
<a class="heading-link" href="#resident-evil-4"></a
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-resident-evil-4"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#resident-evil-4"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://wiki.pcsx2.net/Resident_Evil_4" rel="nofollow"
|
||||
>Resident Evil 4</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
>
|
||||
</h3>
|
||||
<p>
|
||||
<a
|
||||
|
@ -173,13 +186,15 @@ patch=1,EE,2012009C,extended,00000000</pre
|
|||
style="max-width: 100%"
|
||||
/></a>
|
||||
</p>
|
||||
<h3 id="user-content-mega-man-x-collection">
|
||||
<a class="heading-link" href="#mega-man-x-collection"
|
||||
>Mega Man X Collection<span
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-mega-man-x-collection"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#mega-man-x-collection"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Mega Man X Collection
|
||||
</h3>
|
||||
<p>
|
||||
<a
|
||||
|
@ -188,20 +203,30 @@ patch=1,EE,2012009C,extended,00000000</pre
|
|||
>CDROMANCE</a
|
||||
>
|
||||
</p>
|
||||
<h3 id="user-content-mega-man-x8">
|
||||
<a class="heading-link" href="#mega-man-x8"
|
||||
>Mega Man X8<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-mega-man-x8"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#mega-man-x8"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Mega Man X8
|
||||
</h3>
|
||||
<p>
|
||||
<a href="https://cdromance.com/ps2-iso/mega-man-x8-usa/" rel="nofollow"
|
||||
>CDROMANCE</a
|
||||
>
|
||||
</p>
|
||||
<h3 id="user-content-god-of-war">
|
||||
<a class="heading-link" href="#god-of-war"
|
||||
>God of War<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-god-of-war"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#god-of-war"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>God of War
|
||||
</h3>
|
||||
<p>
|
||||
<a href="https://cdromance.com/ps2-iso/god-of-war-usa/" rel="nofollow"
|
||||
|
@ -233,13 +258,15 @@ patch=1,EE,2012009C,extended,00000000</pre
|
|||
<a href="https://ko-fi.com/pandavenom" rel="nofollow">Panda Venom</a> for
|
||||
his work.
|
||||
</p>
|
||||
<h3 id="user-content-god-of-war-ii">
|
||||
<a class="heading-link" href="#god-of-war-ii"
|
||||
>God of War II<span
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-god-of-war-ii"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#god-of-war-ii"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>God of War II
|
||||
</h3>
|
||||
<p>
|
||||
<a
|
||||
|
@ -273,13 +300,15 @@ patch=1,EE,2012009C,extended,00000000</pre
|
|||
<a href="https://ko-fi.com/pandavenom" rel="nofollow">Panda Venom</a> for
|
||||
his work.
|
||||
</p>
|
||||
<h3 id="user-content-shadow-of-the-colossus">
|
||||
<a class="heading-link" href="#shadow-of-the-colossus"
|
||||
>Shadow of the Colossus<span
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-shadow-of-the-colossus"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#shadow-of-the-colossus"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Shadow of the Colossus
|
||||
</h3>
|
||||
<p>
|
||||
<a
|
||||
|
@ -288,13 +317,15 @@ patch=1,EE,2012009C,extended,00000000</pre
|
|||
>CDROMANCE</a
|
||||
>
|
||||
</p>
|
||||
<h2 id="user-content-ps3-emulator">
|
||||
<a class="heading-link" href="#ps3-emulator"
|
||||
>PS3 emulator<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-ps3-emulator"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#ps3-emulator"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>PS3 emulator
|
||||
</h2>
|
||||
<p>
|
||||
I use <a href="https://github.com/RPCS3/rpcs3">RPCS3</a>. Currently it
|
||||
|
@ -319,6 +350,85 @@ patch=1,EE,2012009C,extended,00000000</pre
|
|||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-windows-games"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#windows-games"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Windows games
|
||||
</h2>
|
||||
<ul>
|
||||
<li>
|
||||
<a
|
||||
href="https://fitgirl-repacks.site/resident-evil-village/"
|
||||
rel="nofollow"
|
||||
>Resident Evil: Village</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://fitgirl-repacks.site/resident-evil-4-hd-project/"
|
||||
rel="nofollow"
|
||||
>Resident Evil 4</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://fitgirl-repacks.site/resident-evil-7-biohazard/"
|
||||
rel="nofollow"
|
||||
>Resident Evil 7: Biohazard</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://fitgirl-repacks.site/resident-evil-3/" rel="nofollow"
|
||||
>Resident Evil 3</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://fitgirl-repacks.site/resident-evil-2-deluxe-edition/"
|
||||
rel="nofollow"
|
||||
>RESIDENT EVIL 2</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://fitgirl-repacks.site/god-of-war/" rel="nofollow"
|
||||
>God of War</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://fitgirl-repacks.site/dark-souls-remastered/"
|
||||
rel="nofollow"
|
||||
>Dark Souls Remastered</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://fitgirl-repacks.site/dark-souls-3/" rel="nofollow"
|
||||
>Dark Souls 3</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://fitgirl-repacks.site/sekiro-shadows-die-twice/"
|
||||
rel="nofollow"
|
||||
>Sekiro: Shadows Die Twice</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://fitgirl-repacks.site/elden-ring/" rel="nofollow"
|
||||
>ELDEN RING</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://fitgirl-repacks.site/cyberpunk-2077/" rel="nofollow"
|
||||
>Cyberpunk 2077</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div>
|
||||
Feel free to ask me via
|
||||
|
|
|
@ -28,38 +28,52 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-keeb">
|
||||
<a class="heading-link" href="#keeb"
|
||||
>Keeb<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-keeb"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#keeb"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Keeb
|
||||
</h1>
|
||||
<p>My collection of mechanical keyboards.</p>
|
||||
<h2 id="user-content-keyboard">
|
||||
<a class="heading-link" href="#keyboard"
|
||||
>Keyboard<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-keyboard"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#keyboard"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Keyboard
|
||||
</h2>
|
||||
<p>
|
||||
QMK custom keymaps is
|
||||
<a href="https://github.com/haunt98/qmk_keymaps">here</a>
|
||||
</p>
|
||||
<h3 id="user-content-ikbc-cd87-cherry-mx-blue">
|
||||
<a class="heading-link" href="#ikbc-cd87-cherry-mx-blue"
|
||||
>iKBC CD87 Cherry MX Blue<span
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-ikbc-cd87-cherry-mx-blue"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#ikbc-cd87-cherry-mx-blue"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>iKBC CD87 Cherry MX Blue
|
||||
</h3>
|
||||
<p>My first keeb.</p>
|
||||
<p>Damn it's so loud :D</p>
|
||||
<h3 id="user-content-kbdfans-x-lazurite-d60lite">
|
||||
<a class="heading-link" href="#kbdfans-x-lazurite-d60lite"
|
||||
>KBDfans X Lazurite D60Lite<span
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-kbdfans-x-lazurite-d60lite"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#kbdfans-x-lazurite-d60lite"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>KBDfans X Lazurite D60Lite
|
||||
</h3>
|
||||
<p>I bought it from my friend.</p>
|
||||
<p>
|
||||
|
@ -100,10 +114,15 @@
|
|||
style="max-width: 100%"
|
||||
/></a>
|
||||
</p>
|
||||
<h4 id="user-content-specs">
|
||||
<a class="heading-link" href="#specs"
|
||||
>Specs<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-specs"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#specs"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Specs
|
||||
</h4>
|
||||
<p>
|
||||
<a
|
||||
|
@ -165,10 +184,15 @@
|
|||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 id="user-content-layout">
|
||||
<a class="heading-link" href="#layout"
|
||||
>Layout<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-layout"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#layout"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Layout
|
||||
</h4>
|
||||
<p>My layout is based on:</p>
|
||||
<ul>
|
||||
|
@ -199,10 +223,15 @@
|
|||
</li>
|
||||
<li>1 <code>Space</code> 7U.</li>
|
||||
</ul>
|
||||
<h4 id="user-content-review">
|
||||
<a class="heading-link" href="#review"
|
||||
>Review<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-review"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#review"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Review
|
||||
</h4>
|
||||
<p>
|
||||
Things I don't like, also
|
||||
|
@ -229,13 +258,15 @@
|
|||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 id="user-content-support-links">
|
||||
<a class="heading-link" href="#support-links"
|
||||
>Support links<span
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-support-links"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#support-links"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Support links
|
||||
</h4>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -294,10 +325,15 @@
|
|||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="user-content-sofle-v2">
|
||||
<a class="heading-link" href="#sofle-v2"
|
||||
>Sofle V2<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-sofle-v2"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#sofle-v2"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Sofle V2
|
||||
</h3>
|
||||
<p>
|
||||
I bought it from
|
||||
|
@ -308,20 +344,30 @@
|
|||
>
|
||||
with the cheapest option.
|
||||
</p>
|
||||
<h4 id="user-content-review-1">
|
||||
<a class="heading-link" href="#review-1"
|
||||
>Review<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-review-1"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#review-1"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Review
|
||||
</h4>
|
||||
<p>Things I don't like:</p>
|
||||
<ul>
|
||||
<li>Sandwhich style is meh when typing.</li>
|
||||
<li>The left case is so tight to put switch in.</li>
|
||||
</ul>
|
||||
<h3 id="user-content-guide">
|
||||
<a class="heading-link" href="#guide"
|
||||
>Guide<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-guide"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#guide"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Guide
|
||||
</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -337,18 +383,25 @@
|
|||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="user-content-switch">
|
||||
<a class="heading-link" href="#switch"
|
||||
>Switch<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
</h2>
|
||||
<h3 id="user-content-ktt-strawberry">
|
||||
<a class="heading-link" href="#ktt-strawberry"
|
||||
>KTT Strawberry<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-switch"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#switch"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Switch
|
||||
</h2>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-ktt-strawberry"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#ktt-strawberry"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>KTT Strawberry
|
||||
</h3>
|
||||
<p>
|
||||
Buy it from ShopeeVN. I choose this switch because I prefer linear (please
|
||||
|
@ -365,10 +418,15 @@
|
|||
style="max-width: 100%"
|
||||
/></a>
|
||||
</p>
|
||||
<h4 id="user-content-specs-1">
|
||||
<a class="heading-link" href="#specs-1"
|
||||
>Specs<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-specs-1"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#specs-1"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Specs
|
||||
</h4>
|
||||
<ul>
|
||||
<li>Type: Linear</li>
|
||||
|
@ -380,13 +438,15 @@
|
|||
<li>Spring: Gold plated spring</li>
|
||||
<li>Total travel: 4.0mm</li>
|
||||
</ul>
|
||||
<h4 id="user-content-support-links-1">
|
||||
<a class="heading-link" href="#support-links-1"
|
||||
>Support links<span
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-support-links-1"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#support-links-1"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Support links
|
||||
</h4>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -411,13 +471,15 @@
|
|||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="user-content-skyloong-glacier-silent-red-switch">
|
||||
<a class="heading-link" href="#skyloong-glacier-silent-red-switch"
|
||||
>SKYLOONG Glacier Silent Red Switch<span
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-skyloong-glacier-silent-red-switch"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#skyloong-glacier-silent-red-switch"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>SKYLOONG Glacier Silent Red Switch
|
||||
</h3>
|
||||
<p>
|
||||
I was given this switch by my friend. Currently using for alpha keys. Love
|
||||
|
@ -434,10 +496,15 @@
|
|||
style="max-width: 100%"
|
||||
/></a>
|
||||
</p>
|
||||
<h4 id="user-content-specs-2">
|
||||
<a class="heading-link" href="#specs-2"
|
||||
>Specs<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-specs-2"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#specs-2"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Specs
|
||||
</h4>
|
||||
<ul>
|
||||
<li>Type: Linear</li>
|
||||
|
@ -450,13 +517,15 @@
|
|||
<li>Pre travel: 1.5-2.0mm</li>
|
||||
<li>Total travel: 3.8mm</li>
|
||||
</ul>
|
||||
<h4 id="user-content-support-links-2">
|
||||
<a class="heading-link" href="#support-links-2"
|
||||
>Support links<span
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-support-links-2"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#support-links-2"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Support links
|
||||
</h4>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -467,13 +536,15 @@
|
|||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="user-content-jwick-yellow-linear-switch">
|
||||
<a class="heading-link" href="#jwick-yellow-linear-switch"
|
||||
>JWICK Yellow Linear Switch<span
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-jwick-yellow-linear-switch"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#jwick-yellow-linear-switch"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>JWICK Yellow Linear Switch
|
||||
</h3>
|
||||
<p>
|
||||
<a
|
||||
|
@ -487,10 +558,15 @@
|
|||
/></a>
|
||||
</p>
|
||||
<p>I was given this switch by my friend, full mod (lube + film).</p>
|
||||
<h4 id="user-content-specs-3">
|
||||
<a class="heading-link" href="#specs-3"
|
||||
>Specs<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-specs-3"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#specs-3"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Specs
|
||||
</h4>
|
||||
<ul>
|
||||
<li>Type: Linear</li>
|
||||
|
@ -502,13 +578,15 @@
|
|||
<li>Spring: ???</li>
|
||||
<li>Total travel: 4 mm</li>
|
||||
</ul>
|
||||
<h4 id="user-content-support-links-3">
|
||||
<a class="heading-link" href="#support-links-3"
|
||||
>Support links<span
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-support-links-3"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#support-links-3"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Support links
|
||||
</h4>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -517,13 +595,15 @@
|
|||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="user-content-c3-equalz-tangerine-v2">
|
||||
<a class="heading-link" href="#c3-equalz-tangerine-v2"
|
||||
>C3 Equalz Tangerine V2<span
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-c3-equalz-tangerine-v2"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#c3-equalz-tangerine-v2"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>C3 Equalz Tangerine V2
|
||||
</h3>
|
||||
<p>
|
||||
<a
|
||||
|
@ -548,10 +628,15 @@
|
|||
<p>
|
||||
Buy it from ShopeeVN, friends told it's smooth. I buy the heavier aka 67g.
|
||||
</p>
|
||||
<h4 id="user-content-specs-4">
|
||||
<a class="heading-link" href="#specs-4"
|
||||
>Specs<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-specs-4"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#specs-4"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Specs
|
||||
</h4>
|
||||
<ul>
|
||||
<li>Type: Linear</li>
|
||||
|
@ -562,13 +647,15 @@
|
|||
<li>Spring: ???</li>
|
||||
<li>Total travel: ???</li>
|
||||
</ul>
|
||||
<h4 id="user-content-support-links-4">
|
||||
<a class="heading-link" href="#support-links-4"
|
||||
>Support links<span
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-support-links-4"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#support-links-4"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Support links
|
||||
</h4>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -591,10 +678,15 @@
|
|||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="user-content-keycap">
|
||||
<a class="heading-link" href="#keycap"
|
||||
>Keycap<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-keycap"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#keycap"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Keycap
|
||||
</h2>
|
||||
<p>
|
||||
Currently, I use Akko 9009 Cherry Profile and EnjoyPBT 9009 Cherry
|
||||
|
@ -609,13 +701,15 @@
|
|||
</li>
|
||||
<li>Check is keycap is tight on switch or not.</li>
|
||||
</ul>
|
||||
<h3 id="user-content-enjobpbt-9009">
|
||||
<a class="heading-link" href="#enjobpbt-9009"
|
||||
>EnjobPBT 9009<span
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-enjobpbt-9009"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#enjobpbt-9009"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>EnjobPBT 9009
|
||||
</h3>
|
||||
<p>I buy vim kit first then base later.</p>
|
||||
<p>
|
||||
|
@ -640,13 +734,15 @@
|
|||
style="max-width: 100%"
|
||||
/></a>
|
||||
</p>
|
||||
<h4 id="user-content-support-links-5">
|
||||
<a class="heading-link" href="#support-links-5"
|
||||
>Support links<span
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-support-links-5"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#support-links-5"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Support links
|
||||
</h4>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -664,10 +760,15 @@
|
|||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="user-content-pbtfans-bow">
|
||||
<a class="heading-link" href="#pbtfans-bow"
|
||||
>PBTfans BOW<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-pbtfans-bow"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#pbtfans-bow"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>PBTfans BOW
|
||||
</h3>
|
||||
<p>I only buy 40s kit.</p>
|
||||
<p>
|
||||
|
@ -681,13 +782,15 @@
|
|||
style="max-width: 100%"
|
||||
/></a>
|
||||
</p>
|
||||
<h4 id="user-content-support-links-6">
|
||||
<a class="heading-link" href="#support-links-6"
|
||||
>Support links<span
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-support-links-6"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#support-links-6"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Support links
|
||||
</h4>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -698,13 +801,15 @@
|
|||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="user-content-color-i-love">
|
||||
<a class="heading-link" href="#color-i-love"
|
||||
>Color I love<span
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-color-i-love"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#color-i-love"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Color I love
|
||||
</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -791,10 +896,15 @@
|
|||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="user-content-tools">
|
||||
<a class="heading-link" href="#tools"
|
||||
>Tools<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-tools"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#tools"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Tools
|
||||
</h2>
|
||||
<ul>
|
||||
<li><a href="https://github.com/bloznelis/kbt">bloznelis/kbt</a></li>
|
||||
|
@ -810,10 +920,15 @@
|
|||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="user-content-thanks">
|
||||
<a class="heading-link" href="#thanks"
|
||||
>Thanks<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-thanks"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#thanks"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Thanks
|
||||
</h2>
|
||||
<ul>
|
||||
<li>
|
||||
|
|
|
@ -28,21 +28,25 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-naming-things">
|
||||
<a class="heading-link" href="#naming-things"
|
||||
>Naming things<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-naming-things"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#naming-things"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Naming things
|
||||
</h1>
|
||||
<h2 id="user-content-filename-in-storage-s3-">
|
||||
<a class="heading-link" href="#filename-in-storage-s3-"
|
||||
>Filename in storage (S3, ...)<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-filename-in-storage-s3-"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#filename-in-storage-s3-"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Filename in storage (S3, ...)
|
||||
</h2>
|
||||
<p>Always have year, month, day in filename to easily sort it out.</p>
|
||||
<p>
|
||||
|
@ -63,13 +67,15 @@
|
|||
backup (as they say, idk if true or not, but less folder mean less
|
||||
complicated to me).
|
||||
</p>
|
||||
<h2 id="user-content-time-variable">
|
||||
<a class="heading-link" href="#time-variable"
|
||||
>Time variable<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-time-variable"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#time-variable"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Time variable
|
||||
</h2>
|
||||
<p>Add time postfix to make sense.</p>
|
||||
<p>Instead of <code>create_at</code>, use <code>create_at_ms</code>.</p>
|
||||
|
|
|
@ -28,13 +28,15 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-my-neovim-workflow">
|
||||
<a class="heading-link" href="#my-neovim-workflow"
|
||||
>My neovim workflow<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-my-neovim-workflow"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#my-neovim-workflow"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>My neovim workflow
|
||||
</h1>
|
||||
<p>
|
||||
<a
|
||||
|
@ -51,13 +53,15 @@
|
|||
All configs are in
|
||||
<a href="https://github.com/haunt98/dotfiles">my dotfiles</a>.
|
||||
</p>
|
||||
<h2 id="user-content-trick-or-treat">
|
||||
<a class="heading-link" href="#trick-or-treat"
|
||||
>Trick or treat<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-trick-or-treat"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#trick-or-treat"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Trick or treat
|
||||
</h2>
|
||||
<p>Search current word: <code>*</code></p>
|
||||
<p>Search multiple words:</p>
|
||||
|
@ -94,10 +98,15 @@
|
|||
<div class="highlight highlight-source-viml">
|
||||
<pre>:<span class="pl-k">!</span>column <span class="pl-k">-</span><span class="pl-c1">t</span></pre>
|
||||
</div>
|
||||
<h2 id="user-content-jumpo">
|
||||
<a class="heading-link" href="#jumpo"
|
||||
>Jumpo<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-jumpo"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#jumpo"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Jumpo
|
||||
</h2>
|
||||
<p>Basic:</p>
|
||||
<ul>
|
||||
|
@ -137,19 +146,29 @@
|
|||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="user-content-fold">
|
||||
<a class="heading-link" href="#fold"
|
||||
>Fold<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-fold"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#fold"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Fold
|
||||
</h2>
|
||||
<ul>
|
||||
<li><code>zR</code>: open all folds.</li>
|
||||
<li><code>za</code>, <code>zA</code>: toggle fold</li>
|
||||
</ul>
|
||||
<h2 id="user-content-keymap">
|
||||
<a class="heading-link" href="#keymap"
|
||||
>Keymap<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-keymap"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#keymap"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Keymap
|
||||
</h2>
|
||||
<p>Use both <code>\</code> and <code>;</code> as leader key:</p>
|
||||
<div class="highlight highlight-source-lua">
|
||||
|
@ -305,13 +324,15 @@ vim.<span class="pl-smi">keymap</span>.<span class="pl-c1">set</span>(<span clas
|
|||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="user-content-references--thanks">
|
||||
<a class="heading-link" href="#references--thanks"
|
||||
>References / Thanks<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-references--thanks"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#references--thanks"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>References / Thanks
|
||||
</h2>
|
||||
<ul>
|
||||
<li>
|
||||
|
|
|
@ -28,21 +28,25 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-things-i-like">
|
||||
<a class="heading-link" href="#things-i-like"
|
||||
>Things I like<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-things-i-like"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#things-i-like"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Things I like
|
||||
</h1>
|
||||
<h2 id="user-content-discord-old-naming">
|
||||
<a class="heading-link" href="#discord-old-naming"
|
||||
>Discord (old) naming<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-discord-old-naming"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#discord-old-naming"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Discord (old) naming
|
||||
</h2>
|
||||
<p>
|
||||
The way Discord naming user like<code>Joker#1234</code> is so interesting.
|
||||
|
@ -54,13 +58,15 @@
|
|||
Why it's interesting? Each time I join a new platform, all names I want
|
||||
are taken :D
|
||||
</p>
|
||||
<h2 id="user-content-interesting-website">
|
||||
<a class="heading-link" href="#interesting-website"
|
||||
>Interesting website<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-interesting-website"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#interesting-website"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Interesting website
|
||||
</h2>
|
||||
<ul>
|
||||
<li><a href="https://deskto.ps/" rel="nofollow">deskto.ps</a></li>
|
||||
|
|
|
@ -28,13 +28,15 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-swagger-or-openapi">
|
||||
<a class="heading-link" href="#swagger-or-openapi"
|
||||
>Swagger or OpenAPI<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-swagger-or-openapi"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#swagger-or-openapi"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Swagger or OpenAPI
|
||||
</h1>
|
||||
<p>My company currently use Swagger 2 to document API.</p>
|
||||
<p>
|
||||
|
@ -63,10 +65,15 @@ bunx prettier --write ./docs/swagger.yaml ./docs/swagger.json
|
|||
<span class="pl-c"><span class="pl-c">#</span> Render locally</span>
|
||||
bunx @redocly/cli preview-docs ./docs/swagger.json</pre>
|
||||
</div>
|
||||
<h2 id="user-content-thanks">
|
||||
<a class="heading-link" href="#thanks"
|
||||
>Thanks<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-thanks"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#thanks"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Thanks
|
||||
</h2>
|
||||
<ul>
|
||||
<li><a href="https://github.com/mikefarah/yq">mikefarah/yq</a></li>
|
||||
|
|
|
@ -28,37 +28,45 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-my-terminal-workflow">
|
||||
<a class="heading-link" href="#my-terminal-workflow"
|
||||
>My terminal workflow<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-my-terminal-workflow"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#my-terminal-workflow"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>My terminal workflow
|
||||
</h1>
|
||||
<p>
|
||||
All configs are in
|
||||
<a href="https://github.com/haunt98/dotfiles">my dotfiles</a>.
|
||||
</p>
|
||||
<h2 id="user-content-use-junegunnfzf">
|
||||
<a class="heading-link" href="#use-junegunnfzf">Use </a
|
||||
><a href="https://github.com/junegunn/fzf">junegunn/fzf</a>
|
||||
<span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-use-junegunnfzf"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#use-junegunnfzf"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Use <a href="https://github.com/junegunn/fzf">junegunn/fzf</a>
|
||||
</h2>
|
||||
<ul>
|
||||
<li><code>CTRL-T</code> to fuzzy find files.</li>
|
||||
<li><code>ALT-C</code> to fuzzy find directories.</li>
|
||||
</ul>
|
||||
<h2 id="user-content-use-zellij-orgzellij-as-alternative-to-tmux">
|
||||
<h2>
|
||||
<a
|
||||
class="heading-link"
|
||||
href="#use-zellij-orgzellij-as-alternative-to-tmux"
|
||||
>Use </a
|
||||
><a href="https://github.com/zellij-org/zellij">zellij-org/zellij</a> as
|
||||
alternative to tmux<span
|
||||
id="user-content-use-zellij-orgzellij-as-alternative-to-tmux"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span>
|
||||
tabindex="-1"
|
||||
href="#use-zellij-orgzellij-as-alternative-to-tmux"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Use
|
||||
<a href="https://github.com/zellij-org/zellij">zellij-org/zellij</a> as
|
||||
alternative to tmux
|
||||
</h2>
|
||||
<p>
|
||||
<a
|
||||
|
@ -80,10 +88,15 @@
|
|||
<li><code>ALT-]</code>/<code>ALT-[</code>: next/previous tab</li>
|
||||
<li>Hold <code>SHIFT</code> and click on links, text, ...</li>
|
||||
</ul>
|
||||
<h2 id="user-content-use-wezwezterm">
|
||||
<a class="heading-link" href="#use-wezwezterm">Use </a
|
||||
><a href="https://github.com/wez/wezterm">wez/wezterm</a>
|
||||
<span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-use-wezwezterm"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#use-wezwezterm"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Use <a href="https://github.com/wez/wezterm">wez/wezterm</a>
|
||||
</h2>
|
||||
<ul>
|
||||
<li><code>CTRL-SHIFT-F</code>/<code>CMD-F</code>: search mode</li>
|
||||
|
@ -91,10 +104,15 @@
|
|||
<li><code>CTRL-SHIFT-X</code>: copy mode</li>
|
||||
<li><code>CMD-SHIFT-[</code>/<code>CMD-SHIFT-]</code>: switch tabs</li>
|
||||
</ul>
|
||||
<h2 id="user-content-use-nnn">
|
||||
<a class="heading-link" href="#use-nnn">Use </a
|
||||
><a href="https://github.com/jarun/nnn">nnn</a>
|
||||
<span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-use-nnn"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#use-nnn"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Use <a href="https://github.com/jarun/nnn">nnn</a>
|
||||
</h2>
|
||||
<ul>
|
||||
<li><code>;-p</code>: preview mode</li>
|
||||
|
|
|
@ -28,20 +28,27 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-another-day-another-incident-02">
|
||||
<a class="heading-link" href="#another-day-another-incident-02"
|
||||
>Another day another incident #02<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-another-day-another-incident-02"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#another-day-another-incident-02"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Another day another incident #02
|
||||
</h1>
|
||||
<p>Today's incident is all about Go context.</p>
|
||||
<p>TLDR: context got canceled, but it shouldn't.</p>
|
||||
<h2 id="user-content-the-problem">
|
||||
<a class="heading-link" href="#the-problem"
|
||||
>The problem<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-the-problem"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#the-problem"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>The problem
|
||||
</h2>
|
||||
<p>Imagine a chain of APIs:</p>
|
||||
<ul>
|
||||
|
@ -116,13 +123,15 @@ doB context deadline exceeded</pre
|
|||
>
|
||||
</div>
|
||||
<p>As you see both <code>doA</code> and <code>doB</code> are canceled.</p>
|
||||
<h2 id="user-content-the-temporary-solution">
|
||||
<a class="heading-link" href="#the-temporary-solution"
|
||||
>The (temporary) solution<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-the-temporary-solution"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#the-temporary-solution"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>The (temporary) solution
|
||||
</h2>
|
||||
<p>
|
||||
Quick Google search leads me to
|
||||
|
@ -237,10 +246,15 @@ doB</pre
|
|||
As you see only <code>doA</code> is canceled, <code>doB</code> is done
|
||||
perfectly. And that what we want in this case.
|
||||
</p>
|
||||
<h2 id="user-content-thanks">
|
||||
<a class="heading-link" href="#thanks"
|
||||
>Thanks<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-thanks"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#thanks"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Thanks
|
||||
</h2>
|
||||
<ul>
|
||||
<li>
|
||||
|
|
|
@ -28,13 +28,15 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-khoan-cắt-bê-tông-101">
|
||||
<a class="heading-link" href="#khoan-cắt-bê-tông-101"
|
||||
>Khoan cắt bê tông 101<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-khoan-cắt-bê-tông-101"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#khoan-cắt-bê-tông-101"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Khoan cắt bê tông 101
|
||||
</h1>
|
||||
<p>The title is a joke.</p>
|
||||
<p>
|
||||
|
|
|
@ -28,24 +28,36 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-userful-tools">
|
||||
<a class="heading-link" href="#userful-tools"
|
||||
>Userful tools<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-userful-tools"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#userful-tools"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Userful tools
|
||||
</h1>
|
||||
<p>This just a raw list.</p>
|
||||
<h2 id="user-content-tools">
|
||||
<a class="heading-link" href="#tools"
|
||||
>Tools<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-tools"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#tools"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Tools
|
||||
</h2>
|
||||
<h3 id="user-content-terminal">
|
||||
<a class="heading-link" href="#terminal"
|
||||
>Terminal<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-terminal"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#terminal"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Terminal
|
||||
</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -372,10 +384,15 @@
|
|||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 id="user-content-windows">
|
||||
<a class="heading-link" href="#windows"
|
||||
>Windows<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-windows"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#windows"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Windows
|
||||
</h4>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -394,10 +411,15 @@
|
|||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="user-content-ui">
|
||||
<a class="heading-link" href="#ui"
|
||||
>UI<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-ui"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#ui"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>UI
|
||||
</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -447,10 +469,15 @@
|
|||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 id="user-content-macos">
|
||||
<a class="heading-link" href="#macos"
|
||||
>macOS<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-macos"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#macos"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>macOS
|
||||
</h4>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -541,18 +568,25 @@
|
|||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="user-content-developement">
|
||||
<a class="heading-link" href="#developement"
|
||||
>Developement<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-developement"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#developement"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Developement
|
||||
</h2>
|
||||
<h3 id="user-content-terminal-1">
|
||||
<a class="heading-link" href="#terminal-1"
|
||||
>Terminal<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-terminal-1"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#terminal-1"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Terminal
|
||||
</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -693,10 +727,15 @@
|
|||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 id="user-content-go">
|
||||
<a class="heading-link" href="#go"
|
||||
>Go<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h4>
|
||||
<a
|
||||
id="user-content-go"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#go"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Go
|
||||
</h4>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -740,10 +779,15 @@
|
|||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="user-content-ui-1">
|
||||
<a class="heading-link" href="#ui-1"
|
||||
>UI<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-ui-1"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#ui-1"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>UI
|
||||
</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -797,10 +841,15 @@
|
|||
>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="user-content-macos-1">
|
||||
<a class="heading-link" href="#macos-1"
|
||||
>macOS<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-macos-1"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#macos-1"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>macOS
|
||||
</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -815,10 +864,15 @@
|
|||
<a href="https://gpgtools.org/" rel="nofollow">https://gpgtools.org/</a>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="user-content-notes">
|
||||
<a class="heading-link" href="#notes"
|
||||
>Notes<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-notes"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#notes"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Notes
|
||||
</h2>
|
||||
<p>
|
||||
Prefer <code>nix</code>/<code>go</code>/<code>rust</code>/<code
|
||||
|
@ -842,16 +896,26 @@
|
|||
<li>Docker Desktop</li>
|
||||
<li>Any JetBrains IDE beside DataGrip</li>
|
||||
</ul>
|
||||
<h2 id="user-content-misc">
|
||||
<a class="heading-link" href="#misc"
|
||||
>Misc<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-misc"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#misc"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Misc
|
||||
</h2>
|
||||
<p>Don't enable plugin <code>git</code> in ohmyzsh.</p>
|
||||
<h3 id="user-content-macos-2">
|
||||
<a class="heading-link" href="#macos-2"
|
||||
>macOS<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-macos-2"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#macos-2"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>macOS
|
||||
</h3>
|
||||
<p>Hide Developer in Spotlight:</p>
|
||||
<div class="highlight highlight-source-shell">
|
||||
|
@ -872,10 +936,15 @@ xcode-select --install</pre>
|
|||
<div class="highlight highlight-source-shell">
|
||||
<pre>pbcopy <span class="pl-k"><</span> /dev/null</pre>
|
||||
</div>
|
||||
<h3 id="user-content-firefox">
|
||||
<a class="heading-link" href="#firefox"
|
||||
>Firefox<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h3>
|
||||
<a
|
||||
id="user-content-firefox"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#firefox"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Firefox
|
||||
</h3>
|
||||
<p><code>about:config</code>:</p>
|
||||
<ul>
|
||||
|
@ -913,10 +982,15 @@ xcode-select --install</pre>
|
|||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="user-content-thanks">
|
||||
<a class="heading-link" href="#thanks"
|
||||
>Thanks<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-thanks"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#thanks"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Thanks
|
||||
</h2>
|
||||
<ul>
|
||||
<li>
|
||||
|
|
|
@ -28,20 +28,26 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-throw-away-pastebin">
|
||||
<a class="heading-link" href="#throw-away-pastebin"
|
||||
>Throw away pastebin<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-throw-away-pastebin"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#throw-away-pastebin"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Throw away pastebin
|
||||
</h1>
|
||||
<p>Just a place to throw away some text.</p>
|
||||
<h2 id="user-content-gitignore">
|
||||
<a class="heading-link" href="#gitignore"
|
||||
><code>.gitignore</code
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-gitignore"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#gitignore"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><code>.gitignore</code>
|
||||
</h2>
|
||||
<div class="highlight highlight-text-adblock">
|
||||
<pre><span class="pl-c"># macOS</span>
|
||||
|
@ -63,13 +69,15 @@ vendor
|
|||
<span class="pl-c"># GoReleaser</span>
|
||||
dist</pre>
|
||||
</div>
|
||||
<h2 id="user-content-github-actions">
|
||||
<a class="heading-link" href="#github-actions"
|
||||
>GitHub Actions<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-github-actions"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#github-actions"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>GitHub Actions
|
||||
</h2>
|
||||
<p><code>dependabot.yml</code>:</p>
|
||||
<div class="highlight highlight-source-yaml">
|
||||
|
@ -144,10 +152,15 @@ dist</pre>
|
|||
<span class="pl-ent">with</span>:
|
||||
<span class="pl-ent">version</span>: <span class="pl-s">latest</span></pre>
|
||||
</div>
|
||||
<h2 id="user-content-go">
|
||||
<a class="heading-link" href="#go"
|
||||
>Go<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-go"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#go"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Go
|
||||
</h2>
|
||||
<p><code>.golangci.yml</code>:</p>
|
||||
<div class="highlight highlight-source-yaml">
|
||||
|
@ -269,13 +282,15 @@ dist</pre>
|
|||
<span class="pl-ent">skip</span>: <span class="pl-c1">false</span>
|
||||
<span class="pl-ent">use</span>: <span class="pl-s">github</span></pre>
|
||||
</div>
|
||||
<h1 id="user-content-git-clean-up">
|
||||
<a class="heading-link" href="#git-clean-up"
|
||||
>Git clean up<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-git-clean-up"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#git-clean-up"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Git clean up
|
||||
</h1>
|
||||
<div class="highlight highlight-source-shell">
|
||||
<pre><span class="pl-c"><span class="pl-c">#</span> Delete untracked</span>
|
||||
|
@ -283,11 +298,15 @@ git clean -fdx
|
|||
|
||||
git gc</pre>
|
||||
</div>
|
||||
<h2 id="user-content-delete-ds_store">
|
||||
<a class="heading-link" href="#delete-ds_store"
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-delete-ds_store"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#delete-ds_store"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Delete <code>.DS_Store</code>
|
||||
<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
</h2>
|
||||
<p>
|
||||
With
|
||||
|
@ -300,19 +319,29 @@ git gc</pre>
|
|||
<div class="highlight highlight-source-shell">
|
||||
<pre>fd -H <span class="pl-s"><span class="pl-pds">'</span>^\.DS_Store$<span class="pl-pds">'</span></span> -tf -X rm</pre>
|
||||
</div>
|
||||
<h2 id="user-content-fdupes">
|
||||
<a class="heading-link" href="#fdupes"></a
|
||||
><a href="https://github.com/adrianlopezroche/fdupes">fdupes</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-fdupes"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#fdupes"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://github.com/adrianlopezroche/fdupes">fdupes</a>
|
||||
</h2>
|
||||
<p>Remove duplicated files:</p>
|
||||
<div class="highlight highlight-source-shell">
|
||||
<pre>fdupes -rdN <span class="pl-c1">.</span></pre>
|
||||
</div>
|
||||
<h2 id="user-content-rsync">
|
||||
<a class="heading-link" href="#rsync"></a
|
||||
><a href="https://github.com/WayneD/rsync">rsync</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-rsync"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#rsync"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://github.com/WayneD/rsync">rsync</a>
|
||||
</h2>
|
||||
<div class="highlight highlight-source-shell">
|
||||
<pre><span class="pl-c"><span class="pl-c">#</span> Result is dst/src</span>
|
||||
|
@ -342,20 +371,30 @@ rsync -avzP src/ dst</pre>
|
|||
in <strong>src</strong>, useful to sync dst with src
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="user-content-f2">
|
||||
<a class="heading-link" href="#f2"></a
|
||||
><a href="https://github.com/ayoisaiah/f2">F2</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-f2"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#f2"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://github.com/ayoisaiah/f2">F2</a>
|
||||
</h2>
|
||||
<p>Rename:</p>
|
||||
<div class="highlight highlight-source-shell">
|
||||
<pre><span class="pl-c"><span class="pl-c">#</span> If want dry run, remove -x</span>
|
||||
f2 -r <span class="pl-s"><span class="pl-pds">"</span>{mtime.YYYY}{mtime.MM}{mtime.DD}.{mtime.H}{mtime.mm}{mtime.ss}{ext}<span class="pl-pds">"</span></span> -x</pre>
|
||||
</div>
|
||||
<h2 id="user-content-instaloader">
|
||||
<a class="heading-link" href="#instaloader"></a
|
||||
><a href="https://github.com/instaloader/instaloader">Instaloader</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-instaloader"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#instaloader"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://github.com/instaloader/instaloader">Instaloader</a>
|
||||
</h2>
|
||||
<p><code>args.txt</code>:</p>
|
||||
<div class="highlight highlight-text-adblock">
|
||||
|
@ -381,10 +420,15 @@ f2 -r <span class="pl-s"><span class="pl-pds">"</span>{mtime.YYYY}{mtime.MM}{mti
|
|||
<div class="highlight highlight-text-adblock">
|
||||
<pre>instaloader +login.txt +args.txt +targets.txt</pre>
|
||||
</div>
|
||||
<h2 id="user-content-grpcurl">
|
||||
<a class="heading-link" href="#grpcurl"></a
|
||||
><a href="https://github.com/fullstorydev/grpcurl">gRPCurl</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-grpcurl"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#grpcurl"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://github.com/fullstorydev/grpcurl">gRPCurl</a>
|
||||
</h2>
|
||||
<div class="highlight highlight-source-shell">
|
||||
<pre>grpcurl -proto path/file.proto \
|
||||
|
|
|
@ -28,21 +28,28 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-fan-android">
|
||||
<a class="heading-link" href="#fan-android"
|
||||
>F(an) android<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-fan-android"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#fan-android"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>F(an) android
|
||||
</h1>
|
||||
<p>You know what I mean :D</p>
|
||||
<p>Just a collection/checklist while using Android phone.</p>
|
||||
<p>All Android phones are bloat.</p>
|
||||
<h2 id="user-content-apps">
|
||||
<a class="heading-link" href="#apps"
|
||||
>Apps<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-apps"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#apps"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Apps
|
||||
</h2>
|
||||
<p>
|
||||
Use <a href="https://f-droid.org/en/" rel="nofollow">F-Droid</a> with
|
||||
|
|
|
@ -28,19 +28,26 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-redis">
|
||||
<a class="heading-link" href="#redis"
|
||||
>Redis<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-redis"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#redis"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Redis
|
||||
</h1>
|
||||
<p>Just to save my noted for future me using Redis again.</p>
|
||||
<h2 id="user-content-redis-does-not-store-creation-time-of-keys">
|
||||
<a class="heading-link" href="#redis-does-not-store-creation-time-of-keys"
|
||||
>Redis does not store creation time of keys<span
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-redis-does-not-store-creation-time-of-keys"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#redis-does-not-store-creation-time-of-keys"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Redis does not store creation time of keys
|
||||
</h2>
|
||||
<p>Why? Because TODO</p>
|
||||
<p>
|
||||
|
|
|
@ -28,13 +28,15 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-cache-shenanigan">
|
||||
<a class="heading-link" href="#cache-shenanigan"
|
||||
>Cache shenanigan<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-cache-shenanigan"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#cache-shenanigan"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Cache shenanigan
|
||||
</h1>
|
||||
<p>
|
||||
My notes/mistakes/... when using cache (mainly Redis) from time to time
|
||||
|
@ -82,10 +84,15 @@
|
|||
database has new value, but cache has old value Then when we read again,
|
||||
we read cache first with old value, and that is disaster.
|
||||
</p>
|
||||
<h2 id="user-content-thanks">
|
||||
<a class="heading-link" href="#thanks"
|
||||
>Thanks<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-thanks"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#thanks"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Thanks
|
||||
</h2>
|
||||
<ul>
|
||||
<li>
|
||||
|
|
|
@ -28,10 +28,15 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-vscode">
|
||||
<a class="heading-link" href="#vscode"
|
||||
>VSCode<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-vscode"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#vscode"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>VSCode
|
||||
</h1>
|
||||
<p>Favortite settings everytime I install VSCode.</p>
|
||||
<p>
|
||||
|
|
|
@ -28,13 +28,15 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-hardware-101">
|
||||
<a class="heading-link" href="#hardware-101"
|
||||
>Hardware 101<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-hardware-101"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#hardware-101"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Hardware 101
|
||||
</h1>
|
||||
<p>
|
||||
Just kidding. It's only my collect data about which hardware to use/buy.
|
||||
|
|
|
@ -28,13 +28,15 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-real-world-crypto-101">
|
||||
<a class="heading-link" href="#real-world-crypto-101"
|
||||
>Real World Crypto 101<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-real-world-crypto-101"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#real-world-crypto-101"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Real World Crypto 101
|
||||
</h1>
|
||||
<p>
|
||||
My notes when reading
|
||||
|
@ -44,16 +46,16 @@
|
|||
>Real-World Cryptography</a
|
||||
>
|
||||
</p>
|
||||
<h2 id="user-content-hash-function-convert-from-input-to-digest">
|
||||
<h2>
|
||||
<a
|
||||
class="heading-link"
|
||||
href="#hash-function-convert-from-input-to-digest"
|
||||
>
|
||||
<strong>Hash</strong> function convert from input to digest<span
|
||||
id="user-content-hash-function-convert-from-input-to-digest"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
tabindex="-1"
|
||||
href="#hash-function-convert-from-input-to-digest"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<strong>Hash</strong> function convert from input to digest
|
||||
</h2>
|
||||
<ul>
|
||||
<li>Pre-image resistance: Given digest, can not find input</li>
|
||||
|
@ -63,19 +65,17 @@
|
|||
</li>
|
||||
<li>Collision resistance: Can not find 2 input produce same digest.</li>
|
||||
</ul>
|
||||
<h2
|
||||
id="user-content-mac-aka-message-authentication-code-produce-from-key-message-to-authentication-tag"
|
||||
>
|
||||
<h2>
|
||||
<a
|
||||
class="heading-link"
|
||||
href="#mac-aka-message-authentication-code-produce-from-key-message-to-authentication-tag"
|
||||
>
|
||||
<strong>MAC</strong> aka Message Authentication Code produce from key,
|
||||
message to authentication tag.<span
|
||||
id="user-content-mac-aka-message-authentication-code-produce-from-key-message-to-authentication-tag"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
tabindex="-1"
|
||||
href="#mac-aka-message-authentication-code-produce-from-key-message-to-authentication-tag"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<strong>MAC</strong> aka Message Authentication Code produce from key,
|
||||
message to authentication tag.
|
||||
</h2>
|
||||
<ul>
|
||||
<li>A send B message with MAC (generate from message and A key).</li>
|
||||
|
@ -141,10 +141,15 @@
|
|||
<span class="pl-ent">bob </span><span class="pl-k">-->></span> <span class="pl-ent">alice</span><span class="pl-k">:</span> <span class="pl-s">return ERROR</span></pre>
|
||||
</div>
|
||||
<p><strong>HMAC</strong> is MAC using hash</p>
|
||||
<h2 id="user-content-aes">
|
||||
<a class="heading-link" href="#aes"
|
||||
>AES<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-aes"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#aes"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>AES
|
||||
</h2>
|
||||
<p>
|
||||
Currently (2023) the world using AES-128 which take a key 128 bits == 16
|
||||
|
|
|
@ -28,13 +28,15 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-vietnam-survivor">
|
||||
<a class="heading-link" href="#vietnam-survivor"
|
||||
>Vietnam survivor<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-vietnam-survivor"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#vietnam-survivor"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Vietnam survivor
|
||||
</h1>
|
||||
<p>Written by Vietnamese for Vietnamese.</p>
|
||||
<p>Every Vietnamese person must/should has:</p>
|
||||
|
|
|
@ -28,10 +28,15 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-bloguru">
|
||||
<a class="heading-link" href="#bloguru"
|
||||
>Bloguru<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-bloguru"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#bloguru"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Bloguru
|
||||
</h1>
|
||||
<p>No intro, this is list of RSS reader I follow:</p>
|
||||
<p>Not personal blogs:</p>
|
||||
|
|
|
@ -28,25 +28,33 @@
|
|||
<h2>
|
||||
<a href="index.html"><code>~</code></a>
|
||||
</h2>
|
||||
<h1 id="user-content-unrelated-engineer">
|
||||
<a class="heading-link" href="#unrelated-engineer"
|
||||
>Unrelated engineer<span
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-unrelated-engineer"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
class="octicon octicon-link"
|
||||
></span
|
||||
></a>
|
||||
tabindex="-1"
|
||||
href="#unrelated-engineer"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Unrelated engineer
|
||||
</h1>
|
||||
<p>
|
||||
This is collect of thoughts after I travel around the Internet. Not
|
||||
engineering related though.
|
||||
</p>
|
||||
<h2 id="user-content-give-it-five-minutes">
|
||||
<a class="heading-link" href="#give-it-five-minutes"></a
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-give-it-five-minutes"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#give-it-five-minutes"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a
|
||||
href="https://signalvnoise.com/posts/3124-give-it-five-minutes"
|
||||
rel="nofollow"
|
||||
>Give it five minutes</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
>
|
||||
</h2>
|
||||
<blockquote>
|
||||
<p>
|
||||
|
@ -68,11 +76,17 @@
|
|||
there too: It may be worth it.
|
||||
</p>
|
||||
</blockquote>
|
||||
<h2 id="user-content-never-say-no-but-rarely-say-yes">
|
||||
<a class="heading-link" href="#never-say-no-but-rarely-say-yes"></a
|
||||
<h2>
|
||||
<a
|
||||
id="user-content-never-say-no-but-rarely-say-yes"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#never-say-no-but-rarely-say-yes"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
><a href="https://longform.asmartbear.com/say-yes/" rel="nofollow"
|
||||
>Never say “no,” but rarely say “yes.”</a
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span>
|
||||
>
|
||||
</h2>
|
||||
<blockquote>
|
||||
<p>
|
||||
|
|
|
@ -25,10 +25,15 @@
|
|||
}
|
||||
</style>
|
||||
<body class="markdown-body">
|
||||
<h1 id="user-content-index">
|
||||
<a class="heading-link" href="#index"
|
||||
>Index<span aria-hidden="true" class="octicon octicon-link"></span
|
||||
></a>
|
||||
<h1>
|
||||
<a
|
||||
id="user-content-index"
|
||||
class="anchor"
|
||||
aria-hidden="true"
|
||||
tabindex="-1"
|
||||
href="#index"
|
||||
><span aria-hidden="true" class="octicon octicon-link"></span></a
|
||||
>Index
|
||||
</h1>
|
||||
<p>This is where I dump my thoughts.</p>
|
||||
<ul>
|
||||
|
|
|
@ -123,3 +123,17 @@ Links to download games, ... for PS3:
|
|||
|
||||
- [NoPayStation](https://nopaystation.com/)
|
||||
- [PS3 Games Updates](http://demo.aldostools.org/updates.html)
|
||||
|
||||
## Windows games
|
||||
|
||||
- [Resident Evil: Village](https://fitgirl-repacks.site/resident-evil-village/)
|
||||
- [Resident Evil 4](https://fitgirl-repacks.site/resident-evil-4-hd-project/)
|
||||
- [Resident Evil 7: Biohazard](https://fitgirl-repacks.site/resident-evil-7-biohazard/)
|
||||
- [Resident Evil 3](https://fitgirl-repacks.site/resident-evil-3/)
|
||||
- [RESIDENT EVIL 2](https://fitgirl-repacks.site/resident-evil-2-deluxe-edition/)
|
||||
- [God of War](https://fitgirl-repacks.site/god-of-war/)
|
||||
- [Dark Souls Remastered](https://fitgirl-repacks.site/dark-souls-remastered/)
|
||||
- [Dark Souls 3](https://fitgirl-repacks.site/dark-souls-3/)
|
||||
- [Sekiro: Shadows Die Twice](https://fitgirl-repacks.site/sekiro-shadows-die-twice/)
|
||||
- [ELDEN RING](https://fitgirl-repacks.site/elden-ring/)
|
||||
- [Cyberpunk 2077](https://fitgirl-repacks.site/cyberpunk-2077/)
|
||||
|
|
Loading…
Reference in New Issue