<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Goffity Corleone</title>
    <description>The latest articles on DEV Community by Goffity Corleone (@goffity).</description>
    <link>https://dev.to/goffity</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F105287%2Fc26344f5-74bf-419e-afec-9c9afcb808c4.jpg</url>
      <title>DEV Community: Goffity Corleone</title>
      <link>https://dev.to/goffity</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/goffity"/>
    <language>en</language>
    <item>
      <title>Reduce docker image size of nextJS</title>
      <dc:creator>Goffity Corleone</dc:creator>
      <pubDate>Sun, 02 Oct 2022 18:23:53 +0000</pubDate>
      <link>https://dev.to/goffity/reduce-image-size-of-nextjs-54mg</link>
      <guid>https://dev.to/goffity/reduce-image-size-of-nextjs-54mg</guid>
      <description>&lt;p&gt;I had the opportunity to work on a legacy project developed in React with nextJS framework. I am responsible for building the docker container and deploying it to the cluster. When I looked at a Dockerfile and make it, the size of the image was huge.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F23ijpdkioudbmxu7kesy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F23ijpdkioudbmxu7kesy.png" alt="Docker images huge"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;The legacy Dockerfile are&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:16&lt;/span&gt;

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;yarn &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--frozen-lockfile&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["yarn","start"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I got the first problem. In the Dockerfile.&lt;/p&gt;

&lt;h2&gt;
  
  
  First Solution
&lt;/h2&gt;

&lt;p&gt;I try to use multi-stage build for reduce docker images size.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;node:16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;dependency&lt;/span&gt;

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package.json .&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; yarn.lock .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;yarn &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--frozen-lockfile&lt;/span&gt;

&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;node:16-alpine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=dependency /app/node_modules ./node_modules&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;env&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;yarn build

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; [ "yarn","start" ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But the size of the image is still not satisfactory.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34bmjsxxcx8t3nagkzih.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34bmjsxxcx8t3nagkzih.png" alt="Docker images smaller"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Second
&lt;/h2&gt;

&lt;p&gt;I try to research the way to build and deploy nextjs application with docker images and I found the solution on next.js &lt;a href="https://github.com/vercel/next.js/tree/canary/examples/with-docker" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use Output Standalone
Edit next.config.js
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ... rest of the configuration.&lt;/span&gt;
  &lt;span class="na"&gt;output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;standalone&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Edit Dockerfile follow example.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;node:16-alpine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;deps&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;apk add &lt;span class="nt"&gt;--no-cache&lt;/span&gt; libc6-compat
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; yarn.lock* package-lock.json* pnpm-lock.yaml* ./&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="se"&gt;\
&lt;/span&gt;  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; yarn.lock &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then &lt;/span&gt;yarn &lt;span class="nt"&gt;--frozen-lockfile&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;  &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; package-lock.json &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then &lt;/span&gt;npm ci&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;  &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; pnpm-lock.yaml &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then &lt;/span&gt;yarn global add pnpm &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; pnpm i&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;  &lt;span class="k"&gt;else &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Lockfile not found."&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;exit &lt;/span&gt;1&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;  &lt;span class="k"&gt;fi&lt;/span&gt;

&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;node:16-alpine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=deps /app/node_modules ./node_modules&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;yarn build

&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;node:16-alpine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;runner&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; NODE_ENV production&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;addgroup &lt;span class="nt"&gt;--system&lt;/span&gt; &lt;span class="nt"&gt;--gid&lt;/span&gt; 1001 nodejs
&lt;span class="k"&gt;RUN &lt;/span&gt;adduser &lt;span class="nt"&gt;--system&lt;/span&gt; &lt;span class="nt"&gt;--uid&lt;/span&gt; 1001 nextjs
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder /app/public ./public&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder --chown=nextjs:nodejs /app/.next/standalone ./&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static&lt;/span&gt;
&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="s"&gt; nextjs&lt;/span&gt;
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 3000&lt;/span&gt;
&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; PORT 3000&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["node", "server.js"]&lt;/span&gt;

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

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Ignore unnecessary files, I add Added .dockerignore to ignore that.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node_modules
build
.dockerignore
Dockerfile
Dockerfile.*
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Result
&lt;/h2&gt;

&lt;p&gt;The image size reduce from over 1GB to around 1xxMB&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ly1dto5b113pbzv05ax.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ly1dto5b113pbzv05ax.png" alt="Final"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Use cache
&lt;/h2&gt;

&lt;p&gt;In this project we use yarn as package dependency. and in the Dockerfile if we run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn --frozen-lockfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;take a very long time so I changed a Dockerfile to use cache on package dependency.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;node:16-alpine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;deps&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;apk add &lt;span class="nt"&gt;--no-cache&lt;/span&gt; libc6-compat
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; yarn.lock* package-lock.json* pnpm-lock.yaml* ./&lt;/span&gt;
&lt;span class="c"&gt;# RUN \&lt;/span&gt;
&lt;span class="c"&gt;#   if [ -f yarn.lock ]; then yarn --frozen-lockfile; \&lt;/span&gt;
&lt;span class="c"&gt;#   elif [ -f package-lock.json ]; then npm ci; \&lt;/span&gt;
&lt;span class="c"&gt;#   elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm &amp;amp;&amp;amp; pnpm i; \&lt;/span&gt;
&lt;span class="c"&gt;#   else echo "Lockfile not found." &amp;amp;&amp;amp; exit 1; \&lt;/span&gt;
&lt;span class="c"&gt;#   fi&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nt"&gt;--mount&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;cache,target&lt;span class="o"&gt;=&lt;/span&gt;/root/.yarn &lt;span class="nv"&gt;YARN_CACHE_FOLDER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/root/.yarn yarn &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--frozen-lockfile&lt;/span&gt;

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

&lt;/div&gt;



</description>
      <category>docker</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>Create RSA key using openssl</title>
      <dc:creator>Goffity Corleone</dc:creator>
      <pubDate>Wed, 24 Aug 2022 18:53:21 +0000</pubDate>
      <link>https://dev.to/goffity/create-rsa-key-using-openssl-3b68</link>
      <guid>https://dev.to/goffity/create-rsa-key-using-openssl-3b68</guid>
      <description>&lt;p&gt;The following command may be used with OpenSSL to create an RSA encryption key.&lt;/p&gt;

&lt;p&gt;Step to create key to encrypt data with RSA algorithm &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create private key&lt;/li&gt;
&lt;li&gt;Use private from (1) to create public key.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Generate private key using the following command:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openssl genrsa &lt;span class="nt"&gt;-out&lt;/span&gt; private.pem 4096
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this command, i Have used a key length of 4096 bits. recommended for length is 2048.&lt;/p&gt;

&lt;p&gt;This gives you a private key look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-----BEGIN RSA PRIVATE KEY-----
MIIJKAIBAAKCAgEAn0yZTRLxV2sbxzQfqeTCwwU9mpjTaL5fBnSsOLpFe5/hbD93
mofHpO0ybA596ofqMtxxl8xAmcKk4fdBZzBzwoDUqjBQqTQbU6hspGj9L4y1Hf1Y
TlqeSpyFJT3I3efmz6EFy7NjDvfLTmCC4kCwdhzh6PJkWMI+4mZ2g6rktHRBt4Tt
q3jTm74WtWjVCmozJefBI7fcyLpIuZrZ98YZE697nigjfU0GxaJEgiDtdmYrEbtZ
aPRK7ZusX/m5FQ97Iff1KccVYlDtRoBXaORACnhI2MVpjYq9DQFQOU5syATi+geu
2Yrazlb/yy/LTkUaNYNwHXA3YwjT3xU+m169CT5GVT4VV4EikEen/FZSqvZYqt1B
HU1X14wmjgcm0NTSeDf2vpnruAXDGP3KW5j0PU/nnlx2DuYtnPKztrH5JHmMvz6Y
Nvu7eI7l+yGz6tOw9P8jQqRf3DwzDuGxHVFKdqGczBTzPRjRYrtqDuHnZCtcwbxv
Lv8EpDlONsywQ5Jh5AOwrAyasd8xvJrd2cPGJyfyk2f9/Ye9T/AWm1j52mB1INX+
W+F2xU9abjJJ405SfHeMtIuBw+bB1KbFzgPSyintBzuhzGXX5BTybFYSYQoumAAA
189/dr1mgSJqwkoKFYg9cvTn66mLzxUSpiG4EDVpL7NnWXDgzQYYhRYXb4ECAwEA
AQKCAgEAntyX4Uorzn8tY5pynU5agHxgdCVGZ6W6REjkW2o/0sqd1wLwNvaDvdEi
wKovHk3O3EwFKFn0bqKzJfobilnCh81MyDCIsEUbn3FObyOYouvSz4aQowsx4rx2
963G/K3A+3zct8k813d8k7whqprSn+erz1Czi+SjK8r9E8/AZsmto+P31VIYza9j
HCTgmJNSUNHvRbydfLxxvE9WYgd3iK8vO4lR4yqGv19UrOVDixjWiMdqogVGF/Fw
lQIIdp1KsZSDNNeqVrLX/cAN67f8ubQ9CZjN6+7ZG/gcVhoE1/AvnyM8VwxnqvEO
BUaznGnDemyKyYDYa3YpPMcF+ZIgN13PcSI5JMgKC2oUPTZz55YwoLuDhpycque/
f6znrk45p5tutw7lkmZaVdeBXxRlifJTaXESDxL4aPoF5QEp21bmAl+91dn64I1Y
JO/jaGpevYPCQf0czrQqS9C4AGv5v44cmTl99eL5c+k9L/wNbXykycKL613vZc0p
jjOnYuqY9RzDBpuCmpiK/tT7a2PRmKfPOFnCZPvTOt33N9znxYrndrNV7obZYBLn
2ku+hvrU5jBURZiywivhwRXVa6RZsUEz+pe+b+8HLV9n/cP7EvjLzfx/jjEAwWPA
U2vLx4wHAG182SYjsCclrI0/YGMMU4q9x80ychtwp3sa16STm3UCggEBAMrafsLO
JNloG3W0eSsIqvAv2hIaYiY1bcSskC6lAhcpjLSl2hUc0rAkxG+BhSPgYFse58kZ
LW4+r6/6ZrMp4boR8VX8gw4bhocERj5+e0FOvhjlPkD+MCxUNhJvLbUfegjU1qpI
+0vLJf4Qqoq0QkkJg/Ci9NE73LB4OPKWILAeMOMwBRIGueCY9qh/pulR7qvQwAx1
sINNQzJjKjIK5gWlt+5DduS0hLRtrsEAyY+M5t83QJDl6eAiB1Tz6QthIvVVLFr2
1v96s9wjO32QwqrfZFWgLZwRzZLTl9e3nJ4Jm4mwbD0Yl2yEBhytl7KXDIaNiB3S
X2Z745Bzce0u/OcCggEBAMkI5FpP3rbaNJDmX7DKOqUNs+nQ6gXEzc8A2bfXnIak
fZVdMKBpkS/bMOqGHrjWn8snPug0tDtGBzdwjRd4pK4zX7DKdwg60cod0qP64VMk
1xnCRByRXJdUkCNt+ULwbR6ZX4HBN3newT9PKfckjib09HcwY0yunoGWkSPhInT7
ad+QG2p0/DloTa5MWgCW5kI7dyAP+SORmoKiDiqY4bkbVmP8JL+Pjzyf4n8zAZKC
wdkMPdzMp0eAPUiE4qYMtQRa5HSkZSIGSw/+SZrYqkjEqgPTquxgCD6MKWZnUU60
sYzoSeTK8eFr50ap2ueslq+T1dLvoR9VyveQmBdv+1cCggEAZIJOPIeXioEi2fdJ
8iChUdDj5ARejT/7228FIZdwqblUlk12+O8HFW+iRP2P0m7iT0PI5MMs12sH8dHI
AQ3HYkJxqYEsDlllFpDvnRdeSsWROxSa++j2RYCUKh4cL5ohBS8wDb+Lg8psUK5B
Uehuz3F/hkO3udRHTMjErq3kFF9hKbApUv0yLC6eSG63bPPDpi4Qehv2EZi+qsCn
r5Pm1PV/ZPbYeglXl26hH9AcDpxp6D+gJitE7mDt8RHJbnH6uEQzbf7QGFXbuD9c
wqJvUerN8/8hmirYCN/+ZEv9tfBcuKRJfRwqKwJfZOY+O6bL9f86akxKKKVJ49DP
qg2WEQKCAQAoVzdzg/l+GdVYilIDaOFRw6kprzl2xOJDurj1sjd/sTxeH6AlYGm4
/7QWK6m4j6DrJEn0ULcl+cxy7IvzfMsXBcoa8NXn+d2lQEzHiQ10IL1lNt1yGh1J
ZLez1Fqjexl6fW5z3DDkrLV8nccfB9/ao2b3D+etOJEoEe24FHJUpSq+qO1HdIg0
gOCtrDaXTbCQ89vYvDvTTmGB+0D6fUk2Wu0ADVXWdtlYYgESY0raepCpnFJBn3Ol
3m7twXS1u3ELma2kVmTQ6hBf+jgM8ZNiHMy9DdmLq02cN4YLPYpMT+gdDXPejHbz
NDLptCXwPWrTesf6lwlu/0lGWmaatWbrAoIBAFVyNY8Gp8rD9Cq/ywATxmlR5Sni
DbeghkHRi1TNo9WUaHxncur6oUZtty5IPn2Hy1mnRnYqFAxBrOHDCpXDisjGJIbw
y6uIPLmlx1Z+oOjbnJUXR/pMteJ7ySxsOtCyXlSDIA2tG5VJ4oKkuKWFAwrCRaz1
KKAuYUpmFVM3YWqujfoLjUvIpcioyt4qkBkGr6TcHDAI7J8jg91NufSW3XcLH/C6
oWGm3zRjjIk+jJKygqm1y4ile26IGEF1Ttw1R9nqgQoL4gxxEjhNqU1Vs9cJSJvx
QKWxwStHpMxYNu3F1MLYKhRbna6hCJotK35ZK9PV0e0EL/bC3CW2PTtD6qA=
-----END RSA PRIVATE KEY-----
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Generate public key from public
&lt;/h2&gt;

&lt;p&gt;The private key from step (1) we can use it to generate public key following.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openssl rsa &lt;span class="nt"&gt;-in&lt;/span&gt; private.pem &lt;span class="nt"&gt;-puout&lt;/span&gt; &lt;span class="nt"&gt;-out&lt;/span&gt; public.pem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This should give you a public key look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAn0yZTRLxV2sbxzQfqeTC
wwU9mpjTaL5fBnSsOLpFe5/hbD93mofHpO0ybA596ofqMtxxl8xAmcKk4fdBZzBz
woDUqjBQqTQbU6hspGj9L4y1Hf1YTlqeSpyFJT3I3efmz6EFy7NjDvfLTmCC4kCw
dhzh6PJkWMI+4mZ2g6rktHRBt4Ttq3jTm74WtWjVCmozJefBI7fcyLpIuZrZ98YZ
E697nigjfU0GxaJEgiDtdmYrEbtZaPRK7ZusX/m5FQ97Iff1KccVYlDtRoBXaORA
CnhI2MVpjYq9DQFQOU5syATi+geu2Yrazlb/yy/LTkUaNYNwHXA3YwjT3xU+m169
CT5GVT4VV4EikEen/FZSqvZYqt1BHU1X14wmjgcm0NTSeDf2vpnruAXDGP3KW5j0
PU/nnlx2DuYtnPKztrH5JHmMvz6YNvu7eI7l+yGz6tOw9P8jQqRf3DwzDuGxHVFK
dqGczBTzPRjRYrtqDuHnZCtcwbxvLv8EpDlONsywQ5Jh5AOwrAyasd8xvJrd2cPG
Jyfyk2f9/Ye9T/AWm1j52mB1INX+W+F2xU9abjJJ405SfHeMtIuBw+bB1KbFzgPS
yintBzuhzGXX5BTybFYSYQoumAAA189/dr1mgSJqwkoKFYg9cvTn66mLzxUSpiG4
EDVpL7NnWXDgzQYYhRYXb4ECAwEAAQ==
-----END PUBLIC KEY-----
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reference:&lt;br&gt;
&lt;a href="https://www.scottbrady91.com/openssl/creating-rsa-keys-using-openssl"&gt;https://www.scottbrady91.com/openssl/creating-rsa-keys-using-openssl&lt;/a&gt;&lt;/p&gt;

</description>
      <category>openssl</category>
      <category>encryption</category>
    </item>
    <item>
      <title>Restart Rebuild and ReCreate container on docker compose v2</title>
      <dc:creator>Goffity Corleone</dc:creator>
      <pubDate>Mon, 13 Jun 2022 06:45:33 +0000</pubDate>
      <link>https://dev.to/goffity/restart-rebuild-and-recreate-container-on-docker-compose-v2-3119</link>
      <guid>https://dev.to/goffity/restart-rebuild-and-recreate-container-on-docker-compose-v2-3119</guid>
      <description>&lt;p&gt;I want to use docker compose to deploy a new version of an application, However, I do not want to down the compose project and eliminate the volume of other services.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Remove any services that are attempting to deploy.&lt;/li&gt;
&lt;li&gt;Start service.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;service_name&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;service_name&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>docker</category>
    </item>
    <item>
      <title>Delete git branch not in remote</title>
      <dc:creator>Goffity Corleone</dc:creator>
      <pubDate>Fri, 15 Apr 2022 11:09:36 +0000</pubDate>
      <link>https://dev.to/goffity/delete-git-branch-not-in-remote-3m5b</link>
      <guid>https://dev.to/goffity/delete-git-branch-not-in-remote-3m5b</guid>
      <description>&lt;p&gt;I'm not sure where I received the information, but it was most likely from stackoverflow.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git fetch &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; git branch &lt;span class="nt"&gt;-vv&lt;/span&gt; | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'/: gone]/{print $1}'&lt;/span&gt; | xargs git branch &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Update 2022-08-02&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout develop &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; git branch &lt;span class="nt"&gt;--merged&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s1"&gt;'main'&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s1"&gt;'develop'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;/tmp/merged-branches &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; vi /tmp/merged-branches &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; xargs git branch &lt;span class="nt"&gt;-d&lt;/span&gt; &amp;lt;/tmp/merged-branches
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ref: &lt;a href="https://stackoverflow.com/questions/7726949/remove-tracking-branches-no-longer-on-remote"&gt;https://stackoverflow.com/questions/7726949/remove-tracking-branches-no-longer-on-remote&lt;/a&gt;&lt;/p&gt;

</description>
      <category>git</category>
    </item>
    <item>
      <title>Install docker and docker-compose on ubuntu 20.04</title>
      <dc:creator>Goffity Corleone</dc:creator>
      <pubDate>Fri, 08 Apr 2022 05:39:14 +0000</pubDate>
      <link>https://dev.to/goffity/install-docker-and-docker-compose-on-ubuntu-2004-24c4</link>
      <guid>https://dev.to/goffity/install-docker-and-docker-compose-on-ubuntu-2004-24c4</guid>
      <description>&lt;h2&gt;
  
  
  Docker
&lt;/h2&gt;

&lt;p&gt;Add dependency and install prerequisite packages&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt update
apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; apt-transport-https ca-certificates curl software-properties-common
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add docker repository&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository &lt;span class="s2"&gt;"deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install Docker&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apt install docker-ce
systemctl status docker

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Docker compose
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.docker/cli-plugins/
curl &lt;span class="nt"&gt;-SL&lt;/span&gt; https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64 &lt;span class="nt"&gt;-o&lt;/span&gt; ~/.docker/cli-plugins/docker-compose
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x ~/.docker/cli-plugins/docker-compose
docker compose version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>docker</category>
    </item>
    <item>
      <title>Copy collection in same database.</title>
      <dc:creator>Goffity Corleone</dc:creator>
      <pubDate>Sun, 03 Apr 2022 15:50:16 +0000</pubDate>
      <link>https://dev.to/goffity/copy-collection-in-same-database-2cl0</link>
      <guid>https://dev.to/goffity/copy-collection-in-same-database-2cl0</guid>
      <description>&lt;p&gt;Copy collection in same database without dump command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.collectionName.aggregate&lt;span class="o"&gt;([{&lt;/span&gt;&lt;span class="nv"&gt;$match&lt;/span&gt;:&lt;span class="o"&gt;{}}&lt;/span&gt;,&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$out&lt;/span&gt;:&lt;span class="s2"&gt;"copyCollectionName"&lt;/span&gt;&lt;span class="o"&gt;}])&lt;/span&gt;

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

&lt;/div&gt;



</description>
      <category>mongodb</category>
    </item>
    <item>
      <title>Install Spring boot on Weblogic 12c</title>
      <dc:creator>Goffity Corleone</dc:creator>
      <pubDate>Tue, 03 Aug 2021 04:01:37 +0000</pubDate>
      <link>https://dev.to/goffity/install-spring-boot-on-weblogic-12c-1gik</link>
      <guid>https://dev.to/goffity/install-spring-boot-on-weblogic-12c-1gik</guid>
      <description>&lt;p&gt;การจะ deploy web application ที่พัฒนาด้วย spring boot บน weblogic ต้องเพิ่มเติม 2 ส่วนหลัก ๆ คือ&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Application เราต้อง implements WebApplicationInitializer
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@SpringBootApplication
public class MyApplication extends SpringBootServletInitializer implements WebApplicationInitializer {
...
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;ต้องเพิ่มไฟล์ weblogic.xml ที่ /src/main/webapp/WEB-INF/weblogic.xml
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;wls:weblogic-web-app
    xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        https://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd
        http://xmlns.oracle.com/weblogic/weblogic-web-app
        https://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd"&amp;gt;
    &amp;lt;wls:context-root&amp;gt;/myapp&amp;lt;/wls:context-root&amp;gt;
    &amp;lt;wls:container-descriptor&amp;gt;
        &amp;lt;wls:prefer-application-packages&amp;gt;
            &amp;lt;wls:package-name&amp;gt;org.slf4j&amp;lt;/wls:package-name&amp;gt;
        &amp;lt;/wls:prefer-application-packages&amp;gt;
    &amp;lt;/wls:container-descriptor&amp;gt;
&amp;lt;/wls:weblogic-web-app&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;จากนั้นก็ทำการ deploy ที่ weblogic ตามขั้นตอนของแต่ละรุ่น&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.spring.io/spring-boot/docs/2.5.1/reference/html/howto.html#howto.traditional-deployment.weblogic"&gt;https://docs.spring.io/spring-boot/docs/2.5.1/reference/html/howto.html#howto.traditional-deployment.weblogic&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>weblogic</category>
      <category>springboot</category>
    </item>
    <item>
      <title>Python web scrapping on GCP</title>
      <dc:creator>Goffity Corleone</dc:creator>
      <pubDate>Mon, 05 Jul 2021 16:42:28 +0000</pubDate>
      <link>https://dev.to/goffity/python-web-scrapping-on-gcp-1iio</link>
      <guid>https://dev.to/goffity/python-web-scrapping-on-gcp-1iio</guid>
      <description>&lt;p&gt;Content&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;build container images.&lt;/li&gt;
&lt;li&gt;tag images.&lt;/li&gt;
&lt;li&gt;upload images to GCP.&lt;/li&gt;
&lt;li&gt;create services.&lt;/li&gt;
&lt;/ol&gt;




&lt;h1&gt;
  
  
  build container images.
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;selenium.&lt;/li&gt;
&lt;li&gt;web scrapping.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  tag images.
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;image with GCP pattern.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker pull selenium/standalone-chrome
# tag with pattern $GCP_REGISTRY/$PROJECT_NAME/$IMAGE_NAME
docker tag selenium/standalone-chrome asia.gcr.io/$PROJECT_NAME/selenium-standalone-chrome
# push image
docker push asia.gcr.io/$PROJECT_NAME/selenium-standalone-chrome
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  upload images to GCP.
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;authentication on browser.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gcloud auth login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;setup project.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gcloud config set project $PROJECT_NAME
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  create services.
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Create from container images.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  # create selenium service.
gcloud run deploy selenium-chrome --image asia.gcr.io/$PROJECT_NAME/selenium_standalone-chrome --port 4444 --memory 2G --region asia-southeast1 --platform managed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Create from cloud build.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# gcloud builds submit --tag asia.gcr.io/$PROJECT_NAME/$IMAGE_NAME

gcloud builds submit --tag asia.gcr.io/$PROJECT_NAME/web-scrpping
# deploy service
gcloud run deploy selenium-chrome --image asia.gcr.io/$PROJECT_NAME/selenium_standalone-chrome
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reference:&lt;br&gt;
&lt;a href="https://www.roelpeters.be/how-to-deploy-a-scraping-script-and-selenium-in-google-cloud-run/"&gt;https://www.roelpeters.be/how-to-deploy-a-scraping-script-and-selenium-in-google-cloud-run/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/googlecloud/using-headless-chrome-with-cloud-run-3fdp"&gt;https://dev.to/googlecloud/using-headless-chrome-with-cloud-run-3fdp&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>selenium</category>
      <category>gcp</category>
    </item>
    <item>
      <title>MySQL query default value is query is NULL</title>
      <dc:creator>Goffity Corleone</dc:creator>
      <pubDate>Mon, 05 Jul 2021 16:41:35 +0000</pubDate>
      <link>https://dev.to/goffity/mysql-query-default-value-is-query-is-null-2h3f</link>
      <guid>https://dev.to/goffity/mysql-query-default-value-is-query-is-null-2h3f</guid>
      <description>&lt;p&gt;Problem when wanting to mapping values from MySQL query to Object in JAVA but MySQL Query returns NULL&lt;br&gt;
If Application is written in spring boot with JDBCTemplate and mapping to Object, the exception will occur.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;org.springframework.beans.TypeMismatchException
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;can be solved by use &lt;a href="https://dev.mysql.com/doc/refman/5.7/en/flow-control-functions.html"&gt;IFNULL&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT IFNULL(emp_id,0) FROM emp WHERE 1=0;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Reference:&lt;br&gt;
&lt;a href="https://dev.mysql.com/doc/refman/5.7/en/flow-control-functions.html"&gt;https://dev.mysql.com/doc/refman/5.7/en/flow-control-functions.html&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.w3schools.com/sql/func_mysql_ifnull.asp"&gt;https://www.w3schools.com/sql/func_mysql_ifnull.asp&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mysql</category>
      <category>java</category>
      <category>springboot</category>
    </item>
    <item>
      <title>Change Timezone on linux (ubuntu)</title>
      <dc:creator>Goffity Corleone</dc:creator>
      <pubDate>Sun, 04 Jul 2021 19:14:45 +0000</pubDate>
      <link>https://dev.to/goffity/change-timezone-on-linux-ubuntu-3f25</link>
      <guid>https://dev.to/goffity/change-timezone-on-linux-ubuntu-3f25</guid>
      <description>&lt;p&gt;Check timezone on host&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;timedatectl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change timezone&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;timedatectl set-timezone ${timezone}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;List timezone&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;timezonectl list-timezones
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>linux</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>Get IP and subnet on Linux</title>
      <dc:creator>Goffity Corleone</dc:creator>
      <pubDate>Thu, 15 Oct 2020 17:16:24 +0000</pubDate>
      <link>https://dev.to/goffity/get-ip-and-subnet-on-linux-2m1k</link>
      <guid>https://dev.to/goffity/get-ip-and-subnet-on-linux-2m1k</guid>
      <description>&lt;p&gt;How to get public IP with subnet on Linux OS.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ip a | grep $(hostname -I | awk '{print $1}') | awk '{print $2}'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>linux</category>
      <category>network</category>
    </item>
    <item>
      <title>Install maven wrapper</title>
      <dc:creator>Goffity Corleone</dc:creator>
      <pubDate>Mon, 21 Sep 2020 18:53:46 +0000</pubDate>
      <link>https://dev.to/goffity/install-maven-wrapper-53o8</link>
      <guid>https://dev.to/goffity/install-maven-wrapper-53o8</guid>
      <description>&lt;p&gt;Install maven wrapper with maven wrapper plugin&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mvn -N io.takari:maven:wrapper&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Can also specify the version of maven&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mvn -N io.takari:maven:wrapper -Dmaven=3.6.3&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Ref:&lt;a href="https://www.baeldung.com/maven-wrapper"&gt;https://www.baeldung.com/maven-wrapper&lt;/a&gt;&lt;/p&gt;

</description>
      <category>maven</category>
    </item>
  </channel>
</rss>
