<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[tech with art]]></title><description><![CDATA[ini tentang teknologi berkembang dengan pesat, bukan sekadar hanya memahami tapi juga mendalami]]></description><link>https://blog.artera.my.id</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Apr 2026 16:15:57 GMT</lastBuildDate><atom:link href="https://blog.artera.my.id/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Arti Dari Sebuah Bersyukur : Orang Yang Hebat Adalah Yang Mereka Dapat Menerima Yang Sekarang]]></title><description><![CDATA[Assalamualaikum, pada kesempatan hari ini aku pengen bercerita sedikit tentang pelajaran yang baru-baru ini aku dapatkan yaitu tentang "Rasa Syukur", aku mengambil pelajaran ini dari banyak orang dan ]]></description><link>https://blog.artera.my.id/arti-dari-sebuah-bersyukur-orang-yang-hebat-adalah-yang-mereka-dapat-menerima-yang-sekarang</link><guid isPermaLink="true">https://blog.artera.my.id/arti-dari-sebuah-bersyukur-orang-yang-hebat-adalah-yang-mereka-dapat-menerima-yang-sekarang</guid><dc:creator><![CDATA[ahmad]]></dc:creator><pubDate>Fri, 03 Apr 2026 03:01:33 GMT</pubDate><content:encoded><![CDATA[<p>Assalamualaikum, pada kesempatan hari ini aku pengen bercerita sedikit tentang pelajaran yang baru-baru ini aku dapatkan yaitu tentang <strong>"Rasa Syukur"</strong>, aku mengambil pelajaran ini dari banyak orang dan berdasarkan dalil.</p>
<h1>Apa Itu Rasa Syukur ?</h1>
<p><strong>Syukur adalah pengakuan hati</strong>, ucapan lisan, dan tindakan anggota tubuh yang menunjukkan <strong>terima kasih kepada Allah</strong> atas segala nikmat-Nya, serta menggunakan nikmat tersebut untuk ketaatan, atau bisa di bilang "<strong>menerima</strong> apa yang terjadi <strong>pada saat ini</strong>" seperti ketika kita bersyukur karena kita masih memiliki anggota <strong>keluarga</strong> yang masih <strong>bersama kita saat ini</strong>.</p>
<p>Atau juga ketika kita di timpa musibah seperti <strong>pekerjaan yang menumpuk</strong> kita bersyukur jika kita masih bisa <strong>makan hari ini</strong> karena banyak orang di luar sana yang bekerja mati-matian hanya untuk sesuap nasi.</p>
<h1>Kenapa Kita Harus Selalu Bersyukur Dan Apa Perubahannya Dengan Diri Kita ?</h1>
<p>Banyak dari orang yang berpikir bahwa rasa syukur hanya akan membuat diri kita <em>tidak termotivasi</em>, <em>memperlambat tujuan masa depan</em> kita atau <em>menghambat cita-cita</em> kita, padahal nyatanya rasa <strong>syukur adalah penyelamat</strong> kita ketika mental kita terjatuhkan dengan <strong>ekspetasi yang terlalu tinggi</strong>, ketika diri kita seperti terjun ke dalam jurang yang dalam tapi rasa syukurlah yang membuat kita sadar bahwa <strong>hidup itu sangatlah abstrak kita tidak dapat mengaturnya</strong> kita hanya bisa menerima apa yang Allah berikan kepada kita.</p>
<p>Itulah pentingnya bersyukur atas segala sesuatu yang terjadi, kita <strong>harus menerima</strong> apa yang terjadi mau itu <strong>baik atau buruk</strong>, dan apa yang kita miliki saat ini <strong>kecil atau pun besar</strong>, ketika kita bisa menerima apa yang ada saat ini kita telah menjadi <strong>pemenang</strong> untuk diri kita sendiri, kita tidak khawatir apabila musibah datang pada diri kita insya allah, Allahu a'lam.</p>
<h1>Momentum Dalam Bersyukur</h1>
<p>Ya diantara kita sudah banyak dalam bersyukur dalam hal-hal yang indah untuk di lihat seperti kekayaan, aset, dan lain sebagainya, ya memang benda benda itu enak untuk dilihat tapi kita lupa dengan rasa syukur yang jarang terlihat oleh mata, dan jarang di pikirkan oleh pikiran kita, yaitu <strong>kesehatan</strong>, <strong>keluarga</strong>, dan <strong>waktu</strong>, sebagai mana dalam hadits:</p>
<blockquote>
<p>اغْتَنِمْ خَمْسًا قَبْلَ خَمْسٍ: شَبَابَكَ قَبْلَ هِرَمِكَ، وَصِحَّتَكَ قَبْلَ سَقَمِكَ، وَغِنَاءَكَ قَبْلَ فَقْرِكَ، وَفَرَاغَكَ قَبْلَ شُغْلِكَ، وَحَيَاتَكَ قَبْلَ مَوْتِكَ</p>
<p>*“Manfaatkanlah lima perkara sebelum datangnya lima perkara: masa mudamu sebelum masa tuamu, masa sehatmu sebelum sakitmu, masa kayamu sebelum miskinmu, waktu luangmu sebelum masa sibukmu dan masa hidupmu sebelum kematianmu.”<br />*<strong>(H.R. Ibnu Abi Ad-Dunya, Al-Hakim no. 7846, dan Al-Baihaqi no.10248)</strong></p>
</blockquote>
<p>Dalam hadist di sebutkan lima perkara, namun dua diantaranya bisa mewakili tiga poin yang akan di sebutkan, mari kita pahami ini lebih detail lagi.</p>
<h2>1. Kesehatan</h2>
<p><strong>Waktu tidur tidak konsisten</strong> dan berantakan, makan <strong>makanan yang tidak sehat</strong>, dan <strong>malas untuk bergerak</strong> lalu memilih untuk berdiam diri di dalam rumah itulah penyakit orang di zaman kita ini, semenjak datangnya era internet ini makin banyak orang <em>lupa</em> dengan kehidupan di <em>dunia nyata</em> dan lebih memilih <em>hidup di dunia maya</em> sehingga membuat <em>waktu tidur jadi tidak beraturan</em>, <em>membeli makanan</em> yang <em>viral</em> padahal <em>belum tentu baik</em> untuk kesehatan, atau <em>melihat konten</em> konten receh yang <em>tidak berfaedah</em> hanya untuk <em>kesenangan instan</em>.</p>
<p>Dari sini kita paham bahwa kita kurang bersyukur dengan nikmat sehat yang Allah berikan kepada kita, hingga kita <strong>lalai dalam menjaga batasan</strong>, ya sosial media itu sangat bermanfaat <strong>jika kita dapat mengunakanya secara positif</strong> tapi terkadang kita lalai untuk tidak berlebih lebihan dalam mengunakannya maka dari itu kita harus lebih bijak dan terarah.</p>
<h2>2. Keluarga Adalah Harta Yang Tidak Ternilai Harganya</h2>
<p><strong>Keluarga adalah harta yang paling berharga</strong>, bahkan sering dianggap sebagai kekayaan sejati. Meskipun bukan harta materi yang dapat diuangkan, keluarga dianggap sebagai <strong>aset tak ternilai</strong> yang memberikan kebahagiaan, dukungan, dan ketenangan bagi diri kita,</p>
]]></content:encoded></item><item><title><![CDATA[API With Hono For You Javascript Project]]></title><description><![CDATA[Assalamualaikum, Hello everyone i hope you good today, so i’ll explain you about Hono (similiar with next.js).
What is Hono?
Hono is framework to many language programming, is simple, fast, and easy, hono in web dev it is mean backend developer.
back...]]></description><link>https://blog.artera.my.id/api-with-hono-for-you-javascript-project</link><guid isPermaLink="true">https://blog.artera.my.id/api-with-hono-for-you-javascript-project</guid><category><![CDATA[hono]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[npm]]></category><dc:creator><![CDATA[ahmad]]></dc:creator><pubDate>Sat, 10 Jan 2026 03:57:31 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1768017990475/3bc217d0-3e1c-4d78-b5e9-3a49a1de3442.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Assalamualaikum, Hello everyone i hope you good today, so i’ll explain you about Hono (similiar with next.js).</p>
<h1 id="heading-what-is-hono">What is Hono?</h1>
<p>Hono is framework to many language programming, is simple, fast, and easy, hono in web dev it is mean <strong>backend developer</strong>.</p>
<p>backend developer is programmer who menages data and server for website</p>
<h1 id="heading-how-to-use-hono-in-javascript">How To Use Hono In Javascript</h1>
<p>First, initialization npm in your project</p>
<pre><code class="lang-powershell">npm init
</code></pre>
<p>then change type on package.json to “module”</p>
<p>next install hono with npm, yarn, or other ways.</p>
<pre><code class="lang-powershell">npm install hono @hono/node<span class="hljs-literal">-server</span>
</code></pre>
<p>then create file server.js and this code</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { Hono } <span class="hljs-keyword">from</span> <span class="hljs-string">"hono"</span>;
<span class="hljs-keyword">import</span> { serve } <span class="hljs-keyword">from</span> <span class="hljs-string">"@hono/node-server"</span>;

<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> Hono();

app.get(<span class="hljs-string">"/"</span>, <span class="hljs-function">(<span class="hljs-params">c</span>) =&gt;</span> {
    <span class="hljs-keyword">return</span> c.html(<span class="hljs-string">`
        &lt;h1&gt;Hallo Hono&lt;/h1&gt;
        &lt;p&gt;Rute yang tersedia:&lt;/p&gt;
        &lt;ul&gt;
        &lt;li&gt;&lt;a href="/text"&gt;/text&lt;/a&gt; - Menampilka Text biasa&lt;/li&gt;

        &lt;li&gt;&lt;a href="/json"&gt;/json&lt;/a&gt; - Menampilkan Output JSON&lt;/li&gt;
        &lt;/ul&gt;`</span>);
});

<span class="hljs-comment">// Rute untuk Text</span>
app.get(<span class="hljs-string">"/text"</span>, <span class="hljs-function">(<span class="hljs-params">c</span>) =&gt;</span> c.text(<span class="hljs-string">"ini adalah respons text biasa"</span>));

<span class="hljs-comment">// Rute untuk JSON</span>
app.get(<span class="hljs-string">"/json"</span>, <span class="hljs-function">(<span class="hljs-params">c</span>) =&gt;</span> c.json({<span class="hljs-attr">data</span> : <span class="hljs-string">"Hello Santri."</span>, <span class="hljs-attr">status</span>: <span class="hljs-string">"ok"</span>}));

serve({<span class="hljs-attr">fetch</span>: app.fetch, <span class="hljs-attr">port</span>:<span class="hljs-number">3100</span>}, <span class="hljs-function">(<span class="hljs-params">info</span>) =&gt;</span> {
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`server berjalan di http://localhost:<span class="hljs-subst">${info.port}</span>`</span>);
});
</code></pre>
<p>so now you can running the code</p>
<pre><code class="lang-powershell">node server.js
</code></pre>
<p>so this is result</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768275405849/4f16f4d1-5b5c-48d0-93d5-5bdfe3bca927.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-how-try-api">How Try API</h1>
<p>you can use postman, echo api, etc, for example i use echo api here.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768275984655/bc9f27d4-e966-42cf-a062-9ccbcbfe0d9c.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768276005321/eb52d9d1-ba69-4f09-98e3-6d045b1922a9.png" alt class="image--center mx-auto" /></p>
<p>and success…..</p>
<h1 id="heading-closing">Closing</h1>
<p>thanks for watching, see you next video…..</p>
]]></content:encoded></item><item><title><![CDATA[Database With Supabase Into Javascript]]></title><description><![CDATA[Assalamualaikum, Hello everyone i hope you good today, right now i’ll explain you about Database.
What Is Database?
easily database is a place for save a many data.
for example: in the class have a many student, in that data is not missing, the data ...]]></description><link>https://blog.artera.my.id/database-with-supabase-into-javascript</link><guid isPermaLink="true">https://blog.artera.my.id/database-with-supabase-into-javascript</guid><category><![CDATA[Databases]]></category><category><![CDATA[DrizzleORM]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[supabase]]></category><dc:creator><![CDATA[ahmad]]></dc:creator><pubDate>Sat, 10 Jan 2026 03:26:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1768018160091/dbed4774-f6e4-4104-a587-f525afb91005.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Assalamualaikum, Hello everyone i hope you good today, right now i’ll explain you about <strong>Database</strong>.</p>
<h1 id="heading-what-is-database">What Is Database?</h1>
<p>easily database is a <strong>place for save a many data</strong>.</p>
<p>for example: in the class have a many student, in that <strong>data is not missing</strong>, the data must put into <strong>Database to save</strong>.</p>
<h1 id="heading-database-with-supabase">Database With Supabase</h1>
<p>Supabase is a database based from <strong>“postgres sql”</strong> alias with <strong>SQLanguage</strong>, and how to use that with javascript?</p>
<p>lets go to explanation to use supabase for you project…</p>
<h1 id="heading-supabase-drizzle-and-javascript">Supabase, Drizzle, And Javascript</h1>
<p>Supabase : Database (the place of the data).</p>
<p>Drizzle : ORM (the connection between database and program).</p>
<p>Javascript : Basic language (language to create program).</p>
<p>Node.js : Package manager (installation Package).</p>
<p>First, initialization npm</p>
<pre><code class="lang-powershell">npm init <span class="hljs-literal">-y</span>
</code></pre>
<p>then you can install this:</p>
<pre><code class="lang-powershell">npm install drizzle<span class="hljs-literal">-orm</span> pg dotenv
npm install <span class="hljs-literal">-D</span> drizzle<span class="hljs-literal">-kit</span>
</code></pre>
<p>fill .env with url database (postgresql, mysql, etc) for example i use supabase</p>
<pre><code class="lang-javascript"> DATABASE_URL=<span class="hljs-string">"postgresql://postgres:[your-password]:6543/postgres"</span>
</code></pre>
<p>create file “schema.js“ then you can typing this:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> {
 pgTable, 
 serial, 
 varchar, 
} <span class="hljs-keyword">from</span> <span class="hljs-string">'drizzle-orm/pg-core'</span>;

<span class="hljs-keyword">export</span> <span class="hljs-keyword">const</span> note = pgTable(<span class="hljs-string">'latihan_catatan'</span>, {
    <span class="hljs-attr">id</span>: serial(<span class="hljs-string">'id'</span>).primaryKey(),
    <span class="hljs-attr">note</span>: varchar(<span class="hljs-string">'note'</span>, { <span class="hljs-attr">length</span>: <span class="hljs-number">256</span> }).notNull()
})
</code></pre>
<p>next you can create configuration between javascript and supabase with drizzle, check this code (drizzle.config.js):</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> <span class="hljs-string">'dotenv/config'</span>

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> {
    <span class="hljs-attr">dialect</span>: <span class="hljs-string">'postgresql'</span>,
    <span class="hljs-attr">schema</span>: <span class="hljs-string">'./schema.js'</span>,
    <span class="hljs-attr">out</span>: <span class="hljs-string">'./drizzle'</span>,
    <span class="hljs-attr">dbCredentials</span>: {
        <span class="hljs-attr">url</span>: process.env.DATABASE_URL,
        <span class="hljs-attr">ssl</span>: { <span class="hljs-attr">rejectUnauthorized</span>: <span class="hljs-literal">false</span> }
    }
}
</code></pre>
<p>then you can add new code in scripts on package.json</p>
<pre><code class="lang-javascript"><span class="hljs-string">"scripts"</span>: {
  <span class="hljs-string">"db:generate"</span>: <span class="hljs-string">"drizzle-kit generate"</span>,
  <span class="hljs-string">"db:migrate"</span>: <span class="hljs-string">"drizzle-kit migrate"</span>
},
</code></pre>
<p>explanation:</p>
<ul>
<li><p>generate: is mean generate <strong>Query SQL</strong> before execute in database.</p>
</li>
<li><p>migrate: is mean database start to execute the previous query (generate).</p>
</li>
</ul>
<p>after that, you can run on terminal</p>
<pre><code class="lang-powershell">npm run db:generate
npm run db:migrate
</code></pre>
<p>and right now you have table on database but empty</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768271219569/5a921eca-18d0-4c80-90cd-6b2675e81e84.png" alt class="image--center mx-auto" /></p>
<p>so you can fill data for your database with connecting into database with this code (index.js):</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { drizzle } <span class="hljs-keyword">from</span> <span class="hljs-string">'drizzle-orm/node-postgres'</span>;
<span class="hljs-keyword">import</span> { Pool } <span class="hljs-keyword">from</span> <span class="hljs-string">'pg'</span>;
<span class="hljs-keyword">import</span> * <span class="hljs-keyword">as</span> schema <span class="hljs-keyword">from</span> <span class="hljs-string">'./schema.js'</span>

<span class="hljs-keyword">const</span> pool = <span class="hljs-keyword">new</span> Pool({
    <span class="hljs-attr">connectionString</span>: process.env.DATABASE_URL,
    <span class="hljs-attr">ssl</span>: { <span class="hljs-attr">rejectUnauthorized</span>: <span class="hljs-literal">false</span> }
})

<span class="hljs-keyword">export</span> <span class="hljs-keyword">const</span> db = drizzle(pool, { schema })
</code></pre>
<p>next you can create new data in database:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> <span class="hljs-string">'dotenv/config'</span>;
<span class="hljs-keyword">import</span> { db } <span class="hljs-keyword">from</span> <span class="hljs-string">'./index.js'</span>;
<span class="hljs-keyword">import</span> { note } <span class="hljs-keyword">from</span> <span class="hljs-string">'./schema.js'</span>;

<span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">seed</span>(<span class="hljs-params"></span>) </span>{
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'Sedding database......'</span>)
    <span class="hljs-keyword">await</span> db.delete(note)

    <span class="hljs-keyword">const</span> note1 = <span class="hljs-keyword">await</span> db.insert(note).values({
        <span class="hljs-attr">note</span>: <span class="hljs-string">"Abdullah Juara Pertama Koki Bintang Lima Internasional dari Indonesia"</span>
    })
    .returning();

    <span class="hljs-built_in">console</span>.log(note1);
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'✅ Sedding completed!'</span>)
    process.exit(<span class="hljs-number">0</span>)
}

seed().catch(<span class="hljs-function">(<span class="hljs-params">err</span>) =&gt;</span> {
    <span class="hljs-built_in">console</span>.error(<span class="hljs-string">'❌ Sedding failed:'</span>, err);
    process.exit(<span class="hljs-number">1</span>)
})
</code></pre>
<p>then you can update again package.json</p>
<pre><code class="lang-powershell"><span class="hljs-string">"scripts"</span>: {
    <span class="hljs-string">"db:seed"</span>: <span class="hljs-string">"node seed.js"</span>
  }
</code></pre>
<p>so right now you have data now</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768271447750/9bd68f9b-e5c7-42a1-90dc-23cb6988b000.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-closing">Closing</h1>
<p>thanks for watching, see you next time……</p>
]]></content:encoded></item><item><title><![CDATA[Fetch with Dummy API]]></title><description><![CDATA[Assalamualaikum, hello everyone i hope very well today, and here i will explain you about fetch API Dummy with javascript, this API:
https://jsonplaceholder.typicode.com/users

but before that, here i will explain about front end
Why We Need Front En...]]></description><link>https://blog.artera.my.id/fetch-with-dummy-api</link><guid isPermaLink="true">https://blog.artera.my.id/fetch-with-dummy-api</guid><category><![CDATA[dummyjson]]></category><category><![CDATA[HTML5]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[fetch]]></category><category><![CDATA[api]]></category><dc:creator><![CDATA[ahmad]]></dc:creator><pubDate>Wed, 07 Jan 2026 06:38:53 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1767853857834/06694eee-d345-444e-bc2a-da7001f6134b.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Assalamualaikum, hello everyone i hope very well today, and here i will explain you about fetch API Dummy with javascript, this API:</p>
<pre><code class="lang-plaintext">https://jsonplaceholder.typicode.com/users
</code></pre>
<p>but before that, here i will explain about front end</p>
<h1 id="heading-why-we-need-front-end">Why We Need Front End?</h1>
<p>Frontend is a programmer who <strong>create user interface</strong> in website or app or other, and for example he is show data from database until can look users.</p>
<h1 id="heading-create-html">Create Html</h1>
<p>this code html for you:</p>
<pre><code class="lang-xml"><span class="hljs-meta">&lt;!DOCTYPE <span class="hljs-meta-keyword">html</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">html</span> <span class="hljs-attr">lang</span>=<span class="hljs-string">"en"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">"UTF-8"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"viewport"</span> <span class="hljs-attr">content</span>=<span class="hljs-string">"width=device-width, initial-scale=1.0"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">title</span>&gt;</span>Percobaan Fetch API<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>users<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"users-container"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span>
</code></pre>
<h1 id="heading-create-script">Create Script</h1>
<p>this code javascript for you:</p>
<pre><code class="lang-javascript"> <span class="hljs-keyword">const</span> usersContainer = <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">"users-container"</span>);

      <span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">fetchUsers</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-keyword">const</span> response = <span class="hljs-keyword">await</span> fetch(
          <span class="hljs-string">"https://jsonplaceholder.typicode.com/users"</span>
        )
          .then(<span class="hljs-function">(<span class="hljs-params">response</span>) =&gt;</span> response.json())
          .catch(<span class="hljs-function">(<span class="hljs-params">error</span>) =&gt;</span> <span class="hljs-built_in">console</span>.error(<span class="hljs-string">"Error fetching users:"</span>, error));
        <span class="hljs-built_in">console</span>.log(response);
        <span class="hljs-keyword">const</span> users = response;
        users.forEach(<span class="hljs-function">(<span class="hljs-params">user</span>) =&gt;</span> {
          <span class="hljs-keyword">const</span> userDiv = <span class="hljs-built_in">document</span>.createElement(<span class="hljs-string">"div"</span>);
          userDiv.innerHTML = <span class="hljs-string">`
            &lt;h2&gt;<span class="hljs-subst">${user.name}</span>&lt;/h2&gt;&lt;p&gt;Email: <span class="hljs-subst">${user.email}</span>&lt;/p&gt;&lt;p&gt;Phone: <span class="hljs-subst">${user.phone}</span>&lt;/p&gt;
            `</span>;
          usersContainer.appendChild(userDiv);
        });
      }
      fetchUsers();
</code></pre>
<h1 id="heading-explanation-about-code">Explanation About Code</h1>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767853686542/c9553ccc-d032-48e0-a216-818e6a1f57fb.png" alt class="image--center mx-auto" /></p>
<p>then here i will explain you about my code:</p>
<ul>
<li><p>we need <strong>container for data</strong>, this is <em>tag div with id ‘users-container’</em></p>
</li>
<li><p>on javascript <strong>create function</strong>, name is fetchUsers</p>
</li>
<li><p>then you <strong>get the data</strong> with fetch from this url: <a target="_blank" href="https://jsonplaceholder.typicode.com/users">https://jsonplaceholder.typicode.com/users</a> and put in variable response</p>
</li>
<li><p>so that is <strong>safety</strong> you put variable users for identify</p>
</li>
<li><p>for <strong>loop array</strong> users then you create new div to fill data</p>
</li>
<li><p>then the data already you put into container</p>
</li>
</ul>
<h1 id="heading-closing">Closing</h1>
<p>okay, maybe this is my project, thanks for watching good bye…………</p>
]]></content:encoded></item><item><title><![CDATA[CRUD Database dengan Supabase]]></title><description><![CDATA[Pendahuluan
Dalam dunia pemrograman, pemahaman mengenai manipulasi database adalah hal yang sangat penting, terutama bagi programmer pemula. Salah satu konsep dasar yang wajib dikuasai adalah CRUD, yaitu singkatan dari Create, Read, Update, dan Delet...]]></description><link>https://blog.artera.my.id/crud-database-dengan-supabase</link><guid isPermaLink="true">https://blog.artera.my.id/crud-database-dengan-supabase</guid><category><![CDATA[Databases]]></category><category><![CDATA[PostgreSQL]]></category><category><![CDATA[supabase]]></category><category><![CDATA[SQL]]></category><dc:creator><![CDATA[ahmad]]></dc:creator><pubDate>Wed, 29 Oct 2025 06:35:20 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1761719628483/3534856d-50dd-430e-b5d9-353f3e217791.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-pendahuluan"><strong>Pendahuluan</strong></h3>
<p>Dalam dunia pemrograman, pemahaman mengenai <strong>manipulasi database</strong> adalah hal yang sangat penting, terutama bagi programmer pemula. Salah satu konsep dasar yang wajib dikuasai adalah <strong>CRUD</strong>, yaitu singkatan dari <em>Create, Read, Update,</em> dan <em>Delete</em>. Konsep ini digunakan untuk mengelola data dalam sebuah database.</p>
<p>Presentasi ini disusun oleh <strong>Ahmad Afan Shobari</strong> dan menjelaskan implementasi CRUD menggunakan <strong>Supabase</strong>, sebuah platform backend modern berbasis <em>open-source</em> yang menjadi alternatif dari Firebase.</p>
<hr />
<h2 id="heading-apa-itu-supabase"><strong>Apa Itu Supabase?</strong></h2>
<p><strong>Supabase</strong> adalah platform pengembangan backend <em>open-source</em> yang dibuat oleh <strong>Paul Copplestone</strong> dan <strong>Ant Wilson</strong>. Supabase sering disebut sebagai <strong>alternatif dari Firebase</strong>, namun memiliki perbedaan mendasar:</p>
<ul>
<li><p><strong>Supabase menggunakan PostgreSQL</strong> sebagai basis datanya, sehingga mendukung query berbasis SQL.</p>
</li>
<li><p>Sedangkan <strong>Firebase tidak menggunakan SQL</strong>, karena berbasis <em>NoSQL database</em>.</p>
</li>
</ul>
<p>Supabase memberikan kemudahan bagi developer untuk membuat dan mengelola backend aplikasi tanpa harus membangun server secara manual. Fitur-fitur seperti autentikasi, penyimpanan data, dan API otomatis dapat diakses dengan mudah.</p>
<hr />
<h2 id="heading-pengenalan-crud"><strong>Pengenalan CRUD</strong></h2>
<p>CRUD adalah singkatan dari empat operasi dasar dalam pengelolaan data:</p>
<ol>
<li><p><strong>Create (Membuat data)</strong></p>
</li>
<li><p><strong>Read (Membaca data)</strong></p>
</li>
<li><p><strong>Update (Mengubah data)</strong></p>
</li>
<li><p><strong>Delete (Menghapus data)</strong></p>
</li>
</ol>
<p>Keempat fungsi ini menjadi fondasi utama dalam setiap aplikasi berbasis database, baik itu aplikasi web maupun mobile.</p>
<hr />
<h2 id="heading-fungsi-create-dalam-database"><strong>Fungsi CREATE dalam Database</strong></h2>
<p>Fungsi <strong>CREATE</strong> digunakan untuk membuat database maupun tabel baru.<br />Contoh syntax dasar SQL:</p>
<pre><code class="lang-pgsql"><span class="hljs-comment">-- Membuat database baru</span>
<span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">DATABASE</span> toko;

<span class="hljs-comment">-- Membuat tabel baru</span>
<span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> users (
    id <span class="hljs-type">SERIAL</span> <span class="hljs-keyword">PRIMARY KEY</span>,
    <span class="hljs-type">name</span> <span class="hljs-type">VARCHAR</span>(<span class="hljs-number">100</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-keyword">NULL</span>,
    umur <span class="hljs-type">INTEGER</span>,
    kelas <span class="hljs-type">INTEGER</span> <span class="hljs-keyword">NOT</span> <span class="hljs-keyword">NULL</span>
);
</code></pre>
<p>Dengan perintah ini, programmer dapat mendefinisikan struktur data yang akan digunakan dalam sistem.</p>
<hr />
<h2 id="heading-jenis-jenis-tipe-data"><strong>Jenis-Jenis Tipe Data</strong></h2>
<p>Dalam pembuatan tabel, setiap kolom memiliki tipe data yang berbeda sesuai dengan kebutuhan. Beberapa tipe data umum yang digunakan antara lain:</p>
<ul>
<li><p><strong>serial</strong> – nomor urut otomatis</p>
</li>
<li><p><strong>integer</strong> – bilangan bulat</p>
</li>
<li><p><strong>varchar</strong> – teks pendek dengan batas karakter</p>
</li>
<li><p><strong>date</strong> – tanggal</p>
</li>
<li><p><strong>boolean</strong> – nilai benar/salah</p>
</li>
<li><p><strong>text</strong> – teks panjang</p>
</li>
<li><p><strong>numeric</strong> – angka desimal</p>
</li>
</ul>
<p>Pemilihan tipe data yang tepat akan memengaruhi efisiensi dan kecepatan database.</p>
<hr />
<h2 id="heading-menambah-data-insert"><strong>Menambah Data: INSERT</strong></h2>
<p>Untuk menambahkan data ke dalam tabel, digunakan perintah <strong>INSERT</strong>.<br />Contoh syntax:</p>
<pre><code class="lang-pgsql"><span class="hljs-keyword">INSERT</span> <span class="hljs-keyword">INTO</span> users (<span class="hljs-type">name</span>, umur, kelas) <span class="hljs-keyword">VALUES</span>
(<span class="hljs-string">'Akyel Malino'</span>, <span class="hljs-number">18</span>, <span class="hljs-number">10</span>),
(<span class="hljs-string">'Alif Fauzan'</span>, <span class="hljs-number">17</span>, <span class="hljs-number">10</span>);
</code></pre>
<p>Perintah di atas akan menambahkan dua data baru ke dalam tabel <strong>users</strong>.</p>
<hr />
<h2 id="heading-mengambil-data-select"><strong>Mengambil Data: SELECT</strong></h2>
<p>Untuk menampilkan atau membaca data dari database, digunakan perintah <strong>SELECT</strong>.<br />Contoh penggunaan:</p>
<pre><code class="lang-pgsql"><span class="hljs-keyword">SELECT</span> <span class="hljs-type">name</span> <span class="hljs-keyword">FROM</span> users;           <span class="hljs-comment">-- Menampilkan hanya kolom name</span>
<span class="hljs-keyword">SELECT</span> * <span class="hljs-keyword">FROM</span> users;              <span class="hljs-comment">-- Menampilkan seluruh kolom</span>
<span class="hljs-keyword">SELECT</span> * <span class="hljs-keyword">FROM</span> users <span class="hljs-keyword">WHERE</span> umur &gt; <span class="hljs-number">17</span>;  <span class="hljs-comment">-- Menampilkan data dengan umur di atas 17</span>
</code></pre>
<p>Kata kunci <strong>WHERE</strong> digunakan untuk menyaring data berdasarkan kondisi tertentu.</p>
<hr />
<h2 id="heading-mengubah-data-update"><strong>Mengubah Data: UPDATE</strong></h2>
<p>Perintah <strong>UPDATE</strong> digunakan untuk mengubah data yang sudah ada.<br />Contohnya:</p>
<pre><code class="lang-pgsql"><span class="hljs-keyword">UPDATE</span> users <span class="hljs-keyword">SET</span> <span class="hljs-type">name</span> = <span class="hljs-string">'Halim Samodra'</span> <span class="hljs-keyword">WHERE</span> id = <span class="hljs-number">5</span>;
</code></pre>
<p>Tiga kata kunci penting yang harus diperhatikan dalam perintah ini adalah:</p>
<ul>
<li><p><strong>UPDATE</strong> – menentukan tabel yang ingin diubah</p>
</li>
<li><p><strong>SET</strong> – menentukan kolom dan nilai baru</p>
</li>
<li><p><strong>WHERE</strong> – menentukan baris data yang akan diperbarui</p>
</li>
</ul>
<hr />
<h2 id="heading-menghapus-data-delete"><strong>Menghapus Data: DELETE</strong></h2>
<p>Untuk menghapus data dari tabel, digunakan perintah <strong>DELETE</strong>.<br />Contoh syntax:</p>
<pre><code class="lang-pgsql"><span class="hljs-keyword">DELETE</span> <span class="hljs-keyword">FROM</span> users <span class="hljs-keyword">WHERE</span> id = <span class="hljs-number">3</span>;
</code></pre>
<p>Perintah di atas akan menghapus data dengan <strong>id = 3</strong> dari tabel <strong>users</strong>.<br />Hati-hati dalam menggunakan <strong>DELETE</strong>, karena data yang dihapus tidak dapat dikembalikan tanpa <em>backup</em>.</p>
<hr />
<h2 id="heading-kesimpulan"><strong>Kesimpulan</strong></h2>
<p>CRUD merupakan konsep fundamental dalam pengelolaan database dan menjadi dasar bagi semua aplikasi berbasis data. Supabase mempermudah penerapan konsep ini karena menyediakan backend yang terintegrasi dengan PostgreSQL serta antarmuka yang mudah digunakan.</p>
<p>Dengan memahami dan menguasai perintah dasar CRUD — <strong>Create</strong>, <strong>Read</strong>, <strong>Update</strong>, dan <strong>Delete</strong> — seorang programmer dapat membangun aplikasi yang efisien, dinamis, dan mudah dikembangkan.</p>
<hr />
<h3 id="heading-kata-penutup"><strong>Kata Penutup</strong></h3>
<blockquote>
<p>“Belajarlah karena dengan belajar kamu akan mendapatkan apa yang akan kamu dapatkan.”<br />— <em>Ahmad Afan Shobari</em></p>
</blockquote>
<hr />
]]></content:encoded></item><item><title><![CDATA[Outing Class 2025: Mengunjungi Perusahaan Kartu Elektronik (TKI) Di Salatiga]]></title><description><![CDATA[Assalamualaikum, perkenalkan nama saya Ahmad Afan Shobari santri PPQITA Al-mahir, pada kesempatan yang berbahagia ini kami seluruh pengurus pondok ppqita almahir mengadakan outing class yang insyallah kami akan pergi ke salatiga.
Keberangkatan.
Kami ...]]></description><link>https://blog.artera.my.id/outing-class-2025-mengunjungi-perusahaan-kartu-elektronik-tki-di-salatiga</link><guid isPermaLink="true">https://blog.artera.my.id/outing-class-2025-mengunjungi-perusahaan-kartu-elektronik-tki-di-salatiga</guid><category><![CDATA[outing class]]></category><category><![CDATA[Company]]></category><dc:creator><![CDATA[ahmad]]></dc:creator><pubDate>Tue, 30 Sep 2025 01:16:59 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1759195447076/870ff49b-d92e-4723-85bb-734709a7f110.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Assalamualaikum, perkenalkan nama saya Ahmad Afan Shobari santri PPQITA Al-mahir, pada kesempatan yang berbahagia ini kami seluruh pengurus pondok ppqita almahir mengadakan outing class yang insyallah kami akan pergi ke salatiga.</p>
<h1 id="heading-keberangkatan">Keberangkatan.</h1>
<p>Kami berangkat dari pondok jam 07:00 WIB dan menempuh perjalanan kurang lebih satu setengah jam atau sekitar sampai di jam 08:30 WIB, dalam perjalan kami melihat pemandangan yang begitu indah seperti pohon-pohon pinus, jalan pegunungan, dan pemandangan alam lainya dan itu membuat kami merasa lebih fresh &amp; berenergi 💪💪💪.</p>
<h1 id="heading-tki-tekno-kartu-indonesia">TKI (Tekno Kartu Indonesia).</h1>
<p>Sesampainya disana kami di bawa ke sebuah rumah kecil, awalnya bingung “perusahaan kok cuman rumah sepetak kaya gini, emang bisa ya nampung banyak karyawan?“ tapi selepas masuk baru terjawab ternyata perusahaanya ada di bersembunyi di balik rumah kecil itu (<strong>hidden place</strong>).</p>
<p>lalu kami duduk di tempat yang disediakan, kemudian kami diberikan banyak ilmu tentang teknologi perusahaan, seperti bahasa pemograman yang digunakan, bidang apa saja yang digunakan dalam sebuah perusahaan, dan lain-lainnya.</p>
<p>selain itu kami juga di bawa berkeliling area kerja seperti ruang pembuatan kartu, tim marketing, tim programming, dan lainya, banyak juga ilmu yang kami dapat terkait cyber security mengingat itu juga sedang populer di masa kini.</p>
<p>kemudian di jam 11:30 WIB kami pergi dari pt.TKI, untuk pergi ke tujuan selanjutnya sungguh <strong>pengalaman yang menyenangkan yang tidak akan terlupakan</strong>.</p>
<h1 id="heading-kopeng-park">Kopeng Park</h1>
<p>Kemudian siangnya kami melanjutkan perjalan kami ke <strong>kopeng park</strong> di sana kami hanya bermain dan menikmati suasana pegunungan,ada yang berenang, main bola, ngopi, ngoding, dll, dan lumayan asyik walau keadaan sedang hujan, but, that good, lalu kami pulang kepondok setelah perjalanan ini.</p>
<h1 id="heading-al-mazz">Al-mazz</h1>
<p>Kemudian sorenya kami mampir ke <strong>al-mazz fried chicken</strong> untuk makan sore dan itu adalah pengalaman cukup menarik dan mengenyangkan, apa lagi beberapa dari juga memesan untuk dibawa pulang, setelah sholat maghrib kami melanjutkan pulang kami dan kami sampai di pondok berpasan dengan adzan isya’</p>
<h1 id="heading-penutup">Penutup</h1>
<p>Ini adalah pengalaman pertama saya mengunjungi sebuah perusahaan IT, dan ini akan menjadi gambaran bagi saya untuk membuat perusahaan kedepanya, <em>Terima Kasih Telah Membaca.</em></p>
]]></content:encoded></item><item><title><![CDATA[Connecting API With EchoAPI At Vscode,]]></title><description><![CDATA[Assalamualaikum, hallo guys these we will try to use api on my project, lets start
Create Database
you can create project and install this
npm i drizzle-orm pg dotenv
npm i -d drizzle-kit

then you can create data base on postgres
//open on postgres ...]]></description><link>https://blog.artera.my.id/connecting-api-with-echoapi-at-vscode</link><guid isPermaLink="true">https://blog.artera.my.id/connecting-api-with-echoapi-at-vscode</guid><category><![CDATA[EchoAPI]]></category><category><![CDATA[hono]]></category><category><![CDATA[honojs]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[DrizzleORM]]></category><category><![CDATA[PG ]]></category><category><![CDATA[PostgreSQL]]></category><dc:creator><![CDATA[ahmad]]></dc:creator><pubDate>Thu, 25 Sep 2025 06:46:33 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1758851173314/e0470664-d7bb-4750-a0b2-459605b15892.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Assalamualaikum, hallo guys these we will try to use api on my project, lets start</p>
<h1 id="heading-create-database">Create Database</h1>
<p>you can create project and install this</p>
<pre><code class="lang-bash">npm i drizzle-orm pg dotenv
npm i -d drizzle-kit
</code></pre>
<p>then you can create data base on postgres</p>
<pre><code class="lang-bash">//open on postgres ubuntu
sudo -i -u postgres
psql

//open on windows
psql -U postgres

//create database
create database pesantren
</code></pre>
<h1 id="heading-connecting-database">Connecting Database</h1>
<p>then you can create file <code>.env</code> ant typing this</p>
<pre><code class="lang-javascript"><span class="hljs-comment">//for local host</span>
DATABASE_URL=<span class="hljs-string">"postgresql://postgres:postgres@localhost:5432/pesantren"</span>

<span class="hljs-comment">//for online database, exemple: supabase and anymore</span>
DATABASE_URL=<span class="hljs-string">"postgresql://postgres.yieipycgkveuhreikdyy:[YOUR-PASSWORD]@aws-1-ap-southeast-1.pooler.supabase.com:6543/postgres?sslmode=require"</span>
</code></pre>
<p>then you can create schema or table on directory <code>db/schema.js</code></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { pgTable, serial, varchar, timestamp } <span class="hljs-keyword">from</span> <span class="hljs-string">'drizzle-orm/pg-core'</span>;

<span class="hljs-keyword">export</span> <span class="hljs-keyword">const</span> santri = pgTable(<span class="hljs-string">'student'</span>, {
  <span class="hljs-attr">id</span>: serial(<span class="hljs-string">'id'</span>).primaryKey(),
  <span class="hljs-attr">nama</span>: varchar(<span class="hljs-string">'nama'</span>, { <span class="hljs-attr">length</span>: <span class="hljs-number">256</span> }).notNull(),
  <span class="hljs-attr">kelas</span>: varchar(<span class="hljs-string">'kelas'</span>, { <span class="hljs-attr">length</span>: <span class="hljs-number">50</span> }),
  <span class="hljs-attr">createdAt</span>: timestamp(<span class="hljs-string">'created_at'</span>).defaultNow().notNull(),
});
</code></pre>
<p>then you can create connecting schema and database on <code>drizzle.config.js</code></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> <span class="hljs-string">'dotenv/config'</span>;

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> {
  <span class="hljs-attr">dialect</span>: <span class="hljs-string">'postgresql'</span>,
  <span class="hljs-attr">schema</span>: <span class="hljs-string">'./db/schema.js'</span>,
  <span class="hljs-attr">out</span>: <span class="hljs-string">'./drizzle'</span>,
  <span class="hljs-attr">dbCredentials</span>: {
    <span class="hljs-attr">url</span>: process.env.DATABASE_URL,
  },
};
</code></pre>
<p>then you can git init and add this on <code>package.json</code> on scripts</p>
<pre><code class="lang-javascript"><span class="hljs-string">"scripts"</span>: {
  <span class="hljs-string">"db:generate"</span>: <span class="hljs-string">"drizzle-kit generate"</span>,
  <span class="hljs-string">"db:migrate"</span>: <span class="hljs-string">"drizzle-kit migrate"</span>,
  <span class="hljs-string">"dev"</span>: <span class="hljs-string">"node --watch server.js"</span>,
  <span class="hljs-string">"start"</span>:<span class="hljs-string">"node server.js"</span>
}
</code></pre>
<p>then you can running migration database</p>
<pre><code class="lang-bash">npm run db:generate   <span class="hljs-comment"># generate file migrasi</span>
npm run db:migrate    <span class="hljs-comment"># eksecution migrasi (create tabel)</span>
</code></pre>
<p>then you can check on your database</p>
<pre><code class="lang-pgsql"><span class="hljs-keyword">SELECT</span> * <span class="hljs-keyword">FROM</span> student;
</code></pre>
<p>then you can setup early data on <code>db/index.js</code></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { drizzle } <span class="hljs-keyword">from</span> <span class="hljs-string">'drizzle-orm/node-postgres'</span>;
<span class="hljs-keyword">import</span> { Pool } <span class="hljs-keyword">from</span> <span class="hljs-string">'pg'</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">'dotenv/config'</span>;
<span class="hljs-keyword">import</span> * <span class="hljs-keyword">as</span> schema <span class="hljs-keyword">from</span> <span class="hljs-string">'./schema.js'</span>;

<span class="hljs-keyword">const</span> pool = <span class="hljs-keyword">new</span> Pool({
  <span class="hljs-attr">connectionString</span>: process.env.DATABASE_URL,
});

<span class="hljs-keyword">export</span> <span class="hljs-keyword">const</span> db = drizzle(pool, { schema });
</code></pre>
<p>then create <code>db/seed.js</code></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { db } <span class="hljs-keyword">from</span> <span class="hljs-string">'./index.js'</span>;
<span class="hljs-keyword">import</span> { santri } <span class="hljs-keyword">from</span> <span class="hljs-string">'./schema.js'</span>;

<span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">main</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">await</span> db.insert(santri).values([
    { <span class="hljs-attr">id</span>: <span class="hljs-number">1</span>, <span class="hljs-attr">nama</span>: <span class="hljs-string">'Ahmad Fauzi'</span>, <span class="hljs-attr">kelas</span>: <span class="hljs-number">11</span> },
    { <span class="hljs-attr">id</span>: <span class="hljs-number">2</span>, <span class="hljs-attr">nama</span>: <span class="hljs-string">'Muhammad Rizky'</span>, <span class="hljs-attr">kelas</span>: <span class="hljs-number">12</span> },
    { <span class="hljs-attr">id</span>: <span class="hljs-number">3</span>, <span class="hljs-attr">nama</span>: <span class="hljs-string">'Alwi Saputra'</span>, <span class="hljs-attr">kelas</span>: <span class="hljs-number">10</span> },
  ]);

  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">' Data santri berhasil di-seed'</span>);
}

main();
</code></pre>
<p>then running <code>seed.js</code></p>
<pre><code class="lang-bash">node db.seed.js
</code></pre>
<h1 id="heading-use-api-with-echoapi">Use API With EchoAPI</h1>
<p>then you can setup api, in this segmen we will use hono</p>
<pre><code class="lang-bash">npm i hono @hono/node-server
</code></pre>
<p>then create file server on <code>server.js</code></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { Hono } <span class="hljs-keyword">from</span> <span class="hljs-string">'hono'</span>;
<span class="hljs-keyword">import</span> { serve } <span class="hljs-keyword">from</span> <span class="hljs-string">'@hono/node-server'</span>;
<span class="hljs-keyword">import</span> { db } <span class="hljs-keyword">from</span> <span class="hljs-string">'./db/index.js'</span>;
<span class="hljs-keyword">import</span> { santri } <span class="hljs-keyword">from</span> <span class="hljs-string">'./db/schema.js'</span>;
<span class="hljs-keyword">import</span> { eq } <span class="hljs-keyword">from</span> <span class="hljs-string">'drizzle-orm'</span>;

<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> Hono();

<span class="hljs-comment">//[C]Create</span>
app.post(<span class="hljs-string">'/api/santri'</span>, <span class="hljs-keyword">async</span> (c) =&gt; {
    <span class="hljs-keyword">const</span> data = <span class="hljs-keyword">await</span> c.req.json();
    <span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> db.insert(santri).values(data).returning();
    <span class="hljs-keyword">return</span> c.json({<span class="hljs-attr">error</span>: <span class="hljs-literal">false</span>, <span class="hljs-attr">data</span>: result[<span class="hljs-number">0</span>]}, <span class="hljs-number">201</span>);
});

app.get(<span class="hljs-string">'/api/santri'</span>, <span class="hljs-keyword">async</span> (c) =&gt; {
    <span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> db.query.santri.findMany()
    <span class="hljs-keyword">return</span> c.json({<span class="hljs-attr">error</span>: <span class="hljs-literal">false</span>, <span class="hljs-attr">data</span>: result})
});

app.get(<span class="hljs-string">'/api/santri/:id'</span>, <span class="hljs-keyword">async</span> (c) =&gt; {
    <span class="hljs-keyword">const</span> id = <span class="hljs-built_in">Number</span>(c.req.param(<span class="hljs-string">'id'</span>));
    <span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> db.query.santri.findFirst({
        <span class="hljs-attr">where</span>: eq(santri.id, id)
    })
    <span class="hljs-keyword">if</span> (!result) <span class="hljs-keyword">return</span> c.json({<span class="hljs-attr">error</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">massage</span>: <span class="hljs-string">'Not found'</span>}, <span class="hljs-number">404</span>);
    <span class="hljs-keyword">return</span> c.json({<span class="hljs-attr">error</span>: <span class="hljs-literal">false</span>, <span class="hljs-attr">data</span>:result})
});

app.put(<span class="hljs-string">'/api/santri/:id'</span>, <span class="hljs-keyword">async</span> (c) =&gt; {
    <span class="hljs-keyword">const</span> id = <span class="hljs-built_in">Number</span>(c.req.param(<span class="hljs-string">'id'</span>));
    <span class="hljs-keyword">const</span> data = <span class="hljs-keyword">await</span> c.req.json();
    <span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> db.update(santri).set(data).where(eq(santri.id, id)).returning();

    <span class="hljs-keyword">if</span> (!result) <span class="hljs-keyword">return</span> c.json({<span class="hljs-attr">error</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">massage</span>: <span class="hljs-string">'Not found'</span>}, <span class="hljs-number">404</span>);
    <span class="hljs-keyword">return</span> c.json({<span class="hljs-attr">error</span>: <span class="hljs-literal">false</span>, <span class="hljs-attr">data</span>:result[<span class="hljs-number">0</span>]})
});

app.delete(<span class="hljs-string">'/api/santri/:id'</span>, <span class="hljs-keyword">async</span> (c) =&gt; {
    <span class="hljs-keyword">const</span> id = <span class="hljs-built_in">Number</span>(c.req.param(<span class="hljs-string">'id'</span>));
    <span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> db.delete(santri).where(eq(santri.id, id)).returning();
    <span class="hljs-keyword">if</span> (result.length === <span class="hljs-number">0</span>){
        <span class="hljs-keyword">return</span> c.json({<span class="hljs-attr">error</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">massage</span>: <span class="hljs-string">'Not found'</span>}, <span class="hljs-number">404</span>);
    }
    <span class="hljs-keyword">return</span> c.json({<span class="hljs-attr">error</span>: <span class="hljs-literal">false</span>, <span class="hljs-attr">massage</span>: <span class="hljs-string">`delete id <span class="hljs-subst">${id}</span>`</span>});
});

app.get(<span class="hljs-string">'/'</span>, <span class="hljs-keyword">async</span> (c) =&gt; {
    <span class="hljs-keyword">return</span> c.html(
        <span class="hljs-string">`&lt;div&gt;&lt;h1&gt;Doc API&lt;/h1&gt;&lt;/div&gt;&lt;a href="/api/santri" target="_parent"&gt;/api/santri&lt;/a&gt;`</span>
    );
});

serve({ <span class="hljs-attr">fetch</span>: app.fetch, <span class="hljs-attr">port</span>: <span class="hljs-number">5429</span>});
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">`✅ API running at http://localhost:5429`</span>);
</code></pre>
<p>then you can running <code>server.js</code> then active</p>
<pre><code class="lang-javascript">node server.js
</code></pre>
<p>then we need use api, this is echoAPI (extension on Visual Studio Code)</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758852271402/e4ec4619-7205-463e-a768-b44cbb4131f2.png" alt class="image--center mx-auto" /></p>
<p>then setting this for post method</p>
<pre><code class="lang-javascript">http:<span class="hljs-comment">//localhost:5429/api/santri</span>
{
    <span class="hljs-string">"id"</span>:<span class="hljs-number">4</span>,
    <span class="hljs-string">"nama"</span>:<span class="hljs-string">"Ahmad"</span>,
    <span class="hljs-string">"kelas"</span>:<span class="hljs-string">"x-b"</span>
}
</code></pre>
<p>and this result the running or after send</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758852375321/738402ca-c12b-447a-af96-d3d9637a4e64.png" alt class="image--center mx-auto" /></p>
<p>then we <strong>get all data</strong> you can use this, get method</p>
<pre><code class="lang-javascript">http:<span class="hljs-comment">//localhost:5429/api/santri</span>
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758852563975/80d07ae3-404a-4c2b-82c0-a23ece631026.png" alt class="image--center mx-auto" /></p>
<p>then get some data use this,</p>
<pre><code class="lang-javascript">http:<span class="hljs-comment">//localhost:5429/api/santri/find_id</span>
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758852627892/20829823-985d-4855-b240-efcd9fa1f972.png" alt class="image--center mx-auto" /></p>
<p>then use this for update data, put method</p>
<pre><code class="lang-javascript">http:<span class="hljs-comment">//localhost:5429/api/santri/find_id</span>
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758852677957/62d24c4a-d877-4fde-9737-214a856b5f34.png" alt class="image--center mx-auto" /></p>
<p>then use this for delete data, delete method</p>
<pre><code class="lang-javascript">http:<span class="hljs-comment">//localhost:5429/api/santri/find_id</span>
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758852723662/dbd19a56-1f1a-4886-a72d-dbf9894152ca.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-closing">Closing</h1>
<p>thanks for watching</p>
]]></content:encoded></item><item><title><![CDATA[How to connect a Database With JavaScript: Creating a Simple CRUD System With JavaScript]]></title><description><![CDATA[Assalamualaikum, hello guys in this article we will connect a database with javascript, than create a simple crud system with javascript.
1. Install Package on NPM
First, we need some a package:

pg

readline/promise (default available in node.js)


...]]></description><link>https://blog.artera.my.id/how-to-connect-a-database-with-javascript-creating-a-simple-crud-system-with-javascript</link><guid isPermaLink="true">https://blog.artera.my.id/how-to-connect-a-database-with-javascript-creating-a-simple-crud-system-with-javascript</guid><category><![CDATA[crud]]></category><category><![CDATA[CRUD Operations]]></category><category><![CDATA[Databases]]></category><category><![CDATA[psql connect to database]]></category><category><![CDATA[Node.js]]></category><dc:creator><![CDATA[ahmad]]></dc:creator><pubDate>Sat, 20 Sep 2025 13:50:01 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1758377023000/16414e03-aed0-4aca-a3c5-a80d7b79d19b.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Assalamualaikum, hello guys in this article we will connect a database with javascript, than create a simple crud system with javascript.</p>
<h1 id="heading-1-install-package-on-npm">1. Install Package on NPM</h1>
<p>First, we need some a package:</p>
<ul>
<li><p>pg</p>
</li>
<li><p>readline/promise (default available in node.js)</p>
</li>
</ul>
<pre><code class="lang-bash">npm i pg
npm i readline/promise (optional)
</code></pre>
<h1 id="heading-2-create-database-on-postgres">2. Create DataBase on Postgres</h1>
<p>Second, we need database to save data from query</p>
<pre><code class="lang-bash">create database school;

create table students (
id serial primary key,
name varchar(100) not null,
address varchar(150) not null
);
</code></pre>
<h1 id="heading-3-create-a-file-amp-crud-with-the-file">3. Create a File &amp; CRUD with the file</h1>
<h2 id="heading-31-create-a-file-to-save-package-pg">3.1 Create a File to Save Package Pg</h2>
<p>Third, we will create a file name is <code>db.js</code> on folder utils, and add this code:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> pg <span class="hljs-keyword">from</span> <span class="hljs-string">'pg'</span>;

<span class="hljs-keyword">const</span> pool = <span class="hljs-keyword">new</span> pg.Pool({
  <span class="hljs-attr">user</span>: <span class="hljs-string">'postgres'</span>,
  <span class="hljs-attr">host</span>: <span class="hljs-string">'localhost'</span>,
  <span class="hljs-attr">database</span>: <span class="hljs-string">'school'</span>,
  <span class="hljs-attr">password</span>: <span class="hljs-string">'&lt;your_password&gt;'</span>,
  <span class="hljs-attr">port</span>: <span class="hljs-number">5432</span>,
});

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> pool;
</code></pre>
<h2 id="heading-32-create-a-file-to-save-package-readline">3.2 Create a File to Save Package Readline</h2>
<p>Fourth, we will create a file name is rideline.js on folder utils, and add this code:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> readline <span class="hljs-keyword">from</span> <span class="hljs-string">'node:readline/promises'</span>;
<span class="hljs-keyword">import</span> {stdin <span class="hljs-keyword">as</span> input, stdout <span class="hljs-keyword">as</span> output } <span class="hljs-keyword">from</span> <span class="hljs-string">'node:process'</span>;

<span class="hljs-keyword">const</span> rl = readline.createInterface({input, output})

<span class="hljs-keyword">export</span> <span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">inputData</span>(<span class="hljs-params">question</span>)</span>{
    <span class="hljs-keyword">const</span> answer = <span class="hljs-keyword">await</span> rl.question(<span class="hljs-string">`<span class="hljs-subst">${question}</span>`</span>)
    <span class="hljs-keyword">return</span> answer.trim()
}

<span class="hljs-keyword">export</span> <span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">closeInput</span>(<span class="hljs-params"></span>) </span>{
    <span class="hljs-keyword">await</span> rl.close();
}
</code></pre>
<h2 id="heading-33-create-system-create-data">3.3 Create System Create Data</h2>
<p>Fifth, we will create a file to system create data for database name file is <code>1-create.js</code>, add this code:</p>
<pre><code class="lang-javascript"><span class="hljs-comment">//file 1-create.js</span>
<span class="hljs-keyword">import</span> pool <span class="hljs-keyword">from</span> <span class="hljs-string">'./utils/db.js'</span>;
<span class="hljs-keyword">import</span> {inputData, closeInput} <span class="hljs-keyword">from</span> <span class="hljs-string">'./utils/app.js'</span>

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">addStudent</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">try</span> {
    <span class="hljs-keyword">const</span> queryText = <span class="hljs-string">`
    INSERT INTO students(name, address) VALUES($1, $2) RETURNING *
    `</span>;
    <span class="hljs-keyword">const</span> res = <span class="hljs-keyword">await</span> pool.query(
    queryText, 
    [studentName, studentAddress]
    );

    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'new student success add on database:'</span>);
    <span class="hljs-built_in">console</span>.log(res.rows[<span class="hljs-number">0</span>]); 
  } <span class="hljs-keyword">catch</span> (err) {
    <span class="hljs-built_in">console</span>.error(<span class="hljs-string">'failed add student data:'</span>, err.stack);
  } <span class="hljs-keyword">finally</span> {
    <span class="hljs-keyword">await</span> pool.end();
    <span class="hljs-keyword">await</span> closeInput();
  }
}

addStudent();
</code></pre>
<p>when you running in terminal, display this:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758374615366/589fd786-26c5-4bee-bf6f-3f3fc32aaa83.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-24-create-system-read-data">2.4 Create System Read Data</h2>
<p>Sixth, we will create a file to system read data for database name file is <code>2-read.js</code>, add this code:</p>
<pre><code class="lang-javascript"><span class="hljs-comment">//file 2-read.js</span>
<span class="hljs-keyword">import</span> pool <span class="hljs-keyword">from</span> <span class="hljs-string">'./utils/db.js'</span>;
<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">seeStudent</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">try</span> {
    <span class="hljs-keyword">const</span> res = <span class="hljs-keyword">await</span> pool.query(<span class="hljs-string">'
    SELECT * FROM student ORDER BY id ASC
    '</span>);

    <span class="hljs-keyword">if</span> (res.rows.length === <span class="hljs-number">0</span>) {
      <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'not found student data.'</span>);
      <span class="hljs-keyword">return</span>;
    }

    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'data student:'</span>);
    res.rows.forEach(<span class="hljs-function"><span class="hljs-params">santri</span> =&gt;</span> {
      <span class="hljs-built_in">console</span>.log(
    <span class="hljs-string">`ID: <span class="hljs-subst">${santri.id}</span>, 
    Name: <span class="hljs-subst">${student.name}</span>, 
    address: <span class="hljs-subst">${student.address}</span>`</span>);
    });

  } <span class="hljs-keyword">catch</span> (err) {
    <span class="hljs-built_in">console</span>.error(<span class="hljs-string">'failed ride data student:'</span>, err.stack);
  } 
}

seeStudent();
</code></pre>
<p>when we running this, display this:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758375200409/a1f1edb8-4418-4c37-80e2-2a786eb59a57.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-35-create-system-update-data">3.5 Create System Update Data</h2>
<p>Seventh, we will create a file to system update data for database name file is <code>3-update.js</code>, add this code:</p>
<pre><code class="lang-javascript"><span class="hljs-comment">//file 3-update.js</span>
<span class="hljs-keyword">import</span> pool <span class="hljs-keyword">from</span> <span class="hljs-string">'./utils/db.js'</span>;
<span class="hljs-keyword">import</span> {inputData, closeInput} <span class="hljs-keyword">from</span> <span class="hljs-string">'./utils/app.js'</span>

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">updateStudent</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">try</span> {
    <span class="hljs-keyword">const</span> res = <span class="hljs-keyword">await</span> pool.query(
    <span class="hljs-string">'UPDATE students SET nama = $1, alamat = $2 WHERE id = $3'</span>, 
    [choice_name, choice_address, choice_id]
    );

    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'new student success add on database:'</span>);
    <span class="hljs-built_in">console</span>.log(res.rows[choice_id]);
  } <span class="hljs-keyword">catch</span> (err) {
    <span class="hljs-built_in">console</span>.error(<span class="hljs-string">'failed update data student:'</span>, err.stack);
  }
}

updateStudent();
</code></pre>
<p>when we running this, display this:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758375692215/21227a07-ddd3-4648-b84d-fb88e9404386.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-36-create-system-delete-data">3.6 Create System Delete Data</h2>
<p>Eighth, we will create a file to system update data for database name file is <code>4-delete.js</code>, add this code:</p>
<pre><code class="lang-javascript"><span class="hljs-comment">//file 4-delete.js</span>
<span class="hljs-keyword">import</span> pool <span class="hljs-keyword">from</span> <span class="hljs-string">'./utils/db.js'</span>;
<span class="hljs-keyword">import</span> {inputData, closeInput} <span class="hljs-keyword">from</span> <span class="hljs-string">'./utils/app.js'</span>

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">deleteStudent</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">try</span> {

    <span class="hljs-keyword">const</span> queryText = <span class="hljs-keyword">await</span> pool.query(<span class="hljs-string">'
    DELETE FROM students WHERE id = $1'</span>, [choice_id]
    );

    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'new student success add on database:'</span>);
  } <span class="hljs-keyword">catch</span> (err) {
    <span class="hljs-built_in">console</span>.error(<span class="hljs-string">'failed delete data student:'</span>, err.stack);
  } 
}

deleteStudent();
</code></pre>
<p>when we running this, display this:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758376030359/1ca54cdb-1ce8-4470-b8cf-05314addcfd1.png" alt class="image--center mx-auto" /></p>
<p>last, we will create a file to running all previes file</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { inputData, closeInput } <span class="hljs-keyword">from</span> <span class="hljs-string">'./utils/readline.js'</span>;
<span class="hljs-keyword">import</span> pool <span class="hljs-keyword">from</span> <span class="hljs-string">'./utils/db.js'</span>;
<span class="hljs-keyword">import</span> addStudent <span class="hljs-keyword">from</span> <span class="hljs-string">'./1-create.js'</span>;
<span class="hljs-keyword">import</span> seeStudent <span class="hljs-keyword">from</span> <span class="hljs-string">'./2-read.js'</span>;
<span class="hljs-keyword">import</span> updateStudent <span class="hljs-keyword">from</span> <span class="hljs-string">'./3-update.js'</span>;
<span class="hljs-keyword">import</span> deleteStudent <span class="hljs-keyword">from</span> <span class="hljs-string">'./4-delete.js'</span>;

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">showMenu</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"\n=== DATEABASE SERVICES ==="</span>);
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"1) Create Database"</span>);
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"2) Read Database"</span>);
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"3) Update Database"</span>);
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"4) Delete Database"</span>);
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"0) Close Shop"</span>);
}

<span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">askCreate</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> nameStudent = <span class="hljs-keyword">await</span> inputData(<span class="hljs-string">"student name?"</span>);
  <span class="hljs-keyword">const</span> addressStudent = <span class="hljs-keyword">await</span> inputData(<span class="hljs-string">'student address?'</span>);
  <span class="hljs-keyword">await</span> tambahSantri(nameStudent, addressStudent);
}


<span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">askUpdate</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> choice_id = <span class="hljs-keyword">await</span> inputData(<span class="hljs-string">"how much id update:"</span>);
  <span class="hljs-keyword">const</span> choice_name = <span class="hljs-keyword">await</span> inputData(<span class="hljs-string">"new name?:"</span>)
  <span class="hljs-keyword">const</span> choice_address = <span class="hljs-keyword">await</span> inputData(<span class="hljs-string">"new address?"</span>)
  <span class="hljs-keyword">await</span> updateSantri(choice_id, choice_name, choice_address);
}

<span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">askDelete</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> choice_id = <span class="hljs-keyword">await</span> inputData(<span class="hljs-string">"how much id will delete:"</span>);
  <span class="hljs-keyword">await</span> deleteSantri(choice_id);
}

<span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">serviceLoop</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">while</span> (<span class="hljs-literal">true</span>) {
    showMenu();
    <span class="hljs-keyword">const</span> choice = <span class="hljs-keyword">await</span> inputData(<span class="hljs-string">"Choose a CRUD Database (number): "</span>);

    <span class="hljs-keyword">switch</span> (choice) {
      <span class="hljs-keyword">case</span> <span class="hljs-string">"1"</span>:
        <span class="hljs-keyword">await</span> askCreate();
        <span class="hljs-keyword">break</span>;

      <span class="hljs-keyword">case</span> <span class="hljs-string">"2"</span>:
        <span class="hljs-keyword">await</span> seeStudent()
        <span class="hljs-keyword">break</span>;

      <span class="hljs-keyword">case</span> <span class="hljs-string">"3"</span>:
        <span class="hljs-keyword">await</span> askUpdate()
        <span class="hljs-keyword">break</span>;

      <span class="hljs-keyword">case</span> <span class="hljs-string">"4"</span>:
        <span class="hljs-keyword">await</span> askDelete()
        <span class="hljs-keyword">break</span>

      <span class="hljs-keyword">case</span> <span class="hljs-string">"0"</span>:
        <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"\nShop closed. Thank you.\n"</span>);
        <span class="hljs-keyword">await</span> pool.end()
        <span class="hljs-keyword">await</span> closeInput()
        <span class="hljs-keyword">return</span>;

      <span class="hljs-keyword">default</span>:
        <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Invalid choice. Please try again.\n"</span>);
    }
  }
}

serviceLoop();
</code></pre>
<p>this a display from <code>app.js</code></p>
<p><img src alt class="image--center mx-auto" /></p>
<h1 id="heading-4-publish-into-github">4. Publish Into Github</h1>
<p>then we will publish this project into github</p>
<p>first we create new repository on github</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758508544038/c2624283-6abc-420e-b2b9-41a08afa6ce0.png" alt class="image--center mx-auto" /></p>
<p>this a display from we repository</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758508687539/03429d72-8a73-4699-b6ca-d915c66e389b.png" alt class="image--center mx-auto" /></p>
<p>then we need clone repository into we the device, copy ssh</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758508608249/fb29f84b-1833-4094-8fc7-3a018295d078.png" alt class="image--center mx-auto" /></p>
<p>than we paste to directory which we need, example this</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758508769521/909e480b-1d66-4cfe-9ee3-c335eabae8b9.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-bash">git <span class="hljs-built_in">clone</span> <span class="hljs-string">"use the paste"</span>
</code></pre>
<p>than we will move some previous file it into this repository</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758509133345/0c89d1d1-198d-4658-b8a0-5a9458dd137a.png" alt class="image--center mx-auto" /></p>
<p>than we can commit and push to repository</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758509854957/af1e8507-975e-4164-87f4-faaff61bee73.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758509877810/dccdf0a3-a808-4c0e-a47d-c550c3bdf7ff.png" alt class="image--center mx-auto" /></p>
<p>finally, we success to create connecting database project</p>
<h1 id="heading-4-closing">4. Closing</h1>
<p>thanks for watching, and see you next time</p>
]]></content:encoded></item><item><title><![CDATA[Learn About Flowchart With Draw.io and How to Create Simple Project]]></title><description><![CDATA[Assalamualaikum, hello guys welcome back to my article and these we will learn about Flowcahrt with Draw.io, let’s goo!!!!
Problem
Imagine you are a programmer tasked with designing an online registration flow for new students. Create a flowchart for...]]></description><link>https://blog.artera.my.id/learn-about-flowchart-with-drawio-and-how-to-create-simple-project</link><guid isPermaLink="true">https://blog.artera.my.id/learn-about-flowchart-with-drawio-and-how-to-create-simple-project</guid><category><![CDATA[flowcharts]]></category><category><![CDATA[draw.io]]></category><dc:creator><![CDATA[ahmad]]></dc:creator><pubDate>Thu, 18 Sep 2025 02:14:03 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1758162256740/054327d3-3ff2-4312-a311-01f32b01f65a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Assalamualaikum, hello guys welcome back to my article and these we will learn about Flowcahrt with Draw.io, let’s goo!!!!</p>
<h1 id="heading-problem">Problem</h1>
<p>Imagine you are a programmer tasked with designing an online registration flow for new students. Create a flowchart for this process in <a target="_blank" href="http://draw.io">draw.io</a> based on the scenario below.</p>
<p>Scenario &amp; Workflow:</p>
<ul>
<li><p>The process begins when prospective students open the registration page on the boarding school website.</p>
</li>
<li><p>Prospective students then fill out a registration form containing their name, address, school of origin, etc.</p>
</li>
<li><p>After the “Register” button is clicked, the system will validate whether all required data has been filled in completely.</p>
</li>
<li><p>There will be a check (Decision): “Is the form data complete?”</p>
</li>
<li><p>If NO: The system will display an error message informing the prospective student which data is missing, and the prospective student will be asked to complete the form again.</p>
</li>
<li><p>If YES: The system will save the prospective student's data into the database.</p>
</li>
<li><p>After the data is saved, the system will automatically generate a unique Registration Number for the prospective student.</p>
</li>
<li><p>Finally, the system will display a confirmation page containing “Congratulations, your registration was successful!” along with the Registration Number that has been generated. The process is complete.</p>
</li>
</ul>
<h1 id="heading-lets-create-flowchart">Lets Create Flowchart</h1>
<p>first we need shape start and end</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758160578007/f42dfa7f-1584-4c99-93df-7de5e2e250a7.png" alt class="image--center mx-auto" /></p>
<p>than we need shape box for program not related with user</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758160480298/ac870f09-a7b6-42bf-ae96-2669d85601ea.png" alt class="image--center mx-auto" /></p>
<p>than we need shape parallelograms for program related with user</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758160763619/03a73e47-e5c5-40a2-919c-9e92e8388909.png" alt class="image--center mx-auto" /></p>
<p>than we need shape box again</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758160973450/c61ffe74-29b6-44f9-88e2-3655274bfd53.png" alt class="image--center mx-auto" /></p>
<p>than we need shape diamond for program if else, function, and anymore</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758161181667/850e154d-22a9-4327-89ba-4b8be4d024e7.png" alt class="image--center mx-auto" /></p>
<p>than we need box again</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758161345580/2dafc21a-8aac-4e97-9514-71c96fa4c547.png" alt class="image--center mx-auto" /></p>
<p>than we need parallelograms again</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758161532629/d63fc9c2-e89a-4a3a-8688-41faa3f395b6.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-closing">Closing</h1>
<p>thanks for your watching this article, see you next time…</p>
<p>Ahmad Afan Shobari</p>
<p>Source: <a target="_blank" href="https://course.ppqita.my.id/cycle/3.-Backend-Developer-with-Hono/0.6_latihan-tugas?pass=ppqita">https://course.ppqita.my.id/cycle/3.-Backend-Developer-with-Hono/0.6_latihan-tugas?pass=ppqita</a></p>
]]></content:encoded></item><item><title><![CDATA[FrameWork Modern With "Hono" , Could Compete with Express.js or Next.js ?: Node.js]]></title><description><![CDATA[Assalamualaikum,hello everybody i hope you all healthy, so in this article we learn about hono, hono is framework which use for node.js, why use hono? because hono is very fast, api simple and modern, function small backend, and other.
1. Install Hon...]]></description><link>https://blog.artera.my.id/framework-modern-with-hono-could-compete-with-expressjs-or-nextjs-nodejs</link><guid isPermaLink="true">https://blog.artera.my.id/framework-modern-with-hono-could-compete-with-expressjs-or-nextjs-nodejs</guid><category><![CDATA[hono]]></category><category><![CDATA[framework]]></category><dc:creator><![CDATA[ahmad]]></dc:creator><pubDate>Mon, 15 Sep 2025 02:51:05 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1757905962346/301e3a82-4a60-4af6-a2f7-d447b7b296ea.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Assalamualaikum,hello everybody i hope you all healthy, so in this article we learn about hono, hono is framework which use for node.js, why use hono? because hono is very fast, api simple and modern, function small backend, and other.</p>
<h1 id="heading-1-install-hono-from-nodejs">1. Install Hono From Node.JS</h1>
<p>first, we will install hono in the we directory.</p>
<p><strong>!!</strong> remember, make sure you install in diretory the true <strong>!!</strong></p>
<p>than we can do init</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757901292138/f9ab53c9-051d-479e-841f-031daba374b8.png" alt class="image--center mx-auto" /></p>
<p>after init, we can add new line in package.json(add esm),</p>
<pre><code class="lang-json"><span class="hljs-string">"type"</span>:<span class="hljs-string">"module"</span>
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757901371446/c4f1f68f-e3c4-4d9a-8bea-2b79946983fd.png" alt class="image--center mx-auto" /></p>
<p>than install hono with this code</p>
<pre><code class="lang-bash">npm i hono
</code></pre>
<p>enough, you success install hono on your directory</p>
<h1 id="heading-2-testing-with-hono">2. Testing with Hono</h1>
<p>Second, we will test hono can progress or not ?<br />than install server hono with this code:</p>
<pre><code class="lang-bash">npm i @hono/node-server
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757901971026/fef95528-2393-46a1-a222-c041dc87725c.png" alt class="image--center mx-auto" /></p>
<p>we will create new file name is <code>Server.js</code> and add this code</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { Hono } <span class="hljs-keyword">from</span> <span class="hljs-string">"hono"</span>;
<span class="hljs-keyword">import</span> { serve } <span class="hljs-keyword">from</span> <span class="hljs-string">"@hono/node-server"</span>;

<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> Hono();

app.get(<span class="hljs-string">"/"</span>, <span class="hljs-function">(<span class="hljs-params">c</span>) =&gt;</span> {
    <span class="hljs-keyword">return</span> c.html(<span class="hljs-string">`
&lt;h1&gt; sample doc API&lt;/h1&gt;
&lt;p&gt;rute available&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="/text"&gt; - discribe text biasa&lt;/li&gt;
&lt;li&gt;&lt;a href="/json"&gt; - discribe output json&lt;/li&gt;
&lt;/ul&gt;
`</span>)
}
);

app.get(<span class="hljs-string">"/text"</span>, <span class="hljs-function">(<span class="hljs-params">c</span>) =&gt;</span> c.text(<span class="hljs-string">"hallo this a normal text"</span>));

app.get(<span class="hljs-string">"/json"</span>, <span class="hljs-function">(<span class="hljs-params">c</span>) =&gt;</span> c.json({ <span class="hljs-attr">data</span>: <span class="hljs-string">"this response for JSON"</span>, <span class="hljs-attr">Status</span>: <span class="hljs-string">"ok"</span> }));

serve(app, <span class="hljs-function">(<span class="hljs-params">info</span>) =&gt;</span> {
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`yes, you can do this http://localhost:<span class="hljs-subst">${info.port}</span>`</span>)
})
</code></pre>
<p>and this result run the server.js</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757904276713/b64f35d5-0aa9-434f-86bb-456a1151c4a4.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757904391465/94791dbc-459c-4d48-968f-226f8186e7ad.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757904414091/661e4783-d2a5-49f7-af12-2d5eb60e2590.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-3-error">3. Error</h1>
<p>honest i have many error because i am a newbie and noob.</p>
<p>and i forgot to screen shot my desktop, i am sorry.</p>
<h1 id="heading-4-closing">4. Closing</h1>
<p>thanks for your watching , and see you next time</p>
<p>sorry i can’t speak english but i hope can in future</p>
]]></content:encoded></item><item><title><![CDATA[Task About Item List CRUD In Java Script : Team Ahmad & Halim]]></title><description><![CDATA[Assalamualaikum, hello guys welcome back to my blog, and this article explaining about CRUD (create, read, update, delete) in javascript, let’s me show how this code can running
1. Item List
This project about item list, look this code
let itemList =...]]></description><link>https://blog.artera.my.id/task-about-item-list-crud-in-java-script-team-ahmad-and-halim</link><guid isPermaLink="true">https://blog.artera.my.id/task-about-item-list-crud-in-java-script-team-ahmad-and-halim</guid><category><![CDATA[crud]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[CRUD Operations]]></category><dc:creator><![CDATA[ahmad]]></dc:creator><pubDate>Thu, 11 Sep 2025 01:39:54 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1757558323531/168be122-a5e9-4d27-8611-7f98f524800b.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Assalamualaikum, hello guys welcome back to my blog, and this article explaining about CRUD (create, read, update, delete) in javascript, let’s me show how this code can running</p>
<h1 id="heading-1-item-list">1. Item List</h1>
<p>This project about item list, look this code</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> itemList = [
{<span class="hljs-attr">code</span>: <span class="hljs-string">"BRG001"</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"shoap"</span>,      <span class="hljs-attr">price</span>:<span class="hljs-string">"5000"</span>,  <span class="hljs-attr">qty</span>: <span class="hljs-number">10</span>},
{<span class="hljs-attr">code</span>: <span class="hljs-string">"BRG002"</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"shampo"</span>,     <span class="hljs-attr">price</span>:<span class="hljs-string">"12000"</span>, <span class="hljs-attr">qty</span>: <span class="hljs-number">5</span>},
{<span class="hljs-attr">code</span>: <span class="hljs-string">"BRG003"</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"toothpaste"</span>, <span class="hljs-attr">price</span>: <span class="hljs-string">"8000"</span>, <span class="hljs-attr">qty</span>: <span class="hljs-number">7</span>}
];
</code></pre>
<p>This code a array object that stores the item list data</p>
<h1 id="heading-2-crud-item-list-data">2. CRUD Item List Data</h1>
<p>Before we crud data we need code for find index for array object : item list data</p>
<pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">findIndexByCode</span>(<span class="hljs-params">list, code</span>)</span>{
    <span class="hljs-keyword">return</span> list.findIndex(
        <span class="hljs-function">(<span class="hljs-params">b</span>) =&gt;</span> b.code.toLowerCase() === code.toLowerCase()
    );
};
</code></pre>
<h2 id="heading-21-create-new-data-for-item-list">2.1 Create New Data for Item List</h2>
<p>we will create 3 new data:</p>
<pre><code class="lang-javascript"><span class="hljs-comment">//hard code (for you don't have duplicated)</span>
<span class="hljs-keyword">if</span>(findIndexByCode(itemList, <span class="hljs-string">"BRG004"</span>) === <span class="hljs-number">-1</span>){
    itemList.push({<span class="hljs-attr">code</span>: <span class="hljs-string">"BRG004"</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"tissue"</span>,    <span class="hljs-attr">price</span>: <span class="hljs-string">"6000"</span>,  <span class="hljs-attr">qty</span>: <span class="hljs-number">20</span>})
}
<span class="hljs-comment">//or simple code</span>
itemList.push({<span class="hljs-attr">code</span>: <span class="hljs-string">"BRG004"</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"tissue"</span>,    <span class="hljs-attr">price</span>: <span class="hljs-string">"6000"</span>,  <span class="hljs-attr">qty</span>: <span class="hljs-number">20</span>});
itemList.push({<span class="hljs-attr">code</span>: <span class="hljs-string">"BRG005"</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"brush"</span>,     <span class="hljs-attr">price</span>: <span class="hljs-string">"7000"</span>,  <span class="hljs-attr">qty</span>: <span class="hljs-number">12</span>});
itemList.push({<span class="hljs-attr">code</span>: <span class="hljs-string">"BRG006"</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"detergent"</span>, <span class="hljs-attr">price</span>: <span class="hljs-string">"15000"</span>, <span class="hljs-attr">qty</span>: <span class="hljs-number">9</span>});
</code></pre>
<h2 id="heading-22-update-data-for-item-list">2.2 Update Data for Item List</h2>
<p>we will update some data in item list</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> id_shampo = itemList.findIndex(<span class="hljs-function"><span class="hljs-params">b</span> =&gt;</span> b.code === <span class="hljs-string">"BRG002"</span>)
    itemList[id_shampo].price = <span class="hljs-string">"12500"</span>
    itemList[id_shampo].qty = <span class="hljs-number">6</span>

<span class="hljs-keyword">const</span> id_tissue = itemList.findIndex(<span class="hljs-function"><span class="hljs-params">b</span> =&gt;</span> b.code === <span class="hljs-string">"BRG004"</span>)
    itemList[id_tissue].price = <span class="hljs-string">"12500"</span>
    itemList[id_tissue].qty = <span class="hljs-number">6</span>
</code></pre>
<h2 id="heading-23-delete-data-for-item-list">2.3 Delete Data for Item List</h2>
<p>we will delete 1 data for item list</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> indexToothPaste = itemList.indexOf(<span class="hljs-number">2</span>);
<span class="hljs-keyword">if</span>(indexToothPaste === <span class="hljs-number">-1</span>){
itemList.splice(indexToothPaste, <span class="hljs-number">1</span>)
}
</code></pre>
<h2 id="heading-24-read-data-for-item-list">2.4 Read Data for Item List</h2>
<p>we wiil create table from item list data</p>
<pre><code class="lang-javascript"><span class="hljs-built_in">console</span>.log(<span class="hljs-string">"no  |kode   | nama         | harga      |qty  "</span>)
itemList.forEach(<span class="hljs-function">(<span class="hljs-params">b, i</span>) =&gt;</span> {
<span class="hljs-keyword">const</span> no = string(i + <span class="hljs-number">1</span>).padStart(<span class="hljs-number">3</span>, <span class="hljs-string">"0"</span>);
<span class="hljs-keyword">const</span> code = b.code.padEnd(<span class="hljs-number">5</span>, <span class="hljs-string">" "</span>);
<span class="hljs-keyword">const</span> name = b.name.padEnd(<span class="hljs-number">12</span>, <span class="hljs-string">" "</span>);
<span class="hljs-keyword">const</span> harga = string(b.harga).padStart(<span class="hljs-number">9</span>, <span class="hljs-string">" "</span>);
<span class="hljs-keyword">const</span> qty = string(b.qty).padStart(<span class="hljs-number">3</span>, <span class="hljs-string">" "</span>);
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">`<span class="hljs-subst">${no}</span> | <span class="hljs-subst">${code}</span> | <span class="hljs-subst">${name}</span> | <span class="hljs-subst">${price}</span> | <span class="hljs-subst">${qty}</span> `</span>);
});
</code></pre>
<h2 id="heading-25-result-data">2.5 Result Data</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757556821728/eb42e0a2-0470-4633-b48e-7caf74c65cbf.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-3-closing">3. Closing</h1>
<p>see you next time guys, good bye</p>
]]></content:encoded></item><item><title><![CDATA[Create Program Mini Coffe With Command Line: Node Js & Default Terminal Ubuntu]]></title><description><![CDATA[Assalamualaikum, hello guys welcome back to my blog today we are learning about program mini coffe with command line , in this tutorial i use: terminal ubuntu and node js, let’s me show about tutorial
1. Create Ingredients
first we need for folder co...]]></description><link>https://blog.artera.my.id/create-program-mini-coffe-with-command-line-node-js-and-default-terminal</link><guid isPermaLink="true">https://blog.artera.my.id/create-program-mini-coffe-with-command-line-node-js-and-default-terminal</guid><dc:creator><![CDATA[ahmad]]></dc:creator><pubDate>Mon, 08 Sep 2025 14:46:07 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1757342724800/f21e953f-57e8-4cb4-b0f4-4e94fa38b7d7.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Assalamualaikum, hello guys welcome back to my blog today we are learning about program mini coffe with command line , in this tutorial i use: terminal ubuntu and node js, let’s me show about tutorial</p>
<h1 id="heading-1-create-ingredients">1. Create Ingredients</h1>
<p>first we need for folder coffe shop, you can typing this</p>
<pre><code class="lang-bash">--create &amp; open folder--
mkdir coffe-shop
<span class="hljs-built_in">cd</span> coffe-shop

--initial--
npm init
</code></pre>
<p>then you can use npm init for give you <code>package.json</code></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757377701807/f293bdc7-93eb-476a-90ae-524cf2fbb9cb.png" alt class="image--center mx-auto" /></p>
<p>then you can edit in folder package.json</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757467013516/495f189a-aa41-4a40-b286-875ad3bcc9e3.png" alt class="image--center mx-auto" /></p>
<p>then you can create new file in folder <code>coffe-shop</code></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757378493222/5dfd7b29-5b30-4629-8d4b-589f285ce5d9.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-2-create-service">2. Create Service</h1>
<p>In this segmen we will create code every file in direcotory</p>
<pre><code class="lang-bash">import promptSync from <span class="hljs-string">"prompt-sync"</span>;
import makeCoffee from <span class="hljs-string">"./menu/create-coffe.js"</span>;
import makeTea from <span class="hljs-string">"./menu/create-tea.js"</span>
import makeFriedRice from <span class="hljs-string">"./menu/create-fried-rice.js"</span>
import makeGrilledChicken from <span class="hljs-string">"./menu/create-grilled-chiken.js"</span>

const prompt = promptSync({ sigint: <span class="hljs-literal">true</span> });

<span class="hljs-keyword">function</span> <span class="hljs-function"><span class="hljs-title">showMenu</span></span>() {
  console.log(<span class="hljs-string">"\n=== WARUNG SERVICES ==="</span>);
  console.log(<span class="hljs-string">"1) Make Coffee"</span>);
  console.log(<span class="hljs-string">"2) Make Tea        (please create the module)"</span>);
  console.log(<span class="hljs-string">"3) Fried Rice      (please create the module)"</span>);
  console.log(<span class="hljs-string">"4) Grilled Chicken (please create the module)"</span>);
  console.log(<span class="hljs-string">"0) Close Shop"</span>);
}

<span class="hljs-keyword">function</span> askNumber(label, def = 0) {
  const txt = prompt(`<span class="hljs-variable">${label}</span> (default <span class="hljs-variable">${def}</span>): `).trim();
  const num = txt === <span class="hljs-string">""</span> ? def : Number(txt);
  <span class="hljs-built_in">return</span> Number.isNaN(num) ? def : num;
}

<span class="hljs-keyword">function</span> askBoolean(label, def = <span class="hljs-literal">false</span>) {
  const txt = prompt(`<span class="hljs-variable">${label}</span> (y/n, default <span class="hljs-variable">${def ? "y" : "n"}</span>): `)
    .trim()
    .toLowerCase();
  <span class="hljs-keyword">if</span> (txt === <span class="hljs-string">""</span>) <span class="hljs-built_in">return</span> def;
  <span class="hljs-built_in">return</span> txt === <span class="hljs-string">"y"</span> || txt === <span class="hljs-string">"yes"</span>;
}

<span class="hljs-keyword">function</span> <span class="hljs-function"><span class="hljs-title">coffeeService</span></span>() {
  console.log(<span class="hljs-string">"\n— Coffee Menu —"</span>);
  const cups = askNumber(<span class="hljs-string">"How many cups"</span>, 1);
  const sugar = askNumber(<span class="hljs-string">"Sugar (tsp per cup)"</span>, 1);
  const withMilk = askBoolean(<span class="hljs-string">"With milk?"</span>, <span class="hljs-literal">false</span>);
  const result = makeCoffee({ cups, sugar, withMilk });
  console.log(<span class="hljs-string">"\n"</span> + result + <span class="hljs-string">"\n"</span>);
}

<span class="hljs-keyword">function</span> <span class="hljs-function"><span class="hljs-title">teaService</span></span>() {
  console.log(<span class="hljs-string">"\n— Tea Menu —"</span>);
  const cups = askNumber(<span class="hljs-string">"How many cups"</span>, 1);
  const sugar = askNumber(<span class="hljs-string">"Sugar (tsp per cup)"</span>, 1);
  const teaBag = askBoolean(<span class="hljs-string">"add Tea Bag?"</span>, <span class="hljs-literal">false</span>);
  const lemonSqueeze = askBoolean(<span class="hljs-string">"add lemonsqueeze?"</span>, <span class="hljs-literal">false</span>);
  console.log(cups, sugar, teaBag, lemonSqueeze);
  const result = makeTea({ cups, sugar, teaBag, lemonSqueeze });
  console.log(<span class="hljs-string">"\n"</span> + result + <span class="hljs-string">"\n"</span>);
}

<span class="hljs-keyword">function</span> <span class="hljs-function"><span class="hljs-title">friedRiceService</span></span>() {
  console.log(<span class="hljs-string">"\n— Fried Chicken Menu —"</span>);
  const servings = askNumber(<span class="hljs-string">"How many servings"</span>, 1);
  const spicy = askNumber(<span class="hljs-string">"spicy level (0-5)"</span>, 1);
  const egg = askBoolean(<span class="hljs-string">"with egg?"</span>, <span class="hljs-literal">false</span>);
  const chicken = askBoolean(<span class="hljs-string">"with chicken?"</span>, <span class="hljs-literal">false</span>);
  console.log(servings, spicy, egg, chicken);
  const result = makeFriedRice({servings, spicy, egg, chicken});
  console.log(<span class="hljs-string">"\n"</span> + result + <span class="hljs-string">"\n"</span>);
}

<span class="hljs-keyword">function</span> <span class="hljs-function"><span class="hljs-title">grilledChickenService</span></span>() {
  console.log(<span class="hljs-string">"\n— Grilled Chicken Menu —"</span>);
  const servings = askNumber(<span class="hljs-string">"How many servings"</span>, 1);
  const sweet = askNumber(<span class="hljs-string">"sweet level (0-5)"</span>, 1);
  const spice = askBoolean(<span class="hljs-string">"with spice?"</span>, <span class="hljs-literal">false</span>);
  const grilling = askNumber(<span class="hljs-string">"grilling time?"</span>, 1);
  const result = makeGrilledChicken({servings, sweet, spice, grilling});
  console.log(<span class="hljs-string">"\n"</span> + result + <span class="hljs-string">"\n"</span>);
}

<span class="hljs-keyword">function</span> <span class="hljs-function"><span class="hljs-title">serviceLoop</span></span>() {
  <span class="hljs-keyword">while</span> (<span class="hljs-literal">true</span>) {
    showMenu();
    const choice = prompt(<span class="hljs-string">"Choose a menu item (number): "</span>).trim();

    switch (choice) {
      <span class="hljs-keyword">case</span> <span class="hljs-string">"1"</span>:
        coffeeService();
        <span class="hljs-built_in">break</span>;

      <span class="hljs-keyword">case</span> <span class="hljs-string">"2"</span>:
        teaService()
        <span class="hljs-built_in">break</span>;

      <span class="hljs-keyword">case</span> <span class="hljs-string">"3"</span>:
        friedRiceService()
        <span class="hljs-built_in">break</span>;

      <span class="hljs-keyword">case</span> <span class="hljs-string">"4"</span>:
        grilledChickenService()

      <span class="hljs-keyword">case</span> <span class="hljs-string">"0"</span>:
        console.log(<span class="hljs-string">"\nShop closed. Thank you.\n"</span>);
        <span class="hljs-built_in">return</span>;

      default:
        console.log(<span class="hljs-string">"Invalid choice. Please try again.\n"</span>);
    }
  }
}

serviceLoop();
</code></pre>
<p>this a main program for mini caffe</p>
<h1 id="heading-3-create-file-menu">3. Create File Menu</h1>
<p>then you can create code in every file about menu</p>
<h2 id="heading-31-menu-create-coffe">3.1 Menu Create Coffe</h2>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> TOTAL_STIRS = <span class="hljs-number">18</span>;

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">makeCoffee</span>(<span class="hljs-params">options = {}</span>) </span>{
  <span class="hljs-keyword">const</span> { cups = <span class="hljs-number">1</span>, sugar = <span class="hljs-number">1</span>, withMilk = <span class="hljs-literal">false</span> } = options;
<span class="hljs-built_in">console</span>.log(options)
  <span class="hljs-comment">// Simple validation</span>
  <span class="hljs-keyword">if</span> (cups &lt;= <span class="hljs-number">0</span>) <span class="hljs-keyword">return</span> <span class="hljs-string">"Number of cups must be at least 1."</span>;
  <span class="hljs-keyword">if</span> (sugar &lt; <span class="hljs-number">0</span>) <span class="hljs-keyword">return</span> <span class="hljs-string">"Sugar cannot be negative."</span>;

  <span class="hljs-keyword">const</span> steps = [];
  steps.push(<span class="hljs-string">`Preparing <span class="hljs-subst">${cups}</span> cups of coffee.`</span>);
  steps.push(<span class="hljs-string">`Add coffee grounds and <span class="hljs-subst">${sugar}</span> tsp of sugar per cup.`</span>);
  steps.push(<span class="hljs-string">"Pour hot water."</span>);
  <span class="hljs-keyword">if</span> (withMilk) {
    steps.push(<span class="hljs-string">"Add milk to taste."</span>);
  }

  <span class="hljs-comment">// Stirring simulation: show stir #1 to #18</span>
  <span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">1</span>; i &lt;= TOTAL_STIRS; i++) {
    steps.push(<span class="hljs-string">`Stirring... (<span class="hljs-subst">${i}</span> of <span class="hljs-subst">${TOTAL_STIRS}</span>)`</span>);
  }

  steps.push(<span class="hljs-string">"Coffee is ready to be served."</span>);
  <span class="hljs-keyword">return</span> steps.join(<span class="hljs-string">"\n"</span>);
}
</code></pre>
<h2 id="heading-32-menu-create-tea">3.2 Menu Create Tea</h2>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> TOTAL_STIRS = <span class="hljs-number">18</span>;

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">makeTea</span>(<span class="hljs-params">options = {}</span>) </span>{
    <span class="hljs-built_in">console</span>.log(options)
  <span class="hljs-keyword">const</span> { cups = <span class="hljs-number">1</span>, sugar = <span class="hljs-number">1</span>, teaBag = <span class="hljs-literal">false</span> , lemonSqueeze = <span class="hljs-literal">false</span> } = options;

  <span class="hljs-comment">// Simple validation</span>
  <span class="hljs-keyword">if</span> (cups &lt;= <span class="hljs-number">0</span>) <span class="hljs-keyword">return</span> <span class="hljs-string">"Number of cups must be at least 1."</span>;
  <span class="hljs-keyword">if</span> (sugar &lt; <span class="hljs-number">0</span>) <span class="hljs-keyword">return</span> <span class="hljs-string">"Sugar cannot be negative."</span>;

  <span class="hljs-keyword">const</span> steps = [];
  steps.push(<span class="hljs-string">`Preparing <span class="hljs-subst">${cups}</span> cups of tea.`</span>);
  steps.push(<span class="hljs-string">`Add tea grounds and <span class="hljs-subst">${sugar}</span> tsp of sugar per cup.`</span>);
  steps.push(<span class="hljs-string">"Pour hot water."</span>);
  <span class="hljs-keyword">if</span> (lemonSqueeze){
      steps.push(<span class="hljs-string">"add lemon to teste."</span>);
    }
    <span class="hljs-keyword">if</span> (teaBag) {
      steps.push(<span class="hljs-string">"Add tea bag."</span>);
    }

  steps.push(<span class="hljs-string">"tea is ready to be served."</span>);
  <span class="hljs-keyword">return</span> steps.join(<span class="hljs-string">"\n"</span>);
}
</code></pre>
<h2 id="heading-33-menu-create-fried-rice">3.3 Menu Create Fried Rice</h2>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> TOTAL_FRYING = <span class="hljs-number">12</span>;

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">makeFriedRice</span>(<span class="hljs-params">options = {}</span>) </span>{
  <span class="hljs-keyword">const</span> { servings = <span class="hljs-number">1</span>, spicy = <span class="hljs-number">1</span>, egg = <span class="hljs-literal">false</span> , chicken = <span class="hljs-literal">false</span>} = options;
<span class="hljs-built_in">console</span>.log(options)
  <span class="hljs-comment">// Simple validation</span>
  <span class="hljs-keyword">if</span> (servings &lt; <span class="hljs-number">0</span>) <span class="hljs-keyword">return</span> <span class="hljs-string">"Number of serving must be at least 1."</span>;
  <span class="hljs-keyword">if</span> (spicy &lt; <span class="hljs-number">0</span>) <span class="hljs-keyword">return</span> <span class="hljs-string">"spicy cannot be negative."</span>;

  <span class="hljs-keyword">const</span> steps = [];
  steps.push(<span class="hljs-string">`Preparing <span class="hljs-subst">${servings}</span> servings of friedchiken.`</span>);
  steps.push(<span class="hljs-string">`add chili peppers according to taste <span class="hljs-subst">${spicy}</span>`</span>);
  steps.push(<span class="hljs-string">"starting cooking."</span>);
  <span class="hljs-keyword">if</span> (egg) {
    steps.push(<span class="hljs-string">"Add egg to taste."</span>);
  }
  <span class="hljs-keyword">if</span> (chicken) {
    steps.push(<span class="hljs-string">"Add chicken to taste."</span>);
  }

  <span class="hljs-comment">// Stirring simulation: show stir #1 to #18</span>
  <span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">1</span>; i &lt;= TOTAL_FRYING; i++) {
    steps.push(<span class="hljs-string">`frying... (<span class="hljs-subst">${i}</span> of <span class="hljs-subst">${TOTAL_FRYING}</span>)`</span>);
  }

  steps.push(<span class="hljs-string">"fried rice is ready to be served."</span>);
  <span class="hljs-keyword">return</span> steps.join(<span class="hljs-string">"\n"</span>);
}
</code></pre>
<h2 id="heading-34-menu-create-grilled-chicken">3.4 Menu Create Grilled Chicken</h2>
<pre><code class="lang-javascript">
<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">makeGrilledChicken</span>(<span class="hljs-params">options = {}</span>) </span>{
  <span class="hljs-keyword">const</span> { servings = <span class="hljs-number">1</span>, sweet = <span class="hljs-number">1</span>, spice = <span class="hljs-literal">false</span> , grilling = <span class="hljs-number">1</span>} = options;
<span class="hljs-built_in">console</span>.log(options)
  <span class="hljs-comment">// Simple validation</span>
  <span class="hljs-keyword">if</span> (servings &lt; <span class="hljs-number">0</span>) <span class="hljs-keyword">return</span> <span class="hljs-string">"Number of serving must be at least 1."</span>;
  <span class="hljs-keyword">if</span> (sweet &lt; <span class="hljs-number">0</span>) <span class="hljs-keyword">return</span> <span class="hljs-string">"sweet cannot be negative."</span>;

  <span class="hljs-keyword">const</span> steps = [];
  steps.push(<span class="hljs-string">`Preparing <span class="hljs-subst">${servings}</span> servings of friedchiken.`</span>);
  steps.push(<span class="hljs-string">`add sweet peppers according to taste <span class="hljs-subst">${sweet}</span>`</span>);
  steps.push(<span class="hljs-string">"starting cooking."</span>);
  <span class="hljs-keyword">if</span> (spice) {
    steps.push(<span class="hljs-string">"Add spice to taste."</span>);
  }

  <span class="hljs-comment">// Stirring simulation: show stir #1 to #18</span>
  <span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">1</span>; i &lt;= grilling; i++) {
    steps.push(<span class="hljs-string">`frying... (<span class="hljs-subst">${i}</span> of <span class="hljs-subst">${grilling}</span>)`</span>);
  }

  steps.push(<span class="hljs-string">"grilling chicken is ready to be served."</span>);
  <span class="hljs-keyword">return</span> steps.join(<span class="hljs-string">"\n"</span>);
}
</code></pre>
<h1 id="heading-4-running-code">4. Running Code</h1>
<p>now you can running this project with <code>node service.js</code> let’s go to practic</p>
<pre><code class="lang-bash">node service
</code></pre>
<p>this ui for running this code</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757487004647/57a4b4e6-9f0b-4dd2-84f3-e4f82a80eef4.png" alt class="image--center mx-auto" /></p>
<p>you can try make tea with typing <code>2</code></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757487096227/cd13407f-717f-4b93-88e1-cd5a462a9526.png" alt class="image--center mx-auto" /></p>
<p>you will be asked about the menu you ordered, then process running</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757487160290/68bd5ae0-1975-4e0b-8d4c-5ad64c272f2b.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-5-closing">5. Closing</h1>
<p>thanks for you watching and see you next day……..</p>
]]></content:encoded></item><item><title><![CDATA[Create Simple Calculator With cml (Comand Line): For Node js]]></title><description><![CDATA[Assalamualaikum, today we are learning about create simple calculator with command line, lets go to we are project, before it read
1. Add File Calculator
in this segmen we will create new file the name is calculator.js

2. Create Code In File
this co...]]></description><link>https://blog.artera.my.id/create-simple-calculator-with-cml-comand-line-for-node-js</link><guid isPermaLink="true">https://blog.artera.my.id/create-simple-calculator-with-cml-comand-line-for-node-js</guid><dc:creator><![CDATA[ahmad]]></dc:creator><pubDate>Mon, 08 Sep 2025 01:55:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1757296429165/77416c98-1173-4a4b-b337-a45f4c3b5297.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Assalamualaikum, today we are learning about create simple calculator with command line, lets go to we are project, before it read</p>
<h1 id="heading-1-add-file-calculator">1. Add File Calculator</h1>
<p>in this segmen we will create new file the name is <code>calculator.js</code></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757297992575/5e02307d-0b65-415f-9c05-58a59d66af5a.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-2-create-code-in-file">2. Create Code In File</h1>
<p>this code for we segmen</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> { getinput, closeInput } <span class="hljs-keyword">from</span> <span class="hljs-string">"./input.js"</span>;

<span class="hljs-built_in">console</span>.clear();
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">"=== Kalkulator Console ==="</span>);

<span class="hljs-keyword">let</span> jalan = <span class="hljs-literal">true</span>;

<span class="hljs-keyword">while</span> (jalan) {
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"\nPilih operasi:"</span>);
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"1. Tambah"</span>);
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"2. Kurang"</span>);
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"3. Kali"</span>);
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"4. Bagi"</span>);
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"0. Keluar"</span>);

  <span class="hljs-keyword">const</span> pilihan = <span class="hljs-keyword">await</span> getinput(<span class="hljs-string">"Masukkan pilihan (0-4)"</span>);

  <span class="hljs-keyword">switch</span> (pilihan) {
    <span class="hljs-keyword">case</span> <span class="hljs-string">"1"</span>: {
      <span class="hljs-keyword">const</span> a = <span class="hljs-built_in">Number</span>(<span class="hljs-keyword">await</span> getinput(<span class="hljs-string">"Masukkan angka pertama"</span>));
      <span class="hljs-keyword">const</span> b = <span class="hljs-built_in">Number</span>(<span class="hljs-keyword">await</span> getinput(<span class="hljs-string">"Masukkan angka kedua"</span>));
      <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`Hasil: <span class="hljs-subst">${a}</span> + <span class="hljs-subst">${b}</span> = <span class="hljs-subst">${a + b}</span>`</span>);
      <span class="hljs-keyword">break</span>;
    }
    <span class="hljs-keyword">case</span> <span class="hljs-string">"2"</span>: {
      <span class="hljs-keyword">const</span> a = <span class="hljs-built_in">Number</span>(<span class="hljs-keyword">await</span> getinput(<span class="hljs-string">"Masukkan angka pertama"</span>));
      <span class="hljs-keyword">const</span> b = <span class="hljs-built_in">Number</span>(<span class="hljs-keyword">await</span> getinput(<span class="hljs-string">"Masukkan angka kedua"</span>));
      <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`Hasil: <span class="hljs-subst">${a}</span> - <span class="hljs-subst">${b}</span> = <span class="hljs-subst">${a - b}</span>`</span>);
      <span class="hljs-keyword">break</span>;
    }
    <span class="hljs-keyword">case</span> <span class="hljs-string">"3"</span>: {
      <span class="hljs-keyword">const</span> a = <span class="hljs-built_in">Number</span>(<span class="hljs-keyword">await</span> getinput(<span class="hljs-string">"Masukkan angka pertama"</span>));
      <span class="hljs-keyword">const</span> b = <span class="hljs-built_in">Number</span>(<span class="hljs-keyword">await</span> getinput(<span class="hljs-string">"Masukkan angka kedua"</span>));
      <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`Hasil: <span class="hljs-subst">${a}</span> * <span class="hljs-subst">${b}</span> = <span class="hljs-subst">${a * b}</span>`</span>);
      <span class="hljs-keyword">break</span>;
    }
    <span class="hljs-keyword">case</span> <span class="hljs-string">"4"</span>: {
      <span class="hljs-keyword">const</span> a = <span class="hljs-built_in">Number</span>(<span class="hljs-keyword">await</span> getinput(<span class="hljs-string">"Masukkan angka pertama"</span>));
      <span class="hljs-keyword">const</span> b = <span class="hljs-built_in">Number</span>(<span class="hljs-keyword">await</span> getinput(<span class="hljs-string">"Masukkan angka kedua"</span>));
      <span class="hljs-keyword">if</span> (b === <span class="hljs-number">0</span>) {
        <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"❌ Tidak bisa dibagi 0"</span>);
      } <span class="hljs-keyword">else</span> {
        <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`Hasil: <span class="hljs-subst">${a}</span> / <span class="hljs-subst">${b}</span> = <span class="hljs-subst">${a / b}</span>`</span>);
      }
      <span class="hljs-keyword">break</span>;
    }
    <span class="hljs-keyword">case</span> <span class="hljs-string">"0"</span>:
      jalan = <span class="hljs-literal">false</span>;
      <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Terima kasih, program selesai."</span>);
      <span class="hljs-keyword">break</span>;
    <span class="hljs-keyword">default</span>:
      <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Pilihan tidak valid, coba lagi!"</span>);
  }
}

<span class="hljs-keyword">await</span> closeInput();
</code></pre>
<p>this ui for file calculator.js</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757299614702/7d18d809-cd66-4a41-8869-aa09f408098b.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-3-running-code">3. Running code</h1>
<p>For running code we typing this</p>
<pre><code class="lang-bash">node calculator.js
</code></pre>
<p>then appear this</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757299911832/488dd1e8-b2e9-4339-8699-f742a86d273e.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-4-closing">4. Closing</h1>
<p>thanks for watching , and see you next time…</p>
]]></content:encoded></item><item><title><![CDATA[Know NPM with Node JS: Install Package, Create Code, Running Code]]></title><description><![CDATA[Assalamualaikum, today we learning about npm (node packege namager) in library node js, go to article…
1. What Is NPM?

is short, npm is a werehouse or library for extension for developer, or a package for use developer so easy for developing web or ...]]></description><link>https://blog.artera.my.id/know-npm-with-node-js-install-package-create-code-running-code</link><guid isPermaLink="true">https://blog.artera.my.id/know-npm-with-node-js-install-package-create-code-running-code</guid><dc:creator><![CDATA[ahmad]]></dc:creator><pubDate>Sat, 06 Sep 2025 06:50:55 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1757141936569/f5ef2321-91e2-4dfb-96f3-c57955741990.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Assalamualaikum, today we learning about npm (node packege namager) in library node js, go to article…</p>
<h1 id="heading-1-what-is-npm">1. What Is NPM?</h1>
<ul>
<li>is short, npm is a werehouse or library for extension for developer, or a package for use developer so easy for developing web or aplication, similiar to plugin in figma</li>
</ul>
<h2 id="heading-11-type-important-about-npm">1.1 Type important About NPM:</h2>
<ol>
<li><p><strong>Dependencies :</strong> the packages must be in developer, bacause its makes process can run and success, like <code>express</code>, <code>sharp</code>, and any more</p>
</li>
<li><p><strong>DevDependencies :</strong> the package not must be in developer, bacause its makes easy when programming in develop our web or aplication, like <code>eslint</code>, <code>nodemon</code>, and any more</p>
</li>
</ol>
<h1 id="heading-2-how-install-package-in-npm">2. How Install Package In NPM?</h1>
<p>before we install, we are make sure directory appropriate, we are open our terminal (git bash, default terminal, any more), and you can typing this</p>
<blockquote>
<p><strong>imporatant!!</strong>, bacause in this practic i am use ubuntu, then little different for you user windows, but is ok</p>
</blockquote>
<h2 id="heading-21-install-package-json-in-directory">2.1 Install Package JSON In Directory</h2>
<p>this code can create main configurate, like name project, version , and nay more</p>
<pre><code class="lang-bash">--<span class="hljs-keyword">for</span> you whants automatic--
npm init -y

--<span class="hljs-keyword">for</span> you manual creating
npm init
</code></pre>
<p>after you typing this code, then come a file <code>package.json</code> in directory</p>
<h3 id="heading-211-automatic">2.1.1 automatic</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757250394510/f62b1180-8f58-4ee4-87ec-cf939bc7ae2b.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-212-manual">2.1.2 manual</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757250437132/4b84f082-4329-4911-b832-07636b8111e6.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-22-add-type-esmecmascript-module-in-package-json">2.2 Add Type ESM(ECMAScript Module) in package json</h2>
<p>After we install package json , we need insert type module for package json, because is important for you use device modern, first you can search in file explorer or you vscode or anything, then insert this code</p>
<pre><code class="lang-bash"><span class="hljs-string">"type"</span>: <span class="hljs-string">"module"</span>
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757251027701/584fec8b-8b9c-48b7-8138-be6631d72ace.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-23-add-code-on-object-script">2.3 Add Code On Object Script</h2>
<p>Add this code so that can running your code</p>
<pre><code class="lang-bash">{
  <span class="hljs-string">"dev"</span>: <span class="hljs-string">"node index.js"</span>,
  <span class="hljs-string">"start"</span>: <span class="hljs-string">"node main.js"</span>,
  <span class="hljs-string">"lint"</span>: <span class="hljs-string">"eslint ."</span>
}
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757252965946/a9e7f0f3-dab2-4f9a-bf16-fc5a5c3a9694.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-24-for-exemple-install-package-dependencies">2.4 For Exemple Install Package Dependencies</h2>
<p>in this exemple we will install package <code>chalk</code> for simple input name</p>
<pre><code class="lang-basic">npm install chalk
</code></pre>
<p>this can make console log very beautiful with add color for your code</p>
<p>this after you download and we will practic it later</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757253315485/bc4cd564-6272-4088-8f1e-228c515ea122.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-25-for-exemple-install-package-dev-depenidencies">2.5 for Exemple Install Package dev Depenidencies</h2>
<p>in this exemple we will install sharp for resize image</p>
<pre><code class="lang-bash">npm install sharp --save-optional
</code></pre>
<p>this after you downloaded, but we don’t will practic because it very complicated</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757252021504/4e21bd59-1f05-4d50-b85e-343e750d0e95.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-3-create-code">3. Create Code</h1>
<p>in this segment we will create code in terminal</p>
<pre><code class="lang-bash">--manual create file
touch name-file.js

--create and edit file
nano name-file.js
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757253452114/437a7107-00bf-4bcc-a581-6e025e379aa4.png" alt class="image--center mx-auto" /></p>
<p>in this file i try about console anyquestion, and this my code</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757254870813/cf3e052e-d00b-4606-ac38-191d91320d05.png" alt class="image--center mx-auto" /></p>
<p>after create file input.js, i create file index.js</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757254861790/d823af04-a730-4cfa-81ef-240b8036a322.png" alt class="image--center mx-auto" /></p>
<p>and i create code again, it’s very bored</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757255652838/ccc3266c-3e1f-4071-b0ff-7c3d2f57b128.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-4-running-code">4. Running Code</h1>
<p>this a code for running we program</p>
<pre><code class="lang-bash">npm run dev
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757256460430/6a981638-24ed-459a-bea4-f76dc5d36c84.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-5-bonus-practic-use-chalk">5. (Bonus) Practic Use Chalk</h1>
<p>in this project i edit file index.js, and use this</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757297005201/5026b7b9-f3a4-4da9-918c-015542c49dc3.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1757296986256/db4e6c69-9fb7-4b9e-aff1-1ed224d33038.png" alt class="image--center mx-auto" /></p>
<p>Boom!!….</p>
<h1 id="heading-6-closing">6. closing</h1>
<p>thanks for your attention, good bye</p>
]]></content:encoded></item><item><title><![CDATA[Belajar Mengunakan Data Base Dengan Supabase Untuk pemula (Database PostgreSQL)]]></title><description><![CDATA[Assalamualaikum warahmatullahi wabarakattuh, pada kesempatan kali ini kita akan belajar bagaimana data base dapat di gunakan, yang kita perlukan dalam pembelajaran kali ini adalah: terminal (git bash), data base(postgresql), dan tempat penyimpanan da...]]></description><link>https://blog.artera.my.id/belajar-mengunakan-data-base-dengan-supabase-untuk-pemula-database-postgresql</link><guid isPermaLink="true">https://blog.artera.my.id/belajar-mengunakan-data-base-dengan-supabase-untuk-pemula-database-postgresql</guid><dc:creator><![CDATA[ahmad]]></dc:creator><pubDate>Thu, 04 Sep 2025 05:57:25 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1754746648028/ef3a0fc5-26f2-4d5e-a9db-b55f79b0133d.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Assalamualaikum warahmatullahi wabarakattuh, pada kesempatan kali ini kita akan belajar bagaimana data base dapat di gunakan, yang kita perlukan dalam pembelajaran kali ini adalah: terminal (git bash), data base(postgresql), dan tempat penyimpanan data(supabase),sebelum itu kita harus tau apa kelebihan dari supabase dalam pengunaan database terutama untuk pemula</p>
<h2 id="heading-manfaat-mengunakan-supabase">Manfaat Mengunakan Supabase</h2>
<ul>
<li><p><strong>Kecepatan Pengembangan:</strong> Dengan semua fitur yang disediakan oleh supabase, kita bisa membangun aplikasi dengan jauh lebih cepat.</p>
</li>
<li><p><strong>Skalabilitas:</strong> Supabase dibangun untuk bisa menangani pertumbuhan aplikasi, dari proyek kecil hingga aplikasi berskala besar.</p>
</li>
<li><p><strong>Open-Source:</strong> Kode sumbernya terbuka, yang berarti komunitas bisa berkontribusi dan kamu tidak terkunci pada satu vendor saja.</p>
</li>
<li><p><strong>Fleksibilitas:</strong> Karena menggunakan PostgreSQL, kamu memiliki kontrol penuh atas skema database dan bisa menggunakan <em>tools</em> PostgreSQL lainnya.</p>
</li>
</ul>
<p>Singkatnya, Supabase adalah "toolbox" modern untuk developer yang ingin membuat aplikasi web atau mobile dengan cepat dan efisien, dengan <em>backend</em> yang powerful dan lengkap.</p>
<h2 id="heading-membuat-new-project">Membuat New Project</h2>
<ul>
<li>untuk pertama kali kita akan masuk ke dalam webnya yaitu <strong>Supabase</strong> ini adalah <a target="_blank" href="https://supabase.com/">link webnya</a></li>
</ul>
<p>kumudian kita akan ditampilkan tampilan ini:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754745321730/70c063eb-88b4-4cff-8381-a217c7149f41.png" alt class="image--center mx-auto" /></p>
<p>langkah selanjutnya klik <em>Start your project</em> yaitu button yang berwarna hijau diatas</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754745441898/19b8c49f-2884-436f-84a3-704ec8f9ec72.png" alt class="image--center mx-auto" /></p>
<p>kemudian kita diminta untuk login, jika kalian memunyai akun github maka gunakan akun tersebut</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754745788063/608e2063-862c-4ad0-8f6e-f4c3f2397fc8.png" alt class="image--center mx-auto" /></p>
<p>tampilan awal akan seperti diatas, isi nama terserah apa saja yang penting kalian suka, kemudian isi type sesuai yang kalian inginkan disini saya akan mengunakan <strong>Educational</strong> untuk pembelajaran kali ini, kemudian pada plan pilih free untuk percobaan pertama, lalu klik <em>Create organization yang berwarna hijau</em></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754746090250/d606610d-07d1-4661-b372-753197a4dd84.png" alt class="image--center mx-auto" /></p>
<p>selanjutnya kita diperintahkan untuk membuat sebuah project, untuk langkah pertama isi project name dengan nama project yang kalian inginkan, kemudian isi database password dengan password yang kuat (jika ingin mudah ada fitur <em>generate a password</em> untuk mempermudah pembuatan project) lalu copy password, lalu pilih region ini akan secara otomatis memilihkan yang terdekat (tidak usah di rubah), klik <em>Create new project</em> untuk melanjutkan</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754746516249/39dd56ca-4989-4199-9aeb-fd4c0ff4d9ed.png" alt class="image--center mx-auto" /></p>
<p>tampilan selanjutnya kita di bawa pada tampilan awal project yang kita buat, untuk langkah selanjutnya kita akan mengkoneksikan antara supabase dengan postgresql yang akan kita akan gunakan nanti, yaitu dengan menekan button connect pada navbar di bagian atas dengan logo colokan/ stok kontak</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754746965504/9da7fb31-0bd7-4e79-86c4-16e6b8f0379c.png" alt class="image--center mx-auto" /></p>
<p>pada tampilan ini akan ada pilihan di atas, kemudian copy yang bagian <strong>transaction pooler</strong> isi passwordnya dibagian “isiPassword'“ dibawah ini sesuai password yang kita buat sebelumnya</p>
<pre><code class="lang-bash">postgresql://postgres.htsgbxofbdxtaacrpjau:IsiPassword@aws-0-ap-southeast-1.pooler.supabase.com:6543/postgres
</code></pre>
<p>kemudian kalian bisa pergi ke git bash dan paste tadi yang kita copy dengan format seperti ini</p>
<pre><code class="lang-bash">psql postgresql://postgres.htsgbxofbdxtaacrpjau:IsiPassword@aws-0-ap-southeast-1.pooler.supabase.com:6543/postgres
</code></pre>
<p>maka tampilan akan menjadi seperti ini</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756965418634/f52145a8-032f-44cf-9bd3-4bd213d9c136.png" alt class="image--center mx-auto" /></p>
<p>munkin cukup sekian dan terima kasih hhehhe…</p>
]]></content:encoded></item><item><title><![CDATA[Mengenal 3NF Dalam Database]]></title><description><![CDATA[Assalamualaikum, pada kesempatan kali ini kita akan membuat pengenalan tentang 3NF pada database,singkatnya 3nf adalah sebuah metode dimana memastikan setiap kolom di sebuah tabel cuma menyimpan data yang benar-benar terkait dengan satu hal utama saj...]]></description><link>https://blog.artera.my.id/mengenal-3nf-dalam-database</link><guid isPermaLink="true">https://blog.artera.my.id/mengenal-3nf-dalam-database</guid><dc:creator><![CDATA[ahmad]]></dc:creator><pubDate>Thu, 04 Sep 2025 01:21:28 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1756946935758/7d28c94f-db6c-48fc-9e49-7f9565a39a15.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Assalamualaikum, pada kesempatan kali ini kita akan membuat pengenalan tentang 3NF pada database,singkatnya 3nf adalah sebuah metode dimana memastikan setiap kolom di sebuah tabel cuma menyimpan data yang benar-benar terkait dengan satu hal utama saja, atau bisa juga pengelompokan.</p>
<h1 id="heading-1-contoh-masalah">1. Contoh Masalah</h1>
<h2 id="heading-12-kantin-sekolah">1.2 Kantin Sekolah</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756947790351/ea05d2e3-d894-4e9d-b775-6b2812f6e391.png" alt class="image--center mx-auto" /></p>
<p><strong>Masalah yang terlihat:</strong></p>
<ul>
<li><p><code>hp_santri</code>, <code>daftar_item</code>, <code>metode_bayar</code>, <code>rincian_bayar</code> = <strong>multi-nilai</strong> (melanggar 1NF).</p>
</li>
<li><p>Identitas santri &amp; kasir <strong>diulang</strong> antar transaksi (redundan).</p>
</li>
<li><p><code>total_sebelum_diskon</code> <strong>bisa dihitung</strong> dari item (redun dan rawan salah).</p>
</li>
</ul>
<h1 id="heading-2-penyelesaianya">2. Penyelesaianya</h1>
<h2 id="heading-21-1nf-kolom-atomic">2.1 1NF Kolom <strong>Atomic</strong>.</h2>
<p><strong>Tujuan:</strong> setiap kolom harus <strong>atomic</strong> (satu sel = satu nilai).</p>
<ul>
<li><p>Pecah <code>hp_santri</code> → tabel terpisah: <strong>SANTRI_HP(nis, nomor_hp)</strong>.</p>
</li>
<li><p>Pecah <code>daftar_item</code> per baris item → <strong>DETAIL_TRANSAKSI(transaksi_id, produk_kode, nama_produk, qty, harga_satuan)</strong>.</p>
</li>
<li><p>Pecah pembayaran multi-metode → <strong>PEMBAYARAN(transaksi_id, metode, nominal)</strong>.</p>
</li>
</ul>
<blockquote>
<p><strong><em>Catatan: Di 1NF, boleh masih simpan</em></strong> <code>nama_santri</code>, <code>kelas</code>, <code>asrama</code>, <code>nama_kasir</code>, <code>jabatan_kasir</code> di tabel transaksi. Fokus dulu atomisasi nilai.</p>
</blockquote>
<p><strong>Output 1NF (daftar tabel minimal):</strong></p>
<ul>
<li><p>KANTIN_TRANSAKSI(id_transaksi, tgl_waktu, nis_santri, nama_santri, kelas, asrama, nama_kasir, jabatan_kasir, total_sebelum_diskon, kembalian, catatan)</p>
</li>
<li><p>SANTRI_HP(nis, nomor_hp)</p>
</li>
<li><p>DETAIL_TRANSAKSI(id_transaksi, produk_kode, nama_produk, qty, harga_satuan)</p>
</li>
<li><p>PEMBAYARAN(id_transaksi, metode, nominal)</p>
<p>  maka tablenya akan seperti ini:</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756948875003/26cd1c03-556b-444a-92bf-983242c4f8ef.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<h2 id="heading-22-2nf-bergantung-penuh-pada-primary-key">2.2 2NF <strong>bergantung penuh</strong> pada <strong>primary key</strong>.</h2>
<p><strong>Tujuan:</strong> kolom non-key <strong>bergantung penuh</strong> pada <strong>primary key</strong> tabelnya.</p>
<ul>
<li><ul>
<li><p>Pisahkan entitas yang bukan milik transaksi:</p>
<ul>
<li><p><strong>SANTRI(nis, nama, kelas, asrama)</strong> (di KANTIN_TRANSAKSI cukup simpan <strong>nis</strong>)</p>
</li>
<li><p><strong>PEGAWAI(id_pegawai, nama, jabatan)</strong> (di KANTIN_TRANSAKSI simpan <strong>pegawai_id</strong>)</p>
</li>
<li><p><strong>PRODUK(kode, nama, harga_default?)</strong> (tetap simpan <strong>harga_satuan_saat_transaksi</strong> di DETAIL_TRANSAKSI)</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>    <strong>Revisi tabel:</strong></p>
<ul>
<li><p>KANTIN_TRANSAKSI(id_transaksi, tgl_waktu, <strong>nis</strong>, <strong>pegawai_id</strong>, total_sebelum_diskon, kembalian, catatan)</p>
</li>
<li><p>SANTRI(nis, nama, kelas, asrama)</p>
</li>
<li><p>PEGAWAI(id_pegawai, nama, jabatan)</p>
</li>
<li><p>PRODUK(kode, nama)</p>
</li>
<li><p>DETAIL_TRANSAKSI(id_transaksi, <strong>produk_kode</strong>, qty, <strong>harga_satuan</strong>)</p>
</li>
<li><p>PEMBAYARAN(id_transaksi, metode, nominal)</p>
</li>
<li><p>SANTRI_HP(nis, nomor_hp)</p>
</li>
</ul>
<blockquote>
<p><strong><em>Alasan 2NF:</em></strong> <code>nama_santri/kelas/asrama</code> <strong>bergantung ke NIS</strong> (santri), bukan ke transaksi. <code>nama_kasir/jabatan</code> bergantung ke <strong>pegawai</strong>, bukan langsung transaksi.</p>
</blockquote>
<p>    maka akan jadi seperti ini:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756950471917/1ab00ed3-2d74-42d1-b50c-ca33b9643a1a.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-23-3nf-ketergantungan-transitif">2.3 3NF <strong>ketergantungan transitif.</strong></h2>
<p><strong>Tujuan:</strong> tidak ada <strong>ketergantungan transitif</strong> (non-key → non-key).</p>
<ul>
<li><p>Pastikan atribut seperti <code>jabatan</code> <strong>hanya</strong> ada di PEGAWAI, <strong>bukan</strong> di transaksi.</p>
</li>
<li><p><code>kelas</code> &amp; <code>asrama</code> bila ingin lebih rapi bisa dipisah:</p>
<ul>
<li><strong>KELAS(id, nama)</strong>, <strong>ASRAMA(id, nama)</strong>, lalu di SANTRI simpan <strong>kelas_id</strong> &amp; <strong>asrama_id</strong>. (opsional untuk tugas 30 menit; cukup catat idenya)</li>
</ul>
</li>
<li><p><strong>Harga historis:</strong> tetap simpan <strong>harga_satuan</strong> di DETAIL_TRANSAKSI (fakta saat jual), agar transaksi lama <strong>tidak berubah</strong> meski harga produk update.</p>
</li>
</ul>
<p><strong>Struktur Final Minimal (3NF, versi ringkas):</strong></p>
<ul>
<li><p>SANTRI(nis PK, nama, kelas, asrama)</p>
</li>
<li><p>PEGAWAI(id_pegawai PK, nama, jabatan)</p>
</li>
<li><p>PRODUK(kode PK, nama)</p>
</li>
<li><p>KANTIN_TRANSAKSI(id_transaksi PK, tgl_waktu, nis FK→SANTRI, pegawai_id FK→PEGAWAI, kembalian, catatan)</p>
</li>
<li><p>DETAIL_TRANSAKSI(id_transaksi FK, produk_kode FK, qty, <strong>harga_satuan</strong>)</p>
</li>
<li><p>PEMBAYARAN(id_transaksi FK, metode, nominal)</p>
</li>
<li><p>SANTRI_HP(nis FK, nomor_hp)</p>
</li>
</ul>
<blockquote>
<p><strong><em>Catatan:</em></strong> <code>total_sebelum_diskon</code> <strong>tidak wajib disimpan</strong> (bisa dihitung dari DETAIL). Jika disimpan untuk performa, dokumentasikan sebagai <strong>denormalisasi terkontrol</strong>.</p>
</blockquote>
<p>bila dibuat erd maka akan menjadi seperti ini:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756950320146/dc225fab-dc04-4570-85e2-c59bd74e040d.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-3-praktik-di-sql">3. Praktik Di SQL</h1>
<ul>
<li>setelah kita membuat erdnya maka kita akam membuat sqlnya</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756963879736/6e6afe16-1e5b-45bd-b5d1-35d8f18c3163.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756963916559/c0e32a71-bc80-4415-bc21-7651a0d38ddb.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756963967935/f662632d-0e42-4761-ac95-ab6c5a52e7f5.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756963994943/0af5b382-017a-4d0f-b6ee-dc74710471b9.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-4-penutupan">4. Penutupan</h1>
<ul>
<li>mungkin cukup sekian dari saya bila ada salah mohon dimaafkan thanks….see you next time</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Instalasi node js di windows]]></title><description><![CDATA[assalamualaikum, pada kesempatan kali ini kita akan mencoba menampilkan log pada file bertipe javascript pada node js, sebelum itu harus dipastikan kita memiliki 1 hal ini:

commend line: git bash, terminal, atau yang lainnya

yang kita dapatkan dari...]]></description><link>https://blog.artera.my.id/instalasi-node-js-di-windows</link><guid isPermaLink="true">https://blog.artera.my.id/instalasi-node-js-di-windows</guid><dc:creator><![CDATA[ahmad]]></dc:creator><pubDate>Wed, 03 Sep 2025 06:59:58 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1757572637833/7fe1ac42-7acb-4504-82b7-eeed48c6f69b.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>assalamualaikum, pada kesempatan kali ini kita akan mencoba menampilkan log pada file bertipe javascript pada node js, sebelum itu harus dipastikan kita memiliki 1 hal ini:</p>
<ul>
<li>commend line: git bash, terminal, atau yang lainnya</li>
</ul>
<p>yang kita dapatkan dari praktik adalah pengunaan node js di gitbash</p>
<h1 id="heading-1-download-node-js-di-browser">1. Download node Js Di browser</h1>
<ul>
<li>untuk mendownloadnya kalian dapat pergi ke web ini <a target="_blank" href="https://nodejs.org/en/download">https://nodejs.org/en/download</a></li>
</ul>
<p>kemudian kalian bisa lihat <strong>windows installer (.msi)</strong> dibagian bawah , namun jangan langsung download pastikan terlebih dahulu yang diinstall sesuai device kalian, karena saya mengunakan windows 64 bit maka saya mengunakan yang sesuai</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756906053532/e0a6ad79-9039-4d9a-bf9a-495b95f4a712.png" alt class="image--center mx-auto" /></p>
<p>jika sudah sesuai maka kalian bisa langsung mendownloadnya</p>
<h1 id="heading-2-instalasi-node-js">2. Instalasi Node Js</h1>
<ul>
<li>jika sudah maka akan muncul seperti ini dan klik untuk instalasi</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756906250040/92cc4f85-598e-463d-99a7-d68e2031ab7e.png" alt class="image--center mx-auto" /></p>
<p>kemudian akan tampil seperti ini maka klik next</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756906371569/b3f85e9d-faec-4cc8-ac7a-9c0c180ef955.png" alt class="image--center mx-auto" /></p>
<p>pilih change</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756906426514/20a306c3-e782-4560-a15f-eb0b9a4951ca.png" alt class="image--center mx-auto" /></p>
<p>lalu next</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756906454512/30ab0c12-0501-4e10-a1c2-6f9147c5e17d.png" alt class="image--center mx-auto" /></p>
<p>lalu checklist dan next lagi</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756906486734/07d8f6b5-698d-4545-a13e-3fd1a2f3a39e.png" alt class="image--center mx-auto" /></p>
<p>pilih change</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756906509556/ce51cde3-f9b4-4de8-bbdb-798858d50035.png" alt class="image--center mx-auto" /></p>
<p>maka proses downloading akan berjalan, tunggu hingga selesai dan muncul tulisan finish maka klik</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756906594798/ad68a68d-141b-4063-999d-2a4b082d613a.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-3-praktik-pengunaan-node-js">3. Praktik Pengunaan Node js</h1>
<ul>
<li>Pada tahap ini kita akan mencoba untuk membuat sebuah file kemudian mencoba menjalankannya,</li>
</ul>
<h2 id="heading-32-melihat-versi-node-js-amp-npm">3.2 Melihat Versi Node Js &amp; NPM</h2>
<p>Pertama buka git bash kita</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756906913299/a49ecf0f-c6ef-4636-b3e0-d9df789212f9.png" alt class="image--center mx-auto" /></p>
<p>kemudian coba ketikan ini:</p>
<pre><code class="lang-bash">node -v
</code></pre>
<p>maka akan muncul seperti ini</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756906989230/7762fcb4-58cb-4f40-93ad-2e2723401ee6.png" alt class="image--center mx-auto" /></p>
<p>lalu kita coba juga npm</p>
<pre><code class="lang-bash">npm -v
</code></pre>
<p>maka akan muncul seperti ini</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756907061447/6f1fef2f-b3cd-468e-a899-d3aa0528029d.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-32-query-file">3.2 Query File</h2>
<ul>
<li>kita coba mengunakan perintah dasar dari git bash untuk pengubahan file</li>
</ul>
<pre><code class="lang-bash">--membuat folder
mkdir nama-folder-yang-akan-dibuat

--membuat file 
touch nama-file-yang-akan-dibuat

--berpindah folder
<span class="hljs-built_in">cd</span> nama-file-yang-akan-dituju

--mengedit file(bila file tidak ada maka akan dibuatkan secara otomatis)
nano nama-file-yang-akan-diedit
</code></pre>
<p>Pada tahap ini kita akan mencoba untuk masuk ke folder tertentu agar nantinya akan menjadi tempat penyimpanan file yang akan dibuat nanti</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756907631836/238bf4be-e619-449d-ac41-df84b16d92ef.png" alt class="image--center mx-auto" /></p>
<p>kemudian kita akan membuat folder tempat penyimpanan file yang nanti kita akan buat, sekaligus masuk ke dalamnya</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756907696440/2f8586f5-84b9-42e9-9223-0557cd10aafb.png" alt class="image--center mx-auto" /></p>
<p>lalu kita coba membuat file namun saya akan mengunak perintah nano (mengedit) karena bisa langsung membuat file walau file yang dimaksud belum ada</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756907982546/a6dc13e9-651e-4233-9fbf-21a15193adec.png" alt class="image--center mx-auto" /></p>
<p>maka layar akan seperti ini</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756907830720/77683f9a-e824-4c64-9af1-33a549710d13.png" alt class="image--center mx-auto" /></p>
<p>coba buat sesuatu dengan javacript</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756907898139/0ba94537-b271-4e42-999d-552ad23f4a37.png" alt class="image--center mx-auto" /></p>
<p>lalu tekan <strong>ctrl + x</strong> untuk keluar dari pengeditan, ketik y atau yes, kemudian enter</p>
<p>lalu untuk menjalankanya gunakan code ini</p>
<pre><code class="lang-bash">node nama-file-yang-ingin-dijalankan
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756908065103/b7c7618b-c842-4b3c-8eca-01e494aee387.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-4-penutup">4. Penutup</h1>
<p>mungkin cukup sekian dari saya terima kasih</p>
]]></content:encoded></item><item><title><![CDATA[Database PPDB Santri]]></title><description><![CDATA[Assalamualaikum, pada kesempatan kali ini kita akan belajar tentang database ppdb santri
1. Masalah
sebuah sekolah sedang mengadakan PPDB (penerimaan peserte didik baru) maka untuk mempermudah pihak sekolah membuat system database untuk kemudahan dal...]]></description><link>https://blog.artera.my.id/database-ppdb-santri</link><guid isPermaLink="true">https://blog.artera.my.id/database-ppdb-santri</guid><dc:creator><![CDATA[ahmad]]></dc:creator><pubDate>Mon, 01 Sep 2025 02:40:56 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1756694974229/59d14352-465c-45fe-9281-d3845f69836a.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Assalamualaikum, pada kesempatan kali ini kita akan belajar tentang database ppdb santri</p>
<h1 id="heading-1-masalah">1. Masalah</h1>
<p>sebuah sekolah sedang mengadakan PPDB (penerimaan peserte didik baru) maka untuk mempermudah pihak sekolah membuat system database untuk kemudahan dalam pelaksanaanya</p>
<ul>
<li><p>1 orang tua bisa memiliki banyak santri (One to Many).</p>
</li>
<li><p>1 santri hanya punya 1 data pendaftaran (One to One).</p>
</li>
<li><p>1 pendaftaran bisa memiliki beberapa pembayaran (One to Many).</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756689642527/617ee5b6-75bd-4bfa-9523-9aff4ba31018.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-2-praktik-membuat-table">2. Praktik Membuat Table</h1>
<h2 id="heading-21-table-santri">2.1 Table Santri</h2>
<pre><code class="lang-pgsql"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> santri (
  santri_id <span class="hljs-type">SERIAL</span> <span class="hljs-keyword">PRIMARY KEY</span>,
  nama <span class="hljs-type">VARCHAR</span>(<span class="hljs-number">100</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-keyword">NULL</span>,
  tempat_lahir <span class="hljs-type">VARCHAR</span>(<span class="hljs-number">50</span>),
  tanggal_lahir <span class="hljs-type">DATE</span>,
  alamat <span class="hljs-type">TEXT</span>,
  no_hp_ortu <span class="hljs-type">VARCHAR</span>(<span class="hljs-number">20</span>),
  asal_sekolah <span class="hljs-type">VARCHAR</span>(<span class="hljs-number">100</span>),
  orang_tua_id <span class="hljs-type">INT</span> <span class="hljs-keyword">REFERENCES</span> orang_tua(orang_tua_id)
);
</code></pre>
<h2 id="heading-22-table-orang-tua">2.2 Table Orang Tua</h2>
<pre><code class="lang-pgsql"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> orang_tua (
  orang_tua_id <span class="hljs-type">SERIAL</span> <span class="hljs-keyword">PRIMARY KEY</span>,
  nama_ayah <span class="hljs-type">VARCHAR</span>(<span class="hljs-number">100</span>),
  pekerjaan_ayah <span class="hljs-type">VARCHAR</span>(<span class="hljs-number">100</span>),
  nama_ibu <span class="hljs-type">VARCHAR</span>(<span class="hljs-number">100</span>),
  pekerjaan_ibu <span class="hljs-type">VARCHAR</span>(<span class="hljs-number">100</span>)
);
</code></pre>
<h2 id="heading-23-table-pendaftaran">2.3 Table Pendaftaran</h2>
<pre><code class="lang-pgsql"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> pendaftaran (
  pendaftaran_id <span class="hljs-type">SERIAL</span> <span class="hljs-keyword">PRIMARY KEY</span>,
  santri_id <span class="hljs-type">INT</span> <span class="hljs-keyword">REFERENCES</span> santri(santri_id),
  no_pendaftaran <span class="hljs-type">VARCHAR</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">UNIQUE</span>,
  tanggal_daftar <span class="hljs-type">DATE</span>,
  program_pilihan <span class="hljs-type">VARCHAR</span>(<span class="hljs-number">50</span>)
);
</code></pre>
<h2 id="heading-24-table-pembayaran">2.4 Table Pembayaran</h2>
<pre><code class="lang-pgsql"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> pembayaran (
  pembayaran_id <span class="hljs-type">SERIAL</span> <span class="hljs-keyword">PRIMARY KEY</span>,
  pendaftaran_id <span class="hljs-type">INT</span> <span class="hljs-keyword">REFERENCES</span> pendaftaran(pendaftaran_id),
  tanggal_bayar <span class="hljs-type">DATE</span>,
  jumlah <span class="hljs-type">INT</span>,
  status <span class="hljs-type">VARCHAR</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">CHECK</span> (status <span class="hljs-keyword">IN</span> (<span class="hljs-string">'Lunas'</span>, <span class="hljs-string">'Belum'</span>))
);
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756691332237/39da4329-8c4f-44b0-94af-9c786939e81f.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-3-praktik-insert-data">3. Praktik Insert Data</h1>
<ul>
<li><p>3 data orang tua</p>
</li>
<li><p>5 data santri</p>
</li>
<li><p>5 data pendaftaran</p>
</li>
<li><p>5 data pembayaran</p>
</li>
</ul>
<h2 id="heading-31-data-orang-tua">3.1 Data Orang Tua</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756692826626/32e2328b-3898-43a8-a4d1-16f8c8e4ef33.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-32-data-santri">3.2 Data Santri</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756692913364/a653633d-e0f6-491e-ba2d-40bb04a25cd4.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-33-data-pendaftaran">3.3 Data Pendaftaran</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756693364026/2648a443-6c00-4258-b5ad-2f9b7c1b6e9f.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-34-data-pembayaran">3.4 Data Pembayaran</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756693634983/ffa7da62-ae0f-4861-be8b-025f7d4b2b8b.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-4-query-data">4. Query Data</h1>
<h2 id="heading-41-daftar-santri-dan-orang-tua">4.1 Daftar santri dan orang tua</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756693864683/234f3a28-e538-4825-a68b-d2a673d8c7b4.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-42-daftar-santri-yang-belum-bayar">4.2 Daftar Santri Yang Belum Bayar</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756694243589/4bd0e3d1-afed-4df9-b33e-cd1236c73fac.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-43-daftar-total-pembayaran">4.3 Daftar Total Pembayaran</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756696996312/a077c109-81fe-4dbf-b244-22ba58a34170.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-5-penutup">5. Penutup</h1>
<blockquote>
<h3 id="heading-mungkin-cukup-sekian-terima-kasih-by-ahmad-afan-shobari">mungkin cukup sekian terima kasih… By Ahmad Afan Shobari</h3>
</blockquote>
<p>copyright: <a target="_blank" href="https://course.ppqita.my.id/cycle/0.1.-mastering-data-with-postgreSQL/18.5_Latihan-PPDB-Santri?pass=ppqita">https://course.ppqita.my.id/cycle/0.1.-mastering-data-with-postgreSQL/18.5_Latihan-PPDB-Santri?pass=ppqita</a></p>
]]></content:encoded></item><item><title><![CDATA[Relasi Table Dengan Kasus Absensi Pondok Melalui PostgreSQL]]></title><description><![CDATA[Assalamualaikum, pada kesempatan kali ini kita akan melanjutkan sesi latihan kita, yaitu tentang absensi kelas
1. Masalah
Pondok "PPQITA" ingin menertibkan absensi santri per pertemuan berdasarkan jadwal tetap. Selama ini absensi di kertas/WA menyuli...]]></description><link>https://blog.artera.my.id/relasi-table-dengan-kasus-absensi-pondok-melalui-postgresql</link><guid isPermaLink="true">https://blog.artera.my.id/relasi-table-dengan-kasus-absensi-pondok-melalui-postgresql</guid><dc:creator><![CDATA[ahmad]]></dc:creator><pubDate>Thu, 28 Aug 2025 06:54:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1760491245191/bc1f5ead-c945-4712-81d1-b93c6a4615df.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Assalamualaikum, pada kesempatan kali ini kita akan melanjutkan sesi latihan kita, yaitu tentang absensi kelas</p>
<h1 id="heading-1-masalah">1. Masalah</h1>
<p>Pondok "PPQITA" ingin menertibkan absensi santri per <strong>pertemuan</strong> berdasarkan <strong>jadwal</strong> tetap. Selama ini absensi di kertas/WA menyulitkan rekap harian/bulanan. Sistem yang dibangun harus:</p>
<ul>
<li><p>Mencatat <strong>kehadiran</strong> setiap santri pada <strong>tanggal</strong> tertentu untuk <strong>jadwal</strong> tertentu.</p>
</li>
<li><p>Mendukung status: <code>HADIR | TERLAMBAT | SAKIT | IZIN | ALPHA</code>.</p>
</li>
<li><p>Memastikan <strong>tidak ada duplikasi</strong> catatan untuk santri yang sama pada kombinasi (tanggal, jadwal).</p>
</li>
<li><p>Menyediakan rekap sederhana (per jadwal/per bulan).</p>
</li>
</ul>
<h1 id="heading-2-praktik">2. Praktik</h1>
<h2 id="heading-21-membuat-table">2.1 Membuat Table</h2>
<ul>
<li>pertama kita akan membuat tablenya</li>
</ul>
<pre><code class="lang-pgsql"><span class="hljs-comment">--table ustadz</span>
<span class="hljs-keyword">create</span> <span class="hljs-keyword">table</span> ustadz (
 id_ustadz   <span class="hljs-type">serial</span> <span class="hljs-keyword">primary key</span>,
 nama_ustadz <span class="hljs-type">varchar</span>(<span class="hljs-number">50</span>)
 );
<span class="hljs-comment">--table kelas</span>
 <span class="hljs-keyword">create</span> <span class="hljs-keyword">table</span> kelas (
 id_kelas    <span class="hljs-type">serial</span> <span class="hljs-keyword">primary key</span>,
 nama_kelas  <span class="hljs-type">varchar</span>(<span class="hljs-number">50</span>),
 tingkat     <span class="hljs-type">int</span>
 );
<span class="hljs-comment">--table santri</span>
<span class="hljs-keyword">create</span> <span class="hljs-keyword">table</span> santri (
 id_santri   <span class="hljs-type">serial</span> <span class="hljs-keyword">primary key</span>,
 nis         <span class="hljs-type">varchar</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">unique</span>,
 nama_santri <span class="hljs-type">varchar</span>(<span class="hljs-number">100</span>),
 jk          <span class="hljs-type">char</span>(<span class="hljs-number">1</span>),
 kelas_id    <span class="hljs-type">int</span> <span class="hljs-keyword">references</span> kelas(id_kelas) <span class="hljs-keyword">ON</span> <span class="hljs-keyword">UPDATE</span> <span class="hljs-keyword">CASCADE</span> <span class="hljs-keyword">ON</span> <span class="hljs-keyword">DELETE</span> <span class="hljs-keyword">RESTRICT</span>
 );
<span class="hljs-comment">--table jadwal</span>
<span class="hljs-keyword">create</span> <span class="hljs-keyword">table</span> jadwal (
 id_jadwal   <span class="hljs-type">serial</span> <span class="hljs-keyword">primary key</span>,
 id_kelas    <span class="hljs-type">int</span> <span class="hljs-keyword">references</span> kelas(id_kelas) <span class="hljs-keyword">ON</span> <span class="hljs-keyword">UPDATE</span> <span class="hljs-keyword">CASCADE</span> <span class="hljs-keyword">ON</span> <span class="hljs-keyword">DELETE</span> <span class="hljs-keyword">RESTRICT</span>,
 id_ustadz   <span class="hljs-type">int</span> <span class="hljs-keyword">references</span> ustadz(id_ustadz) <span class="hljs-keyword">ON</span> <span class="hljs-keyword">UPDATE</span> <span class="hljs-keyword">CASCADE</span> <span class="hljs-keyword">ON</span> <span class="hljs-keyword">DELETE</span> <span class="hljs-keyword">RESTRICT</span>,
 mapel       <span class="hljs-type">varchar</span>(<span class="hljs-number">50</span>),
 hari        <span class="hljs-type">varchar</span>(<span class="hljs-number">50</span>),
 jam_mulai   <span class="hljs-type">time</span>,
 jam_selesai <span class="hljs-type">time</span>,
 lokasi      <span class="hljs-type">varchar</span>(<span class="hljs-number">150</span>)
 );
<span class="hljs-comment">--table kehadiran</span>
<span class="hljs-keyword">create</span> <span class="hljs-keyword">table</span> kehadiran (
 tanggal     <span class="hljs-type">date</span> ,
 id_jadwal   <span class="hljs-type">int</span> <span class="hljs-keyword">references</span> jadwal(id_jadwal) <span class="hljs-keyword">on</span> <span class="hljs-keyword">update</span> <span class="hljs-keyword">cascade</span> <span class="hljs-keyword">on</span> <span class="hljs-keyword">delete</span> <span class="hljs-keyword">restrict</span>,
 id_santri   <span class="hljs-type">int</span> <span class="hljs-keyword">references</span> santri(id_santri) <span class="hljs-keyword">on</span> <span class="hljs-keyword">update</span> <span class="hljs-keyword">cascade</span> <span class="hljs-keyword">on</span> <span class="hljs-keyword">delete</span> <span class="hljs-keyword">restrict</span>,
 status      <span class="hljs-type">varchar</span>(<span class="hljs-number">50</span>) <span class="hljs-keyword">check</span> (status <span class="hljs-keyword">in</span> (<span class="hljs-string">'hadir'</span>, <span class="hljs-string">'terlambat'</span>, <span class="hljs-string">'sakit'</span>, <span class="hljs-string">'izin'</span>, <span class="hljs-string">'alpha'</span>)),
 waktu_masuk <span class="hljs-type">time</span>,
 menit_telat <span class="hljs-type">int</span> <span class="hljs-keyword">check</span> (menit_telat &gt;= <span class="hljs-number">0</span>),
 catatan     <span class="hljs-type">text</span>
 );
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756345552610/ce0bdfde-520a-4ce6-a833-0f9a4d79d536.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756345564033/ff0d12e0-c72a-4caa-ad5d-f5105a7f95fe.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756345568849/f2203e8d-ec42-4d76-9dd0-091169be1c87.png" alt class="image--center mx-auto" /></p>
<p>Kemudian kita akan menambahkan index pada beberapa column</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756352715437/be5d8812-9e55-4bb2-8609-eaa298862195.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-22-menambahkan-data">2.2 Menambahkan Data</h2>
<p><strong>kelas</strong></p>
<ul>
<li>(nama=<code>Tahfidz 1A</code>, tingkat=1)</li>
</ul>
<p><strong>ustadz</strong></p>
<ul>
<li>(nama=<code>Ust. Alwi</code>)</li>
</ul>
<p><strong>santri</strong></p>
<ul>
<li><p>(<code>24101</code>, <code>Ahmad Fauzi</code>, <code>L</code>, kelas=<code>Tahfidz 1A</code>)</p>
</li>
<li><p>(<code>24102</code>, <code>Bima Putra</code>, <code>L</code>, kelas=<code>Tahfidz 1A</code>)</p>
</li>
<li><p>(<code>24103</code>, <code>Cahya Lestari</code>,<code>P</code>, kelas=<code>Tahfidz 1A</code>)</p>
</li>
</ul>
<p><strong>jadwal</strong></p>
<ul>
<li><p>(kelas=<code>Tahfidz 1A</code>, ustadz=<code>Ust. Alwi</code>, mapel=<code>Tahfidz</code>, hari=<code>Senin</code>, jam=<code>07:00-08:30</code>, lokasi=<code>Kelas A</code>)</p>
</li>
<li><p>(kelas=<code>Tahfidz 1A</code>, ustadz=<code>Ust. Alwi</code>, mapel=<code>Tahfidz</code>, hari=<code>Selasa</code>, jam=<code>07:0008:30</code>, lokasi=<code>Kelas A</code>)</p>
</li>
</ul>
<p><strong>kehadiran</strong> (contoh dua hari):</p>
<ul>
<li><p>(tgl <code>2025-08-25</code>, jadwal=Senin, S1=<code>HADIR</code> 06:58, 0, <code>Datang awal</code>)</p>
</li>
<li><p>(tgl <code>2025-08-25</code>, jadwal=Senin, S2=<code>TERLAMBAT</code> 07:12, 12, <code>Macet</code>)</p>
</li>
<li><p>(tgl <code>2025-08-25</code>, jadwal=Senin, S3=<code>HADIR</code> 07:05, 5, <code>-</code>)</p>
</li>
<li><p>(tgl <code>2025-08-26</code>, jadwal=Selasa, S1=<code>HADIR</code> 06:59, 0, <code>-</code>)</p>
</li>
<li><p>(tgl <code>2025-08-26</code>, jadwal=Selasa, S2=<code>IZIN</code>, <code>NULL</code>, <code>NULL</code>, <code>Urusan keluarga</code>)</p>
</li>
<li><p>(tgl <code>2025-08-26</code>, jadwal=Selasa, S3=<code>ALPHA</code>, <code>NULL</code>, <code>NULL</code>, <code>-</code>)</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756352991150/8513c10c-cdc9-48f7-bfc0-ffa7f6a17695.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756352996159/db568eab-3888-4a3a-9ac6-0a7ed9c49ab7.png" alt class="image--center mx-auto" /></p>
<p>`</p>
<h2 id="heading-23-crud-data">2.3 CRUD Data</h2>
<ol>
<li><p><strong>kelas</strong></p>
<ul>
<li><p>Create kelas baru.</p>
</li>
<li><p>List kelas (urut tingkat, nama) dengan pagination (LIMIT/OFFSET).</p>
</li>
<li><p>Update nama &amp; tingkat sebuah kelas.</p>
</li>
<li><p>Delete kelas (uji kegagalan jika masih dirujuk FK).</p>
</li>
</ul>
</li>
<li><p><strong>ustadz</strong></p>
<ul>
<li><p>Create ustadz.</p>
</li>
<li><p>Cari ustadz by nama (ILIKE), paginate.</p>
</li>
<li><p>Update nama ustadz.</p>
</li>
<li><p>Delete ustadz (uji FK).</p>
</li>
</ul>
</li>
<li><p><strong>santri</strong></p>
<ul>
<li><p>Create santri (NIS unik).</p>
</li>
<li><p>List santri per kelas + opsi search nama/NIS (ILIKE), paginate.</p>
</li>
<li><p>Detail santri beserta nama kelas.</p>
</li>
<li><p>Update (ganti kelas/jk/nama/nis).</p>
</li>
<li><p>Delete santri (uji FK).</p>
</li>
</ul>
</li>
<li><p><strong>jadwal</strong></p>
<ul>
<li><p>Create jadwal (kelas, ustadz, mapel, hari, jam, lokasi).</p>
</li>
<li><p>List jadwal per kelas/hari.</p>
</li>
<li><p>Detail jadwal (tampilkan nama kelas &amp; ustadz).</p>
</li>
<li><p>Update jadwal.</p>
</li>
<li><p>Delete jadwal (uji FK).</p>
</li>
</ul>
</li>
<li><p><strong>kehadiran</strong></p>
<ul>
<li><p>Create satu baris absensi (tanggal, jadwal, santri, status, waktu_masuk, menit_telat, catatan).</p>
<blockquote>
<p><strong><em>Uji UNIQUE(tanggal, jadwal, santri) dengan mencoba insert duplikat.</em></strong></p>
</blockquote>
</li>
<li><p>List absensi untuk satu tanggal &amp; jadwal (tampilkan NIS, Nama Santri, status, menit_telat).</p>
</li>
<li><p>Update status/waktu_masuk/menit_telat/catatan.</p>
</li>
<li><p>Delete satu catatan absensi.</p>
</li>
</ul>
</li>
</ol>
<h3 id="heading-231-kelas">2.3.1 Kelas</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756354886482/142d0805-a374-4766-b6a8-e4c5eae2b8b1.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756354426969/1e34f6f2-c8f8-47af-b659-a2a589bc2000.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756354765954/112b5110-755f-4527-8426-ce5944553500.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756354855209/3a42e729-8f01-40eb-931d-a7801d2bfdb3.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-232-ustadz">2.3.2 Ustadz</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756359929149/fda8cf0c-a140-4571-9e2e-4dae701b385f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756359933444/a5cc104b-3650-4583-8bd9-0406804b3a29.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756360163393/1740d107-8f31-43bb-a665-c68624f6ec86.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756360543436/301678ed-c0e5-468e-880b-f61adac8fd58.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-233-santri">2.3.3 Santri</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756360824873/9e97c461-6dcf-4094-ab61-cd3319526e6b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756362709376/27edc35e-b038-4b35-8b87-baab168dca83.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756362917158/3426dfb4-0d27-418c-ac21-972b39ed6500.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756363017322/aa89e41f-e71c-47bd-bb81-4d05d8fd64b0.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-234-jadwal">2.3.4 Jadwal</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756363363187/6ad3f3d8-6c11-4c5e-b0b7-de92ca751e69.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756363515959/ab3fb568-a5a3-41c1-9d50-0fb0ba279189.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756363832482/9778c070-b3c8-4161-b8dd-d83b5c4aea9c.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756363994362/739e22b1-786d-46c3-b87b-58cfcbf32205.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756364048495/01055ea7-414c-4670-870e-1ecdf02a3406.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-235-kehadiran">2.3.5 Kehadiran</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756535338634/644db0d8-9900-4dc2-ada2-98bf162f1374.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756535500127/c7b63d8f-029f-44ff-abc2-e055aa39c9fb.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756535773381/267b3688-5871-43d0-b0ef-685f8c98152d.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756536045709/4ebf6fe8-d4b0-4922-b03d-ff02274fad60.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-24-query-data">2.4 Query Data</h2>
<h3 id="heading-241-query-total-kehadiran">2.4.1 Query Total Kehadiran</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756859756583/e6a12e9b-6896-42a1-863f-ef7bb9eff8ef.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-242-query-data-bulanan">2.4.2 Query Data Bulanan</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756860240094/e54d04c8-1f5d-4765-8689-0e717200abe3.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-243-query-data-yang-sering-terlambat">2.4.3 Query Data Yang Sering terlambat</h3>
<h2 id="heading-25-uji-contraint">2.5 Uji Contraint</h2>
<h3 id="heading-251-memasukan-data-yang-mirip-pada-constraint-unique">2.5.1 Memasukan Data Yang Mirip Pada Constraint UNIQUE</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756860721491/e69b6dc3-b563-4a0a-8e9e-53565e8fc8d6.png" alt class="image--center mx-auto" /></p>
<p>Pada gambar diatas menunjukan bahwa data yang dikenai UNIQUE tidak dapat menyimpan yang sama, karena akan menghasilkan error , dimana nis ‘24101‘ sudah ada didalam table dan kita tidak dapat mengunakannya lagi</p>
<h3 id="heading-242-menghapus-data-yang-terdapat-foreign-key">2.4.2 Menghapus Data Yang Terdapat Foreign Key</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756861048993/63bfcb6c-e70a-4e1e-b537-e7a5433012a1.png" alt class="image--center mx-auto" /></p>
<p>Pada gambar diatas menunjukan bahwa data yang tersambung dengan data yang menjadi fk (foreign key) tidak dapat dihapus karena itu dapat merusak susunan table , dan pasti akan muncul error</p>
<h3 id="heading-243">2.4.3</h3>
<h3 id="heading-244-mencoba-keunggulan-contsraint-check">2.4.4 Mencoba Keunggulan Contsraint Check</h3>
]]></content:encoded></item><item><title><![CDATA[Membuat Relasi Table Dengan PostgreSQL Study Kasus Perpustakaan: One to Many Relation]]></title><description><![CDATA[Assalamualaikum, pada kesempatan kali kita akan mempelajari tentang relasi table untuk pemula, terkhusus untuk penguna postgresql, pertama kita akam membuat erd terlebih dahulu sebelum benar benar mempraktikanya.

Penjelasan Hubungan

Anggota – Pemin...]]></description><link>https://blog.artera.my.id/membuat-relasi-table-dengan-postgresql-study-kasus-perpustakaan-one-to-many-relation</link><guid isPermaLink="true">https://blog.artera.my.id/membuat-relasi-table-dengan-postgresql-study-kasus-perpustakaan-one-to-many-relation</guid><dc:creator><![CDATA[ahmad]]></dc:creator><pubDate>Wed, 27 Aug 2025 06:06:52 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1756274873936/127e9139-e533-40ee-b11e-be6753306342.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Assalamualaikum, pada kesempatan kali kita akan mempelajari tentang relasi table untuk pemula, terkhusus untuk penguna postgresql, pertama kita akam membuat erd terlebih dahulu sebelum benar benar mempraktikanya.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756258858855/f783f497-92bb-4958-b26c-5faed7846298.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-penjelasan-hubungan"><strong>Penjelasan Hubungan</strong></h3>
<ol>
<li><p><strong>Anggota – Peminjaman</strong></p>
<ul>
<li><p>Satu anggota bisa melakukan banyak peminjaman.</p>
</li>
<li><p>Relasi: One-to-Many.</p>
</li>
</ul>
</li>
<li><p><strong>Buku – Peminjaman</strong></p>
<ul>
<li><p>Satu buku bisa dipinjam berkali-kali (oleh anggota berbeda di waktu berbeda).</p>
</li>
<li><p>Relasi: One-to-Many.</p>
</li>
</ul>
</li>
<li><p><strong>Petugas – Peminjaman</strong></p>
<ul>
<li><p>Satu petugas bisa melayani banyak transaksi peminjaman.</p>
</li>
<li><p>Relasi: One-to-Many.</p>
</li>
</ul>
</li>
</ol>
<h2 id="heading-1-praktik">1. Praktik</h2>
<h3 id="heading-11-membuat-table">1.1 Membuat Table</h3>
<pre><code class="lang-pgsql"><span class="hljs-comment">--table anggota</span>
<span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> anggota (
 id            <span class="hljs-type">SERIAL</span> <span class="hljs-keyword">PRIMARY KEY</span>,
 nama          <span class="hljs-type">VARCHAR</span>(<span class="hljs-number">150</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-keyword">NULL</span>,
 alamat        <span class="hljs-type">VARCHAR</span>(<span class="hljs-number">200</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-keyword">NULL</span>,
 no_hp         <span class="hljs-type">VARCHAR</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span class="hljs-keyword">NULL</span>
 );

<span class="hljs-comment">--table buku</span>
<span class="hljs-keyword">create</span> <span class="hljs-keyword">table</span> buku (
 id_buku       <span class="hljs-type">serial</span> <span class="hljs-keyword">primary key</span>,
 judul         <span class="hljs-type">varchar</span>(<span class="hljs-number">50</span>),
 pengarang     <span class="hljs-type">varchar</span>(<span class="hljs-number">100</span>),
 penerbit      <span class="hljs-type">varchar</span>(<span class="hljs-number">50</span>),
 tahun_terbit  <span class="hljs-type">int</span>,
 kategori      <span class="hljs-type">varchar</span>(<span class="hljs-number">150</span>)
 );

<span class="hljs-comment">--table petugas</span>
<span class="hljs-keyword">create</span> <span class="hljs-keyword">table</span> petugas (
 id_petugas    <span class="hljs-type">serial</span> <span class="hljs-keyword">primary key</span>,
 nama          <span class="hljs-type">varchar</span>(<span class="hljs-number">150</span>),
 jabatan       <span class="hljs-type">varchar</span>(<span class="hljs-number">50</span>)
 );

<span class="hljs-comment">--table peminjaman</span>
<span class="hljs-keyword">create</span> <span class="hljs-keyword">table</span> peminjaman(
 id_peminjaman <span class="hljs-type">serial</span> <span class="hljs-keyword">primary key</span>,
 tgl_pinjam    <span class="hljs-type">date</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">null</span>,
 tgl_kembali   <span class="hljs-type">date</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">null</span>,
 status        <span class="hljs-type">varchar</span>(<span class="hljs-number">20</span>),
 id_anggota    <span class="hljs-type">int</span> <span class="hljs-keyword">references</span> anggota(id) <span class="hljs-keyword">on</span> <span class="hljs-keyword">delete</span> <span class="hljs-keyword">cascade</span>,
 id_buku       <span class="hljs-type">int</span> <span class="hljs-keyword">references</span> buku(id_buku) <span class="hljs-keyword">on</span> <span class="hljs-keyword">delete</span> <span class="hljs-keyword">cascade</span>,
 id_petugas    <span class="hljs-type">int</span> <span class="hljs-keyword">references</span> petugas(id_petugas) <span class="hljs-keyword">on</span> <span class="hljs-keyword">delete</span> <span class="hljs-keyword">cascade</span>
 );
</code></pre>
<p>table anggota</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756259475244/20e550cc-5587-43df-b437-252c17a4668f.png" alt class="image--center mx-auto" /></p>
<p>table buku</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756259485842/5711264c-f971-414d-b7ec-b7faae06fbee.png" alt class="image--center mx-auto" /></p>
<p>table petugas</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756259498866/b583104b-d5a8-4f5f-943b-79175d46e84f.png" alt class="image--center mx-auto" /></p>
<p>table peminjaman</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756259571444/440433b4-f4f6-47d7-be32-3d269264e6bd.png" alt class="image--center mx-auto" /></p>
<p>error:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756259594201/450688d9-dfdb-4760-85f2-9fa5e31098b8.png" alt class="image--center mx-auto" /></p>
<ul>
<li>perlu ekstra dalam membuat peminjaman karena lupa memberi tipe data pada suatu entity id_anggota, id_buku, dan id_petugas</li>
</ul>
<h3 id="heading-12-insert-data">1.2 Insert Data</h3>
<ul>
<li>kemudian kita akan memasukan data ke dalam table yang kita buat</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756261048484/9df1c585-fa8d-4a93-850d-c75c0b46d27d.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-13-select-data">1.3 Select Data</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756274562866/60826aff-0e31-4dc2-b127-8143d3354b95.png" alt class="image--center mx-auto" /></p>
<p>maka akan terlihat data yang diminta</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1756274606463/5e6f33fa-bed3-4f15-8fe0-96e7cbce7edf.png" alt class="image--center mx-auto" /></p>
<p>mungkin hanya sekian terima kasih</p>
]]></content:encoded></item></channel></rss>