Modul Belajar Komputer Anak

Dikarenakan adanya perubahan dari Kurikulum 2013 (K13) ke Kurikulum Merdeka (KurMa), maka secara otomatis materi ajar di sekolah-sekolah juga berubah.

Dengan adanya permasalahan tersebut, mulai saat ini dan seterusnya buku Belajar Komputer Tingkat Dasar saya hentikan penulisannya. Sebagai gantinya saya mulai membuat modul Belajar Komputer Anak berupa berkas Presentasi.

Berdasarkan riset dan uji coba yang saya lakukan, modul format presentasi lebih mudah implementasinya ketika di gunakan untuk mengajar.

Selain itu guru juga bisa memilih sendiri berkas yang cocok untuk diajarkan ke para murid.

Soal Latihan

Pada masing-masing modul sengaja saya sediakan soal untuk latihan yang dapat dikerjakan para murid tanpa menggunkan komputer, yaitu dengan cara mencetaknya (print) sesuai jumlah murid yang mengikuti pelajaran.

Di bawah ini saya mulai melampirkan tautan beberapa modul

Berhitung

Membaca

  • Huruf dala m kata mana (segera tersedia)
  • Huruf yang hilang  (segera tersedia)
  • Praktik membaca mendatar (segera tersedia)
  • Praktik membaca menurun (segera tersedia)
  • Nama gambar (segera tersedia)
  • Permainan klasik hangman (segera tersedia)
  •  

 Perkantoran

 

Desain Grafis  

 

Di bawah ini ada tautan buku versi lama

Unduh Buku Digital Gratis

 Semoga Buku dan Modul yang saya tulis bermanfaat untuk dunia pendidikan di Indonesia, terutama di bidang Teknologi Informatika.

 

Google Cloud: Migrasi Database di MySQL On-Premise ke Cloud SQL menggunakan Database Migration Service

Halo semua!

Selamat siang! Apa kabar? Jumpa lagi di Jurnal saya ya! Sudah lama tidak update dan disini saya ingin memulai tahun 2024 dengan topik migrasi database MySQL di on-premise ke Cloud SQL menggunakan Database Migration Service.

Yup!

Mengapa harus menggunakan Database Migration Service? Sebenarnya bisa saja kita menggunakan tool semacam mysqldump untuk dump database di on-premise dan restore di Cloud SQL. Itu cara termudah dan tidak perlu layanan tambahan seperti Database Migration Service. Hanya saja hal tersebut memiliki kekurangan salah satunya aplikasi haruslah downtime.

Mengapa? karena jika kita menggunakan tool mysqldump sedangkan aplikasi masih dalam keadaan up dan running, maka ditakutkan adanya inkonsistensi data. Data yang ingin dipidahkan haruslah data terbaru dan tidak rusak.

Selain itu juga, jika data yang ingin dipindahkan berukuran sangat besar sehingga akan memakan waktu yang lama, maka aka solusi yang tepat adalah menggunakan layanan tambahan seperti Database Migration Service. Intinya, kita ingin memindahkan database dari MySQL on-premise (misal di atas instance) ke Cloud SQL tanpa ingin mematikan aplikasi dan ingin data tetap utuh dan konsisten.

Bagaimana cara kerja Database Migration Service?

Pertama, kita perlu membuat connection profile yang berisi detail database yang berada di on-premise seperti IP Addressusername dan password yang memiliki hak akses. Selanjutnya kita buat job di DBMS berisi detail seperti tipe migrasi (apakah continuous atau one-time), profile database sumber dan tujuan, serta metode koneksi apa yang ingin dipakai untuk migrasi.

Mari kita mulai.

Sebelum memulai pastikan kedua API dibawah ini, yaitu Database Migration API dan Service Networking API.

Di bawah ini adalah VM instance yang berisi database yang akan kita migrasi ke Cloud SQL.

Selanjutnya, buka layanan DBMS dengan tampilan seperti berikut:

Pertama, kita buat connection profile. Klik Create Profile.

Ada beberapa database engine yang didukung oleh Google Cloud, khususnya untuk MySQL dan PostgreSQL. Disini saya pilih MySQL.

Isikan detail koneksi dari database yang berada di on-premise seperti Hostname/IP Address, port, username, dan password. Untuk connection profile region pilih region dimana Cloud SQL akan ditempatkan. Lalu klik Create.

Selanjutnya, kita tinggal buat job migrasinya! Klik Create a migration job dan isi detail yang terdiri dari 5 tahap. Pertama, isikan nama job, database engine, dan tipe job migrasi. Apa bedanya? untuk Continuous sendiri saat proses migrasi selesai, antara MySQL di on-premise dan Cloud SQL di tujuan akan sama-sama running dan kita bisa verifikasi. Jika ada data masuk di MySQL on-premise, data akan otomatis direplika ke Cloud SQL sampai kita melakukan cutover/promote. Sedangkan on-time, seperti namanya, migrasi hanya akan dilakukan sekali.

Disini saya pilih Continuous.

Langkah kedua pilih connection profile yang telah dibuat sebelumnya.

Langkah ketiga set tujuan instance, disini saya karena belum punya Cloud SQL instance, maka saya pilih New Instance dan set detailnya.

Pada langkah keempat adalah mengatur koneksi apa yang dipilih untuk DBMS melakukan migrasi. Ada tiga pilihan, yaitu IP allowlist, Reverse-SSH tunnel, dan VPC peering.

Ketiganya bisa dipilih salah satu, dan karena disini MySQL on-premise saya simulasikan di VM instance, saya pilih VPC peering.

Langkah kelima bisa direview dan untuk memastikan koneksi aman dan migrasi berhasil bisa Test Job.

Pastikan centang hijau! Klik Create & Start Job untuk mulai migrasi.

Tampilan proses job migrasi

Berikut tampilan Cloud SQL instance.

Bisa verifikasi menggunakan SQL query.

gcloud sql connect mysql-cloudsql -user=root --quiet

Dari tampilan di atas migrasi database kita berhasil! Yeay!

Karena kita pilih Continuous, maka selama job masih running maka data baru yang masuk ke instance akan otomatis direplika ke Cloud SQL. Hal ini biasanya dilakukan untuk melakukan verifikasi dan memastikan data tidak ada yang tertinggal.

Jika sudah selesai kita bisa lakukan cutover dengan klik Promote di job migrasi.

Tunggu sampai selesai dan status akan berubah menjadi Completed.

Migrasi database kita sukses dan selesai!

Sekian!

Sumber:

Merek ORIGINAL

 Hati-hati jika beli aksesoris atau part elektronika, karena saat ini Original sudah bukan hanya merupakan sebuah kata lagi, tapi sudah berupa merek.

Jadi misalnya anda sudah terlanjur beli Baterai laptop untuk merek snsv, penjualnya bilang baterai Original.
Begitu diterima ternyata barang tiruan, kemudian protes ke penjualnya karena barang yang dikirim tidak asli akan sia-sia belaka.
Karena di deskripsi tertulis barang Original, nah di sini yang dimaksud ORIGINAL itu adalah mereknya, bukan barangnya.


-
Semoga info sederhana ini bermanfaat
Kalau merasa perlu boleh kok info ini dibagikan ulang


Unduh Buku Digital Gratis

Halaman ini sengaja penulis buat untuk kumpulan buku digital yang sudah penulis rilis dan bagikan gratis.
Silakan klik pada masing-masing judul buku untuk menuju link download



Cara menjadi Sponsor pada buku yang akan terbit


 
Pengumuman
Sehubungan dengan perubahan Kurikulum K13 ke Kurikulum Merdeka maka penulisan buku Belajar Komputer Tingkat Dasar saya hentikan, sebagai gantinya saya sediakan Modul Belajar Komputer Anak
 
 

Sehari Sebelum Acara LOUCA2023

Tulisan kali ini adalah lanjutan dari cerita yang berjudul Perjalanan Ke Acara LOUCA2023 yang telah saya tulis sebelumnya.

Setelah mandi, saya dan ponakan (selanjutnya sebut saja Ipul) mencari masjid terdekat untuk menunaikan ibadah Shalat Jumat.

Sebelum berangkat saya tanya dulu mbak resepsionis penginapan, katanya di pinggir jalan raya ada masjid. Saya dan Ipul akhirnya ke masjid terdekat sesuai yang dibilang resepsionis penginapan tadi, sampai di lokasi ternyata masjid tersebut tutup

Salah seorang tukang pakir di dekat lokasi bilang masjid terdekat berada di pinggir jalan raya, katanya dekat kok, jalan kaki tidak sampai 10 menit.

Kami pun mengikuti petunjuk tukang parkir tersebut yaitu jalan lurus, melewati rel kereta api, ketemu lampu merah (traffic light) belok kiri jalan terus, akhirnya sampai di masjid terdekat tapi cukup jauh.

Selesai Shalat Jumat kami berencana ke lokasi LOUCA2023 untuk sekedar bantu-bantu atau buat rusuh panitia dalam melakukan persiapan.

Tentu saja sebelum ke lokasi saya berkabar dulu dengan salah seorang teman panitia kalau saya akan ke lokasi tersebut.

Awalnya kami akan naik bus Batik Solo Trans atau lebih sering disebut BST, untuk sekedar mencoba dan sebagai konten cerita bersambung saya di google play book, kebetulan di dekat kami menginap terdapat halte BST, yaitu halte Jebres 1.

Namun niat kami naik BST terpaksa diurungkan karena untuk menggunakan mode transportasi tersebut tidak bisa tunai alias harus Non Tunai. Berbeda dengan BRT di semarang yang masih melayani Tunai dan Nontunai.

Batik Solo Trans - gambar ambil dari Wikipedia

Akhirnya saya putuskan untuk menggunakan transportasi online saja menuju lokasi LOUCA2023, setelah beberapa kali coba pesan transportasi online pilihan mobil sulit mendapatkan driver, akhirnya saya putuskan untuk pesan transportasi online motor saja sekaligus dua.

Driver pertama datang saya suruh untuk mengantar Ipul, beberapa detik kemudian driver kedua datang, baru saja saya mau ngomong ke driver pertama untuk pelan-pelan agar bisa beiringan, eh dianya langsung tancap gas, akhirnya kami terpisah.

Ternyata driver pertama ketika ke lokasi lewat gerbang pintu samping, sedangkan driver yang mengantar saya lewat gerbang belakang, akhirnya kami terpaksa saling cari, untung saja kejadiannya sudah jaman canggih seperti sekarang, tinggal berbagi lokasi dan kirim foto sudah mudah ditemukan, coba kalau jaman Ubuntusourus pasti repot.


Saya muter-muter dulu untuk mencari lokasi dimana ipul berada sesuai foto yang dia kirim, tentu saja sempat bertanya pada security yang ada di pos jaga, beberapa menit setelah muter-muter dalam cuaca yang panas (panas di solo ternyata 11-12 dengan semarang) akhirnya kami bertemu.

Sekarang saatnya mencari lokasi sebenarnya tempat calon diselenggarakannya acara LOUCA2023, yang kata salah seorang panita berada di gedung F tapi belum jelas gedung fakultas apa sehingga membuat kami nyasar masuk ke fakultas Hukum yang berada di seberangnya, eh ternyata gedung yang dimaksud adalah gedung F FKIP.

Padahal sebelumnya kami sudah berada di depan gedung tersebut, tapi karena kurang teliti akhirnya kami malah keluar lagi dari area gedung tersebut.

 

Daripada nyasar lagi ke mana-mana, akhirnya saya japri ke salah seorang anggota panitia untuk dipandu ke lokasi yang sebenarnya.

Singkat cerita saya sudah bertemu dengan para panitia penyelenggara LOUCA2023 yang terdiri dari Kelompok Linux Arek Surabaya (KLAS), Komunitas Paguyuban Linux Solo, Gimpscape, Himpunan Mahasiswa dan Kampus UNS, dan beberapa sukarelawan lainnya.

Tidak beberapa lama kemudian kami berdua ikut rapat singkat dengan panitia untuk membahas persiapan hari itu maupun besok dan besoknya lagi.

Dan ternyata ketua Komunitas Paguyuban Linux Solo belum kenal saya, beliau menyangka saya sebagai anggota KLAS.

 

Adapun kegiatan rapat tersebut adalah mematangkan persiapan untuk kelancaran acara esok hari, misalnya persiapan minum untuk besok dengan beli air mineral baik yang berupa gelas, botol dan galon, membahas persiapan untuk tempat ibadah pembicara dan peserta.

Tidak lupa juga mencoba Videotron agar Meme Tragedi Salah Desktop di Acara ILC 2022 tidak terulang lagi.


 

Nah dalam sesi mencoba Videotron ini panita juga mencoba Proyektor di kiri-kanan Videotron agar bisa digunakan bersamaan, tentu saja tidak bisa, dikarenakan dukungan resolusinya berbeda, proyektor lama hanya mendukung resolusi maksimal 1024 X 768 sedangkan Videotron resolusinya sudah Full HD atau resolusi 1920 X 1080

Sebenarnya tetap bisa sih dipaksa agar Videotron dan kedua proyektor menampilkan gambar bersama, yaitu dengan menurunkan resolusi Videotron, tapi resikonya gambar di Videotron tidak bisa mode layar penuh atau bagian kanan-kiri terpotong dengan warna gelap.

Karena saya dan Ipul belum sempat makan siang, saya pamitan ke panitia untuk keluar sebentar, akhirnya kami berdua ke kantin terdekat untuk makan siang tapi di sore hari.

Selesai rapat, maka pekerjaan yang bisa dilakukan hari itu harus dilakukan secepatnya karena waktu hari H yang sudah semakin terbatas, salah satunya memasang banner di gedung tersebut agar yang akan hadir pada acara LOUCA2023 lebih mudah menemukan lokasi acara diselenggarakan.

Terdapat beberapa kejadian dalam persiapan hari itu yang bisa dijadikan catatan pada acara yang akan datang, yaitu:

  • Vendor penyedia dan pemasang Booth atau Stan untuk pameran datangnya molor, seharus sampai  di lokasi pukul 17.00 WIB baru sampai sekitar pukul 19.30 WIB, sehingga menyulitkan para panitia dan sposnsor untuk memasang pernak-pernik di booth masing-masing, akhirnya panitia dan sponsor pagi-pagi benar harus menyiapkan pernak-pernik di booth tepat hari H.
  • Salah satu proyektor di ruang pararel sudah tidak layak pakai karena gambar yang ditampilkan sudah buram dan kuning. Untung saja panitia mengeceknya pada malam itu sehingga bisa bergerak cepat mencari penggantinya.

Di sela-sela menunggu Vendor penyedia booth yang tidak datang-datang, panitia pesan makan malam karena rata-rata sudah pada lapar, ditambah jengkel.

Sekitar 20 menit kemudian, akhirnya makan yang dipesan secara online datang juga, langsung saja kami serbu bersama.

Pukul 20.35 WIB saya dan Ipul kembali ke penginapan dengan menggunakan transportasi online.

Sebenarnya nasih ada beberapa kejadian lain yang cukup seru untuk diceritakan, tapi karena saya sudah capek mengetik, saya sudahi saja cerita ini, sampai ketemu pada cerita hari pertama LOUCA 2023.

Perjalanan Ke Acara LOUCA2023

Awal bulam Juli lalu saya kirim proposal untuk menjadi pembicara pada acara LibreOffice-Ubuntu Conference 2023 yang selanjutnya disingkat menjadi LOUCA2023.

Saya pilih sesi Lightning Talk (bicara singkat) maksimal 10 menit, ada pun judulnya adalah Explore the features of LibreOffice Impress dangan rincian:

  • Abstract: The presentation material contains various menus and features in LibreOffice Impress which consists of more than 500 slides that participants can download.
  • Description: During the presentation only delivered a few sample slides Material in Indonesian.

Sengaja saya memilih tema tentang presentasi karena tema ini jarang yang mengajukan atau mengirim.

 

Singkat cerita ketika pengumuman, proposal pengajuan saya diterima, jadi kalau ada yang beranggapan bahwa saya menjadi pembicara di acara tersebut menggunakan orang dalam yang auto diterima itu tidak benar, karena saya juga ikut seleksi.

Seperti Judul dan Abstrak yang saya ajukan, bahwa saya akan mengulas berbagai fitur di LibreOffice Impress dengan waktu yang terbatas, maka saya menyiapkan sebanyak kurang lebih 500 salindia (slide) yang berupa panduan penggunaan LibreOffice Impress, 

Ini sebenarnya adalah manual book tapi berupa berkas salindia (slide) presentasi, ada pun berkas tersebut sebenarnya sudah saya tulis berupa naskah buku, jadi saya tinggal salin-tempal dan susun ulang dari Writer ke salindia, tentu saja dengan berbagai modifikasi dan penyesuain yang ternyata cukup melelahkan.


Kurang lebih 3 bulan saya menyelesaikan proses penyalinan dari Writer ke Impress dengan durasi waktu rata-rata 5 jam perhari, pagi setelah subuh 2 jam, siang disela-sela pekerjaan 1 jam, dan sore sampai malam 2 jam.

Pengerjaan yang cukup rumit yaitu meringkas kalimat yang panjang menjadi singkat, dan membuat tangkapan gambar penyerta dari yang sebelumnya menggunakan LibreOffice Impress 7.2 menjadi 7.6.

Kembali ke cerita sesuai judul post ini, saya berangkat dari rumah pukul 05.55 waktu HP buatan china milik saya.

Berangkat dengan mode jalan kaki (sekalian olahraga) ke Halte BRT terdekat yaitu halte BRT depan SMP Domenico Savio untuk naik Trans Jatengh, oh ya halte SMP Domenico Savio kadang disebut halte Katedral

Perlu diketahui bahwa di Semarang terdapat 2 pilihan BRT yaitu Trans Jateng dan Trans Semarang yang sering membuat orang luar kota atau orang yang jarang naik BRT tidak bisa membedakannya, sehingga mereka sering salah naik, akibatnya tidak bisa transit atau dengan kata lain harus bayar tiket lagi ketika akan transit.

Lain kali kalau ada waktu longgar saya akan ulas perbedaan antara Trans Semarang dengan Trans Jateng..

Saya pun sampai di halte SMP Domenico Savio beberapa menit kemudian, tidak beberapa lama Bus Trans Jateng pun ada yang berhenti di depan halte.

Karena cukup penuh dan harus berdiri, saya tidak naik bus tersebut, dengan opsi menunggu bus berikutnya, kurang dari 10 menit menit bus kedua pun datang, saya pun naik bus kedua tersebut.

 

Sebagai catatan, bus Trans Jateng koridor 01 setiap 8 menit sekali berangkat baik dari Stasiun Tawang maupun dari Terminal Bawen, jadi jangan kwatir kalau harus menunggu lama.

Perjalan dari halte SMP Domenico Savio sampai Terminal Bawen hanya ditempuh 1 jam lebih 8 menit saja.

Seperti biasa, begitu sampai di terminal bawen saya langsung ke toilet, karena AC Trans Semarang yang saya naiki tersebut cukup dingin.

Setelah dari toilet saya langsung jalan kaki ke seberang Terminal Bawen untuk sarapan Soto Ayam langganan saya yang kebetulan sebuah cabang milik teman di Semarang.

Selesai sarapan soto, saya berdiri di pinggir jalan untuk mencegat bus, bahasa yang sopan cegat apa ya?.

Alasan saya tidak masuk kembali ke terminal karena malas nyebrang lagi, alasan kedua karena kalau naik di dalam terminal kadang ngetemnya cukup lama.

Alasan saya menggunkan mode transportasi bus karena harus menghampiri ponakan saya yang masih sekolah di SMK Negri Kabupaten Semarang untuk ikut acara LOUCA2023, dia saya suruh nunggu di terminal Tingkir Salatiga.

Singkat cerita saya dan ponakan sampai di Terminal Tirtonadi pukul 10.09 WIB. Kami pun berjalan keluar dari terminal Tertonadi ke gerbang timur arah bus ke Surabaya untuk selanjutnya naik transportasi Online.

Kami pun mampir di Angkringan luar Terminal untuk sekedar mengisi perut dan melepas penat, tentu saja sambil menunggu transportasi online yang kami pesan

 


Beberapa menit kemudian kami sudah dalam perjalanan ke penginapan kami yaitu Griya Tenera 1, Pukul 10.28 WIB kami sampai di penginapan, kemudian mandi untuk selanjutnya persiapan sholat Jumat di masjid terdekat..

Demikian cerita singkat Perjalan Ke Acara LOUCA2023 ini saya tulis berdasarkan ingatan saya, berlanjut ke Sehari Sebelum Acara LOUCA2023


Mengatur Waktu Presentasi

Tanggal 7-8 Oktober 2023 mendatang di Indonesia, khususnya di Surakarta Jawa Tengah akan diadakan konferensi Open Source besar untuk Asia yaitu Louca23 atau LibreOffice Conf. Asia dan Ubuncon Asia 2023.

Info tentang Louca23 silakan langsung ke halaman berikut: https://louca.id/

Beberapa bulan sebelumnya saya mengirim proposal untuk jadi pembicara, dan puji syukur, seperti acara Open Source lain sebelum-sebelumnya juga banyak yang diterima.
Adapun materi saya berjudul: Explore the features of LibreOffice Impress, dengan Lightning Talk 10 Menit.

Dengan batas waktu yang singkat tersebut pembicara harus bisa mengatur waktu dengan tepat, salah satu fitur yang bisa digunakan untuk mengtur waktu ketika presentasi tentu saja tersedia di LibreOffice Impress.
Biasanya di acara seperti ini ada salah seorang dari panitia yang bertugas memantau durasi presentasi dengan memegang kertas yang ditunjukkan ke pemateri berupa kertas berisi angka yang cukup besar, misalnya angka 5 atau 3, itu artinya waktu untuk pemateri tinggal 5 atau 3 menit.
Beberapa kali ketika saya mendapatkan peringatan tersebut cuek saja karena presentasi sudah saya atur sesuai durasi saya, biasanya kalau jatahnya 10 menit sudah saya atur 9 menit, jadi ada toleransi 1 menit.

Fitur Berlatih Waktu
Digunakan untuk mengatur jeda waktu perpindahan salindia satu dengan salindia lainnya ketika presentasi.
Anda bisa mengatur tiap salindia untuk tampil dengan waktu berbeda-beda, misalnya salindia dengan materi yang sedikit bisa menggunakan waktu 30 s/d 45 detik, sedangkan salindia dengan materi yang banyak bisa menggunakan waktu 60 s/d 90 detik.
 
Berikut ini adalah tutorial singkat cara mengatur waktu di LibreOffice Impress
  • Buka berkas presentasi yang telah Anda buat sebelumnya
  • Pilih tab Tampilkan Salindia, klik ikon Berlatih Waktu
 
 
Maka salindia berubah ke mode layar penuh disertai pengatur waktu yang muncul di sudut kiri bawah layar.

  • Tunggu beberapa saat sehingga durasi waktu berjalan sesuai keinginan (misalnya 10 detik).
  • Klik pengatur waktu untuk berpindah ke salindia berikutnya. Lakukan cara yang sama untuk mengatur durasi waktu pada semua salindia sesuai jatah waktu Anda
Misalnya Anda punya jatah waktu presentasi 10 menit dan telah membuat 15 salindia, aturlah salindia 1: 60 detik, salindia 2: 120 detik, salindia 3: 90 detik dan seterusnya, sesuaikan dengan teks dan tema materi Anda pada setiap salindianya.
  • Tekan tombol Esc, atau klik pada salindia untuk keluar dari mode Berlatih Waktu.
  • Simpan presentasi yang telah diatur durasinya, 
  • Sekarang cobalah lakukan presentasi atau masuk ke layar penuh dengan klik ikon Mulai Dari Salindia Pertama pada tab Tampilkan Salindia, cara lainya adalah tekan tombol F5.
Maka ketika melakukan presentasi, salindia berpindah secara otomatis ke salindia lain sesuai durasi waktu yang Anda buat.

Demikian tutorial singkat ini saya buat dengan mengambil beberapa salindia dari berkas sebanyak kurang lebih 500 salindia yang akan saya bagikan pada acara LOCA23 di Surakarta tanggal 7-8 Oktober mendatang secara gratis.
Bagi yang ingin memiliki berkas tersebut tapi belum registrasi, segeralah lakukan sebelum regestrasi ditutup oleh panitia.

 

 

AWS: Deploy a Simple Application with Custom Domain using AWS App Runner

Hi all!

Good night and I hope that you are doing well. In this journal, I would like to share with you about AWS App Runner. Specifically, I will explain how to deploy a simple application on there and set it so it will use a custom domain. For the domain, I will use Amazon Route53 that already we discussed in the previous journal. You can check it out here yah:)

Did you know about AWS App Runner? This service is really awesome and simple to use. Based on the documentation, AWS App Runner provides a fast, simple, and cost-effective way to deploy from source code or a container image directly to a scalable and secure web application in the AWS Cloud. You don’t need to learn new technologies, decide which compute service to use, or know how to provision and configure AWS resources. Read more here.

There are two features that make you need to consider using AWS App Runner. First, the application we will deploy on there is container-based. So, it’s really simple when we want to migrate an existing application from on-premise to AWS App Runner because it will be nicely integrated and doesn’t necessarily to overwhelmed by the infrastructure layer or dependency.

Then, there is a deployment trigger feature that we can use on it. AWS App Runner is well-integrated with Amazon Elastic Container Registry (ECR). If we are using a private repository on Amazon ECR, we can set automatic for the deployment trigger and whenever a new image pushes on a repository it will trigger AWS App Runner to deploy a new version of the application.

We can set the specification of the application such as vCPU and vRAM and define environment variables. We can also set autoscaling and health check configurations to ensure that our application is able to always provide the request by the user.

The other awesome feature provided by AWS App Runner is observability. We can do trace the application deployed on AWS App Runner by AWS X-Ray. It’s a really nice option when we want to debug the application.

Okay. Enough for the explanation. Let’s move into the tutorial, step-by-step to deploy the application.

First, we have to go on AWS Management Console.

In a search form, type app runner and click on it.

Below is the dashboard of AWS App Runner. Click create service to create a new service.

On the first page, we have to define the application source. Choose container registry if the image has been pushed or choose source code repository if not. Then click Next.

The next step, as I mentioned before we can define the specification such as vCPU, vRAM, env and port.

Scroll down and we can define the autoscaling configuration. For example, I define the min is 1 instance and the max is 10 instances. We can define the custom health check configuration to ensure the application is always monitored.

Scroll down and on the security section, we can configure the AWS KMS key for encryption.

Scroll down, and choose the incoming network traffic. For example, I choose public because the application will be accessed by users on the internet. Tick Tracing with AWS X-Ray if we want to enable observability and click Next.

On the review section, verify and ensure is correct and click Create button.

Wait until the service status is running.

Click the service name to see details and click Default Domain to access the application.

Below is the application example.

Until this time, our application is running and accessible 🙂 but, still use the default domain provided by AWS. We will continue to configure the custom domain.

On application detail, click Custom domains tab and click Link domain

Type the domain name and click Link custom domain.

Then, it will show two records that we have to configure on DNS Management. First, CNAME record to certificate validation so our application will be accessed by HTTPS. Then DNS target for the application itself.

Wait until the status become active.

Try to access the application from the browser using a custom domain

Cheers!

AWS: Cara Mendaftarkan Domain Baru Melalui Layanan Amazon Route 53

Halo semua!

Apa kabar? semoga baik-baik saja ya semua ^^ sudah lama rasanya saya tidak menulis dan akan dicoba rutinkan kembali. Semoga terlaksana ya dan tidak hanya wacana ya 😀

Pada tulisan ini saya ingin menjelaskan bagaimana mendaftarkan domain baru melalui layanan di AWS, yaitu Amazon Route 53. Apa keuntungannya? Sifatnya yang centralized, dimana hanya melalui satu platform saja kita bisa dengan mudah membeli dan dan nantinya dapat langsung kita atur record domainnya disana, seperti menambahkan, menghapus, dan mengedit record serta dapat mengatur NS nya sekaligus. Selain itu, akan terasa well-integrated dan well-syncronized jika resources kita semua berada di environment AWS.

Jika teman-teman sudah memiliki domain existing di registrar lain, bisa melakukan transfer domain untuk tetap dapat memanfaatkan layanan Amazon Route 53. Panduan bagaimana melakukan transfer domain bisa klik disini karena tidak akan dibahas di tulisan ini.

Apa yang perlu diperhatikan sebelum melakukan pendaftaran domain baru di Amazon Route 53?

  • Pertama, apakah TLDs dari domain yang diinginkan didukung oleh layanan Amazon Route 53? bisa cek disini karena bisa jadi TLDs yang teman-teman inginkan belum didukung.
  • Kedua, terkait biaya. Perlu teman-teman ketahui bahwa biaya tiap TLDs yang ditawarkan oleh Amazon Route 53 berbeda-beda. Selain itupun teman-teman tidak dapat menggunakan AWS Credits untuk membeli domain baru di Amazon Route 53 ya. Bisa klik disini untuk mengetahui biaya lebih lanjut.
  • Ketiga, bahwasanya ketika domain yang sudah dibeli tidak dapat diubah, jadi perlu dipersiapkan dengan matang nama domain yang teman-teman inginkan sebelumnya ya.
  • Jika saat pendaftaran domain baru teman-teman mengalami isu bisa langsung kontak AWS Support disini ya. Berdasarkan pengalaman pribadi, AWS Support sangat membantu dan cepat menangani isu yang saya alami:)

Mari kita mulai.

Pertama, buka AWS Management Console masing-masing atau bisa klik https://console.aws.amazon.com.

Pada kolom search, bisa klik route 53 ya

Saat sudah masuk ke dashboard Route 53, klik Register domain untuk mendaftarkan domain baru.

Disini saya akan coba menggunakan domain baru dengan nama dwiananda.click. Pastikan domain dalam keadaan Available ya! Pilih domain dan klik Add to cart

Gulir ke bawah dan isikan kontak sesuai dengan data teman masing-masing ya!

Gulir ke bawah dan bisa dipilih apakah domain ini akan otomatis di renew atau tidak. Ceklis Terms and Conditions lalu klik Complete Order.

Pada saat pertama kali order, saya sempat mengalami isu seperti tangkapan layar di bawah ini. Teman-teman tidak perlu khawatir. Bisa langsung kontak AWS Support dan nanti akan bisa resolv ya:)

Setelah resolv, saya coba order kembali dan akan muncul pop-up yang menginformasikan bahwa AWS Credits tidak bisa digunakan untuk melakukan pendaftaran domain baru. Seperti yang telah saya sebut sebelumnya. Jadi pastikan saldo teman-teman cukup dan klik Complete Order.

Akan muncul pop up Order Submitted Successfully dan bisa Close.

Kita akan mendapatkan email untuk melakukan verifikasi seperti di bawah ini. Bisa langsung klik link yang disertakan di email ya.

Selanjutnya email baru akan muncul yang menandakan bahwa domain berhasil di daftarkan.

Untuk melakukan verifikasi bisa klik di dashboard Amazon Route 53 > Registered Domains. Jika domain teman-teman berhasil didaftarkan, akan muncul nama domainnya disana.

Selain itu dari dashboard Amazon Route 53 > Hosted zones . Domain yang sudah berhasil didaftarkan muncul disana dan bisa klik nama domain untuk melihat detail dan melakukan pengaturan record-recordnya.

Berikut tampilan detail dari domain yang sudah di daftarkan.

Selamat mencoba! jika ada isu, feel free untuk diskusi ya!

Sekian!

Blockchain, Penggunaan, Masalah yang dihadapi


Blockchain diharapkan akan digunakan dalam berbagai bidang, seperti keuangan, perdagangan, pemerintahan, kesehatan, dan lainnya. Beberapa contoh penggunaan yang diharapkan adalah:
  • Sistem pembayaran yang lebih efisien dan aman
  • Penyimpanan data yang lebih aman dan mudah diakses
  • Smart contract yang memungkinkan transaksi otomatis
  • Supply chain management yang lebih transparan
  • Sistem voting yang lebih adil dan aman
  • Pencatatan aset digital yang aman dan mudah diakses
Namun, ada juga beberapa halangan yang harus diatasi sebelum penggunaan blockchain dapat digunakan secara luas, seperti regulasi yang belum jelas dan masalah skalabilitas.

Regulasi yang belum jelas dapat menghambat perkembangan dan penggunaan blockchain karena masih ada ketidakpastian tentang bagaimana teknologi ini harus diatur. Beberapa negara belum memiliki regulasi yang jelas mengenai penggunaan mata uang digital, smart contract, atau aset digital lainnya yang dibangun di atas blockchain. Hal ini dapat menimbulkan masalah bagi perusahaan atau individu yang ingin menggunakan teknologi ini dalam bisnis mereka.

Masalah skalabilitas di blockchain terkait dengan jumlah transaksi yang dapat ditangani oleh jaringan dalam satu periode waktu tertentu. Saat ini, beberapa jaringan blockchain seperti Bitcoin dan Ethereum hanya dapat menangani sekitar 7-15 transaksi per detik. Ini sangat sedikit jika dibandingkan dengan sistem pembayaran tradisional seperti Visa yang dapat menangani hingga 65,000 transaksi per detik. Ini menyebabkan masalah ketika jaringan sibuk dan membuat transaksi menjadi lambat atau terganggu. Beberapa solusi yang dikembangkan untuk mengatasi masalah skalabilitas ini, seperti SegWit, sharding dan off-chain scaling. Namun, masalah ini masih dalam proses pengembangan dan penyelesaiannya.

-- sumber dari chatGPT --

AWS Cloud: Stop an EC2 Instance using AWS Lambda when the Budget Amount is Reached

Hi all!

Good night and happy holiday! Here I would like to share with all of you about something an interesting case study that maybe you’ve done or come across soon.

Imagine the Developer Team in your company is still doing Proof-of-Concept related to a specific project for the user, and the user is strict about the cost. The Dev Team is using EC2 Instance and the maximum budget for EC2 Instance is only $5 per day.

You —as an infrastructure engineer are tasked to create an alert when a budget amount is reached. The alert will send a notification via email, and at the same time the user wants any running EC2 Instance will automatically stop for further investigation.

For this case, we will be using several services to make the goal is reached. The diagram is below:

First, to ensure the team’s cost usage is under control and tracked easily, we are able to use AWS Budget. This service is provided by AWS and will show our maximum budget for all or specific services. We are also able to define the threshold and connect it to Amazon SNS (Simple Notification Service), so the team will be notified. For example, we defined the maximum budget as $2 per day, and the alarm was triggered when it reached 80%. This is really something interesting. We don’t necessarily check it manually, and the team is notified automatically via email (for example).

How about a task to stop the EC2 Instance at the same time? Yup, AWS Lambda Function. We are able to use that service to ensure the EC2 instance is stopped when the alarm is triggered 🙂

Let’s break it down!

First, we have to configure the notification using Amazon SNS. There are two components that we have to set up. Topic and Subscription. Topic is similar to a channel that will send a broadcast message to subscribers we defined in a subscription, for example email and AWS Lambda. Both will receive a notification when the budget amount is reached.

To create a topic, you can follow the full guide here. The thing you must pay attention to is access policy. Add an additional policy so that Amazon SNS will get permission to publish a notification when the budget is reached. Below:

{
  "Sid": "E.g., AWSBudgetsSNSPublishingPermissions",
  "Effect": "Allow",
  "Principal": {
    "Service": "budgets.amazonaws.com"
  },
  "Action": "SNS:Publish",
  "Resource": "your topic ARN",
   "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "<account-id>"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:budgets::<account-id>:*"
        }
      }
}

Below is an example of topic I’ve created:

For the first subscription, follow the guide here and ensure the email is confirmed.

If the Amazon SNS is configured, we move on to the AWS Budget.

From the Management Console, find an AWS Budget menu and just click create button. In this case, I’m using Customize and Cost budget type like the one below.

I’m set for the period is to daily, and the amount is $2.

For the budget scope, because in this case, the Dev team only using EC2 Instances, we can configure to filter EC2 Instances only.

We can define the specific threshold for the alert. Below the example, if the usage is reached 80% of the budgeted amount, it will send the notification.

Who will receive the notification? Put the ARN Amazon SNS that we created before in the form. Ensure it is valid.

Until this step, a team that has the email will get a notification when the budget amount is reached 80%. After this, we have to configure AWS Lambda. We have to create a function that will execute to stop the EC2 Instance when the alert is triggered.

First, create a new policy and role in IAM so the AWS Lambda will have permission to stop EC2 Instance directly. Below is the policy in a JSON format:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:DescribeRegions",
                "ec2:StopInstances",
                "ec2:DescribeInstanceStatus"
            ],
            "Resource": "*"
        }
    ]
}

The policy I’ve created successfully:

Below is the role I’ve created successfully:

For the function in AWS Lambda, I’m using Python 3.7 runtime and for the execution role, choose the existing role we created before. Here, my existing role name is StopEC2Instance.

Below is the example code to stop EC2 instances. Paste into lambda_function.py editor.

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
import boto3
def GetInstanceRunning():
client = boto3.client('ec2')
ec2_regions = [region['RegionName'] for region in client.describe_regions()['Regions']]
for region in ec2_regions:
ec2 = boto3.resource('ec2')
instances = ec2.instances.filter(Filters=[{'Name': 'instance-state-name', 'Values': ['running']}])
return [instance.id for instance in instances]
def StopInstance(ids=GetInstanceRunning()):
ec2 = boto3.client('ec2')
if not ids:
print("No Instance in the state Running or pending")
else:
ec2.stop_instances(InstanceIds=ids)
ec2.get_waiter('instance_stopped').wait(InstanceIds=ids)
print('instance {} was shutdown'.format(ids))
def lambda_handler(event, context):
StopInstance()

Go to the Test tab and click Test. Wait for a moment, and below is the result. It shows that there is one instance is shutting down.

Go to EC2 Instance, and the instance status is stopped 🙂

But wait! The function is run successfully when we click the Test button. How about ensuring that it will run when the budget is reached?

Just add a new Trigger 🙂

Set a new trigger into Amazon SNS that we created before.

It was added successfully, and whenever the alert rings, the function will automatically run to stop EC2 Instances.

Thank you!

References:

  1. https://docs.aws.amazon.com/cost-management/latest/userguide/budgets-sns-policy.html
  2. https://docs.aws.amazon.com/sns/latest/dg/sns-email-notifications.html
  3. https://boto3.amazonaws.com/v1/documentation/api/latest/guide/ec2-example-managing-instances.html

My Journey: #RoadToGDE Mentorship Program

Hi all!

How are you?

I hope that you all good and healthy. By end of this year, I just want to share something great experience I’ve done from September until December 2022. Yup #RoadToGDE Mentorship Program.

That is an incredible journey, I thought. As long as 7 weeks, we as a mentee got opportunities to discuss all related technical and preparation to become a GDE with the real GDE directly and supported by Google.

GDE or Google Developer Expert is a program provided by Google for whoever has an interest and expert in their expertise. Not only experts but also actively contributing to the community and caring for each other. This is the part I am interested in. Sharing is caring. You can read more here.

I would like to say thousands of thanks , through this program, I’m able to meet Imre Nagi. My mentor during this mentorship. LinkedIn, GitHub, and Twitter.

Imre Nagi currently is a Tech Lead at Gojek, Indonesia. Besides that, he is also a GDE in Cloud Platform specialization. Match with the path I currently learn. He has lots of experience in technology he expertise, and also actively contributes to the communities. So inspiring me and making me keep moving, learning, and contributing too!

As I said, I got a lot of knowledge through mentoring, and through this journal, I would like to you all learn and get value too.

The mentoring is divided into seven-part from September to December. In each part, we will get a chance to 1o1 mentoring for around one hour with our mentor. Yup, each of the mentees will exclusively get a private mentor around the world.

I remember, my first mentoring was held on September 7th, 2022. One of the interesting things about my first mentoring is to always use the time as valuable as possible. Yup. The mentoring was only one hour, and it was a rare chance! For the first one hour, mas Imre shared about the GDE Program and his experience when becoming a GDE.

He had just goes back from study, at that time still a software engineer in a startup company in Indonesia, and at that time, he looking for a chance to become a GDE through a Google Developer Manager in Indonesia. He prepared the mock application, an gratefully, He accepted to become a GDE in Data. When mas Imre tells the story, I imagine how enthusiastic and incredible that moment was.

He asked me, with what media will I apply to a GDE Program? Youtube video, podcast, or technical blog? By the way, this media is important to whoever wants to apply GDE because it will be used as proof we actively contributing to the community.

These are the media Mas Imre used to actively contribute:

That was so huge and great. I preferred to choose my personal blog at misskecupbung.wordpress.com :). I showed him that, and he gave me a task to create a technical blog for the next mentoring and expected I could write at least four blogs through this mentoring.

At the mentoring, Mas Imre said, “your writing is good enough; the step-by-step you’ve written is well-prepared. But there is no unique opinion you give in. So, why other people as a reader will read your writing whether they can read it fully on the documentation directly?”

Yup. That’s the point I forgot all along when I wrote a blog or when I spoke at a live event. I’ve not mentioned my opinion, pros and cons about the tools, or something brave takeaways like the comparison between the tools. That so makes me think about it deeply.

It continued to the 2nd and 3rd mentoring held on September 22nd, 2022, and October 7th, 2022. We discussed how to write a good technical blog, something straightforward to write about the point; you’re not necessarily to write all the steps because it is already written in the documentation. If you have to write a code, paste it to GitHub or Gist GitHub and embed it on your blog. Don’t hesitate to put your opinion there. Something about your definition by your experience, pros, and cons when you use the tools or when you compare the tools with others (for example, GKE vs Kubernetes vs EKS).

In the 4th and 5th mentoring, we discussed the mock application to apply for the GDE program. The mock application is divided into several parts, each of which is explained by mas Imre carefully. First, about the bio, and then about the reason for applying, which tells about why you want to apply for a GDE? which part do you want to apply? because there are several options like Google Cloud Platform, Web Development, Mobile, etc. The ends are in-person impact I’ve done which is an activity I spoke about and content I created for at least three years long.

I always thought that GDE was a program I could use to contribute more actively to the community. But, why GDE? If you want to contribute to the community, would it be much more difficult without being a GDE? What’s the problem? What is the impact of GDE, or what can Google support so you can solve the issue? Asked by Mas Imre, and made me think along the day 🙂

Yup, the keypoint is WHY. It’s not just about the goal, but the reason also. Something like when we troubleshoot the issue. Find the root cause, and solve the problem.

On the 6th mentoring, which was held on November 22th 2022, we discussed mock interview. Actually, when we apply for GDE, there are two interviews. First interview with other GDEs, will discuss the community itself and a bit of technical knowledge. The second interview is with Googler/Noogler (Google’s employee with expertise in the category we chose).

But, in this mentorship, we just do mock interviews for the first interview, which is a community interview. There will be three parts. The first is an introduction, the second is about the community itself, and the third is about a bit of technical knowledge.

Mas Imre acted as an interviewer and asked me several questions. The result is not smooth as I want. The bad moment was when I answered the questions:

  • Why do you want to become a GDE?
  • What is the workflow, and what happens inside the infrastructure when we run kubectl apply -f deployment.yaml?
  • CRD inside of Kubernetes

Maybe at the moment, I’m too confident and not creating something like a cheat sheet. So when I get unexpected questions, I need more time to think about the question, find the answer, and translate it into English first in my head and then say it. Too long and wordy. Mas Imre said it because we, as Indonesian, use English, not the daily language. So, when we want to talk using English, we have to think about it in Indonesian first, and our brain has to translate it into English, and yes, there is a need for more time. It is normal, and we have to reduce the time to make it more smooth.

Mas Imre gave me advice like: do practically English every day in small cases; for example, when you are on the road and see a traffic sign, billboard, etc., Try to say that in English. Make you used to English. He gives me one chance to do it again at the next mentoring session.

The last mentoring was held this week, on 27th December 2022. Why was the gap between the previous mentoring one month? Because there were DevFest 2022 events held in several cities, we focused on there first, and mas Imre gave me more time to prepare the mock interview (thank you!).

The 2nd community interview was similar to the first interview, and I tried to be more fluent by creating a cheat sheet (I tried at home several times a day to achieve it :D). Mas Imre said that the second one is good enough with some advice. First, keep moving because we still learning (especially in English). He also gives me correctness in some questions to make my answer is more clear, and we take a photo 🙂

I would like to thanks to #RoadToGDE committee too. The Kits just arrived!

See you next on my journey! Thank you!

Mencoba Emulator PS3

Sambil menunggu pekerjaan ready untuk dikerjakan, saya tergerak iseng untuk memainkan game melalui emulator. Target yang dicoba adalah RPCS3 yang tersedia pada repositori distro-distro linux, juga tersedia untuk Windows dan MacOS.

Yang perlu dicatat prosesnya kurang lebih sebagai berikut:

  1. Pasang RPCS3 pada sistem Anda.
  2. Unduh firmware PS3 pada situs Playstation.
  3. Siapkan image/iso game yang akan digunakan, kalo mau berburu di internet juga bisa. Image tersebut terenkripsi.
  4. Pasang alat Libray untuk mendekrip image pada butir 3. Baca panduannya dengan baik.
  5. Idr bisa merujuk ke sini.

Catatan tambahan:

  • Jika menggunakan controller Xbox One, gunakan xpadneo agar pemetaan tombolnya sesuai.

Liputan Indonesia Linux Conference 2022 - Bagian 1

Beberapa bulan lalu saya mengajukan diri sebagai pemateri acara Indonesia Linux Conference 2022 yang awalanya akan dilaksanakan di salah satu Universitas di Ponorogo, Jawa Timur.

Namun karena sesuatu hal, akhirnya harus pindah ke tempat lain yaitu dilaksanakan di Universitas Muhammadiyah Sidoarjo (UMSIDA).

Alhamdulillah materi yang saya ajukan berjudul Aplikasi Permainan F/LOSS Untuk Pendidikan layak ditampilkan. Materi ini masuk kategori Lightning Talk dengan Durasi 10 menit.

 

Persiapan Materi

Untuk pembuatan materi ini, terlebih dulu saya mengumpulkan berbagai dokumentasi lama yang pernah saya ikuti, adapun isinya berupa Foto dan Video.

Kemudian foto-foto dan video tersebut saya susun menjadi presentasi berupa video menggunakan KDENLIVE. Saya membuat presentasi berupa video alasannya adalah untuk menyesuaikan durasi yang hanya 10 menit sesuai dengan kategori Lightning Talk. 

Saya buat materi 9 menit 55 detik (toleransi 5 detik), tentu saja saya pasang timer di di video yang saya buat. Nah... di sini ternyata saya salah memperkirakan toleransi waktu tersebut yang hanya 5 detik saja, mungkin seharusnya minimal 2 menit

Efeknya adalah saya hanya bisa menggunakan presentasi tersebut kurang dari 8 menit. Hal ini terjadi karena kesalahan operator yang kurang cakap ketika membuka presentasi berupa Video.

Operator mungkin mengira presentasi saya berupa berkas format PDF, karena sebelumnya juga sudah terjadi permsalahan yang hampir sama, yaitu ketika membuka file format PDF dikiranya berupa file ODP sehingga tidak bisa dijalankan secara langsung. Setelah terjadi teriakan dari berbagai orang, presentasi bisa dibuka dengan klak-klik area tertentu baru muncul tulisan Presentasi pada menu, presentasi berupa PDF akhirnya berhasil dijalankan.

Nah.... presentasi saya juga kurang lebih seperti itu kejadiannya, yang mana waktu saya terpotong 2 menit lebih. Untung saja saya tidak jadi kirim berkas presentasi berupa format SVG yang seperti biasa saya lakukan, mungkin kalau pakai SVG bisa habis setengah durasi untuk saya.

Di sini saya tidak menyalahkan siapa pun, termasuk operator yang tugasnya menjalankan presentasi, saya yakin operatornya juga sudah keluar keringat dingin ketika itu. Saya harap ini sebagai pembelajaran untuk ke depan agar kejadian serupa tidak terulang kembali, tentunya selain kejadian Meme Tragedi Salah Desktop di Acara ILC 2022

Materi presentasi lengkap dari saya bisa dilihat di Youtube, tapi tentu saja sensasi melihat di youtube dengan melihat langsung pada acara sangat berbeda karena tidak ada narasinya.


 

Perjalanan ke Lokasi

Saya berangkat ke Sidoarjo dari semarang dengan angkutan darat, yaitu Bus umum dari terminal Terboyo Semarang tujuan terminal Bungurasih Surabaya, berangkat dari rumah pukul 20.45 WIB dengan ojek online, sampai di terminal ngeteh dan isi perut dulu, tidak lupa ngobrol-ngobrol dengan beberapa pedagang yang masih kenal saya.

Pukul 21.20 WIB naik Bus Patas di depan pabrik percetakan Suara Merdeka yang mana pabrik tersebut sudah tutup sejak lebih dari 5 tahun lalu.

Singkat cerita sampai di terminal Bungurasih pukul 05.12 menit, cari masjid, kemudian sholat subuh (tidak peduli apakah masih sah atau tidak yang penting yakin).

Ngeteh, makan pisang rebus, sarapan pop mie di terminal, selesai ritual ini berangkat ke Sidoarjo, rencananya mau naik bus TransJatim untuk ke lokasi, ternyata penuh terus, akhirnya menggunakan moda transportasi online.

 

Oh ya, untuk menggunakan moda transportasi online di terminal Bungurasih Surabaya harus dari luar terminal, akhirnya saya pagi itu sedikit olah raga kecil dengan jalan kaki ke luar dari terminal.

Salah Lokasi

Tanggal 04 November ada kelas Seminar LibreOffice internal di Kampus UMSIDA, pesertanya adalah dosen dan mahasiswa/i Prodi IT, kebetulan saya dan pak Aftian yang ditunjuk sebagai pematerinya.

Saya tidak tahu jika acara seminar diadakan di kampus yang berbeda (salah saya juga sih tidak tanya ke panitia), ternyata dilaksanakan di kampus 2. Saya naik ojek online turun di kampus 1. Pas turun ada pesan dari telegram kalau seminar dilaksnakan di kampus 2 lantai 4.

Saya pun bertanya Satpam, dimana letak kampus 2, oleh satpam ditujukkin kalau kampus 2 bapak maju lurus saja, nanti belok kanan, di sebelah gedung yang sedang di renovasi itu kampus 2, eh ternyata info dari satpam tersebut salah, tanya satpam lagi, baru dapat jawaban yang benar kalau kampus 2 jaraknya masih sekitar 3 KM.

Singkat cerita saya pun akhirnya sampai di kampus UMSIDA 2 dengan naik ojek online lagi.

 

Di kampus 2 clingak-clinguk, jalan kaki ke masjid, di depan masjid sudah ada beberapa orang yang mengenali saya padahal belum pernah bertemu langsung sebelumnya.

Istirahat di lantai 3, tidak lupa numpang mandi biar segar. Tidak beberapa lama teman-teman panitia datang, ngobrol-ngobrol sebentar.

Pukul 09.12 WIB acara seminar dimulai, seminar dilaksanakan di lantai 4 yang mana untuk ke lantai 4 tidak ada lift, jadi harus jalan kaki melewati tangga yang cukup unik.

Materi pertama adalah Pengenalan LibreOffice secara umum, dilanjut dengan penjelasan dan demo LibreOffice Impress.


 

Selesai materi  LibreOffice, dilanjut materi Pegon yang dibawakan oleh pak Aftian, tidak lupa pak Aftian juga ceramah mengenai dosa besar menggunakan aplikasi yang seharusnya berbayar tapi tidak bayar.

Pukul 10.00 WIB acara seminar internal selesai, makan cemilan yang disediakan panitia, foto-foto, kemudian kembali ke kampus UMSIDA 1.

Sampai di sini dulu Liputan Indonesia Linux Conference 202, sampai jumpa pada liputan selanjutnya.

Terima kasih sudah mau membaca tulisan singkat ini. 


Meme Tragedi Salah Desktop di Acara ILC 2022

Kemarin di acara ILC2022 terulang kembali kejadian yang hampir mirip kejadian tempat lain yang pernah ada sehingga menjadi cukup viral memenya.

 
Berikut ini analisa mengenai penyebab kejadian tersebut dari sudut pandang teknisi berdasarkan profesi dan pengalaman saya, sehingga tidak terulang lagi kejadian serupa pada acara lain.
 
Ketika acara dimulai saya sudah menyadari bahwa ada yang tidak beres dengan tamplian gambar di Videotron, yaitu pada tampilan beberapa logo yang tidak simetris atau dengan kata lain terlihat gepeng.
 
Tidak lama kemudian saya tanya ke operator yang menjalankannya sampai dimana kewenangannya untuk akses komputer dan Videotron tersebut.
Dia jawab sebatas mengoperasikannya saja.
 
Nah sampai disini sudah jelas, pihak panitia penyelenggara tidak bisa berbuat banyak, dan kalau pun dipaksakan acara pasti molor, bisa jadi malah tidak terlaksana hari itu juga, karena teknolgi Videotron tidak sebarangan orang bisa menanganinya.

Videotron Rakitan
Biasanya Videotron besar dalam ruangan menggunakan versi rakitan, alasannya kalau beli yang bukan rakitan susah memasukkanya ke ruangan terutama ketika melewati pintu ukuran standar dengan tinggi 2 meteran.
Yang saya maksud di sini adalah Vediotron yang dirakit di tempat, karena semua videotron memang rakitan, hanya saja kalau videotron outdoor sudah dirakit dari distributor.

Berikut penjelasan sederhana proses perakitan Videotron:
Komponen: Cabinet - Kontroler, Sender Card, Reciver Card, dan Player
 
Langkah perakitan dan pengaturan
Rakit dulu Cabinet Kontroler Videotron dengan benar sesuai jumlahnya,  cabinet harus benar urutannya, kalau keliru potongan gambar bisa acak. 
 
Gambar Ilustrasi jika salah susun Cabinet
 
 
Sambungkan Cabinet ke Sender Card (sebagian besar koneksi dari komputer/laptop ke sender card modern menggunakan jaringan internet)
 
Kontroler Videotron
Install sender card, setelah terdeteksi, masuk ke screen configutation setting panel, masukkan password, bagian setting ini menggunakan software khusus (contoh: HD Player)
 
Bagian ini sengaja tidak saya lampirkan gambar pemandu karena pembaca tidak perlu mikir, setting Videotron itu benar-benar mudah kok.
 

Komponen lain yang perlu di perhitungkan adalah Receiver card, misal menggunkan Linsn Rv908m32

Setting brightness (semakin besar nilainya semakin bagus, tapi daya yang digunakan semakin besar atau semakin boros listrik)

setelah semua setting selesai, untuk bisa menghubungkan laptop lain ke Videotron bisa menggunakan menambahkan player, contoh menggunakan Novastar yang memiliki input AV, VGA, dan HDMI

Permasalah di ILC2022 bisa saja terjadi seperti kondisi berikut:
  1. Driver VGA pada komputer belum terinstall dengan benar, sehingga gambar yang ditampilkan tidak bisa sempurna (terlihat gepeng pada ikon lingkaran), dengan demikian kesulitan untuk melakukan pengaturan pada desktop.
  2. Resolusi komputer/laptop hanya support resolusi 1365 x 768 sedangkan Videotron membutuhkan resolusi 1920 x 1080, hal ini terlihat jelas pada salah satu presentasi yang menggunakan file PDF yang bagian bawahnya muncul potongan gambar bagian atas salindia.
  3. Tidak ada tambahan Palyer pada Videotron sehingga tidak bisa menghubungkan laptop ke Videotron (dengan asumsi videotron langsung terhubung ke komputer melalui LAN.
  4. Bisa saja terjadi karena permasalahan point 1 dan 2.
  5. Atau bisa juga karena faktor lainnya
 Ada juga yang komentar ditwitter kalau laptop operator tidak boleh diganti Linux 
 
Kalau komentar ini bisa saya simpulkan adalah komentar ngawur, apa diatahu secara pasti kalau Videotron bisa tersambung dengan Laptop?. 
Bisa jadi tidak bisa karena tidak ada port input VGA/HDMI ke laptop (tidak menggunakan player tambahan). Atau kasus lainnya laptopnya tidak ada port LAN RJ45.
 
Misalkan bisa menggunakan laptop yang OSnya Linux apakah support dengan Videotron secara langsung?
 
Atau misalkan komputer operator boleh diinstall ulang, apakah ada jaminan driver dan software videotron tersedia di Linux?, kalau pun tersedia proses install pasti memakan waktu lama, belum lagi jika gagal di tengah jalan yang mengakibatkan tampilan Videotron menjadi klisse.
 
Kalau sampai terjadi Klisse harus bongkar videotron untuk reset ulang kontroller (clear CMOS), bahkan bisa lebih parah lagi kalau harus inject firmware (semacam firmware eprom pada TV.

Untuk kalian yang membuat dan menyebarkan meme tersebut jika memang pintar cobalah buat tutorial Cara Menyambungkan Laptop OS Linux ke Videotron dengan Mudah, jika tidak bisa, kalian memang Djuaanncuuuk (mumpung acaranya di jawa Timur saya pakai pisuhan jawa timuran)
 
Sebenarnya saya juga mau MISUH dengan kejadian itu, karena berimbas juga pada materi saya, tapi percuma juga karena sudah ada yang mewakili pada sesi setelahnya. Seandainya saya juga ikut misuh tidak akan mengubah apapun, bahkan bisa memperkeruh suasana.
-
Semarang, 06 November 2022

Google Cloud: Backup and Restore Our GKE Workloads using Backup for GKE

Hi all!

I hope that you are doing well, safe and healthy!

In this journal, I would like to share and explain a case study related to one of the great features of Google Kubernetes Engine (GKE). Yup, it is a Backup for GKE. As the name suggests, this feature is intended to back up and restore the workloads in the Kubernetes cluster we have on Google Cloud.

What can be backed up?:

  • Configuration: Kubernetes resource including manifest and the cluster state.
  • Volume backups: Application data that correspond to PersistentVolumeClaim resources

There are many possible scenarios that we can choose to back up and restore the cluster. For example, we can only back up the configuration and restore it to the newly created cluster, or we can also back up the entire cluster and restore it to the source cluster for disaster recovery that may happen. Besides that, we can also set a scheduler job to run back up automatically. It will save our lives when shocking incidents unexpectedly happen.

From the main documentation here, there are two main components to focus on. A service and an agent. A service has the ability to serve as a controller for Backup for GKE service, and the agent will run automatically in the cluster where backups or restores are performed. Below is the diagram architecture:

As you may know, in the previous journal, I already wrote about Velero. One of the open-source tools which has a similar function to Backup for GKE. So, what is the difference between both? Based on my perspective, Backup for GKE is more simplified and requires less effort than Velero. You do not necessarily download the binary and install it like Velero. Also, Backup for GKE is more integrated into GKE and GCP services as common like IAM, Cloud Storage Bucket, etc.

But, if you were more familiar with Velero as you’re used it in another Kubernetes environment cluster before, and you want to use Backup for GKE now, you need to adapt again . For example, in Backup for GKE you need to create a backup and restore plan as template before doing a backup and restore. Backup for GKE also gives us a challenge when we’ve already enjoy using it and we have to move in another cloud platform, we need to research and adapt again because this feature is native and proprietary.

Backup for GKE is a separate service from GKE, so the pricing too. Based on the documentation here, we will be charged along two items. Backup management and also storage. And the pricing is different based on the region. So be careful!

Now. In this journal, we will do a simple backup and restore scenario. I have a GKE cluster in us-central1 named gke-cluster1-a. There, I deploy a wordpress application with a persistent disk provided by PersistentVolumClaim and execute backup regularly every hour. Then I create a new GKE cluster named gke-cluster1-b, and try to restore the backup created before to test and ensure that the backup runs smoothly and successfully.

What will I back up? GKE cluster configuration and wordpress data stored on persistent disk. So, when the restore is complete, wordpress is automatically loaded and can be accessed from outside.

As I writing this journal, Backup for GKE still has a limitation for backup storage(PVC). It is only support for multi-zone (intra-region) and doesn’t support multi-region yet. So, I will only using us-central1 region for backup and restore.

Okay! Let’s jump in!

Here, I will use Google Cloud SDK instead of Google Cloud Console. So, I will define the environment variables first like below:

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
# Define env variables
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_USER=$(gcloud config get-value core/account)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID –format="value(projectNumber)")
export IDNS=${PROJECT_ID}.svc.id.goog
export GCP_REGION="us-central1"
export GCP_ZONE="us-central1-c"
export NETWORK_NAME="default"
view raw define-env-gcp hosted with ❤ by GitHub

Make sure the configuration is correct, and then set the default region and zone based on the variables defined before.

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
gcloud config set compute/region $GCP_REGION
gcloud config set compute/zone $GCP_ZONE

We can verify with the command below:

gcloud config list

We need to enable three APIs that will be used for each service. Containers API will be used by GKE for computing, storage API will be used by GKE for persistent disk, and also GKE Backup for backup and restore tasks.

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
gcloud services enable compute.googleapis.com \
container.googleapis.com \
storage.googleapis.com \
gkebackup.googleapis.com
view raw enable-apis-gke hosted with ❤ by GitHub

We can verify the enabled services with command below:

gcloud services list --enabled

Next. We have to create a GKE cluster. I create it as a public cluster with a multi-zones configuration in us-central1 region. Do not forget to add –addons=BackupRestore to install Backup for GKE agent in this cluster.

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
export CLUSTER_NAME="gke-central1-a"
gcloud beta container clusters create $CLUSTER_NAME \
–project=$PROJECT_ID \
–region=$LOCATION \
–addons=BackupRestore \
–num-nodes=1 \
–enable-autoupgrade –no-enable-basic-auth \
–no-issue-client-certificate –enable-ip-alias \
–metadata disable-legacy-endpoints=true \
–workload-pool=$IDNS

Verify the cluster and make sure the state of all workers is Ready.

gcloud container clusters get-credentials $CLUSTER_NAME \
--region $GCP_REGION --project $PROJECT_ID

kubectl get nodes -o wide

For wordpress application, I am using the tutorial from here. You can follow along, or use your own application instead.

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
# create Kustomize file
cat > ./kustomization.yaml << EOF
secretGenerator:
– name: mysql-pass
literals:
– password=gkebackup2022
EOF
# download manifests
curl -LO https://k8s.io/examples/application/wordpress/mysql-deployment.yaml
curl -LO https://k8s.io/examples/application/wordpress/wordpress-deployment.yaml
# update Kustomize file (note >> which appends original file)
cat >> ./kustomization.yaml << EOF
resources:
– mysql-deployment.yaml
– wordpress-deployment.yaml
EOF
# deploy (using built-in kustomize feature of kubectl)
kubectl apply -k ./
view raw deploy-wp-gke hosted with ❤ by GitHub

Make sure the pod is running, the external IP in the service appears, and the volume state is bound.

kubectl get pods
kubectl get svc
kubectl get pvc

Try to access the application from browser like below.

Now, we are going to do back up strategy. We will back up the entire kubernetes cluster environment, including data volume and secrets.

Before that, make sure the location can provide it, because not all regions can using command below:

gcloud alpha container backup-restore locations list \
    --project $PROJECT_ID

For the backup strategy, we have to create a BackupPlan first. I will create it using environment variables that defined below

# Define env variables for GKE Backup
export BACKUP_PLAN="gke-central1-a-backup"
export LOCATION="us-central1"
export CLUSTER="projects/$PROJECT_ID/locations/$GCP_REGION/clusters/$CLUSTER_NAME"
export RETAIN_DAYS="3"

And then, create a BackupPlan which will back up all namespaces, including secret and volume data. I also set the cron scheduler that will automatically back up every hour and set backup retention only for 3 days.

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
gcloud alpha container backup-restore backup-plans create $BACKUP_PLAN \
–project=$PROJECT_ID \
–location=$LOCATION \
–cluster=$CLUSTER \
–all-namespaces \
–include-secrets \
–include-volume-data \
–cron-schedule="0 * * * *" \
–backup-retain-days=$RETAIN_DAYS \
–locked

Verify the backup plan newly created:

gcloud alpha container backup-restore backup-plans list \
--project=$PROJECT_ID \
--location=$LOCATION

We can also verify from the Cloud Console too

How do we back up using BackupPlan created before? Using the command below will create a manually backup named manual-backup1 with the appropriate BackupPlan, location, and project.

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
export BACKUP=manual-backup1
gcloud alpha container backup-restore backups create $BACKUP \
–project=$PROJECT_ID \
–location=$LOCATION \
–backup-plan=$BACKUP_PLAN \
–wait-for-completion

Wait and ensure the backup is successful.

All right. After we do the back up the task. We need to test using restore to ensure that the backup is running correctly.

First, I will create a second GKE cluster with the same specification like the cluster one.

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
export CLUSTER_NAME2="gke-central1-b"
gcloud beta container clusters create $CLUSTER_NAME2 \
–project=$PROJECT_ID \
–region=$LOCATION \
–addons=BackupRestore \
–num-nodes=1 \
–enable-autoupgrade –no-enable-basic-auth \
–no-issue-client-certificate –enable-ip-alias \
–metadata disable-legacy-endpoints=true \
–workload-pool=$IDNS

Same as BackupPlan, I define the environment variables:

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
export RESTORE_LOCATION="us-central1"
export RESTORE_PLAN="gke-central1-b-restore"
export CLUSTER2="projects/$PROJECT_ID/locations/$GCP_REGION/clusters/$CLUSTER_NAME2"
export CLUSTER_RESOURCE_CONFLICT_POLICY="use-backup-version"
export NAMESPACED_RESOURCE_RESTORE_MODE="delete-and-restore"
export VOLUME_DATA_RESTORE_POLICY="restore-volume-data-from-backup"

And do the manual restore with appropriate restore plan and the backup created before.

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
export RESTORE="manual-restore1"
gcloud alpha container backup-restore restores create $RESTORE \
–project=$PROJECT_ID \
–location=$GCP_REGION \
–restore-plan=$RESTORE_PLAN \
–backup=projects/$PROJECT_ID/locations/$LOCATION/backupPlans/$BACKUP_PLAN/backups/$BACKUP \
–wait-for-completion
view raw restore-gke hosted with ❤ by GitHub

Wait until the restore is successful. Verify the pods is running, PVC are bounds, and the external IP is accessible

References:

  1. https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/concepts/backup-for-gke
  2. https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/how-to/install

Cheers!

Google Cloud: Backup and Restore Our GKE Workloads using Velero

Hi all!

I hope that you are doing well. In this journal, I will explain the backup and restore strategy for Kubernetes using Velero, specifically in Google Kubernetes Engine (GKE).

As you may know, Velero is one of the great open-source tools which can be used to back up and restore (including migrate and replicate) our existing Kubernetes cluster. It has lots of features which we can use. First, absolutely it is open source. We can use Velero in all most Kubernetes environments. For example, on-premise, Google Kubernetes (GKE), or other public clouds. So, if you are already using Velero in another environment, you will easily adapt to it in GKE.

Based on the main documentation here, there are many use cases that we can use to implement using Velero, for example, backup filtering. Velero is also easy to use. We just have to install the binary and a bit of configuration to connect to the cluster, and it is ready to do backup and restore.

But, in this case, there are many limitations on Velero too. First, Velero does not natively support the migration of persistent volumes snapshots across cloud providers. If we want to do it, we need to enable Restic. Velero also does not support do restore into a cluster with a lower Kubernetes version than where the backup was taken. So, we need to ensure the version is properly and carefully.

Maybe, in previous experience, you’ve already tried Velero to execute backup and restore on-premise Kubernetes environment. This is the most common use case, but storage is one of the benefits of using the public cloud. We don’t necessarily to taking care of the backup storage because (for example, in GCP, we are using cloud storage) it is fully managed.

We just have to create a backup (if we don’t have one) that is ready to use.

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
BUCKET=velero-backup-anandadwi
gsutil mb gs://$BUCKET/
# verify
gsutil ls

Because Velero needs access the resources and the storage, we need to create a service account and define the permission. The permission must be attached to the service account is get, create, and delete. So the resources are accessible from Velero.

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
gcloud iam service-accounts create velero-backup-anandadwi –display-name "Velero SA"
SERVICE_ACCOUNT_EMAIL=$(gcloud iam service-accounts list –filter="displayName:Velero SA" –format 'value(email)')
gcloud iam service-accounts list
ROLE_PERMISSIONS=(
compute.disks.get
compute.disks.create
compute.disks.createSnapshot
compute.snapshots.get
compute.snapshots.create
compute.snapshots.useReadOnly
compute.snapshots.delete
compute.zones.get
)
gcloud iam roles create velero.server –project $PROJECT_ID –title "Velero SA" –permissions "$(IFS=","; echo "${ROLE_PERMISSIONS[*]}")"
gcloud projects add-iam-policy-binding $PROJECT_ID –member serviceAccount:$SERVICE_ACCOUNT_EMAIL –role projects/$PROJECT_ID/roles/velero.server
gsutil iam ch serviceAccount:$SERVICE_ACCOUNT_EMAIL:objectAdmin gs://${BUCKET}
gcloud iam service-accounts keys create credentials-velero –iam-account $SERVICE_ACCOUNT_EMAIL

After the permission is configured, we now have to download the Velero. There are many architectures provided, and we can just choose it right away

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
wget -c https://github.com/vmware-tanzu/velero/releases/download/v1.9.2/<RELEASE-TARBALL-NAME&gt;.tar.gz
tar -xvf <RELEASE-TARBALL-NAME>.tar.gz
sudo cp <RELEASE-TARBALL-NAME>/velero /usr/bin/
view raw velero-install hosted with ❤ by GitHub

And install it. Don’t forget to use GCP as the plugin and define the secret file to the secret file created earlier before. This is important, so the Velero can connect to the bucket

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
velero install –provider gcp –plugins velero/velero-plugin-for-gcp:v1.5.0 –bucket velero-backup –secret-file ./credentials-velero –use-volume-snapshots=true

Okay. Now Velero is ready to use.

In this journal, for example, below is my GKE cluster. I am using Kubernetes with the version 1.22.12, and it has three workers nodes.

And there, I already deployed a wordpress application that uses PVC for storage and services with LoadBalancer type. You can follow along here.

There are many ways to do a backup. We can backup based on the namespace, on the label, and even the entire cluster, including cluster state. This depends on the use case. For example, I only want to do backup-specific namespace or deployment based on the label.

Here is the example if I only want to do a backup for wordpress namespace

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
velero backup create wp-backup –include-namespace wordpress
velero backup get
velero backup describe wp-backup

In another moment, we can do a backup automatically by scheduling it as daily like below

The resources will automatically back up into the storage defined before.

After backup is successful, how do restore it? For testing, we can delete the deployment first and try to restore it in the same cluster. Or if we have another cluster, we can restore it there too.

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
BACKUP_NAME = wp-backup
velero restore create –from-backup $BACKUP_NAME
view raw velero-restore hosted with ❤ by GitHub

References:

  1. https://velero.io/docs/v1.9/
  2. https://gist.github.com/rcompos/adc4f0dd00e37df023fd78c5db7965ef
  3. https://github.com/vmware-tanzu/velero-plugin-for-gcp

Cheers!

Google Cloud: GKE Upgrade using Blue-Green Strategy

Hi all!

I hope that your day is good enough. In this journal, I would like to explain about Google Kubernetes (GKE) upgrade, specifically using Blue-Green Strategy.

By default, GKE offers an automatic upgrade feature to our existing GKE cluster. We just have to make sure auto-upgrade is enabled, with a bit configuration, and the system will do an upgrade automatically. Sounds promising, right?

That strategy has a lot of benefits. First, it is less effort and easy to use because we don’t have to manually track and update the versions. It has better security management because GKE will ensure that the security of the selected version is updated.

But how about when we want to choose the specific version of Kubernetes for our existing cluster? For example, I want to use the newer version from the current version instead of the latest. How about our strategy when the automatic upgrade is still happening, but our application is crashing/failing, and we have to downgrade the version?

From the documentation here, downgrading a cluster is not recommended, and we cannot downgrade a cluster control plane from one minor version to another. For example, if your control plane runs GKE version 1.17.17, you cannot downgrade to 1.16.15. If we attempt to do that, we will get an error. We can just downgrade 1.17.17 to 1.17.16, if that version is still available.

The same thing will happen to node pool, based on the documentation here. If we want to downgrade the worker’s node, we have to create a new node pool with the previous version, drain the workers which use the latest version, and delete it. Lots of effort and pain.

So, what is the alternative? How do we avoid the pain and ensure the upgrading process is successful?

We can do this by using the upgrade manually strategy 🙂

Similar to common Kubernetes clusters, the manual upgrading process will consume more effort and time. But, we will have more control to ensure the upgrading process is successful and reduce the risk.

Using a manual process, we can choose the specific version of the Kubernetes cluster instead of the latest. But, to be honest, it also has a limitation. We cannot upgrade the cluster to more than one minor version at a time. So, if our version cluster is 1.22 and we want to upgrade to 1.24, we have to upgrade to 1.23 first and then upgrade it to 1.24. The reference is here.

The limitation is similar to the Kubernetes provided by officials. But, one thing we have to remember is the version provided by GKE is limited. As this journal writes, the latest version of Kubernetes is 1.25. But from the version provided by GKE is still 1.24. Version 1.25 is still in rapid channel (pre-production), and we have to wait 2-3 months until it is ready to be used in production.

GKE provided two strategies when we want to use a manual upgrade, SURGE (default) and BLUE-GREEN. What is the difference between both? The surge strategy uses a rolling method to upgrade nodes simultaneously in an undefined order. This strategy is better for our applications that tolerate disruptions until 60 minutes when graceful termination happens.

So, when our applications are less tolerant of disruption, it is better to use the blue-green strategy. Other than that, blue-green strategy also offers to cancel, resume, roll back, and complete features. This is a great solution if our workloads fail and we need to be rolled back to the old node configuration.

When we recap, the steps to do blue-green strategy upgrade are:

  1. Upgrade the control-plane version to the newer version
  2. Create a new worker node pool (call it a green pool) with the same version as control plane
  3. Drain and cordon nodes in the blue node pool (node pool with the previous version)
  4. Migrates the applications to the green pool
  5. Delete the blue node pool
  6. Test and verify

All right, let’s practice!

Let’s say I have a cluster named gke-dev1 in us-central1 region, and it uses 1.22.12-gke.2300 for the version.

By default, the upgrade strategy for node pool is SURGE which means

And we need to change to blue-green strategy by using the command below:

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
gcloud container node-pools update $NODE_POOL \
–cluster $CLUSTER_NAME \
–enable-blue-green-upgrade

After that, upgrade the control plane:

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
gcloud container clusters upgrade $CLUSTER_NAME \
–region $GCP_REGION \
–cluster-version $NEW_K8S_VER \
–project $PROJECT_ID \
–master

Verify that the control plane is upgraded as below.

After that, create a green node pool that uses the same version as the control plane node

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
gcloud container node-pools create pool-gke1-23 \
–project $PROJECT_ID \
–cluster $CLUSTER_NAME \
–region $GCP_REGION \
–num-nodes $NUM_NODES \
–machine-type $MACHINE_TYPE \
–node-labels=nodepool=$NEW_GKE_VER

And then drain and cordon the blue node pool. This action ensures that new pods are not scheduled to the blue node pool.

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
NODE=$(kubectl get nodes -o wide | grep v1.22.12-gke.2300 | awk '{print $1}'
kubectl -n default cordon $NODE

As we can see below, the node status is changed to SchedulingDisabled.

After this, we have to reschedule the applications into the green node pool. Make sure the applications is healthy, and then we delete the blue node pool.

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
gcloud container node-pools delete default-pool \
–project $PROJECT_ID \
–cluster $CLUSTER_NAME \
–region $GCP_REGION

References:

  1. https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-upgrades
  2. https://cloud.google.com/kubernetes-engine/docs/how-to/upgrading-a-cluster
  3. https://cloud.google.com/kubernetes-engine/docs/concepts/node-pool-upgrade-strategies
  4. https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/

Thank you!

Google Cloud: Deploying a Static Web Application to Google Cloud Storage Bucket with HTTPS Load Balancer

Hi all!

I hope that you are doing well, safe, and healthy!

In this journal, I would like to share how to deploy a static web application using the Google Cloud Storage bucket for hosting with HTTPS Load Balancer. So it will be safely accessible from outside.

What makes it different from static web hosted on other platforms? Using this HTTPS Load Balancer will ensure the communication and/or user requests will be secure using the HTTPS 443 Protocol.

You may see the diagram below:

The data flow is:

  • When external users access a static website from outside, the request will forward to the Load Balancer system.
  • Like a gate, the forwarding rule is the first part that needs to be passed. It contains the public IP along with the port used by the application. The forwarding rule is responsible for forwarding requests to the respective HTTP(S) proxy targets.
  • Once received by the target HTTP(S) proxy, the request will be evaluated using the URL Map to determine where to forward the request. For example, in this journal will be forwarded to the GCS backend, which contains the application. In this section also, we can add security using an SSL certificate to make it even more secure.

Let’s jump in.

Here. I am using Google Cloud SDK for configuration. First, we have to define the environment variables.

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_USER=$(gcloud config get-value core/account)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")

# Workload identity domain
export IDNS=${PROJECT_ID}.svc.id.goog

export GCP_REGION="asia-southeast2"
export GCP_ZONE="asia-southeast2-b"

export NETWORK_NAME="default"

And enable the appropriate APIs

# enable apis
gcloud services enable compute.googleapis.com \
    storage.googleapis.com

To verify which APIs is enabled, we can use the command below:

gcloud services list --enabled | head -25 | tail -15

Set default region and zone to avoid wrong location

# Configure default region and zone
gcloud config set compute/region $GCP_REGION
gcloud config set compute/zone $GCP_ZONE

To verify all configuration is correct, use the command below:

gcloud config list

We need to create a new bucket in GCS to store the static files. We can use gcloud or gsutil command-line tool that provided by Google Cloud to create it. For example, I create a bucket named pengedit-markdown-sept2022site

# create a storage bucket
export BUCKET_NAME="pengedit-markdown-sept2022site"
gsutil mb -b on gs://$BUCKET_NAME

gsutil ls

I will use a react app I created before for this scenario. So, I need to clone from the repository first, and run npm run build command to provide a build directory for production-ready application

# Setup the application
APP_NAME="pengedit-markdown"
git clone https://github.com/misskecupbung/pengedit-markdown
cd $APP_NAME
npm i react-scripts
npm run build
cd ../

Copy all the sources code in build directory to the bucket newly created.

# upload site files
gsutil cp -r $APP_NAME/build/* gs://$BUCKET_NAME

For making it accessible from outside, we need to configure permission too. It must be accessible by anyone with read-only access.

# set read permissions for public
gsutil iam ch allUsers:objectViewer gs://$BUCKET_NAME

# set 404 to redirect to index.html page
gsutil web set -m index.html -e index.html gs://$BUCKET_NAME

Prepare the dishes is finished.

Now, we are going to set up the HTTPS Load Balancer which will serve to handle external requests from outside. Before that, I will define the environment variable for IP Public and SSL Certificate that I will request and domain name that I will use

export ADDRESS_NAME="my-public-ip"
export CERTIFICATE_NAME="pengedit-markdown-ssl"
export DOMAIN="pengedit-markdown.dwiananda.me"

Request a dedicated Public IP with command below. This IP will be used by the web application.

# reserve external IP
gcloud compute addresses create $ADDRESS_NAME --global

After that, go to your own DNS Management and point the domain to the appropriate IP Address before. Make sure it is resolved by a command similar nslookup or dig.

Fortunately! And maybe this is also one of the huge benefits when we use HTTPS Load Balancer, we can request an SSL Certificate that we can use on the target HTTPS or target SSL proxy just by one line command.

# create a certificate
gcloud compute ssl-certificates create $CERTIFICATE_NAME \
    --description=$DOMAIN \
    --domains=$DOMAIN \
    --global

The requesting process may consume around 20-40 minutes depending on the issuer. Please wait until the status changes into ACTIVE.

We can also verify the SSL Certificate from the cloud console like below

And then, we also need to create a backend service that will distribute the requests to the healthy backends. In this case, it is a GCS bucket.

# create backend bucket for lb
export BACKEND_BUCKET_NAME="pengedit-md-backend-static-site"
gcloud compute backend-buckets create $BACKEND_BUCKET_NAME \
    --gcs-bucket-name=$BUCKET_NAME

Define a backend service created before in a URL MAP

# configure URL Map
gcloud compute url-maps create https-lb \
    --default-backend-bucket=$BACKEND_BUCKET_NAME

And create a target HTTPS Proxy which configured URL Map and SSL Certificate created before.

# Add HTTPS target proxy to LB
gcloud compute target-https-proxies create https-lb-proxy \
    --url-map=https-lb \
    --ssl-certificates=$CERTIFICATE_NAME

After the target HTTPS proxy is created, create a new forwarding rule that connected to the target.

# Configure Forwarding Rule
gcloud compute forwarding-rules create https-content-rule \
    --load-balancing-scheme=EXTERNAL \
    --network-tier=PREMIUM \
    --address=$ADDRESS_NAME \
    --global \
    --target-https-proxy=https-lb-proxy \
    --ports=443

Don’t forget to create a firewall rule to allow the incoming request from outside using TCP port 80 and 443.

# Add a firewall rule
gcloud compute firewall-rules create allow-http-https-traffic \
    --direction=INGRESS \
    --priority=10000 \
    --action=ALLOW \
    --rules=tcp:80,tcp:443 \
    --source-ranges=0.0.0.0/0

And that is. After all the configuration is successfully. We can verify the web application using command-line tool similar like cURL or using browser instead.

References:

Cheers!

AWS: Building a Simple Web Application Using AWS CodeBuild

Hai!

Selamat siang. Pada jurnal ini saya ingin berbagi sedikit mengenai AWS CodeBuild. AWS CodeBuild merupakan layanan yang memiliki tugas untuk meng-compile kode aplikasi, menjalankan unit test, dan membuat artifak yang siap untuk di deploy oleh layanan AWS CodeDeploy.

AWS CodeBuild menawarkan banyak sekali build environment yang sudah dikemas oleh bahasa pemrograman dan build tools populer seperti Apache Maven, Gradle, dan masih banyak lagi. Kelebihan AWS CodeBuild:

  • Fully managed. Dikelola sepenuhnya oleh AWS
  • On demand. Skalabilitasnya sangat tinggi dan sesuai permintaan
  • Out of the box

Mari kita coba.

Pertama, masuk ke AWS Management Console. Pada kolom pencarian, ketik AWS CodeBuild.

Berikut ini tampilan dashboard dari AWS CodeBuild. Klik Create Build Project untuk membuat project baru.

Isikan nama project, misal web-app dan isikan deskripsinya lalu gulir ke bawah

Untuk Source Provider, pilih AWS CodeCommit dan pilih repositori yang diinginkan. Jangan lupa atur branch nya juga ya. Disini saya atur default ke master. Lalu gulir ke bawah

Pada bagian environment, saya pilih Managed Image dengan pengaturan:

  • Operating system: Amazon Linux 2
  • Runtime: Standard
  • Image: aws/codebuild/amazonlinux2-arch64-standard:1.0
  • Image Version: use the latest image for this runtime version

Untuk bagian service role, saya pilih New Service Role dan set default pengaturan lainnya

Pilih No Artifact karena disini saya tidak ingin membuat artifak dan hanya ingin mencoba AWS CodeBuild saja dan uncheck pada Logs. Lalu klik Create Build Project

Pastikan project berhasil dibuat dan untuk menjalankan build klik Start Build

Tunggu sampai statusnya berubah menjadi Succeded

Buka tab Phase details dan bisa diverifikasi mengenai tiap fase build yang telah dijalankan

Sekian!

Hoby Pencet Tombol Meteran

Sudah hampir 1 bulan ini sering pencet-pencet tombol Meteran PLN.
Berkaitan dengan pencet-memencet tombol meteran tersebut saya ada beberapa cerita menarik, tapi saat ini saya ceritakann 1 dulu saja.
Beberapa hari lalu ada teman yang beli token listrik, nah ketika selesai diinput tulisannya gagal, sudah dicoba berulang-ulang tetap nihil hasilnya.


Akhirnya dia komplain ke saya, ya sudah saya kompain ke PLN melalui call center 123, biar cepat karena kalau lewat aplikasi PLN Mobile prosesnya lebih lama, walau begitu ketika kita telp ke 123 salah satu jawaban si robot adalah kurang lebih seperti ini "agar pelayan lebih cepat ditangani silakan gunakan aplikasi PLN Mobile" tapi yaitu tadi kenyataannya malah sebaliknya.

 


Pernah komplain lewat aplikasi PLN Mobile dari jam 8 pagi, jam 4 sore baru ditangani.
Singkat cerita ketika saya telp 123 diminta nomor WA yang aktif. saya berikan saja.
Saya Telp 123 pukul 14.xx WIB, pukul 21.xx WIB si Halo Electrizen baru kirim WA berisi Key Change Token-1 untuk diinput ke meteran yang bermasalah.


Ya sudah saya teruskan saja kode tersebut ke pemilik meteran, dengan sedikit penjelasan cara menggunakannya.

Beberapa menit kemudian pemilik meteran balas WA saya, bahwa ketika selesai memasukkan kode baris ke-2 selalu gagal.
Akhirnya dia minta tolong ke saya untuk datang ke rumahnya, saya pun dijemput.
Sampai di rumahnya langsung saya input 4 baris kode tersebut, ternyata memang benar seperti yang dia bilang, pada baris kedua keterangannya gagal.


Jalan keluarnya saya reset meteran tersebut dengan pencet angka 0 (nol) sebanyak 2 kali, kemudian Enter.
Baru deh masukkan 4 baris kode tersebut, selanjut masukkan kode token yang dia beli. dan input token pun sukses.

Sementara ini kalau ada yang beli token listrik, saya tolak dengan alasan Saldo habis, daripada cuma untung seribu rupiah tapi ribet dan menyita waktu. Lebih baik waktu digunakan untuk keperluan lain yang lebih bermanfaat, misalnya menulis buku.
-
Mungkin PLN keliru dengan slogannya "Listrik Printar" kalau jadinya ribet begini, mungkin sloganya bisa diubah jada "Listrik Belajar"

Sistem peringatan dini (EWS)

“Entah kenapa ketika tiba-tiba passion gue muncul terhadap satu hal, biasanya akan ada pekerjaan dalam waktu dekat” begitu kata gue ke Aris suatu malam di kantor Cilandak waktu gue ngoprek SMS gateway dan dia membuktikannya dua Minggu kemudian kami kedatangan tamu dari Belanda

Selepas dari kampus sekitar tahun 2010an, saat itu lagi rame-rame nya kejadian gempa di Indonesia, saat itu pengguna internet ga seramai sekarang dan blackberry masih menguasai pangsa gadget high-end. gue sempet bantuin disebuah NGO kebencanaan buat membangun sistem peringatan dini bencana alam terutama gempa bumi. datanya dari BMKG buat dibroadcast ke stasiun tv, portal, dan SMS warga di sekitar area terdampak. Teknologinya sederhana memang tapi lumayan gue jadi punya kesempatan jadi pembicara di banyak tempat gara-gara itu.

Sekitar tahun yang sama sebagian teknologi tersebut mulai diadopsi oleh beberapa lembaga dari pemantauan kota di Jakarta, pemantauan kekerasan di Papua dan Thailand selatan, pemantauan lingkungan, kekerasan thd TKI, hingga pemantauan pemilu di malaysia. Beberapa tahun kemudian. sekitar 2013 tiba-tiba dikontak mahasiswa MIT diajak mengembangkan salah satu teknologi tersebut untuk pemantauan banjir di Jakarta. Sayangnya itu hanya menjadi sebatas paper. Mungkin karena terlampau canggih kala itu.

Beberapa waktu kemudian saat rame kebakaran hutan, gw terlibat dalam pengembangan sistem peringatan dini kebakaran hutan, metodenya jauh berbeda dari yang sebelumnya lumayan ribet, tapi beberapa tahun kemudian berguna buat pekerjaan gue di lokadata. Nah sekarang gw lagi pengen iseng bikin EWS buat SpO2 karena mungkin ketersediaan tempat tidur RS akan semakin berkurang dan akan lebih banyak yg isoman, kalo ada sebuah EWS yg bisa broadcast ke nakes/RT/RW keknya bisa mengurangi beban RS. ternyata alat dan bahannya cukup murah.

Gue bilang juga apa!!

Penggalan frasa semacam itu dan sejenisnya udah gue tinggalkan sejak mungkin 5 tahunan lebih, frasa yang ga ada gunanya selain bentuk keinginan pengakuan atas keberhasilan yang entah apa yang sebenernya juga ga jelas.

Bener ga jelas, karena gw jamin 80% yang bilang kaya gitu ga siap perencanaan jika ide mereka yang dipake, kalo ditanya bagaimana rencananya biasanya akan jawab “lah gue kan udah usul, masa gue juga yang harus bikin rencana?” Terlihat flawless sekali bukan?

Belakangan sejak pemerintah terlihat kehilangan kontrol terhadap pengendalian pandemi, frasa semacam itu banyak yang lewat di timeline sosial media gue. Jadi inget omongan si Bahlul suatu hari waktu kami duduk disebuah rapat, dan lagi ngomongin yang mimpin rapat .

G: “Omongannya tinggi banget ya ga takut kesamber pesawat tuh?”
B: “Orang Indonesia itu dilahirkan dengan rahang yang kuat”
G: “maksudnya gimana?”
B: ” hobinya komentar doang ga ada eksyen”
G: “itu soalnya pas absen pembagian otak bangunnya kesiangan, dapetnya dikit deh”

Sinyal dan indikator

Bagaimana untuk mengetahui seekor sapi sedang lapar atau sudah kenyang?

Setahun trading gue belajar untuk menunggu sinyal, kemudian menunggu konfirmasi kemudian baru di eksekusi. Setelah eksekusi pun kita perlu pasang pengaman sampai semua berjalan sesuai arah sinyal. Pengaman dipasang di awal biar gue ga mikir lagi buat mengakhiri kalo ternyata setelah konfirmasi gerakan ga berjalan sesuai dengan rencana.

Mendefinisikan keberanian adalah ketika kita mengeksekusi setelah melihat konfirmasi dan memasang pengaman, spekulasi adalah ketika kita baru hanya melihat sinyal kemudian kita langsung mengeksekusi, gegabah adalah ketika ga ada sinyal kita maksa buat masuk.

Secara umum trading mencerminkan kehidupan secara keseluruhan. Manusia tidak didesain untuk mengatasi semua masalah, banyak hal yang diluar kuasa setiap individu. Dari alam sampai perasaan individu yang lain. Kita hanya perlu alat ukur atau indikator yaitu sebuah alat yg bisa kita gunakan untuk mengukur sebuah kejadian.

Output dari beberapa indikator yang saling berkorelasi bisa membentuk sebuah sinyal, sinyal – sinyal tersebut tentunya akan banyak sekali dan karena alat ukur ini adalah alat ukur statistik maka tidak selalu sinyal ini benar, oleh karena itu sinyal perlu diperkuat oleh sebuah konfirmasi. Setelah adanya konfirmasi gerakan sesuai dengan yg sinyal berikan baru rencana dapat dijalankan.

Jadi menurut gue kalo mau belajar apapun pelajari sifat dan indikator baru pelajari sinyal dan konfirmasi.

Obituary

Lebih dari 10 tahun hidup di perantauan gue bersyukur banyak ketemu orang baik, seorang kawan pernah bilang “orang baik biasanya bakal ketemu orang baik, cuma ya biasanya yg ga baik lebih banyak.”

Well, Veri Junaedi adalah salah satunya, sebelum mengenal baik kami sempat bertemu beberapa kali saat persiapan pemilu 2014 sama-sama di KPU tapi beda bidang beliau di peraturan perundangan gw di teknologi mungkin circa 2012, di tahun yang sama di kepentingan yang lain kami dipertemukan di sebuah program yaitu Matamassa program inisiatif masyarakat untuk pemantauan pemilu. Tak lama kemudian kami berada satu gedung dalam usaha rintisan kami masing-masing.

Veri Junaedi, adalah sosok yang istimewa berbeda dengan image orang yg bekerja dibidang hukum kebanyakan yg gw kenal. Entah apa yang dia lihat sama gue sehingga mau berteman sama gue. Mungkin karena kesamaan kami spontan, ketika punya ide kemudian langsung dieksekusi.

Dia orang yg tiba-tiba ga ada angin ga ada hujan tiba-tiba ngajak makan bareng, yang mungkin setiap Ramadhan ngajak buka bareng, setiap kesempatan makan-makan gw selalu diundang. hmm mungkin ini juga salah satu kesamaan kami, kami suka makan enak.

Beberapa kali kami nyoba buat bikin usaha rintisan bareng juga tapi ga jalan, kami terlalu sibuk dengan urusan masing-masing, meski gagal pertemanan kami baik-baik saja. ya gue menemukan definisi pertemanan tak sebatas materi dari orang-orang baik sekitar gue.

Perbedaan usia kami ga terlalu jauh, Gue udah nganggep dia seperti kakak gue sendiri. Sekali gue pernah ngenalin perempuan spesial gue ke dia, gue ajak ke pembukaan rumah makannya. buat gue ini adalah big move karena gue bukan tipe orang yg selalu ngenalin cewek gue ke orang-orang terdekat, unless she has taken half of my soul. Sayangnya gw ga berjodoh sama dia.

Sekitar 3 Minggu yang lalu seperti biasa dia kontak ngajakin ngopi di proyek rumah barunya di Cibinong, dia bercerita setiap weekend dia nginep disana. Rumahnya gede iya memang dia sekalian menyiapkan untuk kantor istrinya yang notaris. Ajaibnya dia juga tetep bikin area buat kumpul2 seperti yg biasa kami dan kawan-kawan sering lakukan.

“Ini nanti kita bisa kumpul-kumpul disini mas, terus yang bawah itu bisa buat barbeque, sebelah sana nanti saya bikin kolam renang, terus nanti pintu ke rumah udah saya bedakan biar yg ngumpul ga ganggu orang rumah, dan kalo kemaleman males balik udah saya siapkan kamar khusus tamu” kata Beliau sambil tertawa-tawa

Kemudian kami makan, dan gue dikenalkan seluruh keluarga besarnya dari neneknya yang biasa dia panggil emak sampai ibunya. saat itu neneknya bercerita tentang masa kecil mas Veri yang sudah ditinggal bapaknya dari usia 4 bulan dalam kandungan, kemudian ibunya yang banting tulang sebagai single parents membesarkan dia, juga paman dan sodara-sodaranya yang lain yang bahu membahu membesarkan dia. “Saya juga ga nyangka dia akan jadi anak yang pinter begini” ujar emak

Saat itu gue jadi tau darimana kebaikan dia berasal. Dia dibesarkan oleh orang-orang yang baik dan tidak pernah putus asa. dalam hati gue bertanya apa harus jadi orang sesusah ini buat jadi orang berhasil? Gue melihat mas Veri ini orang yg berhasil. Dia berhasil menjalin pertemanan dengan banyak orang dari berbagai kalangan, dia berhasil membangun kantornya yang nyaris ga sepi dari pelanggan, dan menularkan kebaikannya pada ketiga putrinya yang masih kecil.

Sekitar dua Minggu lalu dia memasang status di WA bahwa dia terkena Covid 19, gw kirim pesan ke dia semoga lekas pulih. Namun tak pernah terbalas hingga siang tadi gue dapat kabar dari Fadli teman kami bahwa Mas Veri sudah Wafat siang tadi pukul 14.10 di RS. Pelni.

Menghapus Gambar Latar Belakang di LibreOffice Calc

Kemarin sore di group Telegram LibreOffice Indonesia ada salah seorang anggota yang mengalami masalah ketika menggunakan LibreOffice.

Kemudian yang dia bertanya bagaimana cara mengatasinya, adapun permasalahannya adalah; dia menyisipkan tandatangan berupa gambar format JPG pada dokumen, kemudian dia mengaturnya ke Latar Belakang dengan cara Arrange to Background. Nah, setelah itu dia kesulitan untuk menghapusnya.

 Sampai esok harinya belum juga ada yang bisa memberi jawaban memuaskan atas pertanyaan tersebut.

Kemudian penulis menanyakan permasalahan tersebut terjadi pada LibreOffice Writer, Calc, atau Impress?


Namun penanya tidak juga memnjawab pertanyaan penulis. Akhir penulis perhatikan dengan cara yang seksama dan sesingkat-singkatnya pada tangkapan layar yang dilampirkan, dan dapat disimpulkan bahwa permasalahan tersebut terjadi pada LibreOffice Calc.

 Cara mengatasi masalah

Karena penulis juga penasaran dengan permasalahan tersebut, maka penulis berusaha mencari jalan keluaranya.

Pertama penulis mencari berkas lama yang berisi data yang agap mirip dengan milik penanya, akhirnya ditemukanlah berkas daftar belajar komputer murid-murid PKBM Kertajaya.

Langkah selanjutnya adalah; penulis menyisipkan tandatangan ke salah satu sel di berkas LibreOffice Calc tersebut (biasanya kalau saya menyisipkan tanda tangan berarti bayaran).

 
Selanjutnya penulis mengatur tandatangan tersebut ke belakang dengan cara klik kanan tanda tangan => Arrange => To Background.

Dan memang benar, setelah gambar diatur ke latar belakang tidak bisa dikelola lagi atau jadi beku, mau dihapus, digeser, diperbesar tidak bisa.

Penulis pun mencobanya dengan disertai menekan tombol pintas, yaitu dengan menekan tombol Ctrl, Shift, Alt sambil klik pada gambar tandatanga, namun tetap tidak bisa. Bahkan penulis sempat masuk ke sel dengan menekan tombol F2 hasilnya tetap nihil.

Akhirnya penulis menggunakan metode seleksi seperti pada aplikasi grafis (Inkscape, Gimp, Scribus), dan ternyata berhasil.

Berikut caranya:

Tampilkan Alat Menggambar pada LibreOffice Calc dengan cara klik View => Toolbar => Drawing.

Setelah Alat Menggambar sudah berhasil ditampilkan, cari dan klik ikon Select (biasanya berada di pojok paling kiri)

Sekarang arahkan kursor ke gambar tanda tangan, kemudian klik tanda tangan tersebut, bisa bukan?.

Dengan cara ini kita tetap bisa mengolah gambar atau tandatangan pada LibreOffice Calc yang telah diatur ke Latar Belakan (Arrang To Background), Mudah bukan?

Di bawah ini adalah video sesuai artikel ini


Demikian Tutorial singkat yang dapat penulis bagikan hari ini, sampai jumpa pada tutorial lainnya, semoga penulis tidak malas menulis di blog ini.


 

Buku Belajar Komputer Tingkat Dasar 5 Tema 1

Puji syukur tim penulis panjatkan kepada Tuhan Yang Maha Esa yang telah memberikan rahmat dan karunia-Nya, setelah molor beberapa waktu akhirnya buku Belajar Komputer Tingkat Dasar 5 Tema 1 yang kami tulis hari ini bisa rilis.


Buku ini adalah lanjutan dari buku Belajar Komputer Tingkat Dasar 4 yang sudah terbit sebelumnya. Seperti pada buku sebelumnya, materi dalam buku ini juga masih mengusung tema belajar dan bermain secara menyenangkan.
Adapun beberapa materi dalam buku ini adalah:
  • Materi pada bab 1 berisi pelajaran geografi yaitu mengenal negara-negara di berbagai dunia, sehingga anak-anak dapat mengetahui nama benua dan negara di dunia. Di dalam bab ini juga berisi permainan tentang wilayah dalam berbagai negara di dunia.
  • Bab 2 berisi pelajaran huruf braille, yaitu huruf yang biasa digunakan oleh orang-orang tidak bisa melihat. Dengan menggunakan huruf braille, orang yang tidak bisa melihat bisa membaca. Di dalam bab ini juga dijelaskan sejarah singkat terciptanya huruf braille.
  • Bab 3 berisi pelajaran cara bermain catur untuk anak-anak. Di dalam bab ini dijelaskan pengetahuan dasar mengenai catur, notasi pada permainan catur, gerakan berbagai buah catur. Materi pelajar pada bab ini dapat dilakukan lewat permainan di komputer ataupun menggunakan perangkat catur asli yang tersedia.
 Untuk mengunduh buku digital Belajar Komputer Tingkat Dasar 5 Tema 1 silakan pilih salah satu tautan berikut:

Pembaca boleh menyebarkan buku versi digital ini ke masyarakat yang membutuhkan baik secara online ataupun offline, juga dipersilakan untuk membuat mirror di berbagai web atau server yang pembaca miliki.


-

Migrasikan Konten Django Lama ke Jekyll

Para pengembang BlankOn Linux saat ini telah menggunakan Jekyll untuk beberapa situsnya, salah satunya adalah laman http://blankon.id. Penulisan konten berbasis Markdown dan situs statis merupakan pilihan yang diambil setelah beberapa tahun sebelumnya para pendahulu menggunakan Django untuk sebagian besar website mereka. Konsekuensinya konten-konten website lama yang berbasis Django tersebut perlu...

Permainan Baru di GCompris bagian 1 (Keyboard Bayi)

Awal bulan Oktober 2020 lalu penulis membaca pengumuman di Millis GCompris bahwa tim pengembang akan merilis GCompris V 1.0 pada tanggal 17 November 2020. Dengan adanya rencana rilis tersebut maka Server GCompris akan dibekukan pada tanggal 15 s/d 17 November 2020.

Dengan adanya pengumuman tersebut maka Tim Penerjemah GCompris Indonesia bergerak secara cepat melakukan diskusi melalui Telegram.

Nah di sini ternyata saya salah baca atau memahami tanggal dan bulan.


Yang seharus tanggal tanggal 15 November saya bacanya 15 September.

Pada rilis GCompris V 1,0 ini terdapat perubahan dan perbaikan pada beberapa permaianan, contohnya adalah permianan Jelajahi Peternakan Hewan, Permianan Catur, Menghitung Benda, Pengelompokan. dan lain-lain.

 

Selain itu terdapat juga beberapa permaian baru pada GCompris V1.0, yaitu: Keyboar Bayi, Listrik Analog, Labirin Pemrograman, Belajar Digit, Belajar Pengurangan,dan Belajar Penambahan.


Pada post kali ini penulis membahas permianan bernama Keyboard bayi, sedangkan permainan baru lainnya akan penulis bahas pada post berikutnya


Terjemahan pada judul permainan ini masih keliru, yang lebih tepat adalah Keyboard anak.
Tapi bisa dimaklumi karena tim penerjemah melakukan penerjemahan secara langsung dari judul aslinya yaitu Baby keyboard.



Permainan ini bertujuan sebagai sarana belajar memahami berbagai tombol pada keyboard sekaligus pengenalan huruf dan angka untuk anak-anak pada usia dini.

Cara memainkannya adalah Tekan tombol apa pun pada keyboard sesuai keinginan.
Maka Huruf, angka, atau karakter muncul di layar sesuai tombol yang ditekan tersebut.

Jika yang ditekan tombol berupa huruf dan angka maka keluar suara  sesuai tombol yang ditekan.
Jika yang ditekan tombol selain huruf dan angka maka suaranya hanya bleep.


Rencananya permainan ini akan penulis masukkan pada Buku Belajar Komputer Dasar tingkat 0 Tema 3 yang sedang penulis kerjakan, atau bisa jadi dimasukkan ke tema 1 atau 2 edisi revisi.

Untuk yang tertarik dengan buku yang penulis rilis dapat mengunjungi tautan berikut => Unduh Buku Digital Gratis



Cara Menginstall Python 3.6 di Debian 9 (stretch)

Debian 9 (stretch) secara default membawa python2.7 (default) dan python3.5. Saya sedang melakukan instalasi aplikasi yang ternyata membutuhkan Python versi 3.6. Pada beberapa tutorial di internet, menyarankan untuk menggunakan repo debian testing. Namun saat tulisan ini dibuat, saya cek repo debian testing memiliki python versi 3.8, sedangkan versi tersebut ketinggian....

Mengunci Versi aplikasi di CentOS

Setelah catatan sebelumnya kita berhasil downgrade versi aplikasi di CentOS, ternyata saat kita lakukan yum update, aplikasi kembali dinaikkan versinya ke versi yang lebih baru. Tentunya hal ini menjengkelkan karena aplikasi project kita akan kembali error alias tidak jalan. Namun jangan khawatir, pada postingan ini kita akan membahas bagaimana cara...

Cara Downgrade Aplikasi di CentOS

Sebuah aplikasi yang ditulis oleh temen-temen developer terkadang hanya kompatibel dengan versi runtime tertentu pada bahasa pemrogramannya. Hal ini akan menuntut administrator agar dapat menyesuaikan dengan kebutuhan tersebut. Nah, catatan ini disimulasikan dijalankan di sebuah VM dengan sistem operasi CentOS 8. Catatan ini juga berdasarkan pengalaman penulis saat menangani sebuah...

Multi Machine Vagrant dengan Vagrantfile Tunggal

Vagrant merupakan sebuah tools yang saya gunakan untuk provisioning Virtual Machine, khususnya untuk environment lokal di laptop. Vagrant juga dapat digunakan untuk provisioning VM dengan beberapa provider, antara lain VirtualBox, VMware, Docker, Hyper-V, maupun custom. Saya sendiri menggunakan provider Libvirt :D Oke, salah satu alasan kenapa tulisan ini saya buat...

Cara Install Autoscaling GitLab Runner yang Hemat Biaya

Ngomong-ngomong soal GitLab tidak lepas soal CI/CD (Continuous Integration/Continuous Delivery/Deployment). Nah, kebetulan Di tempat saya bekerja menggunakan gitlab-runner. GitLab Runner merupakan salah satu fitur yang sangat bermanfaat untuk menjalankan CI/CD. Saya tidak akan menjelaskan apa itu CI/CD di sini (mungkin akan saya jelaskan di postingan yang lain). Hanya akan saya...

Menjalankan Vagrant Provider Libvirt di openSUSE Leap 15.2

Melihat pak Andi Sugandi menggunakan vagrant untuk menyediakan lab VM saat beliau mengajar, saya pun jadi penasaran. Karena provisioning VM menggunakan vagrant ini sepertinya mengasyikkan, terutama karena….. Nanti deh saya ceritain apa, dan mengapa ini penting saya utarakan. Apa itu Vagrant? Tampilan Website Vagrant Vagrant merupakan sebuah perangkat lunak yang...

Cara Install gcloud CLI di openSUSE Leap 15.2

Postingan kali ini akan sangat singkat, karena merupakan catatan yang dibuat untuk sekedar mendokumentasikan apa yang saya ketikkan saat memasang gcloud CLI di laptop saya. Sistem Operasi yang digunakan di laptop saya seperti yant tertulis di judul tulisan ini, yaitu openSUSE Leap 15.2. Sebelumnya, mungkin perlu juga saya tulisan apa...

openSUSE Leap 15.2 di Google Cloud Platform (GCP)

Sebagai pengguna openSUSE, saya kadang merasa penasaran apakah bisa saya menggunakan os ini di langit sebagai server. Yang saya maksud di langit di sini adalah Google Cloud Platform (GCP), karena saya juga pengguna produk google tersebut di beberapa proyek milik klien. Namun melihat daftar templat citra (image template) di Google...

Pi Zero sebagai Tukang Periksa (Bot)

Bojongbot - Pi Zero

Saya memasang beberapa cctv berbeda merek, baik yang berjenis ip cam maupun yang analog dengan dvr. Kesemuanya terhubung ke 1 server shinobi video yang pernah saya tulis di artikel sebelumnya. Nah, beberapa perabotan itu tentunya memiliki IP, dan ada beberapa yang suka ngambek, gak hidup. Di-ping juga gak respon. Agak susah kalau tidak mengetahuinya. Kapan hari ada insiden panci presto meledak, namun cctv di area dapur pas heng. Jadi tidak ketahuan prosesnya.

Setelah kemarin ngoprek-ngoprek ARM (lagi setelah sekian lama), saya jadi inget punya beberapa perabotan arm yang tidak kepakai, salah satunya pi zero. Ya sudah itu aja dimanfaatkan jadi mesin bot. Tugasnya cuma kirim ping ke beberapa perangkat yang ada di daftar, jika gak ngasih balikan, ngirim pesan ke telegram via bot telegram.

Kodenya ada di https://github.com/princeofgiri/bojongbot.

Bot beraksi

Ada beberapa yang nanya, kenapa gak pakai ESP32 aja? Jawabannya sebagai berikut:

  1. Saya belum pernah ngoprek ESP32, baru order, belum datang saat tulisan ini dibuat
  2. Memanfaatkan yang sudah ada, jadi tinggal pakai gak perlu beli-beli
  3. Saya sangat familiar dengan linux dan bash, jadi ndak ribet bahasa pemrograman lainnya

Kepinginnya sih nanti botnya jadi tambah pinter, kulkas di rumah sepertinya ada API, bisa diintip nanti-nanti.

LibreOffice 7.0 di Raspberry Pi OS

Setelah kemarin bikin video Armbian dengan LibreOffice 7.0 (https://www.youtube.com/watch?v=1rTrCVgGXfA) ngoprek disela-sela kesibukan masih berlanjut. Kali ini ngidupin layar 7 inch dengan perangkat raspberry pi buat mainan bocah dengan GCompris.

Di Raspberry Pi OS (dulu Raspbian), yang berbasis debian buster. Caranya cukup mudah, pasang flatpak, pasang libreoffice dari flatpak. Beres!

Eh tunggu dulu, belum beres. Karena menu aplikasi libreofficenya belum bisa muncul. Harus digosok dulu. Berikut cara nggosoknya:

  • Edit berkas

/etc/xdg/lxsession/LXDE-pi/desktop.conf

  • Di paling bawah, tambahkan

[Environment_variable] XDG_DATA_DIRS=/var/lib/flatpak/exports/share:/home/pi/.local/share/flatpak/exports/share:/usr/local/share/:/usr/share/raspi-ui-overrides:/usr/share/:/usr/share/gdm/:/var/lib/menu-xdg/

  • Reboot

Udah deh!

LibreOffice 7.0 di Raspberry Pi OSLibreOffice 7.0 di Raspberry Pi OS

Server CCTV dengan Shinobi Video – Bag. 5, IP Cam Murah Meriah

Setelah liat-liat di situs perbelanjaan daring, saya menemukan satu kamera yang fiturnya cukup pas untuk disambungkan dengan Shinobi, harganya juga berkisar 250 ribu rupiah. Berikut fitur yang penting untuk digunakan:

  • Onvif
  • AUTO TRACKING
  • PTZ Rotate Pan Tilt 360
  • Ada sensor suara, sensor gerak dan pemberitahuan ke Hp

Mini CameraMini Camera

PTZnya juga berhasil tersambung dengan Shinobi. Onvif devicenya dikenali bikinan Eyeplus.

Server CCTV dengan Shinobi Video – Bag. 4, Menyambungkan dengan DVR

Saya memiliki satu set CCTV beserta DVRnya. Mereknya Nathans, sponsor dari kantor (PT SKK). Ini CCTV asli ndak pakai ribet, just work. Nah … PRnya adalah gimana caranya nyambungin ke Shinobi. Berminggu-minggu saya gak berhasil menemukan solusinya. Sampai saya menyerah.

DVRDVR

Sekitar 2 mingguan lalu, saya tiba-tiba nemu sebuah saran url rtsp dari internet. Dan saya coba beneran bisa. Berikut urlnya:

rtsp://192.168.0.3:554/user=admin&password=passwordmu&channel=1&stream=1.sdp?real_stream–rtp-caching=100

Silahkan sesuaikan alamat IP beserta akun yang ada di DVR Anda.

Data Diri Lengkap di Marketplace

Maraknya penjualan data yang dicuri dari marketplace sedikit banyak tidak lepas dari penggunanya juga, makanya sampai saat ini kalau ada notifikasi peringatan untuk melengkapi data diri (No KTP, KK, dll.) saya tidak melakukannya, termasuk dulu jamannya masih main di FJB Kaskus.

Di beberapa marketplace mensyaratkan kita harus melengkapi data diri tersebut agar akun kita bisa terverifikasi 100 %, tapi saya tetap tidak melakukan, biarlah akun saya tidak terverifikasi 100% tidak mengapa daripada data diri diperjual-belikan, resikonya sih calon pembeli yang belum begitu kenal sangsi dengan dengan reputasi toko online kita.

Segera ganti password dan PIN anda untuk mencegah kejadian yang tidak diinginkan

Satu lagi, jangan terlalu banyak membiarkan saldo kita di akun marketplace, lebih aman lagi kalau kita pindah ke rekening pribadi (walau tidak 100%).



Saatnya tarik saldo ah, kalau ada yang saldonya melimpah dan tidak punya rekening pribadi, saya tidak menolak jika anda mengirimnya ke rekening saya



Cara Install extensi redis di Azure App Service Linux

Pada proyek di salah satu klien di tempat saya bekerja, menggunakan layanan Azure app service untuk mendeploy aplikasi Laravel. Aplikasi tersebut membutuhkan ekstensi redis untuk dapat terhubung dengan cache service di azure yang berbasis Redis. Berikut langkah-langkah pemasangannya. Buka konsol KUDU https://<sitename>.scm.azurewebsites.net Pilih SSH pada konsol SSH, ketikkan perintah berikut...

Screencast OBS Studio ke Google Meet di openSUSE

Saat ini masanya, masa pandemi ini banyak yang melakukan pekerjaan dari rumah (“WFH”). Salah satu kebutuhan saat meeting secara daring adalah melakukan screencasting, atau berbagi layar. Catatan ini menjelaskan bagaimana cara melakukannya dengan OBS Studio dan Google Meet. OS yang saya gunakan di laptop adalah openSUSE Leap 15.1. Yang perlu...

Membuat CI/CD di GitLab CI

Sekarang saatnya saya akan membuat sebuah catatan tentang bagaimana kita akan membuat CI/CD (Continuous Integration & Continuous Delivery/Deployment) di GitLab. Ini merupakan contoh sederhana yang mungkin dapat Anda jadikan acuan jika Anda sama sekali baru dalam dunia CI/CD, khususnya di GitLab CI. Istilah-Istilah Penting Hal pertama yang ingin saya jelaskan...

Install GitLab Runner dengan Ansible

Setelah kita selesai menyiapkan server GitLab di postingan sebelumnya ini dan/atau ini, selanjutnya akan kita setup server atau instance untuk digunakan sebagai Runner. Apa itu GitLab Runner? GitLab Runner merupakan aplikasi sumber terbuka yang digunakan untuk menjalankan job dan mengirim kembali hasilnya ke GitLab. Sebagai penghubung dengan GitLab CI, layanan...

Server CCTV dengan Shinobi Video – Bag. 3, Menggunakan IP Cam Publik

Bagaimana kalau mau belajar pemasangan shinobi namun tidak memiliki IP Cam? ada caranya kah?

Ada. Pasti Ada

Salah satu caranya adalah dengan menggunakan IP Cam publik yang berada di beberapa wilayah/negara. Daftarnya bisa didapat di http://www.insecam.org/. Tidak semua bisa digunakan, namun tentu saja ada yang bisa. Saya sendiri menemukan satu yang sukses digunakan. Tahapannya kurang lebih seperti ini:

  1. Cari salah satu kamera. Saya menemukan yang berada di Jepang. http://www.insecam.org/en/view/534370/.
  2. Ambil IP Addressnya, investigasi url-urlnya dengan iSpy agar bisa mendapat informasi lebih detil.
  3. Jika tanpa nomor 2, juga bisa, kebetulan kameranya support ONVIF, tinggal masukin alamat IP dan atur-atur dan coba-coba sampai pas
  4. Khusus ini, saya menemukan bahwa konfigurasi yang pas itu MJPEG.

IP Cam PublikIP Cam Publik

Selamat mencoba dan latihan untuk kamera yang lain. Banyak spot-spot bagus juga lho.

 

PS: CCTV Xiaomi Yi Max 02 1080p Outdoor Smart IP Cam ini ndak support ONVIF gak bisa diakses via rtsp jadinya.

Server CCTV dengan Shinobi Video – Bag. 2, Pemasangan Shinobi

Pemasangan Shinobi cukup mudah sekali, cukup menjalankan sebaris perintah dari root:

bash <(curl -s https://gitlab.com/Shinobi-Systems/Shinobi-Installer/raw/master/shinobi-install.sh)

Selanjutnya tinggal mengikuti langkah-langkah yang ada di layar. Saya memilih mengambil dari branch development agar mendapatkan fitur-fitur terbaru sekaligus testing. Dokumentasi pemasangan secara lengkap bisa dibaca di sini.

Berikut hal-hal utama yang perlu dilakukan setelah pemasangan:

Peramban Firefox

Gunakan peramban Firefox. Karena peramban Chrome tidak mau bila ada https dan self sign. Juka untuk streaming beberapa video cctv. Firefox bekerja lebih benar dari pada Chrome. Enggak tau kenapa.

Masuk sebagai admin dan buat user

Kita perlu memasukkan url http://alamat-ip-shinobi-server:8080/super. User / Pass bakunya adalah admin@shinobi.video / admin. Dari halaman ini kita bisa membuat user baru untuk masuk ke dashboard shinobi server. Juga untuk mengganti password akun admin tersebut.

Super AdminSuper Admin

Shinobi Dashboard

Untuk masuk ke dashboard, buka peramban dan arahkan ke http://alamat-ip-shinobi-server:8080/ lalu masukkan username/password yang sudah dibuat tadi.

Menambahkan Kamera

Klik tombol + (Add Monitor). Di sini kamera disebut monitor. Lalu tinggal isikan parameter-parameter yang sesuai kamera. Saya mencoba sendiri dan ribet. Setelah beberapa kali percobaan, baru berhasil.

Menambah KameraMenambah Kamera

Ada cara gampangnya, melalui menu pojok kiri atas – ONVIF. Lalu isikan alamat ip dan klik tombol search. Secara pintar, shinobi bisa mendeteksi kamera dalam jaringan yang kombatibel ONVIF. Jika ketemu, akan ditampilkan deskripsi kamera, bahkan bisa tahu merek/modelnya. Lalu tinggal klik tombol bergambar 2 dokumen (seperti ikon duplicate).

Add Monitor - ONVIFAdd Monitor – ONVIF

Selanjutnya tinggal melengkapi/mengganti isian yang ditampilkan (sama dengan jendela Add Monitor). Tinggal disesuaikan saja atau langsung Save. Secara baku, kamera akan memiliki mode View Only. Kita bisa mengatur/mengganti modenya menjadi Record.

Dua Kamera/MonitorDua Kamera/Monitor

Power Video Viewer

Digunakan untuk melihat video yang sudah tersimpan terekam. Tombol ikonnya mirip seperti tag/point pada peta.

Video ViewerVideo Viewer

Seingat saya, Power Video Viewer ini yang tidak bisa di Chrome.

Dah itu dulu tulisan kali ini. Tulisan berikutnya saya akan jelaskan cara optimasinya.

 

*Featured image diambil dari http://getwallpapers.com/collection/hidden-leaf-village-wallpaper

Install GitLab dengan Ansible

Nah, kemarin sudah kita bahas instalasi GitLab secara manual di postingan sebelumnya. Kali ini saya akan tuliskan langkah-langkah instalasi GitLab dengan cara yang lebih simple, yaitu dengan Ansible. Ansible adalah sebuah alat otomasi yang dikembangkan oleh RedHat. Beberapa kata kunci yang melekat pada Ansible adalah “automation tool”, “configuration management”, “infrastructure...

Server CCTV dengan Shinobi Video – Bag. 1, IP Cam

Oprekan kali ini bermula dari lokasi proyek rumah yang kemalingan. Saat awal bangun, kemalingan genset, berikutnya beberapa minggu lalu, para tukang kemalingan handphone.

Saya memiliki cctv yang ada di rumah, subsidi dari Pak Bos yang memiliki perusahaan penjualan cctv. Yang sudah dipakai, sangat mudah dioperasikan. Just work. Namun kali ini sejak pandemi, saya kepikir untuk memanage cctv tersebut dengan linux, entah raspi atau pakai komputer-komputer spek rendah.

Sebelumnya, saya sama sekali tidak mengerti teknologi cctv beserta perabotannya. Namun sejak ngoprek ini, pengetahuan jadi bertambah. Awalnya hanya tau/nemu Shinobi Video saja, setelah itu bingung, harus bagaimana? cara koneksinya ke cctv bagaimana?

Dinamakan IP Cam, tentunya memiliki IP, umumnya, dari pabrikan diatur menjadi dhcp client. Sehingga dapat IP otomatis dari router/server dhcp. Saya dipinjami IP Cam oleh Pak Iwan Tahari. Dalam kardusnya tidak ada informasi apapun (buku manual juga tidak ada). Merek/Pabrikan pembuatnya juga tidak tahu. Jadi dengan coba-coba colokin aja ke router/modem yang ada di rumah, lalu diintip dapat IP berapa, nah itu dia tinggal dipanggil IPnya di peramban.

IP CamIP Cam

Setelah sukses dapat IP, saya punya 1 komputer yang rencananya jadi server cctv dan sudah ada dhcp servernya, saya sambungkan IP Cam tersebut ke komputer . Dapat IP 10.42.0.151. Tinggal dipanggil di peramban dan muncul antar muka web si kamera.

Antarmuka WebAntarmuka Web

Hal utama yang perlu dilakukan adala mengatur zona waktu/waktu, agar nantinya saat dipakai, timestamp yang ditampilkan sesuai. Hal berikutnya adalah pengaturan kualitas gambar. Kamera ini sanggup merekam video/gambar dengan codec H265 dan H264, juga bisa merekam audio serta pengaturan fps dan kualitas. Saya mengatur kualitas medium dan codec H264 (karena H265, rata-rata browser tidak mulus menampilkannya).

Selanjutnya, bagaimana cara menguji bahwa kamera tersebut bisa digunakan? Saya cukup bingung dengan pertanyaan sendiri. Mencari-cari, akhirnya menemukan jawaban, bahwa bisa menguji dengan menggunakan VLC. Tinggal memasukkan url rtp/udp melalui menu Open Network. Nah bagaimana mendapatkan urlnya? macem-macem jawabnya dan bingung. Namun saya menemukan aplikasi pembantu, yang bisa memandu kita.

Aplikasinya bernama iSpy, opensource, adanya di OS Windows saja. Cara penggunaannya cukup mudah, bisa mencari berdasarkan IP yang kita masukkan atau dia mencari melalui jaringan yang ada. Setelah itu dia akan memberikan info ke kita daftar url yang bisa digunakan.

iSpyiSpy

Ada beberapa format yang perlu diperhatikan:

  • ONVIF, ini format standar IP Cam, jika bisa ini, dengan Shinobi bisa otomatis dalam pendeteksiannya.
  • RTSP, catat url rtsp yang diberikan, di atas contohnya rtsp://ip:8554/live/ch00_0

VLC dengan rtspVLC dengan rtsp

Setelah sukses tampil di VLC, kita bisa melanjutkan pemasangan Shinobi Video.

Install GitLab di Ubuntu 18.04

Setelah sekian lama, saya merasa perlu memerbarui konten blog ini. Kali ini saya akan menulis ulang panduan instalasi GitLab di Ubuntu 18.04 dalam Bahasa Indonesia. Dokumentasi resminya dapat langsung diakses melalui halaman ini. Di sana cukup singkat dan mudah dipahami. Namun saya menambah beberapa cuil penjelasan tambahan berdasarkan hasil praktek...

Membuat VM dengan Ubuntu Cloud Image di KVM/virsh

PERINGATAN, Aku akan mengambil harta karunmu. Eh, bukan. Kalo disebut tutorial sebenarnya enggak juga, postingan ini lebih ke catatan pribadi. Dan mungkin akan banyak yang sulit dipahami, terutama jika pembaca belum pernah menggunakan Linux, atau belum pernah menggunakan virsh. Namun, saya akan tetap menulikan ini sebagai “tutorial” yang mungkin akan...

Pasang ulang Weibu F3C – Endless Mini PC (unreleased)

Saya mendapatkan komputer ini dari Baris, CEO Endless Solutions jaman saya masih jadi ambassador pada 2017. Sudah terpasang Endless OS dan berfungsi dengan baik. Beberapa hari ini saya memutuskan untuk mengganti OSnya dengan OS apapun yang memungkinkan.

Pengujian pertama dengan openSUSE Tumbleweed, pemasangan berjalan mulus, masuk desktop agak kacau dikarenakan layar HDMI dianggap sebagai layar extended. Jadi harus mengarahkan kursor yang tepat dan mengatur ulang layar beserta resolusinya. Setelah masuk desktop, wireless tidak bisa digunakan. ini sudah sesuai prediksi. Pasang firmware non-free juga tidak membuahkan hasil.

Pengujian berikutnya dengan Ubuntu 20.04 yang masih Beta. Hampir sama, perbedaannya hanya si Ubuntu sedikit lebih pintar mengenali layar dari pada openSUSE. Namun tetap perlu mengatur resolusi layarnya. Wireless juga sama-sama tidak bisa digunakan walaupun sudah memasang firmware non-free.

Berikutnya nyari firmware yang dipakai Endless OS, nemu di github https://github.com/endlessm/linux-firmware. Coba dipasang … jreng, tetep gagal. Karena masih penasaran, saya unduh iso Endless OS terkini, dan install lagi. Selanjutnya ambil /lib/firmware untuk dibandingkan, ternyata ada sedikit (bisa dibilang banyak sih) tambahan dari yang ada di github. Saya rangkum di https://lumbung.mycoop.id/ahmadharis/linux-firmware/commit/ee4aec2c50e82a06861e2b166814d418e3d5046b. Setelah dipasang, reboot, tetep gak mau.

Baca-baca dmesg, terus guling-guling, nemu titik terang untuk ambil dari https://archive.raspberrypi.org/debian/pool/main/f/firmware-nonfree/firmware-brcm80211_20161130-3+rpt3_all.deb terus dibongkar. Dicomot yang brcmfmac43455. Saya rangkum di https://lumbung.mycoop.id/ahmadharis/linux-firmware/commit/1c1f19900b2399ce123dd5e5d2978aa6ba21e397.

Dicoba di Ubuntu 20.04 sukses. Di openSUSE Tumbleweed pun demikian.

openSUSE TumbleweedopenSUSE Tumbleweed

 

Ubuntu 20.04Ubuntu 20.04

Macbook Jadul dengan openSUSE Tumbleweed

Jadi kapan hari menjenguk duo R, dan keinget kalau ada “harta” lama yang gak dipakai. Jadinya saya minta dan dicoba dihidupkan. Macbook2,1. Laptop jaman Pak Beye kata teman saya.

Macbook2,1Macbook2,1

Ini komputer cukup nyusahin. Kalau pakai MacOS X mentok di Lion. Walhasil gak bisa ngapa-ngapain, wong banyak aplikasi ndak support. Boot usb linux juga ndak mau, gak kayak Macbook keluaran baru yang mau boot linux. Dulu masang ubuntu lewat media CD. Berhubung sudah gak punya CD, alhasil menggunakan segala cara agar bisa boot. Cara termudah adalah memasang ubuntu dari komputer lain, lalu pindah disknya ke macbook jadul tersebut.

Bagaimana dengan OS Linux lainnya? susah … gak bisa kepasang. Kesimpulan akhir, karena grub yang terpasang di ubuntu itu grub-pc i386 (walaupun pakai arch 64 bit). Jadi yang mulus terpasang pertama kali adalah ubuntu.

Selanjutnya usaha agar memasang openSUSE Tumbleweed. Berbagai cara sudah digunakan, ketemu kesimpulan cara yang mujarab sebagai berikut:

  1. Pasang opensuse (boot legacy, jangan uefi) pada disk (usb flashdisk) lain dengan komputer lain.
  2. Sediakan partisi kosong ext4 di macbook jadul tersebut.
  3. Salin isi usb flashdisk pada nomor 1 ke dalam partisi ext4 tadi. Salin dengan opsi -rapv biar kebawa semua atribut dan permission berkasnya.
  4. Uji dengan chroot, kalau mulus berarti sudah benar.
  5. Ubah fstab, sesuaikan dengan uuid yang baru, pindah motherboard/komputer akan membuat beda uuid.
  6. Edit grub di ubuntu, sesuaikan.

Ribet kan? tapi seru, buat nambah kesibukan selama masa diam di rumah.

Beli Kuota Rela, Tapi Beli Aplikasi Tidak Mau

Beberapa hari lalu saya mengisi acara Seminar Pendidikan yang diselenggarakan oleh salah satu yayasan, temanya adalah "Implementasi Belajar Sambil Bermain lewat Permainan di Gawai" (kurang lebih seperti itu kalau diterjemahkan ke bahasa Indonesia).

Salah satu Materi saya adalah mengenai penggunaan GCompris untuk belajar sesuai kurikulum yang berlaku.

Pada sesi tanya jawab ada salah seorang peserta yang bertanya;
  • Apakah GCompris bisa diinstal di Android?
  • Bisa, jawab saya singkat, cari saja di Playstore
Kemudian sebagian besar peserta seminar mulai mencarinya di playstore.
Salah seorang peserta bertanya;
  • Kok berbayar?

  • Ya, jawab saya dengan beberapa penjelasan singkat
  • Peserta lain kemudian menimpali kalau harganya terlalu mahal untuk sebuah permainan.
Saya pun menjawab:
  • Dalam satu bulan anda belu kuota habis berapa?
Dia jawab
  • Kurang lebih 100 ribu untuk saya, kalau untuk anak saya 20 ribu untuk seminggu.
Kemudian saya menimpali, Anda beli kuota setiap bulan saja tidak sayang, kok beli aplikasi yang harganya cuma 99.000 dan bisa dipakai seumur Android sayang banget.
Belum lagi kuota untuk anaknya yang dipakai untuk game online yang tidak jelas unsur pendidikannya.

Padahal rata-rata peserta seminar adalah tenaga pendidik (guru), termasuk kedua peserta yang bertanya tadi.
Sepertinya tingkat Edukasi untuk tenaga pendidik di Indonesia masih perlu ditingkatkan lagi.
 

Penulis Yang Egois



Belakangan ini saya memang sedang sering berinteraksi dengan orang-orang yang bergerak di bidang Keperpustakaan atau Literasi.

Dari obrolan dengan beberapa penulis buku dalam kegiatan tersebut, saya mendapatkan fakta bahwa kebanyakan penulis tersebutnya ketika mengawali jadi penulis menggunakan aplikasi yang tidak legal.
Sebagian dari mereka sadar bahwa aplikasi yang dia gunakan untuk menulis itu ilegal.

Sebagian lagi tidak mengetahuinya sama sekali karena ketika membeli komputer/laptop aplikasi tersebut sudah terpasang.
Saat sudah menjadi penulis terkenal, sebagian sudah menggunakan aplikasi yang legal dengan membelinya.

Sebagian lagi tetap menggunakan aplikasi yang ilegal walau sudah mampu membelinya dari hasil menulis buku. Dia pun tahu dan sadar kalau yang dia lakukan tidak benar.

Ada juga yang walau sudah menerbitkan puluhan judul buku tapi tetap tidak tahu kalau aplikasi yang dia gunakan untuk menulis itu ilegal.

Padahal di semua buku yang dia tulis, kemudian diterbitkan selalu tertulis kalimat kurang lebih seperti ini  
Hak Cipta dilindungi undang-undang. Dilarang memperbanyak atau memindahkan sebagian atau seluruh isi buku ini dalam bentuk apapun, baik secara elektronis maupun mekanis, termasuk memfotokopi, merekam atau dengan sistem penyimpanan lainnya tanpa izin tertulis dari penulis.


Dia sendiri ketika menulis buku sudah melanggar hak cipta, atau menggunakan aplikasi hasil penggandaan tanpa seijin pembuatnya, lha buku yang dia tulis kok tidak boleh digandakan!
Menurut saya ini namanya penulis yang egois dan dzalim.

Pesan saya, daripada menulis dengan aplikasi ilegal karena memang belum mampu beli, lebih baik pakai aplikasi yang walau gratis tapi legal.


Fungsi Fitur Arrange di Inkscape

Salah seorang pengguna Inkscape pemula ada yang bertanya mengenai fungsi dari fitur Arangge, mungkin karena bingung cara menggunakannya, atau belum pernah mencoba menggunakannya tapi sudah bertanya duluan.

Sayangnya lagi gambar yang ia lampirkan berupa hasil foto yang kurang jelas, mungkin ia tidak tahu cara mengambil cuplikan layar (screenshot) di komputer, ya mohon dimaklumi saja.

Sebenarnya  penjelasan mengenai fitur tersebut sudah saya tulis di buku Desain Grafis dengan Inkscape versi 2 yang rencanya akan terbit setelah Inkscape versi 1.0 rilis filnal secara resmi.

Di bawah ini adalah penjelasan singkat penggunaan Arrange yang saya Salin-Tempel dari buku yang sedang saya kerjakan tersebut.


Arrange digunakan untuk mengatur beberapa object yang letaknya tidak beraturan supaya rapi, cara kerjanya adalah menata object-object tersebut membentuk kolom dan baris dengan jarak tertentu sesuai parameter yang telah dilakukan.
Jendela pengaturan Arrange dapat ditampilkan dengan klik Object => Arrange.

Pada jendela pengaturan Arrange terdapat dua Tab, yaitu Rectangluar grid dan Polar Coordinate.

Berikut contoh penggunaan pada tab Rectangluar grid:
  • Seleksi object yang akan diatur

  • Isikan nilai tertentu pada kotak Rows dan Columns (contoh: 5 x 5)
  • Lakukan pengaturan pada menu Alignment (contoh: Center) 
  • Pilih salah satu menu Fit into selection box atau Set spacing (contoh: pilih Set spacing)
  • Isikan nilai tertentu pada kotak X dan Y (contoh: 2 X 2 cm)

Jika semua pengaturan dirasa sudah selesai dan benar, klik tombol Arrange, maka hasilnya seperti gambar di bawah ini


Berikut contoh penggunaan pada tab Polar Coordinate:
  • Pilih tab Polar Coordinate
  • Pada menu Objecs' bounding boxes: pilih Center

Pada menu Arrange on pilih Parameterized, maka segera tampil submenu seperti gambar di bawah ini:


Sebagai contoh latihan, lakukan langkah seperti berikut:
  • Pada kotak Center X/Y masing-masing isi dengan nilai 20,00 cm 
  • Pada kotak Radius X/Y masing-masing isi dengan nilai 20,00 cm
  • Pada kotak Angle X/Y isi dengan nilai 0,00 dan 360, jangan lupa unitnya pilih derajat (bukan turn, rad, atau grad).
  • Beri tanda centang pada Rotate objects
Jika semua pengaturan dirasa sudah selesai dan benar, klik tombol Arrange, maka hasilnya seperti gambar di bawah ini
Demikian penjelasan singkat contoh penggunaan fitur Arrange pada Inkscape.
Sampai jumpa pada tutorial menarik lainnya.
-
Sumber:
Draf naskah buku Desain Grafis dengan Inkscape v.2



Rute Bus Salatiga - Semarang

Sebenarnya penulis sudah lama ingin membuat artikel singkat ini, namun lupa terus karena lebih banyak menulis buku.

Artikel ini hanya berupa info singkat mengenai beberapa rute bus Salatiga - Semarang jika anda ingin  menggunakan moda transportasi umum.
Penulis sengaja menulis artikel ini untuk membatu pembaca yang bingung ketika memilih bus dari Salatiga yang mau ke Semarang.
  
Jika Anda akan naik Bus umum dari Salatiga ke Semarang memang harus lebih cermat, karena terdapat 3 tujuan terminal yang beda, dan satu bus jurusan tengah kota.

Salatiga - Terminal Mangkang
Bus ini cocok jika anda akan meneruskan perjalanan ke Semarang wilayah Barat dan Utara, Misalnya ke Bandara Ahmad Yani, Ngalian (Boja), Kendal, Jakarta, dan lain-lain. Anda bisa menggunakan Bus Patas Solo - Semarang yang lewat Tol Krapyak.




Salatiga - Semarang Kota
Bus ini rutenya lewat tengah kota (membelah jalur tengah kota), sangat cocok anda naiki jika tujuan anda adalah ke Semarang kota atau tengah, Misalnya ke Tembalang, Jatingaleh, RSUD Kariadi, Tugu Muda, Poncol, Johar, Kota lama, Tawang, dan lain-lain.
Anda bisa menggunakan Bus jurusan Salatiga - Semarang yang berupa Mini Bus, dan bus ini satu-satunya yang tidak lewat tol ketika ke Semarang, namun ketika bus ini kembali ke Salatiga (rute seblaiknya) lewat tol.
Bus jurusan ini hanya berjalan antara pukul 05.00 s/d 17.00 WIB.


Salatiga - Terminal Terboyo
Bus ini cocok jika anda akan meneruskan perjalanan ke wilayah Genuk, Demak, Kudus, Rembang, Surabaya (jalur Pantura), dan lain-lain. Namun perlu diingat, bahwa saat ini sudah jarang Bus dengan juruan Terboyo, karena terminal Terboyo sudah ditutup untuk Bus Umum dan dialih-fungsikan sebagai terminal Peti Kemas.
Namun masih ada satu-dua Bus Patas Solo - Semarang yang ke Terboyo, Bus ini melewati Tol Tembalang - Kaligawe, yaitu masuk gerbang tol Sukun dan keluar gerbang tol Kaligawe. Yang perlu diingat bahwa Bus jurusan ini tidak masuk ke terminal.



Salatiga - Terminal Penggaron
Rute Bus ini sejatinya sebagai pengganti Terminal Bus Terboyo, sangat cocok jika anda akan meneruskan perjalanan ke wilayah Kudus, Pati, Purwodadi, dan lain-lain.
Bus ini melewati Tol Tembalang - Gayamsari, yaitu masuk gerbang tol Sukun dan keluar gerbang tol Gayamsari

Catatan: 
  • Semua bus melewati Tuntang, Bawen, Pasar Karangjati, Pasar Babadan, Banyumanik, dan Sukun, setelah dari sukun jalurnya baru berubah seperti rute masing-masing. 
  • Beberapa penjelasan dari artikel di atas belum lengkap, untuk itu silakan baca beberapa komentar  yang sudah ada sebagai pelengkapnya.

Proposal Sponsor Buku

Beberapa bulan belakangan ini saya bersama teman-teman sedang menulis buku Belajar Komputer Tingkat Dasar untuk anak-anak.

Buku yang kami tulis tersebut terdiri dari 16 seri yaitu:
  • 4 (empat) buku untuk tingkat 0 (nol), yaitu ditujukan untuk murid TK kecil dan besar yang masing-masing untuk semester 1 dan 2.
  • 12 (dua belas) buku tingkat 1 sampai dengan 6, yaitu ditujukan untuk murid tingkat SD yang masing-masing untuk semester 1 dan 2.
 Dalam waktu dekat ini kami akan mulai merilisnya satu persatu.
Seperti beberapa buku yang sudah saya rilis sebelumnya yang menggunakan sistem sponsor. Buku yang kami tulis ini juga menganut cara yang sama.
Beberapa orang teman sudah menanyakan tata cara menjadi sponsor buku tersebut. Maka malalui post ini saya lampirkan tautan tata cara menjadi sponsor buku tersebut

Unduh Proposal sponsor buku

Demikian pemberitahuan tentang perkembangan Belajar Komputer Dasar yang kami tulis.

Exiciting openSUSE Asia Summit 2019, Bali

So, this is the first time i attend openSUSE Asia Summit. This year openSUSE Asia Summit 2019 has been held in Udayana University, 5-6 October 2019. Why i attend this event? I was skeptical when i submit my paper the CFP is open in which i only submit one paper....