<?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: kawasaki031677</title>
    <description>The latest articles on DEV Community by kawasaki031677 (@kawasaki031677).</description>
    <link>https://dev.to/kawasaki031677</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4219324%2F0166a2b4-c859-44fb-8ee9-4259906f7428.jpg</url>
      <title>DEV Community: kawasaki031677</title>
      <link>https://dev.to/kawasaki031677</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kawasaki031677"/>
    <language>en</language>
    <item>
      <title>Consider Using the nc Command for Connectivity Verification</title>
      <dc:creator>kawasaki031677</dc:creator>
      <pubDate>Sun, 01 Nov 2026 02:33:17 +0000</pubDate>
      <link>https://dev.to/kawasaki031677/consider-using-the-nc-command-for-connectivity-verification-23ii</link>
      <guid>https://dev.to/kawasaki031677/consider-using-the-nc-command-for-connectivity-verification-23ii</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;When verifying connectivity to external servers or databases, which command do you typically use? I'd like to recommend the &lt;code&gt;nc (Netcat) command&lt;/code&gt; for this purpose.&lt;/p&gt;

&lt;h1&gt;
  
  
  Why I Recommend the nc Command
&lt;/h1&gt;

&lt;p&gt;The &lt;code&gt;nc (Netcat) command&lt;/code&gt; is convenient for connectivity verification. Here's how to use it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;nc &lt;span class="nt"&gt;-zv&lt;/span&gt; &amp;lt;&lt;span class="nb"&gt;hostname &lt;/span&gt;or IP address&amp;gt; &amp;lt;port number&amp;gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;nc &lt;span class="nt"&gt;-zv&lt;/span&gt; google.com 80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you see &lt;code&gt;Connection to ... succeeded!&lt;/code&gt; as output, the connectivity is successful.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;user@localhost:~$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;nc &lt;span class="nt"&gt;-zv&lt;/span&gt; google.com 80
&lt;span class="go"&gt;Connection to google.com (142.250.207.46) 80 port [tcp/http] succeeded!
&lt;/span&gt;&lt;span class="gp"&gt;user@localhost:~$&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  What About Using ping?
&lt;/h1&gt;

&lt;p&gt;It's common to just try ping first. However, ping uses the ICMP protocol, so if the other side doesn't allow ICMP, it will fail (security groups and firewalls often block it).&lt;/p&gt;

&lt;h1&gt;
  
  
  Why Not Just Use curl or psql?
&lt;/h1&gt;

&lt;p&gt;Ultimately, it's best to verify that you can properly access the API with curl or the database with psql. However, before that, you want to confirm: "Can we connect at the network level in the first place?" &lt;/p&gt;

&lt;p&gt;If you only verify at the application layer, troubleshooting becomes tedious when a connection fails. It's better to use the nc command to verify layer by layer.&lt;/p&gt;

&lt;h1&gt;
  
  
  What About the Traditional telnet?
&lt;/h1&gt;

&lt;p&gt;While telnet is a classic option, it's often considered a security risk and is not recommended. Personally, I prefer not to use it.&lt;/p&gt;

&lt;h1&gt;
  
  
  Why nc is Underrated but Practical
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;It straightforwardly tells you whether a TCP port is open&lt;/li&gt;
&lt;li&gt;It also supports UDP (surprisingly powerful)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, nc is not installed by default on systems like Amazon Linux, so install it beforehand:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;nmap-ncat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>linux</category>
      <category>networking</category>
      <category>netcat</category>
      <category>troubleshooting</category>
    </item>
    <item>
      <title>Getting Started with Keycloak - Building a Simple Login Page with Docker</title>
      <dc:creator>kawasaki031677</dc:creator>
      <pubDate>Sun, 01 Nov 2026 01:06:42 +0000</pubDate>
      <link>https://dev.to/kawasaki031677/getting-started-with-keycloak-building-a-simple-login-page-with-docker-5hn3</link>
      <guid>https://dev.to/kawasaki031677/getting-started-with-keycloak-building-a-simple-login-page-with-docker-5hn3</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Recently, it seems Keycloak is being used quite frequently. (According to my colleague)&lt;br&gt;
I hadn't tried it yet myself, so I decided to give it a simple try to see what it's all about.&lt;/p&gt;
&lt;h1&gt;
  
  
  Getting Started with Keycloak
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;1. Pull the Docker image and start Keycloak&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:8080 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;KEYCLOAK_ADMIN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;admin &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;KEYCLOAK_ADMIN_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;admin &lt;span class="se"&gt;\&lt;/span&gt;
  quay.io/keycloak/keycloak:24.0.3 &lt;span class="se"&gt;\&lt;/span&gt;
  start-dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Access the admin console&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once Keycloak is running, access the admin console at the following URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fobzft5bbf89f5gzh8ijg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fobzft5bbf89f5gzh8ijg.png" alt="Keycloak login page" width="799" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You'll see the Keycloak login page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Log in to the admin console&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Enter the username (admin) and password (admin) to log in to the admin console. The login was successful!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frbdtzledgwlqpzbau69x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frbdtzledgwlqpzbau69x.png" alt="Admin console after login" width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Create a test user&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Navigate to the left menu and go to &lt;strong&gt;Users&lt;/strong&gt; → &lt;strong&gt;Add user&lt;/strong&gt; to create a new user. In this example, I created a user named "test".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs9q97jyaej7n1i34l4mo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs9q97jyaej7n1i34l4mo.png" alt="Create test user" width="799" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Create a test client&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Navigate to &lt;strong&gt;Clients&lt;/strong&gt; → &lt;strong&gt;Create client&lt;/strong&gt; in the left menu and enter the following information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Client ID&lt;/strong&gt;: &lt;code&gt;my-html-client&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Home URL / Valid redirect URIs / Web origins&lt;/strong&gt;: &lt;code&gt;http://localhost:8000&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(We'll place the HTML file we create later at this URL)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8v9t41ceptvtakj8hfns.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8v9t41ceptvtakj8hfns.png" alt="Create test client" width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Create a simple login page&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create a simple HTML file (index.html) to test the login functionality:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Keycloak Demo&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/keycloak-js@24.0.3/dist/keycloak.min.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Keycloak Test Page&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"login()"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Login&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;pre&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"output"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/pre&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;keycloak&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Keycloak&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http://localhost:8080/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;realm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;master&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;clientId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-html-client&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;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;login&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;keycloak&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;onLoad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;login-required&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;authenticated&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;output&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
          &lt;span class="nx"&gt;authenticated&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Authenticated&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;keycloak&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tokenParsed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Not Authenticated&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;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;7. Start a simple web server&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Navigate to the folder where you placed the &lt;code&gt;index.html&lt;/code&gt; file and run the following command to start a simple Python web server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;-m&lt;/span&gt; http.server 8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;8. Access the login page&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open your browser and navigate to the following URL to see the test page:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fithvqhdnpz624kkp6iyk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fithvqhdnpz624kkp6iyk.png" alt="Login page displaying" width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The page displays successfully with the login button visible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9. Test the login functionality&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Click the Login button and you'll be redirected to the Keycloak authentication screen. After entering your credentials (username: test, password: password), you'll be successfully authenticated!&lt;/p&gt;

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

&lt;h1&gt;
  
  
  Summary
&lt;/h1&gt;

&lt;p&gt;Since configuration can be done through a GUI, it left a beginner-friendly impression on me. I was able to verify the authentication flow in a short time, so it seems very useful for future development. Next time, I plan to explore the more detailed configuration settings and advanced features.&lt;/p&gt;

</description>
      <category>keycloak</category>
      <category>authentication</category>
      <category>docker</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
