<?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: Dendi Handian</title>
    <description>The latest articles on DEV Community by Dendi Handian (@dendihandian).</description>
    <link>https://dev.to/dendihandian</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%2F248957%2F08e3ab2c-c9bf-445c-9901-68a90948922e.jpg</url>
      <title>DEV Community: Dendi Handian</title>
      <link>https://dev.to/dendihandian</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dendihandian"/>
    <language>en</language>
    <item>
      <title>Generating Table Schema from AWS Glue Table</title>
      <dc:creator>Dendi Handian</dc:creator>
      <pubDate>Fri, 05 Dec 2025 07:56:44 +0000</pubDate>
      <link>https://dev.to/dendihandian/generating-table-schema-from-aws-glue-table-58ip</link>
      <guid>https://dev.to/dendihandian/generating-table-schema-from-aws-glue-table-58ip</guid>
      <description>&lt;p&gt;Rather than copying the schema columns from the aws console or even from Athena sidebar, you could generate the schema from existing table using query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; 
 &lt;span class="k"&gt;column_name&lt;/span&gt;
&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ordinal_position&lt;/span&gt;
&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;column_default&lt;/span&gt;
&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;is_nullable&lt;/span&gt;
&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data_type&lt;/span&gt;
&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;comment&lt;/span&gt;
&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;extra_info&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;information_schema&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;table_schema&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'TABLE_DATABASE'&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="k"&gt;table_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'TABLE_NAME'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above query will return all the necessary information about the table columns and you can copy them as CSV value from the athena result copy button.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>athena</category>
      <category>dataengineering</category>
      <category>sql</category>
    </item>
    <item>
      <title>Simulating Paralel Processing in Python using AsyncIO</title>
      <dc:creator>Dendi Handian</dc:creator>
      <pubDate>Thu, 24 Jul 2025 06:21:02 +0000</pubDate>
      <link>https://dev.to/dendihandian/simulating-paralel-processing-in-python-using-asyncio-9e3</link>
      <guid>https://dev.to/dendihandian/simulating-paralel-processing-in-python-using-asyncio-9e3</guid>
      <description>&lt;p&gt;Here is a simple simulation of how to run multiple process (or simply  a function) in paralel using AsyncIO&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;asyncio&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;seconds&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
  A normal function that simulates a blocking operation.
  &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
  &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Starting delay for &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;seconds&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; seconds.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;seconds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Finished delay for &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;seconds&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; seconds.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;sleep for &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;seconds&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; second(s)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;


&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
  &lt;span class="n"&gt;start_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="n"&gt;loop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_running_loop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

  &lt;span class="c1"&gt;# Schedule the blocking functions to run in the default thread pool executor
&lt;/span&gt;  &lt;span class="c1"&gt;# run_in_executor returns a future that we can await
&lt;/span&gt;  &lt;span class="n"&gt;tasks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run_in_executor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;

  &lt;span class="c1"&gt;# Now we await all the tasks to run concurrently
&lt;/span&gt;  &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Waiting for all tasks to complete...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;gather&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

  &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;results: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

  &lt;span class="n"&gt;end_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;--- All tasks are done! ---&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Results: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Total time: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;end_time&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;start_time&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; seconds&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>python</category>
      <category>asyncio</category>
      <category>dataengineering</category>
    </item>
    <item>
      <title>Hashing in Presto/Athena</title>
      <dc:creator>Dendi Handian</dc:creator>
      <pubDate>Fri, 11 Apr 2025 03:46:57 +0000</pubDate>
      <link>https://dev.to/dendihandian/hashing-in-athenaprestosql-ged</link>
      <guid>https://dev.to/dendihandian/hashing-in-athenaprestosql-ged</guid>
      <description>&lt;p&gt;The following hashing function require any parameter string to be casted into varbinary first. The you can apply any hashing function and transform it into hex to be a string and lower it.&lt;/p&gt;

&lt;h2&gt;
  
  
  SHA512
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;LOWER&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TO_HEX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SHA512&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;CAST&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'your_string'&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="nb"&gt;VARBINARY&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;

&lt;span class="c1"&gt;-- 7be98ae8208cafe0392b5b54ad86d40f5de3934bb82228c19d9697682785ac0a4fb9522bf28c6ec9db835318f21a9f7dde2855f0f4a907868074b5729792b6c4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  SHA256
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;LOWER&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TO_HEX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SHA256&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;CAST&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'your_string'&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="nb"&gt;VARBINARY&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;

&lt;span class="c1"&gt;-- e10207f241d66a8c5f8202ed9fc22b94c031850dd54d8b03fdd40db4cbde5bfc&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  MD5
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;LOWER&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TO_HEX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MD5&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;CAST&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'your_string'&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="nb"&gt;VARBINARY&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;

&lt;span class="c1"&gt;-- 1f656879d9228b4b16e139d3c758f766&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>sql</category>
      <category>athena</category>
      <category>presto</category>
    </item>
    <item>
      <title>URL Functions in Presto/Athena</title>
      <dc:creator>Dendi Handian</dc:creator>
      <pubDate>Tue, 18 Mar 2025 04:27:52 +0000</pubDate>
      <link>https://dev.to/dendihandian/url-functions-in-prestoathena-21j5</link>
      <guid>https://dev.to/dendihandian/url-functions-in-prestoathena-21j5</guid>
      <description>&lt;h2&gt;
  
  
  Extract Host
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;url_extract_host&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'https://example-subdomain.example-host.com/path/to/detail?order=desc&amp;amp;page=10'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;-- example-subdomain.example-host.com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Extract Parameter
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;url_extract_parameter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'https://example-subdomain.example-host.com/path/to/detail?order=desc&amp;amp;page=10'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'page'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;-- 10&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Extract Path
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;url_extract_path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'https://example-subdomain.example-host.com/path/to/detail?order=desc&amp;amp;page=10'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;-- /path/to/detail&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Extract Port
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;url_extract_port&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'https://example-subdomain.example-host.com:8088/path/to/detail?order=desc&amp;amp;page=10'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;-- 8088&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Extract Protocol
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;url_extract_protocol&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'https://example-subdomain.example-host.com:8088/path/to/detail?order=desc&amp;amp;page=10'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;-- https&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Extract Query
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;url_extract_query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'https://example-subdomain.example-host.com:8088/path/to/detail?order=desc&amp;amp;page=10'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;-- order=desc&amp;amp;page=10&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Extract Fragment
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;url_extract_fragment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'https://example-subdomain.example-host.com:8088/path/to/detail?order=desc&amp;amp;page=10#header1'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;-- header1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>sql</category>
      <category>database</category>
      <category>presto</category>
      <category>athena</category>
    </item>
    <item>
      <title>Capture Browser XHR/Fetch API Response Automatically into JSON Files</title>
      <dc:creator>Dendi Handian</dc:creator>
      <pubDate>Thu, 12 Sep 2024 07:43:14 +0000</pubDate>
      <link>https://dev.to/dendihandian/capture-browser-xhrfetch-api-response-automatically-into-json-files-2ic6</link>
      <guid>https://dev.to/dendihandian/capture-browser-xhrfetch-api-response-automatically-into-json-files-2ic6</guid>
      <description>&lt;p&gt;I wonder if we can capture the response of any browser's XHR/Fetch or simply API response into JSON files automatically or anything close to the method. This would be game-changing for data ingestion or ELT process and the only thing I just need to do is automate the browser using tools like &lt;a href="https://www.automa.site/" rel="noopener noreferrer"&gt;Automa&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is a stackoverflow question/thread for this: &lt;a href="https://stackoverflow.com/questions/68745624/automatically-export-fetch-xhr-response-chrome" rel="noopener noreferrer"&gt;https://stackoverflow.com/questions/68745624/automatically-export-fetch-xhr-response-chrome&lt;/a&gt;&lt;/p&gt;

</description>
      <category>help</category>
      <category>dataengineering</category>
      <category>chrome</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Simple Python JSON Exporter &amp; Importer</title>
      <dc:creator>Dendi Handian</dc:creator>
      <pubDate>Wed, 24 Jan 2024 10:57:30 +0000</pubDate>
      <link>https://dev.to/dendihandian/simple-python-json-exporter-importer-200n</link>
      <guid>https://dev.to/dendihandian/simple-python-json-exporter-importer-200n</guid>
      <description>&lt;h2&gt;
  
  
  Exporter Function
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;export_json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;w&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;indent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Importer Function
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;import_json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Export and Import Dictionary (JSON object)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;sample_dict&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maps&lt;/span&gt;&lt;span class="sh"&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="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;b&lt;/span&gt;&lt;span class="sh"&gt;'&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="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;c&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;d&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&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="nf"&gt;export_json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;maps.json&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sample_dict&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;import_json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;maps.json&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Export and Import List (List of JSON Objects)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;sample_list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;b&lt;/span&gt;&lt;span class="sh"&gt;'&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="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;c&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;d&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nf"&gt;export_json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;maps.json&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sample_list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;import_json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;maps.json&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>python</category>
      <category>json</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>VS Code Extensions for Data Engineering - Part 1</title>
      <dc:creator>Dendi Handian</dc:creator>
      <pubDate>Wed, 17 Jan 2024 22:16:40 +0000</pubDate>
      <link>https://dev.to/dendihandian/vs-code-extensions-for-data-engineering-part-1-50pd</link>
      <guid>https://dev.to/dendihandian/vs-code-extensions-for-data-engineering-part-1-50pd</guid>
      <description>&lt;p&gt;This is my opinionated list for Visual Studio Code Extension that helped me during data wrangling, cleaning, processing, checks, and other utilization.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=mechatroner.rainbow-csv" rel="noopener noreferrer"&gt;Rainbow CSV&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;CSV probably the most used format for storing datasets and it can read in plain text. When you reading csv file, do you face problem to distinguish each columns value? Rainbow CSV will help you to solve it.&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%2Fgb70mtljbdq37317m3lp.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%2Fgb70mtljbdq37317m3lp.png" alt="preview from the extension page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=dvirtz.parquet-viewer" rel="noopener noreferrer"&gt;Parquet-Viewer&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Parquet is column-oriented data format for storage and data retrieval efficiency. You may find this format often in datalake storage system. You can view and read it using an interactive query tools, but not readable by text editor. Parquet-Viewer will provide you the view for the data.&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%2Fraw.githubusercontent.com%2Fdvirtz%2Fvscode-parquet-viewer%2F712b7722446ebf643276a2c3694e0146eae9b499%2Fimages%2Fautomatic.gif" 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%2Fraw.githubusercontent.com%2Fdvirtz%2Fvscode-parquet-viewer%2F712b7722446ebf643276a2c3694e0146eae9b499%2Fimages%2Fautomatic.gif" alt="preview from the extension page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since parquet mostly store a huge amount of data, opening it will depend on your machine capability.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=qwtel.sqlite-viewer" rel="noopener noreferrer"&gt;SQLite Viewer&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Someone gave you a sqlite database. You probably started to think to install a program like &lt;a href="https://sqlitebrowser.org/" rel="noopener noreferrer"&gt;sqlitebrowser&lt;/a&gt;, but only to view and read the data. Don't bother, you can use this extension instead.&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%2F69gkiebm1jxodm808zvf.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%2F69gkiebm1jxodm808zvf.png" alt="preview from the extension page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=jackytsu.text-transformer" rel="noopener noreferrer"&gt;Text Transformer for VSCode&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;VSCode only come with &lt;em&gt;UPPERCASE&lt;/em&gt; and &lt;em&gt;lowercase&lt;/em&gt; text transformation in the default installation. You may need the other text cases like &lt;em&gt;snake_case&lt;/em&gt; , &lt;em&gt;camelCase&lt;/em&gt; , &lt;em&gt;PascalCase&lt;/em&gt; . This extension will enable them.&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%2Fpghik79tq3gv3k2mienz.gif" 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%2Fpghik79tq3gv3k2mienz.gif" alt="preview"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=albymor.increment-selection" rel="noopener noreferrer"&gt;Increment Selection&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;We can duplicate lines of number in VSCode, but not incrementaly. This problem happened when we want to label each lines with sequential number. &lt;strong&gt;Increment Selection&lt;/strong&gt; will increment our blocked lines automatically and you can start the sequence from any number you want.&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%2Fraw.githubusercontent.com%2Falbymor%2FIncrement-Selection%2Fmaster%2Fimages%2Fdemo.gif" 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%2Fraw.githubusercontent.com%2Falbymor%2FIncrement-Selection%2Fmaster%2Fimages%2Fdemo.gif" alt="preview from the extension page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=ArturoDent.jump-and-select" rel="noopener noreferrer"&gt;Jump and Select&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This extension is very useful to me when I'm dealing with CSV and processing multiply rows. The problem was traversing between commas to get you to the designated column.&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%2F770pjr43pzha29gcqmuh.gif" 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%2F770pjr43pzha29gcqmuh.gif" alt="preview for jumpselect"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This extension may come in handy for different case.&lt;/p&gt;




&lt;p&gt;Hope the list helps you to process the data faster.&lt;/p&gt;

</description>
      <category>dataengineering</category>
      <category>datascience</category>
      <category>database</category>
      <category>vscode</category>
    </item>
    <item>
      <title>Alpine Linux in WSL</title>
      <dc:creator>Dendi Handian</dc:creator>
      <pubDate>Wed, 29 Mar 2023 15:15:24 +0000</pubDate>
      <link>https://dev.to/dendihandian/alpine-linux-in-wsl-1c54</link>
      <guid>https://dev.to/dendihandian/alpine-linux-in-wsl-1c54</guid>
      <description>&lt;p&gt;After trying &lt;a href="https://dev.to/dendihandian/debian-in-wsl-55o7"&gt;Debian in WSL&lt;/a&gt;, now I'm trying for something lighter, the Alpine distro.&lt;/p&gt;

&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Having WSL (WSL2) activated&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installing Alpine WSL
&lt;/h2&gt;

&lt;p&gt;Open Microsoft Store and search for &lt;code&gt;Alpine WSL&lt;/code&gt;. Install and Open after it installed.&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%2Fbgbx4rjbtpbgd8gn32wu.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%2Fbgbx4rjbtpbgd8gn32wu.png" alt="alpine wsl microsoft store"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you launch it at first, it will perform the installation setup and wait for it.&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%2Fqkgd2szmcqk0d0fo97ke.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%2Fqkgd2szmcqk0d0fo97ke.png" alt="alpine wsl installing"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If your installation froze up to the last line like in the image above for like more than few minutes, try to close it and reopen alpine linux. Somehow the installation was actually completed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Checking the installed Alpine version
&lt;/h2&gt;

&lt;p&gt;Use the &lt;code&gt;cat /etc/os-release&lt;/code&gt; command to see the release information.&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%2F0wdq441z1vi6a5u45c1j.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%2F0wdq441z1vi6a5u45c1j.png" alt="alpine version using cli"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Common APK commands for Alpine
&lt;/h2&gt;

&lt;p&gt;Alpine is powered with command tools named &lt;code&gt;apk&lt;/code&gt;, stands for Alpine Package Keeper. You can confirm it's installed by typing &lt;code&gt;apk&lt;/code&gt; and you will see the apk version and usage information.&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%2F9ao4jrf3ouu4h2liq8b4.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%2F9ao4jrf3ouu4h2liq8b4.png" alt="apk help info"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Updating the repository indexes
&lt;/h3&gt;

&lt;p&gt;To download and update the packages information to the latest, use this command:&lt;/p&gt;

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

apk update


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

&lt;/div&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%2Fu3emmuhe3loimqhhj5xo.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%2Fu3emmuhe3loimqhhj5xo.png" alt="apk update result"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Installing packages with &lt;code&gt;apk&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;You can browse for the available packages at &lt;a href="https://pkgs.alpinelinux.org/packages" rel="noopener noreferrer"&gt;pkgs.alpinelinux.org/packages&lt;/a&gt; or you can search it using CLI. Since Alpine Linux doesn't come with built-in editor like &lt;code&gt;nano&lt;/code&gt; in ubuntu, we have to install it as the demo.&lt;/p&gt;

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

apk search nano


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

&lt;/div&gt;

&lt;p&gt;Above commands will list available packages that has &lt;code&gt;nano&lt;/code&gt; on it's name.&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%2Ftgqivmwlz76l8jk0kzw9.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%2Ftgqivmwlz76l8jk0kzw9.png" alt="apk search nano"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But the straightforward to install it, just type this:&lt;/p&gt;

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

apk add nano


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

&lt;/div&gt;

&lt;p&gt;Check if the nano version actually matches the version in the latest available packages.&lt;/p&gt;

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

nano --version


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

&lt;/div&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%2Fdk3bdjofq1qbshpn3mm1.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%2Fdk3bdjofq1qbshpn3mm1.png" alt="nano version cli"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you can try to edit a file using nano. But maybe you have to create it first using &lt;code&gt;touch sample.txt&lt;/code&gt; and then you can &lt;code&gt;nano sample.txt&lt;/code&gt; afterward.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing Python server in Alpine WSL
&lt;/h2&gt;

&lt;p&gt;You can install python3 using apk command:&lt;/p&gt;

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

apk add python3


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

&lt;/div&gt;

&lt;p&gt;Confirm the python installation using &lt;code&gt;python3 --version&lt;/code&gt;. Just like what we've tried in Debian WSL, you can start a simpl python server using &lt;/p&gt;

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

python3 -m http.server 8000


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

&lt;/div&gt;

&lt;p&gt;And open &lt;code&gt;http://localhost:8000&lt;/code&gt; in your browser to confirm it.&lt;/p&gt;

</description>
      <category>alpine</category>
      <category>linux</category>
      <category>wsl</category>
      <category>windows</category>
    </item>
    <item>
      <title>Debian in WSL</title>
      <dc:creator>Dendi Handian</dc:creator>
      <pubDate>Sat, 18 Feb 2023 10:01:10 +0000</pubDate>
      <link>https://dev.to/dendihandian/debian-in-wsl-55o7</link>
      <guid>https://dev.to/dendihandian/debian-in-wsl-55o7</guid>
      <description>&lt;p&gt;This post is my journal on trying debian in WSL and playing around with it as starter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Having WSL (WSL2) activated&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installing Debian WSL
&lt;/h2&gt;

&lt;p&gt;Open Microsoft Store and search for Debian. Get to install and Open after it installed.&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%2F6pzk2uhj91wlc2wccqns.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%2F6pzk2uhj91wlc2wccqns.png" alt="debian wsl microsoft store"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It will launch debian program window. Fill the new user and password to use it.&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%2Fb04vq4093mck869n9p47.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%2Fb04vq4093mck869n9p47.png" alt="debian wsl first initiation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Download Package Information
&lt;/h2&gt;

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

sudo apt-get update


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

&lt;/div&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%2F2vfnmva5vv2si5nrq86e.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%2F2vfnmva5vv2si5nrq86e.png" alt="debian wsl apt-get update"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Checking Debian Version
&lt;/h2&gt;

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

sudo apt-get install lsb-release


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

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

lsb_release -a


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

&lt;/div&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%2F7oieven6my7ej3zk9lh5.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%2F7oieven6my7ej3zk9lh5.png" alt="checking debian version"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Simple Python Server Test in Debian WSL
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Installing Python
&lt;/h3&gt;

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

sudo apt-get install python3


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

&lt;/div&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%2Fxc2g329xcr5lidk3ccud.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%2Fxc2g329xcr5lidk3ccud.png" alt="debian wsl installing python"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Verifying Python Installation
&lt;/h3&gt;

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

python3 --version


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

&lt;/div&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%2Fz1k5i6zh4d6auew1biun.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%2Fz1k5i6zh4d6auew1biun.png" alt="debian wsl python installation check"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Starting a Simple Webserver
&lt;/h3&gt;

&lt;p&gt;Here is the command to start a simple web server in python&lt;/p&gt;

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

python3 -m http.server 8000


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

&lt;/div&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%2Fakudruzw5n421q2toeet.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%2Fakudruzw5n421q2toeet.png" alt="python simple web server command"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open the &lt;code&gt;http://localhost:8000&lt;/code&gt; in your browser to confirm if it accessible.&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%2Frzr6zxagm1t61un0esdx.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%2Frzr6zxagm1t61un0esdx.png" alt="python simple web server UI"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Installing Pip (For Further Python Development)
&lt;/h3&gt;

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

sudo apt-get install python3-pip


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

&lt;/div&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%2F61cj5nd9ep32ea5dxk10.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%2F61cj5nd9ep32ea5dxk10.png" alt="debian wsl installing python3-pip"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Browse Files in Visual Studio Code
&lt;/h2&gt;

&lt;p&gt;Install the WSL extension&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%2Fd5y3lqlfax8qbinzfjt7.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%2Fd5y3lqlfax8qbinzfjt7.png" alt="VSCODE WSL extension"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After it installed, you can click the arrow-like icon at bottom-left of VSCode&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%2Fq3oobgmeprwzsnrksfcd.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%2Fq3oobgmeprwzsnrksfcd.png" alt="VSCODE SSH icon"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And it will open the menu for SSH connections, pick the &lt;code&gt;Connect to WSL using Distro&lt;/code&gt; and choose &lt;code&gt;Debian&lt;/code&gt;&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%2Fkgm677aqw7nqtg1268wa.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%2Fkgm677aqw7nqtg1268wa.png" alt="VSCODE SSH Menu"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It will open a new VS Code window and wait a while for the server connection and then you can browse and manage the files inside the WSL Debian through VS Code. &lt;/p&gt;

&lt;p&gt;You can close the connection to the WSL later by clicking the same arrow-like icon and choose &lt;code&gt;close connection&lt;/code&gt;.&lt;/p&gt;

</description>
      <category>wsl</category>
      <category>windows</category>
      <category>debian</category>
      <category>linux</category>
    </item>
    <item>
      <title>Installing SQLite3 on Windows</title>
      <dc:creator>Dendi Handian</dc:creator>
      <pubDate>Sun, 12 Feb 2023 14:29:30 +0000</pubDate>
      <link>https://dev.to/dendihandian/installing-sqlite3-in-windows-44eb</link>
      <guid>https://dev.to/dendihandian/installing-sqlite3-in-windows-44eb</guid>
      <description>&lt;h1&gt;
  
  
  Downloading SQLite binary
&lt;/h1&gt;

&lt;p&gt;Go to &lt;a href="https://www.sqlite.org/download.html" rel="noopener noreferrer"&gt;sqlite.org/download.html&lt;/a&gt;, choose &lt;code&gt;sqlite-tools-win32-x86-*******.zip&lt;/code&gt; to download.&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.amazonaws.com%2Fuploads%2Farticles%2Ff23o7sgqkjrqg9lhjnvk.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.amazonaws.com%2Fuploads%2Farticles%2Ff23o7sgqkjrqg9lhjnvk.png" alt="sqlite windows binary download links" width="800" height="154"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Copying binary to installation folder
&lt;/h1&gt;

&lt;p&gt;Create a folder inside &lt;code&gt;C:\Program Files&lt;/code&gt; named &lt;code&gt;sqlite&lt;/code&gt;. Extract the downloaded zip and put all three binary files in this folder.&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.amazonaws.com%2Fuploads%2Farticles%2F5hcw6xgqkwst0k0wrgmc.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.amazonaws.com%2Fuploads%2Farticles%2F5hcw6xgqkwst0k0wrgmc.png" alt="sqlite binary in windows" width="800" height="170"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Adding path for sqlite binary
&lt;/h1&gt;

&lt;p&gt;Hit &lt;code&gt;Windows&lt;/code&gt; key and find for &lt;code&gt;edit the system environment variables&lt;/code&gt; control panel shortcut and open it.&lt;/p&gt;

&lt;p&gt;Go to &lt;code&gt;environment variables&lt;/code&gt;, chose &lt;code&gt;Path&lt;/code&gt; variable and add &lt;code&gt;C:\Program Files\sqlite&lt;/code&gt; to the path.&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.amazonaws.com%2Fuploads%2Farticles%2Fn3tynyxv0veriyd3vfb7.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.amazonaws.com%2Fuploads%2Farticles%2Fn3tynyxv0veriyd3vfb7.png" alt="adding sqlite3 path" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Verifying the Installation
&lt;/h1&gt;

&lt;p&gt;Open new command prompt (cmd) and execute this to check sqlite3 version and confirm the installation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sqlite3 --version
&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.amazonaws.com%2Fuploads%2Farticles%2Fs6mocnz1zrzf880s8b30.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.amazonaws.com%2Fuploads%2Farticles%2Fs6mocnz1zrzf880s8b30.png" alt="sqlite3 --version" width="800" height="95"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>git</category>
      <category>productivity</category>
      <category>tools</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Import and Export Large SQL File in Laragon</title>
      <dc:creator>Dendi Handian</dc:creator>
      <pubDate>Wed, 16 Nov 2022 02:22:10 +0000</pubDate>
      <link>https://dev.to/dendihandian/import-and-export-large-sql-file-in-laragon-59ma</link>
      <guid>https://dev.to/dendihandian/import-and-export-large-sql-file-in-laragon-59ma</guid>
      <description>&lt;p&gt;Importing or Exporting &lt;strong&gt;large&lt;/strong&gt; SQL file through PHPMyAdmin or Adminer may not be a good idea, since there is a chance of getting timeout or it's just taking to long to wait. A more powerful way to import large SQL file is through MySQL CLI. Laragon has its own environment terminal where all MySQL CLI command are executable from any directory. Let's try it out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checking the MySQL CLI command
&lt;/h2&gt;

&lt;p&gt;Open the laragon terminal (Cmder), the working directory should be started at &lt;code&gt;C:\laragon\www&lt;/code&gt; by default.&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%2Fi4gzroolg0qftlxs0t9o.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%2Fi4gzroolg0qftlxs0t9o.png" alt="laragon dashboard pointing to terminal"&gt;&lt;/a&gt;&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%2Fh8leimtp0ug76cax7bk2.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%2Fh8leimtp0ug76cax7bk2.png" alt="laragon terminal startup"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Try to check the mysql version to confirm the command is available in the current directory or anywhere:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;

&lt;span class="kd"&gt;mysql&lt;/span&gt; &lt;span class="na"&gt;--version


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

&lt;/div&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%2Famvpgit7gt7pqs5ecd7p.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%2Famvpgit7gt7pqs5ecd7p.png" alt="mysql version check"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating a demo database (MySQL)
&lt;/h2&gt;

&lt;p&gt;The completed credential example for this demo are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;host: &lt;code&gt;localhost&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;user: &lt;code&gt;myuser&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;password: &lt;code&gt;mypassword&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;database: &lt;code&gt;my_large_db&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the demo, you may want to create a new database named &lt;code&gt;my_large_db&lt;/code&gt; using web UI (phpMyAdmin or Adminer) or happily using this mysql cli command:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;

&lt;span class="kd"&gt;mysql&lt;/span&gt; &lt;span class="na"&gt;-hlocalhost -umyuser -pmypassword -e &lt;/span&gt;&lt;span class="s2"&gt;"CREATE DATABASE my_large_db"&lt;/span&gt;


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

&lt;/div&gt;
&lt;h2&gt;
  
  
  Importing Large SQL file (MySQL)
&lt;/h2&gt;

&lt;p&gt;Let's say your large SQL file is located in the &lt;code&gt;Downloads&lt;/code&gt; folder and it's named &lt;code&gt;my_large_db.sql&lt;/code&gt;. Let's go the directory by terminal:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;

&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="kd"&gt;C&lt;/span&gt;:\Users\yourusername\Downloads


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

&lt;/div&gt;

&lt;p&gt;Then we can import the file from the directory using this command:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;

&lt;span class="kd"&gt;mysql&lt;/span&gt; &lt;span class="na"&gt;-hlocalhost -umyuser -pmypassword &lt;/span&gt;&lt;span class="kd"&gt;my_large_db&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="kd"&gt;my_large_db&lt;/span&gt;.sql


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

&lt;/div&gt;

&lt;p&gt;This import will take time but it's should faster than importing from a web UI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exporting Large DB (MySQL)
&lt;/h2&gt;

&lt;p&gt;You can go to any directory you want using laragon terminal (Cmder) and that directory is where you will put the database dump file. Let's say we're gonna exporting the same datbase but into another sql file named &lt;code&gt;my_large_db_backup.sql&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;

&lt;span class="kd"&gt;mysql&lt;/span&gt; &lt;span class="na"&gt;-hlocalhost -umyuser -pmypassword &lt;/span&gt;&lt;span class="kd"&gt;my_large_db&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;my_large_db_backup&lt;/span&gt;.sql


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

&lt;/div&gt;

&lt;p&gt;or alternatively using &lt;code&gt;mysqldump&lt;/code&gt; command:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;

&lt;span class="kd"&gt;mysqldump&lt;/span&gt; &lt;span class="na"&gt;-hlocalhost -umyuser -pmypassword &lt;/span&gt;&lt;span class="kd"&gt;my_large_db&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;my_large_db_backup&lt;/span&gt;.sql


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

&lt;/div&gt;




&lt;p&gt;Tell me if this article is so helpful and helped you solve your problem in the comment below. Have fun exploring laragon.&lt;/p&gt;

</description>
      <category>laragon</category>
      <category>mysql</category>
      <category>webdev</category>
      <category>php</category>
    </item>
    <item>
      <title>Updating Adminer in Laragon for PHP 8</title>
      <dc:creator>Dendi Handian</dc:creator>
      <pubDate>Fri, 28 Oct 2022 08:43:49 +0000</pubDate>
      <link>https://dev.to/dendihandian/updating-adminer-in-laragon-for-php-8-1aop</link>
      <guid>https://dev.to/dendihandian/updating-adminer-in-laragon-for-php-8-1aop</guid>
      <description>&lt;p&gt;In Laragon, when you switching to PHP 8 and accessing adminer at &lt;a href="http://localhost/adminer" rel="noopener noreferrer"&gt;http://localhost/adminer&lt;/a&gt;, you will find this error:&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%2Fwvjflnb5z4d1g50eqo33.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%2Fwvjflnb5z4d1g50eqo33.png" alt="adminer error in php 8 laragon"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;the errors are because of the existing adminer app only supported in PHP 7. If you're currently using PHP 8 for now and the future, We need to update the adminer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Downloading the latest Adminer app
&lt;/h2&gt;

&lt;p&gt;Go to &lt;a href="https://www.adminer.org/#download" rel="noopener noreferrer"&gt;https://www.adminer.org/#download&lt;/a&gt;, and find the download link for the latest adminer app. Adminer is a single-file php application, so you will find a single php file like &lt;code&gt;adminer-4.8.1.php&lt;/code&gt; downloaded for example.&lt;/p&gt;

&lt;h2&gt;
  
  
  Updating the existing Adminer to the latest
&lt;/h2&gt;

&lt;p&gt;Go to &lt;code&gt;C:\laragon\etc\apps\adminer&lt;/code&gt; (or adjust to your laragon directory path) and you will find a single php file &lt;code&gt;index.php&lt;/code&gt;. You may want to delete or backup this file and replace it with &lt;code&gt;adminer-4.8.1.php&lt;/code&gt; and rename it into &lt;code&gt;index.php&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Accessing the new Adminer
&lt;/h2&gt;

&lt;p&gt;With PHP 8 running, now the new adminer app will be accessible in the same url and you can start to login into a database.&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%2Ff324k1x43jk3tfn44vmu.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%2Ff324k1x43jk3tfn44vmu.png" alt="adminer 4.8.1 login page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;as per adminer 4.6.3 or newer, you cannot login into a database with a blank password (&lt;a href="https://www.adminer.org/en/password/" rel="noopener noreferrer"&gt;ref&lt;/a&gt;), unlike the phpMyAdmin. So to use adminer, maybe you need to create a new database admin user with a password through mysql cli or phpmyadmin.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Good thing when you switch back to PHP 7.4, the latest adminer 4.8.1 still supported.&lt;/p&gt;

</description>
      <category>php</category>
      <category>laragon</category>
      <category>webdev</category>
      <category>windows</category>
    </item>
  </channel>
</rss>
