<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Babas (Basri Umar) on Medium]]></title>
        <description><![CDATA[Stories by Babas (Basri Umar) on Medium]]></description>
        <link>https://medium.com/@basriumar?source=rss-56f89132aa0c------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*rKgseryOUnIjKORn.</url>
            <title>Stories by Babas (Basri Umar) on Medium</title>
            <link>https://medium.com/@basriumar?source=rss-56f89132aa0c------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 27 May 2026 22:44:27 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@basriumar/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[GridView: Menampilkan Data dalam Bentuk Grid Flutter— part 12]]></title>
            <link>https://medium.com/@basriumar/gridview-menampilkan-data-dalam-bentuk-grid-flutter-part-12-7799abd427a3?source=rss-56f89132aa0c------2</link>
            <guid isPermaLink="false">https://medium.com/p/7799abd427a3</guid>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[flutter-gridview]]></category>
            <category><![CDATA[grid-layout]]></category>
            <dc:creator><![CDATA[Babas (Basri Umar)]]></dc:creator>
            <pubDate>Mon, 02 Dec 2024 22:20:41 GMT</pubDate>
            <atom:updated>2024-12-02T22:20:41.349Z</atom:updated>
            <content:encoded><![CDATA[<p>sudah kah anda membaca part sebelumnya terkait flutter ?</p><p><a href="https://medium.com/@basriumar/menambahkan-listview-untuk-menampilkan-data-di-flutter-part-11-45bf5e83067b">Menambahkan ListView untuk Menampilkan Data di Flutter— part 11</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*kp_NLNbFY3XWEIIx" /><figcaption>Photo by <a href="https://unsplash.com/@kellysikkema?utm_source=medium&amp;utm_medium=referral">Kelly Sikkema</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><h3>GridView: Menampilkan Data dalam Bentuk Grid di Flutter</h3><h4>1. Pengertian GridView</h4><p>GridView adalah widget dalam Flutter yang digunakan untuk menampilkan data dalam format grid. Dengan GridView, kita dapat menampilkan elemen dalam baris dan kolom yang terorganisir, mirip dengan tampilan galeri atau katalog.</p><p>GridView sangat cocok digunakan untuk:</p><ul><li>Galeri gambar.</li><li>Daftar produk pada aplikasi e-commerce.</li><li>Kartu informasi dalam layout berbentuk grid.</li></ul><h4>2. Jenis-jenis GridView di Flutter</h4><p>Flutter menyediakan beberapa tipe GridView:</p><ol><li><strong>GridView.count</strong>: Grid dengan jumlah kolom tetap.</li><li><strong>GridView.extent</strong>: Grid dengan lebar elemen tetap.</li><li><strong>GridView.builder</strong>: Grid yang elemen-elemennya dibuat secara dinamis sesuai kebutuhan.</li><li><strong>GridView.custom</strong>: Grid dengan kontrol penuh atas cara elemen di-render.</li></ol><h4>3. Cara Menggunakan GridView</h4><p><strong>Contoh 1: GridView.count</strong></p><pre>import &#39;package:flutter/material.dart&#39;;<br>void main() {<br>  runApp(const MyApp());<br>}<br>class MyApp extends StatelessWidget {<br>  const MyApp({Key? key}) : super(key: key);<br>  @override<br>  Widget build(BuildContext context) {<br>    return MaterialApp(<br>      home: Scaffold(<br>        appBar: AppBar(title: const Text(&#39;GridView.count Example&#39;)),<br>        body: GridView.count(<br>          crossAxisCount: 2, // Jumlah kolom<br>          crossAxisSpacing: 10, // Jarak antar kolom<br>          mainAxisSpacing: 10, // Jarak antar baris<br>          padding: const EdgeInsets.all(10),<br>          children: List.generate(<br>            6,<br>            (index) =&gt; Container(<br>              color: Colors.blueAccent,<br>              child: Center(<br>                child: Text(<br>                  &#39;Item $index&#39;,<br>                  style: const TextStyle(color: Colors.white, fontSize: 20),<br>                ),<br>              ),<br>            ),<br>          ),<br>        ),<br>      ),<br>    );<br>  }<br>}</pre><p><strong>Penjelasan:</strong></p><ul><li><strong>crossAxisCount</strong>: Menentukan jumlah kolom.</li><li><strong>crossAxisSpacing dan </strong><strong>mainAxisSpacing</strong>: Mengatur jarak antar elemen.</li></ul><p><strong>Contoh 2: GridView.builder</strong></p><pre>import &#39;package:flutter/material.dart&#39;;<br>void main() {<br>  runApp(const MyApp());<br>}<br>class MyApp extends StatelessWidget {<br>  const MyApp({Key? key}) : super(key: key);<br>  @override<br>  Widget build(BuildContext context) {<br>    return MaterialApp(<br>      home: Scaffold(<br>        appBar: AppBar(title: const Text(&#39;GridView.builder Example&#39;)),<br>        body: GridView.builder(<br>          gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(<br>            crossAxisCount: 3, // Jumlah kolom<br>            crossAxisSpacing: 8, // Jarak antar kolom<br>            mainAxisSpacing: 8, // Jarak antar baris<br>          ),<br>          itemCount: 9, // Total elemen<br>          itemBuilder: (context, index) {<br>            return Container(<br>              color: Colors.greenAccent,<br>              child: Center(<br>                child: Text(<br>                  &#39;Item $index&#39;,<br>                  style: const TextStyle(color: Colors.black, fontSize: 18),<br>                ),<br>              ),<br>            );<br>          },<br>        ),<br>      ),<br>    );<br>  }<br>}</pre><p><strong>Penjelasan:</strong></p><ul><li><strong>GridView.builder</strong>: Membuat elemen grid hanya saat diperlukan, sehingga lebih efisien untuk data besar.</li><li><strong>SliverGridDelegateWithFixedCrossAxisCount</strong>: Delegasi yang menentukan jumlah kolom dan jarak antar elemen.</li></ul><p><strong>Contoh 3: GridView.extent</strong></p><pre>import &#39;package:flutter/material.dart&#39;;<br>void main() {<br>  runApp(const MyApp());<br>}<br>class MyApp extends StatelessWidget {<br>  const MyApp({Key? key}) : super(key: key);<br>  @override<br>  Widget build(BuildContext context) {<br>    return MaterialApp(<br>      home: Scaffold(<br>        appBar: AppBar(title: const Text(&#39;GridView.extent Example&#39;)),<br>        body: GridView.extent(<br>          maxCrossAxisExtent: 100, // Lebar maksimum setiap elemen<br>          crossAxisSpacing: 10,<br>          mainAxisSpacing: 10,<br>          padding: const EdgeInsets.all(10),<br>          children: List.generate(<br>            8,<br>            (index) =&gt; Container(<br>              color: Colors.orangeAccent,<br>              child: Center(<br>                child: Text(<br>                  &#39;Item $index&#39;,<br>                  style: const TextStyle(color: Colors.white, fontSize: 16),<br>                ),<br>              ),<br>            ),<br>          ),<br>        ),<br>      ),<br>    );<br>  }<br>}</pre><p><strong>Penjelasan:</strong></p><ul><li><strong>maxCrossAxisExtent</strong>: Lebar maksimum elemen di grid.</li></ul><h4>4. Menambahkan Gambar dalam GridView</h4><pre>import &#39;package:flutter/material.dart&#39;;<br>void main() {<br>  runApp(const MyApp());<br>}<br>class MyApp extends StatelessWidget {<br>  const MyApp({Key? key}) : super(key: key);<br>  @override<br>  Widget build(BuildContext context) {<br>    return MaterialApp(<br>      home: Scaffold(<br>        appBar: AppBar(title: const Text(&#39;GridView with Images&#39;)),<br>        body: GridView.builder(<br>          gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(<br>            crossAxisCount: 2, // Jumlah kolom<br>            crossAxisSpacing: 10,<br>            mainAxisSpacing: 10,<br>          ),<br>          itemCount: 6,<br>          itemBuilder: (context, index) {<br>            return Container(<br>              decoration: BoxDecoration(<br>                borderRadius: BorderRadius.circular(10),<br>                image: DecorationImage(<br>                  image: NetworkImage(<br>                    &#39;https://source.unsplash.com/random?sig=$index&#39;,<br>                  ),<br>                  fit: BoxFit.cover,<br>                ),<br>              ),<br>            );<br>          },<br>        ),<br>      ),<br>    );<br>  }<br>}</pre><p><strong>Penjelasan:</strong></p><ul><li><strong>DecorationImage</strong>: Digunakan untuk menampilkan gambar dengan properti tertentu seperti fit untuk menyesuaikan ukuran.</li></ul><h4>5. Kesimpulan</h4><ul><li>GridView adalah widget yang fleksibel untuk menampilkan data dalam bentuk grid.</li><li>Flutter menyediakan berbagai tipe GridView untuk kebutuhan berbeda seperti <em>fixed column count</em> atau elemen dinamis.</li><li>Anda dapat menyesuaikan GridView untuk menampilkan teks, gambar, atau elemen lain dengan gaya yang diinginkan.</li></ul><p><strong>Praktik langsung sangat dianjurkan untuk memperdalam pemahaman Anda!</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7799abd427a3" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[part 15 — Neural Networks: Membangun Model dengan Keras dan TensorFlow]]></title>
            <link>https://medium.com/@basriumar/part-15-neural-networks-membangun-model-dengan-keras-dan-tensorflow-5662e45fdeca?source=rss-56f89132aa0c------2</link>
            <guid isPermaLink="false">https://medium.com/p/5662e45fdeca</guid>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[neural-networks]]></category>
            <dc:creator><![CDATA[Babas (Basri Umar)]]></dc:creator>
            <pubDate>Mon, 02 Dec 2024 22:13:46 GMT</pubDate>
            <atom:updated>2024-12-02T22:13:46.251Z</atom:updated>
            <content:encoded><![CDATA[<h3>part 15 — Neural Networks: Membangun Model dengan Keras dan TensorFlow</h3><p>sudahkah anda baca part sebelumnya?</p><p><a href="https://medium.com/@basriumar/part-14-pengantar-deep-learning-apa-itu-dan-bagaimana-cara-kerjanya-2e8228e7fd8c">Part 14 — Pengantar Deep Learning: Apa Itu dan Bagaimana Cara Kerjanya?</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*npC-WbDLi4XbnV3Q" /><figcaption>Photo by <a href="https://unsplash.com/@dulhiier?utm_source=medium&amp;utm_medium=referral">Nastya Dulhiier</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><h3>Neural Networks: Membangun Model dengan Keras dan TensorFlow</h3><h4>1. Apa Itu Neural Networks?</h4><p>Neural Networks atau Jaringan Saraf adalah model komputasi yang terinspirasi oleh cara kerja otak manusia dalam memproses informasi. Neural Networks terdiri dari lapisan-lapisan node (neuron) yang saling terhubung untuk menyelesaikan masalah seperti klasifikasi, regresi, atau pengenalan pola.</p><p><strong>Komponen Utama Neural Networks</strong>:</p><ol><li><strong>Neuron</strong>: Elemen dasar yang menerima input, melakukan perhitungan, dan menghasilkan output.</li><li><strong>Lapisan (Layers)</strong>:</li></ol><ul><li><strong>Input Layer</strong>: Tempat data awal masuk ke model.</li><li><strong>Hidden Layer(s)</strong>: Lapisan tengah yang menangani komputasi kompleks.</li><li><strong>Output Layer</strong>: Menghasilkan hasil akhir model.</li></ul><p><strong>4. Bobot dan Bias</strong>: Nilai yang memodifikasi input sebelum diteruskan.</p><p><strong>5. Fungsi Aktivasi</strong>: Fungsi non-linear seperti <em>ReLU</em> atau <em>Sigmoid</em> untuk memperkenalkan non-linearitas.</p><h4>2. TensorFlow dan Keras: Framework untuk Neural Networks</h4><p><strong>TensorFlow</strong>:</p><p>TensorFlow adalah pustaka open-source dari Google yang dirancang untuk membangun dan melatih model machine learning, termasuk deep learning.</p><p><strong>Keras</strong>:</p><p>Keras adalah API tingkat tinggi di atas TensorFlow yang mempermudah pembuatan dan pelatihan Neural Networks. Keras dikenal karena sintaksisnya yang sederhana dan ramah bagi pemula.</p><h4>3. Membangun Model Neural Networks dengan Keras dan TensorFlow</h4><p><strong>Langkah-langkah Utama</strong>:</p><ol><li><strong>Persiapan Data</strong></li><li><strong>Membangun Model</strong></li><li><strong>Kompilasi Model</strong></li><li><strong>Pelatihan Model</strong></li><li><strong>Evaluasi dan Prediksi</strong></li></ol><h4>4. Implementasi Neural Networks dengan Keras</h4><p><strong>Contoh Kasus</strong>: Klasifikasi Angka (MNIST Dataset)</p><p><strong>Langkah 1: Instalasi TensorFlow</strong></p><p>Pastikan TensorFlow sudah terinstal. Jika belum, gunakan perintah berikut:</p><pre>pip install tensorflow</pre><p><strong>Langkah 2: Import Library</strong></p><pre>import tensorflow as tf<br>from tensorflow.keras import Sequential<br>from tensorflow.keras.layers import Dense, Flatten<br>from tensorflow.keras.datasets import mnist</pre><p><strong>Langkah 3: Persiapan Data</strong></p><p>Dataset MNIST berisi gambar digit angka (0–9). Data ini sudah tersedia di Keras.</p><pre># Memuat dataset MNIST<br>(x_train, y_train), (x_test, y_test) = mnist.load_data()<br># Normalisasi data: Mengubah nilai piksel menjadi skala 0-1<br>x_train = x_train / 255.0<br>x_test = x_test / 255.0</pre><p><strong>Langkah 4: Membangun Model</strong></p><pre># Membuat model Neural Networks<br>model = Sequential([<br>    Flatten(input_shape=(28, 28)),  # Mengubah matriks 28x28 menjadi vektor 1D<br>    Dense(128, activation=&#39;relu&#39;), # Hidden layer dengan 128 neuron<br>    Dense(10, activation=&#39;softmax&#39;) # Output layer untuk klasifikasi 10 kelas<br>])</pre><p><strong>Langkah 5: Kompilasi Model</strong></p><pre># Kompilasi model dengan optimizer, loss function, dan metrik evaluasi<br>model.compile(optimizer=&#39;adam&#39;,<br>              loss=&#39;sparse_categorical_crossentropy&#39;,<br>              metrics=[&#39;accuracy&#39;])</pre><p><strong>Langkah 6: Melatih Model</strong></p><pre># Melatih model menggunakan data training<br>model.fit(x_train, y_train, epochs=5, batch_size=32)</pre><p><strong>Langkah 7: Evaluasi Model</strong></p><pre># Mengevaluasi performa model dengan data test<br>test_loss, test_accuracy = model.evaluate(x_test, y_test)<br>print(f&quot;Loss: {test_loss}, Accuracy: {test_accuracy}&quot;)</pre><p><strong>Langkah 8: Prediksi</strong></p><pre># Prediksi pada satu gambar<br>import numpy as np<br>predictions = model.predict(x_test)<br>predicted_class = np.argmax(predictions[0])  # Mendapatkan label prediksi<br>print(f&quot;Predicted class: {predicted_class}&quot;)</pre><h4>5. Penjelasan Kode</h4><ol><li><strong>Flatten</strong>: Lapisan untuk meratakan matriks gambar menjadi vektor 1D.</li><li><strong>Dense</strong>: Lapisan fully connected, setiap neuron dihubungkan dengan neuron dari lapisan sebelumnya.</li><li><strong>Activation Function</strong>:</li></ol><ul><li><strong>ReLU</strong>: Untuk hidden layer, menangani non-linearitas.</li><li><strong>Softmax</strong>: Untuk output layer, mengubah output menjadi probabilitas.</li></ul><h4>6. Kelebihan Keras dan TensorFlow</h4><ul><li><strong>Sederhana</strong>: Sintaksis intuitif mempermudah pemula.</li><li><strong>Fleksibel</strong>: Dapat digunakan untuk model sederhana hingga kompleks.</li><li><strong>Kompatibilitas</strong>: Mendukung CPU dan GPU, meningkatkan kecepatan pelatihan.</li></ul><h4>Kesimpulan</h4><p>Neural Networks adalah metode dalam machine learning yang mampu menyelesaikan berbagai permasalahan, mulai dari klasifikasi gambar hingga prediksi kompleks. Dengan menggunakan Keras dan TensorFlow, pengembangan model Neural Networks menjadi lebih mudah dan efisien. Praktik langsung sangat dianjurkan untuk memperkuat pemahaman!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5662e45fdeca" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Part 14 — Pengantar Deep Learning: Apa Itu dan Bagaimana Cara Kerjanya?]]></title>
            <link>https://medium.com/@basriumar/part-14-pengantar-deep-learning-apa-itu-dan-bagaimana-cara-kerjanya-2e8228e7fd8c?source=rss-56f89132aa0c------2</link>
            <guid isPermaLink="false">https://medium.com/p/2e8228e7fd8c</guid>
            <category><![CDATA[deep-learning]]></category>
            <category><![CDATA[data-science]]></category>
            <dc:creator><![CDATA[Babas (Basri Umar)]]></dc:creator>
            <pubDate>Mon, 02 Dec 2024 22:07:45 GMT</pubDate>
            <atom:updated>2024-12-02T22:07:45.117Z</atom:updated>
            <content:encoded><![CDATA[<h3>Part 14 — Pengantar Deep Learning: Apa Itu dan Bagaimana Cara Kerjanya?</h3><p>sudahkah anda baca part sebelumnya ?</p><p><a href="https://medium.com/@basriumar/part-13-feature-engineering-teknik-teknik-mengolah-data-untuk-peningkatan-model-720ea9754c51">Part 13 — Feature Engineering: Teknik-Teknik Mengolah Data untuk Peningkatan Model</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*ZYpHPivdoBuhGdEK" /><figcaption>Photo by <a href="https://unsplash.com/@googledeepmind?utm_source=medium&amp;utm_medium=referral">Google DeepMind</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><h3>Pengantar Deep Learning: Apa Itu dan Bagaimana Cara Kerjanya?</h3><h4>1. Apa Itu Deep Learning?</h4><p>Deep Learning adalah cabang dari <strong>machine learning</strong> yang menggunakan arsitektur jaringan saraf tiruan (<em>artificial neural networks</em>) untuk mempelajari dan memahami data secara mendalam. Model ini dirancang untuk meniru cara kerja otak manusia dalam mengenali pola dan membuat keputusan.</p><p>Deep Learning menjadi populer karena kemampuannya menangani data dalam jumlah besar dan kompleks, seperti gambar, teks, suara, atau video.</p><p><strong>Perbedaan Utama Deep Learning dengan Machine Learning Tradisional</strong>:</p><ul><li><strong>Machine Learning</strong>: Memerlukan fitur-fitur tertentu yang didefinisikan oleh manusia (<em>feature engineering</em>).</li><li><strong>Deep Learning</strong>: Dapat secara otomatis mengekstrak fitur dari data mentah melalui lapisan-lapisan jaringan saraf.</li></ul><h4>2. Bagaimana Cara Kerja Deep Learning?</h4><p>Deep Learning bekerja dengan membangun model yang terdiri dari beberapa lapisan jaringan saraf (disebut <strong>deep neural networks</strong>). Berikut adalah proses intinya:</p><p><strong>Struktur Jaringan Saraf</strong></p><p>Jaringan saraf terdiri dari tiga jenis lapisan utama:</p><p><strong>Input Layer</strong>: Menerima data mentah.</p><ul><li>Contoh: Gambar ukuran 28x28 piksel memiliki 784 nilai sebagai input.</li></ul><p><strong>Hidden Layer</strong>: Lapisan tersembunyi yang memproses data melalui sejumlah neuron.</p><ul><li>Proses ini melibatkan bobot (<em>weights</em>), bias, dan fungsi aktivasi untuk mengubah input menjadi output.</li></ul><p><strong>Output Layer</strong>: Menghasilkan prediksi atau hasil akhir.</p><ul><li>Contoh: Untuk klasifikasi gambar, output bisa berupa label seperti “kucing” atau “anjing”.</li></ul><p><strong>b. Proses Perhitungan</strong></p><ul><li>Setiap neuron menerima input, mengalikan dengan bobot, menambahkan bias, dan menerapkan fungsi aktivasi untuk menghasilkan output.</li><li>Output dari satu lapisan digunakan sebagai input untuk lapisan berikutnya.</li></ul><p><strong>c. Proses Pelatihan (Training)</strong></p><p><strong>Forward Propagation</strong>:</p><ul><li>Data berjalan dari lapisan input ke output, menghasilkan prediksi.</li></ul><p><strong>Loss Function</strong>:</p><ul><li>Mengukur seberapa jauh prediksi dari hasil sebenarnya.</li><li>Contoh: <em>Mean Squared Error</em> untuk regresi, <em>Cross-Entropy Loss</em> untuk klasifikasi.</li></ul><p><strong>Backward Propagation</strong>:</p><ul><li>Menghitung gradien untuk memperbarui bobot menggunakan algoritma seperti <strong>Stochastic Gradient Descent (SGD)</strong>.</li></ul><p><strong>Iterasi</strong>:</p><ul><li>Proses ini berulang hingga model mencapai hasil yang optimal.</li></ul><p><strong>Aktivasi dan Nonlinearitas</strong></p><p>Fungsi aktivasi seperti <em>ReLU</em> (Rectified Linear Unit), <em>Sigmoid</em>, atau <em>Softmax</em> membantu jaringan belajar pola kompleks dan memperkenalkan non-linearitas.</p><h4>3. Aplikasi Deep Learning</h4><p>Deep Learning telah menjadi tulang punggung di berbagai bidang teknologi:</p><p><strong>Computer Vision</strong>:</p><ul><li>Deteksi wajah, pengenalan objek, dan kendaraan otonom.</li></ul><p><strong>Natural Language Processing (NLP)</strong>:</p><ul><li>Penerjemahan bahasa, analisis sentimen, chatbot, dan pengenalan suara.</li></ul><p><strong>Rekomendasi</strong>:</p><ul><li>Sistem rekomendasi seperti Netflix, YouTube, atau e-commerce.</li></ul><p><strong>Medis</strong>:</p><ul><li>Diagnosis penyakit melalui analisis gambar medis (misalnya, deteksi kanker).</li></ul><p><strong>Keuangan</strong>:</p><ul><li>Prediksi pasar saham dan deteksi penipuan.</li></ul><h4>4. Contoh Implementasi Deep Learning</h4><p><strong>Kasus: Klasifikasi Gambar</strong> Tujuan: Mengidentifikasi apakah sebuah gambar berisi anjing atau kucing.</p><p><strong>Langkah Implementasi di Python</strong>:</p><pre>import tensorflow as tf<br>from tensorflow.keras import layers, models<br># Membuat model<br>model = models.Sequential([<br>    layers.Conv2D(32, (3, 3), activation=&#39;relu&#39;, input_shape=(64, 64, 3)),<br>    layers.MaxPooling2D((2, 2)),<br>    layers.Conv2D(64, (3, 3), activation=&#39;relu&#39;),<br>    layers.MaxPooling2D((2, 2)),<br>    layers.Flatten(),<br>    layers.Dense(64, activation=&#39;relu&#39;),<br>    layers.Dense(1, activation=&#39;sigmoid&#39;)  # Output untuk klasifikasi biner<br>])<br># Kompilasi model<br>model.compile(optimizer=&#39;adam&#39;,<br>              loss=&#39;binary_crossentropy&#39;,<br>              metrics=[&#39;accuracy&#39;])<br># Data pelatihan (contoh sederhana, dataset asli diperlukan)<br>train_data, train_labels = ...  # Tambahkan dataset Anda di sini<br># Melatih model<br>model.fit(train_data, train_labels, epochs=10, batch_size=32)<br># Evaluasi<br>model.evaluate(test_data, test_labels)</pre><h4>5. Keuntungan dan Kelemahan Deep Learning</h4><p><strong>Keuntungan:</strong></p><ul><li>Mampu menangani data besar dengan pola kompleks.</li><li>Tidak memerlukan banyak feature engineering manual.</li><li>Sangat fleksibel untuk berbagai jenis data (gambar, teks, audio).</li></ul><p><strong>Kelemahan:</strong></p><ul><li>Membutuhkan data besar dan sumber daya komputasi tinggi.</li><li>Memerlukan waktu pelatihan yang lama.</li><li>Sulit untuk diinterpretasikan (<em>black box</em>).</li></ul><h4>6. Kesimpulan</h4><p>Deep Learning adalah teknologi revolusioner yang mampu mengatasi masalah kompleks di berbagai bidang. Dengan memahami cara kerjanya, kita dapat membangun aplikasi pintar yang dapat membantu menyelesaikan berbagai tantangan di dunia nyata.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2e8228e7fd8c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Part 13 — Feature Engineering: Teknik-Teknik Mengolah Data untuk Peningkatan Model]]></title>
            <link>https://medium.com/@basriumar/part-13-feature-engineering-teknik-teknik-mengolah-data-untuk-peningkatan-model-720ea9754c51?source=rss-56f89132aa0c------2</link>
            <guid isPermaLink="false">https://medium.com/p/720ea9754c51</guid>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[data-science]]></category>
            <dc:creator><![CDATA[Babas (Basri Umar)]]></dc:creator>
            <pubDate>Mon, 02 Dec 2024 22:00:58 GMT</pubDate>
            <atom:updated>2024-12-02T22:00:58.905Z</atom:updated>
            <content:encoded><![CDATA[<h3>Part 13 — Feature Engineering: Teknik-Teknik Mengolah Data untuk Peningkatan Model</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*4e-DISCNKyyKBEPY" /><figcaption>Photo by <a href="https://unsplash.com/@thisisengineering?utm_source=medium&amp;utm_medium=referral">ThisisEngineering</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>sudahkah anda baca part sebelumnya ?</p><p><a href="https://medium.com/@basriumar/part-13-evaluasi-model-metode-dan-metrik-penting-dalam-machine-learning-a367db87696e">Part 13 — Evaluasi Model: Metode dan Metrik Penting dalam Machine Learning</a></p><h3>Part 13 — Feature Engineering: Teknik-Teknik Mengolah Data untuk Peningkatan Model</h3><h3>Apa itu Feature Engineering?</h3><p>Feature engineering adalah proses mengubah data mentah menjadi representasi yang lebih baik untuk model machine learning. Ini bertujuan untuk meningkatkan performa model dengan memanfaatkan informasi yang relevan dari data.</p><p>Pada dasarnya, feature engineering melibatkan:</p><ul><li>Pemilihan fitur yang relevan.</li><li>Transformasi data mentah menjadi format yang sesuai untuk analisis.</li><li>Menciptakan fitur baru yang dapat meningkatkan pemahaman model terhadap pola data.</li></ul><h3>Mengapa Feature Engineering Penting?</h3><p>Model machine learning yang kuat sangat bergantung pada kualitas data yang digunakan. Data yang tidak diproses dengan baik dapat menyebabkan model gagal menangkap pola penting, sehingga performa model menurun. Dengan feature engineering, Anda dapat:</p><ol><li>Mengurangi noise pada data.</li><li>Menonjolkan informasi penting.</li><li>Mengoptimalkan performa model tanpa harus mengganti algoritma.</li></ol><h3>Teknik-Teknik Feature Engineering</h3><h4>1. Handling Missing Values (Mengatasi Nilai Hilang)</h4><p>Nilai yang hilang dapat mengurangi kualitas data. Teknik yang digunakan:</p><ul><li><strong>Imputasi dengan Mean/Median/Mode:</strong> Mengisi nilai hilang dengan rata-rata, median, atau modus kolom.</li><li><strong>Imputasi dengan Model:</strong> Menggunakan model prediksi untuk memperkirakan nilai yang hilang.</li><li><strong>Penghapusan Baris/Kolom:</strong> Jika nilai hilang sangat banyak, menghapus baris atau kolom bisa menjadi pilihan.</li></ul><h4>2. Feature Scaling (Skalasi Fitur)</h4><p>Fitur dengan skala yang berbeda dapat memengaruhi performa algoritma tertentu. Teknik umum:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*N8O6hscWu3No66JIEfNnWA.png" /></figure><h4>3. Encoding Categorical Variables (Mengubah Variabel Kategori)</h4><p>Beberapa algoritma hanya bekerja dengan data numerik. Teknik encoding yang umum:</p><ul><li><strong>One-Hot Encoding:</strong> Membuat kolom biner untuk setiap kategori.</li><li><strong>Label Encoding:</strong> Memberi angka unik untuk setiap kategori.</li><li><strong>Target Encoding:</strong> Mengganti kategori dengan nilai rata-rata target.</li></ul><h4>4. Feature Transformation (Transformasi Fitur)</h4><p>Transformasi data untuk mengatasi outlier, distribusi tidak normal, atau hubungan non-linear:</p><ul><li><strong>Log Transformation:</strong> Berguna untuk data yang memiliki distribusi eksponensial.</li><li><strong>Square Root Transformation:</strong> Mengurangi pengaruh nilai ekstrim.</li><li><strong>Box-Cox Transformation:</strong> Untuk membuat data lebih normal.</li></ul><h4>5. Feature Selection (Pemilihan Fitur)</h4><p>Mengurangi jumlah fitur yang tidak relevan atau redundan. Teknik yang digunakan:</p><ul><li><strong>Filter Methods:</strong> Memilih fitur berdasarkan statistik sederhana (misalnya korelasi, ANOVA).</li><li><strong>Wrapper Methods:</strong> Menggunakan algoritma (misalnya RFE — Recursive Feature Elimination) untuk memilih fitur terbaik.</li><li><strong>Embedded Methods:</strong> Algoritma machine learning yang secara otomatis memilih fitur (misalnya Lasso Regression).</li></ul><h4>6. Feature Extraction (Ekstraksi Fitur)</h4><p>Mengubah data mentah menjadi representasi yang lebih informatif:</p><ul><li><strong>PCA (Principal Component Analysis):</strong> Mengurangi dimensi data sambil mempertahankan variansi utama.</li><li><strong>T-SNE:</strong> Untuk visualisasi dimensi tinggi dalam ruang 2D atau 3D.</li></ul><h4>7. Feature Engineering untuk Teks</h4><p>Jika bekerja dengan data teks:</p><ul><li><strong>Tokenization:</strong> Memecah teks menjadi kata atau frasa kecil.</li><li><strong>TF-IDF (Term Frequency-Inverse Document Frequency):</strong> Menilai kepentingan kata berdasarkan frekuensinya dalam dokumen.</li><li><strong>Word Embeddings:</strong> Representasi numerik dari kata menggunakan algoritma seperti Word2Vec atau GloVe.</li></ul><h4>8. Feature Engineering untuk Waktu</h4><p>Jika data memiliki dimensi waktu:</p><ul><li><strong>Ekstraksi Waktu:</strong> Mengambil informasi seperti hari dalam seminggu, bulan, atau musim.</li><li><strong>Lag Features:</strong> Menambahkan kolom yang merepresentasikan data sebelumnya.</li><li><strong>Rolling Window Features:</strong> Menggunakan rata-rata atau sum dari jendela waktu tertentu.</li></ul><h3>Tips dalam Feature Engineering</h3><ol><li><strong>Memahami Data:</strong> Pahami konteks domain dari data untuk menciptakan fitur yang relevan.</li><li><strong>Eksperimen:</strong> Tidak ada formula pasti. Lakukan eksperimen dengan berbagai teknik.</li><li><strong>Gunakan Visualisasi:</strong> Membantu memahami hubungan antara fitur dan target.</li><li><strong>Validasi Model:</strong> Selalu uji performa model setelah menambahkan atau mengubah fitur.</li><li><strong>Jangan Overengineer:</strong> Terlalu banyak fitur bisa menyebabkan overfitting.</li></ol><h3>Contoh Kasus: Prediksi Harga Rumah</h3><p>Dataset: Informasi rumah seperti luas tanah, jumlah kamar, lokasi, dll.</p><ul><li><strong>Handling Missing Values:</strong> Isi nilai yang hilang di kolom “Jumlah Kamar” dengan median.</li><li><strong>Encoding:</strong> Lakukan one-hot encoding pada kolom “Lokasi”.</li><li><strong>Feature Transformation:</strong> Transformasikan “Luas Tanah” dengan log untuk mengatasi outlier.</li><li><strong>Feature Creation:</strong> Tambahkan fitur baru “Harga per Meter Persegi” dengan membagi harga dengan luas tanah.</li></ul><p>Tentu! Berikut adalah contoh penerapan <strong>Feature Engineering</strong> dalam kasus nyata.</p><h3>Contoh Kasus: Prediksi Harga Rumah</h3><p><strong>Tujuan:</strong> Memperkirakan harga rumah berdasarkan data historis.</p><p><strong>Dataset:</strong></p><ul><li>Luas_Tanah (numerik)</li><li>Jumlah_Kamar (numerik)</li><li>Tahun_Dibangun (numerik)</li><li>Lokasi (kategori)</li><li>Harga (target/label)</li></ul><h3>Langkah-Langkah Feature Engineering</h3><h4>1. Memahami Data</h4><p>Sebelum melakukan feature engineering, kita eksplorasi data terlebih dahulu. Misalnya, menggunakan Python:</p><pre>import pandas as pd<br># Membaca dataset<br>data = pd.read_csv(&#39;rumah.csv&#39;)<br>print(data.info())</pre><p>Hasil eksplorasi:</p><ul><li>Kolom Jumlah_Kamar memiliki nilai kosong (missing values).</li><li>Kolom Lokasi berisi nilai kategori seperti &quot;Kota&quot;, &quot;Pinggiran&quot;, &quot;Desa&quot;.</li><li>Kolom Tahun_Dibangun mencakup tahun dari 1980 hingga 2022.</li></ul><h4>2. Mengatasi Missing Values</h4><p>Mengisi nilai kosong di kolom Jumlah_Kamar dengan median:</p><pre>data[&#39;Jumlah_Kamar&#39;].fillna(data[&#39;Jumlah_Kamar&#39;].median(), inplace=True)</pre><h4>3. Transformasi Data</h4><p>Transformasi log untuk Luas_Tanah agar mengurangi dampak outlier:</p><pre>import numpy as np<br>data[&#39;Log_Luas_Tanah&#39;] = np.log1p(data[&#39;Luas_Tanah&#39;])</pre><h4>4. Encoding Variabel Kategori</h4><p>Melakukan one-hot encoding pada kolom Lokasi:</p><pre>data = pd.get_dummies(data, columns=[&#39;Lokasi&#39;], drop_first=True)</pre><p>Hasilnya, kolom baru seperti:</p><ul><li>Lokasi_Pinggiran</li><li>Lokasi_Desa</li></ul><h4>5. Feature Creation</h4><p>Menciptakan fitur baru:</p><ol><li><strong>Umur Rumah</strong>: Menghitung usia rumah dari tahun dibangun.</li></ol><pre>data[&#39;Umur_Rumah&#39;] = 2024 - data[&#39;Tahun_Dibangun&#39;]</pre><p><strong>2. Harga per Meter Persegi</strong>: Membagi harga dengan luas tanah.</p><pre>data[&#39;Harga_per_Meter&#39;] = data[&#39;Harga&#39;] / data[&#39;Luas_Tanah&#39;]</pre><h4>6. Skalasi Fitur</h4><p>Melakukan standardisasi pada Jumlah_Kamar dan Log_Luas_Tanah untuk membuat distribusi lebih seragam:</p><pre>from sklearn.preprocessing import StandardScaler<br><br>scaler = StandardScaler()<br>data[[&#39;Jumlah_Kamar&#39;, &#39;Log_Luas_Tanah&#39;]] = scaler.fit_transform(data[[&#39;Jumlah_Kamar&#39;, &#39;Log_Luas_Tanah&#39;]])</pre><h3>Hasil Akhir Dataset</h3><p>Setelah feature engineering, dataset akan terlihat seperti ini:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IpfjizmDIW9CQbqoa8zTlw.png" /></figure><h3>Modeling</h3><p>Setelah proses feature engineering, data dapat digunakan untuk melatih model. Misalnya, menggunakan <em>Linear Regression</em>:</p><pre>from sklearn.model_selection import train_test_split<br>from sklearn.linear_model import LinearRegression<br><br># Memisahkan fitur dan target<br>X = data.drop(columns=[&#39;Harga&#39;])<br>y = data[&#39;Harga&#39;]<br><br># Membagi data menjadi training dan testing<br>X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)<br><br># Membuat model<br>model = LinearRegression()<br>model.fit(X_train, y_train)<br><br># Evaluasi model<br>print(&quot;Training Score:&quot;, model.score(X_train, y_train))<br>print(&quot;Testing Score:&quot;, model.score(X_test, y_test))</pre><p>Feature engineering membantu model memahami data dengan lebih baik. Dalam contoh ini:</p><ol><li>Transformasi dan penciptaan fitur membuat data lebih informatif.</li><li>Encoding dan skalasi memastikan algoritma bekerja optimal.</li><li>Peningkatan performa model terlihat dari hasil evaluasi.</li></ol><p>Feature engineering adalah proses kreatif, jadi cobalah berbagai teknik hingga menemukan kombinasi terbaik untuk dataset Anda!</p><h3>Kesimpulan</h3><p>Feature engineering adalah bagian penting dalam alur kerja machine learning. Teknik yang tepat dapat meningkatkan performa model secara signifikan tanpa mengganti algoritma. Dengan pemahaman yang baik dan eksperimen, Anda dapat membuat model yang lebih akurat dan andal.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=720ea9754c51" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Menambahkan ListView untuk Menampilkan Data di Flutter— part 11]]></title>
            <link>https://medium.com/@basriumar/menambahkan-listview-untuk-menampilkan-data-di-flutter-part-11-45bf5e83067b?source=rss-56f89132aa0c------2</link>
            <guid isPermaLink="false">https://medium.com/p/45bf5e83067b</guid>
            <category><![CDATA[masteringflutter]]></category>
            <category><![CDATA[flutter]]></category>
            <dc:creator><![CDATA[Babas (Basri Umar)]]></dc:creator>
            <pubDate>Mon, 02 Dec 2024 02:04:42 GMT</pubDate>
            <atom:updated>2024-12-02T02:19:33.067Z</atom:updated>
            <content:encoded><![CDATA[<p>sudahkah anda membaca part sebelumnya ?</p><p>ListView adalah widget yang sangat berguna di Flutter untuk menampilkan daftar data yang panjang. Dengan ListView, Anda dapat menampilkan data secara vertikal dan memungkinkan scrolling. ListView juga bisa disesuaikan untuk membuat desain yang menarik dan interaktif.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*eCYz_h6930A5fE5M" /><figcaption>Photo by <a href="https://unsplash.com/@christianw?utm_source=medium&amp;utm_medium=referral">Christian Wiediger</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><h3>Konsep Dasar ListView</h3><p><strong>ListView</strong> adalah widget yang digunakan untuk menampilkan daftar widget dalam arah scrollable (gulir), baik secara vertikal maupun horizontal. Ada beberapa jenis ListView yang sering digunakan:</p><ol><li><strong>ListView Default</strong><br>Menampilkan semua widget dalam daftar.</li><li><strong>ListView.builder</strong><br>Digunakan untuk daftar data yang banyak dengan teknik lazy loading.</li><li><strong>ListView.separated</strong><br>Menambahkan pemisah di antara elemen daftar.</li></ol><h3>Menambahkan ListView Default</h3><p><strong>Langkah-langkah:</strong></p><ol><li>Tambahkan widget <strong>ListView</strong> di dalam body scaffold.</li><li>Gunakan properti <strong>children</strong> untuk menambahkan elemen daftar.</li></ol><p><strong>Kode Contoh:</strong></p><pre>import &#39;package:flutter/material.dart&#39;;<br><br>void main() {<br>  runApp(MyApp());<br>}<br><br>class MyApp extends StatelessWidget {<br>  @override<br>  Widget build(BuildContext context) {<br>    return MaterialApp(<br>      home: Scaffold(<br>        appBar: AppBar(title: Text(&quot;ListView Default&quot;)),<br>        body: ListView(<br>          children: [<br>            ListTile(<br>              leading: Icon(Icons.star),<br>              title: Text(&quot;Item 1&quot;),<br>            ),<br>            ListTile(<br>              leading: Icon(Icons.star),<br>              title: Text(&quot;Item 2&quot;),<br>            ),<br>            ListTile(<br>              leading: Icon(Icons.star),<br>              title: Text(&quot;Item 3&quot;),<br>            ),<br>          ],<br>        ),<br>      ),<br>    );<br>  }<br>}</pre><p>tampilan jadinya berikut ini:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/840/1*Rp2AHRAhR3vZ7-waNnL6UQ.png" /></figure><h3>Menambahkan ListView.builder</h3><p>Untuk menampilkan daftar data yang banyak, gunakan <strong>ListView.builder</strong>.</p><p><strong>Keunggulan:</strong></p><ul><li>Menghemat memori dengan hanya memuat elemen yang terlihat di layar.</li><li>Cocok untuk data dinamis seperti data API atau database.</li></ul><p><strong>Kode Contoh:</strong></p><pre>import &#39;package:flutter/material.dart&#39;;<br><br>void main() {<br>  runApp(MyApp());<br>}<br><br>class MyApp extends StatelessWidget {<br>  final List&lt;String&gt; items = List&lt;String&gt;.generate(20, (i) =&gt; &quot;Item ${i + 1}&quot;);<br><br>  @override<br>  Widget build(BuildContext context) {<br>    return MaterialApp(<br>      home: Scaffold(<br>        appBar: AppBar(title: Text(&quot;ListView.builder Example&quot;)),<br>        body: ListView.builder(<br>          itemCount: items.length,<br>          itemBuilder: (context, index) {<br>            return ListTile(<br>              leading: Icon(Icons.star),<br>              title: Text(items[index]),<br>            );<br>          },<br>        ),<br>      ),<br>    );<br>  }<br>}</pre><h3>Menambahkan Pemisah dengan ListView.separated</h3><p><strong>ListView.separated</strong> memungkinkan Anda menambahkan widget pemisah di antara elemen-elemen daftar.</p><p><strong>Kode Contoh:</strong></p><pre>import &#39;package:flutter/material.dart&#39;;<br><br>void main() {<br>  runApp(MyApp());<br>}<br><br>class MyApp extends StatelessWidget {<br>  final List&lt;String&gt; items = List&lt;String&gt;.generate(10, (i) =&gt; &quot;Item ${i + 1}&quot;);<br><br>  @override<br>  Widget build(BuildContext context) {<br>    return MaterialApp(<br>      home: Scaffold(<br>        appBar: AppBar(title: Text(&quot;ListView.separated Example&quot;)),<br>        body: ListView.separated(<br>          itemCount: items.length,<br>          itemBuilder: (context, index) {<br>            return ListTile(<br>              leading: Icon(Icons.star),<br>              title: Text(items[index]),<br>            );<br>          },<br>          separatorBuilder: (context, index) {<br>            return Divider();<br>          },<br>        ),<br>      ),<br>    );<br>  }<br>}</pre><h3>Menambahkan Interaktivitas</h3><p>Anda bisa menambahkan aksi klik pada elemen dengan menggunakan properti <strong>onTap</strong>.</p><p><strong>Kode Contoh:</strong></p><pre>return ListTile(<br>  leading: Icon(Icons.star),<br>  title: Text(items[index]),<br>  onTap: () {<br>    print(&quot;You tapped on ${items[index]}&quot;);<br>  },<br>);</pre><h3>Menampilkan Data Dinamis</h3><p>Jika data berasal dari API atau database, gunakan <strong>FutureBuilder</strong> atau <strong>StreamBuilder</strong> untuk menampilkan data secara asinkron.</p><p><strong>Kode Contoh dengan FutureBuilder:</strong></p><pre>Future&lt;List&lt;String&gt;&gt; fetchData() async {<br>  await Future.delayed(Duration(seconds: 2));<br>  return List&lt;String&gt;.generate(10, (i) =&gt; &quot;Dynamic Item ${i + 1}&quot;);<br>}<br><br>class MyApp extends StatelessWidget {<br>  @override<br>  Widget build(BuildContext context) {<br>    return MaterialApp(<br>      home: Scaffold(<br>        appBar: AppBar(title: Text(&quot;Dynamic ListView&quot;)),<br>        body: FutureBuilder&lt;List&lt;String&gt;&gt;(<br>          future: fetchData(),<br>          builder: (context, snapshot) {<br>            if (snapshot.connectionState == ConnectionState.waiting) {<br>              return Center(child: CircularProgressIndicator());<br>            }<br>            if (snapshot.hasError) {<br>              return Center(child: Text(&quot;Error: ${snapshot.error}&quot;));<br>            }<br>            final items = snapshot.data ?? [];<br>            return ListView.builder(<br>              itemCount: items.length,<br>              itemBuilder: (context, index) {<br>                return ListTile(<br>                  leading: Icon(Icons.star),<br>                  title: Text(items[index]),<br>                );<br>              },<br>            );<br>          },<br>        ),<br>      ),<br>    );<br>  }<br>}</pre><h3>Kesimpulan</h3><ul><li><strong>ListView</strong> adalah widget Flutter yang fleksibel untuk menampilkan data.</li><li>Gunakan <strong>ListView.builder</strong> untuk data yang banyak atau dinamis.</li><li><strong>ListView.separated</strong> berguna untuk menambahkan pemisah antar elemen.</li><li>Data dapat dimuat secara dinamis menggunakan <strong>FutureBuilder</strong> atau <strong>StreamBuilder</strong>.</li></ul><p>Dengan memanfaatkan ListView, Anda dapat membuat aplikasi yang lebih interaktif dan ramah pengguna.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=45bf5e83067b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Scaffold dan AppBar: Membuat Struktur Aplikasi Flutter — part 10]]></title>
            <link>https://medium.com/@basriumar/scaffold-dan-appbar-membuat-struktur-aplikasi-flutter-part-10-43cb93d145a2?source=rss-56f89132aa0c------2</link>
            <guid isPermaLink="false">https://medium.com/p/43cb93d145a2</guid>
            <category><![CDATA[masteringflutter]]></category>
            <category><![CDATA[flutter]]></category>
            <dc:creator><![CDATA[Babas (Basri Umar)]]></dc:creator>
            <pubDate>Sun, 01 Dec 2024 12:58:24 GMT</pubDate>
            <atom:updated>2024-12-01T12:58:24.914Z</atom:updated>
            <content:encoded><![CDATA[<h3><strong>Scaffold dan AppBar: Membuat Struktur Aplikasi Flutter — part 10</strong></h3><p>sudahkah anda baca part sebelumnya ?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*1jCev_1QWxI9_-Xl" /><figcaption>Photo by <a href="https://unsplash.com/@sushioutlaw?utm_source=medium&amp;utm_medium=referral">Brian McGowan</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Dalam pengembangan aplikasi Flutter, <strong>Scaffold</strong> dan <strong>AppBar</strong> adalah dua widget yang berperan penting dalam membangun struktur dasar sebuah aplikasi. Scaffold menyediakan kerangka antarmuka dasar, sedangkan AppBar digunakan untuk menambahkan bilah aplikasi (application bar) yang sering menjadi elemen utama pada antarmuka aplikasi modern.</p><h3>Apa Itu Scaffold?</h3><p><strong>Scaffold</strong> adalah widget yang menyediakan struktur dasar untuk sebuah aplikasi Flutter. Dengan Scaffold, Anda dapat dengan mudah menambahkan elemen UI seperti:</p><ul><li><strong>AppBar</strong> (Bilah aplikasi di bagian atas)</li><li><strong>Drawer</strong> (Menu navigasi samping)</li><li><strong>FloatingActionButton</strong> (Tombol aksi mengambang)</li><li><strong>BottomNavigationBar</strong> (Navigasi di bagian bawah)</li><li><strong>Body</strong> (Konten utama)</li></ul><h4>Struktur Scaffold</h4><p>Berikut adalah struktur umum dari Scaffold:</p><pre>Scaffold(<br>  appBar: AppBar(<br>    title: Text(&#39;Judul Aplikasi&#39;),<br>  ),<br>  body: Center(<br>    child: Text(&#39;Konten Utama&#39;),<br>  ),<br>  floatingActionButton: FloatingActionButton(<br>    onPressed: () {<br>      print(&#39;Tombol ditekan&#39;);<br>    },<br>    child: Icon(Icons.add),<br>  ),<br>);</pre><h3>Apa Itu AppBar?</h3><p><strong>AppBar</strong> adalah widget yang biasanya digunakan sebagai bilah aplikasi di bagian atas layar. AppBar sering digunakan untuk menampilkan:</p><ul><li><strong>Judul aplikasi</strong> atau halaman</li><li><strong>Ikon navigasi</strong> (seperti tombol kembali atau menu drawer)</li><li><strong>Aksi cepat</strong> (seperti ikon pencarian, notifikasi, dll.)</li></ul><h4>Contoh AppBar</h4><p>Berikut adalah contoh AppBar dengan elemen-elemen umum:</p><pre>AppBar(<br>  title: Text(&#39;Halaman Beranda&#39;),<br>  leading: Icon(Icons.menu), // Ikon di sebelah kiri<br>  actions: [<br>    IconButton(<br>      icon: Icon(Icons.search),<br>      onPressed: () {<br>        print(&#39;Pencarian di tekan&#39;);<br>      },<br>    ),<br>    IconButton(<br>      icon: Icon(Icons.notifications),<br>      onPressed: () {<br>        print(&#39;Notifikasi di tekan&#39;);<br>      },<br>    ),<br>  ],<br>);</pre><h3>Menggabungkan Scaffold dan AppBar</h3><p>Scaffold dan AppBar sering digunakan bersama untuk menciptakan struktur aplikasi yang lengkap.</p><h4>Contoh Lengkap</h4><pre>import &#39;package:flutter/material.dart&#39;;<br><br>void main() {<br>  runApp(MyApp());<br>}<br><br>class MyApp extends StatelessWidget {<br>  @override<br>  Widget build(BuildContext context) {<br>    return MaterialApp(<br>      home: Scaffold(<br>        appBar: AppBar(<br>          title: Text(&#39;Scaffold dan AppBar&#39;),<br>          backgroundColor: Colors.blue,<br>          actions: [<br>            IconButton(<br>              icon: Icon(Icons.search),<br>              onPressed: () {<br>                print(&#39;Pencarian di tekan&#39;);<br>              },<br>            ),<br>          ],<br>        ),<br>        body: Center(<br>          child: Text(<br>            &#39;Selamat datang di aplikasi Flutter!&#39;,<br>            style: TextStyle(fontSize: 20),<br>          ),<br>        ),<br>        floatingActionButton: FloatingActionButton(<br>          onPressed: () {<br>            print(&#39;FAB ditekan&#39;);<br>          },<br>          child: Icon(Icons.add),<br>        ),<br>      ),<br>    );<br>  }<br>}</pre><h3>Fitur Tambahan Scaffold dan AppBar</h3><h4>1. Drawer</h4><p>Untuk menambahkan menu navigasi samping:</p><pre>drawer: Drawer(<br>  child: ListView(<br>    children: [<br>      DrawerHeader(<br>        child: Text(&#39;Menu Navigasi&#39;),<br>        decoration: BoxDecoration(color: Colors.blue),<br>      ),<br>      ListTile(<br>        title: Text(&#39;Halaman 1&#39;),<br>        onTap: () {},<br>      ),<br>      ListTile(<br>        title: Text(&#39;Halaman 2&#39;),<br>        onTap: () {},<br>      ),<br>    ],<br>  ),<br>),</pre><h4>2. BottomNavigationBar</h4><p>Untuk menambahkan navigasi di bagian bawah layar:</p><pre>bottomNavigationBar: BottomNavigationBar(<br>  items: [<br>    BottomNavigationBarItem(<br>      icon: Icon(Icons.home),<br>      label: &#39;Beranda&#39;,<br>    ),<br>    BottomNavigationBarItem(<br>      icon: Icon(Icons.settings),<br>      label: &#39;Pengaturan&#39;,<br>    ),<br>  ],<br>),</pre><h4>3. Background Color pada Scaffold</h4><p>Untuk mengganti warna latar belakang Scaffold:</p><pre>backgroundColor: Colors.grey[200],</pre><h3>Kesimpulan</h3><ul><li><strong>Scaffold</strong> adalah kerangka dasar untuk membangun struktur aplikasi Flutter.</li><li><strong>AppBar</strong> menyediakan bilah aplikasi yang biasanya terletak di bagian atas layar.</li><li>Kombinasi keduanya memungkinkan pengembang menciptakan antarmuka pengguna yang konsisten dan fungsional.</li></ul><p>Dengan memahami Scaffold dan AppBar, Anda dapat membuat aplikasi yang lebih terstruktur dan mudah digunakan. Mulailah bereksperimen dengan elemen-elemen tambahan seperti Drawer, FloatingActionButton, dan BottomNavigationBar untuk meningkatkan pengalaman pengguna.</p><p>Terima kasih telah membaca.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=43cb93d145a2" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Mengenal Laravel Herd Solusi Os Mac 12 yang tidak dapat update homebrew]]></title>
            <link>https://medium.com/@basriumar/mengenal-laravel-herd-solusi-os-mac-12-489fa06e8fc6?source=rss-56f89132aa0c------2</link>
            <guid isPermaLink="false">https://medium.com/p/489fa06e8fc6</guid>
            <category><![CDATA[laravel]]></category>
            <dc:creator><![CDATA[Babas (Basri Umar)]]></dc:creator>
            <pubDate>Sun, 01 Dec 2024 09:29:59 GMT</pubDate>
            <atom:updated>2024-12-01T09:30:22.760Z</atom:updated>
            <content:encoded><![CDATA[<p>Saya mengalami kesulitan saat menginstal Composer di macOS Monterey (versi 12). Masalahnya, saya tidak dapat menginstal PHP 8.2 maupun memperbarui Homebrew. Akibatnya, saya tidak dapat menggunakan Laravel 11 versi terbaru.</p><p>Alhamdulilah saya telah mendapatkan solusi yaitu menggunakan Herd Laravel, Herd laravel mirip dengan laragon, akan tetapi laragon tidak support di MacOs.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*11-LJqZzgk-AMY3J0pP0lw.png" /></figure><p><strong>Apa itu herd?</strong></p><p><strong>Herd Laravel</strong> adalah sebuah aplikasi pengelola lingkungan pengembangan lokal yang dirancang khusus untuk framework Laravel. Herd mempermudah pengaturan server lokal untuk menjalankan aplikasi Laravel tanpa perlu konfigurasi yang rumit. Dengan Herd, pengembang dapat menjalankan proyek Laravel secara cepat dan efisien menggunakan domain lokal khusus, dukungan SSL (HTTPS) bawaan, serta alat-alat tambahan untuk meningkatkan produktivitas dalam pengembangan.</p><p>Herd juga menyediakan antarmuka grafis yang ramah pengguna, memungkinkan pengembang untuk mengelola proyek Laravel tanpa harus mengandalkan perintah terminal sepenuhnya. Ini menjadikannya alternatif yang modern dan praktis dibandingkan alat pengembangan lainnya seperti Laravel Valet.</p><p>Aplikasi ini mendukung berbagai versi PHP, mempermudah pengembang untuk menyesuaikan kebutuhan aplikasi mereka sesuai dengan versi Laravel yang digunakan. Herd sangat cocok untuk pengembang yang ingin fokus pada pengembangan aplikasi tanpa dibebani oleh pengaturan teknis server lokal yang kompleks.</p><p>Alhamdulilah dengan herd bisa menggunakan laravel versi 11, herd mempunyai versi non member yang penggunaannya terbatas diantaranya tidak bisa menggunakan database seperti mysql oleh karena itu saya menggunakan xampp / mamp untuk solusinya database.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WnULv6plM35aFLFJfQE0aw.png" /><figcaption>tampilan mengelola site</figcaption></figure><p>gambar di atas yaitu tampilan untuk mengelola site, berikut contoh implementasi projek menggunakan livewere pada aplikasi Herd.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qYFRe080R5bIWxcd39NahA.png" /></figure><p>Berikut adalah <strong>keuntungan</strong> dan <strong>kekurangan</strong> menggunakan Herd Laravel:</p><h3>Keuntungan Herd Laravel</h3><h4>1. Pengaturan Mudah dan Cepat</h4><ul><li>Herd menawarkan instalasi satu langkah dan konfigurasi yang otomatis, sehingga mempermudah pengaturan lingkungan pengembangan Laravel tanpa perlu banyak perintah terminal.</li><li>Tidak perlu mengatur file hosts atau konfigurasi server manual seperti Apache atau Nginx.</li></ul><h4>2. Dukungan SSL Bawaan</h4><ul><li>Herd menyediakan dukungan SSL (HTTPS) secara bawaan, sehingga Anda bisa menjalankan aplikasi dengan protokol aman tanpa konfigurasi tambahan.</li></ul><h4>3. Pengelolaan Proyek yang Terpusat</h4><ul><li>Dengan antarmuka grafis yang sederhana, Anda dapat melihat dan mengelola proyek Laravel yang terhubung dengan mudah.</li></ul><h4>4. Dukungan Domain Lokal</h4><ul><li>Herd secara otomatis membuat domain lokal seperti myproject.test, mempermudah akses ke aplikasi Laravel Anda tanpa perlu mengetik alamat IP.</li></ul><h4>5. Kompatibilitas dengan Berbagai Versi PHP</h4><ul><li>Mendukung berbagai versi PHP sehingga memudahkan pengembang untuk menyesuaikan kebutuhan proyek dengan spesifikasi Laravel yang diinginkan.</li></ul><h4>6. Tidak Bergantung pada Web Server Eksternal</h4><ul><li>Herd menggunakan server bawaan tanpa perlu bergantung pada Apache, Nginx, atau MAMP, sehingga mengurangi overhead konfigurasi.</li></ul><h4>7. Optimasi untuk Laravel</h4><ul><li>Dirancang khusus untuk Laravel, sehingga semua fitur disesuaikan untuk mempermudah pengembangan dengan framework ini.</li></ul><h3>Kekurangan Herd Laravel</h3><h4>1. Eksklusif untuk macOS</h4><ul><li>Herd hanya tersedia untuk pengguna macOS, sehingga pengembang di sistem operasi lain (Windows atau Linux) tidak dapat menggunakannya.</li></ul><h4>2. Ketergantungan pada PHP dan Homebrew</h4><ul><li>Mengelola versi PHP melalui Homebrew bisa menjadi tantangan, terutama jika ada konflik dengan versi PHP yang sudah ada.</li></ul><h4>3. Kurang Fleksibel untuk Teknologi Lain</h4><ul><li>Karena fokus pada Laravel, Herd mungkin tidak cocok untuk pengembang yang ingin bekerja dengan framework lain atau aplikasi PHP non-Laravel.</li></ul><h4>4. Tidak Mendukung Lingkungan Produksi</h4><ul><li>Herd dirancang khusus untuk pengembangan lokal. Jika Anda membutuhkan server untuk pengujian atau produksi, Anda harus mengonfigurasinya secara terpisah.</li></ul><h4>5. Dokumentasi yang Terbatas</h4><ul><li>Sebagai alat yang relatif baru, dokumentasi Herd mungkin kurang lengkap dibandingkan alat seperti Laravel Valet atau Docker.</li></ul><h4>6. Memerlukan Sertifikat SSL Manual untuk Beberapa Browser</h4><ul><li>Meskipun mendukung SSL, beberapa browser mungkin memerlukan konfirmasi manual untuk menerima sertifikat lokal, yang bisa mengganggu alur kerja.</li></ul><h3>Kesimpulan</h3><p>Herd Laravel sangat ideal bagi pengembang Laravel di macOS yang ingin kemudahan dan efisiensi dalam mengatur lingkungan pengembangan lokal. Namun, eksklusivitas untuk macOS dan ketergantungan pada Laravel menjadikannya kurang fleksibel untuk pengembang dengan kebutuhan yang lebih luas atau menggunakan sistem operasi lain.</p><p>Jika tulisan ini bermanfaat untuk anda tinggalkan clapss tanda anda suka pada tulisan ini, jika anda ingin pembahasan lebih lanjut boleh tinggalkan komentar materi apa yang akan dibahas?</p><p>Terima Kasih, SeeYou.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=489fa06e8fc6" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Mengenal Flexible dan Expanded dalam Layout — part 9]]></title>
            <link>https://medium.com/@basriumar/mengenal-flexible-dan-expanded-dalam-layout-part-9-bc43823b4d92?source=rss-56f89132aa0c------2</link>
            <guid isPermaLink="false">https://medium.com/p/bc43823b4d92</guid>
            <category><![CDATA[flutter]]></category>
            <dc:creator><![CDATA[Babas (Basri Umar)]]></dc:creator>
            <pubDate>Fri, 29 Nov 2024 12:11:20 GMT</pubDate>
            <atom:updated>2024-11-29T12:11:57.743Z</atom:updated>
            <content:encoded><![CDATA[<h3><strong>Mengenal Flexible dan Expanded dalam Layout — part 9</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*K9uK5mTlHwSwiWyy" /><figcaption>Photo by <a href="https://unsplash.com/@masakaze?utm_source=medium&amp;utm_medium=referral">Masakaze Kawakami</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>sudahkah anda baca part sebelumnya?</p><p>Dalam pengembangan aplikasi dengan Flutter, mengatur tata letak (layout) adalah aspek penting. Untuk membuat tata letak yang responsif dan fleksibel, Flutter menyediakan dua widget penting: <strong>Flexible</strong> dan <strong>Expanded</strong>. Artikel ini akan membahas perbedaan, fungsi, dan cara penggunaan kedua widget ini dalam membangun UI yang dinamis.</p><h3>1. Apa Itu Flexible dan Expanded?</h3><ul><li><strong>Flexible</strong>: Digunakan untuk mengatur seberapa banyak ruang yang diambil oleh widget anak dalam layout <strong>Row</strong>, <strong>Column</strong>, atau <strong>Flex</strong>. Widget ini memungkinkan anaknya menyesuaikan ukurannya, baik secara proporsional maupun dengan ukuran minimum yang diperlukan.</li><li><strong>Expanded</strong>: Subkelas dari Flexible yang secara otomatis memperluas widget anak untuk mengisi seluruh ruang kosong yang tersedia, tanpa menyisakan ruang.</li></ul><h3>Contoh Penggunaan Flexible</h3><h3>a. Flexible dengan flex</h3><p>Properti flex menentukan proporsi ruang yang diberikan kepada widget.</p><pre>Row(<br>  children: [<br>    Flexible(<br>      flex: 2, // Mengambil 2 bagian dari ruang total<br>      child: Container(<br>        color: Colors.blue,<br>        height: 100,<br>        child: Center(child: Text(&#39;2x Space&#39;)),<br>      ),<br>    ),<br>    Flexible(<br>      flex: 1, // Mengambil 1 bagian dari ruang total<br>      child: Container(<br>        color: Colors.green,<br>        height: 100,<br>        child: Center(child: Text(&#39;1x Space&#39;)),<br>      ),<br>    ),<br>  ],<br>);</pre><p>Hasil:</p><ul><li>Kotak biru mengambil 2/3 dari ruang yang tersedia.</li><li>Kotak hijau mengambil 1/3 dari ruang yang tersedia.</li></ul><h3>b. Flexible dengan Widget yang Shrinkwrap</h3><p>Jika anak widget membutuhkan ukuran minimal, <strong>Flexible</strong> mengizinkannya menyusut:</p><pre>Column(<br>  children: [<br>    Flexible(<br>      child: Container(<br>        color: Colors.orange,<br>        child: Text(<br>          &#39;Saya hanya memakan ruang yang diperlukan!&#39;,<br>          textAlign: TextAlign.center,<br>        ),<br>      ),<br>    ),<br>    Container(<br>      height: 50,<br>      color: Colors.grey,<br>      child: Center(child: Text(&#39;Fixed Height Container&#39;)),<br>    ),<br>  ],<br>);</pre><h3>Contoh Penggunaan Expanded</h3><h3>a. Expanded untuk Mengisi Seluruh Ruang</h3><p>Expanded memaksa widget anak mengisi seluruh ruang kosong yang tersedia.</p><pre>Row(<br>  children: [<br>    Expanded(<br>      child: Container(<br>        color: Colors.red,<br>        height: 100,<br>        child: Center(child: Text(&#39;Expanded 1&#39;)),<br>      ),<br>    ),<br>    Expanded(<br>      child: Container(<br>        color: Colors.blue,<br>        height: 100,<br>        child: Center(child: Text(&#39;Expanded 2&#39;)),<br>      ),<br>    ),<br>  ],<br>);</pre><h3>b. Expanded dengan flex</h3><p>Seperti Flexible, Expanded juga mendukung properti flex untuk pengaturan proporsi.</p><pre>Column(<br>  children: [<br>    Expanded(<br>      flex: 3, // Mengambil 3 bagian dari ruang total<br>      child: Container(<br>        color: Colors.yellow,<br>        child: Center(child: Text(&#39;3x Space&#39;)),<br>      ),<br>    ),<br>    Expanded(<br>      flex: 1, // Mengambil 1 bagian dari ruang total<br>      child: Container(<br>        color: Colors.purple,<br>        child: Center(child: Text(&#39;1x Space&#39;)),<br>      ),<br>    ),<br>  ],<br>);</pre><h3>Kapan Menggunakan Flexible dan Expanded?</h3><p><strong>Gunakan Flexible</strong>:</p><ul><li>Ketika widget anak tidak perlu mengisi seluruh ruang.</li><li>Saat menginginkan tata letak yang lebih fleksibel, misalnya membiarkan beberapa widget lain mengambil ruang berdasarkan kebutuhan.</li></ul><p><strong>Gunakan Expanded</strong>:</p><ul><li>Ketika widget anak harus mengisi semua ruang kosong.</li><li>Untuk membagi ruang secara proporsional dalam tata letak.</li></ul><h3>Tips dan Trik</h3><ul><li><strong>Hindari Overlap:</strong> Jangan gunakan terlalu banyak widget Flexible/Expanded di dalam satu layout tanpa memahami bagaimana ruang dibagi.</li><li><strong>Uji Responsivitas:</strong> Pastikan layout Anda tetap responsif pada berbagai ukuran layar.</li><li><strong>Kombinasikan dengan Spacer:</strong> Gunakan widget Spacer untuk menambahkan ruang fleksibel di antara widget.</li></ul><h3>Kesimpulan</h3><p>Flexible dan Expanded adalah dua widget penting dalam Flutter untuk membuat tata letak yang fleksibel dan responsif. Dengan memahami perbedaan dan penggunaannya, Anda dapat dengan mudah mengontrol bagaimana widget anak berperilaku dalam layout.</p><p>Selamat bereksperimen dengan <strong>Flexible</strong> dan <strong>Expanded</strong> untuk menciptakan UI yang menarik! 😊</p><p>See You terima kasih telah membaca</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bc43823b4d92" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Widget Container: Fondasi untuk Styling di Flutter — Part 8]]></title>
            <link>https://medium.com/@basriumar/widget-container-fondasi-untuk-styling-di-flutter-part-8-35955d964043?source=rss-56f89132aa0c------2</link>
            <guid isPermaLink="false">https://medium.com/p/35955d964043</guid>
            <category><![CDATA[flutter]]></category>
            <category><![CDATA[flutter-container]]></category>
            <dc:creator><![CDATA[Babas (Basri Umar)]]></dc:creator>
            <pubDate>Fri, 29 Nov 2024 12:03:26 GMT</pubDate>
            <atom:updated>2024-11-29T12:03:26.511Z</atom:updated>
            <content:encoded><![CDATA[<h3><strong>Widget Container: Fondasi untuk Styling di Flutter — Part 8</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Dcf0_CgHBWJRsSBl" /><figcaption>Photo by <a href="https://unsplash.com/@frankiefoto?utm_source=medium&amp;utm_medium=referral">frank mckenna</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>sudahkah anda baca part sebelumnya?</p><p><strong>Container</strong> adalah salah satu widget paling serbaguna di Flutter. Sebagai “kotak serbaguna”, widget ini sering digunakan sebagai fondasi untuk styling dan layouting. Dalam artikel ini, kita akan mempelajari apa itu widget Container, fitur-fiturnya, serta contoh penggunaannya untuk berbagai kebutuhan styling.</p><h3>1. Apa Itu Widget Container?</h3><p>Widget <strong>Container</strong> di Flutter adalah elemen pembungkus yang:</p><ul><li>Menggabungkan properti layout dan styling.</li><li>Dapat berisi satu widget anak (<strong>child</strong>).</li><li>Memberikan kemampuan untuk menambahkan padding, margin, border, warna latar, dan radius sudut.</li></ul><p>Container sering digunakan untuk membentuk elemen UI seperti kartu, kotak teks, atau elemen desain lainnya.</p><h3>2. Properti Utama Container</h3><h3>a. color</h3><p>Menentukan warna latar belakang widget.</p><pre>Container(<br>  color: Colors.blue,<br>  child: Text(<br>    &#39;Hello Flutter!&#39;,<br>    style: TextStyle(color: Colors.white),<br>  ),<br>);</pre><h3>b. width dan height</h3><p>Mengatur lebar dan tinggi dari widget.</p><pre>Container(<br>  width: 200,<br>  height: 100,<br>  color: Colors.green,<br>  child: Center(<br>    child: Text(&#39;Kotak Hijau&#39;),<br>  ),<br>);</pre><h3>c. padding dan margin</h3><ul><li><strong>Padding</strong>: Memberikan ruang di dalam Container, antara konten dan tepinya.</li><li><strong>Margin</strong>: Memberikan ruang di luar Container, antara Container dan elemen lainnya.</li></ul><pre>Container(<br>  margin: EdgeInsets.all(20), // Ruang di luar container<br>  padding: EdgeInsets.all(10), // Ruang di dalam container<br>  color: Colors.orange,<br>  child: Text(&#39;Padding dan Margin&#39;),<br>);</pre><h3>d. alignment</h3><p>Menentukan posisi widget anak di dalam Container.</p><pre>Container(<br>  width: 200,<br>  height: 100,<br>  color: Colors.purple,<br>  alignment: Alignment.center,<br>  child: Text(<br>    &#39;Tengah&#39;,<br>    style: TextStyle(color: Colors.white),<br>  ),<br>);</pre><h3>e. decoration</h3><p>Memberikan kontrol styling lebih lanjut dengan properti BoxDecoration.</p><ul><li>Warna latar.</li><li>Border atau outline.</li><li>Radius sudut (rounded corners).</li><li>Gradien warna.</li><li>Gambar latar belakang.</li></ul><pre>Container(<br>  width: 200,<br>  height: 100,<br>  decoration: BoxDecoration(<br>    color: Colors.blue,<br>    border: Border.all(color: Colors.black, width: 2),<br>    borderRadius: BorderRadius.circular(15),<br>  ),<br>  child: Center(<br>    child: Text(<br>      &#39;Dekorasi&#39;,<br>      style: TextStyle(color: Colors.white),<br>    ),<br>  ),<br>);</pre><h3>3. Contoh Penggunaan Widget Container</h3><h3>a. Membuat Kartu Profil</h3><pre>Container(<br>  padding: EdgeInsets.all(10),<br>  margin: EdgeInsets.symmetric(horizontal: 20, vertical: 10),<br>  decoration: BoxDecoration(<br>    color: Colors.white,<br>    boxShadow: [<br>      BoxShadow(<br>        color: Colors.grey.withOpacity(0.5),<br>        spreadRadius: 2,<br>        blurRadius: 5,<br>        offset: Offset(0, 3), // Posisi bayangan<br>      ),<br>    ],<br>    borderRadius: BorderRadius.circular(10),<br>  ),<br>  child: Row(<br>    children: [<br>      CircleAvatar(<br>        radius: 30,<br>        backgroundImage: NetworkImage(&#39;https://via.placeholder.com/150&#39;),<br>      ),<br>      SizedBox(width: 10),<br>      Column(<br>        crossAxisAlignment: CrossAxisAlignment.start,<br>        children: [<br>          Text(<br>            &#39;John Doe&#39;,<br>            style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),<br>          ),<br>          Text(<br>            &#39;Flutter Developer&#39;,<br>            style: TextStyle(color: Colors.grey),<br>          ),<br>        ],<br>      ),<br>    ],<br>  ),<br>);</pre><h3>b. Membuat Button Kustom</h3><pre>Container(<br>  width: 150,<br>  height: 50,<br>  decoration: BoxDecoration(<br>    color: Colors.blue,<br>    borderRadius: BorderRadius.circular(25),<br>  ),<br>  child: Center(<br>    child: Text(<br>      &#39;Klik Saya&#39;,<br>      style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold),<br>    ),<br>  ),<br>);</pre><h3>c. Membuat Background Gradien</h3><pre>Container(<br>  width: double.infinity,<br>  height: 200,<br>  decoration: BoxDecoration(<br>    gradient: LinearGradient(<br>      colors: [Colors.blue, Colors.purple],<br>      begin: Alignment.topLeft,<br>      end: Alignment.bottomRight,<br>    ),<br>  ),<br>  child: Center(<br>    child: Text(<br>      &#39;Gradien Warna&#39;,<br>      style: TextStyle(color: Colors.white, fontSize: 18),<br>    ),<br>  ),<br>);</pre><h3>4. Tips Penggunaan Widget Container</h3><ol><li><strong>Gunakan Properti yang Sesuai</strong>: Jika hanya ingin mengatur warna latar belakang, pertimbangkan menggunakan widget ColoredBox untuk kinerja yang lebih baik.</li><li><strong>Gabungkan dengan Widget Lain</strong>: Kombinasikan Container dengan widget seperti Row, Column, atau Stack untuk layout yang lebih kompleks.</li><li><strong>Hindari Overuse</strong>: Jangan menggunakan Container jika tidak diperlukan. Contohnya, untuk padding saja, gunakan widget Padding.</li></ol><h3>Kesimpulan</h3><p>Widget <strong>Container</strong> adalah fondasi penting dalam pengembangan aplikasi Flutter. Dengan memahami dan mengoptimalkan penggunaan properti seperti color, padding, decoration, dan alignment, Anda dapat menciptakan elemen UI yang menarik dan fungsional.</p><p>Selamat bereksperimen dengan <strong>Container</strong> untuk meningkatkan desain aplikasi Flutter Anda! 😊</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=35955d964043" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Debugging Aplikasi Flutter: Tips dan Alat yang Perlu Anda Tahu — part 7]]></title>
            <link>https://medium.com/@basriumar/debugging-aplikasi-flutter-tips-dan-alat-yang-perlu-anda-tahu-part-7-47178d5a13e7?source=rss-56f89132aa0c------2</link>
            <guid isPermaLink="false">https://medium.com/p/47178d5a13e7</guid>
            <category><![CDATA[debugging]]></category>
            <category><![CDATA[flutter]]></category>
            <dc:creator><![CDATA[Babas (Basri Umar)]]></dc:creator>
            <pubDate>Fri, 29 Nov 2024 11:54:42 GMT</pubDate>
            <atom:updated>2024-11-29T11:54:42.081Z</atom:updated>
            <content:encoded><![CDATA[<h3>Debugging Aplikasi Flutter: Tips dan Alat yang Perlu Anda Tahu — part 7</h3><p>sudahkah anda baca part sebelumnya ?</p><p>Debugging Aplikasi Flutter: Tips dan Alat yang Perlu Anda TahuDebugging adalah proses penting dalam pengembangan aplikasi untuk menemukan dan memperbaiki bug. Di Flutter, ekosistem pengembangannya menyediakan alat yang kuat dan mudah digunakan untuk membantu developer mengidentifikasi masalah. Artikel ini akan membahas <strong>tips</strong> dan <strong>alat</strong> terbaik untuk debugging aplikasi Flutter, lengkap dengan contoh kasus.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*MLos9pUeK1Mxg0rI" /><figcaption>Photo by <a href="https://unsplash.com/@benton13?utm_source=medium&amp;utm_medium=referral">Benton Sherman</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><h3>1. Memahami Debugging di Flutter</h3><p>Flutter menyediakan fitur debugging bawaan yang memungkinkan developer untuk:</p><ul><li>Memantau performa aplikasi.</li><li>Menemukan error dalam log.</li><li>Menjelajahi widget tree.</li><li>Menganalisis masalah rendering dan layout.</li></ul><p>Beberapa alat bawaan yang sering digunakan adalah:</p><ul><li><strong>Flutter DevTools</strong></li><li><strong>Dart Analyzer</strong></li><li><strong>Debugging Mode di IDE</strong> (seperti Visual Studio Code dan Android Studio)</li></ul><h3>2. Tips Debugging Aplikasi Flutter</h3><h3>a. Gunakan debugPrint untuk Melacak Log</h3><p>Ketika Anda ingin melihat nilai variabel atau status aplikasi, gunakan debugPrint agar output lebih rapi dan terkontrol:</p><pre>void fetchData() {<br>  try {<br>    // Simulasi fetch data<br>    String data = &#39;Data berhasil diambil&#39;;<br>    debugPrint(&#39;Data: $data&#39;);<br>  } catch (e) {<br>    debugPrint(&#39;Error: $e&#39;);<br>  }<br>}</pre><p><strong>Tips:</strong> Hindari menggunakan print terlalu banyak dalam aplikasi besar, karena dapat memengaruhi performa.</p><h3>b. Manfaatkan Hot Reload dan Hot Restart</h3><ul><li><strong>Hot Reload</strong>: Untuk memperbarui UI tanpa kehilangan status aplikasi. Ideal untuk perubahan tampilan.</li><li><strong>Hot Restart</strong>: Mengulang aplikasi sepenuhnya. Gunakan jika Anda mengubah logika atau struktur aplikasi.</li></ul><h3>c. Jalankan Aplikasi dalam Mode Debug</h3><p>Mode Debug menampilkan <strong>banner DEBUG</strong> di sudut kanan atas aplikasi, memungkinkan Anda:</p><ul><li>Memantau log error.</li><li>Menangkap error tidak tertangani.</li><li>Menemukan masalah performa.</li></ul><h3>d. Aktifkan Debugging Widget</h3><p>Gunakan debugPaintSizeEnabled untuk melihat batas widget dan memahami masalah tata letak:</p><pre>import &#39;package:flutter/rendering.dart&#39;;<br><br>void main() {<br>  debugPaintSizeEnabled = true;<br>  runApp(MyApp());<br>}</pre><h3>e. Cek Masalah Layout dengan Flutter Inspector</h3><p>Buka <strong>Flutter DevTools</strong> dan gunakan tab <strong>Inspector</strong> untuk:</p><ul><li>Melihat widget tree.</li><li>Mengidentifikasi widget yang memakan ruang terlalu besar.</li><li>Memperbaiki hierarki widget yang salah.</li></ul><h3>3. Alat Debugging Penting untuk Flutter</h3><h3>a. Flutter DevTools</h3><p>Flutter DevTools adalah suite alat berbasis web untuk menganalisis aplikasi Flutter. Fitur utamanya meliputi:</p><ul><li><strong>Inspector</strong>: Menjelajahi widget tree.</li><li><strong>Timeline</strong>: Memantau performa aplikasi.</li><li><strong>Memory</strong>: Menganalisis penggunaan memori.</li><li><strong>Network</strong>: Memeriksa permintaan HTTP.</li></ul><p><strong>Cara Menggunakan DevTools:</strong></p><ol><li>Jalankan aplikasi Flutter.</li><li>Ketik di terminal:</li></ol><pre>flutter pub global activate devtools<br>flutter pub global run devtools</pre><p>3. Akses DevTools melalui browser di <a href="http://127.0.0.1:9100.">http://127.0.0.1:9100.</a></p><h3>b. Dart Analyzer</h3><p>Dart Analyzer membantu mendeteksi error di kode Anda bahkan sebelum aplikasi dijalankan. Anda dapat menjalankannya secara manual:</p><pre>flutter analyze</pre><h3>c. Debugging di IDE</h3><ul><li><strong>Visual Studio Code</strong>:</li></ul><ol><li>Pasang extension <strong>Dart</strong> dan <strong>Flutter</strong>.</li><li>Gunakan breakpoint untuk menghentikan eksekusi pada baris tertentu.</li></ol><ul><li><strong>Android Studio</strong>:</li></ul><ol><li>Gunakan tab <strong>Debugger</strong> untuk memantau log aplikasi.</li><li>Tambahkan breakpoint dengan klik di margin kiri editor.</li></ol><h3>4. Contoh Kasus Debugging</h3><h3>Masalah: Error Tidak Tertangani</h3><p>Kode berikut menghasilkan error karena list kosong:</p><pre>void main() {<br>  List&lt;int&gt; numbers = [];<br>  print(numbers[0]);<br>}</pre><p><strong>Solusi: Tangani Error dengan Try-Catch</strong></p><pre>void main() {<br>  List&lt;int&gt; numbers = [];<br>  try {<br>    print(numbers[0]);<br>  } catch (e) {<br>    debugPrint(&#39;Terjadi error: $e&#39;);<br>  }<br>}</pre><p>Output di log:</p><pre>Terjadi error: RangeError (index): Invalid value: Valid value range is empty: 0</pre><h3>Masalah: Render Overflow</h3><p>Kode berikut menghasilkan overflow karena teks terlalu panjang:</p><pre>Text(<br>  &#39;Ini adalah teks yang sangat panjang dan tidak cukup ruang untuk ditampilkan&#39;,<br>)</pre><p><strong>Solusi: Gunakan Widget Scrollable</strong></p><pre>SingleChildScrollView(<br>  child: Text(<br>    &#39;Ini adalah teks yang sangat panjang dan tidak cukup ruang untuk ditampilkan&#39;,<br>  ),<br>)</pre><h3>Kesimpulan</h3><p>Debugging adalah bagian krusial dari pengembangan aplikasi Flutter. Dengan memanfaatkan alat seperti <strong>Flutter DevTools</strong> dan mengikuti tips yang diberikan, Anda dapat lebih efisien menemukan dan memperbaiki bug, meningkatkan kualitas aplikasi Anda.</p><p><strong>Mulai eksplorasi DevTools hari ini dan optimalkan debugging Anda!</strong> 😊</p><p>jika suka dengan isi artikel ini, silahakan tinggalkan higlight dan claps.<br>komen jika ingin ada materi lain.<br>seeyou terima kasih sudah membaca.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=47178d5a13e7" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>