AWS: IAM Roles

Hi!

Pada jurnal ini saya ingin menjelaskan tentang IAM Role di AWS. Pada dasarnya, IAM Role adalah identitas atau ID yang dapat kita buat di IAM yang memiliki permission tertentu. Role mirip dengan user, sebuah identitas di AWS yang memiliki permission dimana permission tersebut berisi apa saja yang boleh dan tidak boleh dilakukan di AWS. Kita bisa membuat Role menggunakan JSON atau policy document.

Perbedaan antara user dengan role adalah user bersifat unik dan digunakan oleh satu anggota saja, sedangkan role dapat digunakan oleh siapapun yang membutuhkan. Role bersifat temporary atau sementara dimana ia tidak memiliki long-term credentials seperti layaknya password atau access key. Kredensial di role bersifat sementara berdasarkan sesi saat kita menggunakan.

Role dapat diasumsikan seperti perorangan, AWS architecture, atau system-level accounts dimana role dapat melakukan cross-account access. Jadi, sebauh user ketika menggunakan role, dapat me-manage resource di user lain.

Mari kita coba labkan.

Skenarionya disini: pertama kita buat sebuah IAM Role yang memiliki akses ke AWS S3. Lalu buat sebuah EC2 instance dan kaitkan role yang telah dibuat sebelumnya ke instance. Buat sebuah bucket baru dan coba akses bucket melalui instance.

Pertama, masuk ke AWS Console.

Di kolom pencarian, ketik IAM dan klik hasil paling atas.

Kita akan diarahkan ke IAM dashboard. Untuk masuk ke pengaturan role, klik menu Roles.

Berikut ini adalah tampilan dashboard dari Role. Secara default, dari AWS sudah dibuatkan 33 role. Kita akan coba buat role baru maka klik Create role.

Disini kita pilih EC2 karena sesuai skenario bahwa layanan EC2 lah yang akan dapat mengakses S3 bucket menggunakan IAM Role. Klik Next.

Jika kita menggunakan role, maka akan dapat mengakses apa? ini masuk ke pengaturan permissions policies. Pilih AmazonS3FullAccess lalu klik Next.

Pada pengaturan tag, bisa disesuaikan lalu klik Next.

Selanjutkan isikan Role name dan klik Create role.

Setelah role berhasil dibuat, akan muncul di roles dashboard. Bisa klik nama role nya untuk melihat detail.

Berikut detailnya

Selanjutnya kita abuat EC2 instance. Untuk panduan lengkapnya bisa merujuk ke jurnal ini. Yang perlu diperhatikan yaitu di step ketiga, pada pilihan IAM role, pilih role yang telah dibuat sebelumnya. Yaitu S3_AdminAccess.

Lalu bisa buat instance dan pastikan berhasil.

Untuk bisa terhubung ke instance secara cepat, bisa pilih instance > action > connect.

Lalu klik connect.

Dan saat masuk ke instance, bisa verifikasi apakah instance dapat mengakses layanan AWS S3 atau tidak. Bisa coba jalankan:

aws s3 ls

Untuk membuat bucket baru:

aws s3 mb s3://<nama_bucket>

Bisa juga coba upload file ke bucket. Disini saya coba upload file bernama hello.txt

echo "Semangat Belajar" > hello.txt
cat hello.txt
aws s3 cp hello.txt s3://<bucket_name>
aws s3 ls s3://<bucket_name>

Pastikan berhasil dan kita bisa verifikasi dari AWS Console juga, apakah bucket yang telah dibuat ada.

Sekian!

AWS: AWS Command Line (CLI)

Hi!

Pada jurnal-jurnal sebelumnya, saya membahas berbagai layanan di AWS menggunakan AWS Console, dimana kita bisa mengaksesnya melalui browser dan berbentuk GUI atau Graphical User Interface. Nah, pada jurnal ini saya ingin membahas tentang AWS Command Line, salah satu metode yang digunakan untuk mengakses resources di AWS selain AWS Console.

Seperti namanya, kita akan banyak menggunakan command yang berbaris-baris di terminal. Untuk kebanyakan engineer/developer yang suka mengetik baris perintah dan kode, AWS CLI akan terasa lebih mudah dan cepat dibandingkan menggunakan AWS Console. Contohnya:

aws s3 ls

Semua perintah diawali dengan kata aws dan diikuti layanan apa yang dituju, lalu apa yang akan dilakukan. Dari contoh diatas, layanan yang dituju adalah S3 dan akan melakukan ls atau list bucket. Bucket-bucket yang terkait dengan akun akan muncul.

Jika ingin mengakses AWS CLI melalui AWS Console, cukup klik ikon terminal di sebelah kiri ikon terminal seperti di bawah ini.

Lalu kita akan diarahkan kesini:

Kita bisa langsung menggunakan fitur AWS CLI. Sangat mudah.

Tapi, bagaimana jika kita ingin menggunakan AWS CLI dari laptop/pc sendiri? agar tidak perlu membuka browser dan lebih cepat. Apakah bisa? bisa kok. Disini saya akan coba konfigurasi dan menggunakan AWS CLI di Ubuntu 20.04.

Pertama, install paket awscli dengan perintah:

sudo apt install awscli

Tunggu sampai instalasinya selesai dan verifikasi dengan perintah:

aws --version

Sebelum masuk ke konfigurasi AWS CLI, pastikan sudah membuat user di AWS IAM terlebih dahulu ya. Untuk panduannya bisa merujuk ke jurnal ini. Saat membuat user, pastikan Programmatic access telah dicentang:

Disini saya membuat user ananda dengan permission AmazonS3FullAccess

Untuk dapat menggunakan AWS CLI, kita akan menggunakan Access key ID dan Secret access key dan user yang telah dibuat.

Lalu konfigurasi AWS CLI dengan perintah:

aws configure

Pastekan access key dan secret key dari user sebelumnya lalu enter.

Setelah itu, kita coba jalankan perintah:

aws s3 ls

Terlihat masih kosong karena user ananda tersebut user baru dan belum membuat bucket satupun. Untuk membuat bucket jalankan:

aws s3 mb s3://<nama_bucket>

Lalu lihat kembali daftar bucketnya. Maka hasilnya seperti berikut ini.

Kita coba buat sebuah file bernama hello.txt dan upload file tersebut ke dalam bucket yang telah dibuat sebelumnya.

echo "Semangat Belajar" > hello.txt
cat hello.txt
aws s3 cp hello.txt s3://<nama_bucket>
aws s3 ls s3://<nama_bucket>

Perintah terakhir digunakan untuk melihat daftar object yang berada di sebuah bucket. Verifikasinya seperti di bawah ini.

Kita juga bisa verifikasi melalui AWS Console bahwa bucket telah dibuat dan object sudah diupload seperti di bawah ini.

Sangat mudah, bukan?

Sekian!

AWS: Lifecycle Management with S3

Hi!

Pada jurnal ini kita akan membahas tentang fitur Lifecycle management di AWS S3. Apa itu?

Fitur lifecycle management memungkinkan object untuk berpindah storage class berdasarkan waktu yang telah ditentukan untuk pertimbangan cost secara otomatis. Contohnya seperti ini: pertama kita upload object dimana kita atur storage class nya S3 Standard, setelah tiga puluh hari data tidak diakses maka otomatis storage class nya akan berubah menjadi S3 IA, lalu setelah 90 hari akan berubah menjadi Glacier.

Kita bisa mengkombinasikan fitur versioning dengan lifecycle management, jadi data-data yang sudah tertanda delete-marker oleh versioning akan ikut berpindah juga.

Mari kita coba. Pertama buka AWS Console.

Di kolom pencarian, ketik s3 dan klik hasil paling atas.

Disini saya sudah memiliki satu bucket bernama misskecupbungbucket-26738193. Klik nama bucket.

Masuk ke tab Properties. Disini kita aktifkan versioningnya dulu. Klik Edit pada opsi Bucket Versioning.

Pilih Enable lalu Save changes.

Masuk ke tab Properties dan pastikan sudah aktif.

Selanjutnya kita aktifkan fitur lifecycle management nya. Masuk ke tab Management dan pada opsi Lifecycle rules, klik Create lifecycle rule.

Definisikan nama, dan untuk scope pilih This rule applies to all objects in the bucket. Jadi semua object akan otomatis berpindah storage tier.

Gulir ke bawah dan pada rule actions, pilih Transition current version of objects between storage classes. Pertama untuk Standard-IA setelah 30 hari, dan Glacier setelah 90 hari.

Centang dan klik Create rule.

Pastikan rule berhasil dibuat dan coba klik rule untuk verifikasi.

Hasilnya akan seperti di bawah ini.

Sekian!

AWS: Encrypting S3 Buckets

Hi!

Pada jurnal ini saya ingin berbagi mengenai fitur enkripsi di AWS S3 serta bagaimana menggunakannya. Enkripsi adalah salah satu metode untuk mengamankan data dengan menggunakan teknik kriptografi.

Saat jurnal ini ditulis, ada tiga tipe enkripsi yaitu encryption in transit, encryption at rest: server-side encryption, dan encryption at rest: client-side encryption. In transit maksudnya adalah data akan dienkripsi saat sedang dikirim dari dan ke tujuan. Ini bisa menggunakan TLS/SSL dan HTTPS untuk mencegah serangan seperti eavesdropping. Di AWS diimplementasikan saat kita mengakses bucket dari browser, akan nampak URL nya menggunakan HTTPS.

Sedangkan at rest, data akan dienkripsi saat dalam keadaan diam dan tidak dalam proses dikirim/menerima. Untuk server-side encryption, contohnya data saat berada di dalam bucket, dimana implementasinya di AWS S3 ada tipe:

  1. SSE-S3: S3-managed keys, menggunakan enkripsi AES 256-bit.
  2. SSE-KMS: AWS Key Management Service-managed keys (key nya dimanage oleh layanan AWS KMS)
  3. SSE-C: Customer-provided keys

Untuk client-side encryption, contohnya data kita yang berada di dalam komputer/client dan dienkripsi secara mandiri dan kita punya akses secara penuh untuk enkripsi dan dekripsinya.

Untuk menggunakan fitur enkripsi di AWS, kita bisa menggunakan dua cara yaitu melalui AWS Console (cara lebih mudah) dan Bucket Policy (kelebihannya kita bisa ‘memaksa’ semua object yang berada di bucket untuk menggunakan enkripsi). Disini kita akan bahas mengenai cara pertama.

Saat pertama kali membuat bucket, bisa gulir kebawah dan akan ada opsi untuk mengaktifkan Default Encryption seperti di bawah ini. Tinggal kita pilih tipenya apa lalu klik Create bucket.

Bagaimana jika bucketnya telah dibuat dan kita ingin mengaktifkan enkripsi didalamnya? Misal saya punya bucket misskecupbungbucket-26738193. Pertama, klik nama bucketnya.

Masuk ke tab Properties.

Gulir ke bawah dan kita bisa menemukan pengaturan enkripsi yang sama seperti saat akan membuat bucket. Bisa klik Edit.

Lalu aktifkan dan pilih tipe enkripsinya. Klik Save changes.

Dan bisa diverifikasi lagi, fitur enkripsinya sudah aktif. Jadi, semua data yang berada dalam bucket akan otomatis terenkripsi dengan tipe encyrption at rest: service-side encyption.

Untuk mengaktifkan enkripsi dengan menggunakan bucket policy akan dibahas di jurnal lain ya!

Sekian!

AWS: How to Create a VPC Easily

Hi

Pada jurnal ini saya ingin sharing mengenai layanan VPC (Virtual Private Cloud) di AWS.

Network/jaringan menghubungkan komputer bersama-sama dan memungkinkan untuk berbagi data dan aplikasi, di seluruh dunia, dengan cara yang aman menggunakan router virtual, firewall, dan layanan manajemen jaringan lainnya.

VPC adalah layanan yang memungkinkan kita membuat jaringan private yang aman di AWS. Layanan VPC bersifat private karena terisolasi sehingga aman. VPC menjangkau Availability Zone di suatu wilayah. Dengan VPC, kita bisa mengatur rentang alamat IP, subnet, security group, dan kita bisa mengatur tabel routing. Perhatikan diagram berikut:

Subnet pada dasarnya memungkinkan kita untuk membagi jaringan di dalam VPC. Dan di situlah kita bisa melakukan deployment sumber daya, seperti EC2. Ada dua tipe subnet, yaitu private dan public. Subnet private tidak dapat diakses dari internet dan biasanya menjadi tempat sumber daya private seperti database. Sedangkan untuk public subnet adalah kebalikannya.

Disana ada NACL (Network Access Control List) yang mana bertugas untuk memastikan lalu lintas keluar masuk jaringan. Ia akan memblokir layanan yang dilarang, dan melewatkan layanan yang diizinkan.

Di dalam diagram ada juga router dan tabel rute. Mereka menentukan di mana lalu lintas jaringan diarahkan. Kemudian ada internet gateway internet sebagai gerbang yang memungkinkan lalu lintas publik ke internet dari VPC. VPC peering memungkinkan kita untuk menghubungkan 2 VPC secara bersamaan. Selengkapnya baca disini.

Mari kita coba labkan bagaimana membuat VPC secara sederhana melalui AWS Console.

Pertama buka AWS Console, pada search box ketikkan vpc lalu klik hasil yang paling atas.

Berikut tampilan dashboard dari VPC. Untuk membuat VPC secara cepat dan mudah bisa langsung klik Launch VPC Wizard.

Pada langkah pertama terlihat bahwa VPC yang akan kita buat di dalam public subnet. Lalu klik Select.

Pada langkah kedua, isikan CIDR blok untuk VPC kita. Misal 10.0.0.0/16. Isikan nama, misal vpc0. AZ misal us-east-1b, dan isikan nama subnet misal subnet0. Lalu klik Create VPC.

Pastikan VPC berhasil dibuat.

Dan saat kita kembali ke VPC dashboard, akan muncul vpc yang dibuat sebelumnya.

VPC siap digunakan!

Sekian!

AWS: Create a Simple Function with AWS Lambda

Hi!

Pada jurnal ini saya ingin berbagi mengenai salah satu layanan serverless di AWS yaitu AWS Lambda.

AWS Lambda adalah layanan komputasi serverless yang memungkinkan kita menjalankan kode tanpa perlu mengelola server. Serverless maksudnya adalah AWS yang mengelola server secara penuh untuk kita dan kita tidak dapat mengaksesnya. Kita tidak perlu khawatir tentang pengelolaan server seperti dengan EC2.

AWS Lambda memungkinkan pengembang untuk fokus pada aplikasi yang mereka kembangkan daripada mengkhawatirkan pengelolaan server.

Beberapa contoh kasus yang menggunakan AWS Lambda adalah real-time file processing, sending email notifications, dan backend business logic.

Aplikasi yang di deploy di AWS Lambda disebut function dimana Lambda mendukung banyak bahasa pemrograman populer seperti Java, Go, PowerShell, Node.js, C#, Python, dan Ruby. Kita dapat membuat kode menggunakan development environment favorit masing-masing atau melalui AWS Console. Lambda dapat mengeksekusi kode sebagai respons terhadap sebuah event. Dan Lambda function memiliki15 menit timeout.

Untuk pricing model pada AWS Lambda, kita akan dikenakan biaya yang berasal dari compute time dan request count. Untuk selengkapnya bisa baca disini.

Mari coba kita labkan!

Disini akan kita coba deploy sebuah aplikasi sederhana menggunakan Python di AWS Lambda dan memantau log nya melalui layanan AWS CloudWatch . Pertama buka AWS Console.

Pada kolom pencarian, ketik lambda. Dan klik layanan Lambda yang muncul paling atas.

Karena disini saya belum melakukan deployment aplikasi satupun, maka tampilan dashboardnya masih kosong. Klik Create function untuk membuat fungsi baru.

Pada tampilan pertama, isikan nama fungsi misal myfunction dengan runtime Python 3.7. Karena disini skenario yang digunakan masih sederhana, biarkan konfigurasi yang lainnya default lalu klik Create function.

Pastikan berhasil ya! Hasilnya akan seperti berikut ini.

Tempel kode berikut ini di editor.

import json

def lambda_handler(event, context):
    message = 'Hello {} {}! Keep being awesome!'.format(event['first_name'], event['last_name'])  

    #print to CloudWatch logs
    print(message)

    return { 
    'message' : message
    }  

Lalu klik Deploy.

Pastikan statusnya berubah menjadi Changes deployed.

Selanjutnya, kita akan coba test fungsi yang telah dibuat sebelumnya. Klik drop down menu Test. Lalu klik Configure test event karena disini kita akan mendefinisikan test eventnya sendiri.

Pilih Create new test event. Untuk Event template, pilih hello-world. Atur nama event misal mytest dengan value:

{ "first_name": "Your First Name Here", "last_name": "Your Last Name Here" }

Klik Format JSON agar menggunakan JSON format, bisa sesuaikan nama awal dan akhir lalu klik Create.

Pada tab Execution result, akan muncul hasilnya seperti berikut ini.

Kita bisa memantaui durasi, request, penggunaan compute di menu Monitor yang terintregasi dengan CloudWatch. Coba klik info disebelah CloudWatch metrics.

Yang mana kita akan diarahkan ke layanan CloudWatch yang memiliki banyak fitur, salah satunya memantau AWS Lambda events. Terlihat ada satu Log streams. Bisa dicoba klik.

Dan berikut hasil events dari fungsi myfunction yang telah coba di deploy.

Sekian!

AWS: Launch an EC2 Instance from AWS Console Quickly

Hi!

Selamat malam teman-teman. Pada jurnal ini saya ingin berbagi mengenai salah satu layanan yang paling sering digunakan di AWS yaitu EC2 atau Elastic Compute Cloud. Layanan EC2 memungkinkan kita untuk menyewa dan mengelola server virtual di cloud, khususnya adalah AWS.

Di dalam infrastruktur cloud ada istilah region yaitu area yang melingkupi beberapa wilayah. Dalam satu region terdapat beberapa AZ atau Availability Zone (ini bisa dikatakan data center). Nah dalam satu data center terdiri dari banyak server fisik yang ditata dalam rack-rack besar. Dan instance EC2 adalah server virtual yang berjalan di server fisik ini. Instance tidak dianggap serverless karena dia berbagi sumber daya komputasi (compute), storage, dan network ke server fisiknya tadi.

Dalam EC2 kita bisa men-deploy database (database ini bersifat fully-managed yang artinya bisa kita konfigurasi dan atur secara penuh) dan aplikasi misal web server menggunakan apache2.

Sebagai informasi, kita bisa mendapatkan 750 jam compute per bulannya menggunakan akun free tier khusus untuk t2.micro. Baca selengkapnya disini. Jadi teman-teman bisa mencoba ya!

Untuk membuat sebuah instance atau server virtual, kita bisa melalui AWS Console atau CLI. Dan dDisini akan kita coba membuat EC2 instance melalui AWS Console.

Pertama buka console nya dan bisa langsung klik menu Launch a virtual machine.

Step pertama, kita pilih image. Misal pilih Amazon Linux 2 AMI yang free tier. Klik Select.

Lalu kita pilih tipe instance. Ini ibaratkan spesifikasi dari si instance. Saya pilih t2.micro dengan spesifikasi 1 vCPU dan 1 GB memori. Klik Next.

Untuk konfigurasi detail biarkan default karena sesuai judul, bagaimana membuat ec2 instance secara cepat. Ini akan dijelaskan di jurnal lain ya! Coba klik Next.

Selanjutnya, kita atur ukuran storage untuk disk nya. Saya biarkan default, dan klik Next.

Selanjutnya bisa tambahkan tag. Tagnya berformat key-value. Misal key-nya: Department, valuenya: Finance. Ini akan sangat berguna misal untuk tracking resource. Lalu klik Next.

Security group ini berfungsi sebagai firewall/sistem keamanan untuk instance. Misal kita tambahkan satu rule/aturan untuk mengizinkan akses ke server (SSH) dengan protocol TCP, port 22, dan source nya 0.0.0.0 (dari internet). Lalu klik Review and Launch.

Bisa direview, jika sudah sesuai klik Launch.

Saat ada pop-up, pilih Create a new key pair, dan Download Key Pair. Ini digunakan untuk akses ke instance menggunakan private key yang di download tadi. Lalu klik Launch Instances.

Pastikan berhasil dan klik View Instance untuk melihat hasilnya.

Tunggu beberapa saat sampai Instance state nya Running.

Oh iya. Ada empat cara yang bisa digunakan untuk mengakses instance:

  1. AWS Management Console
  2. Secure Shell (SSH)
  3. EC2 Instance Connect (EIC)
  4. AWS System Manager (melalui web browser atau AWS CLI)

Cara yang paling cepat adalah pilih instance, dan klik menu Connect.

Ketika tampilan seperti berikut muncul (EC2 Instance Connect), klik Connect.

Akan diarahkan secara otomatis ke URL console.aws.amazon.com, dan ya. Kita sudah bisa mengakses instance melalui browser.

Instance siap digunakan!

Sekian!

AWS: S3 Versioning

Hai!

Sebelum membaca jurnal ini, harap membaca jurnal sebelumnya di sini dimana kali ini kita akan membahas fitur AWS S3 yang lain yaitu versioning.

Apa itu?

Versioning maksudnya adalah kita bisa menyimpan beberapa versi dari sebuah file di dalam sebuah bucket, sehingga kita bisa mempertahkan, mengambil, dan memulihkan setiap file dengan versi yang berbeda tersebut.

Fitur versioning dalam AWS S3 memungkinkan kita untuk melakukan kontrol versi. Jadi, jika seseorang menimpa/mengubah file, dan itu adalah sebuah kesalahan, kita dapat mengembalikan file ke versi sebelumnya. Bisa baca selengkapnya disini.

Pertama, kita coba edit file index.html yang sebelumnya sudah diupload ke bucket di laptop. Misal diubah menjadi seperti berikut:

Lalu masuk ke dashboard dari AWS S3. Pilih bucket yang berisi file index.html dan error.html. File-file tersebut telah diupload untuk pembuatan static website di jurnal sebelumnya.

Setelah masuk, dan masuk ke tab Properties. Gulir ke bawah dan saat menemukan sesi Bucket Versioning, klik Edit. Jadi fitur versioning diterapkan secara global untuk masing-masing bucket ya, bukan masing-masing file.

Pilih Enable untuk mengaktifkan fitur lalu klik Save changes.

Pastikan ada pemberitahuan bahwa fitur versioning telah berhasil diaktifkan. Seperti di bawah ini.

Ok lanjut.

Balik ke tab Objects dan terlihat disana saya memiliki dua file dengan Version ID nya null.

Klik Upload pada tab Objects. Upload file index.html yang telah diubah sebelumnya.

Pastikan upload berhasil.

Ketika dilihat, maka file yang memiliki nama sama, akan dibedakan berdasarkan Version ID nya. Jadi akan terlihat dua file index.html.

File index.html yang memilik Version ID merupakan file lama (versi 0), dan yang memiliki Version ID merupakan file dengan versi setelahnya (versi 1).

Ketika static website nya dibuka, file mana yang akan digunakan? Yap. File terbaru/terakhir diupload karena dalam sistem versioning, file yang baru saja diupload telah menimpa file index.html yang lama.

Bagaimana jika file yang lama atau file dengan versi 0 dihapus? maka akan muncul tampilan konfirmasi seperti di bawah ini.

Saat kita delete sebenarnya file tersebut terdelete, tetapi hanya diambahakan delete marker. Untuk mengembalikan file tinggal hapus saja delete marker nya. Ini bisa disebut fitur untuk restore.

Saat kita pakai versioning, idealnya harus ada lifecycle policy, sehingga otomatis versi lama bisa diclean.

Sekian!

AWS: Static Website using an AWS S3 Bucket

Hai!

Setelah di jurnal sebelumnya kita belajar bagaimana membuat bucket di AWS S3 (Baca di AWS: How to Create an AWS S3 Bucket), kali ini kita akan membahas fitur AWS S3 yang lain yaitu Hosting a Static Website.

Website statik ini bisa diartikan bahwa tidak ada lalu lintas data yang terhubung ke database, tidak ada proses servier-side scripting (misal website pakai bahasa PHP, Java, dll), dan juga biasanya file html nya tidak berubah secara terus-menerus. Nah, di AWS S3 mempunyai fitur website static tersebut agar file-file html yang tersimpan di dalam bucket dapat diakses dari internet. Baca selengkapnya disini.

Kita akan coba labkan. Pertama, masuk ke AWS Console, lalu klik Services.

Di sesi Storage, klik S3.

Berikut tampilan dashboard dari AWS S3. Bisa menggunakan bucket yang sudah ada, atau buat baru dengan klik Create bucket.

Saya coba buat bucket baru dengan nama misskecupbung-web-001 di region us-east-1. Atur parameter lainnya dengan default, lalu klik Create bucket.

Pastikan bucket berhasil dibuat ya.

Masuk ke bucket dan klik Upload untuk mengunggah file html nya.

Saya upload file index.html dan error.html. Lalu klik Upload.

Pastikan kedua file berhasil diunggah ya. Seperti di bawah ini.

Masuk ke menu Permissions dan pada sesi Block public access, klik Edit.

Hilangkan semua centang dan klik Save changes. Pengaturan ini diset agar semua user tidak diblok, sehingga dapat mengakses file dalam bucket tanpa menggunakan autentikasi dan otorisasi.

Ketik confirm dan confirm.

Pastikan berhasil ya!

Kita coba file index.html nya agar bisa diakses dari browser. Caranya, balik ke tab Objects, centang file index.html, klik Actions dan klik Make public.

Konfirmasi dengan klik Make public.

Pastikan berhasil ya!

Klik file index.html dan klik URL nya ya.

Maka akan tampil seperti di bawah ini. Pastikan muncul, sebagai file berhasil diakses dari publik.

Bagaimana dengan error.html ? atau, bagaimana dengan file-file html yang lain (dalam kasus misal kita punya file html yang banyak). Daripada setting file satu-per-satu seperti di atas, kita bisa menerapkan policy agar allow public bisa langsung diterapkan untuk seluruh file dalam bucket secara otomatis.

Balik ke pengaturan bucket, gulir ke bawah sampai menemukan pengaturan Bucket policy. Klik Edit.

Tempel policy nya di editor:

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "PublicReadGetObject",
			"Effect": "Allow",
			"Principal": "*",
			"Action": [
				"s3:GetObject"
			],
			"Resource": [
				"arn:aws:s3:::BUCKET_NAME/*"
			]
		}
	]
}

Lalu klik save.

Catatan: perhatikan Effect nya allow, dan principal nya * yang menandakan keseluruhan file dalam bucket.

Hasilnya akan seperti di bawah ini.

Jika dilihat di dashboard AWS S3, maka akan terlihat akses Public.

Dan ya. FIle error.html dapat dibuka.

Bagaimana agar kedua file saling terhubung selayaknya website? jadi kita akses tanpa ada tambahan path /index.html ataupun /error.html.

Masuk ke bucket, klik Properties, dan gulir ke bawah sampai menemukan sesi Static Website Hosting. Secara default statusnya masih Disabled. Klik Edit.

Pilih Enable dan definisikan Index document dan Error document nya ya!

Klik Save.

Pastikan berhasil! Klik Endpoint URL untuk mengakses static website nya.

Tampilannya seperti berikut ini.

Tanpa ada tambahan path /index.html ataupun /error.html dan selamat! kita telah berhasil membuat static website menggunakan AWS S3.

Sekian!

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.

AWS: How to Create an AWS S3 Bucket

Hai!

Pada jurnal ini saya ingin membahas mengenai salah satu layanan dari AWS yang tergolong layanan lama. Yup. AWS S3 yang merupakan akronim dari Simple Storage Service.

AWS S3 merupakan layanan object storage yang digunakan untuk menyimpan file non-relational dan tidak berubah (sudah ter-encoded) berupa audio, video, gambar, dan lain-lain. Jadi kita tidak bisa menyimpan data seperti dari database karena ia relasional dan sangat cepat berubah.

AWS S3 merupakan layanan yang secure, durable, highly scalable object storage. Secure atau aman karena sudah secara default ter-enkripsi oleh AWS serta memiliki durabilitas dan skalabilitas yang tinggi. Penggunaanya sangat mudah dan dapat diakses darimana saja.

Object storage ini kebalikan dari block storage, dimana block storage digunakan untuk instalasi sistem operasi, sedangkan object storage digunakan untuk menyimpan file.

Kita tidak perlu menginstall dan hanya perlu menggunakan saja karena sudah ter-manaje oleh AWS. Penyimpanan unlimited dimana setiap file, ukuran maksimalnya adalah 5TB.

Banyak kemudahan dari AWS S3 yang bisa didapatkan, berdasarkan dokumentasinya di https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html , kelebihannya berupa:

  • Membuat bucket, dimana bucket ini ibarat folder yang digunakan untuk menyimpan file-file kita.
  • Menyimpan data
  • Mengunduh data
  • Pengaturan hak akses, jadi tidak semua orang bisa mengakses data kita. Hanya yang diperbolehkan saja.
  • Antarmuka standar, ini menggunakan REST dan SOAP yang dapat digunakan di semua internet-development toolkit.

Oke, mari kita lanjutkan untuk labnya, agar kita mendapatkan sedikit gambaran bagaimana cara menggunakan layanan AWS S3. Bisa dipraktikkan di akun AWS masing-masing ya!

Pertama, buka console AWS di https://console.aws.amazon.com/. Tampilannya seperti di bawah ini. Bisa search di kolom pencarian, ketik AWS S3 atau klik menu Services di samping logo AWS.

Scroll down, dan pada menu Storage, pilih S3.

Berikut ini tampilan dari dashboard AWS S3. Fitur-fitur/apa saja yang bisa kita lakukan berada di samping kiri dashboard. Terlihat saya belum memiliki bucket, jadi untuk membuatnya klik Create Bucket.

Isikan nama bucket. Ingat ya, nama bucket harus unik. Jadi di dunia hanya ada satu, dan tidak boleh sama:). Pilih AWS Region, misal saya di us-east-1.

Lalu scroll ke bawah. Uncheck bagian Block all public access, dan centang I acknowledge xxxx. Dalam lab ini, saya ingin agar file yang saya upload (saya akan upload gambar) dapat diakses oleh siapapun (public).

Scroll kebawah. Untuk bucket versioning biarkan default (akan dibahas di jurnal lain), tambahkan tags, misal Department – Operational, dan Default encryption saya biarkan default. Untuk enkripsi, secara default sudah diberikan oleh AWS, tapi untuk data yang butuh keamanan lebih biasanya ditambahkan enkripsi sendiri.

Untuk advanced setting, biarkan default. Lalu klik Create bucket.

Tunggu beberapa saat, dan bucket akan berhasil terbuat. Seperti di bawah ini.

Klik nama bucket untuk melihat detailnya. Disana ada tab Object (akan menampilkan data yang sudah kita upload), Properties (berisikan pengaturan terkait bucket kita), Permissions (berisikan pengaturan hak akses), Metrics, Management, dan Access Points.

Untuk mengunggah file, klik Upload.

Drag-drop file, atau upload file dengan klik Add files. Disini saya mengupload dua gambar ya. Scroll down, dan klik Upload.

Akan muncul notifikasi bahwa gambar kita berhasil diupload seperti di bawah ini.

Saya coba klik gambar google-eart-view-14004.jpg, dan klik Object URL untuk melihat gambar secara dari browser.

Dan munculnya adalah AccessDenied. Mengapa? karena pengaturan block all public acces yang kita uncheck saat membuat bucket hanya akan membuat file-file didalamnya dapat dibuat public, jadi belum public.

Untuk membuat public, kembali ke detail gambar, klik Object actions > Make public

Lalu akan diarahkan ke tampilan seperti di bawah ini, klik Make public.

Akan muncul notifikasi Make public status berhasil.

Lalu coba refresh gambar. Maka gambar akan berhasil terlihat.

Selain menggunakan cara di atas. Kita bisa menggunakan cara lain.

Saya coba buka gambar kedua dengan nama google-earth-view-6079.jpg lalu masuk ke tab Permissions.

Disana kita bisa mengatur hak akses siapa saja yang dapat mengakses bucket dan file-file yang kita upload. Klik Edit.

Centang Read pada bagian Everyone untuk Objects.

Scroll down dan centang I understand xxxxx. Lalu klik Save changes.

Akan muncul notifikasi bahwa perubahan yang kita lakukan berhasil. Lalu coba klik Object URL.

Hasilnya gambar juga akan berhasil diakses melalui browser.

Okay. Di atas merupakan penjelasan sedikit mengenai pengaturan files. Selanjutnya kita akan coba mengubah storage class.

Layanan AWS S3 menawarkan berbagai storage class atau kelas penyimpanan yang mana dapat disesuaikan dengan penggunaan. Tiga kelas penyimpanan utama adal AWS S3 Standard untuk penyimpanan umum dari data yang sering diakses, AWS S3 Standard-IA untuk data yang berumur panjang tetapi jarang diakses, dan AW S3 Glacier untuk arsip jangka panjang.

Lebih lengkapnya ada di tabel berikut:

Storage classDesigned forDurability (designed for)Availability (designed for)Availability ZonesMin storage durationMin billable object sizeOther considerations
S3 StandardFrequently accessed data99.999999999%99.99%>= 3NoneNoneNone
S3 Standard-IALong-lived, infrequently accessed data99.999999999%99.9%>= 330 days128 KBPer GB retrieval fees apply.
S3 Intelligent-TieringLong-lived data with changing or unknown access patterns99.999999999%99.9%>= 330 daysNoneMonitoring and automation fees per object apply. No retrieval fees.
S3 One Zone-IALong-lived, infrequently accessed, non-critical data99.999999999%99.5%130 days128 KBPer GB retrieval fees apply. Not resilient to the loss of the Availability Zone.
S3 GlacierLong-term data archiving with retrieval times ranging from minutes to hours99.999999999%99.99% (after you restore objects)>= 390 days40 KBPer GB retrieval fees apply. You must first restore archived objects before you can access them. For information, see Restoring an archived object.
S3 Glacier Deep ArchiveArchiving rarely accessed data with a default retrieval time of 12 hours99.999999999%99.99% (after you restore objects)>= 3180 days40 KBPer GB retrieval fees apply. You must first restore archived objects before you can access them. For information, see Restoring an archived object.
RRS (not recommended)Frequently accessed, non-critical data99.99%99.99%>= 3NoneNoneNone

Sumber: https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html.

Secara default, storage class dari bucket dan file yang kita upload kita adalah S3 Standard. Untuk mengubah storage class nya salah satu object, coba klik file nya.

Klik Object Actions > Edit Storage class.

Atau bagian properties dari file ini bisa scroll down, bagian Storage clas, klik Edit.

Pilih tipe storage class barunya. Misal One Zone-IA. Lalu klik Save changes.

Notifikasinya akan muncul yang menandakan storage class dari object berhasil diubah.

Bisa verifikasi di bagian Properties object ya. Harusnya sudah berubah.

Okay. Pembahasan ketiga sekaligus terakhir dalam jurnal ini adalah fitur Transfer Acceleration pada AWS S3. Apa itu? pada dasarnya memungkinkan kita untuk transfer file yang mudah, aman, dan lebih cepat di AWS S3.

Bisa lebih cepat karena fitur transfer acceleration memanfaatkan layanan AWS CloudFront yang terdistribusi secara global. Sederhananya, misal kita berada di Indonesia dan bucket berada di us-east-1.

Dengan penggunaan transfer acceleration, kita tidak langsung mengunggah/mendownload file ke us-east-1 dari Indonesia. Tapi melalui edge-location, misal berada di Singapura.

Jadi alurnya adalah kita upload file dari Indonesia ke edge-location Singapura > lalu dari edge-location file akan diteruskan ke us-east-1 melalui backbone network AWS, yang menjadikannya lebih cepat.

Bagaimana cara mengkonfigurasinya? masuk ke bucket yang telah dibuat sebelumnya. Klik Properties.

Scroll down hingga sampai Transfer acceleration, klik Edit.

Enable dan klik Save changes.

Muncul notifikasi bahwa fitur transfer acceleration telah diaktifkan.

Sekian!

Anak dan Video Gim

Saya dan saudara-saudara saya tumbuh di keluarga pengusaha yang ketat tentang apa yang boleh dan tidak boleh dilakukan oleh anak mereka. Bapak saya membolehkan apa pun selama hal itu terkait dengan sekolah. Pilihan atau keputusan-keputusan orang tua saya itu adalah hak mereka. Saya patut mematuhi mereka sampai saya diizinkan untuk mengambil keputusan penting sendirian. Namun saya menyayangkan satu hal yaitu betapa tidak sukanya orang tua saya terhadap video gim, apa pun bentuknya. Orang tua saya pastinya memiliki alasan tersendiri.

Saya dan kakak saya tidak pernah meminta konsol video gim kepada orang tua kami secara terang-terangan. Tapi kami masih bisa bermain di rumah teman/tetangga kami atau di rental video gim, kan? Tidak juga, orang tua kami juga tidak mengizinkan itu. Kami selalu melakukannya secara sembunyi-sembunyi. Jangan remehkan rasa penasaran anak-anak yang sangat tinggi. Hal-hal yang berbau teknologi dan elektronik sangat menarik minat kami. Puncaknya, bapak saya marah besar saat mengetahuinya dan langsung menjemput kami di tempat kami bermain.

Dampak

Sejak kejadian itu saya tidak pernah benar-benar bisa menikmati bermain video gim.

Saya berusia 12 tahun saat bapak saya meralat sikapnya dan memberi saya kebebasan yang lebih longgar. Saya pindah ke lingkungan baru di mana saya bertemu anak-anak baru yang lebih mapan. Kebanyakan dari mereka memiliki konsol video gim di rumahnya. Meskipun bapak saya tidak pernah lagi melarang saya akan tetapi saya tidak pernah bisa menikmati video gim seperti dulu. Semacam ada perasaan tidak enak menghantui dan hal itu sangat mengganggu.

Jika sedang bermain video gim dengan teman-teman, saya lebih sering dijadikan bulan-bulanan karena saya sangat payah. Saat teman-teman berdebat tentang aturan-aturan dalam permainan tertentu, saya sudah malas mencernanya. Saya menjadi anak yang memiliki sifat kurang kompetitif, gampang menyerah, selalu mencari cara aman atau malas mengambil resiko dan tidak cukup kreatif dalam urusan strategi. Saya tidak lagi menyukai permainan yang melibatkan lebih dari 1 orang seperti sepak bola. Saya menyukai basket tapi saya tidak pernah suka bermain dalam tim.

Setelah tumbuh dewasa dan bisa menghasilkan uang sendiri, saya pernah mencoba menyewa konsol gim, dibawa pulang selama beberapa hari untuk melihat apakah saya dapat menumbuhkan kembali hasrat yang dulu. Hal itu ternyata sia-sia.

Akibat yang paling memalukan barangkali pendapat sok tahu saya yang menyatakan bahwa video gim bukanlah bentuk seni. Saya salah. Saya hanya kurang dapat mengapresiasi jenis karya yang satu ini karena bias dan trauma.

Kembali

Saya pertama kali bertemu istri saya pada suatu sore di tahun 2017, kenal lebih dekat 1 tahun kemudian dan akhir 2019 kami menikah. Buat saya hal yang paling mengejutkan dari dirinya adalah ia seorang gamer. Ia tumbuh besar di keluarga yang mampu membeli konsol video gim dan masih bermain gim sampai sekarang. Saat ia mempersiapkan pindahan untuk tinggal bersama saya, ia membawa serta konsol Xbox 360 dan sebuah Nintendo 3DS yang sistemnya terkunci dalam bahasa/aksara Jepang. Hati saya bergejolak. Saya tidak dapat menahan diri dan mencoba menjelajahi konsol genggam tersebut. Saya kembali menjelma seperti anak kecil yang penasaran akan dunia luas yang pintunya tidak lebih lebar dari 800 piksel. Dan yang paling penting, orang terdekat saya sekarang memahami dengan baik perasaan meluap yang saya alami itu.

Keputusan untuk memiliki anak juga mendorong saya untuk bereksperimen ulang dengan video gim. Kami kemudian memutuskan untuk merakit PC gaming. Dengan dukungan istri, saya perlahan dapat menumbuhkan kembali minat yang hampir 2 dekade telah pudar. Setelah setahun berlalu dan menamatkan judul-judul epik seperti What Remains of Edith Finch, Inside, Shadow of Mordor dan lainnya, saya dapat mengapresiasi video gim sebagai karya seni. Saya juga menyempatkan diri untuk mempelajari kultur dan perkembangan video gim yang selama ini saya ketinggalan banyak.

Sekarang video gim menjadi salah satu pilihan saya dalam mengisi waktu luang di akhir pekan. Tidak jarang saya bermain bersama keluarga. Video gim juga telah membantu saya melewati tekanan pada masa-masa karantina atau isolasi mandiri karena infeksi COVID-19. Video gim melatih saya untuk bergerak lebih kreatif, tidak mudah menyerah, mengembangkan kelincahan dalam berpikir dan memberi saya kumpulan emosi positif yang tidak saya dapatkan di media lain.

Menjadi Orang Tua

Keresahan orang tua zaman saya masih kecil mungkin berbeda dengan orang tua zaman sekarang. Video gim masih menghantui sebagai salah satunya. Sekarang di media massa mudah didapati berita-berita tentang seorang anak yang menghabiskan jutaan rupiah hanya untuk membeli voucher gim. Di lingkungan tempat tinggal saya sendiri dapat ditemukan anak-anak yang nongkrong dengan telepon genggam masing-masing dan menghabiskan waktu sepanjang hari tanpa pengawasan. Video gim pada anak-anak masih erat diselimuti isu adiksi dan minim pengawasan.

Keresahan macam apa yang akan saya hadapi di zaman anak-anak saya nanti? Saya tidak tahu apa yang akan terjadi nanti namun saya harus siap beradaptasi apa pun itu. Inti dari tantangan ini barangkali bagaimana kita dapat melindungi anak-anak kita dari keresahan-keresahan itu tanpa membuat mereka tertinggal dari perkembangan zaman ataupun menghambat aspek-aspek tumbuh kembang mereka.

Saya dan istri saya sepakat tidak akan melarang anak kami bermain video gim. Saya akan membelikannya konsol video gim jika dia memintanya, barangkali sebagai bentuk apresiasi atas prestasi. Saya akan mengawasi dan menemaninya. Saya akan mengizinkannya mengalahkan saya dalam permainan, saya tidak keberatan. Saya akan membatasi screen time sesuai rujukan ilmiah terkini. Saya percaya video gim dapat memberi dampak yang baik dalam perkembangan anak bila kesempatan itu diberikan dengan batas wajar dan diawasi. Anak saya berhak menikmati karya seni ini jika dia mau.

Anak saya usianya belum satu tahun dan saya sudah membual tentang apa yang akan saya lakukan dengannya. Saya tahu ini tidak mudah. Tulisan ini akan saya kunjungi ulang sewaktu-waktu untuk membantu saya mengevaluasi apa yang telah saya lakukan di masa mendatang.

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.


 

Upgrade PC Tanpa Menggoncang Tabungan

Suatu ketika saya ingin meng-upgrade PC saya tapi kok rasanya berat hati untuk menyentuh tabungan. Rasanya kok keinginan tersebut tidak pada prioritas yang betul kalau sampai tabungan terkorek. Apa lagi sebentar lagi saya akan punya anak, tentu tidak betul kalau sampai pundi-pundi yang sudah diatur sedemikian rupa jadi terganggu. Terus bagaimana dong?

Decluttering

Ada orang-orang yang dengan mudah menyingkirkan barang yang tidak mereka perlukan, ada pula orang yang perlu arahan/motivasi lebih untuk melakukan itu. Saya adalah jenis orang yang kedua.

Ada dua buah buku yang saya baca secara berurutan pada tahun 2018, yaitu The Life-Changing Magic of Tidying Up oleh Marie Kondo dan Goodbye, Things oleh Fumio Sasaki.

Ide soal spark of joy dari Marie Kondo tidak begitu masuk ke kepala saya. Banyak benda yang tidak memenuhi kriteria tersebut tapi kalau disingkirkan dari hidup saya maka saya akan menjadi kesusahan secara tidak perlu. Nasihat-nasihat dari Fumio Sasaki lebih mengena di hati dan kepala.

Saat menulis buku tersebut, Fumio Sasaki adalah pria lajang tanpa tanggung jawab yang banyak, bahkan tanpa pacar. Jadi nasihat-nasihatnya sangat ekstrim. Saya juga sudah pernah beberapa kali melakukan decluttering, baik dengan giveaway mau pun dengan penjualan namun saya belum pernah mencobanya dengan cara yang ekstrim. Sekarang saya dapat melakukannya.

Keputusan memiliki anak ada trade-off-nya: ada banyak hal yang tidak dapat saya lakukan lagi dikarenakan waktu dan tenaga yang terbagi untuk keluarga. Setelah saya pikir-pikir, ternyata saya:

  • Tidak bisa naik gunung sampai 5-10 tahun ke depan.
  • Mengganti olahraga saya dengan yang lebih sederhana seperti jogging. Ditambah kondisi pandemi, saya tidak lagi bersepeda jauh-jauh untuk berolahraga.
  • Sulit/tidak dapat meluangkan waktu untuk beberapa mainin/koleksi.

Artinya benda-benda yang terkait dengan kegiatan di atas tidak lagi berguna untuk saya. Jadi saya memutuskan untuk menjual barang-barang saya tersebut: alat-alat dan perlengkapan mendaki gunung, sepeda, mechanical keyboard, beberapa barang elektronik, barang-barang yang duplikat (misal saya punya tetikus 2 buah), barang-barang yang dibeli sebagai cadangan, barang-barang pemberian, dan sebagainya. Pokoknya banyak banget! Banyak dari benda-benda itu adalah barang kesayangan, koleksi, dan memiliki kenangan namun manfaatnya untuk saya tidak ada. Manfaatnya untuk keluarga saya lebih nihil lagi. Apa yang lebih nihil dari nihil?

Saya tidak dapat menjelaskannya sebaik Fumio Sasaki. Jika kamu termasuk orang yang perlu motivasi tambahan untuk menyingkirkan barang-barang tidak terpakai, Goodbye Things boleh dicoba.

Strategi penjualan

Saya menjual semuanya dengan harga jual 3/4 harga beli. Bahkan ada yang setengah harga beli jika saya pikir barang tersebut sulit ditemukan pembelinya. Jika yang membelinya adalah orang yang saya kenal baik, maka saya memberinya kepercayaan untuk cicilan yang bebas diaturnya sendiri. Ada yang mengambil cicilan 1 tahun, ada pula yang mengambil cicilan 1.5 tahun. Dengan adanya cicilan ini, saya mesti menyediakan semacam dana buffer yang nantinya harus diganti oleh piutang cicilan ini. Dana ini dapat saya gunakan dengan segera untuk upgrade.

Kurang dalam 2 minggu penjualan, ditambah hasil penjualan spare part PC yang mau diupgrade, saya berhasil mengumpulkan dana sekitar 18 juta rupiah. Saya juga kaget dengan kalkulasi ini. Tapi saya hanya menggunakan sekitar 7-8 juta rupiah untuk upgrade PC. Selebihnya bisa masuk tabungan. Asyik kan?

Spesifikasi unit PC sekarang

Jika ditambahkan dengan nilai dari sebelum di-upgrade, totalnya Rp 16.301.000. Lumayan juga, tapi saya cukup senang dengan hasil ini.

Dari rig lama, pembelian 2020:

  • AMD Ryzen 5 3400G, Rp. 2.080.000
  • Zotac NVidia 1660 Ti AMP, Rp. 4.000.000
  • Nvme M2 SSD Intel 660P 512GB, Rp 1.507.000

Upgrade 2021:

  • Gigabyte B450 I Aorus Pro Wifi, Rp 2.158.000
  • RAM G.SKILL F4-3200C16D-16GFX FlareX 16GB (2x8GB) DDR4 3200Mhz, Rp. 1.363.000
  • Corsair - SF750 80 Plus Platinum 750 Watt SFX P, Rp. 2.668.000
  • CPU cooler Noctua NH-L9a AM4, Rp. 698.000
  • Geeek A50 Plus White ITX Case, Rp. 1.510.000
  • ID-COOLING NO-9215 92mm Slim Cooling Fan PWM, Rp. 231.000
  • Mini ITX Wifi & Bluetooth Antenna RP-SMA Female, Rp. 65.000
  • Audio Splitter Combiner, Rp. 21.000

Penampakan

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.


-

Using Git For Windows With MSYS2

Developing software in Windows using GCC, Make, etc., is a little bit challenging, we have several choices, but I choose MSYS2.

The problem is, with the default Git from it repository is not quite friendly with Windows, in order to make this a little bit friendly we can use Git for Windows, to install it we can follow the steps from their GitHub:


https://github.com/git-for-windows/git/wiki/Install-inside-MSYS2-proper


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



The First Verbeek Nightly Build with Package That Build by IRGSH

Today we’re pleased to announce our first nightly build (or “jahitan”) with package that build by our in-house toolchain IRGSH. This build featured Pop Shell extension package which marks our important milestone. The package help us to prove that IRGSH works as intended to help us to bring the source code to binary package, to injected it to signed repository then wrapped to a bootable ISO.

You can download the ISO file here. You may consider to use zsync to decerase the size of download between builds.

In case you’re curious about what Verbeek will be looks like, we’ve packaged Pop Shell because we want Verbeek to be developer-first desktop. The release will be providing software and tools you need as developer/IT professional. This is the third BlankOn Linux release that will have specific user as target, after Meuligoe Minimalist and Sajadah. If you want to get update about the development, please simply follow the BlankOn Linux Twitter account and click Watch on our release repository.

EJBCA Beginner Guide: From CA to Certificate Enrollment

X509 is a complicated thing and EJBCA makes it easier to grasp. Eww you may find EJBCA is complicated as well. This post will guide you to specific case as example:

CA that can issuing certificates for high education instutution. High education institution as end user can signing PDF files for their student certification.

This post is not the best practice example but it can introduce you to how EJBCA works. Let’s go.

EJBCA Preparation on local environment

docker-compose.yaml:

version: '3'

services:
  db:
    image: postgres:13-alpine
    env_file: .env
    restart: always
    volumes:
     - ./data:/data

  ejbca:
    image: primekey/ejbca-ce:6.15.2.6
    env_file: .env
    restart: always
    ports:
      - 80:8080
      - 443:8443
    depends_on:
      - db

.env:

# EJBCA
TLS_SETUP_ENABLED=simple
DATABASE_USER=postgres
DATABASE_PASSWORD=kLTPk5Ty9K3JHykCS38YBHDTVwXkVCgjsQs7HaT8wwT5VcY5G54tMbSNt6uCEztM
DATABASE_JDBC_URL=jdbc:postgresql://db/postgres

# DB
POSTGRES_PASSWORD=kLTPk5Ty9K3JHykCS38YBHDTVwXkVCgjsQs7HaT8wwT5VcY5G54tMbSNt6uCEztM
PGDATA="/data"

Spin them up with docker-compose up -d --force-recreate. It’ll take some minutes until EJBCA is ready to serve you.

Some notes:

  • Add 127.0.0.1 ejbca to your /etc/hosts as the ejbca declared itself on ejbca hostname/domain.
  • Make sure you can access https://ejbca/ejbca/adminweb/ without problem.

Issuing Root CA

  • On EJBCA Admin Web interface, go to CA Functions -> Certificate Authorities.
  • On Add CA form, write your Root CA common name, e.g. AgunoRootCA, then click Create
  • You’ll be redirected to complicated form of issuing CA.
  • Leave the default values as is except for:
    • CA Serial Number Octet Size: 20
    • Validity: set it to 10y
    • Issuing Distribution Point on CRLs: Use
    • Default CA defined validation data: click all Generate buttons in this section, then change the localhost strings to ejbca.
    • Monitor if CA active (healthcheck): Activate
  • Then click Create button.
  • At this point, you have two CAs:
    • ManagementCA
    • AgunoRootCA

Issuing Intermediate CA

  • Do the same again as above except:
    • The CA name is AgunoIntermediateCA
    • Leave the default values but set some values as above and:
      • CA Certificate Data, Signed By: AgunoRootCA
  • At this point, you have three CAs:
    • ManagementCA
    • AgunoRootCA
    • AgunoIntermediateCA

Preparing Certificate Profiles

Any attempt of issuing new certificate will require a certificate profile that define what kind of certificate that will be created. Let’s assume that we want to create certificate profile for high education institutions and it will be used to signing ijazah. Let’s name it HIGHEDUINSTITUTION.

  • On EJBCA Admin Web interface, go to CA Functions -> Certificate Profiles.
  • At the end of the list, enter your profile name, HIGHEDUINSTITUTION, click Add
  • It’ll be added to the list, now click Edit button as we need to modify some values. IMPORTANT NOTE: If you want to multiple select some values, press and hold Shift button or the previous selected values will be loss.
  • Now please set some values on this field :
    • Available Key Algorithms: select ONLY RSA, we need to make it broadly compatible.
    • Available Bit Lengths: select ONLY 4096 bits
    • Validity or end date of the certificate: 5y
    • Extended Key Usage: Use, Critical, select ONLY PDF Signing
    • Available CAs: select ONLY AgunoIntermediateCA
  • Click Save button

Preparing End Entity Profile

Certificate Profile defines the technical aspects of the certificate. On the other hand, EEP defines the entity aspects that related to identity.

  • Go to RA Functions -> End Entity Profiles
  • On Add Profile form, type your profile name, e.g. HIGHEDUINSTITUTION (same as the certificate profile name), then click the Add button.
  • After it added to the list, click the item then click Edit End Entity Profile button.
  • You’ll be redirected to (again) a complicated form. Leave it as is but modify some values:
    • Password: Required
    • Other subject attributes: Remove all attributes
    • Default Certificate Profile : HIGHENDINSTITUTION
    • Available Certificate Profiles: select ONLY HIGHENDINSTITUTION
    • Default CA: AgunoIntermediateCA
    • Available CAs: select ONLY AgunoIntermediateCA
    • Default Token: P12
    • Available Tokens: select ONLY P12
  • Click save
  • At this point, you have three CAs, a configured certificate profile and a configured entity profile. You’re ready to enroll new certificate for education institutions.

Let’s try to issuing and enrolling a new certificate for education institution

  • On EJBCA Web Admin interface, go to RA Functions -> Add End Entity
  • On End Entity Profile field, select HIGHEDUINSTITUTION, the form will be adjusted according to our end entity profile configuration.
  • Enter your entity information, e.g.:
    • Username: ugmacid
    • Password: enter the password for enrollment
    • E-mail address administration@ugm.ac.id
    • CN/Common name ugmacid
  • Leave other values as is.
  • Click Add button.

Let’s enroll the certificate

  • Go to https://ejbca/ejbca/, this is the public interface of the EJBCA instance.
  • On Enroll section, click Create Browser Certificate
  • Enter the username and Enrollment code (password)
  • You’ll be asked for confirmation, click Enroll button
  • A P12 file will be downloaded to your computer, it’s protected by passphrase. Use the password as passphrase.

At this point, you may check the new issued certificate against the certificate chain.

Next post

I’ll write about authentication, roles and security on maintaining EJBCA instance.

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

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


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.

Vortex Tab 75 Programming Guide

I need to write it down here so there will be no need to visit Vortex Gears’s incomplete documentation in the future.

Programming

  • Plug in the cable, you need the LED to guide you
  • PN + LEFT_CTRL (original position) to enter programming mode
  • Press the key that want to be programmed
  • Press the target key
  • PN to apply
  • PN + LEFT_CTRL to exit

It’s possible to lose a key. Sometimes you need to backup it first. Be careful.

Reset

  • Reset the current layer key-codes: Hold PN + R (original position)
  • Reset all layers’ key-codes and restore it to default: Hold LEFT_ALT + RIGHT_ALT (original position)

Bluetooth

  • PN + LEFT_ALT (on the left of the space bar key) for 3 seconds
  • PN + J or K or L (current position)
  • Pair the device

Fn swap

  • Hit FN + LEFT_SHIFT for 3 seconds then select new FN key directly

Pn swap

  • Hit PN + LEFT_SHIFT for 3 seconds then select new PN key directly

Layer

  • PN + M or < or > (original position), indicator on left LED.

Layout

  • PN + RIGHT_SHIFT (cycle) to change layout, indicator on right LED. No LED for Qwerty, red for Colemak, green for Dvorak

Operating system

  • PN + Q or W or E (original position) for Windows, Mac and Linux respectively

Vim's Native Multiple Cursors Feature

Sublime Text was my favourite text editor, I’ve been following it since its early days. The feature I most liked and can’t live without is the multiple cursors selection. Sublime Text lets you to select and edit string on multiple place at once based on pattern that you defined. I think it was a pain killer feature. The thing was that I always want to go back to Vim. The day I found this repository (https://github.com/terryma/vim-multiple-cursors), I switched back to Vim. vim-multiple-cursors is easy and intuitive as Sublime Text’s althought it has a bit differential. But nowdays vim-multiple-cursors has been broken, especially on the latest Vim release.

I were wondering if there is a way to do the same things with Vim’s internal command. Tada yada thanks to https://vim.fandom.com/wiki/Vim_Tips_Wiki. Not very intuitive as Sublime Text’s or vim-multiple-cursors but it works as intended. Actually it is not a multiple cursors thing, still and all it achieved the same as multiple cursors feature. It’s more like a multiple replay.

Vertical multiple replay

  • Ctrl+v to vertical select your lines, use jj to expand your selection.
  • Hit Shift+i then type the string you want to insert.
  • Pres Escape, the inserted text will be appears on all lines.

Multiple replay by pattern

  • Search your string with /stringyouwanttomark
  • Type cgn then type the new string.
  • Hit Ctrl-c to exit to visual mode.
  • Press . to replay it to the next one.

Update:

This repo showed up in vim-multiple-cursors’s issues (https://github.com/mg979/vim-visual-multi) and it works good too but I think I do stay on native Vim command so I don’t have to rely on my dotfiles for this feature.

UNK rev1 Trackpoint Module

As a person who have been using Thinkpad computers for years, I was always missing the trackpoint feature. I want to type on mechanical keyboard but also I don’t willing to dismiss the nipple. There are few solution for this issue: UHK, Tex Yoda, Tex Shinobi. These all are expensive keyboard, the shipping cost alone is crazy.

Trackpoint module is one of my goals while building UNK and I successfully build it. Here is the video if you wonder how it looks/works.

If you prefer to see it in pictures: https://imgur.com/gallery/cKV1syE

The trackpoint sensor is taken from a dead Thinkpad X201 keyboard. I was planning to make a magnetic detacable connector to the right half of the keyboard, just like magsafe but I didn’t success. So, I’m using another Pro Micro instead. It’s not perfect but it’s my build and I’m happy with it.

My First Custom Handwired Keyboard Build: UNK

More detail and build logs : https://github.com/herpiko/unk

Design Process

TO BE WRITTEN

Tensorflow GPU on Nvidia 1660 Ti

Although my GPU is not listed here, I can confirm that 1660 Ti works. The machine learning training is now significantly faster than using CPU.

➜  imagerec git:(updated-deps) ✗ nvidia-smi
Tue May  5 15:00:40 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.33.01    Driver Version: 440.33.01    CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 166...  On   | 00000000:01:00.0  On |                  N/A |
| 32%   35C    P8    12W / 130W |    293MiB /  5941MiB |      2%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1549      G   /usr/lib/xorg/Xorg                            18MiB |
|    0      1953      G   /usr/bin/gnome-shell                          48MiB |
|    0      2592      G   /usr/lib/xorg/Xorg                           108MiB |
|    0      2725      G   /usr/bin/gnome-shell                         114MiB |
+-----------------------------------------------------------------------------+
➜  imagerec git:(updated-deps) ✗ python
Python 3.7.7 (default, May  5 2020, 04:20:38) 
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from tensorflow.python.client import device_lib
2020-05-05 15:01:16.900600: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer.so.6
2020-05-05 15:01:16.901543: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer_plugin.so.6
>>> device_lib.list_local_devices()
2020-05-05 15:01:21.071110: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2020-05-05 15:01:21.100259: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 3692985000 Hz
2020-05-05 15:01:21.100906: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x55d1bb829330 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-05-05 15:01:21.100968: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
2020-05-05 15:01:21.105053: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so.1
2020-05-05 15:01:21.217053: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-05 15:01:21.217492: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x55d1bb8b7590 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:
2020-05-05 15:01:21.217525: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): GeForce GTX 1660 Ti, Compute Capability 7.5
2020-05-05 15:01:21.217760: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-05 15:01:21.218479: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1555] Found device 0 with properties: 
pciBusID: 0000:01:00.0 name: GeForce GTX 1660 Ti computeCapability: 7.5
coreClock: 1.86GHz coreCount: 24 deviceMemorySize: 5.80GiB deviceMemoryBandwidth: 268.26GiB/s
2020-05-05 15:01:21.218590: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-05-05 15:01:21.218654: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-05-05 15:01:21.220646: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10
2020-05-05 15:01:21.221035: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10
2020-05-05 15:01:21.223176: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10
2020-05-05 15:01:21.224561: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10
2020-05-05 15:01:21.224651: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-05-05 15:01:21.224857: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-05 15:01:21.225935: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-05 15:01:21.226839: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1697] Adding visible gpu devices: 0
2020-05-05 15:01:21.226907: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-05-05 15:01:21.443386: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1096] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-05-05 15:01:21.443435: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1102]      0 
2020-05-05 15:01:21.443446: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] 0:   N 
2020-05-05 15:01:21.443650: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-05 15:01:21.444083: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-05 15:01:21.444563: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1241] Created TensorFlow device (/device:GPU:0 with 5176 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1660 Ti, pci bus id: 0000:01:00.0, compute capability: 7.5)
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 7827239615455337760
, name: "/device:XLA_CPU:0"
device_type: "XLA_CPU"
memory_limit: 17179869184
locality {
}
incarnation: 9475332420332566901
physical_device_desc: "device: XLA_CPU device"
, name: "/device:XLA_GPU:0"
device_type: "XLA_GPU"
memory_limit: 17179869184
locality {
}
incarnation: 11551463581523616297
physical_device_desc: "device: XLA_GPU device"
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 5427691520
locality {
  bus_id: 1
  links {
  }
}
incarnation: 634448236828243524
physical_device_desc: "device: 0, name: GeForce GTX 1660 Ti, pci bus id: 0000:01:00.0, compute capability: 7.5"
]
>>> 

Using CPU,

python train.py  32,29s user 6,06s system 333% cpu 11,514 total

Using GPU,

GPU=1 python train.py  7,73s user 2,09s system 109% cpu 8,959 total

The setup is quite complex with various errors and version missmatches. I let myself to symlink different version of CUDA/cuDNN libraries.

If you’re planning to buy a GPU to support your machine learning project, pick a RTX graphics card. It’s tremendously faster with built-in tensor cores. Unlimited budget? Here you go.

I Spilled Coffee on My Mechanical Keyboard

My main keyboard was a Vortex Core. After my wife keep complaining about the noises (now you know it’s the blue one), I bought a Vortex Tab 75 with Cherry MX brown switches (she approved the new typing sound). It’s just a few weeks before I made an accidental disaster to the keyboard.

I was programming on some stuff while snacking Dua Kelinci peanuts. The peanuts were in a small plastic jar on the left of my keyboard. Also, there is a cup of coffee near there. I eat the peanuts by pouring them to my hand, then forwarded the peanuts to my mouth. These actions were done above the keyboard. Then I unconsciously grab the coffee cup and do the same as I thought it’s the peanut jar. So I just literally poured my hand with coffee and the fluid flood the keyboard!

What I’ve done to solve this:

Go to forums and read some advices

Most of the sources I found were from https://www.reddit.com/r/MechanicalKeyboards/.

Prepare some stuff

  • Screwdriver
  • Key puller
  • Solder
  • Vacuum desoldering pump
  • Tin
  • Alcohol
  • Cotton bud

Unplug it and/or turn it off

I grab the keyboard fast, unplugged the cable + batteries, then turned it upside down. Even if the keyboard uses a low voltage to operate, circuit short can causes a problem.

Pull all the keycaps

You need key puller. Full them all carefully.

Take apart and dried the board in a night

I put the board on top of a fan and left it for a night to make sure there is no fluid left behind.

Test it

The next morning, I plugged the keyboard into my computer and tested it. All the keys were worked as intended but some switches went bad. They felt terrible on my fingers. It may be easy for me if I poured plain water instead of coffee. My coffee contained a bit of sugar and it makes a big difference in how the switches feel. Sugar can make your switches sticky. I need to clean up the dried coffee fluid that remains in the switches’ housing. The only way to do this is to desolder the switches first.

I identified the bad switches and mark them with a permanent marker then unplugged the keyboard.

Desolder the bad switches

I carefully desolder the bad switches. A vacuum desoldering pump is a must here. You can’t do desoldering properly without this tool. I think this is the hardest part.

Take apart the switches and clean it with alcohol

I took apart each switch and cleaned it with a small amount of alcohol using the cotton bud. I reassembled the switches’ housing and test it immediately to make sure it does not feel sticky again.

Resolder

I resolder the switches back to the board. For me, resoldering is far much easy than desoldering.

Test it

I tested all the keys again but with keycap on. You need to test it using keycap to get the accurate feel of the switches. All my switches turned good except the K key switch. It still a bit sticky but it’s ok for me.

Reassembly

I reassembled the keyboard to its original shape. All was well.

UPDATE: 20200607

Turned out that the sticky K key became worse and it’s not ok for me because I used it intensively to navigate in Vim. Instead of fixing this particular one, I decided to replace the entire letter keys with Gateron brown switches. Gateron switches feel smoother than Cherry MX although I can’t overcome the difference while fast typing.

Here is a time-lapse video of me replacing the switches,

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...

Xcode Not Enough Disk Space to Install

I need to update my Xcode on my MacBook Air, it only has 128 GB Flash Storage, and it is hard to upgrade the storage, obviously it has limited free storage, so I need to free some spaces, deleting my old files.

But, even there is already 23 GB free storage, it keep complaining, not enough disk space.

After I had 26 GB free storage, I can continue the update.

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...

Raise/Lower Hand on Zoom Cloud Meeting

Raise/Lower Hand on Zoom Cloud Meeting is a very useful feature.

During online meeting, or online class using Zoom, not all participant can talk at the same time, sometimes the host will mute all participants, when participant want to interrupt, or asking something, so they need to raise the hand.

It seems like not all Zoom user have Raise/Lower Hand icon on the main window, the easiest way to do so is using short cut, for Mac user, the shortcut is: `option + y`.


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.

Pergi ke FOSDEM 2020

Ini nulisnya telat banget, juga males nulis banyak karena udah telat. Intinya sih pingin pamer kalau berhasil pergi ke FOSDEM 2020 di Belgia. Dan seru-seruan bersama teman-teman TDF/LibreOffice.

TDF Board & MCTDF Board & MC

 

Biar kayak orang-orangBiar kayak orang-orang

 

Konser BrexitKonser Brexit

 

Bawaan balik ke kampungBawaan balik ke kampung

Foto lainnya masih banyak sih, tapi ndak minat ditaruh di sini. 🙂
Perjalanan ini ditanggung sepenuhnya oleh The Document Foundation (kecuali pembelian oleh-oleh).

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.