Pengalaman Setup Printer Canon G2010 untuk Mac dalam Jaringan

1. Setup Awal: Wavlink + Windows = Lancar Jaya

Awalnya, printer Canon G2010 saya terhubung ke jaringan lokal menggunakan print server Wavlink. Di lingkungan Windows, semuanya berjalan mulus: printer terdeteksi otomatis, driver tersedia, dan proses cetak berlangsung cepat tanpa hambatan. Ini solusi ideal untuk rumah atau kantor kecil yang ingin berbagi printer tanpa harus colok langsung ke satu komputer.

2. Masuk Mac: Driver Ada, Tapi Lemot dan Gagal

Masalah muncul saat mencoba mencetak dari MacBook. Saya menambahkan printer lewat System Preferences → Printers & Scanners, memilih driver Canon G2000 series (karena G2010 tidak muncul). Awalnya, printer bisa menerima job dan mulai mencetak. Tapi…

  • Proses cetak sangat lambat
  • Sering berhenti di tengah jalan
  • Kadang hang total dan harus restart printer

Setelah frustrasi berkali-kali, saya cek langsung ke situs resmi Canon — dan ternyata: Canon G2010 memang tidak mendukung macOS secara resmi. Tidak ada driver native, dan solusi workaround tidak stabil.

3. Jalan Alternatif: CUPS + Raspberry Pi

Karena saya sudah punya Raspberry Pi yang standby di jaringan, saya coba eksperimen: jadikan Pi sebagai print server berbasis CUPS (Common Unix Printing System).

Langkah-langkahnya:

  • Install CUPS di Raspberry Pi:bashsudo apt update && sudo apt install cups printer-driver-gutenprint
  • Tambahkan user ke grup lpadmin dan aktifkan sharing
  • Akses web interface CUPS di http://raspberrypi.local:631
  • Tambahkan printer Canon G2010 menggunakan driver dari Gutenprint

Hasilnya?

  • Printer bisa ditambahkan ke Mac via IPP (Internet Printing Protocol)
  • Proses cetak berhasil sampai selesai
  • Masih agak lambat, tapi jauh lebih stabil dibanding metode sebelumnya

Membaca Grafik Pemantauan PLTS

Ini adalah grafik pemantauan PLTS hari kedua. Maksudnya hari kedua setelah panel dipasang. Karena sebelum dipasang panel, grafik load DC SCC tidak ada isinya.

Grafik voltase menunjukkan sekitar jam setengah 6 pagi sudah ada arus dari panel ke baterai walaupun nilainya masih sangat kecil. Tapi paling tidak jam segitu voltase sudah mampu masuk ke baterai.

Pada grafik current atau arus pada SCC, terlihat bahwa pada waktu yang sama saat voltase naik, arus juga naik. Nilainya bertahap naik sampai puncaknya sekitar jam 10 sebesar 27-30 Amper. Setelah jam ini, grafik arus naik turun karena cucaca memang sedang mendung. Kemudian mendekati jam 12 siang arus drop ke level sekitar 4 amper seperti jam 6 pagi karena hujan lebat turun. Disini bisa dilihat bahwa walaupun hujan, panel surya masih bisa menghasilkan arus untuk tetap mengisi baterai atau pemakaian langsung.

Kita beralih ke grafik Battery Current, ada dua hal yang bisa kita ceritakan. Yang pertama saat inverter mulai aktif, arus mulai naik sesuai dengan pemakaian. Sebelumnya kosong memang inverter belum aktif dan arus listrik dipenuhi oleh PLN. Kemudian ada kenaikan drastis hingga 15 Amper ini saat AC 1/2 pk dinyalakan.

22 Oct 2025

PLTS Status Pagi Hari Ini

Baterai PLTS semalem tidak sampai pagi, karena kemarin hujan penuh dari jam 12 siang. Bisa dilihat pada grafik di bawah. Inverter aktif mulai jam sekitar 11 siang kemarin sampai jam 4 pagi tadi.

Pada grafik diatas, pada jam 4 pagi, voltase pada Load AC PLTS, naik tajam dan memiliki karakteristik grafis yang sama dengan voltage pada Load AC PLN. Pada waktu ini inverter mulai mengaktifkan sistem bypass PLN, sehingga sistem kelistrikan menggunakan jaringan PLN karena baterai sudah tidak sanggup menyuplai kebutuhan energi.

Voltase yang dikeluarkan oleh inverter juga terlihat lebih stabil di angka 220 volt. Berbeda dengan voltase dari PLN yang berfluktuasi naik turun. Hal ini bisa dipahami karena memang yang menggunakan listrik PLN ada banyak rumah yang pemakaiannya juga berfluktuasi.

Analogi yang sama juga pada air PDAM, kadang kenceng tapi kadang juga lemah tergantung waktu pemakaian. Pagi hari biasanya air lemah karena banyak yang pakai. Sedangkan malam atau siang hari kencang karena jarang orang yang pakai air.

Kediri, 22 Okt 2025

Dockerfile untuk Ci4 dengan Composer

Dengan case ingin menjalankan composer didalam container php dengan apache

FROM php:8.1-apache

# Install dependencies
RUN apt-get update && apt-get install -y \
    libicu-dev \
    libpq-dev \
    unzip \
    curl \
    zip \

# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- \
    && mv composer.phar /usr/local/bin/composer

# Aktifkan ekstensi PHP Intl 
RUN docker-php-ext-install intl mysqli pdo pdo_mysql

# Aktifkan mod_rewrite Apache
RUN a2enmod rewrite

# Restart Apache agar perubahan berlaku
RUN service apache2 restart

p9, 2 Oct 2025

Migrasi Android dari API 28 ke API 35: Menghadapi Dependency yang Saling Menggantung

Saya menghadapi sesuatu proses pekerjaan yang mesti dilakukan tapi cukup malas dan menunda untuk dikerjakan. Agak malas karena ngerjain satu hal tapi harus mengerjakan yang lain juga. Kesalahan di satu hal bisa merembet ke yang lain, begitu juga sebaliknya. Proses ini adalah upgrade API level android dan gradle.

Google kini mewajibkan minimal target API level 35 untuk aplikasi yang ingin dirilis atau di-update di Play Store. Bagi banyak developer yang masih bertahan di API 28, migrasi ini bukan sekadar ganti angka—tapi sebuah proses kompleks yang melibatkan dependency, build system, dan refactor kode besar-besaran.

⚠️ Kenapa Migrasi Ini Mendesak?

  • Google Play Policy: Mulai 2025, aplikasi baru dan update harus menargetkan API 35.
  • Banyak aplikasi lama masih di API 28, karena tidak pernah di-update sejak 2019–2020.
  • Perubahan besar di dependency seperti AndroidX, Jetpack, AGP, dan Gradle membuat migrasi tidak bisa dilakukan parsial.

🔄 Tantangan Migrasi: Dependency yang Saling Menggantung

  • Update satu dependency sering memicu error di dependency lain.
  • Banyak library yang sudah deprecated atau tidak kompatibel dengan AGP terbaru.
  • Proses migrasi bisa jadi loop tak berujung kalau tidak dilakukan secara menyeluruh.

🧱 Komponen yang Harus Diupdate Bersamaan

Untuk migrasi yang sukses, kamu harus menyentuh hampir semua lapisan build system:

🔧 File Terkait Gradle & Build System

FileFungsi
build.gradle (project)Versi Gradle Plugin & Kotlin DSL
build.gradle (app)Target SDK, compile SDK, dependency
gradle-wrapper.propertiesVersi Gradle minimum
gradle.propertiesFlag konfigurasi build
libs.versions.tomlManajemen dependency versi modern
settings.gradleKonfigurasi modul dan plugin
AndroidManifest.xmlTarget SDK dan permission yang deprecated
proguard-rules.proPenyesuaian obfuscation untuk library baru

🧹 Refactor Kode: Hadapi Deprecated API

  • Banyak API lama (seperti AsyncTask, getExternalStorageDirectory(), dll) sudah deprecated.
  • Perlu migrasi ke API modern seperti WorkManager, Storage Access Framework, dan ActivityResult API.
  • Gunakan lint dan IDE inspection untuk mendeteksi deprecated usage.

📦 Strategi Migrasi Modular

  1. Audit dependency: Cek versi dan kompatibilitas dengan AGP terbaru.
  2. Update Gradle wrapper dan AGP dulu: Pastikan build system stabil.
  3. Migrasi ke libs.versions.toml: Untuk manajemen versi yang lebih maintainable.
  4. Refactor kode deprecated: Gunakan IDE dan dokumentasi resmi.
  5. Testing bertahap: Gunakan emulator API 35 dan unit test untuk validasi.

🧪 Studi Kasus & Strategi Praktis Migrasi

Untuk menghindari migrasi yang membingungkan dan penuh error, lakukan pendekatan berikut:

  1. Install Android Studio terbaru Pastikan kamu menggunakan versi terbaru agar kompatibel dengan AGP dan SDK level 35.
  2. Buat proyek baru dari template bawaan Gunakan template “Empty Compose Activity” atau “Basic Views” untuk melihat struktur modern.
  3. Review struktur proyek baru Perhatikan versi Gradle, AGP, libs.versions.toml, settings.gradle, dan konfigurasi build.gradle.
  4. Bandingkan dengan proyek lama Identifikasi perbedaan versi, plugin, dan struktur dependency.
  5. Terapkan secara bertahap ke proyek lama Mulai dari update Gradle wrapper, lalu AGP, lalu dependency, lalu refactor kode deprecated.
  6. Gunakan version catalog (libs.versions.toml) Ini akan memudahkan tracking versi dan menghindari konflik antar modul.

Dengan pendekatan ini, kamu bisa belajar dari proyek baru yang sudah sesuai standar modern, lalu menerapkannya ke proyek lama secara sistematis dan minim risiko.

✅ Penutup: Migrasi Bukan Sekadar Update, Tapi Rebirth

Migrasi dari API 28 ke 35 bukan hanya soal memenuhi kebijakan Google, tapi juga kesempatan untuk membersihkan, merapikan, dan memodernisasi proyekmu. Dengan pendekatan modular dan dokumentasi yang rapi, kamu bisa mengubah proses yang menyakitkan jadi investasi jangka panjang.

Kediri, 8 Sep 2025