Salah satu projek saya adalah membuat aplikasi pembelian tiket perjalanan kapal, yang mana salah satu fiturnya adalah mencetak QR code pada tiket perjalanan. Karena saya menggunakan Laravel, maka opsi paling pasti adalah menggunakan package simplesoftwareio/simple-qrcode.

composer require simplesoftwareio/simple-qrcode

Selanjutnya hanya …

Selengkapnya

Sebenarnya saya baru dengar FilamentPHP setelah Laracon yang diadakan beberapa minggu lalu, dan sebenarnya tools sejenis ini ada banyak, tapi yang satu ini cukup menarik.

FilamentPHP adalah eee apa ya istilahnya, kumpulan komponen yang bisa digunakan bersama Laravel framework untuk membuat aplikasi CRUD dengan mudah. Secara teori ini bisa membantu sekitar 80% projek webapp saya.

Sebelumnya saya pernah mencoba Laravel Nova, tools sejenis yang resmi dari Laravel, tapi selain harga yang lumayan, Dari sisi UI agak sedikit kaku. FilamentPHP sebagai alternatif malah lebih superior. UI nya sedap, free, dan lebih simple untuk modifikasi.

Ada beberapa ide projek yang akan saya coba buat menggunakan FilamentPHP ini, sepertinya saya akan coba buat aplikasi personal expense tracker, saya pengen banget bikin sendiri tapi selalu berhenti di awal, mungkin akan dicoba lagi sekalian mencoba FilamentPHP.

Ini sambungan dari proses instalasi Windows 11 kemarin, setelah akhirnya terinstal, berikutnya adalah setup environment buat keperluan kerjaan saya.

Sebelumnya, saya menyempatkan untuk mengeksplorasi dekstop Windows 11 ini, dan ya ini smooth dan memang oke. Saya terakhir kali menggunakan OS Windows itu waktu Windows 7, sekitar 10 tahun lalu, sebelum laptopnya di jual dan beli MacBook pro 2011 dan semenjak itu pakai Mac Os (atau disebutnya OSX dulu itu).

Continue reading “Installing Windows 11, (Part 2)”

Tadinya ingin diberi judul work setup, tapi kebanyakan artikel work setup itu disertai foto setup nya sendiri dan biasanya bagus, tapi karena ini agak biasa saja (AKA tidak begitu menarik), jadi males nge-foto 🙂

Berawal dari laptop MacBook saya yang akhirnya pensiun, saya memutuskan untuk merakit PC untuk menjadi senjata utama saya bekerja.

Macbook Pro 2011

Sebelumnya saya menggunakan MacBook Pro 2011 (ya, 2011, 11 tahun lalu), sebagai daily drive untuk keperluan kerja dan segala kebutuhan komputasi. Selama ini tidak ada masalah sampai beberapa tahun lalu ketika versi terbaru OSX (Mojave) tidak lagi mendukung perangkat ini. Ada banyak masalah dari sisi software yang akhirnya saya memutuskan untuk beralih menggunakan Ubuntu di mesin MBP ini, ternyata jadi lancar sekali, dan proses instalasi juga sudah jauh lebih mudah dibanding Instalasi linux beberapa tahun lalu.

Tapi kemudian masalah di hardware datang, baterai mengalami pergantian yang ke 3, magsafe sudah yg ke 5 atau 6, hardisk sudah diganti dengan SSD, lalu belakangan masalah di monitor, seperti berjamur?, keypad yang sudah terkelupas dan tidak berfungsi sebagian, dan yang terakhir adalah port charger nya sendiri yang tidak bisa berfungsi, sehingga tidak bisa di charge!. Belum termasuk spesifikasi Macbook nya sendiri yang sudah ketinggalan 11 tahun, apalagi jika Docker sudah mulai running, Docker di mac itu lambat dan berat, Docker di macbook 2011 itu luar biasa ahaha (sebenarnya ini sudah jauh lebih ringan ketika beralih ke ubuntu). So saya memutuskan waktunya untuk macbook ini pensiun (ya iyalah).

Rakit PC

Saya memutuskan untuk merakit PC sendiri adalah karena ya sudah keinginan sejak lama punya mesin yang “personal”, bisa pilih spesifikasi sendiri, bisa replace part nya sendiri, tapi jujur saja tidak dalam waktu dekat dan secara tiba-tiba begini (tiba-tiba macbook pensiun) 😀

Karena sebenarnya belum siap untuk rakit PC dalam waktu ini, tapi terpaksa harus punya, maka konsep saya simpel, budget-friendly! haha.

Saya sudah lama tidak mengikuti perkembangan PC, so bagian utama dari proses perakitan ini adalah saya pengen dapet latest Intel, dan saya ketemu Intel i5-11500 yang paling sesuai dengan kebutuhan dan budget. Sebenarnya pengen mencoba AMD tapi entah saya gak pede. Waktu perakitan ini juga generasi 12 belum keluar, jadi versi terbaru yang saya dapat ya gen 11.

Setelah itu RAM, saya sudah lama menganalisa kebutuhan memory RAM di macbook sebelumnya, dan 8GB sudah cukup, tentu saja saya ingin lebih, namun untuk versi awal ini saya tetap menggunakan 8GB DDR4, single, idenya beberapa waktu kedepan akan diupgrade jadi 16GB (8 x 2 slot). RAM ini dari XPG tipe Spectric D50, yang jujur saja, saya baru tau kalau ternyata ini versi RGB, padahal saya lebih prefer yang kalem aja tidak pakai RGB segala, tapi baguslah buat indikator PC lagi nyala haha.

Saya skip untuk VGA card, selain sudah tidak masuk akal harganya, saya juga tidak punya keperluan grafis tinggi, sebagai web developer, dedicated GPU dari processor sudah lebih dari cukup, jadi biaya VGA bisa buat prosesor tadi.

Selebihnya motherboard saya hanya mengikuti yang ada saja, ini dari MSI B560M PRO. SSD comot dari macbook, PC Case sebenarnya pengen yang Mini ITX, tapi agak susah cari nya, karena waktu mepet jadi ya ambil PC case biasa saja. Lalu untuk OS saya pakai Ubuntu 20.04.

Monitor menggunakan Samsung G3 24’, sebenarnya tidak masuk dalam budget karena sudah dibeli 1 bulan sebelumnya untuk keperluan second monitor macbook.

Total biaya bahan semuanya mencapai hampir 7 juta, diluar monitor, dan jujur saja itu sangat sesuai dengan konsep budget-friendly tadi :).

Performa hasilnya luar biasa menurut saya, karena komparasi nya adalah macbook pro 2011, jadi memang kerasa banget perbedaanya haha. Paling nyata itu dari sisi CPU, sebelumnya MBP 2011 hanya dual core, sedangkan PC ini pakai 6 core dengan 12 thread, jauh banget. Berikut link hasil GeekBench https://browser.geekbench.com/v5/cpu/11006439.

Satu hal yang saya rasa terlewatkan itu adalah PSU, saya pikir harusnya bisa pilih yang better lah. PSU yang ada ini cukup baik, tapi hasil dari survey (yang baru dilakukan setelah PC jadi), beberapa brand lain bisa lebih baik, salah satunya dari tingkat kebisingan.

Selain itu, saya masih pengen mini ITX, jadi mungkin nanti juga bakal diganti lah.

Jujur saja, setelah selesai dan ternyata biaya nya hanya ‘segitu’, saya agak menyesal kenapa tidak melakukannya lebih awal, karena perbandingan performa nya ternyata beneran sejauh itu, saya sabar banget yak running Docker di MBP 2011 😀

Beberapa waktu lalu saya merilis sebuah website bernama adukan.id, website yang akan membantu masyarakat untuk melaporkan segala macam bentuk konten negatif yang ada di dunia maya. Tadinya adukan.id saya buat karena ingin melaporkan penipuan via SMS yang begitu marak, beberapa memiliki website yang membuat beberapa orang mungkin mempercayainya. Pada pengembangannya, saya berpikir untuk tidak sampai disitu, tapi juga bisa menjadi tempat aduan “konten negatif” lainnya seperti Hoax, Pornografi dan berbagai macam postingan / foto / website / blog yang mungkin merugikan atau bahkan membahayakan orang lain.

Prosedur pelaporan konten negatif seperti ini sebenarnnya sudah ada, hanya saja agak ribet dan membingungkan. Dengan googling sebentar, akan ada banyak blog yang memberikan cara untuk melaporkan hal tersebut, sebagian besar memberikan saran membuat laporan di Diskominfo, Trust+ Internet Postif, Cyber Crime POLRI, OJK, Operator Layanan Selular bahkan pihak Bank, Ribet!. Dengan adanya adukan.id, prosedur untuk membuat laporan menjadi jauh lebih mudah, karena ya kalau mau buat laporan saja susah, ribet dan bingung bisa jadi makin sedikit orang yang ingin melaporkan sebuah masalah.

Adukan.id membantu prosedur pembuatan laporan menjadi lebih mudah, para pelapor cukup buka website adukan.id, isi form yang tersedia, kelar. Di belakang layar, by system adukan.id akan mengecek, memverifikasi dan memfilter laporan tersebut lalu mengirimkan laporan kepada pihak-pihak yang terkait secara sekaligus! misal untuk sebuah SMS penipuan, maka secara otomatis nomor yang digunakan penipu akan dikirimkan ke Operator Layanan Selular, URL / Website yang ada di SMS bisa di forward ke Internet Positif, dan kalau ada nomor rekening yang digunakan bisa dikirimkan ke pihak OJK dan Bank terkait, dan kalau memang level yang berbahaya, bisa di teruskan juga ke Cyber Crime Polri, semuanya dilakukan secara otomatis.

Tentu saja ada banyak celah prosedur di sini, paling kerasa adalah menentukan sebuah “konten negatif”. Kalau untuk scammer / penipuan, semua pasti sepakat bahwa hal tersebut masuk ke “konten negatif” yang perlu ditindaklanjuti. Permasalahnya adalah pada “konten negatif” seperti hoax, ujaran kebencian, pornografi, dan “hal negatif” lainnya, untuk beberapa orang mungkin sebuah konten masuk kategori negatif, tapi untuk orang lain bisa saja hal yang biasa atau masih bisa dimaklumi. Ini adalah PR buat saya pribadi untuk menentukan sistem verifikasi ini, beberapa masukkan yang paling bisa dieksekusi adalah dengan sistem verifikasi secara crowdsourcing, alias masyarakat juga bisa membantu memberikan verifikasi dan pendapat apakah sebuah konten bersifat negatif atau tidak.

Masalah lain adalah bagaimana memastikan sebuah laporan tersebut sudah diterima atau malah diproses oleh pihak terkait, karena gak sedikit yang menanyakan apa yang terjadi setelah laporan? apakah sudah gitu aja? apakah pasti sampai? apakah pasti diproses? sesungguhnya ini adalah diluar kemampuan adukan.id karena adukan.id hanya melaporkan saja, pihak-pihak terkaitlah yang punya kuasa untuk memproses. Walaupun begitu tetap saja ini menjadi konsen bagi saya maupun pengguna adukan.id

Masih ada banyak hal yang bisa dilakukan untuk adukan.id, tapi untuk saat ini fokus utamanya adalah bagaimana membuat laporan secara lebih mudah, untuk 2 masalah tadi sepertinya akan dihandle di versi berikutnya.

So kalau kamu mendapatkan atau melihat sebuah konten negatif yang bisa merugikan atau membahayakan orang lain, jangan diam saja, adukan!

buka adukan.id

Saya baru sadar bahwa ternyata WordPress tidak mengirimkan notifikasi ketika seseorang membalas komentar pada suatu artikel. Admin websitenya sih dapat email notifikasi bahwa ada komentar baru masuk, tapi si pemberi komentar sebelumnya bakal tidak tau kalau ada yang memberikan balasan atau respons pada komentarnya, walaupun yang memberikan balasan adalah si admin website.

Jadi saya buat plugin sederhana yang punya tugas sangat sederhana,  mengecek kalau ada komentar baru masuk yang berupa balasan pada sebuah komentar, maka akan dikirim email notifikasi ke pemilik komentar sebelumnya.

Continue reading “Membuat plugin wordpress untuk mengirim notifikasi komentar”

Beberapa bulan terakhir saya lebih sering dapet project terkait dengan WordPress Development. Mulai dari pembuatan theme simple untuk keperluan re-design suatu instansi sampai pembuatan plugin yang cukup unik dan “menantang” dari sisi development. Saya sendiri gak asing sebenarnya dengan WordPress karena pekerjaan saya di kantor sebelumnya juga full WordPress theme developer. Walaupun ada banyaak bad-mouth tentang WordPress, tapi ya pasar gak bohong, 25% web di dunia pakai WordPress 😉

Salah satu yang lagi saya kerjakan kali ini adalah project yang skala nya cukup besar, atau bisa dibilang yang terbesar yang pernah saya handle pada platform WordPress. Salah satu toko online yang menjual pakaian anak yang cukup famous dengan sales sampai 250 ribu pcs per 3 bulannya (semoga gak salah info), sedang melakukan migrasi dari sistem mereka yang lama (magento) ke WordPress (dengan woocommerce), dan saya bersyukur dapat terlibat langsung pada projek ini. Projek ini bukan sekedar bikin theme, tapi juga meliputi sistem back office, membership, stock inventory dan beberapa hal lainnya yang semuanya dilakukan diatas platform WordPress.  Kebayang bakal dapet pengalaman handling WordPress untuk very high traffic.

Continue reading “Ngulik WordPress”

Salah satu project terbaru saya adalah membuat sebuah newsletter engine, yang secara garis besar tujuannya adalah memberikan kemudahan untuk para sales / internet marketing untuk mengirim email newsletter kepada para konsumen (ataupun target konsumennya). Konten dari newsletter sendiri akan diambil secara otomatis dari berbagai sosial media.

Salah satu fitur utamanya adalah tentu saja, mengirim email newsletter, dan kemudian melakukan tracking untuk mengetahui berapa email yang terkirim, berapa email yang dibuka atau berapa email yang melakukan klik pada link yang ingin di promoin, ataupun klik link unsubscribe dan juga ‘mark as spam’. Saya menggunakan mailgun untuk email engine nya karena secara out of the box, sudah menyediakan fitur tersebut, dan juga lebih efisien di banding membangun email engine sendiri yang bakal lebih banyak makan waktu dan kemungkinan bakal di tandai sebagai spam oleh provider layanan email adalah sangat besar. Selain itu, mailgun juga sangat di support oleh laravel, PHP Framework yang saya gunakan untuk membangun projek ini. Laravel menyediakan driver untuk mailgun sehingga hanya dengan sedikit konfigurasi, mailgun akan terintegrasi dengan baik pada laravel.

Tentang Mailgun

Mailgun adalah penyedia layanan email as services dimana intinya sih kamu bisa mengirim email menggunakan server mereka. Dengan adanya mailgun, developer gak perlu bikin email server sendiri, atau kuatir email yang dikirim akan masuk ke spam, atau juga menjaga server agar tetap ‘sehat’ sehingga para email provider (gmail, yahoo, etc) tidak menganggap server kamu sebagai server yang mencurigakan dan memasukkan semua email dari server mu ke folder spam. Ada banyak fitur lain dari mailgun yang bisa di lihat di website mereka

Mailgun dan Laravel

Seperti yang sudah saya singgung diatas, laravel menyediakan driver untuk menggunakan mailgun sebagai email engine. Sebenarnya sih mailgun sendiri punya PHP SDK sendiri yang bakal bantuin kamu berinteraksi dengan API nya secara mudah, tapi kalau projek mu menggunakan laravel, maka akan lebih bijak kalau menggunakan “laravel way” nya, karena… ya emang itu kan salah satu fungsi menggunakan framework? 😃 Supaya kamu dan rekan-rekan mu sesama developer punya bahasa yang sama untuk melakukan beberapa macam kegiatan yang sudah di sediakan oleh framework.

Untuk setting mailgun di laravel, kamu bisa di dokumentasi laravel, thanks to dotenv, karena kamu bisa setup secara mudah dengan cara edit file .env pada root folder laravel. dan masukkan parameter berikut

MAIL_DRIVER=
MAIL_HOST=
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_DOMAIN= 
MAIL_SECRET=

Data untuk mengisi masing-masing parameter diatas bisa dilakukan setelah melakukan registrasi di web mailgun, kalau hanya untuk keperluan testing, kamu bisa pakai fitur free dengan batasan 10.000 email per bulan. lumayan tuh 🙂

Setelah registrasi selesai, disana ada sandbox domain yang bisa dipakai, atau mau menggunakan custom domain sendiri juga boleh, saat ini saya masih menggunakan sandbox karena memang masih tahap development. Nah, di halaman detail domain, akan terdapat informasi untuk mengisi file .env diatas tadi.

Mengirim Email

Untuk mengirim email, karena menggunakan fitur built-in laravel, kamu bisa tinggal ikut dokumentasi laravel mail.

Mail::send(
    'campaign/templates/newsletter',
    $data,
    function ( $message ) use ( $args ) {
        $message->from( "[email protected]" )
                ->subject( 'Example Newsletter' )
                ->to( $args[ 'sendto' ] );
    }
);

Anyway, Sampai sekarang saya masih takjub dengan betapa laravel membuat mengirim email menjadi lebih mudah dan eksplisit seperti ini (sebelumnya saya menggunakan codeigniter dan juga raw PHP, ribet dan gak elegan)

Memberi Tagging

Mailgun memang memberikan fitur data analitik untuk email yang terkirim, tapi data analitik ini secara global, bukan untuk masing-masing email yang terkirim. Namun mailgun menyediakan juga fitur tagging, atau bahasa gampangnya penanda email setiap melakukan pengiriman email. Sebagai contoh untuk kasus saya, sebelum mengirim email, setiap email yang akan dikirim akan disimpan di database dan memiliki field ID masing-masing. Lalu saya gunakan ID ini untuk menjadi tagging pada email yang dikirim, sehingga setiap email akan memiliki ID / Tagging yang unik.

Sebelumnya saya sempet ribet untuk memberi tagging ini pada laravel karena fitur mail pada laravel hanya support untuk general purpose untuk beragam driver, jadi kalau mengikuti dokumentasi tagging pada mailgun dimana mailgun membutuhkan parameter “o:tag” yang tentu saja gak bisa di implementasiin di laravel.

Setelah googling dan membaca dokumentasi swiftmailer (mail engine yang digunakan laravel) akhirnya saya berhasil menambahkan tagging pada email dengan menambahkan 2 baris kode baru pada kode pengirim email diatas tadi.

Mail::send(
    'campaign/templates/newsletter',
    $data,
    function ( $message ) use ( $args ) {
        $message->from( "[email protected]" )
                ->subject( 'newsletter' )
                ->to( $args[ 'sendto' ] );

        // adding tagging to email
        $headers = $message->getHeaders();
        $headers->addTextHeader( 'X-Mailgun-Tag', 'campaign-' . $args[ 'ID' ] );
    }
);

berhasil! 💯

Mendapatkan Statistik Email

Untuk mendapatkan statistik email dari mailgun cara paling mudah adalah menggunakan PHP SDK dari mailgun sendiri.

Lah, tadi katanya gak pake PHP SDK nya mailgun?

Iya, untuk keperluan yang sudah disediakan oleh framework mah lebih baik menggunakan yang sudah ada, namun untuk keperluan lain yang gak disediain ya mending buat sendiri atau pake library lain yang sudah ada. Dalam hal ini mailgun cukup keren karena punya banyak SDK untuk beberapa macam bahasa pemprograman, termasuk PHP.

Nah berikut adalah potongan kode untuk pengambilan statistik email berdasarkan tagging nya dari dokumentasi mailgun.

$mail   = new Mailgun( env( 'MAILGUN_SECRET' ) );
$domain = env( 'MAILGUN_DOMAIN' );
$tags   = "campaign-17";
$events = "opened";

try {
    $data = $mail->get(
        $domain . "/tags/" . $tags . "/stats",
        array(
            'event' => $events
        )
    );

    return $data->http_response_body;
} catch ( \Exception $e ) {
    return array();
}

Berdasarkan dokumentasi itu juga, terdapat beberapa event yang bisa di tracking.

Dengan info selengkap ini, para user bisa mengetahui statistik dari setiap newsletter yang dikirim kepada konsumen nya yang tentunya akan berpengaruh pada strategi marketing berikutnya.

11 februari kemarin lisensi PHPStorm saya telah expired yang berarti sudah 1 tahun saya menggunakan PHPStorm untuk menemani saya bekerja. Saya masih ingat ketika itu masih menggunakan PHPStorm 8 sampai sekarang yang terbaru versi 10 dan sepertinya versi 11 akan keluar 1-2 bulan kedepan.

Sebelumnya saya menggunakan sublime text dan sempet mencoba atom namun waktu itu atom masih buggy banget, saya memang agak pesimis dengan aplikasi yang berbasis HTML, CSS, dan JS lalu di package jadi aplikasi desktop. Sampai akhirnya atas pertimbangan produktifitas saya beralih ke IDE, netbeans dan aptana gak bisa dibilang baik dari sisi tampilan dan performa (agak jadi lambat, typikal aplikasi desktop berbasis java) dan pilihannya waktu itu PHPStorm. Saya putuskan mencoba trial selama 30 hari, yang kemudian tertarik untuk melanjutkan ke full version.

Continue reading “1 Tahun bersama PHPStorm”