Penulis: Daniel Adi Pratama

  • Pengalaman Membangun Backend Manajemen Gudang Menggunakan Laravel


    Pendahuluan

    Banyak pengelolaan gudang yang masih sering kali menggunakan metode pencatatan manual dalam mengelola gudang, seperti melalui buku catatan atau spreadsheet sederhana. Metode ini memiliki banyak keterbatasan, di antaranya rentan terhadap kesalahan pencatatan, sulit dalam pelacakan barang, serta lambat dalam proses pembaruan data. Akibatnya, sering terjadi ketidaksesuaian antara stok fisik dengan catatan administrasi, yang dapat menyebabkan pemborosan, keterlambatan distribusi, hingga potensi kerugian akibat kehilangan barang atau kelebihan persediaan.

    Sebagai solusi kami mengembangkan sistem backend yang memungkinkan pemantauan stok secara real-time, otomatisasi pencatatan barang masuk dan keluar, integrasi dengan sistem lain, serta analisis data untuk mendukung pengambilan keputusan yang lebih akurat. Implementasi sistem ini tidak hanya meningkatkan efisiensi dan efektivitas dalam pengelolaan gudang, tetapi juga mengurangi risiko kesalahan serta meningkatkan transparansi dalam manajemen persediaan.


    Mengapa Laravel untuk Backend Aplikasi?

    Laravel dipilih karena kami sebagai mahasiswa TI memilih tools yang sudah sangat populer dan ekosistem yang lengkap sehingga waktu atau cost saat development menjadi lebih efisien karena kami tidak perlu banyak belajar lagi untuk mempelajari teknologi baru.

    Dari segi teknis, untuk membuat routing REST API itu sangat mudah, simpel, dan juga kodenya konsisten, kemudian setup Authentication dan Authorization yang mudah, beserta mempercepat pengembangan backend dengan adanya Eloquent ORM, mudah menambah middleware untuk melakukan validasi otomatis untuk menjaga keamanan atau sanitasi pada input, serta dokumentasi laravel yang jelas dan komunitas yang sudah besar.


    Gambaran Arsitektur Backend

    • Controller: Menerima request
    • Service: Mengolah logika
    • Model: Mengelola data dan relasi antar model
    • Middleware: Otorisasi role super admin dan admin gudang
    • Resources/Response JSON: Output JSON yang standar dan rapi

    Fitur Utama dalam Sistem Manajemen Gudang

    FiturKonsep Laravel yang DigunakanManfaat
    Login Multi-RoleAuth, Middleware, PolicyPembatasan akses per jabatan
    CRUD Data Barang & KategoriEloquent ORM, Form Request ValidationManajemen stok lebih akurat
    Riwayat Pengiriman & PenerimaanRelasi Many-to-Many / One-to-ManyTracking distribusi barang
    Dashboard Ringkasan StokAggregation QueryKeputusan cepat berdasarkan data

    Pengelolaan relasi antar-entitas merupakan bagian paling penting dalam memastikan setiap transaksi terekam dengan benar.


    Contoh Implementasi API

    Route API (api.php):

    Route::middleware(['role:SuperAdmin'])->group(function () {
            Route::resource('gudangs', GudangController::class);
            Route::patch('gudangs/{id}/activate', [GudangController::class, 'activate'])->name('gudangs.activate');
            Route::patch('gudangs/{id}/deactivate', [GudangController::class, 'deactivate'])->name('gudangs.deactivate');
        });
    PHP

    Controller method untuk CRUD:

    <?php
    
    namespace App\Http\Controllers;
    
    use App\Http\Resources\GudangIndexResource;
    use Illuminate\Http\Request;
    use App\Models\GudangDanToko;
    use Illuminate\Support\Facades\DB;
    use Illuminate\Validation\ValidationException;
    use Illuminate\Database\Eloquent\ModelNotFoundException;
    
    class GudangController extends Controller
    {
        public function index()
        {
            try {
                $GudangDanToko = GudangDanToko::where('kategori_bangunan', 0)
                    ->orderBy('id')
                    ->get([
                        'id',
                        'nama_gudang_toko',
                        'alamat',
                        'no_telepon',
                        'flag',
                    ]);
    
                $headings = [
                    "NO",
                    "Nama Gudang",
                    "Alamat",
                    "No telepon",
                    "Status"
                ];
    
                return response()->json([
                    'status' => true,
                    'message' => 'Data Gudang',
                    'data' => [
                        'gudangs' => GudangIndexResource::collection($GudangDanToko),
                        /** @var array<int, string> */
                        'headings' => $headings,
                    ],
                ]);
            } catch (\Exception $e) {
                return response()->json([
                    'status' => false,
                    'message' => 'Terjadi kesalahan saat mengambil data gudang.',
                    'error' => $e->getMessage(),
                ], 500);
            }
        }
    
        public function create()
        {
            try {
                return response()->json([
                    'status' => true,
                    'message' => 'Form Tambah Gudang',
                ]);
            } catch (\Exception $e) {
                return response()->json([
                    'status' => false,
                    'message' => 'Terjadi kesalahan saat menyiapkan form tambah gudang.',
                    'error' => $e->getMessage(),
                ], 500);
            }
        }
    
        public function store(Request $request)
        {
            $gudang = GudangDanToko::all();
            try {
                $validated = $request->validate([
                    'nama_gudang_toko' => 'required|string|max:255',
                    'alamat' => 'nullable|string',
                    'no_telepon' => 'nullable|string|max:20',
                ]);
    
                $gudang = array_merge($validated, ['kategori_bangunan' => 0]);
    
                DB::transaction(function () use ($gudang) {
                    GudangDanToko::create($gudang);
                }, 3);
    
                return response()->json([
                    'status' => true,
                    'message' => "Berhasil menambahkan data gudang.",
                ], 201);
            } catch (ValidationException $e) {
                return response()->json([
                    'status' => false,
                    'message' => 'Data yang diberikan tidak valid.',
                    'errors' => $e->errors()
                ], 422);
            } catch (\Exception $e) {
                return response()->json([
                    'status' => false,
                    'message' => 'Terjadi kesalahan saat menyimpan gudang.',
                    'error' => $e->getMessage(),
                ], 500);
            }
        }
    
        public function show(string $id)
        {
            try {
                $gudang = GudangDanToko::findOrFail($id, [
                    'id',
                    'nama_gudang_toko',
                    'alamat',
                    'no_telepon',
                    'flag'
                ]);
    
                return response()->json([
                    'status' => true,
                    'message' => "Detail Data {$gudang->nama_gudang_toko}",
                    'data' => new GudangIndexResource($gudang),
                ]);
            } catch (ModelNotFoundException $e) {
                return response()->json([
                    'status' => false,
                    'message' => "Data gudang tidak ditemukan.",
                    'error' => $e->getMessage(), 
                ], 404);
            } catch (\Exception $e) {
                return response()->json([
                    'status' => false,
                    'message' => "Terjadi kesalahan saat mengambil detail data gudang.",
                    'error' => $e->getMessage(),
                ], 500);
            }
        }
    
        public function edit(string $id)
        {
            try {
                $gudang = GudangDanToko::findOrFail($id, [
                    'id',
                    'nama_gudang_toko',
                    'alamat',
                    'no_telepon'
                ]);
    
                return response()->json([
                    'status' => true,
                    'message' => "Data untuk Form Edit Gudang",
                    'data' => new GudangIndexResource($gudang),
                ]);
            } catch (ModelNotFoundException $e) {
                return response()->json([
                    'status' => false,
                    'message' => "Data gudang tidak ditemukan.",
                    'error' => $e->getMessage(),
                ], 404);
            } catch (\Exception $e) {
                return response()->json([
                    'status' => false,
                    'message' => "Terjadi kesalahan saat mengambil data untuk form edit Gudang.",
                    'error' => $e->getMessage(),
                ], 500);
            }
        }
    
        public function update(Request $request, string $id)
        {
            try {
    
                $validated = $request->validate([
                    'nama_gudang_toko' => 'required|string|max:255',
                    'alamat' => 'nullable|string',
                    'no_telepon' => 'nullable|string|max:20',
                ]);
    
                $gudang = GudangDanToko::findOrFail($id);
    
                DB::transaction(function () use ($gudang, $validated) {
                    $gudang->update($validated);
                }, 3);
    
                return response()->json([
                    'status' => true,
                    'message' => "{$gudang->nama_gudang_toko} berhasil diperbarui.",
                    'data' => new GudangIndexResource($gudang)
                ]);
            } catch (ValidationException $e) {
                return response()->json([
                    'status' => false,
                    'message' => 'Data yang diberikan tidak valid.',
                    'errors' => $e->errors(),
                ], 422);
            } catch (ModelNotFoundException $e) {
                return response()->json([
                    'status' => false,
                    'message' => "Data gudang tidak ditemukan.",
                    'error' => $e->getMessage(),
                ], 404);
            } catch (\Exception $e) {
                return response()->json([
                    'status' => false,
                    'message' => "Terjadi kesalahan saat memperbarui data gudang.",
                    'error' => $e->getMessage(),
                ], 500);
            }
        }
    
        public function deactivate(string $id)
        {
            try {
                $gudang = GudangDanToko::findOrFail($id);
    
                if ($gudang->flag == 0) {
                    return response()->json([
                        'status' => false,
                        'message' => "{$gudang->nama_gudang_toko} sudah dinonaktifkan.",
                    ], 409);
                }
    
                DB::transaction(function () use ($gudang) {
                    $gudang->update(['flag' => 0]);
                }, 3);
    
                return response()->json([
                    'status' => true,
                    'message' => "{$gudang->nama_gudang_toko} berhasil dinonaktifkan.",
                    'data' => new GudangIndexResource($gudang),
                ]);
            } catch (ModelNotFoundException $e) {
                return response()->json([
                    'status' => false,
                    'message' => "Data gudang tidak ditemukan.",
                    'error' => $e->getMessage(),
                ], 404);
            } catch (\Exception $e) {
                return response()->json([
                    'status' => false,
                    'message' => "Terjadi kesalahan saat menonaktifkan data gudang.",
                    'error' => $e->getMessage(),
                ], 500);
            }
        }
    
        public function activate(string $id)
        {
            try {
                $gudang = GudangDanToko::findOrFail($id);
    
                if ($gudang->flag == 1) {
                    return response()->json([
                        'status' => false,
                        'message' => " {$gudang->nama_gudang_toko} sudah diaktifkan.",
                    ], 400);
                }
    
                DB::transaction(function () use ($gudang) {
                    $gudang->update(['flag' => 1]);
                }, 3);
    
                return response()->json([
                    'status' => true,
                    'message' => "{$gudang->nama_gudang_toko} berhasil diaktifkan.",
                    'data' => new GudangIndexResource($gudang),
                ], 201);
            } catch (ModelNotFoundException $e) {
                return response()->json([
                    'status' => false,
                    'message' => "Data gudang tidak ditemukan.",
                    'error' => $e->getMessage(),
                ], 404);
            } catch (\Exception $e) {
                return response()->json([
                    'status' => false,
                    'message' => "Terjadi kesalahan saat mengaktifkan data gudang.",
                    'error' => $e->getMessage(),
                ], 500);
            }
        }
    }
    PHP

    Response JSON terstruktur:

    <?php
    
    namespace App\Http\Resources;
    
    use Carbon\Carbon;
    use App\Helpers\TimeHelpers;
    use Illuminate\Http\Request;
    use Illuminate\Http\Resources\Json\JsonResource;
    
    class GudangIndexResource extends JsonResource
    {
        /**
         * Transform the resource into an array.
         *
         * @return array<string, mixed>
         */
        public function toArray(Request $request): array
        {
            return [
                'id' => (int) $this->id,
                'nama_gudang' => $this->nama_gudang_toko,
                'alamat' => $this->alamat,
                'no_telepon' => $this->no_telepon,
                'status' => $this->flag ? 'Aktif' : 'Nonaktif',
            ];
        }
    }
    PHP

      Hasil yang Didapat

      Dengan ini backend untuk manajemen gudang sudah siap digunakan dengan client manapun (website, mobile) dan mudah untuk diintegrasikan dengan menambahkan dokumentasi API yang rapi dan mudah untuk dibaca dan dimengerti bagi developer frontend web maupun mobile. Dokumentasi API bisa melalui Swagger OpenAPI atau bisa membuat dokumentasi manual melalui fitur yang dihadirkan di Postman.


      Kesimpulan

      Laravel sangat cocok untuk backend REST API maupun dibuat fullstack dan untuk pemula yang ingin belajar menyelami dunia backend, disini teman-teman bisa banyak belajar mengenai arsitektur server-side dan keamanan akses sehingga teman-teman bisa menghasilkan backend yang cepat untuk deliver sehingga bisa dipakai segera oleh aplikasi client. Jadi jika teman-teman baru mulai belajar backend, Laravel adalah framework yang tepat untuk memulai sekaligus membangun proyek nyata yang bermanfaat bagi masyarakat luas.

    • Membangun Aplikasi Wicara: Perjalanan Membuat Aplikasi Pengaduan Kampus Menggunakan Flutter


      Pendahuluan

      Di kampus Politeknik Negeri Semarang (atau yang biasa disebut POLINES), sering sekali disini menemukan masalah mengenai fasilitas rusak, pelayanan yang kurang oke, sampai barang hilang yang informasinya hanya sekedar lewat di grup chat saja. Proses pengaduan dan laporan seperti ini masih manual dan tidak terorganisir sehingga penanganannya lambat dan membuat mahasiswa kurang puas.

      Nah, dari situ muncul ide: “gimana kalau semua hal ini bisa dilakukan lewat satu aplikasi aja? Biar lebih cepat, lebih jelas, dan tentu lebih efisien.”

      Di sinilah WICARA hadir sebagai solusi digital untuk membantu mahasiswa menyampaikan keluhan, melaporkan kehilangan, dan memberikan rating pada unit-unit pelayanan kampus. Semua jadi lebih rapi dan gampang!

      WICARA merupakan singkatan dari Wadah Informasi Catatan Aspirasi dan Rating Akademik.


      Cerita Awal Pengembangan

      Awalnya, kami melihat banyak laporan barang hilang yang ujung-ujungnya nggak jelas kabarnya. Belum lagi soal ruangan yang rusak atau pelayanan yang kurang memuaskan. Dari situ kami berpikir: “Kita kan anak TI, masa nggak bisa bikin solusi?”

      Akhirnya kami memutuskan untuk membuat aplikasi mobile menggunakan Flutter karena enak dipakai, tampilannya modern, dan bisa jalan di banyak perangkat. Fitur awal yang kami bangun fokus ke tiga hal utama:

      1. Lapor fasilitas rusak
      2. Laporan barang hilang
      3. Rating pelayanan kampus (misalnya poliklinik di kampus)

      Mengenal Flutter Secara Ringan

      Alasan kenapa kami memilih Flutter sebagai tools yang kami pakai untuk membangun sistem WICARA adalah cross-platform sehingga aplikasi bisa di deploy ke android and ios. Kemudian banyak sekali library yang sudah menyiapkan widget atau UI yang sudah siap pakai. Terakhir, karena komunitas Flutter merupakan komunitas yang besar sehingga ketika kami menghadapi masalah atau perlu melakukan debugging kami mudah untuk mencari referensi atau jawaban atas masalah yang sedang dihadapi saat pengembangan.


      Tantangan dalam Pengembangan

      Kesulitan dan tantangan yang kami hadapi sepanjang pengembangan adalah pengimplementasian desain antarmuka yang dibuat figma dikonversi ke widget UI di Flutter itu memakan banyak waktu karena dari kami belum ada pengalaman sama sekali menggunakan Flutter jadi kami masih sering kesulitan untuk slicing UI nya.

      Pemanggilan API dan pengiriman data ke server juga sedikit memakan waktu karena perlu adaptasi dengan best practice yang biasanya orang-orang terapkan ketika melakukan pemanggilan API dan pengiriman data ke server.

      Alur atau flow aplikasi atau sistem yang masih berubah-ubah karena perubahan requirement yang masih labil mengakibatkan fase pengembangan menjadi lebih lama karena kami menggunakan Agile.

      Selain itu, kami juga masih belum terbiasa dengan kolaboratif tim jadi masih harus membiasakan dan ini merupakan salah satu faktor yang menjadi penghambat atau tantangan kami saat mengembangkan aplikasi ini.


      Fitur-Fitur Unggulan Wicara

      Fitur-fitur yang kami hadirkan ada 3 yaitu:

      1. Lapor fasilitas yang kurang dengan melapor dengan informasi detail lokasi fasilitas
      2. Lapor barang hilang sehingga kampus bisa menemukan barangnya dan mengembalikan barang ke pemilik
      3. Rating unit kampus seperti poliklinik

      Fitur-fitur ini cukup untuk MVP aplikasi kami sehingga bisa menyelesaikan permasalahan utama dan yang umum terjadi di lingkungan kampus kami.


      Harapan & Pengembangan ke Depan

      Keinginan dan harapan kami dari aplikasi atau sistem yang kami buat ini agar bisa benar-benar membantu kampus bisa semakin lebih baik dan juga berkembang sehingga bisa membuat orang-orang di kampus menjadi lebih nyaman dengan hadirnya aplikasi yang kami buat.


      Penutup

      Kiranya melalui pengalaman saya mengenai membangun sistem menggunakan platform Flutter yang saya bagikan disini bisa menginspirasi teman-teman untuk bisa mengembangkan aplikasi atau sistem dengan dasar adanya kebutuhan dari masyarakat kampus. Mewujudkan aplikasi bisa melalui tools Flutter yang ramah sekali untuk pemula karena aplikasinya ketika jadi bisa didistribusikan ke android maupun ios sehingga bisa mengurangi biaya dan mempercepat proses pengembangan aplikasi yang teman-teman bikin biar bisa memberikan dampak dan kontribusi nyata ke masyarakat kampus maupun masyarakat luas di sekitar teman-teman.

    • Membangun Aplikasi “Leader Election App” Menggunakan Laravel sebagai Full Stack Framework


      Pendahuluan

      Sebagai mahasiswa Teknik Informatika, saya sering mendengar bahwa Laravel adalah salah satu framework PHP terbaik untuk membangun aplikasi web. Namun awalnya, saya masih ragu apakah Laravel cukup kuat untuk menangani full stack development dalam satu framework saja, tanpa harus menambahkan framework frontend lain seperti React atau Vue.

      Di sinilah saya mulai membuat sebuah aplikasi sederhana yang saya beri nama Leader Election App, dengan tujuan membuktikan bahwa Laravel tetap bisa menjadi pilihan tepat untuk membangun aplikasi fullstack yang dinamis sekaligus powerful.


      Apa itu Leader Election App?

      Secara sederhana, aplikasi ini digunakan untuk melakukan pemilihan ketua dalam suatu organisasi. Pengguna bisa login, melihat kandidat, dan memberikan suara. Sistem kemudian akan menyimpan hasil suara dan menampilkan ringkasan hasil pemilihan jika waktu pemilihan sudah habis.

      Walaupun terdengar sederhana, di dalamnya ada fitur-fitur penting seperti manajemen user, otorisasi, CRUD data, dan pengolahan data di dashboard.


      Kenapa Saya Memilih Laravel sebagai Fullstack?

      Saat mulai merancang aplikasi ini, saya mempertimbangkan beberapa poin seperti:

      • Laravel itu sudah menyediakan Blade templating yang berarti kita bisa bikin frontend yang dinamis dengan mudah
      • Authentication sangat mudah disetup (menggunakan Laravel Breeze/Jetstream atau manual)
      • Arsitekturnya rapi dan mudah dipahami (MVC -> Model View Controller)
      • Dokumentasi Laravel yang sangat lengkap sehingga cocok untuk pemula
      • Banyak fitur bawaan dan library yang menghemat waktu development

      Jadi, dengan satu framework saja saya bisa mengatur routing, logic bisnis, database, dan tampilan. Itu sangat membantu saya memahami alur aplikasi dari ujung ke ujung.


      Proses Pengembangan

      Di awal pengembangan, saya langsung setup projek Laravel dan mulai dari menambahkan autentikasi pada user. Tantangan pertama saya disini adalah memahami alur request dari View -> Controller -> Model -> Database, begitu juga ketika memahami alur response yang mulai dari Database -> Model -> Controller -> View.

      Di tahap in saya banyak melakukan trial and error terutama dalam:

      • Mendesain migrasi database
      • Setup rute dan controller
      • Membuat view dengan menggunakan Blade template engine

      Terkadang saya membuat beberapa kesalahan yang sempat terulang beberapa kali yaitu lupa untuk cache seperti caching route, view, dll sehingga membuat aplikasi terasa lambat.


      Fitur-Fitur Utama yang Dibangun

      • Autentikasi pengguna: login & register
      • Role user sederhana: admin dan user biasa
      • CRUD kandidat: admin bisa menambah/mengedit kandidat
      • CRUD voter: admin bisa menambah dan menghapus voter
      • Voting: user memberikan pilihan secara langsung
      • Dashboard hasil pemilihan: menampilkan total suara dan ringkasan kandidat

      Fitur ini saja sudah memberikan gambaran lengkap tentang bagaimana backend dan frontend saling terhubung di Laravel.


      Arsitektur & Flow Sederhana

      Secara garis besar, alurnya seperti ini:

      • User mengakses halaman Blade
      • View mengirim request ke Route
      • Route memanggil Controller
      • Controller mengolah data via Model ke Database
      • Controller mengembalikan data ke View
      • Tampilan diperbarui secara dinamis

      Dengan alur MVC ini, saya belajar pentingnya pemisahan logika aplikasi dan antarmuka.


      Tools & Teknologi yang Digunakan

      • Laravel (Framework utama)
      • Blade Template Engine
      • Tailwind untuk tampilan UI yang cepat dan responsif
      • MySQL sebagai database
      • Git & GitHub untuk version control

      Hasil Akhir

      Saya berhasil membangun aplikasi e-voting yang berfungsi dari awal hingga akhir. Pengguna bisa login dan voting, kemudian dari sisi Admin bisa menampilkan hasil ringkasan jumlah suara yang terkumpul untuk masing-masing kandidat. Projek ini menjadi pengalaman berharga dalam memahami konsep fullstack web development.


      Penutup

      Melalui projek ini, saya belajar bahwa kita tidak harus ahli dulu untuk mulai membangun aplikasi atau sistem, kita justru menjadi ahli ketika kita berani untuk memulai.

      Saya berharap cerita ini bisa menginspirasi teman-teman yang masih ragu memulai projek menggunakan Laravel. Framework ini sangat ramah pemula, tapi tetap kuat untuk membuat aplikasi yang siap dipakai secara produksi.

    • Pengalaman Pertama Kali Terjun di Multimedia Operator


      Pendahuluan

      Saya awalnya berpikir bahwa dunia multimedia operator itu hanya sekedar menyiapkan PPT dan menayangkan PPT tersebut ke layar proyektor… Ternyata saya banyak keliru, ternyata dunia multimedia operator lebih luas daripada mensetup PPT dan menayangkannya di layar proyektor.


      Isi

      Dunia multimedia operator itu cakupannya luas, mulai dari yang sederhana membuat PPT hingga setup untuk live streaming menggunakan aplikasi OBS dan Zoom yang disambungkan ke platform Youtube, setup audio mulai dari mic, mixer, hingga menyambungkannya ke komputer dan mengirimkannya ke Youtube, setup kamera dari misalnya handycam atau jenis kamera lainnya yang nanti disambung ke komputer dengan menggunakan alat HDMI video capture yang ujung-ujungnya tersambung ke OBS dan ditampilkan di Youtube. Belum lagi membuat animasi-animasi yang biasanya ditayangkan sebagai opening atau closing sebuah acara.

      Disini saya awal-awal belajar untuk setup live streaming ibadah gereja saya tiap minggu yang dibantu oleh teman-teman multimedia operator yang sudah jago mengoperasikan live streaming ibadah gereja saya. Saya dibantu mulai dari setup template PPT yang akan ditampilkan, kemudian belajar mengoperasikan OBS seperti transisi antar scene ketika berada di sesi ibadah yang berbeda, kemudian membuat thumbnail live Youtube di Canva.


      Penutup

      Sejauh ini saya hanya baru belajar hingga live streaming ini saja, sekarang belum ada waktu untuk menelusuri atau explore ke dunia peraudioan atau bidang multimedia operator yang lain tapi bagiku yang masih baru menguasai setup live streaming ini saja sudah sangat membantu sekali bagiku jika semisal saya diminta untuk menjadi operator live streaming di suatu acara tertentu di luar acara atau kegiatan di gereja atau bahkan ketika saya ingin melakukan live streaming di channel Youtube saya pribadi.

    • Alasan Suka dengan Coding


      Pendahuluan

      Saya awalnya suka coding itu bukan tanpa alasan tapi karena saya mempunyai satu tujuan atau goal tertentu yang itu sebenarnya menjadi goal atau milestone sepanjang hidup saya.


      Isi

      Rasa untuk suka coding itu tumbuh ketika saya masih berada di kelas 11 semester 2 di tahun 2022 silam. Pada saat itu saya ditawari oleh guru prakarya saya untuk mengikuti seleksi KSN (Kompetisi Sains Nasional) bidang komputer atau informatika di tingkat kabupaten/kota (iya benar guru prakarya saya yang menawari saya untuk ikut KSN informatika wkwk, mungkin guru prakarya saya dulu merupakan lulusan dari jurusan teknik komputer atau teknik informatika atau sejenisnya).

      Pada saat itu saya ditawarinya 2 atau 3 minggu sebelum waktu hari-H pelaksanaan seleksi, disitu saya benar-benar bingung, kewalahan, dan tidak punya arah apa yang harus dipersiapkan dan dipelajari seperti dasar-dasar pemrograman seperti variabel, percabangan if-elseif-else, perulangan for dan while loop, fungsi, dan algoritma-algoritma lain yang dibutuhkan untuk bisa menjawab soal-soal yang ada di seleksinya. Selain itu juga di sekolah saya tidak ada yang mengajari dan membimbing jadi ya yang dipanggil atau ditawari untuk berpartisipasi di seleksi itu harus belajar mandiri entah dari tutorial youtube atau dari sumber lainnya seperti buku atau artikel di internet.

      Singkat cerita, pelaksanaan seleksi telah berakhir dan pengumuman dikeluarkan dari penyelenggara KSN dan seperti dugaan saya sebelumnya bahwa saya tidak maju atau lolos ke babak berikutnya yaitu seleksi di tingkat provinsi, ya maklum namanya tidak ada persiapan sama sekali dan tidak ada yang mendampingi selama persiapan itu jadi saya tidak terlalu berharap banyak.

      Namun, dari situ saya ada keinginan untuk menjadi programmer yang handal dan juga ingin bisa menaklukan soal-soal yang ada di seleksi KSN/OSN Informatika maupun kompetisi pemrograman lainnya. Awalnya saya mulai belajar pemrograman dengan mengambil salah satu bahasa pemrograman yang populer untuk belajar dasar pemrograman seperti bahasa Java saat saya kelas 12 semester 2 menjelang ujian praktek dan ujian akhir sekolah.


      Penutup

      Hingga saat ini saya terus belajar mengenai Competitive Programming (atau biasanya orang-orang memanggil dengan istilah CP) yang berisi mengenai kompetisi untuk menyelesaikan soal-soal pemrograman yang terus aktif populer hingga saat ini (populer di kalangan teman-teman SMA dan kuliah, tapi tidak menutup kemungkinan juga teman-teman SMP saat ini ada yang sudah mulai berminat ke bidang ini). Jadi goal atau milestone di Competitive Programming yang ingin saya capai adalah saya bisa mencapai peringkat yang tinggi di beberapa platform Competitive Programming seperti Codeforces dan AtCoder sekaligus saya juga ingin menjadi coach untuk SMA saya sendiri untuk bisa mengembangkan minat dan bakat teman-teman yang tertarik ke bidang ini dan juga membawa mereka agar bisa membanggakan SMA mereka dan menorehkan prestasi yang gemilang.

    • Alasan Masuk ke Teknik Informatika


      Sebenarnya alasan saya masuk ke teknik informatika dan masuk ke dunia IT itu pada dasarnya awalnya tidak jauh-jauh dari karena adanya keinginan untuk menjadi programmer yang handal yang bisa membuat kode dan algoritma yang bagus haha, tapi di sisi lain saya melihat di dunia IT itu kesempatan mencari pundi-pundi uang itu sangat tidak terbatas hanya pada kerja di kantor, tapi bisa juga mencari uang dari freelancer atau kerja remote dengan perusahaan atau client yang berada jauh dari tempat kita tinggal di Indonesia maupun di mancanegara.

      Selain karena alasan yang saya sebutkan sebelumnya saya juga tertarik dengan banyaknya bidang di dunia IT yang sangat luas ini mulai dari bidang software yang membuat aplikasi dengan basis web yang sudah sangat populer saat ini kemudian ada aplikasi berbasis desktop yang biasanya digunakan di kantor maupun di sekolah-sekolah dan aplikasi berbasis perangkat bergerak atau mobile yang belakangan ini marak-maraknya bermunculan, kemudian ada bidang network yang membahas mengenai jaringan komputer, bagaimana komputer bisa berkomunikasi dengan komputer lainnya hingga ke bagaimana kita mengakses web seseorang yang disetup oleh web server seperti Apache dan Nginx.

      Sebenarnya masih banyak lagi bidang yang ingin saya sebutkan disini yang masuk ke dunia IT tapi dari beberapa alasan sebelumnya yang sudah saya sebutkan itu sudah meyakinkan saya untuk masuk ke teknik informatika, disitu saya bisa belajar banyak hal mulai dari membuat dan mendesain software dan database yang efisien, arsitektur komputer, setup jaringan komputer hingga setup layanan komputasi awan, AI/ML (Artificial Intelligence/Machine Learning) yang sekarang sedang populer-populernya sehingga hal-hal yang saya pelajari ini harapannya bisa menjadi bekal saya untuk menjadi seseorang yang bisa beradaptasi hingga jangka panjang di dunia IT dan juga bisa membawa perubahan yang bermakna bagi orang-orang atau masyarakat sekitar, karena ilmu yang kita punya tidak akan berguna jika kita ujung-ujungnya tidak bisa membawa perubahan atau manfaat positif bagi masyarakat sekitar kita.

    • Pengalaman menjadi Penanggung Jawab di Proker Pertama PECC


      Pendahuluan

      Kalau bicara pengalaman pertama saat berorganisasi (lebih tepatnya di proker) bisa dibilang aku agak “ngelompat” karena aku berpikirnya mungkin aku jadi anggota di sebuah Sie di proker pertama yang aku ikuti di PECC, tapi ternyata aku ditempatkan jadi Penanggung Jawab atau biasa disingkat dengan PJ di Sie perlengkapan wow. Jujur bagiku agak sedikit shock mendengar pengumuman itu saat dishare informasi itu di grup besar PECC haha. Kebetulan pada saat itu prokernya mengenai rapat tahunan atau Annual Meeting yang membahas mengenai agenda apa saja yang akan dilaksanakan selama 1 periode ke depan di PECC.


      Isi

      Ini juga pertama kalinya aku menjadi PJ dan saya tidak punya pengalaman apapun mengenai PJ, tapi saya pada saat itu langsung inisiatif membuat grup untuk Sie perlengkapan dan mulai untuk membagikan jobdesk ke teman-teman anggota saya di Sie yang sama, mulai dari pembagian jobdesk peminjaman alat, melihat atau survei kondisi tempat atau ruangan yang akan dijadikan tempat pelaksanaan proker, menjadi operator di hari-H, menjadi runner pembawa mic dan juga baterai, dll.

      Setelah pembagian jobdesk, masing-masing dari kami langsung eksekusi persiapan perlengkapan untuk proker rapat tahunan ini. Di sini saya bertugas untuk mengecek apakah semua barang atau perlengkapan yang diperlukan sudah siap semua atau belum dan juga kemudian menjadi operator PPT.

      Kemudian sebagai bagian dari persiapan kami dari Sie perlengkapan, kami juga mengikuti rapat besar yang diinisiasi dari ketua pelaksana atau yang biasa dipanggil ketuplak. Biasanya rapat besar diadakan setelah 2 minggu pertama turunnya kepengurusan proker dan 1 minggu terakhir sebelum hari-H proker.

      Puji Tuhan di hari-H semuanya berjalan lancar mulai dari peminjaman alat seperti palu sidang dan alat proyektor, menyusun layout sidang (seperti meja dan kursi untuk presidium dan peserta sidang), PPT tidak ada kendala ketika ditampilkan di proyektor, dan tidak ada kendala lain yang diluar kendali kami sebagai Sie perlengkapan.

      Setelah semua rangkaian proker rapat tahunan ini selesai mulai dari persiapan dan pelaksanaan proker, tentu kami selalu mengadakan evaluasi untuk melihat apa yang perlu diperbaiki dan kesalahan apa yang tidak boleh terulang di proker selanjutnya.


      Penutup

      Bagiku ini pengalaman yang sangat mengubah sebagian hidupku, disini aku belajar untuk bisa menjadi pemimpin kecil yang memimpin sebuah kelompok dengan bijaksana dan juga tidak berlebihan maupun arogan dalam bekerja sama dengan anggota Sie-ku sehingga jobdesk yang dikerjakan bisa selesai dan terpenuhi semua dengan baik dan tanpa adanya hambatan yang begitu signifikan.

    • Persiapan Menjadi Operator di Proker Hection 12.0


      Pendahuluan

      Saya sebelum masuk sebagai anggota UKM PECC (Polytechnic English Conversation Club) memang sudah menjadi seorang yang handal dalam bidang operator seperti menampilkan PPT, mengatur Gmeet/Zoom, setting OBS, maupun setting audio. Alasan itu yang membuat ketua pelaksana (atau biasanya yang disingkat menjadi ketuplak) memilih saya sebagai penanggungjawab atau PJ operator untuk proker Hection 12.0 di tahun 2025 ini. FYI saja Hection merupakan lomba atau kompetisi di bidang Bahasa Inggris yang mencakup beberapa kategori lomba seperti storytelling, debate, newscasting, dan essay writing.


      Awal proker Hection turun

      Proker (Program Kerja) Hection 12.0 itu turun di bulan jika tidak salah ingat di bulan September atau Oktober 2024 kemarin dan pada saat setelah proker ini turun pun dari tim/divisi operator dan juga perlengkapan memang belum terlalu banyak tugas di awal-awal. Jadi, ketika divisi operator dan perlengkapan ketika ditanya progress mengenai persiapan Hection ya tidak memaparkan progress apapun.


      Progres di tengah proker

      Di tengah persiapan proker Hection ini pun, UKM PECC juga sambil melakukan rekrut atau regenerasi anggota untuk periode selanjutnya sehingga anak magang yang sedang dalam proses rekrut ini juga diikutkan dalam persiapan proker Hection ini. Selain saya harus mempersiapkan keperluan operator untuk Hection, di sisi lain saya juga harus membantu anak magang ini untuk bisa aktif dan berkontribusi di jobdesk nya mereka yaitu di divisi operator dan perlengkapan. Jujur agak capek tapi worth it lah effortnya karena bisa sambil belajar untuk menerangkan atau menjelaskan beberapa teknik dan konsep yang biasanya terpakai di dunia operator.


      Persiapan beberapa minggu sebelum hari-H

      H-2 hingga h-1 bulan ini yang merupakan fase-fase paling pusingnya para panitia proker Hection ini (termasuk saya juga sebagai penanggung jawab dari tim atau divisi operator). Saya sebagai operator di tahap atau fase ini mulai untuk aktif mempersiapkan seperti setup PPT, Zoom, OBS, dan audio untuk keperluan Technical Meeting (TM) di semua kategori lomba, kemudian juga harus menyiapkan di babak awal-awal sebelum memasuki babak final. Di sisi lain, saya juga harus mempersiapkan setup operator di gedung MST dan ruang auditorium gedung sekolah satu lantai 3 untuk sesi babak final offline nya.

      Jujur di tahap ini semuanya serba susah mulai dari cara setup mic dan audio agar bisa sinkron di offline maupun onlinenya karena untuk babak final ini sendiri tidak semua peserta dari semua kategori lomba bisa datang karena ada beberapa kategori lomba tidak meminta untuk datang secara offline seperti kategori debate dan newscasting. Di situ saya tidak terlalu khawatir sekali karena ada teman dari divisi perlengkapan yang juga siap membantu saya di saat itu untuk keperluan menyewa peralatan operator seperti kabel HDMI yang panjang, HDMI converter, kamera untuk kebutuhan real time monitoring acara dari on-site dishare ke platform Zoom.


      Saat acara hari-H

      Penyelenggaran dari tim atau divisi operator untuk babak-babak awal yang online memang tidak terlalu menguras pikiran dan tenaga saat mempersiapkan dan juga pelaksanaannya sehingga berjalan dengan mulus sepanjang 2 hari itu.

      Namun, masalah sebenarnya ketika di babak finalnya saat on-site di gedung MST dan ruang auditorium gedung sekolah satu lantai 3. Karena di saat itu kami dari tim operator dan perlengkapan belum paham betul mengenai skema menyiapkan sesi offline nya dan dari tim operator dan perlengkapan belum ada pengalaman yang bisa menghandle kasus ini sehingga semampunya saja saat mempersiapkan bagian operatornya.

      Hal yang membuat susah disini sebenarnya karena kita harus memikirkan bagaimana caranya agar peserta yang ikut online bisa mengikuti acara yang dilaksanakan offline nya. Kendala terpusat di setup audio karena jujur memang ribet sekali setup nya, termasuk saat setup kameranya karena terkendala di sisi baterai harus sering-sering ganti kamera dan tidak bisa dicas atau discharge saat sedang dipakai.


      Penutup

      Setelah proker Hection 12.0 ini selesai, ada banyak sekali ilmu yang saya dapatkan dari partisipasi sebagai penanggung jawab atau PJ di tim atau divisi operator. Di sini saya belajar banyak hal tentang time management, mengajarkan anak magang menjadi operator yang baik dan handal, belajar kasus baru mengenai setup audio agar bisa sinkron di online Zoom maupun offline nya di tempat, kemudian terakhir saya belajar mengenai manajemen risiko. Pengalaman di Hection kemarin benar-benar sangat membekas di saya karena proses persiapan yang panjang dan juga susah senangnya ketika menjelang di beberapa minggu terakhir persiapannya dengan teman-teman panitia lain yang sama-sama juga memperjuangkan agar proker Hection 12.0 ini bisa berjalan dengan sukses.

    • Perjalanan Diterima Sebagai Anggota di PECC


      Pendahuluan

      Di tahun 2023, saat saya maba (mahasiswa baru) saya tertarik dengan organisasi atau UKM PECC (Polytechnic English Conversation Club) karena di situ mereka menawarkan beberapa benefit ketika join di UKM itu yang dimana mereka menyebutkan kita bisa meningkatkan skill english kita dengan drastis. Jadi ketika UKM PECC mengadakan kegiatan open house saya otomatis ikut mendaftar kegiatan itu untuk melihat secara sekilas UKM PECC itu isinya seperti apa.

      Setelah mengikuti open house di sini saya langsung ikut ke program magang yang diselenggarakan oleh UKM PECC yang berlangsung dari bulan oktober 2023 hingga mei 2024 yang jujur bagiku itu lama banget haha, tapi ya sudahlah namanya proses memang harus dijalani dengan ikhlas dan tekun.


      Beberapa bulan pertama magang

      Untuk magang sesi 1 itu saya awal-awal harus memilih terlebih dahulu departemen yang ingin saya pilih, yaitu departemen Debate dan Public Speaking karena disitu saya ingin meningkatkan kemampuan dalam berdebat dan juga berbicara di depan banyak orang dengan menggunakan bahasa inggris. Setelah itu saya dipetakan ke kelompok dan kemudian setiap kelompok itu harus mengerjakan tugas yang diberikan dari 2 departemen, seingat saya dulu kelompok saya diberi tugas yang diberikan dari departemen Debate dan HRD tapi saya tidak terlalu ingat detail tugasnya seperti apa.

      Di awal-awal magang ini saya mengikuti kegiatan seperti pengenalan tiap masing-masing divisi di UKM PECC. PECC terbagi menjadi beberapa 4 kategori departemen, yaitu Daily Officer seperti Leader (ketua umum), Secretary (sekretaris), dan Treasurer (bendahara), kemudian ada Daily Class yang mencakup Grammar, Debate, Public Speaking, Conversation, dan Movie and Storytelling, kemudian ada Support yaitu yang mencakup HRD, Public Relation (humas), dan Household (rumah tangga).

      Setelah rangkaian-rangkaian acara sebelumnya selesai, UKM PECC ada agenda berupa interview 1 online untuk melakukan filtering kandidat-kandidat anak magang mana yang mempunyai komitmen untuk bisa lanjut ke sesi magang selanjutnya, jika tidak salah jadwal interview 1 itu di bulan desember dan disitu minimal harus bilingual tidak boleh full bahasa indonesia. Saat interview 1 ini saya cukup percaya diri untuk menjawab pertanyaan dari interviewer dan Puji Tuhan sesi interview 1 bisa berjalan dengan lancar tanpa adanya hambatan internet maupun dari internal diri sendiri.

      Setelah 1 atau 2 minggu dari sesi interview 1 itu, saya diberi kabar dari pihak PECC bahwa saya lolos dari interview 1 dan melanjutkan ke magang sesi 2 yang dilaksanakan di januari 2025.


      Beberapa bulan terakhir magang

      Magang sesi 2 berlangsung tepat memasuki tahun 2026 yang dimana itu saya ditempatkan di departemen atau divisi Debate untuk magang sesi 2 ini dan saya diminta untuk menjadi moderator untuk kompetisi debat untuk proker Hection 11.0 di awal Februari (saya lupa tanggal persisnya kapan). Jadi mekanismenya itu ada beberapa teman-teman yang ditempatkan di departemen atau divisi yang sama seperti saya di departemen Debate dan mereka juga menjadi moderator karena peserta yang ikut kompetisi debat nya banyak jadi juga banyak yang ditempatkan magang di departemen Debate ini.

      Di saat itu saya diminta untuk ikut gladi kotor dan gladi bersih persiapan menjadi operator di basecamp atau posko PECC tiap 1 minggu sekali dan Puji Tuhan berjalan dengan lancar hingga hari-H lomba atau kompetisinya selesai. Di sisi lain juga saya agak kewalahan dengan permintaan dari kakak-kakak anggota PECC yang pada saat itu sedang menjabat untuk melakukan semacam paid promote maupun kuesioner dari permintaan divisi sponsor untuk menambah biaya persiapan kompetisi Hection 11.0 itu haha.

      Setelah menjalani menjadi moderator di Hection 11.0 ini saya diminta untuk ikut atau menghadiri pemilihan Leader atau ketua umum baru untuk PECC periode selanjutnya dan yang menjadi ketua umum berikutnya yaitu kak Pinasthi. Setelah agenda pemilihan ketua umum ini saya ada agenda terakhir di magang sesi 2 ini yaitu interview 2 yang dimana dilaksanakan bulan April jika tidak salah, disitu yang berbeda dengan interview 1 sebelumnya itu interview 1 dilaksanakan online sedangkan interview 2 dilaksanakan offline dan disitu saya jujur gugup sekali saat melakukan proses interview nya karena ini merupakan pengalaman pertama saya dalam hal interview secara langsung di tempat, tapi Puji Tuhan sesi interview bisa berjalan dengan lancar sampai akhir tanpa ada kendala yang signifikan.

      Selang beberapa waktu kemudian saya diberitahu mengenai pengumuman siapa yang berhasil lolos dari interview 2 dan menjadi anggota di PECC atau di PECC bahasanya pakai kata “Officer”. Di situ saya sangat senang sekali ternyata usaha saya selama sesi magang 1 dan 2 kemarin tidak sia-sia dan membuahkan hasil yang menakjubkan. Tepat setelah pengumuman itu saya masih ada 1 agenda terakhir yaitu sertijab (serah terima jabatan) sebagai agenda resmi untuk memindahkan jabatan dari kepengurusan sebelumnya ke pengurus yang sekarang di angkatannya saya. Saat sertijab ternyata saya dimasukan sebagai anggota di divisi rumah tangga atau Household di kategori Support, sebenarnya agak kecewa sedikit karena saya inginnya masuk ke divisi Debate tapi ternyata tidak kesampaian, tapi tidak apa-apa saya tetap bersyukur sudah diterima di PECC. Jadi, oleh karena itu di saat itu saya tetap mengusahakan yang terbaik untuk setiap tugas dan kewajiban yang diberikan kepada saya selama 1 periode pengurusan di PECC.


      Penutup

      Tidak terasa bahwa hampir 2 semester saya mengikuti proses magang keseluruhan di PECC dan dengan tekad dan usaha yang kuat Puji Tuhan saya akhirnya bisa diterima di organisasi PECC yang merupakan organisasi impian saya karena disini saya bisa banyak belajar mengenai kebahasainggrisan dan bisa menambah relasi juga dengan teman-teman di luar prodi maupun jurusan saya di Politeknik Negeri Semarang. Jika teman-teman juga sedang menjalani proses yang sama seperti saya ini, teman-teman harus mempunyai komitmen dan tekad yang kuat sehingga teman-teman bisa menjalani semua proses tersebut dengan kuat dan tanpa ada beban sehingga impian dan mimpi teman-teman bisa terwujud agar bisa bergabung di organisasi impian teman-teman.

    • Python: Bahasa Pemrograman yang Membuka Pintu ke Dunia Data dan AI

      Sintaks sederhana, kemampuan luar biasa


      Pendahuluan

      Python menjadi pilihan favorit bagi pemula maupun profesional karena kesederhanaan sintaksnya. Namun, kesederhanaan itu bukan berarti terbatas. Justru Python dikenal sangat kuat dalam bidang kecerdasan buatan, data science, dan automasi proses.


      Isi

      Keunggulan utama Python terletak pada filosofi desainnya: membuat kode yang mudah dibaca dan ditulis. Hal ini membuat learning curve lebih ramah bagi orang yang baru terjun ke pemrograman.

      Di sisi teknis, Python memiliki ekosistem library yang sangat luas, seperti:

      • NumPy & Pandas → analisis data
      • TensorFlow & PyTorch → machine learning & deep learning
      • Django & Flask → web development
      • Selenium → automasi task berbasis web

      Dengan dukungan komunitas global yang besar, Python terus berkembang menjadi bahasa yang relevan di berbagai industri, mulai dari kesehatan, finansial, hingga teknologi tinggi seperti AI dan robotik.


      Kesimpulan

      Python membuktikan bahwa bahasa pemrograman tidak harus rumit untuk menjadi kuat. Siapa pun yang ingin berkecimpung di bidang teknologi modern—terutama data dan AI—akan mendapatkan banyak peluang dengan menguasai Python.