<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: ahmadasroni38</title>
    <description>The latest articles on DEV Community by ahmadasroni38 (@ahmadasroni38).</description>
    <link>https://dev.to/ahmadasroni38</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F649056%2Fe7493e8f-1f10-4d6e-b78e-20ea6e985f6c.jpg</url>
      <title>DEV Community: ahmadasroni38</title>
      <link>https://dev.to/ahmadasroni38</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ahmadasroni38"/>
    <language>en</language>
    <item>
      <title>Instalasi Composer di Windows, macOS, dan Linux: Panduan Lengkap dari Nol</title>
      <dc:creator>ahmadasroni38</dc:creator>
      <pubDate>Mon, 28 Sep 2026 12:07:43 +0000</pubDate>
      <link>https://dev.to/ahmadasroni38/instalasi-composer-di-windows-macos-dan-linux-panduan-lengkap-dari-nol-49nd</link>
      <guid>https://dev.to/ahmadasroni38/instalasi-composer-di-windows-macos-dan-linux-panduan-lengkap-dari-nol-49nd</guid>
      <description>&lt;p&gt;Composer adalah dependency manager yang paling banyak digunakan dalam ekosistem PHP. Dengan Composer, kita tidak perlu lagi mengunduh library PHP satu per satu, mencari versi yang kompatibel secara manual, atau menyalin folder library ke dalam proyek.&lt;/p&gt;

&lt;p&gt;Composer menangani dependency tersebut melalui satu konfigurasi utama bernama &lt;code&gt;composer.json&lt;/code&gt;. Dari file ini, Composer mengetahui library apa yang dibutuhkan proyek, versi yang diizinkan, serta bagaimana dependency tersebut harus dipasang.&lt;/p&gt;

&lt;p&gt;Panduan ini membahas instalasi Composer di tiga sistem operasi utama:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows&lt;/li&gt;
&lt;li&gt;macOS&lt;/li&gt;
&lt;li&gt;Linux&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Selain instalasi dasar, pembahasan mencakup pengecekan PHP, konfigurasi PATH, penggunaan Composer, pembuatan proyek sederhana, update Composer, troubleshooting, dan beberapa kebiasaan yang sebaiknya diterapkan sejak awal.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Apa Itu Composer?
&lt;/h2&gt;

&lt;p&gt;Composer adalah dependency manager untuk PHP.&lt;/p&gt;

&lt;p&gt;Sederhananya, bayangkan sebuah aplikasi PHP membutuhkan beberapa library:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Aplikasi PHP
│
├── Library A
├── Library B
├── Library C
└── Library D
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tanpa dependency manager, developer harus:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;mencari library,&lt;/li&gt;
&lt;li&gt;mengunduhnya,&lt;/li&gt;
&lt;li&gt;menentukan versi,&lt;/li&gt;
&lt;li&gt;memastikan library tersebut kompatibel,&lt;/li&gt;
&lt;li&gt;memasukkannya ke proyek,&lt;/li&gt;
&lt;li&gt;mencari dependency tambahan,&lt;/li&gt;
&lt;li&gt;dan mengulangi proses tersebut ketika library diperbarui.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Composer mengotomatisasi pekerjaan tersebut.&lt;/p&gt;

&lt;p&gt;Dengan Composer, kita cukup mendefinisikan dependency:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"require"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"monolog/monolog"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^3.0"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kemudian menjalankan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Composer akan membaca konfigurasi tersebut dan memasang dependency yang diperlukan.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Mengapa Composer Penting dalam Pengembangan PHP?
&lt;/h2&gt;

&lt;p&gt;Composer bukan sekadar alat untuk mengunduh library.&lt;/p&gt;

&lt;p&gt;Composer membantu mengatur dependency sebuah proyek secara terstruktur.&lt;/p&gt;

&lt;p&gt;Beberapa manfaat utamanya:&lt;/p&gt;

&lt;h3&gt;
  
  
  2.1 Dependency management
&lt;/h3&gt;

&lt;p&gt;Composer mengetahui library yang dibutuhkan aplikasi.&lt;/p&gt;

&lt;p&gt;Contohnya:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Laravel
├── Symfony
├── Monolog
├── Carbon
├── Guzzle
└── berbagai dependency lainnya
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Developer tidak perlu memasang semuanya satu per satu.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 Version management
&lt;/h3&gt;

&lt;p&gt;Composer memungkinkan proyek menentukan versi dependency.&lt;/p&gt;

&lt;p&gt;Contohnya:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"require"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"monolog/monolog"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^3.0"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Artinya proyek mengizinkan versi yang sesuai dengan constraint &lt;code&gt;^3.0&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 Dependency of dependency
&lt;/h3&gt;

&lt;p&gt;Sebuah library biasanya membutuhkan library lain.&lt;/p&gt;

&lt;p&gt;Misalnya:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Project
│
└── Library A
    │
    ├── Library B
    └── Library C
        │
        └── Library D
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Composer dapat menyelesaikan dependency tersebut secara otomatis.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.4 Autoloading
&lt;/h3&gt;

&lt;p&gt;Composer juga menyediakan mekanisme autoloading sehingga class PHP dapat digunakan tanpa melakukan &lt;code&gt;require&lt;/code&gt; terhadap setiap file secara manual.&lt;/p&gt;

&lt;p&gt;Biasanya aplikasi cukup menjalankan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;require&lt;/span&gt; &lt;span class="k"&gt;__DIR__&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;'/vendor/autoload.php'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setelah itu class yang didaftarkan melalui Composer dapat digunakan sesuai konfigurasi autoload.&lt;/p&gt;




&lt;h1&gt;
  
  
  3. Sebelum Menginstal Composer
&lt;/h1&gt;

&lt;p&gt;Composer membutuhkan PHP.&lt;/p&gt;

&lt;p&gt;Karena itu, jangan langsung menginstal Composer tanpa memeriksa apakah PHP sudah tersedia.&lt;/p&gt;

&lt;p&gt;Buka terminal atau Command Prompt kemudian jalankan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika PHP sudah tersedia, biasanya akan muncul informasi seperti:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PHP 8.x.x (cli) ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Versi PHP yang tersedia dapat berbeda tergantung sistem dan environment yang digunakan.&lt;/p&gt;

&lt;p&gt;Jika muncul pesan seperti:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;'php' is not recognized as an internal or external command
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;atau:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;command not found: php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;berarti PHP belum tersedia melalui PATH.&lt;/p&gt;




&lt;h1&gt;
  
  
  4. Apa Itu PATH?
&lt;/h1&gt;

&lt;p&gt;PATH adalah daftar lokasi yang dicari sistem operasi ketika kita menjalankan sebuah program melalui terminal.&lt;/p&gt;

&lt;p&gt;Misalnya kita mengetik:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Sistem akan mencari executable PHP pada direktori yang terdapat di PATH.&lt;/p&gt;

&lt;p&gt;Hal yang sama berlaku untuk Composer.&lt;/p&gt;

&lt;p&gt;Jika Composer sudah terpasang tetapi perintah:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;tidak dikenali, salah satu kemungkinan terbesar adalah lokasi executable Composer belum masuk PATH.&lt;/p&gt;

&lt;p&gt;Secara sederhana:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Terminal
   │
   │ menjalankan "composer"
   ▼
PATH
   │
   ├── folder PHP
   ├── folder Composer
   └── folder program lainnya
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  5. Instalasi Composer di Windows
&lt;/h1&gt;

&lt;p&gt;Untuk Windows, tersedia installer Composer yang cukup mudah digunakan.&lt;/p&gt;

&lt;h2&gt;
  
  
  5.1 Persiapkan PHP
&lt;/h2&gt;

&lt;p&gt;Pastikan PHP dapat dipanggil dari Command Prompt atau PowerShell.&lt;/p&gt;

&lt;p&gt;Buka:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;atau:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Kemudian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika versi PHP muncul, lanjut ke instalasi Composer.&lt;/p&gt;

&lt;p&gt;Jika belum, PHP perlu dipasang terlebih dahulu.&lt;/p&gt;

&lt;p&gt;PHP dapat berasal dari instalasi PHP mandiri maupun environment seperti XAMPP, Laragon, atau environment development PHP lainnya.&lt;/p&gt;

&lt;p&gt;Yang penting, executable PHP harus dapat ditemukan oleh sistem.&lt;/p&gt;




&lt;h2&gt;
  
  
  5.2 Unduh Composer untuk Windows
&lt;/h2&gt;

&lt;p&gt;Gunakan installer resmi Composer untuk Windows.&lt;/p&gt;

&lt;p&gt;Installer biasanya bernama:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Composer-Setup.exe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jalankan installer tersebut.&lt;/p&gt;

&lt;p&gt;Pada proses instalasi, Composer akan meminta lokasi executable PHP.&lt;/p&gt;

&lt;p&gt;Contohnya:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C:\php\php.exe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;atau apabila menggunakan environment tertentu, lokasi PHP bisa berada di direktori aplikasi environment tersebut.&lt;/p&gt;

&lt;p&gt;Pastikan path yang dipilih benar.&lt;/p&gt;




&lt;h2&gt;
  
  
  5.3 Menentukan PHP yang Digunakan Composer
&lt;/h2&gt;

&lt;p&gt;Installer Composer perlu mengetahui executable PHP.&lt;/p&gt;

&lt;p&gt;Jika PHP berada di:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C:\php\php.exe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;maka pilih file tersebut.&lt;/p&gt;

&lt;p&gt;Setelah itu installer akan melanjutkan proses konfigurasi.&lt;/p&gt;

&lt;p&gt;Jika menggunakan XAMPP, lokasi PHP biasanya berada di:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C:\xampp\php\php.exe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika menggunakan Laragon, lokasi PHP mengikuti versi PHP yang sedang digunakan oleh Laragon.&lt;/p&gt;

&lt;p&gt;Jangan menebak lokasi. Gunakan file &lt;code&gt;php.exe&lt;/code&gt; yang benar-benar digunakan environment PHP Anda.&lt;/p&gt;




&lt;h1&gt;
  
  
  6. Verifikasi Composer di Windows
&lt;/h1&gt;

&lt;p&gt;Setelah instalasi selesai, tutup Command Prompt atau PowerShell yang sebelumnya terbuka.&lt;/p&gt;

&lt;p&gt;Kemudian buka terminal baru.&lt;/p&gt;

&lt;p&gt;Jalankan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;atau:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer &lt;span class="nt"&gt;-V&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika berhasil, Composer akan menampilkan informasi versinya.&lt;/p&gt;

&lt;p&gt;Anda juga dapat menjalankan:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;untuk melihat daftar command yang tersedia.&lt;/p&gt;




&lt;h1&gt;
  
  
  7. Jika &lt;code&gt;composer&lt;/code&gt; Tidak Dikenali di Windows
&lt;/h1&gt;

&lt;p&gt;Misalnya muncul:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;'composer' is not recognized as an internal or external command
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jangan langsung menginstal ulang Composer.&lt;/p&gt;

&lt;p&gt;Pertama, tutup terminal kemudian buka kembali.&lt;/p&gt;

&lt;p&gt;Alasannya sederhana: perubahan PATH tidak selalu langsung terbaca oleh terminal yang sudah terbuka.&lt;/p&gt;

&lt;p&gt;Jika masih bermasalah, periksa PATH.&lt;/p&gt;

&lt;p&gt;Di Windows, buka:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;System Properties
→ Advanced
→ Environment Variables
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kemudian periksa variabel:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Pastikan lokasi Composer telah tersedia.&lt;/p&gt;

&lt;p&gt;Anda juga dapat mencari lokasi Composer menggunakan:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Jika Composer ditemukan, Windows akan menampilkan lokasi executable terkait.&lt;/p&gt;

&lt;p&gt;Untuk PHP:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Ini sangat berguna ketika komputer memiliki beberapa instalasi PHP.&lt;/p&gt;




&lt;h1&gt;
  
  
  8. Instalasi Composer di macOS
&lt;/h1&gt;

&lt;p&gt;Di macOS, Composer dapat dipasang melalui installer resmi atau package manager seperti Homebrew.&lt;/p&gt;

&lt;p&gt;Untuk developer yang menggunakan Homebrew, instalasi biasanya lebih praktis.&lt;/p&gt;

&lt;h2&gt;
  
  
  8.1 Periksa PHP
&lt;/h2&gt;

&lt;p&gt;Buka Terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika PHP tersedia, lanjutkan.&lt;/p&gt;

&lt;p&gt;Jika belum tersedia dan menggunakan Homebrew, PHP dapat dipasang dengan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setelah selesai:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  9. Instalasi Composer macOS Menggunakan Homebrew
&lt;/h1&gt;

&lt;p&gt;Jika Homebrew sudah tersedia, Composer dapat dipasang dengan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;composer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setelah proses selesai, cek:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika versi Composer muncul, instalasi berhasil.&lt;/p&gt;

&lt;p&gt;Untuk mengetahui lokasi executable Composer:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;






&lt;h1&gt;
  
  
  10. Bagaimana Jika Homebrew Belum Terpasang?
&lt;/h1&gt;

&lt;p&gt;Periksa:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika command tersebut tidak ditemukan, berarti Homebrew belum tersedia.&lt;/p&gt;

&lt;p&gt;Homebrew merupakan package manager populer untuk macOS.&lt;/p&gt;

&lt;p&gt;Gunakan dokumentasi resmi Homebrew untuk instalasi versi terbaru dan ikuti instruksi sesuai arsitektur Mac yang digunakan.&lt;/p&gt;

&lt;p&gt;Setelah Homebrew terpasang:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;kemudian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;composer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  11. Instalasi Composer macOS Tanpa Homebrew
&lt;/h1&gt;

&lt;p&gt;Composer juga dapat dipasang menggunakan installer berbasis PHP.&lt;/p&gt;

&lt;p&gt;Pendekatan dasarnya adalah mengunduh installer Composer, memverifikasi installer, kemudian memasang Composer sebagai executable.&lt;/p&gt;

&lt;p&gt;Salah satu pola instalasi yang umum:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s2"&gt;"copy('https://getcomposer.org/installer', 'composer-setup.php');"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kemudian installer dijalankan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php composer-setup.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setelah itu, Composer dapat dipindahkan ke lokasi yang ada di PATH, misalnya:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo mv &lt;/span&gt;composer.phar /usr/local/bin/composer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pada beberapa sistem macOS modern, &lt;code&gt;/opt/homebrew/bin&lt;/code&gt; atau lokasi lain mungkin lebih sesuai.&lt;/p&gt;

&lt;p&gt;Karena konfigurasi PATH dapat berbeda, periksa terlebih dahulu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;dan:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;






&lt;h1&gt;
  
  
  12. Instalasi Composer di Linux
&lt;/h1&gt;

&lt;p&gt;Linux memiliki banyak distribusi, tetapi konsep instalasinya relatif sama.&lt;/p&gt;

&lt;p&gt;Distribusi yang umum digunakan antara lain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ubuntu&lt;/li&gt;
&lt;li&gt;Debian&lt;/li&gt;
&lt;li&gt;Linux Mint&lt;/li&gt;
&lt;li&gt;Fedora&lt;/li&gt;
&lt;li&gt;Rocky Linux&lt;/li&gt;
&lt;li&gt;AlmaLinux&lt;/li&gt;
&lt;li&gt;Arch Linux&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Langkah pertama tetap sama:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  13. Instal PHP di Ubuntu atau Debian
&lt;/h1&gt;

&lt;p&gt;Jika PHP belum tersedia, pada Ubuntu/Debian Anda dapat menggunakan package manager:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kemudian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;php-cli unzip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setelah selesai:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika versi PHP muncul, PHP CLI sudah tersedia.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;php-cli&lt;/code&gt; penting karena Composer digunakan melalui command line.&lt;/p&gt;




&lt;h1&gt;
  
  
  14. Instal Composer di Linux
&lt;/h1&gt;

&lt;p&gt;Composer menyediakan installer resmi berbasis PHP.&lt;/p&gt;

&lt;p&gt;Pendekatan yang umum adalah mengunduh installer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s2"&gt;"copy('https://getcomposer.org/installer', 'composer-setup.php');"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kemudian jalankan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php composer-setup.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika berhasil, akan terbentuk:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;File tersebut dapat dijalankan dengan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php composer.phar &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Namun, agar kita dapat menggunakan command:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;tanpa menulis &lt;code&gt;php composer.phar&lt;/code&gt;, Composer biasanya ditempatkan pada direktori yang terdapat di PATH.&lt;/p&gt;

&lt;p&gt;Contohnya:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo mv &lt;/span&gt;composer.phar /usr/local/bin/composer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kemudian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  15. Mengapa Composer Sering Diletakkan di &lt;code&gt;/usr/local/bin&lt;/code&gt;?
&lt;/h1&gt;

&lt;p&gt;Linux menggunakan PATH untuk mencari executable.&lt;/p&gt;

&lt;p&gt;Cek PATH dengan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika terdapat:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;maka program yang diletakkan di sana biasanya dapat dipanggil langsung:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;daripada:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php /path/ke/composer.phar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  16. Instalasi Composer dengan Package Manager Linux
&lt;/h1&gt;

&lt;p&gt;Pada beberapa distribusi, Composer tersedia melalui repository sistem.&lt;/p&gt;

&lt;p&gt;Contohnya pada Ubuntu/Debian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;composer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kemudian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cara ini mudah, tetapi perlu dipahami bahwa versi Composer dari repository distribusi bisa berbeda dari versi yang tersedia langsung dari situs resmi Composer.&lt;/p&gt;

&lt;p&gt;Jika kebutuhan proyek mengharuskan versi tertentu, periksa versi yang tersedia sebelum memilih metode ini.&lt;/p&gt;




&lt;h1&gt;
  
  
  17. Verifikasi Instalasi Composer
&lt;/h1&gt;

&lt;p&gt;Terlepas dari sistem operasi yang digunakan, pemeriksaan dasar dapat dilakukan dengan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kemudian:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;composer diagnose&lt;/code&gt; dapat membantu menemukan masalah pada environment Composer.&lt;/p&gt;

&lt;p&gt;Contoh pemeriksaan:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Jika environment bermasalah, Composer dapat memberikan informasi mengenai konfigurasi yang perlu diperiksa.&lt;/p&gt;




&lt;h1&gt;
  
  
  18. Memahami File &lt;code&gt;composer.json&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;Setelah Composer terpasang, hal penting berikutnya adalah memahami &lt;code&gt;composer.json&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Misalnya:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"contoh/aplikasi"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Contoh aplikasi PHP"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"require"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"monolog/monolog"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^3.0"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bagian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="s2"&gt;"require"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;berisi dependency utama aplikasi.&lt;/p&gt;

&lt;p&gt;Dalam contoh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"monolog/monolog"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^3.0"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;berarti aplikasi membutuhkan package Monolog dengan constraint versi tersebut.&lt;/p&gt;




&lt;h1&gt;
  
  
  19. Membuat Proyek Composer Baru
&lt;/h1&gt;

&lt;p&gt;Buat folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;belajar-composer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Masuk:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;belajar-composer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kemudian:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Composer akan menanyakan beberapa informasi.&lt;/p&gt;

&lt;p&gt;Setelah selesai, proyek akan memiliki:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;belajar-composer/
└── composer.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  20. Menambahkan Package
&lt;/h1&gt;

&lt;p&gt;Misalnya ingin memasang Monolog:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require monolog/monolog
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Composer akan membuat atau memperbarui:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;dan:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Kemudian dependency akan dipasang ke:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Strukturnya kurang lebih:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;belajar-composer/
│
├── composer.json
├── composer.lock
└── vendor/
    ├── autoload.php
    └── ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  21. Apa Itu &lt;code&gt;composer.lock&lt;/code&gt;?
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;composer.json&lt;/code&gt; menjelaskan dependency dan constraint versi.&lt;/p&gt;

&lt;p&gt;Sementara &lt;code&gt;composer.lock&lt;/code&gt; menyimpan versi dependency yang benar-benar dipilih saat dependency di-resolve.&lt;/p&gt;

&lt;p&gt;Ini penting dalam pengembangan aplikasi.&lt;/p&gt;

&lt;p&gt;Misalnya developer A menjalankan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;dan developer B juga menjalankan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dengan &lt;code&gt;composer.lock&lt;/code&gt; yang sama, keduanya akan menggunakan dependency yang telah dikunci oleh file tersebut.&lt;/p&gt;

&lt;p&gt;Untuk aplikasi, &lt;code&gt;composer.lock&lt;/code&gt; umumnya perlu disimpan di repository Git.&lt;/p&gt;




&lt;h1&gt;
  
  
  22. &lt;code&gt;composer install&lt;/code&gt; vs &lt;code&gt;composer update&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;Dua command ini sering membingungkan developer pemula.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;composer install&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Gunakan ketika ingin memasang dependency berdasarkan konfigurasi proyek.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika &lt;code&gt;composer.lock&lt;/code&gt; tersedia, Composer akan menggunakan versi yang tercatat di lock file.&lt;/p&gt;

&lt;p&gt;Ini adalah command yang umum digunakan ketika melakukan clone project dari Git.&lt;/p&gt;

&lt;p&gt;Contohnya:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &amp;lt;repository&amp;gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;project
composer &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;code&gt;composer update&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Gunakan ketika memang ingin melakukan resolusi ulang dependency berdasarkan constraint pada &lt;code&gt;composer.json&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Command ini dapat mengubah &lt;code&gt;composer.lock&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Karena itu, jangan menjalankan &lt;code&gt;composer update&lt;/code&gt; secara sembarangan pada project production.&lt;/p&gt;




&lt;h1&gt;
  
  
  23. Perbedaan Sederhana
&lt;/h1&gt;

&lt;p&gt;Bayangkan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer.json
       │
       ▼
Aturan versi dependency
       │
       ▼
composer.lock
       │
       ▼
Versi yang dipilih
       │
       ▼
vendor/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Secara sederhana:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;= pasang dependency sesuai lock file.&lt;/p&gt;

&lt;p&gt;Sedangkan:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;= cari kembali versi dependency yang sesuai dengan constraint.&lt;/p&gt;




&lt;h1&gt;
  
  
  24. Apa Itu Folder &lt;code&gt;vendor&lt;/code&gt;?
&lt;/h1&gt;

&lt;p&gt;Folder:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;berisi dependency yang dipasang Composer.&lt;/p&gt;

&lt;p&gt;Contohnya:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vendor/
├── autoload.php
├── composer/
├── monolog/
└── ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jangan mengedit file di dalam &lt;code&gt;vendor&lt;/code&gt; secara manual.&lt;/p&gt;

&lt;p&gt;Jika dependency berubah, biarkan Composer yang mengelolanya.&lt;/p&gt;




&lt;h1&gt;
  
  
  25. Autoload Composer
&lt;/h1&gt;

&lt;p&gt;Composer menghasilkan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vendor/autoload.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;File ini dapat digunakan aplikasi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;require&lt;/span&gt; &lt;span class="k"&gt;__DIR__&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;'/vendor/autoload.php'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setelah itu package yang terpasang melalui Composer dapat digunakan.&lt;/p&gt;

&lt;p&gt;Contoh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="k"&gt;require&lt;/span&gt; &lt;span class="k"&gt;__DIR__&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;'/vendor/autoload.php'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Monolog\Logger&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Monolog\Handler\StreamHandler&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nv"&gt;$log&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'app'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$log&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;pushHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;StreamHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;__DIR__&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;'/app.log'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="nv"&gt;$log&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Aplikasi berjalan.'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Selesai."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jalankan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php index.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika tidak ada error dependency, berarti Composer dan autoload telah bekerja dengan baik.&lt;/p&gt;




&lt;h1&gt;
  
  
  26. Composer Global vs Dependency Project
&lt;/h1&gt;

&lt;p&gt;Ada konsep yang perlu dibedakan.&lt;/p&gt;

&lt;p&gt;Composer sendiri adalah tool global.&lt;/p&gt;

&lt;p&gt;Sementara package seperti:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;biasanya merupakan dependency project.&lt;/p&gt;

&lt;p&gt;Contohnya:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Computer
│
├── Composer
│
├── Project A
│   └── vendor/
│
├── Project B
│   └── vendor/
│
└── Project C
    └── vendor/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setiap project memiliki dependency masing-masing.&lt;/p&gt;




&lt;h1&gt;
  
  
  27. Menjalankan Composer di Project
&lt;/h1&gt;

&lt;p&gt;Setelah Composer terpasang, pola kerja yang umum adalah:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;nama-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kemudian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika ingin menambahkan package:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require nama/vendor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika ingin menghapus package:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer remove nama/vendor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  28. Command Composer yang Perlu Diketahui
&lt;/h1&gt;

&lt;p&gt;Beberapa command penting:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Fungsi&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;composer --version&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Melihat versi Composer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;composer diagnose&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Mendiagnosis environment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;composer init&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Membuat &lt;code&gt;composer.json&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;composer install&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Memasang dependency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;composer update&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Memperbarui dependency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;composer require&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Menambahkan dependency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;composer remove&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Menghapus dependency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;composer dump-autoload&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Membuat ulang autoloader&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;composer show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Melihat package yang terpasang&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;composer validate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Memvalidasi &lt;code&gt;composer.json&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h1&gt;
  
  
  29. Masalah PHP Tidak Ditemukan
&lt;/h1&gt;

&lt;p&gt;Jika:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;menghasilkan:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;atau pada Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php is not recognized
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;maka masalahnya belum berada pada Composer.&lt;/p&gt;

&lt;p&gt;Perbaiki terlebih dahulu instalasi atau PATH PHP.&lt;/p&gt;

&lt;p&gt;Periksa lokasi PHP.&lt;/p&gt;

&lt;h3&gt;
  
  
  Windows
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;h3&gt;
  
  
  macOS/Linux
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;p&gt;Jika tidak ada hasil, shell belum menemukan PHP.&lt;/p&gt;




&lt;h1&gt;
  
  
  30. Masalah Composer Tidak Ditemukan
&lt;/h1&gt;

&lt;p&gt;Jika:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;tidak ditemukan:&lt;/p&gt;

&lt;h3&gt;
  
  
  Windows
&lt;/h3&gt;

&lt;p&gt;Gunakan:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  macOS/Linux
&lt;/h3&gt;

&lt;p&gt;Gunakan:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Jika tidak ada hasil, periksa PATH dan instalasi Composer.&lt;/p&gt;

&lt;p&gt;Setelah memperbarui PATH, buka terminal baru.&lt;/p&gt;




&lt;h1&gt;
  
  
  31. Beberapa Versi PHP Terpasang
&lt;/h1&gt;

&lt;p&gt;Ini adalah masalah yang cukup umum pada komputer developer.&lt;/p&gt;

&lt;p&gt;Misalnya:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PHP 8.1
PHP 8.2
PHP 8.3
PHP 8.4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;tersedia secara bersamaan.&lt;/p&gt;

&lt;p&gt;Periksa PHP yang sedang digunakan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;dan:&lt;/p&gt;

&lt;h3&gt;
  
  
  Windows
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;h3&gt;
  
  
  macOS/Linux
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;p&gt;Jika lebih dari satu lokasi muncul, PATH menentukan PHP mana yang dipanggil terlebih dahulu.&lt;/p&gt;




&lt;h1&gt;
  
  
  32. Masalah Extension PHP
&lt;/h1&gt;

&lt;p&gt;Composer dan package PHP tertentu dapat membutuhkan extension tertentu.&lt;/p&gt;

&lt;p&gt;Jika Composer menampilkan pesan seperti:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ext-xxx is missing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;berarti PHP yang sedang digunakan belum memiliki extension tersebut.&lt;/p&gt;

&lt;p&gt;Periksa extension:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-m&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Untuk melihat konfigurasi PHP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;--ini&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Command tersebut menunjukkan file konfigurasi &lt;code&gt;php.ini&lt;/code&gt; yang sedang digunakan.&lt;/p&gt;




&lt;h1&gt;
  
  
  33. Masalah &lt;code&gt;memory_limit&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;Pada dependency besar, Composer dapat menggunakan cukup banyak memory.&lt;/p&gt;

&lt;p&gt;Jika mendapatkan error berkaitan dengan memory limit, periksa:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-i&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;memory_limit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pada Windows, Anda dapat menggunakan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-i&lt;/span&gt; | findstr memory_limit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Namun jangan langsung menaikkan memory limit tanpa memahami penyebabnya. Error memory dapat berasal dari environment, dependency graph, atau konfigurasi PHP yang digunakan CLI.&lt;/p&gt;




&lt;h1&gt;
  
  
  34. Masalah SSL atau Sertifikat
&lt;/h1&gt;

&lt;p&gt;Jika Composer mengalami masalah ketika mengakses repository HTTPS, periksa konfigurasi SSL PHP.&lt;/p&gt;

&lt;p&gt;Gunakan:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;dan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;--ini&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pastikan PHP CLI menggunakan konfigurasi yang benar.&lt;/p&gt;

&lt;p&gt;Masalah SSL sebaiknya diperbaiki pada konfigurasi sertifikat atau environment, bukan dengan menonaktifkan verifikasi SSL secara sembarangan.&lt;/p&gt;




&lt;h1&gt;
  
  
  35. Jangan Menggunakan &lt;code&gt;sudo composer&lt;/code&gt; Secara Sembarangan
&lt;/h1&gt;

&lt;p&gt;Pada Linux/macOS, developer terkadang menemukan error permission lalu menjalankan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;composer &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ini bukan solusi yang ideal untuk dependency project.&lt;/p&gt;

&lt;p&gt;Menggunakan &lt;code&gt;sudo&lt;/code&gt; dapat membuat file project dimiliki oleh user &lt;code&gt;root&lt;/code&gt;, kemudian user biasa mengalami masalah permission.&lt;/p&gt;

&lt;p&gt;Lebih baik perbaiki ownership dan permission project.&lt;/p&gt;

&lt;p&gt;Gunakan hak administrator hanya ketika memang dibutuhkan, misalnya ketika memasang executable secara system-wide ke direktori yang membutuhkan permission administrator.&lt;/p&gt;




&lt;h1&gt;
  
  
  36. Composer dan Git
&lt;/h1&gt;

&lt;p&gt;Dalam project PHP modern, biasanya file berikut disimpan di Git:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer.json
composer.lock
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sedangkan folder:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;biasanya tidak disimpan di repository.&lt;/p&gt;

&lt;p&gt;Contoh &lt;code&gt;.gitignore&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Ketika developer lain melakukan clone:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &amp;lt;repository&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;kemudian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;project
composer &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Composer akan membuat kembali:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;berdasarkan dependency project.&lt;/p&gt;




&lt;h1&gt;
  
  
  37. Composer pada Laravel
&lt;/h1&gt;

&lt;p&gt;Composer sangat erat dengan ekosistem Laravel.&lt;/p&gt;

&lt;p&gt;Untuk membuat project Laravel, pola yang umum adalah:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer create-project laravel/laravel nama-aplikasi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kemudian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;nama-aplikasi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;dan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php artisan serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Composer menangani berbagai dependency Laravel di belakang layar.&lt;/p&gt;

&lt;p&gt;Ketika project Laravel sudah tersedia dari repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &amp;lt;repository&amp;gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;nama-aplikasi
composer &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kemudian konfigurasi environment dan jalankan aplikasi sesuai kebutuhan project.&lt;/p&gt;




&lt;h1&gt;
  
  
  38. Composer untuk Development Team
&lt;/h1&gt;

&lt;p&gt;Dalam tim, Composer membantu menjaga dependency tetap konsisten.&lt;/p&gt;

&lt;p&gt;Workflow sederhananya:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer A
    │
    ├── composer require package
    │
    ├── composer.json
    └── composer.lock
             │
             ▼
          Git
             │
      ┌──────┴──────┐
      ▼             ▼
Developer B     Developer C
      │             │
      └── composer install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dengan demikian, anggota tim tidak perlu memasang dependency secara manual satu per satu.&lt;/p&gt;




&lt;h1&gt;
  
  
  39. Composer pada Server Production
&lt;/h1&gt;

&lt;p&gt;Pada deployment, pola yang umum adalah:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--no-dev&lt;/span&gt; &lt;span class="nt"&gt;--optimize-autoloader&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Namun command deployment harus disesuaikan dengan framework dan kebutuhan aplikasi.&lt;/p&gt;

&lt;p&gt;Untuk aplikasi production, dependency sebaiknya dipasang berdasarkan lock file yang sudah diuji.&lt;/p&gt;

&lt;p&gt;Hindari menjadikan:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;sebagai bagian dari deployment rutin tanpa alasan yang jelas.&lt;/p&gt;




&lt;h1&gt;
  
  
  40. Composer di Windows, macOS, dan Linux
&lt;/h1&gt;

&lt;p&gt;Secara konsep, ketiga sistem operasi bekerja dengan cara yang sama.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Hal&lt;/th&gt;
&lt;th&gt;Windows&lt;/th&gt;
&lt;th&gt;macOS&lt;/th&gt;
&lt;th&gt;Linux&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PHP&lt;/td&gt;
&lt;td&gt;Wajib&lt;/td&gt;
&lt;td&gt;Wajib&lt;/td&gt;
&lt;td&gt;Wajib&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Composer&lt;/td&gt;
&lt;td&gt;Wajib&lt;/td&gt;
&lt;td&gt;Wajib&lt;/td&gt;
&lt;td&gt;Wajib&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terminal&lt;/td&gt;
&lt;td&gt;CMD/PowerShell/Terminal&lt;/td&gt;
&lt;td&gt;Terminal&lt;/td&gt;
&lt;td&gt;Terminal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cek PHP&lt;/td&gt;
&lt;td&gt;&lt;code&gt;php -v&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;php -v&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;php -v&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cek Composer&lt;/td&gt;
&lt;td&gt;&lt;code&gt;composer -V&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;composer -V&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;composer -V&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cek executable PHP&lt;/td&gt;
&lt;td&gt;&lt;code&gt;where php&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;which php&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;which php&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cek executable Composer&lt;/td&gt;
&lt;td&gt;&lt;code&gt;where composer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;which composer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;which composer&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Package manager umum&lt;/td&gt;
&lt;td&gt;winget/choco, installer aplikasi&lt;/td&gt;
&lt;td&gt;Homebrew&lt;/td&gt;
&lt;td&gt;apt/dnf/pacman&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Perbedaan utama berada pada cara memasang PHP, Composer, dan mengatur PATH.&lt;/p&gt;




&lt;h1&gt;
  
  
  41. Checklist Instalasi Composer
&lt;/h1&gt;

&lt;p&gt;Setelah instalasi, lakukan pemeriksaan berikut.&lt;/p&gt;

&lt;h3&gt;
  
  
  PHP
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Composer
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Composer diagnostic
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Lokasi PHP
&lt;/h3&gt;

&lt;p&gt;Windows:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;macOS/Linux:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Lokasi Composer
&lt;/h3&gt;

&lt;p&gt;Windows:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;macOS/Linux:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Versi PHP CLI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Konfigurasi PHP
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;--ini&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika seluruh command bekerja, environment dasar Composer sudah siap.&lt;/p&gt;




&lt;h1&gt;
  
  
  42. Kesalahan yang Sering Dilakukan Pemula
&lt;/h1&gt;

&lt;h2&gt;
  
  
  42.1 Menginstal Composer tanpa PHP
&lt;/h2&gt;

&lt;p&gt;Composer adalah dependency manager untuk PHP.&lt;/p&gt;

&lt;p&gt;Jadi PHP perlu tersedia terlebih dahulu.&lt;/p&gt;




&lt;h2&gt;
  
  
  42.2 Tidak membuka terminal baru setelah mengubah PATH
&lt;/h2&gt;

&lt;p&gt;Jika PATH berubah tetapi terminal lama masih digunakan, command baru mungkin belum dikenali.&lt;/p&gt;

&lt;p&gt;Solusi:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;tutup terminal,&lt;/li&gt;
&lt;li&gt;buka terminal baru,&lt;/li&gt;
&lt;li&gt;jalankan kembali:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  42.3 Memiliki beberapa PHP tetapi tidak tahu PHP mana yang digunakan
&lt;/h2&gt;

&lt;p&gt;Gunakan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;dan:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;atau:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;






&lt;h2&gt;
  
  
  42.4 Menghapus &lt;code&gt;composer.lock&lt;/code&gt; tanpa alasan
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;composer.lock&lt;/code&gt; membantu menjaga dependency tetap konsisten.&lt;/p&gt;

&lt;p&gt;Jangan menghapusnya hanya karena muncul masalah dependency.&lt;/p&gt;

&lt;p&gt;Cari tahu penyebab masalah terlebih dahulu.&lt;/p&gt;




&lt;h2&gt;
  
  
  42.5 Menjalankan &lt;code&gt;composer update&lt;/code&gt; setiap kali ada error
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;composer update&lt;/code&gt; bukan command untuk memperbaiki semua masalah.&lt;/p&gt;

&lt;p&gt;Jika project sebenarnya sudah memiliki lock file yang benar, gunakan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;dan diagnosis masalah yang sebenarnya.&lt;/p&gt;




&lt;h2&gt;
  
  
  42.6 Mengubah isi &lt;code&gt;vendor&lt;/code&gt; secara manual
&lt;/h2&gt;

&lt;p&gt;Jangan mengedit dependency di dalam:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Jika membutuhkan perubahan library, gunakan dependency yang sesuai atau mekanisme Composer yang tepat.&lt;/p&gt;




&lt;h1&gt;
  
  
  43. Tes Instalasi dengan Project Sederhana
&lt;/h1&gt;

&lt;p&gt;Setelah Composer berhasil dipasang, sebaiknya jangan berhenti pada:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lakukan pengujian nyata.&lt;/p&gt;

&lt;p&gt;Buat folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;composer-test
&lt;span class="nb"&gt;cd &lt;/span&gt;composer-test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kemudian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require monolog/monolog
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika berhasil, akan terbentuk:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer.json
composer.lock
vendor/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Buat file:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Isi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="k"&gt;require&lt;/span&gt; &lt;span class="k"&gt;__DIR__&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;'/vendor/autoload.php'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Monolog\Logger&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Monolog\Handler\StreamHandler&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nv"&gt;$logger&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Logger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'demo'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nv"&gt;$logger&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;pushHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;StreamHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;__DIR__&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;'/app.log'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nv"&gt;$logger&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Composer berhasil digunakan.'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Composer bekerja dengan baik.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jalankan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php index.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika muncul:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Composer bekerja dengan baik.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;dan file:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;terbentuk, maka Composer, dependency installation, dan autoloading telah bekerja.&lt;/p&gt;




&lt;h1&gt;
  
  
  44. Alur Kerja Composer yang Perlu Dipahami
&lt;/h1&gt;

&lt;p&gt;Daripada menghafalkan banyak command, lebih baik pahami alurnya.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer.json
      │
      ▼
Dependency definition
      │
      ▼
Composer
      │
      ├── Resolusi dependency
      │
      ├── Menentukan versi
      │
      ├── Mengunduh package
      │
      └── Membuat autoloader
      │
      ▼
composer.lock
      │
      ▼
vendor/
      │
      ▼
Aplikasi PHP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inilah inti Composer.&lt;/p&gt;




&lt;h1&gt;
  
  
  45. Composer Bukan Framework
&lt;/h1&gt;

&lt;p&gt;Hal ini juga penting dipahami.&lt;/p&gt;

&lt;p&gt;Composer bukan Laravel.&lt;/p&gt;

&lt;p&gt;Composer bukan Symfony.&lt;/p&gt;

&lt;p&gt;Composer bukan CodeIgniter.&lt;/p&gt;

&lt;p&gt;Composer adalah dependency manager.&lt;/p&gt;

&lt;p&gt;Hubungannya dapat digambarkan seperti:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Composer
   │
   ├── Laravel
   ├── Symfony
   ├── Monolog
   ├── Guzzle
   ├── PHPUnit
   └── berbagai package PHP lainnya
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Framework dan library dapat menggunakan Composer untuk mengelola dependency mereka.&lt;/p&gt;




&lt;h1&gt;
  
  
  46. Ringkasan Instalasi
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Windows
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Pastikan PHP tersedia.&lt;/li&gt;
&lt;li&gt;Jalankan:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Instal Composer menggunakan installer Windows.&lt;/li&gt;
&lt;li&gt;Pastikan installer menggunakan PHP yang benar.&lt;/li&gt;
&lt;li&gt;Buka terminal baru.&lt;/li&gt;
&lt;li&gt;Jalankan:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Jika gagal:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;where php
where composer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  macOS
&lt;/h2&gt;

&lt;p&gt;Jika menggunakan Homebrew:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;php
brew &lt;span class="nb"&gt;install &lt;/span&gt;composer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kemudian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-v&lt;/span&gt;
composer &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika menggunakan installer manual, pastikan executable Composer berada pada PATH.&lt;/p&gt;




&lt;h2&gt;
  
  
  Linux
&lt;/h2&gt;

&lt;p&gt;Pada Ubuntu/Debian, salah satu pendekatan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;php-cli unzip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kemudian instal Composer melalui installer resmi atau package manager yang sesuai.&lt;/p&gt;

&lt;p&gt;Verifikasi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-v&lt;/span&gt;
composer &lt;span class="nt"&gt;--version&lt;/span&gt;
composer diagnose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  47. Kesimpulan
&lt;/h1&gt;

&lt;p&gt;Instalasi Composer sebenarnya tidak sulit. Bagian yang paling sering membuat pemula mengalami masalah bukan Composer itu sendiri, melainkan hubungan antara PHP, PATH, dan environment sistem operasi.&lt;/p&gt;

&lt;p&gt;Urutan berpikir yang paling aman adalah:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Apakah PHP tersedia?
        ↓
2. PHP mana yang digunakan?
        ↓
3. Apakah Composer sudah terpasang?
        ↓
4. Apakah Composer dapat ditemukan oleh PATH?
        ↓
5. Apakah Composer dapat menjalankan dependency?
        ↓
6. Apakah project dapat menggunakan vendor/autoload.php?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika keenam bagian tersebut dipahami, masalah Composer akan jauh lebih mudah ditelusuri.&lt;/p&gt;

&lt;p&gt;Command paling penting untuk diingat:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





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

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require nama/vendor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





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

&lt;/div&gt;



&lt;p&gt;Dan satu prinsip yang sangat penting:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Jangan hanya menghafal command Composer. Pahami hubungan antara &lt;code&gt;composer.json&lt;/code&gt;, &lt;code&gt;composer.lock&lt;/code&gt;, &lt;code&gt;vendor/&lt;/code&gt;, PHP, dan autoloading.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Dengan pemahaman tersebut, Composer bukan lagi sekadar program yang harus "diinstal", tetapi menjadi bagian dari workflow pengembangan aplikasi PHP yang terstruktur.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tentang Penulis
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Ahmad Asroni, S.Kom., M.Kom.&lt;/strong&gt; adalah software developer dan technology practitioner yang berfokus pada software engineering, web development, mobile development, dan artificial intelligence.&lt;/p&gt;

&lt;p&gt;Saya aktif mengembangkan aplikasi dan solusi teknologi menggunakan berbagai teknologi modern, sekaligus berbagi pengetahuan praktis mengenai pemrograman, software development, dan teknologi informasi melalui berbagai proyek dan tulisan teknis.&lt;/p&gt;

&lt;p&gt;Artikel ini ditulis untuk memberikan panduan praktis mengenai instalasi Composer pada Windows, macOS, dan Linux, mulai dari persiapan PHP, konfigurasi environment, proses instalasi, hingga penggunaan Composer dalam proyek PHP.&lt;/p&gt;

&lt;h3&gt;
  
  
  Profil Ahmad Asroni
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Nama:&lt;/strong&gt; Ahmad Asroni, S.Kom., M.Kom.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fokus:&lt;/strong&gt; Software Engineering, Web Development, Mobile Development, Artificial Intelligence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Website:&lt;/strong&gt; [&lt;a href="https://ahmadasroni38.github.io" rel="noopener noreferrer"&gt;https://ahmadasroni38.github.io&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; [&lt;a href="https://github.com/ahmadasroni38" rel="noopener noreferrer"&gt;https://github.com/ahmadasroni38&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kaggle:&lt;/strong&gt; [&lt;a href="https://www.kaggle.com/ahmadasroni" rel="noopener noreferrer"&gt;https://www.kaggle.com/ahmadasroni&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LinkedIn:&lt;/strong&gt; [&lt;a href="https://www.linkedin.com/in/ahmad-asroni-7538bb214" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/ahmad-asroni-7538bb214&lt;/a&gt;]&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Ditulis oleh Ahmad Asroni&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Software Developer · Technology Practitioner · AI Enthusiast&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;© 2026 Ahmad Asroni. All rights reserved.&lt;/p&gt;

</description>
      <category>php</category>
      <category>laravel</category>
      <category>website</category>
      <category>fullstack</category>
    </item>
    <item>
      <title>The Future of Mobile Computing</title>
      <dc:creator>ahmadasroni38</dc:creator>
      <pubDate>Mon, 09 Feb 2026 02:31:42 +0000</pubDate>
      <link>https://dev.to/ahmadasroni38/the-future-of-mobile-computing-435e</link>
      <guid>https://dev.to/ahmadasroni38/the-future-of-mobile-computing-435e</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction: The Phone in Your Pocket Is Just the Beginning&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The mobile phone you carry today is &lt;strong&gt;not the final form&lt;/strong&gt; of mobile computing. It is a &lt;strong&gt;transitional device&lt;/strong&gt; — powerful, but temporary.&lt;/p&gt;

&lt;p&gt;In the last 15 years, mobile computing evolved from &lt;strong&gt;making calls&lt;/strong&gt; to &lt;strong&gt;running our entire lives&lt;/strong&gt;. The next 10 years will bring changes even more dramatic.&lt;/p&gt;

&lt;p&gt;As students, you need to understand not just &lt;strong&gt;how things work today&lt;/strong&gt;, but &lt;strong&gt;where things are going&lt;/strong&gt; — because you will be the engineers, designers, and entrepreneurs building that future.&lt;/p&gt;

&lt;p&gt;In this session, we explore &lt;strong&gt;five major trends&lt;/strong&gt; shaping the future of mobile computing, supported by &lt;strong&gt;real examples&lt;/strong&gt;, &lt;strong&gt;visual comparisons&lt;/strong&gt;, and &lt;strong&gt;simple analogies&lt;/strong&gt; that make complex ideas easy to grasp.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The best way to predict the future is to &lt;strong&gt;invent it&lt;/strong&gt;."&lt;br&gt;
— Alan Kay, Computer Scientist&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;The Mind-Blowing Starting Point&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Before we look forward, let's appreciate how far we've come:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Apollo 11 Computer (1969)&lt;/th&gt;
&lt;th&gt;Your Smartphone (2025)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RAM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4 KB&lt;/td&gt;
&lt;td&gt;8–16 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Speed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.043 MHz&lt;/td&gt;
&lt;td&gt;3+ GHz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Storage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;72 KB&lt;/td&gt;
&lt;td&gt;256 GB+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Weight&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;32 kg&lt;/td&gt;
&lt;td&gt;200 grams&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$150,000&lt;/td&gt;
&lt;td&gt;$200–1,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Your phone is &lt;strong&gt;100,000 times more powerful&lt;/strong&gt; than the computer that landed humans on the Moon.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That was 55 years ago. What will mobile look like in the &lt;strong&gt;next&lt;/strong&gt; 10 years?&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;1. 5G and Beyond — Super-Fast Connectivity&lt;/strong&gt;
&lt;/h2&gt;

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

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

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

&lt;h3&gt;
  
  
  &lt;strong&gt;What It Means&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;5G is the &lt;strong&gt;fifth generation&lt;/strong&gt; of mobile networks — but it's not just "faster internet."&lt;/p&gt;

&lt;p&gt;5G brings &lt;strong&gt;three superpowers&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Superpower&lt;/th&gt;
&lt;th&gt;What It Means&lt;/th&gt;
&lt;th&gt;Why It Matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;⚡ &lt;strong&gt;Speed&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Up to 20 Gbps (20x faster than 4G)&lt;/td&gt;
&lt;td&gt;Stream 8K video on your phone without buffering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⏱️ &lt;strong&gt;Low Latency&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;1ms delay (vs 50ms on 4G)&lt;/td&gt;
&lt;td&gt;Remote surgery, self-driving cars become possible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📱 &lt;strong&gt;Massive Connections&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;1 million devices per km²&lt;/td&gt;
&lt;td&gt;A stadium of 80,000 people — everyone connects&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;On 4G, latency is a minor annoyance.&lt;br&gt;
On 5G, latency becomes &lt;strong&gt;a matter of life and death&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Simple Example&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Think of internet speed like &lt;strong&gt;downloading a 2-hour movie&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;3G&lt;/strong&gt;: 26 hours (more than a full day!)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;4G&lt;/strong&gt;: 6 minutes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;5G&lt;/strong&gt;: 3.6 seconds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But speed alone is not the point. The real game-changer is &lt;strong&gt;latency&lt;/strong&gt; — the delay between action and response.&lt;/p&gt;

&lt;p&gt;Imagine you're playing an online game:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;4G latency (50ms)&lt;/strong&gt;: You press "shoot" → small delay → character shoots&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;5G latency (1ms)&lt;/strong&gt;: You press "shoot" → &lt;strong&gt;instant&lt;/strong&gt; response&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That 49 milliseconds doesn't matter much for gaming. But for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remote surgery? It's &lt;strong&gt;life or death&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Self-driving cars? It's &lt;strong&gt;crash or safe&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;VR experience? It's &lt;strong&gt;nausea or immersion&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Real-World Illustration&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Why does 5G matter in real life?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remote Surgery&lt;/strong&gt;: In China, a surgeon in Beijing operated on a patient &lt;strong&gt;3,000 km away&lt;/strong&gt; using 5G and robotic arms. The delay? Only 2 milliseconds. The patient couldn't tell the doctor wasn't in the room.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Self-Driving Cars&lt;/strong&gt;: A car traveling at 100 km/h needs to make instant decisions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On 4G (50ms delay) → the car travels &lt;strong&gt;1.4 meters blind&lt;/strong&gt; before reacting&lt;/li&gt;
&lt;li&gt;On 5G (1ms delay) → the car travels only &lt;strong&gt;3 centimeters&lt;/strong&gt; before reacting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's the difference between a safe stop and a collision.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud Gaming&lt;/strong&gt;: Services like Xbox Cloud Gaming and NVIDIA GeForce NOW stream high-end games to your phone. No expensive hardware needed. The game runs on a powerful server and the video streams to you. Like &lt;strong&gt;Netflix, but for gaming&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;What Comes After 5G?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;6G&lt;/strong&gt; is expected around &lt;strong&gt;2030&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Speed: up to 1,000 Gbps (50x faster than 5G)&lt;/li&gt;
&lt;li&gt;Latency: 0.1 milliseconds&lt;/li&gt;
&lt;li&gt;AI-native network&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Holographic communication&lt;/strong&gt; — 3D images of people projected in your room&lt;/li&gt;
&lt;li&gt;Satellite internet everywhere&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Imagine video calling someone — not on a flat screen, but as a &lt;strong&gt;3D hologram standing in your room&lt;/strong&gt;. Like Star Wars, but real.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Academic Framing&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This topic connects to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Network Architecture &amp;amp; Protocols&lt;/strong&gt; (how mobile networks are designed)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edge Computing&lt;/strong&gt; (processing data closer to users, not in distant servers)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality of Service (QoS)&lt;/strong&gt; in real-time distributed systems&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wireless Communication Theory&lt;/strong&gt; (spectrum, bandwidth, signal propagation)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Teaching Hook for Students&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Ask students:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"If latency becomes essentially ZERO, what new application becomes possible that is &lt;strong&gt;impossible&lt;/strong&gt; today?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question trains &lt;strong&gt;creative systems thinking&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;2. AI on Mobile — Your Phone Gets a Brain&lt;/strong&gt;
&lt;/h2&gt;

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fslimbook.com%2Fweb%2Fimage%2F166042%2Finfograf%25C3%25ADa_CPUs%2520AI%2520NPU_2.png%3Faccess_token%3Dd4facd0a-9917-4d81-b846-a9e8faaaf529" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fslimbook.com%2Fweb%2Fimage%2F166042%2Finfograf%25C3%25ADa_CPUs%2520AI%2520NPU_2.png%3Faccess_token%3Dd4facd0a-9917-4d81-b846-a9e8faaaf529" alt="Image" width="1500" height="843"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  &lt;strong&gt;What It Means&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;AI is already &lt;strong&gt;everywhere&lt;/strong&gt; in your phone — you just don't notice it because it works so well:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;What's Actually Happening&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;📸 Portrait mode&lt;/td&gt;
&lt;td&gt;AI separates you from the background and blurs it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⌨️ Autocorrect&lt;/td&gt;
&lt;td&gt;AI predicts your next word based on patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🗺️ "Fastest route"&lt;/td&gt;
&lt;td&gt;AI analyzes real-time traffic from millions of drivers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔒 Face ID&lt;/td&gt;
&lt;td&gt;AI maps and recognizes YOUR unique face&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📞 Spam detection&lt;/td&gt;
&lt;td&gt;AI filters suspicious calls and messages&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The big shift now is &lt;strong&gt;WHERE&lt;/strong&gt; that AI runs.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Simple Example: Cloud AI vs On-Device AI&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Before (Cloud AI):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You take a photo of a flower → Phone sends image to Google's server via internet → Server processes it → Sends answer back → "It's a sunflower!" ⏱️ 2–3 seconds&lt;/p&gt;

&lt;p&gt;Problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Needs internet (what if you have no signal?)&lt;/li&gt;
&lt;li&gt;Slow (round trip to server and back)&lt;/li&gt;
&lt;li&gt;Privacy risk (your photo goes to someone else's server)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Now (On-Device AI):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You take a photo → Phone's &lt;strong&gt;NPU (Neural Processing Unit)&lt;/strong&gt; processes it locally → "It's a sunflower!" ⏱️ 0.1 seconds&lt;/p&gt;

&lt;p&gt;Benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No internet needed&lt;/li&gt;
&lt;li&gt;Much faster&lt;/li&gt;
&lt;li&gt;Completely private — data never leaves your phone&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Think of it this way:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud AI&lt;/strong&gt; = Calling a friend for every answer (slow, needs connection)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On-Device AI&lt;/strong&gt; = Having the knowledge in your own brain (fast, private)&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Real-World Illustration&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;How your camera actually works:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You point your camera at a sunset. You press the button. In &lt;strong&gt;0.5 seconds&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Camera takes &lt;strong&gt;9 photos&lt;/strong&gt; at different brightness levels&lt;/li&gt;
&lt;li&gt;AI chip analyzes all 9 photos&lt;/li&gt;
&lt;li&gt;AI &lt;strong&gt;combines the best parts&lt;/strong&gt; of each photo&lt;/li&gt;
&lt;li&gt;AI enhances colors, sharpness, and contrast&lt;/li&gt;
&lt;li&gt;You get &lt;strong&gt;ONE perfect photo&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All of this happens on your phone. No internet. No cloud. Just the AI chip.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You think you're a good photographer.&lt;br&gt;
Actually... your phone's AI is. 😄&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Where Is Mobile AI Going?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Today&lt;/strong&gt;: You talk TO your phone.&lt;br&gt;
"Hey Google, set an alarm for 7 AM." → Done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Near future&lt;/strong&gt;: Your phone talks to YOU.&lt;/p&gt;

&lt;p&gt;Imagine: You have a meeting at 9 AM tomorrow.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your phone checks traffic → sets alarm at 7:15 (traffic is light)&lt;/li&gt;
&lt;li&gt;Pre-orders your usual coffee from the nearby cafe&lt;/li&gt;
&lt;li&gt;Checks weather → reminds you to bring an umbrella&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;You didn't ask for any of this.&lt;/strong&gt; Your phone just... KNEW.&lt;/p&gt;

&lt;p&gt;This is called &lt;strong&gt;proactive AI&lt;/strong&gt; or &lt;strong&gt;context-aware AI&lt;/strong&gt; — instead of you telling the phone what to do, the phone anticipates what you NEED.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The best interface is &lt;strong&gt;NO interface&lt;/strong&gt;."&lt;br&gt;
— Golden Krishna, UX Designer&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Design Implication&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;On-device AI changes how we build apps:&lt;/p&gt;

&lt;p&gt;✔ Design for &lt;strong&gt;intelligence&lt;/strong&gt; — apps should anticipate, not just respond&lt;br&gt;
✔ Consider &lt;strong&gt;offline AI&lt;/strong&gt; — not all users have stable internet&lt;br&gt;
✔ Balance &lt;strong&gt;personalization vs privacy&lt;/strong&gt; — more data = smarter AI, but also more risk&lt;br&gt;
✔ Optimize for &lt;strong&gt;NPU chips&lt;/strong&gt; — AI models must be small enough to run on limited hardware&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Academic Framing&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This connects to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Machine Learning Model Optimization&lt;/strong&gt; (quantization, pruning, distillation)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edge Computing vs Cloud Computing&lt;/strong&gt; trade-offs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy by Design&lt;/strong&gt; principles&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TinyML&lt;/strong&gt; — Machine Learning for resource-constrained devices&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human-Computer Interaction (HCI)&lt;/strong&gt; — proactive vs reactive interfaces&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Teaching Hook for Students&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Ask students:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"If your phone's AI could learn everything about your habits, is that &lt;strong&gt;helpful&lt;/strong&gt; or &lt;strong&gt;scary&lt;/strong&gt;? Where should the line be?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question trains &lt;strong&gt;ethical thinking about AI&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;3. Foldables and Wearables — New Shapes, New Possibilities&lt;/strong&gt;
&lt;/h2&gt;

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

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

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

&lt;h3&gt;
  
  
  &lt;strong&gt;What It Means&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;For 15 years, phones have been getting &lt;strong&gt;BIGGER&lt;/strong&gt; — from 3.5 inches to nearly 7 inches.&lt;/p&gt;

&lt;p&gt;The reason is obvious: we want big screens for content — videos, games, reading, multitasking.&lt;/p&gt;

&lt;p&gt;But here's the &lt;strong&gt;conflict&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We want &lt;strong&gt;BIG screens&lt;/strong&gt; for content.&lt;br&gt;
We want &lt;strong&gt;SMALL phones&lt;/strong&gt; for portability.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Foldable phones solve both problems.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Simple Example&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Samsung Galaxy Z Fold:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Closed&lt;/strong&gt;: Normal phone (6.2" screen) — fits in your pocket ✔&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open&lt;/strong&gt;: Mini tablet (7.6" screen) — great for content ✔&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Samsung Galaxy Z TriFold (2025):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Closed&lt;/strong&gt;: Regular 6.5" phone&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fully open&lt;/strong&gt;: 10" tablet — the largest screen ever on a Galaxy phone&lt;/li&gt;
&lt;li&gt;Only &lt;strong&gt;3.9mm thin&lt;/strong&gt; at its thinnest point&lt;/li&gt;
&lt;li&gt;Runs 3 apps simultaneously side-by-side&lt;/li&gt;
&lt;li&gt;Supports Samsung DeX for desktop-like experience&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;One device. Multiple form factors. Zero compromise.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Real-World Illustration: Impact on Development&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Foldable screens create &lt;strong&gt;new challenges for developers&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Your app must work in &lt;strong&gt;BOTH modes&lt;/strong&gt; — phone layout AND tablet layout.&lt;/p&gt;

&lt;p&gt;When the user folds or unfolds the phone, your app must:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Instantly switch&lt;/strong&gt; layouts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not crash&lt;/strong&gt; during transition&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not lose data&lt;/strong&gt; during the change&lt;/li&gt;
&lt;li&gt;Handle the &lt;strong&gt;screen crease&lt;/strong&gt; at the fold point&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Remember last week's challenge about &lt;strong&gt;device fragmentation&lt;/strong&gt;? Foldables make it even more complex.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"It works on my phone" was never an acceptable conclusion.&lt;br&gt;
With foldables, it's even LESS acceptable.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Beyond Phones: Wearable Computing&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The future of mobile computing is not just about phones. Computing is moving &lt;strong&gt;from your pocket to your body&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Device&lt;/th&gt;
&lt;th&gt;What It Does&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;⌚ &lt;strong&gt;Smart Watch&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Heart rate, steps, messages, payments&lt;/td&gt;
&lt;td&gt;Apple Watch, Galaxy Watch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;👓 &lt;strong&gt;Smart Glasses&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Navigation, translation, AR overlay, recording&lt;/td&gt;
&lt;td&gt;Meta Ray-Ban, Apple Vision Pro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💍 &lt;strong&gt;Smart Ring&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Sleep tracking, health data, NFC payment&lt;/td&gt;
&lt;td&gt;Samsung Galaxy Ring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🎧 &lt;strong&gt;Smart Earbuds&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Real-time translation, AI assistant, noise control&lt;/td&gt;
&lt;td&gt;Google Pixel Buds, AirPods Pro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🩹 &lt;strong&gt;Smart Patches&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Blood sugar monitoring, medicine delivery (future)&lt;/td&gt;
&lt;td&gt;Dexcom G7, Abbott Libre&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;"The phone might not disappear — but it will &lt;strong&gt;share its job&lt;/strong&gt; with many devices on your body."&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Design Implication&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Designing for wearables requires different thinking:&lt;/p&gt;

&lt;p&gt;✔ &lt;strong&gt;Micro-interactions&lt;/strong&gt; — screen is tiny, interactions must be ultra-simple&lt;br&gt;
✔ &lt;strong&gt;Glanceable information&lt;/strong&gt; — users look for 2–3 seconds, not 30&lt;br&gt;
✔ &lt;strong&gt;Context-first design&lt;/strong&gt; — show only what matters RIGHT NOW&lt;br&gt;
✔ &lt;strong&gt;Battery awareness&lt;/strong&gt; — wearable batteries are even smaller than phones&lt;br&gt;
✔ &lt;strong&gt;Multi-device continuity&lt;/strong&gt; — start task on watch, continue on phone, finish on tablet&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Academic Framing&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This connects to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Responsive &amp;amp; Adaptive UI Design&lt;/strong&gt; across dynamic form factors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ubiquitous Computing&lt;/strong&gt; (Mark Weiser's vision — computing that disappears into the environment)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-device UX Design&lt;/strong&gt; and continuity frameworks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wearable Sensor Technology&lt;/strong&gt; and health informatics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human Factors Engineering&lt;/strong&gt; — designing for body-worn devices&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Teaching Hook for Students&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Ask students:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"If computing moves from your phone to your body, do you even NEED a phone anymore? What's the &lt;strong&gt;minimum device&lt;/strong&gt; you could live with?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question trains &lt;strong&gt;platform-independent design thinking&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;4. AR and VR on Mobile — Mixing Real and Digital&lt;/strong&gt;
&lt;/h2&gt;

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

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.researchgate.net%2Fpublication%2F370380136%2Ffigure%2Ffig3%2FAS%253A11431281154328536%25401682772283035%2FComparison-between-AR-and-VR.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.researchgate.net%2Fpublication%2F370380136%2Ffigure%2Ffig3%2FAS%253A11431281154328536%25401682772283035%2FComparison-between-AR-and-VR.jpg" alt="Image" width="588" height="302"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What It Means&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Two technologies are merging the real and digital worlds:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AR (Augmented Reality)&lt;/strong&gt; = Real world + digital objects &lt;strong&gt;added on top&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You see your real room through your phone camera... and there's a virtual sofa in the corner. You can walk around it. Change its color. But it's not real.&lt;/p&gt;

&lt;p&gt;Example: Pokémon GO, IKEA Place app&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;VR (Virtual Reality)&lt;/strong&gt; = Completely digital world (real world &lt;strong&gt;blocked&lt;/strong&gt;)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You put on a headset. Suddenly you're standing on top of Mount Everest. You look around — 360 degrees of snow and sky. Nothing is real. Everything is digital.&lt;/p&gt;

&lt;p&gt;Example: Meta Quest, PlayStation VR&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Simple Example: AR You Can Try Right Now&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;AR is not science fiction. It's on your phone &lt;strong&gt;today&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;App&lt;/th&gt;
&lt;th&gt;What It Does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IKEA Place&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Place virtual furniture in your real room before buying&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Apple Measure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Point your phone at a table → AR measures it. No ruler needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google Translate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Point camera at Japanese text → it transforms to English &lt;strong&gt;on screen, in real-time&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google Maps Live View&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Giant arrows appear &lt;strong&gt;on the real street&lt;/strong&gt; showing you where to walk&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are simple but powerful examples of AR &lt;strong&gt;already integrated&lt;/strong&gt; into daily life through mobile devices.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Real-World Illustration: The Future of AR&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Some experts believe that in 10–15 years, &lt;strong&gt;we won't carry phones anymore&lt;/strong&gt;. Instead, we'll wear &lt;strong&gt;lightweight AR glasses&lt;/strong&gt; that look like normal glasses.&lt;/p&gt;

&lt;p&gt;Imagine your day:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You look at your desk → &lt;strong&gt;emails float&lt;/strong&gt; in the air next to your coffee cup&lt;/li&gt;
&lt;li&gt;You walk outside → &lt;strong&gt;navigation arrows&lt;/strong&gt; appear on the road ahead&lt;/li&gt;
&lt;li&gt;You meet someone at a conference → their &lt;strong&gt;name tag floats&lt;/strong&gt; above their head&lt;/li&gt;
&lt;li&gt;You sit at work → your &lt;strong&gt;dashboard appears&lt;/strong&gt; on your desk, as big as you want&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No phone to pull out. No screen. The digital world and the real world become &lt;strong&gt;one&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apple Vision Pro&lt;/strong&gt; ($3,499, 2024) is the first step. It's big and expensive.&lt;/p&gt;

&lt;p&gt;But remember — the first mobile phones were also big and expensive. And look where we are now.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;AR in Education&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;AR is transforming how students learn:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Subject&lt;/th&gt;
&lt;th&gt;Traditional Approach&lt;/th&gt;
&lt;th&gt;With AR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Biology&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Read about the heart in a textbook&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Walk inside&lt;/strong&gt; a 3D beating heart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;History&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Look at photos of ancient Rome&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Stand in&lt;/strong&gt; the Colosseum and look around&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Chemistry&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;See 2D diagrams of molecules&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Pick up and rotate&lt;/strong&gt; 3D molecular structures&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Geography&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Study flat maps&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Explore&lt;/strong&gt; a 3D globe with terrain and data layers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;"AR meets learners right where they are, catering to a diversity of styles and needs to ensure every child is reached."&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Design Implication&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Designing for AR/VR requires new thinking:&lt;/p&gt;

&lt;p&gt;✔ &lt;strong&gt;Spatial UI Design&lt;/strong&gt; — interfaces exist in 3D space, not flat screens&lt;br&gt;
✔ &lt;strong&gt;Comfort &amp;amp; Safety&lt;/strong&gt; — long AR/VR sessions cause eye strain and motion sickness&lt;br&gt;
✔ &lt;strong&gt;Real-world context&lt;/strong&gt; — AR apps must understand physical environments (lighting, surfaces, obstacles)&lt;br&gt;
✔ &lt;strong&gt;New input methods&lt;/strong&gt; — hand gestures, eye tracking, voice commands (no touchscreen!)&lt;br&gt;
✔ &lt;strong&gt;Privacy concerns&lt;/strong&gt; — AR glasses with cameras raise serious surveillance questions&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Academic Framing&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This connects to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Spatial Computing&lt;/strong&gt; and 3D interaction design&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Computer Vision&lt;/strong&gt; — how devices "see" and understand the real world&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Presence Theory&lt;/strong&gt; — the psychological sense of "being there" in virtual environments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mixed Reality (MR) Continuum&lt;/strong&gt; (Milgram &amp;amp; Kishino, 1994) — the spectrum from fully real to fully virtual&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Constructivist Learning Theory&lt;/strong&gt; — learning by doing and experiencing&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Teaching Hook for Students&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Ask students:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Would you give up your phone for AR glasses? What would you &lt;strong&gt;gain&lt;/strong&gt;? What would you &lt;strong&gt;lose&lt;/strong&gt;?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question forces students to think about &lt;strong&gt;trade-offs in technology adoption&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;5. IoT — Your Phone as the Remote Control for Everything&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.researchgate.net%2Fpublication%2F325516236%2Ffigure%2Ffig1%2FAS%253A745546511835136%25401554763548064%2FThe-concept-of-the-Wireless-Home-Automation-System-WHAS-using-IoT-Source-2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.researchgate.net%2Fpublication%2F325516236%2Ffigure%2Ffig1%2FAS%253A745546511835136%25401554763548064%2FThe-concept-of-the-Wireless-Home-Automation-System-WHAS-using-IoT-Source-2.png" alt="Image" width="753" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.mdpi.com%2FIoT%2FIoT-03-00022%2Farticle_deploy%2Fhtml%2Fimages%2FIoT-03-00022-g013.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.mdpi.com%2FIoT%2FIoT-03-00022%2Farticle_deploy%2Fhtml%2Fimages%2FIoT-03-00022-g013.png" alt="Image" width="800" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  &lt;strong&gt;What It Means&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;IoT&lt;/strong&gt; = Internet of Things&lt;/p&gt;

&lt;p&gt;Very simple: take &lt;strong&gt;everyday objects&lt;/strong&gt; — lamp, thermostat, door lock, TV — and connect them to the internet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before IoT&lt;/strong&gt;: A lamp is just a lamp. Flip the switch. ON or OFF. That's it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With IoT&lt;/strong&gt;: A smart lamp. Control it from your phone. Any color. Any brightness. Scheduled on and off. Responds to voice commands. Turns off automatically when you leave the room.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Your phone becomes the &lt;strong&gt;remote control for everything&lt;/strong&gt; in your life.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Simple Example: A Day in a Smart Home (2028)&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;What Happens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;⏰ &lt;strong&gt;6:30 AM&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Smart alarm detects you're in &lt;strong&gt;light sleep&lt;/strong&gt; → wakes you at the perfect moment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☀️ &lt;strong&gt;6:31 AM&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Smart blinds open slowly → natural sunlight fills the room&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;☕ &lt;strong&gt;6:32 AM&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Coffee machine starts automatically → ready when you reach the kitchen&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🚿 &lt;strong&gt;7:00 AM&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Smart mirror shows weather, calendar, news. Shower heats to YOUR temperature&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🚗 &lt;strong&gt;7:30 AM&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Smart car pre-cools based on weather. Phone shows fastest route. Door locks automatically&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🏠 &lt;strong&gt;6:00 PM&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Phone detects you're 10 min from home → AC turns on, lights turn on&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🌙 &lt;strong&gt;10:00 PM&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;You say "Good night" → lights off, doors locked, alarm set, temperature adjusted&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;One voice command. Everything responds.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Real-World Illustration: The Numbers&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The scale of IoT is staggering:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;Connected Devices Worldwide&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2015&lt;/td&gt;
&lt;td&gt;15 billion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2020&lt;/td&gt;
&lt;td&gt;30 billion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;td&gt;75 billion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2030&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;125 billion&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;By 2030, there will be approximately &lt;strong&gt;15 connected devices for every person on Earth&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;What does this mean for mobile computing students?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More apps to build&lt;/li&gt;
&lt;li&gt;More platforms to develop for&lt;/li&gt;
&lt;li&gt;More problems to solve&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;More job opportunities&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;The future of mobile is NOT just phones. It's &lt;strong&gt;everything&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Design Implication&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;IoT changes how we design mobile experiences:&lt;/p&gt;

&lt;p&gt;✔ &lt;strong&gt;Multi-device orchestration&lt;/strong&gt; — your app controls many devices, not just one screen&lt;br&gt;
✔ &lt;strong&gt;Ambient interfaces&lt;/strong&gt; — interaction through voice, sensors, automation — not just tapping&lt;br&gt;
✔ &lt;strong&gt;Network reliability&lt;/strong&gt; — what happens when one device loses connection?&lt;br&gt;
✔ &lt;strong&gt;Security at scale&lt;/strong&gt; — 15 devices per person = 15 potential entry points for hackers&lt;br&gt;
✔ &lt;strong&gt;Interoperability&lt;/strong&gt; — devices from different manufacturers must work together (Matter protocol)&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Academic Framing&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This connects to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Distributed Systems&lt;/strong&gt; — many devices working together&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embedded Systems Programming&lt;/strong&gt; — code that runs on small, resource-constrained devices&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network Security&lt;/strong&gt; — securing devices with limited processing power&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cyber-Physical Systems (CPS)&lt;/strong&gt; — the bridge between digital computing and the physical world&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Systems Architecture&lt;/strong&gt; — designing systems that scale to billions of connected devices&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Teaching Hook for Students&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Ask students:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"If every object in your room could connect to the internet — your chair, your lamp, your door, your mirror — which ONE would you make smart first? Why?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question trains &lt;strong&gt;prioritization and user-centered design thinking&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion: The Connected Future&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;These five trends do not work &lt;strong&gt;alone&lt;/strong&gt;. They work &lt;strong&gt;together&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Consider this scenario:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A doctor wears &lt;strong&gt;AR glasses&lt;/strong&gt; (Trend 4).&lt;br&gt;
The glasses use &lt;strong&gt;AI&lt;/strong&gt; (Trend 2) to highlight a tumor during surgery.&lt;br&gt;
The surgery data streams over &lt;strong&gt;5G&lt;/strong&gt; (Trend 1) to a specialist 1,000 km away.&lt;br&gt;
The specialist watches on their &lt;strong&gt;foldable tablet&lt;/strong&gt; (Trend 3).&lt;br&gt;
All medical instruments are &lt;strong&gt;IoT-connected&lt;/strong&gt; (Trend 5), sharing real-time data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;All five trends — working together — saving a life.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;What This Means For You As Students&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The mobile developer of the future needs new skills:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Skill&lt;/th&gt;
&lt;th&gt;Why It Matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cross-platform development&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Build for phone + watch + glasses + car&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI/ML integration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Make apps intelligent, not just functional&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Responsive &amp;amp; adaptive design&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Phone → tablet → foldable → watch → glasses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Privacy &amp;amp; security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;More devices = more data = more risk&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;UX for new interfaces&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Voice, gesture, gaze — beyond touch&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;"The mobile developer of the future is NOT just an app developer.&lt;br&gt;
They are a &lt;strong&gt;connected experience designer&lt;/strong&gt;."&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;The Mobile Designer's Mindset&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Good mobile design — today and in the future — is about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Constraints&lt;/strong&gt; — every device has limitations; design within them&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Empathy&lt;/strong&gt; — understand real users in real contexts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trade-offs&lt;/strong&gt; — there's never a perfect solution, only the best balance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adaptability&lt;/strong&gt; — technologies change fast; principles endure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A good mobile designer always asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What is the &lt;strong&gt;minimum&lt;/strong&gt; needed for the user to succeed?"&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Key Vocabulary Summary&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Term&lt;/th&gt;
&lt;th&gt;Simple Explanation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;5G&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fifth generation mobile network — very fast, very low delay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;6G&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sixth generation (expected ~2030) — holographic, AI-native&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Latency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The delay between an action and its response&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NPU&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Neural Processing Unit — AI chip inside your phone&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;On-Device AI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI that runs on your phone, not on a distant server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Proactive AI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI that acts without you asking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Foldable Phone&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Phone with a flexible screen that bends to become larger&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Wearable&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Computing device you wear on your body&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AR&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Augmented Reality — real world + digital objects added&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VR&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Virtual Reality — completely digital, immersive world&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IoT&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Internet of Things — everyday objects connected to internet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cloud Gaming&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Games running on remote servers, streamed to your phone&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Smart Home&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;House with IoT-connected, automated devices&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Edge Computing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Processing data near the user instead of in distant data centers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>computerscience</category>
      <category>learning</category>
      <category>mobile</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Challenges for Design in Mobile Computing</title>
      <dc:creator>ahmadasroni38</dc:creator>
      <pubDate>Sun, 01 Feb 2026 23:31:47 +0000</pubDate>
      <link>https://dev.to/ahmadasroni38/challenges-for-design-in-mobile-computing-236e</link>
      <guid>https://dev.to/ahmadasroni38/challenges-for-design-in-mobile-computing-236e</guid>
      <description>&lt;h3&gt;
  
  
  &lt;em&gt;Bridging Theory, Practice, and Real-World Constraints&lt;/em&gt;
&lt;/h3&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction: Why Mobile Design Is Different (and Harder)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Designing for mobile computing is &lt;strong&gt;not simply shrinking desktop applications&lt;/strong&gt; into smaller screens. Mobile devices live in a world of &lt;strong&gt;constraints&lt;/strong&gt;—physical, technical, contextual, and human.&lt;/p&gt;

&lt;p&gt;As practitioners, we deal with &lt;strong&gt;real users&lt;/strong&gt;, &lt;strong&gt;real devices&lt;/strong&gt;, and &lt;strong&gt;real limitations&lt;/strong&gt;.&lt;br&gt;
As academics, we seek &lt;strong&gt;general principles&lt;/strong&gt;, &lt;strong&gt;design frameworks&lt;/strong&gt;, and &lt;strong&gt;repeatable knowledge&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Mobile computing sits at the intersection of both worlds.&lt;/p&gt;

&lt;p&gt;In this session, we will explore &lt;strong&gt;five fundamental challenges in mobile design&lt;/strong&gt;, supported by &lt;strong&gt;simple, relatable examples&lt;/strong&gt; and &lt;strong&gt;strong visual imagination&lt;/strong&gt;, so students can &lt;em&gt;feel&lt;/em&gt; the problem—not just memorize it.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;1. Limited Screen Real Estate&lt;/strong&gt;
&lt;/h2&gt;

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

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

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

&lt;h3&gt;
  
  
  &lt;strong&gt;What It Means&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Mobile screens are &lt;strong&gt;small, narrow, and vertically constrained&lt;/strong&gt;.&lt;br&gt;
Unlike desktops, &lt;strong&gt;every pixel matters&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;On mobile, design is not about adding features.&lt;br&gt;
It’s about &lt;strong&gt;deciding what to remove&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Simple Example&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Imagine you want to design:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;hospital information system&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Or a &lt;strong&gt;campus asset management app&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On desktop, you might show:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name&lt;/li&gt;
&lt;li&gt;ID&lt;/li&gt;
&lt;li&gt;Location&lt;/li&gt;
&lt;li&gt;Status&lt;/li&gt;
&lt;li&gt;Last Update&lt;/li&gt;
&lt;li&gt;Action Buttons&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On mobile?&lt;/p&gt;

&lt;p&gt;If you show everything:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Text becomes tiny&lt;/li&gt;
&lt;li&gt;Buttons overlap&lt;/li&gt;
&lt;li&gt;Users misclick&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Result: &lt;strong&gt;bad usability, frustrated users&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Real-World Illustration&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Think of &lt;strong&gt;Google Maps&lt;/strong&gt; on mobile:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It does &lt;strong&gt;not&lt;/strong&gt; show all controls at once&lt;/li&gt;
&lt;li&gt;Buttons appear &lt;strong&gt;only when needed&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Information is layered, not dumped&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is called:&lt;br&gt;
👉 &lt;strong&gt;Progressive Disclosure&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Design Principles&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;✔ Prioritize &lt;strong&gt;primary tasks&lt;/strong&gt;&lt;br&gt;
✔ Hide secondary information&lt;br&gt;
✔ Use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cards&lt;/li&gt;
&lt;li&gt;Bottom sheets&lt;/li&gt;
&lt;li&gt;Tabs&lt;/li&gt;
&lt;li&gt;Collapsible sections&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Teaching Hook for Students&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Ask students:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“If your app had only &lt;strong&gt;one screen&lt;/strong&gt;, what MUST be there?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question trains &lt;strong&gt;design discipline&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;2. Varied Input Modalities&lt;/strong&gt;
&lt;/h2&gt;

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

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

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

&lt;h3&gt;
  
  
  &lt;strong&gt;What It Means&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Mobile users interact through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Touch (tap, swipe, long press)&lt;/li&gt;
&lt;li&gt;Voice&lt;/li&gt;
&lt;li&gt;Motion (tilt, shake)&lt;/li&gt;
&lt;li&gt;Sensors (camera, GPS, fingerprint)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unlike desktop:&lt;br&gt;
❌ No mouse&lt;br&gt;
❌ No physical keyboard (most of the time)&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Simple Example&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Login form on desktop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Username&lt;/li&gt;
&lt;li&gt;Password&lt;/li&gt;
&lt;li&gt;Captcha&lt;/li&gt;
&lt;li&gt;Submit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On mobile:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keyboard covers half the screen&lt;/li&gt;
&lt;li&gt;Typing is slow&lt;/li&gt;
&lt;li&gt;Users make more errors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s why modern mobile apps use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Face ID / Fingerprint&lt;/li&gt;
&lt;li&gt;OTP auto-fill&lt;/li&gt;
&lt;li&gt;“Continue with Google”&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Everyday Illustration&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Why does WhatsApp:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Support &lt;strong&gt;voice messages&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Support &lt;strong&gt;swipe to reply&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Support &lt;strong&gt;hold-to-record&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because &lt;strong&gt;typing is not always convenient&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Walking&lt;/li&gt;
&lt;li&gt;Riding a motorbike (dangerous, but real)&lt;/li&gt;
&lt;li&gt;Holding groceries&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Design Insight&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Mobile input is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Imprecise&lt;/li&gt;
&lt;li&gt;Context-dependent&lt;/li&gt;
&lt;li&gt;Error-prone&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So good mobile design:&lt;br&gt;
✔ Minimizes typing&lt;br&gt;
✔ Uses gestures carefully&lt;br&gt;
✔ Provides large touch targets&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Academic Framing&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This aligns with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Human-Computer Interaction (HCI)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fitts’s Law&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cognitive Load Theory&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;3. Diverse Usage Contexts&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fen.horus-x.com%2Fcdn%2Fshop%2Farticles%2FFemme_utilisant_un_telephone_portable_femme_portant_des_lunettes_de_soleil_Horus_X_b62ca2b5-d4ba-4bea-ba26-f5527b125450.jpg%3Fv%3D1710831567%26width%3D1200" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fen.horus-x.com%2Fcdn%2Fshop%2Farticles%2FFemme_utilisant_un_telephone_portable_femme_portant_des_lunettes_de_soleil_Horus_X_b62ca2b5-d4ba-4bea-ba26-f5527b125450.jpg%3Fv%3D1710831567%26width%3D1200" alt="Image" width="1200" height="675"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

&lt;h3&gt;
  
  
  &lt;strong&gt;What It Means&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Mobile apps are used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Indoors&lt;/li&gt;
&lt;li&gt;Outdoors&lt;/li&gt;
&lt;li&gt;While moving&lt;/li&gt;
&lt;li&gt;Under sunlight&lt;/li&gt;
&lt;li&gt;In noisy environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unlike desktop apps:&lt;br&gt;
❌ No controlled environment&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Simple Example&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;An app with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Light gray text&lt;/li&gt;
&lt;li&gt;Thin fonts&lt;/li&gt;
&lt;li&gt;Small icons&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Looks beautiful in:&lt;br&gt;
✔ Office&lt;br&gt;
✔ Night&lt;/p&gt;

&lt;p&gt;But becomes &lt;strong&gt;unusable&lt;/strong&gt; under:&lt;br&gt;
☀️ Sunlight&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Real-Life Illustration&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Why does &lt;strong&gt;Gojek / Grab&lt;/strong&gt; use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High contrast colors&lt;/li&gt;
&lt;li&gt;Big buttons&lt;/li&gt;
&lt;li&gt;Simple layouts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because drivers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are moving&lt;/li&gt;
&lt;li&gt;Need quick interaction&lt;/li&gt;
&lt;li&gt;Cannot focus long&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Design Implication&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Mobile design must consider:&lt;br&gt;
✔ Lighting&lt;br&gt;
✔ Movement&lt;br&gt;
✔ Interruptions&lt;br&gt;
✔ One-handed use&lt;/p&gt;

&lt;p&gt;Good design answers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“What if the user is distracted?”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Teaching Moment&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Ask students:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Where will this app be used? Sitting? Standing? Moving?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question separates &lt;strong&gt;academic design&lt;/strong&gt; from &lt;strong&gt;real-world design&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;4. Limited Resources&lt;/strong&gt;
&lt;/h2&gt;

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.sftcdn.net%2Fimages%2Ft_app-cover-s%252Cf_auto%2Fp%2F23eb54bc-72ba-415e-bdaf-4025818e26dc%2F275525339%2Fcpu-throttling-test-screenshot" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.sftcdn.net%2Fimages%2Ft_app-cover-s%252Cf_auto%2Fp%2F23eb54bc-72ba-415e-bdaf-4025818e26dc%2F275525339%2Fcpu-throttling-test-screenshot" alt="Image" width="340" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  &lt;strong&gt;What It Means&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Mobile devices have limited:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Battery&lt;/li&gt;
&lt;li&gt;CPU&lt;/li&gt;
&lt;li&gt;Memory&lt;/li&gt;
&lt;li&gt;Network stability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even flagship phones are &lt;strong&gt;resource-sensitive&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Simple Example&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;An app that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Continuously tracks GPS&lt;/li&gt;
&lt;li&gt;Auto-refreshes every second&lt;/li&gt;
&lt;li&gt;Loads large images&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Result:&lt;br&gt;
🔋 Battery drains fast&lt;br&gt;
🔥 Phone heats up&lt;br&gt;
❌ App uninstalled&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Real-World Illustration&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Why does Google:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Delay background sync&lt;/li&gt;
&lt;li&gt;Batch network requests&lt;/li&gt;
&lt;li&gt;Use caching aggressively&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because &lt;strong&gt;battery is user trust&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If your app kills battery:&lt;br&gt;
👉 Users delete it.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Design Best Practices&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;✔ Optimize background tasks&lt;br&gt;
✔ Use lazy loading&lt;br&gt;
✔ Respect OS lifecycle&lt;br&gt;
✔ Design for offline-first when possible&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Academic Tie-In&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This relates to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mobile Operating Systems&lt;/li&gt;
&lt;li&gt;Energy-aware computing&lt;/li&gt;
&lt;li&gt;Systems optimization&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;5. Fragmented Device Landscape&lt;/strong&gt;
&lt;/h2&gt;

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.newatlas.com%2Fdims4%2Fdefault%2Fc55c199%2F2147483647%2Fstrip%2Ftrue%2Fcrop%2F1275x1080%252B0%252B0%2Fresize%2F1133x960%2521%2Fformat%2Fwebp%2Fquality%2F90%2F%3Furl%3Dhttps%253A%252F%252Fnewatlas-brightspot.s3.amazonaws.com%252Farchive%252F2017-best-smartphones-specs-features-comparison-38.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.newatlas.com%2Fdims4%2Fdefault%2Fc55c199%2F2147483647%2Fstrip%2Ftrue%2Fcrop%2F1275x1080%252B0%252B0%2Fresize%2F1133x960%2521%2Fformat%2Fwebp%2Fquality%2F90%2F%3Furl%3Dhttps%253A%252F%252Fnewatlas-brightspot.s3.amazonaws.com%252Farchive%252F2017-best-smartphones-specs-features-comparison-38.jpg" alt="Image" width="800" height="677"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimagedelivery.net%2FPVooPtpJE-25QaNkbEuXvw%2F4c268491-a003-4f31-a077-bdde10206900%2Fgamma%253D0" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimagedelivery.net%2FPVooPtpJE-25QaNkbEuXvw%2F4c268491-a003-4f31-a077-bdde10206900%2Fgamma%253D0" alt="Image" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What It Means&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Mobile ecosystem is fragmented:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Different screen sizes&lt;/li&gt;
&lt;li&gt;Different OS versions&lt;/li&gt;
&lt;li&gt;Different hardware capabilities&lt;/li&gt;
&lt;li&gt;Different manufacturers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One app ≠ one device&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Simple Example&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Your app works perfectly on:&lt;br&gt;
✔ Your phone&lt;/p&gt;

&lt;p&gt;But crashes on:&lt;br&gt;
❌ Older Android&lt;br&gt;
❌ Smaller screen&lt;br&gt;
❌ Low RAM device&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Practical Illustration&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Android developers must consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API level differences&lt;/li&gt;
&lt;li&gt;Permission changes&lt;/li&gt;
&lt;li&gt;Manufacturer customizations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s why:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“It works on my phone”&lt;br&gt;
is &lt;strong&gt;not an acceptable conclusion&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Design Strategy&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;✔ Responsive layouts&lt;br&gt;
✔ Flexible UI components&lt;br&gt;
✔ Graceful degradation&lt;br&gt;
✔ Extensive testing&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion: The Mobile Designer’s Mindset&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Mobile computing design is about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Constraints&lt;/li&gt;
&lt;li&gt;Empathy&lt;/li&gt;
&lt;li&gt;Trade-offs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A good mobile designer asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“What is the &lt;strong&gt;minimum&lt;/strong&gt; needed for the user to succeed?”&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>design</category>
      <category>mobile</category>
      <category>ui</category>
      <category>ux</category>
    </item>
    <item>
      <title>Unlocking the Future: Emerging Trends in System Evaluation and Analysis</title>
      <dc:creator>ahmadasroni38</dc:creator>
      <pubDate>Mon, 29 Dec 2025 09:16:25 +0000</pubDate>
      <link>https://dev.to/ahmadasroni38/unlocking-the-future-emerging-trends-in-system-evaluation-and-analysis-3inb</link>
      <guid>https://dev.to/ahmadasroni38/unlocking-the-future-emerging-trends-in-system-evaluation-and-analysis-3inb</guid>
      <description>&lt;p&gt;Selamat datang di bab paling menginspirasi dari buku ini: &lt;strong&gt;Tren Masa Depan&lt;/strong&gt;. Di tahun 2025 ini, evaluasi sistem informasi bukan lagi tugas rutin – ia menjadi katalisator inovasi, didorong oleh AI, cloud, dan keberlanjutan. Sebagai praktisi yang telah memimpin evaluasi di proyek cutting-edge dan akademisi yang meneliti tren disruptif, saya percaya masa depan evaluasi adalah adaptif, cerdas, dan bertanggung jawab – membantu kita membangun sistem yang tidak hanya efisien, tapi juga etis dan hijau.&lt;/p&gt;

&lt;p&gt;Bab ini dirancang mudah dipahami, dengan contoh sederhana sehari-hari, analogi menyenangkan, dan ilustrasi visual keren agar kamu cepat paham dan terinspirasi. Yuk kita jelajahi tren yang akan bentuk karirmu besok – siap jadi pioneer? 🚀&lt;/p&gt;

&lt;h3&gt;
  
  
  10.1 Evaluasi Sistem Adaptif
&lt;/h3&gt;

&lt;p&gt;Sistem adaptif adalah "sistem hidup" yang belajar dan berubah sendiri, seperti aplikasi cuaca yang update prediksi berdasarkan data real-time.&lt;/p&gt;

&lt;h4&gt;
  
  
  10.1.1 Konsep Sistem Adaptif
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.1.1.1 Definisi Sistem Adaptif&lt;/strong&gt;: Sistem yang menyesuaikan perilaku secara otomatis terhadap perubahan lingkungan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.1.1.2 Karakteristik Sistem Adaptif&lt;/strong&gt;: Dinamis, resilient, self-optimizing – seperti pohon yang tumbuh menyesuaikan cahaya matahari.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.1.1.3 Contoh Sistem Adaptif&lt;/strong&gt;: Sistem rekomendasi e-commerce yang berubah berdasarkan tren belanja pengguna.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  10.1.2 Tantangan Evaluasi Sistem Adaptif
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.1.2.1 Sifat Dinamis Sistem&lt;/strong&gt;: Evaluasi statis nggak cukup karena sistem terus evolusi.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.1.2.2 Perubahan Konteks&lt;/strong&gt;: Data lama bisa irrelevant seiring waktu.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.1.2.3 Evolusi Sistem&lt;/strong&gt;: Butuh evaluasi yang ikut beradaptasi.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  10.1.3 Metodologi Evaluasi untuk Sistem Adaptif
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.1.3.1 Continuous Evaluation&lt;/strong&gt;: Evaluasi berjalan non-stop, seperti monitor detak jantung.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.1.3.2 Real-time Monitoring&lt;/strong&gt;: Gunakan dashboard untuk lihat performa saat ini.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.1.3.3 Feedback Loops&lt;/strong&gt;: Sistem koreksi diri dari hasil evaluasi.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.1.3.4 Self-healing Systems Evaluation&lt;/strong&gt;: Evaluasi sistem yang otomatis fix masalah.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contoh sederhana: Aplikasi navigasi seperti Waze – evaluasi continuous cek apakah rute baru lebih cepat 10% dari sebelumnya.&lt;/p&gt;

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

&lt;p&gt;Simplified diagram depicting forests as complex adaptive systems ... – gambarin feedback loop adaptif seperti ekosistem hutan yang menyesuaikan!&lt;/p&gt;

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

&lt;p&gt;How complex adaptive systems change – diagram loop yang dinamis dan engaging!&lt;/p&gt;

&lt;h4&gt;
  
  
  10.1.4 Studi Kasus: Evaluasi Sistem Adaptif
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.1.4.1 Evaluasi Sistem Rekomendasi Adaptif&lt;/strong&gt;: Amazon – adaptasi real-time tingkatkan konversi 35%.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.1.4.2 Evaluasi Sistem Keamanan Adaptif&lt;/strong&gt;: Intrusion detection yang belajar ancaman baru.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.1.4.3 Pembelajaran dari Implementasi&lt;/strong&gt;: Pelajaran: Integrasikan ML untuk prediksi adaptasi.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10.2 Penggunaan AI dan Machine Learning dalam Evaluasi Sistem
&lt;/h3&gt;

&lt;p&gt;AI/ML ubah evaluasi jadi "prediktif" – bukan cuma ukur, tapi ramal masalah!&lt;/p&gt;

&lt;h4&gt;
  
  
  10.2.1 Aplikasi AI/ML untuk Evaluasi
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.2.1.1 Prediksi Kinerja Sistem&lt;/strong&gt;: ML ramal downtime server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.2.1.2 Deteksi Anomali Otomatis&lt;/strong&gt;: Spot lonjakan traffic jahat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.2.1.3 Klasifikasi Kualitas Sistem&lt;/strong&gt;: Label sistem "baik/cukup/buruk" dari metrik.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.2.1.4 Natural Language Processing untuk Analisis Feedback&lt;/strong&gt;: Sentiment dari review pengguna.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contoh: Sistem HR pakai NLP evaluasi feedback karyawan – deteksi isu moral sebelum jadi masalah besar.&lt;/p&gt;

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

&lt;p&gt;Master AI Anomaly Detection: The Definitive Guide – flowchart deteksi anomali yang detail!&lt;/p&gt;

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

&lt;p&gt;Cloud Computing And Ai Powered Anomaly Detection – guide visual yang komprehensif!&lt;/p&gt;

&lt;h4&gt;
  
  
  10.2.2 Teknik Machine Learning untuk Evaluasi
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.2.2.1 Supervised Learning untuk Evaluasi&lt;/strong&gt;: Regresi prediksi waktu load.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.2.2.2 Unsupervised Learning untuk Evaluasi&lt;/strong&gt;: Clustering error log.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.2.2.3 Reinforcement Learning untuk Evaluasi&lt;/strong&gt;: Optimasi parameter sistem.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.2.2.4 Deep Learning Applications&lt;/strong&gt;: CNN analisis performa image-based.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  10.2.3 Implementasi ML dalam Evaluasi
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.2.3.1 Data Preparation untuk ML&lt;/strong&gt;: Clean log data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.2.3.2 Model Training dan Validation&lt;/strong&gt;: Pakai cross-validation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.2.3.3 Deployment dan Monitoring&lt;/strong&gt;: Di Kubernetes dengan MLflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.2.3.4 Model Drift Detection&lt;/strong&gt;: Deteksi kalau model ML evaluasi outdated.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  10.2.4 Automated Evaluation Systems
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.2.4.1 AutoML untuk Evaluasi&lt;/strong&gt;: Google AutoML buat model evaluasi otomatis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.2.4.2 Intelligent Monitoring Systems&lt;/strong&gt;: Splunk dengan AI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.2.4.3 Predictive Maintenance&lt;/strong&gt;: Ramal kegagalan hardware.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  10.2.5 Studi Kasus: ML dalam Evaluasi Sistem
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.2.5.1 Evaluasi Sistem dengan Predictive Analytics&lt;/strong&gt;: Bank ramal fraud.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.2.5.2 Evaluasi Otomatis dengan ML&lt;/strong&gt;: Grading tugas mahasiswa.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.2.5.3 Pembelajaran dari Implementasi&lt;/strong&gt;: Kasus predictive maintenance di manufaktur.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10.3 Integrasi Framework DevOps dan SRE dalam Evaluasi
&lt;/h3&gt;

&lt;p&gt;DevOps &amp;amp; SRE bikin evaluasi "agile dan reliable" seperti tim olimpiade yang latihan terus.&lt;/p&gt;

&lt;h4&gt;
  
  
  10.3.1 Konsep DevOps dan Site Reliability Engineering (SRE)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.3.1.1 Prinsip DevOps&lt;/strong&gt;: Collaboration, automation, continuous delivery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.3.1.2 SRE Practices&lt;/strong&gt;: SLO (Service Level Objectives), error budgets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.3.1.3 Peran Evaluasi dalam DevOps/SRE&lt;/strong&gt;: Integrasi monitoring di pipeline.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  10.3.2 Praktik Evaluasi dalam DevOps
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.3.2.1 Automated Testing&lt;/strong&gt;: Unit/integration di CI/CD.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.3.2.2 Continuous Monitoring&lt;/strong&gt;: Alerting untuk metrik kritis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.3.2.3 Feedback Loops&lt;/strong&gt;: User metrics feed back ke dev team.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.3.2.4 Chaos Engineering&lt;/strong&gt;: Test kegagalan sengaja untuk evaluasi resilience.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contoh: Amazon DevOps – evaluasi continuous kurangi downtime 75%.&lt;/p&gt;

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

&lt;p&gt;What is Devops lifecycle? 8 phases of devops – diagram infinity loop klasik!&lt;/p&gt;

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

&lt;p&gt;Blue DevOps Infinity Loop Diagram – visual optimasi proses!&lt;/p&gt;

&lt;h4&gt;
  
  
  10.3.3 Tools untuk Evaluasi dalam DevOps
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.3.3.1 Monitoring Tools (Prometheus, Grafana)&lt;/strong&gt;: Dashboard metrik real-time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.3.3.2 Testing Automation Tools&lt;/strong&gt;: Selenium, JUnit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.3.3.3 Analytics Platforms&lt;/strong&gt;: ELK Stack.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.3.3.4 Observability Tools&lt;/strong&gt;: Jaeger untuk tracing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  10.3.4 Studi Kasus: Integrasi DevOps dalam Evaluasi
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.3.4.1 Implementasi Continuous Evaluation&lt;/strong&gt;: Google SRE model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.3.4.2 Evaluasi dalam CI/CD Pipeline&lt;/strong&gt;: GitLab pipelines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.3.4.3 Pembelajaran dari Implementasi&lt;/strong&gt;: Agility tingkatkan time-to-market.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10.4 Tren Teknologi dalam Evaluasi Sistem
&lt;/h3&gt;

&lt;p&gt;Teknologi baru ubah evaluasi jadi "sci-fi"!&lt;/p&gt;

&lt;h4&gt;
  
  
  10.4.1 Evaluasi Sistem Berbasis Cloud
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.4.1.1 Tantangan Evaluasi Cloud Systems&lt;/strong&gt;: Variabilitas skalabilitas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.4.1.2 Metodologi Evaluasi Cloud&lt;/strong&gt;: Benchmark multi-provider.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.4.1.3 Tools untuk Evaluasi Cloud&lt;/strong&gt;: AWS CloudWatch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.4.1.4 Multi-cloud Evaluation Strategies&lt;/strong&gt;: Hybrid monitoring tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  10.4.2 Evaluasi Sistem Terdistribusi
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.4.2.1 Tantangan&lt;/strong&gt;: Konsistensi data antar node.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.4.2.2 Metodologi&lt;/strong&gt;: Distributed logging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.4.2.3 Tools&lt;/strong&gt;: Apache Kafka.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.4.2.4 Microservices Evaluation&lt;/strong&gt;: Istio service mesh.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  10.4.3 Evaluasi Sistem Real-time
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.4.3.1 Tantangan&lt;/strong&gt;: Low latency requirement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.4.3.2 Metodologi&lt;/strong&gt;: Time-series metrics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.4.3.3 Tools&lt;/strong&gt;: InfluxDB.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.4.3.4 Stream Processing Evaluation&lt;/strong&gt;: Apache Flink.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  10.4.4 Evaluasi Emerging Technologies
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.4.4.1 Blockchain Systems Evaluation&lt;/strong&gt;: TPS (transactions per second).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.4.4.2 Quantum Computing Systems Evaluation&lt;/strong&gt;: Qubit error rates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.4.4.3 Edge Computing Evaluation&lt;/strong&gt;: Latency vs cloud.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.4.4.4 5G Network Systems Evaluation&lt;/strong&gt;: Bandwidth throughput.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contoh: Evaluasi blockchain untuk fintech – metrik security vs speed.&lt;/p&gt;

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

&lt;p&gt;4 Trends in Emerging Tech That Will Transform Value Creation – infographic tren 2025!&lt;/p&gt;

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

&lt;p&gt;Gartner Hype Cycle™ for Emerging Technologies – prediksi teknologi masa depan!&lt;/p&gt;

&lt;h4&gt;
  
  
  10.4.5 Studi Kasus: Evaluasi Sistem dengan Teknologi Terkini
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.4.5.1 Evaluasi Sistem Blockchain&lt;/strong&gt;: Supply chain transparency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.4.5.2 Evaluasi Quantum Computing&lt;/strong&gt;: Simulasi molekul.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.4.5.3 Pembelajaran dari Implementasi&lt;/strong&gt;: Hybrid cloud-quantum approach.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10.5 Sustainable IT dan Green Computing Evaluation
&lt;/h3&gt;

&lt;p&gt;Evaluasi masa depan harus ukur "jejak karbon" sistem!&lt;/p&gt;

&lt;h4&gt;
  
  
  10.5.1 Konsep Sustainable IT
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.5.1.1 Environmental Impact of IT Systems&lt;/strong&gt;: Data center konsumsi listrik seperti kota.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.5.1.2 Carbon Footprint Measurement&lt;/strong&gt;: Hitung emisi CO2 dari server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.5.1.3 Green IT Principles&lt;/strong&gt;: Efisiensi energi, recycle hardware.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  10.5.2 Evaluasi Green Computing
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.5.2.1 Energy Efficiency Metrics&lt;/strong&gt;: PUE (Power Usage Effectiveness).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.5.2.2 E-waste Management Evaluation&lt;/strong&gt;: Recycling metrics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.5.2.3 Sustainable Software Engineering&lt;/strong&gt;: Code hemat energi.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  10.5.3 ESG (Environmental, Social, Governance) Compliance
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.5.3.1 ESG Reporting for IT Systems&lt;/strong&gt;: Annual green report.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.5.3.2 Sustainability KPIs&lt;/strong&gt;: Carbon reduction target.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.5.3.3 Green IT Certifications&lt;/strong&gt;: LEED for data centers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  10.5.4 Studi Kasus: Sustainable IT Evaluation
&lt;/h4&gt;

&lt;p&gt;Kasus Microsoft Azure – evaluasi zero-carbon data center.&lt;/p&gt;

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

&lt;p&gt;Green computing / green IT vector illustration – konsep hijau dengan ikon sustainable!&lt;/p&gt;

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

&lt;p&gt;Green Computing: Paving the Way for A Sustainable Tech Future – ilustrasi praktik hijau!&lt;/p&gt;

&lt;h3&gt;
  
  
  10.6 Masa Depan Profesi Evaluasi Sistem
&lt;/h3&gt;

&lt;p&gt;Evaluator masa depan adalah "strategist AI"!&lt;/p&gt;

&lt;h4&gt;
  
  
  10.6.1 Evolusi Peran Evaluator
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.6.1.1 Dari Teknis ke Strategis&lt;/strong&gt;: Advisor C-level.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.6.1.2 Integrasi dengan Disiplin Lain&lt;/strong&gt;: Kolaborasi dengan ethicist.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.6.1.3 Keterampilan Masa Depan&lt;/strong&gt;: Quantum literacy, AI ethics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.6.1.4 New Job Roles dalam Evaluasi&lt;/strong&gt;: Sustainability Evaluator.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  10.6.2 Pendidikan dan Pelatihan Evaluasi Sistem
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.6.2.1 Kurikulum Evaluasi Sistem&lt;/strong&gt;: Sertakan VR dan AI sim.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.6.2.2 Metode Pembelajaran Inovatif&lt;/strong&gt;: Gamification.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.6.2.3 Sertifikasi dan Akreditasi&lt;/strong&gt;: Certified AI Evaluator.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.6.2.4 Lifelong Learning Pathways&lt;/strong&gt;: MOOCs seperti Coursera.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  10.6.3 Komunitas dan Kolaborasi
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.6.3.1 Jaringan Profesional&lt;/strong&gt;: IEEE groups.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.6.3.2 Kolaborasi Internasional&lt;/strong&gt;: Konferensi ICIS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.6.3.3 Open Source dan Pengetahuan Bersama&lt;/strong&gt;: GitHub evaluasi tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.6.3.4 Research and Innovation Networks&lt;/strong&gt;: ResearchGate.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  10.6.4 Visi Masa Depan Evaluasi Sistem
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10.6.4.1 Prediksi untuk 10 Tahun Mendatang&lt;/strong&gt;: Evaluasi metaverse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.6.4.2 Dampak pada Industri dan Masyarakat&lt;/strong&gt;: Lebih inklusif.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.6.4.3 Etika dan Tanggung Jawab Sosial&lt;/strong&gt;: Fokus fairness.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.6.4.4 Preparing for the Future&lt;/strong&gt;: Upskilling continuous.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Competencies for post-normal evaluation – diagram skill vital masa depan!&lt;/p&gt;

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

&lt;p&gt;What is Kirkpatrick's Training Evaluation Model? – model evolusi skill!&lt;/p&gt;

&lt;h3&gt;
  
  
  10.7 Rangkuman dan Refleksi
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;10.7.1 Rangkuman bab&lt;/strong&gt;: Tren masa depan: Adaptif, AI-driven, DevOps-integrated, tech-emerging, sustainable, evolusi profesi.&lt;br&gt;
&lt;strong&gt;10.7.2 Pertanyaan refleksi&lt;/strong&gt;: Bagaimana kamu siapkan diri untuk evaluasi quantum?&lt;br&gt;
&lt;strong&gt;10.7.3 Tugas: Visi masa depan evaluasi sistem&lt;/strong&gt;: Buat roadmap 10 tahun untuk karirmu.&lt;/p&gt;

&lt;p&gt;Selamat berefleksi, teman-teman! Tren masa depan ini peluang emas – dengan pemahaman ini, kamu siap jadi leader inovasi SI. Terus kolaborasi dan adaptasi! 🌟&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Akhir Buku: Implementasi dan Case Study Lanjutan&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;— Ahmad Asroni, Praktisi &amp;amp; Akademisi Sistem Informasi&lt;br&gt;&lt;br&gt;
Fokus: Tren Masa Depan, Etika, dan Inovasi Bertanggung Jawab&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Etika dan Tantangan Evaluasi Sistem</title>
      <dc:creator>ahmadasroni38</dc:creator>
      <pubDate>Mon, 22 Dec 2025 09:35:35 +0000</pubDate>
      <link>https://dev.to/ahmadasroni38/etika-dan-tantangan-evaluasi-sistem-1l71</link>
      <guid>https://dev.to/ahmadasroni38/etika-dan-tantangan-evaluasi-sistem-1l71</guid>
      <description>&lt;p&gt;Halo, rekan-rekan praktisi, akademisi, dosen, dan mahasiswa yang sedang mendalami Sistem Informasi!&lt;br&gt;&lt;br&gt;
Selamat datang di bab paling "manusiawi" dari buku ini: &lt;strong&gt;Etika dan Tantangan Evaluasi&lt;/strong&gt;. Evaluasi sistem bukan hanya soal angka dan metrik – tapi juga soal tanggung jawab moral, keadilan, dan dampak sosial. Sebagai praktisi yang telah memimpin evaluasi di proyek besar dan akademisi yang mengajar etika SI, saya selalu bilang: "Sistem hebat tanpa etika bisa jadi bencana."&lt;/p&gt;

&lt;p&gt;Bab ini dirancang mudah dipahami, dengan contoh sederhana sehari-hari, analogi seru, dan ilustrasi visual keren agar kamu cepat paham dan enjoy belajarnya. Yuk kita bahas etika yang bikin evaluasi tidak hanya akurat, tapi juga bertanggung jawab! 😊&lt;/p&gt;

&lt;h3&gt;
  
  
  9.1 Bias Data dalam Evaluasi Sistem
&lt;/h3&gt;

&lt;p&gt;Bias data adalah "kesalahan sistematis" yang bikin evaluasi tidak adil – seperti timbangan yang miring.&lt;/p&gt;

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

&lt;p&gt;Ilustrasi statistical bias ini nunjukin gimana data biased bikin hasil analisis melenceng – mirip timbangan rusak!&lt;/p&gt;

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

&lt;p&gt;Diagram cycle bias ini gambarin gimana bias masuk dari data training sampai output AI.&lt;/p&gt;

&lt;h4&gt;
  
  
  9.1.1 Jenis-jenis Bias Data
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sampling Bias&lt;/strong&gt;: Data sampel tidak representatif. Contoh: Evaluasi sistem rekrutmen hanya pakai data dari kota besar → Diskriminasi kandidat dari desa.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confirmation Bias&lt;/strong&gt;: Evaluator hanya cari bukti yang dukung hipotesisnya. Contoh: "Sistem ini bagus!" → Abaikan feedback negatif.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anchoring Bias&lt;/strong&gt;: Terpaku pada informasi pertama. Contoh: Nilai sistem tinggi karena demo awal bagus, abaikan performa jangka panjang.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Availability Bias&lt;/strong&gt;: Terpengaruh data yang mudah diingat. Contoh: Fokus pada kasus gagal spektakuler, abaikan ribuan sukses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Algorithmic Bias&lt;/strong&gt;: Algoritma memperkuat bias data. Contoh: Sistem kredit AI tolak pinjaman perempuan karena data historis didominasi laki-laki.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  9.1.2 Deteksi Bias dalam Evaluasi
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Teknik: Bandingkan performa antar kelompok (gender, usia, lokasi).&lt;/li&gt;
&lt;li&gt;Alat: Fairlearn (Python), AIF360 (IBM).&lt;/li&gt;
&lt;li&gt;Validasi: Cross-check dengan data eksternal.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  9.1.3 Mitigasi Bias Data
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Diversifikasi data, randomisasi, bias correction (reweighting).&lt;/li&gt;
&lt;li&gt;Desain evaluasi adil: Pakai multiple evaluator independen.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  9.1.4 Studi Kasus: Bias dalam Evaluasi Sistem
&lt;/h4&gt;

&lt;p&gt;Kasus nyata: Sistem pengenalan wajah yang akurat 99% untuk kulit terang, tapi hanya 70% untuk kulit gelap → Diskriminasi rasial.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.2 Privasi Informasi dalam Evaluasi
&lt;/h3&gt;

&lt;p&gt;Privasi adalah hak dasar – jangan sampai evaluasi malah bocorkan data sensitif!&lt;/p&gt;

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

&lt;p&gt;Infografis GDPR principles ini jelasin 6 prinsip utama privasi data – mudah diingat!&lt;/p&gt;

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

&lt;p&gt;Ilustrasi isometric GDPR ini gambarin proteksi data secara visual.&lt;/p&gt;

&lt;h4&gt;
  
  
  9.2.1 Konsep Privasi Data
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Definisi: Kontrol individu atas data pribadinya.&lt;/li&gt;
&lt;li&gt;Regulasi: GDPR (Eropa), PDPA (Indonesia), CCPA (California).&lt;/li&gt;
&lt;li&gt;Hak: Akses, koreksi, hapus data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  9.2.2 Perlindungan Data dalam Evaluasi
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Anonimisasi (hapus identifier), pseudonimisasi (ganti nama dengan kode).&lt;/li&gt;
&lt;li&gt;Enkripsi, access control (role-based).&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  9.2.3 Etika Pengumpulan Data
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Informed consent: Jelaskan tujuan evaluasi.&lt;/li&gt;
&lt;li&gt;Minimisasi: Kumpul data secukupnya saja.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  9.2.4 Studi Kasus: Pelanggaran Privasi dalam Evaluasi
&lt;/h4&gt;

&lt;p&gt;Kasus Cambridge Analytica: Evaluasi data Facebook tanpa consent → Manipulasi pemilu.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.3 Isu Etika dalam Pengambilan Keputusan
&lt;/h3&gt;

&lt;p&gt;Evaluasi sering hadapi dilema: Akurat vs etis?&lt;/p&gt;

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

&lt;p&gt;Trolley problem self-driving car ini klasik dilema etika – pilih mana?&lt;/p&gt;

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

&lt;p&gt;Storyboard ethical dilemmas ini gambarin contoh dari literatur – relatable!&lt;/p&gt;

&lt;h4&gt;
  
  
  9.3.1 Dilema Etika dalam Evaluasi
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Konflik kepentingan: Evaluator dibayar sponsor → Tekan hasil positif.&lt;/li&gt;
&lt;li&gt;Transparansi vs kerahasiaan: Publikasi hasil vs lindungi data rahasia.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  9.3.2 Prinsip Etika Evaluasi
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Beneficence (bermanfaat), Non-maleficence (jangan merugikan), Justice (adil), Autonomy (hormati pilihan).&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  9.3.3 Kerangka Kerja Pengambilan Keputusan Etis
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Model: Identify issue → Options → Evaluate → Decide → Document.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  9.3.4 Studi Kasus: Keputusan Etis dalam Evaluasi
&lt;/h4&gt;

&lt;p&gt;Kasus: Evaluasi sistem surveillance – Efisien tapi langgar privasi?&lt;/p&gt;

&lt;h3&gt;
  
  
  9.4 Fairness dan Inclusivity dalam Evaluasi
&lt;/h3&gt;

&lt;p&gt;Evaluasi harus inklusif – jangan diskriminasi!&lt;/p&gt;

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

&lt;p&gt;Cycle bias and fairness ini gambarin gimana fairness jadi bagian integral AI.&lt;/p&gt;

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

&lt;p&gt;Diagram understanding bias ini jelasin sumber bias dan fairness.&lt;/p&gt;

&lt;h4&gt;
  
  
  9.4.1 Evaluasi yang Inklusif
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Universal design: Aksesibel untuk disabilitas.&lt;/li&gt;
&lt;li&gt;Cultural sensitivity: Tes dengan pengguna beragam budaya.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  9.4.2 Fairness Metrics
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Demographic Parity: Hasil sama antar kelompok.&lt;/li&gt;
&lt;li&gt;Equal Opportunity: Kesempatan benar sama.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  9.4.3 Addressing Discrimination in Systems
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Identifikasi pattern diskriminatif → Remediasi dengan re-training.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9.5 Tantangan Implementasi Evaluasi
&lt;/h3&gt;

&lt;p&gt;Evaluasi nggak selalu mulus – ada rintangan!&lt;/p&gt;

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

&lt;p&gt;Diagram challenges in prognostics ini gambarin obstacles teknis.&lt;/p&gt;

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

&lt;p&gt;Obstacles in adaptive management ini visualisasikan hambatan.&lt;/p&gt;

&lt;h4&gt;
  
  
  9.5.1 Tantangan Teknis
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Kompleksitas sistem, keterbatasan data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  9.5.2 Tantangan Organisasi
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Resistensi perubahan, budget.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  9.5.3 Tantangan Sosial
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Trust building dengan pengguna.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  9.5.4 Strategi Mengatasi
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Change management, stakeholder engagement.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9.6 Kode Etik Profesional Evaluasi Sistem
&lt;/h3&gt;

&lt;p&gt;Evaluator harus punya integritas tinggi.&lt;/p&gt;

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

&lt;p&gt;Ilustrasi purpose of code of ethics ini gambarin prinsip-prinsip utama.&lt;/p&gt;

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

&lt;p&gt;Professional ethics template ini visual dan mudah dipahami.&lt;/p&gt;

&lt;h4&gt;
  
  
  9.6.1 Standar Profesional
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Kompetensi, integritas, tanggung jawab sosial.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  9.6.2 Praktik Etis
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Objektivitas, akuntabilitas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  9.6.3 Pengembangan Profesi
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Sertifikasi, komunitas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  9.6.4 Studi Kasus: Etika Profesional dalam Aksi
&lt;/h4&gt;

&lt;p&gt;Kasus whistleblower yang laporkan bias di sistem.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.7 Rangkuman dan Latihan
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Rangkuman&lt;/strong&gt;: Etika evaluasi adalah kompas moral – bias, privasi, fairness, dan integritas harus jadi prioritas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pertanyaan Diskusi&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Apa dilema etika terbesar di evaluasi AI hari ini?&lt;/li&gt;
&lt;li&gt;Bagaimana mitigasi bias di proyekmu?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Case Study&lt;/strong&gt;: Analisis kasus COMPAS (sistem prediksi kriminalitas yang biased rasial).&lt;/p&gt;

&lt;p&gt;Selamat berefleksi, teman-teman! Etika bukan beban, tapi fondasi sistem informasi yang bertanggung jawab. Terus praktik etis – dunia butuh evaluator seperti kalian! ⚖️✨&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>datascience</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Analisis Kualitas dan Keamanan Sistem Informasi</title>
      <dc:creator>ahmadasroni38</dc:creator>
      <pubDate>Fri, 19 Dec 2025 08:05:14 +0000</pubDate>
      <link>https://dev.to/ahmadasroni38/analisis-kualitas-dan-keamanan-sistem-informasi-435g</link>
      <guid>https://dev.to/ahmadasroni38/analisis-kualitas-dan-keamanan-sistem-informasi-435g</guid>
      <description>&lt;p&gt;Halo, rekan-rekan praktisi, akademisi, dosen, dan mahasiswa yang sedang mendalami Sistem Informasi!&lt;br&gt;&lt;br&gt;
Selamat datang di bab yang menjadi pondasi kuat dalam membangun sistem informasi berkualitas tinggi: &lt;strong&gt;Analisis Kualitas dan Keamanan&lt;/strong&gt;. Sebagai praktisi yang telah mengimplementasikan puluhan proyek SI di perusahaan multinasional dan sebagai akademisi yang mengajar ribuan mahasiswa, saya selalu menekankan bahwa sistem informasi yang hebat bukan hanya yang "berfungsi", tapi yang &lt;strong&gt;handal, aman, dan memberikan nilai bisnis nyata&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Bayangkan kamu membangun aplikasi banking online. Kalau kualitas buruk (bug banyak, lambat), pengguna kabur. Kalau keamanan lemah (mudah dihack), perusahaan rugi miliaran. Analisis kualitas dan keamanan adalah "perisai" yang melindungi investasi kita. Bab ini dirancang mudah dipahami, dengan contoh sederhana sehari-hari, analogi menyenangkan, dan ilustrasi visual keren agar kamu cepat grasp dan langsung bisa terapkan di proyek nyata.&lt;/p&gt;

&lt;p&gt;Yuk kita eksplor bareng – praktis untuk industri, mendalam untuk penelitian! 😊&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Analisis Kualitas Sistem Informasi: Membuat Sistem yang Handal dan Efisien
&lt;/h3&gt;

&lt;p&gt;Kualitas sistem informasi diukur dari seberapa baik sistem memenuhi standar ISO 25010: Functionality, Reliability, Usability, Efficiency, Maintainability, dan Portability.&lt;/p&gt;

&lt;p&gt;Analogi: Kayak mobil. Bukan hanya bisa jalan (functionality), tapi aman nyetir (reliability), nyaman (usability), irit bensin (efficiency), dan mudah servis (maintainability).&lt;/p&gt;

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

&lt;p&gt;Diagram Software Quality Assurance ini nunjukin elemen-elemen utama: planning, testing, review – cycle berkelanjutan untuk kualitas tinggi!&lt;/p&gt;

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

&lt;p&gt;Versi lain yang fokus pada proses SQA – dari review hingga auditing.&lt;/p&gt;

&lt;h4&gt;
  
  
  Contoh Sederhana 1: Testing Pyramid untuk Kualitas Kode
&lt;/h4&gt;

&lt;p&gt;Di proyek aplikasi inventory, kita pakai &lt;strong&gt;Testing Pyramid&lt;/strong&gt;: Banyak unit test (dasar), sedikit integration test, lebih sedikit lagi UI test.&lt;/p&gt;

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

&lt;p&gt;Testing Pyramid ini ikonik: Unit test cepat &amp;amp; murah, UI test lambat tapi cover user experience – balance yang pas!&lt;/p&gt;

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

&lt;p&gt;Versi modern dengan trophy shape – lebih realistis untuk agile.&lt;/p&gt;

&lt;p&gt;Manfaat: Deteksi bug dini, hemat biaya perbaikan (bug di production bisa 100x lebih mahal).&lt;/p&gt;

&lt;h4&gt;
  
  
  Contoh Sederhana 2: Usability Testing
&lt;/h4&gt;

&lt;p&gt;Sistem absensi karyawan: Test dengan 10 pengguna nyata. Mereka kesulitan cari tombol "clock out"? Skor SUS (System Usability Scale) rendah → Redesign UI.&lt;/p&gt;

&lt;p&gt;Hasil: Kepuasan naik dari 60% ke 90%.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Analisis Keamanan Sistem Informasi: Melindungi dari Ancaman
&lt;/h3&gt;

&lt;p&gt;Keamanan berdasarkan &lt;strong&gt;CIA Triad&lt;/strong&gt;: Confidentiality (rahasia), Integrity (integritas data), Availability (selalu tersedia).&lt;/p&gt;

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

&lt;p&gt;CIA Triad illustration ini klasik: Tiga pilar keamanan informasi – kalau satu rubuh, sistem rentan!&lt;/p&gt;

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

&lt;p&gt;Versi artistik dengan ikon lock, shield, clock – mudah diingat.&lt;/p&gt;

&lt;p&gt;Pendekatan &lt;strong&gt;Defense in Depth&lt;/strong&gt; (lapisan bawang): Physical, Network, Host, Application, Data.&lt;/p&gt;

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

&lt;p&gt;Onion Security Model ini gambarin lapisan-lapisan proteksi – hacker harus tembus semua!&lt;/p&gt;

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

&lt;p&gt;Versi layered seperti bawang – semakin dalam, semakin kritis.&lt;/p&gt;

&lt;h4&gt;
  
  
  Contoh Sederhana 1: OWASP Top 10 di Aplikasi Web
&lt;/h4&gt;

&lt;p&gt;Di proyek e-commerce, ancaman teratas: Injection, Broken Authentication, Sensitive Data Exposure.&lt;/p&gt;

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

&lt;p&gt;Chart OWASP Top 10 ini update – prioritas risiko di web app!&lt;/p&gt;

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

&lt;p&gt;Versi 2025 guide – fokus pada broken access control dll.&lt;/p&gt;

&lt;p&gt;Mitigasi: Pakai prepared statements, HTTPS, authentication modern (OAuth).&lt;/p&gt;

&lt;h4&gt;
  
  
  Contoh Sederhana 2: Risk Matrix untuk Penilaian Ancaman
&lt;/h4&gt;

&lt;p&gt;Identifikasi risiko: SQL Injection (likelihood high, impact high) → Prioritas utama.&lt;/p&gt;

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

&lt;p&gt;Risk Matrix ini 5x5 grid: Likelihood vs Impact – warna merah tinggi risiko!&lt;/p&gt;

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

&lt;p&gt;Versi IT risk register – praktis untuk dokumentasi.&lt;/p&gt;

&lt;h3&gt;
  
  
  Integrasi Kualitas &amp;amp; Keamanan: Pendekatan Holistik
&lt;/h3&gt;

&lt;p&gt;Kualitas dan keamanan saling terkait – sistem berkualitas tinggi otomatis lebih aman (Secure by Design).&lt;/p&gt;

&lt;p&gt;Di praktik saya: Selalu integrasikan Security Testing di Testing Pyramid.&lt;/p&gt;

&lt;h3&gt;
  
  
  Latihan Praktikum yang Menyenangkan! 💪
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Analisis kualitas aplikasi favoritmu pakai ISO 25010.&lt;/li&gt;
&lt;li&gt;Buat risk matrix untuk proyek SI sederhana (misal sistem presensi).&lt;/li&gt;
&lt;li&gt;Diskusi: Bagaimana CIA Triad diterapkan di cloud computing?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Selamat bereksplorasi, rekan-rekan! Analisis kualitas dan keamanan adalah seni membangun sistem informasi yang tidak hanya berfungsi, tapi juga &lt;strong&gt;trusted dan sustainable&lt;/strong&gt;. Dengan pemahaman ini, kamu siap menghadapi tantangan industri nyata.&lt;/p&gt;

&lt;p&gt;— Ahmad Asroni, Praktisi &amp;amp; Akademisi Sistem Informasi&lt;br&gt;&lt;br&gt;
Spesialisasi: Evaluasi, Keamanan, dan Transformasi Digital&lt;/p&gt;

</description>
      <category>learning</category>
      <category>security</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Praktikum Keamanan Web: Open Redirect Vulnerability 🔀🎣</title>
      <dc:creator>ahmadasroni38</dc:creator>
      <pubDate>Thu, 18 Dec 2025 08:36:19 +0000</pubDate>
      <link>https://dev.to/ahmadasroni38/praktikum-keamanan-web-open-redirect-vulnerability-j5e</link>
      <guid>https://dev.to/ahmadasroni38/praktikum-keamanan-web-open-redirect-vulnerability-j5e</guid>
      <description>&lt;p&gt;Halo, teman-teman mahasiswa! Selamat datang di praktikum licik tapi seru tentang &lt;strong&gt;Open Redirect Vulnerability&lt;/strong&gt; – celah yang kayak "pintu jebakan" di website! Bayangkan setelah login sukses, aplikasi redirect kamu ke halaman dashboard. Tapi kalau developer lupa validasi, hacker bisa suntikkan URL jahat, dan kamu langsung dikirim ke situs phishing palsu yang mirip banget. Kamu masukin password lagi → Akun jebol! Ini sering dipakai buat phishing karena user percaya redirect dari situs resmi. &lt;/p&gt;

&lt;p&gt;Open redirect nggak langsung curi data, tapi bikin phishing jauh lebih kredibel. Yuk kita bahas santai, dengan contoh gampang di Laravel/PHP, dan ilustrasi keren biar langsung ngerti!&lt;/p&gt;

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

&lt;p&gt;Kartun "cat-phishing" ini lucu tapi nunjukin gimana open redirect dipakai buat jebak user – hacker senyum lebar! 😂&lt;/p&gt;

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

&lt;p&gt;Gambar cartoon hacker ini gambarin serangan phishing lewat open redirect – user tergoda!&lt;/p&gt;

&lt;h3&gt;
  
  
  Apa Itu Open Redirect? 🤔🔀
&lt;/h3&gt;

&lt;p&gt;Open redirect terjadi saat aplikasi redirect user ke URL yang dikontrol dari input (parameter GET/POST) tanpa validasi ketat. Hacker manfaatin buat kirim user ke situs jahat, sambil keliatan dari situs asli.&lt;/p&gt;

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

&lt;p&gt;Attack flow phishing ini jelas banget: User klik link trusted → Redirect ke fake site → Masukin credential!&lt;/p&gt;

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

&lt;p&gt;Scheme open redirection ini simpel tapi efektif – dari situs legit ke evil.com!&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh 1: Redirect Setelah Login (Klasik Banget!)
&lt;/h3&gt;

&lt;p&gt;Kode rentan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Request&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ... login logic&lt;/span&gt;
    &lt;span class="nv"&gt;$redirect&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'return_url'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'/dashboard'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;redirect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$redirect&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Langsung redirect tanpa cek!&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;URL normal: /login?return_url=/dashboard → Aman.&lt;/p&gt;

&lt;p&gt;URL jahat: /login?return_url=&lt;a href="https://fakebank.com" rel="noopener noreferrer"&gt;https://fakebank.com&lt;/a&gt; → Setelah login, user dikirim ke phishing site!&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh 2: Logout atau OAuth Redirect
&lt;/h3&gt;

&lt;p&gt;/logout?next=&lt;a href="https://evil.com" rel="noopener noreferrer"&gt;https://evil.com&lt;/a&gt; → User logout, langsung ke situs jahat.&lt;/p&gt;

&lt;p&gt;Atau di OAuth: /oauth/callback?redirect_uri=&lt;a href="https://attacker.com" rel="noopener noreferrer"&gt;https://attacker.com&lt;/a&gt; → Curi code/token.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh 3: Share Link atau Email Confirmation
&lt;/h3&gt;

&lt;p&gt;Link email: &lt;a href="https://situs.com/confirm?redirect=https://malicious.com" rel="noopener noreferrer"&gt;https://situs.com/confirm?redirect=https://malicious.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;User klik, confirm, terus redirect ke jahat – percaya banget karena dari email resmi!&lt;/p&gt;

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

&lt;p&gt;Diagram complete guide ini detail nunjukin gimana open redirect dipakai buat phishing &amp;amp; token theft!&lt;/p&gt;

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

&lt;p&gt;Understanding Open Redirection Attack ini gambarin proses lengkap – user nggak sadar!&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh 4: Kombinasi dengan XSS atau Open Redirect Chain
&lt;/h3&gt;

&lt;p&gt;Kalau ada XSS, hacker suntik link open redirect → Lebih berbahaya.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cara Mencegah Open Redirect (Mudah &amp;amp; Efektif!) 🛡️✨
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Whitelist URL yang Diizinkan&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;   &lt;span class="nv"&gt;$allowed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'/dashboard'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'/profile'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;url&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;previous&lt;/span&gt;&lt;span class="p"&gt;()];&lt;/span&gt;
   &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nb"&gt;in_array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$redirect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$allowed&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="nv"&gt;$redirect&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'/dashboard'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cek Domain Sama (Relative Path Only)&lt;/strong&gt;&lt;br&gt;
Pakai &lt;code&gt;url()-&amp;gt;previous()&lt;/code&gt; atau force internal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pakai Signed Redirect (Laravel punya!)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;redirect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;signedRoute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'dashboard'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Otomatis validasi signature&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Validasi Strict&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;   &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nc"&gt;Str&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;startsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/'&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt; &lt;span class="nf"&gt;abort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Harus mulai dari domain sendiri&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Diagram prevention dari Microsoft ini nunjukin proses secure redirect – validasi dulu baru redirect!&lt;/p&gt;

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

&lt;p&gt;Identifying Open Redirection ini bagian dari best practices – whitelist &amp;amp; check!&lt;/p&gt;

&lt;h3&gt;
  
  
  Latihan Seru Buat Kamu! 💪🔥
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Buat login dengan redirect rentan, test phishing link.&lt;/li&gt;
&lt;li&gt;Kirim link jahat ke temen (di lab ya!), lihat dia percaya nggak.&lt;/li&gt;
&lt;li&gt;Tambahin whitelist/signed route, test lagi (harusnya aman!).&lt;/li&gt;
&lt;li&gt;Coba di labs seperti PortSwigger Open Redirect.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Selamat praktikum, guys! Open Redirect ini vulnerability "sederhana tapi jahat" yang bikin phishing sukses besar, tapi dengan validasi &amp;amp; whitelist, website kamu anti-phishing total 🎣🔒 Jadi developer yang bikin user aman dari jebakan! Ingat: &lt;strong&gt;Selalu validasi redirect URL!&lt;/strong&gt; Keep coding safely and have fun! 🎉🔀&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>security</category>
      <category>laravel</category>
      <category>php</category>
    </item>
    <item>
      <title>Praktikum Keamanan Web: Brute Force Attack &amp; Rate Limiting 🔑🚫</title>
      <dc:creator>ahmadasroni38</dc:creator>
      <pubDate>Thu, 18 Dec 2025 08:30:41 +0000</pubDate>
      <link>https://dev.to/ahmadasroni38/praktikum-keamanan-web-brute-force-attack-rate-limiting-5ejm</link>
      <guid>https://dev.to/ahmadasroni38/praktikum-keamanan-web-brute-force-attack-rate-limiting-5ejm</guid>
      <description>&lt;p&gt;Halo, teman-teman mahasiswa! Selamat datang di praktikum seru tentang &lt;strong&gt;Brute Force Attack&lt;/strong&gt; – serangan klasik yang kayak "coba-coba semua kunci sampai pintu kebuka"! Hacker pakai script otomatis buat tebak password ribuan kali per detik di form login. Kalau password lemah (misal "123456"), akun langsung jebol. Tapi tenang, kita punya senjata ampuh: &lt;strong&gt;Rate Limiting&lt;/strong&gt; – kayak satpam yang bilang "Cukup! Tunggu dulu kalau terlalu sering salah!" &lt;/p&gt;

&lt;p&gt;Ini vulnerability umum banget di login, API, atau form sensitif. Yuk kita pelajari bareng, santai tapi powerful, dengan contoh gampang di Laravel!&lt;/p&gt;

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

&lt;p&gt;Ilustrasi hacker lagi brute force ini nunjukin ribuan percobaan password – capek banget kalau manual! 😂&lt;/p&gt;

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

&lt;p&gt;Gambar robot AI cracking password ini mind-blowing – brute force modern pakai AI!&lt;/p&gt;

&lt;h3&gt;
  
  
  Apa Itu Brute Force Attack? 🤖🔓
&lt;/h3&gt;

&lt;p&gt;Brute force adalah serangan "kasar" yang coba semua kombinasi password sampai benar.&lt;/p&gt;

&lt;p&gt;Jenisnya:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pure Brute Force&lt;/strong&gt;: Coba semua karakter (aaaa, aaab, ... zzzz) – lambat banget!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dictionary Attack&lt;/strong&gt;: Pakai daftar kata umum (password123, admin, dll) – cepat kalau password lemah.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Visual dictionary attack ini jelas banget: Hacker pakai list kata umum buat tebak cepat!&lt;/p&gt;

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

&lt;p&gt;Tabel password cracking time 2025 ini serem – password pendek jebol dalam detik!&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh 1: Brute Force Login Sederhana
&lt;/h3&gt;

&lt;p&gt;Kode login rentan (tanpa limit):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Login sukses&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hacker pakai tool seperti Hydra atau script Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;dictionary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/login&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;email&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;victim@email.com&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;password&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kalau dictionary punya 10.000 kata, coba semua dalam detik!&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh 2: Credential Stuffing
&lt;/h3&gt;

&lt;p&gt;Pakai username:password bocoran dari breach lain (misal dari LinkedIn hack).&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh 3: API Endpoint Tanpa Limit
&lt;/h3&gt;

&lt;p&gt;Hacker flood request ke /api/login – server down (DoS bonus).&lt;/p&gt;

&lt;h3&gt;
  
  
  Rate Limiting: Si Penjaga Pintu! 🛡️⏱️
&lt;/h3&gt;

&lt;p&gt;Rate limiting batasi berapa kali request dari satu IP/user dalam waktu tertentu.&lt;/p&gt;

&lt;p&gt;Contoh: Maksimal 5 attempt login per menit per IP.&lt;/p&gt;

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

&lt;p&gt;Diagram sliding window rate limiting ini keren – batas request bergeser waktu!&lt;/p&gt;

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

&lt;p&gt;Ilustrasi API rate limiting ini nunjukin barrier yang blokir flood request!&lt;/p&gt;

&lt;h3&gt;
  
  
  Cara Implementasi di Laravel (Super Gampang!)
&lt;/h3&gt;

&lt;p&gt;Laravel punya &lt;strong&gt;Throttle Middleware&lt;/strong&gt; built-in!&lt;/p&gt;

&lt;p&gt;Di Route:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/login'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;LoginController&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'login'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;middleware&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'throttle:5,1'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// 5 attempt per 1 menit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Atau custom:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;middleware&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'throttle:60,1'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// 60 request per menit (buat API)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kalau exceed: "Too Many Attempts" otomatis!&lt;/p&gt;

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

&lt;p&gt;Contoh Laravel throttle message ini persis yang muncul kalau kebanyakan attempt!&lt;/p&gt;

&lt;h3&gt;
  
  
  Bonus: Kombinasi dengan Pencegahan Lain
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Hash password kuat (bcrypt/argon2).&lt;/li&gt;
&lt;li&gt;CAPTCHA setelah 3 gagal.&lt;/li&gt;
&lt;li&gt;Account lockout sementara.&lt;/li&gt;
&lt;li&gt;Monitor login failed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Latihan Seru Buat Kamu! 💪🔥
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Buat login rentan, brute force pakai script sederhana (curl loop).&lt;/li&gt;
&lt;li&gt;Tambahin throttle middleware, test lagi (harusnya blokir!).&lt;/li&gt;
&lt;li&gt;Custom rate limit beda buat login vs API.&lt;/li&gt;
&lt;li&gt;Coba di labs seperti PortSwigger Brute Force.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Selamat praktikum, guys! Brute Force ini serangan "bodoh tapi efektif" kalau nggak dicegah, tapi dengan Rate Limiting Laravel, akun kamu aman kayak brankas bank 💰🔒 Jadi developer yang anti-brute dari awal! Ingat: &lt;strong&gt;Batasi attempt, selamatkan password!&lt;/strong&gt; Keep coding safely and have fun! 🎉🚫&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>security</category>
      <category>laravel</category>
      <category>php</category>
    </item>
    <item>
      <title>Praktikum Keamanan Web: Server-Side Request Forgery (SSRF) 🌐🕵️‍♂️</title>
      <dc:creator>ahmadasroni38</dc:creator>
      <pubDate>Thu, 18 Dec 2025 08:23:02 +0000</pubDate>
      <link>https://dev.to/ahmadasroni38/praktikum-keamanan-web-server-side-request-forgery-ssrf-1077</link>
      <guid>https://dev.to/ahmadasroni38/praktikum-keamanan-web-server-side-request-forgery-ssrf-1077</guid>
      <description>&lt;p&gt;Halo, teman-teman mahasiswa! Selamat datang di praktikum super misterius tentang &lt;strong&gt;Server-Side Request Forgery&lt;/strong&gt; atau &lt;strong&gt;SSRF&lt;/strong&gt; – vulnerability yang bikin hacker kayak detektif siluman! Bayangkan aplikasi web kamu punya fitur fetch data dari URL lain (misal preview link, import gambar, atau cek webhook). Kalau nggak dijaga, hacker bisa "paksa" server kamu request ke tempat terlarang: internal network, metadata cloud (AWS/GCP/Azure), atau bahkan localhost! Hasilnya? Baca file rahasia, scan port internal, atau ambil credential cloud. Kayak server kamu jadi boneka hacker tanpa sadar. &lt;/p&gt;

&lt;p&gt;SSRF sering dipakai buat serangan advanced di cloud environment. Yuk kita eksplor bareng, santai tapi mind-blowing, dengan contoh sederhana di PHP/Laravel!&lt;/p&gt;

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

&lt;p&gt;Kartun hacker lagi manfaatin SSRF ini lucu tapi nunjukin betapa liciknya – server dipaksa request ke internal! 😂&lt;/p&gt;

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

&lt;p&gt;Diagram klasik dari PortSwigger ini gambarin alur SSRF secara jelas – attacker → server → target terlarang!&lt;/p&gt;

&lt;h3&gt;
  
  
  Apa Itu SSRF? 🤔🔍
&lt;/h3&gt;

&lt;p&gt;SSRF terjadi saat server melakukan request ke URL yang dikontrol user tanpa validasi ketat. Server "percaya" input user dan fetch ke mana saja, termasuk:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Internal IP (127.0.0.1, 192.168.x.x, 10.x.x.x)&lt;/li&gt;
&lt;li&gt;Metadata service cloud (&lt;a href="http://169.254.169.254" rel="noopener noreferrer"&gt;http://169.254.169.254&lt;/a&gt; di AWS)&lt;/li&gt;
&lt;li&gt;Local files (file:///etc/passwd)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dampak: Port scanning, data leakage, RCE kalau chain dengan vuln lain.&lt;/p&gt;

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

&lt;p&gt;Ilustrasi update ini detail banget: Hacker paksa server request ke internal services!&lt;/p&gt;

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

&lt;p&gt;Flowchart exploit SSRF ini step-by-step – dari input user sampai akses internal!&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh 1: Preview Link atau Gambar (Klasik SSRF!)
&lt;/h3&gt;

&lt;p&gt;Kode rentan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'url'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;file_get_contents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Langsung fetch tanpa cek!&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Input normal: &lt;a href="https://example.com/image.jpg" rel="noopener noreferrer"&gt;https://example.com/image.jpg&lt;/a&gt; → Tampil gambar.&lt;/p&gt;

&lt;p&gt;Input jahat: &lt;a href="http://127.0.0.1:8080/admin" rel="noopener noreferrer"&gt;http://127.0.0.1:8080/admin&lt;/a&gt; → Tampil halaman admin internal!&lt;/p&gt;

&lt;p&gt;Atau &lt;a href="http://localhost/server-status" rel="noopener noreferrer"&gt;http://localhost/server-status&lt;/a&gt; → Lihat info Apache internal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh 2: Akses Metadata Cloud (Bahaya di AWS/Azure/GCP!)
&lt;/h3&gt;

&lt;p&gt;URL jahat: &lt;a href="http://169.254.169.254/latest/meta-data/iam/security-credentials/role-name" rel="noopener noreferrer"&gt;http://169.254.169.254/latest/meta-data/iam/security-credentials/role-name&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Server fetch → Dapat AWS credentials temporary! Hacker ambil alih akun cloud.&lt;/p&gt;

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

&lt;p&gt;Contoh real di Azure services – SSRF buat akses internal!&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh 3: Port Scanning Internal
&lt;/h3&gt;

&lt;p&gt;Input: &lt;a href="http://192.168.1.1:22" rel="noopener noreferrer"&gt;http://192.168.1.1:22&lt;/a&gt; → Kalau response beda (timeout vs connected), hacker tahu port open!&lt;/p&gt;

&lt;p&gt;Atau bypass filter dengan: &lt;a href="http://2130706433:80" rel="noopener noreferrer"&gt;http://2130706433:80&lt;/a&gt; (IP decimal untuk 127.0.0.1)&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh 4: Baca File Local
&lt;/h3&gt;

&lt;p&gt;Kalau allow file:// protocol: file:///etc/passwd → Tampil isi file server!&lt;/p&gt;

&lt;h3&gt;
  
  
  Cara Mencegah SSRF (Best Practices Keren!) 🛡️✨
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Whitelist Domain yang Diizinkan&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;   &lt;span class="nv"&gt;$allowed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'example.com'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'api.public.com'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
   &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nb"&gt;in_array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;parse_url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;PHP_URL_HOST&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nv"&gt;$allowed&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="nf"&gt;abort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;403&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Blacklist Internal IP&lt;/strong&gt;&lt;br&gt;
Cek kalau IP private (127.&lt;em&gt;, 10.&lt;/em&gt;, 192.168.&lt;em&gt;, 172.16-31.&lt;/em&gt;) → Blokir!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Disable Redirect &amp;amp; Non-HTTP Protocol&lt;/strong&gt;&lt;br&gt;
Pakai Guzzle dengan opsi:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;   &lt;span class="nv"&gt;$client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;\GuzzleHttp\Client&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'allow_redirects'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'protocols'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'http'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'https'&lt;/span&gt;&lt;span class="p"&gt;]]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Validasi &amp;amp; Sanitasi URL Ketat&lt;/strong&gt;
Pakai library seperti &lt;code&gt;league/uri&lt;/code&gt; untuk parse aman.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;OWASP common flow prevention – whitelist &amp;amp; blacklist adalah kunci!&lt;/p&gt;

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

&lt;p&gt;Infografis Akamai ini nunjukin cara cegah SSRF secara visual!&lt;/p&gt;

&lt;h3&gt;
  
  
  Latihan Seru Buat Kamu! 💪🔥
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Buat fitur preview URL rentan, test akses localhost.&lt;/li&gt;
&lt;li&gt;Coba metadata AWS (di lab seperti PortSwigger).&lt;/li&gt;
&lt;li&gt;Tambahin whitelist, test bypass (decimal IP, dll).&lt;/li&gt;
&lt;li&gt;Implementasikan secure fetch dengan Guzzle.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Selamat praktikum, guys! SSRF ini vulnerability "ninja" yang diam-diam kuat, terutama di cloud – tapi dengan whitelist &amp;amp; validasi, server kamu aman kayak benteng tak terlihat 🔒🌐 Jadi developer yang aware cloud security dari sekarang! Ingat: &lt;strong&gt;Never trust user-provided URLs!&lt;/strong&gt; Keep coding safely and have fun! 🎉🕵️‍♂️&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>webdev</category>
      <category>security</category>
      <category>php</category>
    </item>
    <item>
      <title>Praktikum Keamanan Web: File Upload Vulnerability 😱📁💥</title>
      <dc:creator>ahmadasroni38</dc:creator>
      <pubDate>Thu, 18 Dec 2025 08:17:28 +0000</pubDate>
      <link>https://dev.to/ahmadasroni38/praktikum-keamanan-web-file-upload-vulnerability-37aa</link>
      <guid>https://dev.to/ahmadasroni38/praktikum-keamanan-web-file-upload-vulnerability-37aa</guid>
      <description>&lt;p&gt;Halo, teman-teman mahasiswa! Selamat datang di praktikum super seru dan penting tentang &lt;strong&gt;File Upload Vulnerability&lt;/strong&gt; – salah satu celah keamanan yang paling sering dieksploitasi hacker untuk ambil alih server! Bayangkan kamu punya fitur upload foto profil atau dokumen di website. Kalau nggak dijaga ketat, hacker bisa upload file jahat seperti &lt;strong&gt;web shell&lt;/strong&gt; (script PHP nakal) yang bisa jalankan command di server: baca file rahasia (.env), hapus data, atau bahkan kontrol total server. Kayak kasih remote control ke orang asing! &lt;/p&gt;

&lt;p&gt;Ini sering masuk OWASP Top 10 karena gampang banget dieksploitasi. Yuk kita bahas santai, dengan contoh sederhana di PHP/Laravel, kode mudah dicoba di localhost, dan ilustrasi keren biar langsung paham. Siap jadi hacker etis? 😎&lt;/p&gt;

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

&lt;p&gt;Ilustrasi hacker lagi upload malicious file ini nunjukin bahayanya – dari form biasa jadi web shell!&lt;/p&gt;

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

&lt;p&gt;Gambar Intigriti ini keren banget gambarin proses file upload vulnerabilities!&lt;/p&gt;

&lt;h3&gt;
  
  
  Apa Itu File Upload Vulnerability? 🤔
&lt;/h3&gt;

&lt;p&gt;Ini terjadi saat aplikasi nggak validasi file upload dengan benar: tipe file, ukuran, nama, isi, atau lokasi penyimpanan. Hacker manfaatin buat upload executable file (PHP, JSP, dll) yang bisa dieksekusi server.&lt;/p&gt;

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

&lt;p&gt;Diagram step-by-step ini jelasin alur serangan: upload → bypass → execute shell!&lt;/p&gt;

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

&lt;p&gt;Visual lain yang detail banget nunjukin variasi exploit!&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh 1: Upload Web Shell Sederhana (Klasik!) 🐚
&lt;/h3&gt;

&lt;p&gt;Kode rentan (PHP sederhana):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;isset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_FILES&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'file'&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_FILES&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'file'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="nb"&gt;move_uploaded_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'tmp_name'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s1"&gt;'uploads/'&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'name'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;  &lt;span class="c1"&gt;// Langsung simpan nama asli!&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hacker upload file &lt;code&gt;shell.php&lt;/code&gt; dengan isi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt; &lt;span class="nb"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_GET&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'cmd'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;  // Jalankan command dari URL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Akses: &lt;code&gt;uploads/shell.php?cmd=whoami&lt;/code&gt; → Dapat info server!&lt;/p&gt;

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

&lt;p&gt;Contoh web shell upload – hacker eksekusi command seenaknya!&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh 2: Bypass Extension (Tricky!)
&lt;/h3&gt;

&lt;p&gt;Validasi lemah: Cek hanya extension &lt;code&gt;.jpg&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;pathinfo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;PATHINFO_EXTENSION&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="s1"&gt;'jpg'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;die&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Invalid!'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hacker upload &lt;code&gt;shell.php.jpg&lt;/code&gt; atau &lt;code&gt;shell.jpg.php&lt;/code&gt; (kalau Apache config salah).&lt;/p&gt;

&lt;p&gt;Atau polyglot file: File valid image tapi isi PHP di awal (GIF89a; &amp;lt;?php ... ?&amp;gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh 3: Null Byte Injection (Old but Gold)
&lt;/h3&gt;

&lt;p&gt;Di PHP lama: &lt;code&gt;shell.php%00.jpg&lt;/code&gt; → %00 potong string, jadi simpan sebagai &lt;code&gt;shell.php&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh 4: Overwrite File Penting
&lt;/h3&gt;

&lt;p&gt;Simpan dengan nama asli → Upload &lt;code&gt;.htaccess&lt;/code&gt; atau overwrite config.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cara Mencegah File Upload (Best Practices Keren!) 🛡️✨
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Validasi Ketat MIME Type &amp;amp; Extension Whitelist&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;   &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
       &lt;span class="s1"&gt;'file'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'required|mimes:jpg,png,pdf|max:2048'&lt;/span&gt;  &lt;span class="c1"&gt;// Max 2MB&lt;/span&gt;
   &lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Rename File Unik&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;   &lt;span class="nv"&gt;$filename&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Str&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;'.'&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getClientOriginalExtension&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Simpan di Private Storage, Bukan Public&lt;/strong&gt;&lt;br&gt;
Pakai &lt;code&gt;storage/app/private&lt;/code&gt;, serve lewat controller (cek auth).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Verifikasi Isi File (Bukan Cuma Extension)&lt;/strong&gt;&lt;br&gt;
Pakai library seperti Intervention Image untuk cek benar image.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Infografis best practices ini lengkap: validation, unique name, private storage!&lt;/p&gt;

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

&lt;p&gt;Checklist prevention ini dari expert – wajib diikuti!&lt;/p&gt;

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

&lt;p&gt;Contoh secure upload flow – aman total!&lt;/p&gt;

&lt;h3&gt;
  
  
  Latihan Seru Buat Kamu! 💪🔥
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Buat form upload rentan, upload shell.php, eksekusi command.&lt;/li&gt;
&lt;li&gt;Tambahin bypass extension, test polyglot.&lt;/li&gt;
&lt;li&gt;Perbaiki dengan validasi Laravel, rename, private storage.&lt;/li&gt;
&lt;li&gt;Coba di labs seperti PortSwigger File Upload.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Selamat praktikum, guys! File Upload Vulnerability ini pintu masuk favorit hacker buat RCE, tapi dengan validasi ketat &amp;amp; storage aman, website kamu jadi anti-bullet 🔒💪 Jadi developer yang secure minded dari sekarang! Ingat: &lt;strong&gt;Never trust uploaded files!&lt;/strong&gt; Keep coding safely and have fun! 🎉📁&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>security</category>
      <category>laravel</category>
      <category>php</category>
    </item>
    <item>
      <title>Praktikum Keamanan Web: Broken Access Control &amp; Insecure Direct Object Reference (IDOR) 😱🔓</title>
      <dc:creator>ahmadasroni38</dc:creator>
      <pubDate>Thu, 18 Dec 2025 08:12:07 +0000</pubDate>
      <link>https://dev.to/ahmadasroni38/praktikum-keamanan-web-broken-access-control-insecure-direct-object-reference-idor-51i4</link>
      <guid>https://dev.to/ahmadasroni38/praktikum-keamanan-web-broken-access-control-insecure-direct-object-reference-idor-51i4</guid>
      <description>&lt;p&gt;Halo, teman-teman mahasiswa! Selamat datang di praktikum super penting tentang &lt;strong&gt;Broken Access Control&lt;/strong&gt; – vulnerability nomor 1 di OWASP Top 10 tahun 2025! Ini termasuk &lt;strong&gt;Insecure Direct Object Reference (IDOR)&lt;/strong&gt;, yang kayak pintu samping rumah yang lupa dikunci. Bayangkan kamu login sebagai user biasa, tapi cuma ganti angka di URL (misal /profile/123 jadi /profile/456), terus langsung bisa lihat atau edit data orang lain: profile, invoice, foto pribadi, bahkan delete akun! Serem banget kan? Hacker bisa curi data massal tanpa perlu password.&lt;/p&gt;

&lt;p&gt;Ini beda dari authentication (yang cek "siapa kamu"), tapi authorization (yang cek "boleh nggak kamu akses ini?"). Yuk kita pelajari bareng, santai tapi seru, dengan contoh Laravel gampang dicoba di localhost!&lt;/p&gt;

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

&lt;p&gt;Kartun hacker lagi eksploitasi IDOR ini lucu tapi nunjukin bahayanya – ganti ID doang, data orang lain kebuka! 😂&lt;/p&gt;

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

&lt;p&gt;Ilustrasi SVG keren ini gambarin konsep Broken Access Control secara visual – user biasa nyelonong ke area terlarang!&lt;/p&gt;

&lt;h3&gt;
  
  
  Apa Itu Broken Access Control &amp;amp; IDOR? 🤔
&lt;/h3&gt;

&lt;p&gt;Broken Access Control terjadi saat aplikasi nggak cek hak akses dengan benar. IDOR adalah jenis paling umum: Aplikasi pakai reference langsung (seperti ID di database) tanpa verifikasi ownership.&lt;/p&gt;

&lt;p&gt;Contoh sederhana: URL &lt;code&gt;/user/5/edit&lt;/code&gt; → Kalau nggak dicek, user ID 10 bisa edit user ID 5.&lt;/p&gt;

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

&lt;p&gt;Diagram attack IDOR ini jelas banget: Attacker ganti reference object langsung, bypass authorization!&lt;/p&gt;

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

&lt;p&gt;Flowchart serangan IDOR ini step-by-step – dari request normal sampai exploit ganti ID!&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh 1: Lihat Profile Orang Lain (Klasik IDOR!) 👀
&lt;/h3&gt;

&lt;p&gt;Controller rentan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;findOrFail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Ambil user berdasarkan ID tanpa cek!&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;view&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'profile.show'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;compact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'user'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Route: &lt;code&gt;Route::get('/profile/{id}', [ProfileController::class, 'show']);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Kamu login sebagai user ID 10, buka &lt;code&gt;/profile/10&lt;/code&gt; → Aman.&lt;/p&gt;

&lt;p&gt;Hacker ganti jadi &lt;code&gt;/profile/11&lt;/code&gt; → Langsung lihat data user lain: email, nomor HP, alamat!&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh 2: Edit atau Delete Data Orang Lain 🖊️🗑️
&lt;/h3&gt;

&lt;p&gt;Controller rentan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Request&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;findOrFail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;  &lt;span class="c1"&gt;// Update tanpa cek ownership&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hacker kirim POST ke &lt;code&gt;/user/999/update&lt;/code&gt; dengan data jahat → Ubah email/password user lain.&lt;/p&gt;

&lt;p&gt;Atau delete: &lt;code&gt;User::findOrFail($id)-&amp;gt;delete();&lt;/code&gt; → Hapus akun orang!&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh 3: Akses Invoice atau Order di E-Commerce 🧾
&lt;/h3&gt;

&lt;p&gt;URL: &lt;code&gt;/invoice/12345&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;User biasa ganti angka sequentially (12345, 12346, ...) → Download semua invoice customer lain. Bisa curi data kartu kredit atau alamat!&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh 4: Admin Panel Tanpa Cek Role 👑
&lt;/h3&gt;

&lt;p&gt;Controller:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;dashboard&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nf"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;check&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="nf"&gt;abort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;403&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// Hanya cek login, nggak cek role!&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;view&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'admin.dashboard'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;User biasa akses &lt;code&gt;/admin/dashboard&lt;/code&gt; → Lihat semua data sensitif.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cara Mencegah di Laravel (Super Mudah &amp;amp; Keren!) 🛡️✨
&lt;/h3&gt;

&lt;p&gt;Laravel punya tools pro: &lt;strong&gt;Policy&lt;/strong&gt;, &lt;strong&gt;Gate&lt;/strong&gt;, &lt;strong&gt;Middleware&lt;/strong&gt;, dan &lt;code&gt;$this-&amp;gt;authorize()&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pakai Policy (Rekomendasi untuk Model!)&lt;/strong&gt;
Buat policy: &lt;code&gt;php artisan make:policy UserPolicy --model=User&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Di UserPolicy.php:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;   &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;User&lt;/span&gt; &lt;span class="nv"&gt;$authUser&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;User&lt;/span&gt; &lt;span class="nv"&gt;$targetUser&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$authUser&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nv"&gt;$targetUser&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// Hanya boleh lihat milik sendiri&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;

   &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;User&lt;/span&gt; &lt;span class="nv"&gt;$authUser&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;User&lt;/span&gt; &lt;span class="nv"&gt;$targetUser&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$authUser&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nv"&gt;$targetUser&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nv"&gt;$authUser&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;is_admin&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Di Controller:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;   &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;User&lt;/span&gt; &lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;  &lt;span class="c1"&gt;// Route Model Binding&lt;/span&gt;
       &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;authorize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'view'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Otomatis cek policy!&lt;/span&gt;
       &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;view&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'profile.show'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;compact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'user'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Gambar ini nunjukin cara prevent Broken Access Control di Laravel – pakai policy &amp;amp; gate!&lt;/p&gt;

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

&lt;p&gt;Contoh kode Laravel secure dengan authorization – langsung aman!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Manual Check (Simple)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;   &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;abort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;403&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Middleware untuk Admin&lt;/strong&gt;
Buat middleware &lt;code&gt;admin&lt;/code&gt;, apply ke route group.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Latihan Seru Buat Kamu! 💪🔥
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Buat profile viewer rentan, test IDOR dengan ganti ID di URL.&lt;/li&gt;
&lt;li&gt;Tambahin policy, test lagi (harusnya 403 Forbidden!).&lt;/li&gt;
&lt;li&gt;Buat fitur invoice, exploit sequential ID.&lt;/li&gt;
&lt;li&gt;Implementasikan Gate untuk admin-only feature.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Selamat praktikum, guys! Broken Access Control/IDOR ini vulnerability "pintu samping" yang sering terlupakan, tapi dengan Laravel Policy &amp;amp; authorize, aplikasi kamu aman kayak benteng kerajaan 👑🔒 Jadi developer yang pro security dari sekarang! Ingat: &lt;strong&gt;Selalu cek ownership &amp;amp; role sebelum akses data!&lt;/strong&gt; Keep coding safely and have fun! 🎉🐘&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>security</category>
      <category>laravel</category>
      <category>php</category>
    </item>
    <item>
      <title>Praktikum Keamanan Web: Mass Assignment Vulnerability 😱🔓</title>
      <dc:creator>ahmadasroni38</dc:creator>
      <pubDate>Thu, 18 Dec 2025 07:55:52 +0000</pubDate>
      <link>https://dev.to/ahmadasroni38/praktikum-keamanan-web-mass-assignment-vulnerability-fmh</link>
      <guid>https://dev.to/ahmadasroni38/praktikum-keamanan-web-mass-assignment-vulnerability-fmh</guid>
      <description>&lt;p&gt;Halo, teman-teman mahasiswa! Selamat datang di praktikum seru tentang &lt;strong&gt;Mass Assignment&lt;/strong&gt; – vulnerability yang sering disebut "silent killer" di aplikasi modern, terutama yang pakai framework seperti Laravel, Ruby on Rails, atau Node.js. Bayangkan kamu lagi isi form registrasi biasa: nama, email, password. Tapi kalau developer lupa proteksi, hacker bisa "nyelipkan" field rahasia seperti "is_admin = true" dan langsung jadi admin! Kayak kasih kunci rumah ke orang asing tanpa sadar. &lt;/p&gt;

&lt;p&gt;Ini bukan serangan rumit kayak SQLi atau XSS, tapi super berbahaya karena gampang dieksploitasi lewat form atau API. Yuk kita bahas santai, dengan contoh Laravel (paling populer di PHP), kode mudah dicoba, dan ilustrasi keren biar langsung paham! 🚀&lt;/p&gt;

&lt;p&gt;Ilustrasi klasik ini nunjukin gimana mass assignment "mengisi massal" field yang seharusnya dilindungi – hacker senang banget!&lt;/p&gt;

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

&lt;p&gt;Kartun hacker lagi eksploitasi mass assignment – jangan ditiru, ini buat belajar aja! 😂&lt;/p&gt;

&lt;h3&gt;
  
  
  Apa Itu Mass Assignment? 🤔
&lt;/h3&gt;

&lt;p&gt;Mass Assignment adalah fitur keren di ORM (Object-Relational Mapping) seperti Eloquent di Laravel yang memungkinkan isi banyak field model sekaligus dari array input (misal dari form atau request API).&lt;/p&gt;

&lt;p&gt;Contoh normal &amp;amp; berguna:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;  &lt;span class="c1"&gt;// Isi semua field dari input&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tapi kalau nggak ada proteksi, semua field di tabel database bisa diisi user – termasuk yang sensitif seperti &lt;code&gt;is_admin&lt;/code&gt;, &lt;code&gt;role&lt;/code&gt;, &lt;code&gt;balance&lt;/code&gt;, dll.&lt;/p&gt;

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

&lt;p&gt;Diagram sederhana ini gambarin proses mass assignment – dari request sampai database keisi data tak terduga!&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh 1: Registrasi User Jadi Admin Gratis! 👑
&lt;/h3&gt;

&lt;p&gt;Model User tanpa proteksi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Kosong! Semua field boleh diisi massal&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Controller rentan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Request&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;"Registrasi sukses!"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Form normal: name, email, password.&lt;/p&gt;

&lt;p&gt;Hacker tambahin di request (pakai Burp Suite atau Postman):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Hacker"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hack@evil.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"password"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"is_admin"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Boom! User baru langsung jadi admin. Bisa hapus data, ubah apa saja!&lt;/p&gt;

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

&lt;p&gt;Visual in-depth ini nunjukin serangan mass assignment di Laravel – hacker ubah role seenaknya!&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh 2: Ubah Role di Update Profile
&lt;/h3&gt;

&lt;p&gt;Controller update rentan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Request&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;User&lt;/span&gt; &lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hacker kirim: "role" =&amp;gt; "superadmin" → Akun biasa jadi superadmin.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh 3: Kasus Nyata (GitHub 2012)
&lt;/h3&gt;

&lt;p&gt;Dulu Ruby on Rails kena mass assignment, hacker bisa buat akun admin di GitHub. Untung cepet ditambal!&lt;/p&gt;

&lt;h3&gt;
  
  
  Cara Mencegah Mass Assignment di Laravel (Wajib!) 🛡️✨
&lt;/h3&gt;

&lt;p&gt;Laravel punya dua cara keren:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;$fillable&lt;/strong&gt; (Whitelist – Rekomendasi!)
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;   &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="nv"&gt;$fillable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'name'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'email'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'password'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;  &lt;span class="c1"&gt;// Hanya ini boleh diisi massal&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;$guarded&lt;/strong&gt; (Blacklist)
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;   &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="nv"&gt;$guarded&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'is_admin'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'role'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;  &lt;span class="c1"&gt;// Ini dilarang diisi massal&lt;/span&gt;
       &lt;span class="c1"&gt;// Atau $guarded = []; // Larang semua (paling aman, isi manual)&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Ilustrasi fillable vs guarded ini bikin langsung paham perbedaannya – pakai fillable biar aman!&lt;/p&gt;

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

&lt;p&gt;Visual lain yang jelasin proteksi di Laravel – bookmark ya!&lt;/p&gt;

&lt;h3&gt;
  
  
  Bonus: Best Practices
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Selalu pakai &lt;code&gt;$fillable&lt;/code&gt; atau &lt;code&gt;$guarded&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Validasi input terpisah (&lt;code&gt;$request-&amp;gt;validate()&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Untuk API, cek field manual kalau perlu.&lt;/li&gt;
&lt;li&gt;Jangan pernah biarin model kosong tanpa proteksi!&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Latihan Seru Buat Kamu! 💪🔥
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Buat project Laravel sederhana dengan registrasi rentan, test jadi admin pakai Postman.&lt;/li&gt;
&lt;li&gt;Tambahin &lt;code&gt;$fillable&lt;/code&gt;, test lagi (harusnya gagal!).&lt;/li&gt;
&lt;li&gt;Coba update profile dengan field sensitif.&lt;/li&gt;
&lt;li&gt;Diskusi: Kenapa mass assignment sering terlupakan pemula?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Selamat praktikum, guys! Mass Assignment ini vulnerability "diam" tapi fatal, tapi dengan &lt;code&gt;$fillable&lt;/code&gt; atau &lt;code&gt;$guarded&lt;/code&gt;, aplikasi Laravel kamu aman kayak benteng 🔥 Jadi developer yang aware security dari awal! Ingat: &lt;strong&gt;Selalu kontrol apa yang boleh diisi massal!&lt;/strong&gt; Keep coding safely and have fun! 🎉🔐🐘&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>security</category>
      <category>laravel</category>
      <category>php</category>
    </item>
  </channel>
</rss>
