Transcoding H264 to H265 / HEVC using Google Compute Engine with 24 CPU cores

Have you ever want to try the ludicrous power of 24 CPU cores? I sure have! In this post, I am experimenting with Google cloud engine to transcode H264 files to H265.

I have a lot of 1080p H264 movies. This takes too much space. A 30 minutes movies took almost 1GB of storage. However, I found out that we can save more than 70% of the space with the same quality by converting those file to H265. Good news right? Yeah right, The hard pill is that we are trading space for computing complexity. On my laptop, with Intel core I7 6500U with 2 cores, 4 thread and 8 gigabytes of memory, It takes twice the time of the movies to encode. For example, in 1-hour long movie, it will take 2 hours to encode one file. I have 24, 30 minutes long files that I want to convert. That means it will take one day to convert everything!

Surely there is a better solution, right? For example by leveraging GPU capabilities. I got 2x speed up by using Intel encoding solution, Intel QuickSync. The problem is, GPU based encoding tends to produce lower quality images and bigger file size. When I tried to encode a 1 GB file, I got an 80MB file from CPU encoding and 300MB from Intel QuickSync. All in similar preset. 220MB might be not much, but if we have a lot of files, that will pile up quickly. Another option might be to buy GPU with the newer, better, faster chipset. I am stingy though, I can’t justify the money to buy a new GPU.

Fortunately, I heard that Google gives us free credit (300 Euro) for testing their service. Therefore, why don’t we use google cloud engine for doing the encoding? After all, we can select a virtual machine with a powerful CPU. For most people, their internet upload speed might make this solution already impractical even before we test it. Regardless, I am just curious whether Google Cloud Engine can give me good speed encoding H264 file to H265.

Experiment Setup

First, let’s decide which type of virtual machine that we can choose in Google Cloud Engine. You can view it through here https://cloud.google.com/compute/docs/machine-types. I choose to use the high CPU machine type to perform the experiment because H265 encoding is CPU-bounded process. I opt for the spot instance https://medium.com/google-cloud/google-clouds-spot-instances-win-big-and-you-should-too-5b244ca3facf because it’s cheaper than the on-demand instance and suitable for batch processing such as this one. The machine region is Europe-west4-a I perform the experiment using various core size. The table below shows the exact machine configuration that I use for encoding:

Core SizeMemory Size
43.6 GB
87.2 GB
1614.4 GB
2421.3 GB

You might ask, this might not be a valid test because I use different memory size. However, if you increase the core size, the number of minimum memory size that you can pick is also increasing.

I use FFMPEG version 4.0.2 to encode the file is 30 minutes long, with the following settings:

ffmpeg -i input.mkv -c:v libx265 -q:v 22 -c:a libopus output.mkv

The option -c:v is used to select the video codec. In this case, we choose the x265 library provided by FFMPEG. the -q:v is used to select the target video quality. Lower value means higher video quality at the expense of increased space requirements. The recommended value for this is actually 28. I choose 22 because using the value 28 gives me unpleasant artifact.

The option -c: a is used to select the audio codec. Libopus is an audio encoding engine for the OPUS codec. Opus is a high-performance format for audio, which has a better sound quality and lower bitrate requirements than MP3, OGG or AAC. For your information, MP3 typically need 320kb/s to produce CD-like quality, while with Opus, you can achieve the same result with only 96kb/s.

The Result

From the graph, we can see that only when the CPU core is more than 24 we get faster than real-time decoding. the biggest jump in performance is when we increase the core number from 4 to 8 CPU cores. At 4 cores, the encoding speed is actually two times slower than my laptop with 2 core CPU. This is interesting because Google Compute Engine uses a much faster Intel Xeon Skylake processor on its base machine. This suggests the “CPU Core” performance is not the same as the “base CPU core”. Probably this is because the base machine is shared with other tenants.

The rest of the performance jump is not as significant as when we switch from 4 CPU core to 8 CPU cores. Switching from 8 CPU cores to 16 CPU cores only improve approximately 0.33 times. Further increasing the number of CPU from 16 to 24 only improve 0.25 times. This could be caused by the encoder cannot take more benefit from more CPU core due to the algorithm design. The following pictures show that when we enable 24 CPU cores, The CPU Cores load was lower than 16 CPU cores machine. Starting from 16 CPU Cores, the CPU is not used 100%.

24 Core Machine
16 Cores Machine
8 Cores Machine

Conclusion

The High-CPU Google Compute engine can be used to perform accelerate transcoding task. However, this is only true when we use more than 8 CPU cores. Lower than that then it might be better just to use your own computer if you just striving for encoding speed. The price for a machine with more than 8 CPU cores is prohibitively expensive, not including the time and money necessary to transfer your file to the Google Cloud Engine. In conclusion? It is impractical. Don’t do it.

You should note that in this experiment, I used the same FFMPEG parameters for every machine. A more optimized parameter for multi-core transcoding might exist. Your miles might vary.


https://www.gilangcp.com/tutorial-encode-video-menjadi-h264-dengan-ffmpeg

Hilangkan kebiasaan menunda dengan tools gratis di bawah ini!

Semua orang pernah menunda, termasuk saya. Oleh karena itulah, saya mencari di internet, bagaimana sih caranya menghilangkan kebiasaan menunda, atau disebut juga procastination itu?

  1. Todoist https://todoist.com
    Teknik yang pertama adalah memecah pekerjaan yang besar menjadi pekerjaan-pekerjaan kecil yang bisa kamu lakukan hari ini. Teknik ini efektif karena biasanya penundaan terjadi karena terlalu banyaknya pekerjaan yang harus kamu lakukan, sehingga kamu bingung yang mana yang harus kamu lakukan terlebih dahulu. Todo list juga berperan sebagai agen “Gamification”. Kamu merasa telah melakukan sesuatu, setelah berhasil mengerjakan pekerjaan kecil. Tools yang saya sarankan adalah Todoist.Todoist bisa di unduh untuk Microsoft Windows, Mac, Android dan IoS.  Tools ini harganya gratis, Kamu bisa bayar untuk mendapatkan fitur seperti comment dan integrasi dengan google drive. Versi gratis tools ini sangat mumpuni. Setiap pekerjaan yang kamu buat, akan otomatis tersingkronisasi dengan handphone mu. Kamu juga akan mendapatkan reminder apabila pekerjaanmu sudah mendekati deadline. Tersedia juga berbagai template project siap guna!

  2. Be Focused https://xwavesoft.com/

    Be focused adalah program kecil untuk membantu kamu menerapkan metode pomodoro. Pomodoro adalah sebuah metode time management, dimana kamu “dipaksa” membagi waktu untuk mengerjakan tugas selama 25 menit. Kamu lalu diberikan kesempatan beristirahat selama 5 menit, atau setelah 4 set, kamu diberikan waktu  istirahat 15 menit. Kelebihan metode ini adalah kamu selalu merasa dikejar deadline. Pemecahan tugas yang besar menjadi tugas kecil juga membantu kamu mengurangi rasa stress akibat banyaknya tugas. Metode ini juga berati kamu mempunyai catatan pemakaian waktu. Setiap 25 menit yang kamu kerjakan, adalah murni apa yang harus kamu kerjakan. Tools ini tersedia untuk Microsoft Windows, Mac OS X dan Iphone. Untuk android, tersedia juga aplikasi lain yang bertujuan sama.
  3. Momentum http://Momentumdash.com

    Momentum adalah extension untuk Google chrome dan Mozilla Firefox. Internet penuh dengan distraksi. Dari mulai Facebook, Twitter hingga instagram menghantui kamu setiap kali kamu mau mencari hal yang relevan dengan tugasmu. Tujuan dari extension ini untuk mengingatkan kamu tugas yang harus kamu kerjakan saat ini. Extension ini memiliki integrasi dengan todoist. Sayangnya, kamu harus membayar untuk melakukan hal tersebut.

Hal terakhir yang adalah bagaimana mengintegrasikan semua tools diatas menjadi sebuah cara bekerja. Diagram dibawah ini menjelaskan apa yang saya lakukan dengan tools diatas:

Saya telah mempraktekan metode ini dan berhasil menghilangkan kebiasaan menunda. Semoga berhasil!

5 Webapp Gratis Untuk Manajemen Proyek

Pernahkah kamu bingung saat melakukan sebuah proyek,bagaimana caranya mengatur merencanakan dan menyimpan catatan tugas-tugas yang kamu dan timmu akan lakukan?

Lima webapps gratis dibawah ini akan membantu kamu melakukan tugas tersebut

1. Zoho Project

Harga : Gratis untuk 1 proyek, mulai dari 417.564 rupiah per bulan untuk fitur opsional
Fitur : 5/5
User Interface : 4/5

Secara pribadi, software ini adalah favorit saya. Fitur-fiturnya lengkap dan fleksibel! Dari mulai perencanaan harian menggunakan metode Kanban hingga perencanaan jangka panjang dengan dependensi tugas yang rumit menggunakan gantt chart. Tugas dapat dikatagorikan menggunakan apa yang mereka sebut sebagai task list, dan milestone. Milestone dapat digunakan untuk mengukur seberapa dekat kamu dengan selesainya proyek.

Tidak hanya itu, fitur kolaborasinya pun sangat mumpuni. Kamu bisa menambahkan rekan kerja atau teman kamu kedalam proyek, lalu menugaskan mereka ke salah satu tugas yang telah kamu buat. Tim kamu lalu dapat membuat komentar dan update status tugas tersebut. Tidak hanya itu, integrasi dengan kalendarnya sangat baik. Kamu bisa melakukan sinkronisasi kalendar pribadimu dengan tools ini. Apa yang dikerjakan tim kamu lalu bisa dilihat dalam bentuk statistik.

User interface webapp ini menurut saya cukup intuitif dan modern. walau terkadang, karena banyaknya fitur, sedikit sulit untuk melakukan navigasi ke fitur yang kita inginkan. Satu hal yang saya kurang suka juga, Kanban tidak di filter berdasarkan milestone. Kita harus melakukan filter untuk melihat tugas-tugas dalam satu milestone.

Kekurangan lain adalah harga. Walaupun seluruh fiturnya gratis, tapi hanya untuk 1 proyek saja. Kamu harus membayar sekitar 420.000 rupiah per bulan untuk proyek lainnya. Bayangkan kamu harus mengerjakan beberapa proyek dalam satu waktu.

Kesimpulannya, kalau kamu hanya butuh untuk satu proyek saja, Zoho Project adalah pilihan yang menurut saya paling oke. Fiturnya lengkap dan user interfacenya intuitif.

2. Taiga.io

Harga: gratis untuk 1 proyek, 85.000 rupiah perbulan
Fitur : 3/5
User interface: 5/5

Kalau kamu senang dengan metodologi agile / scrum, maka kamu akan jatuh cinta pada web app ini. Seluruh artifak scrum seperti backlog, epic, user stories bisa kamu masukan dan kelola dalam aplikasi ini.

Tampilan aplikasinya sangat menarik dan minimalis, sehingga memudahkan pengguna baru dalam menggunakan web app ini.  Harganya yang masuk akal juga bisa menjadi salah satu pertimbangan dalam menggunakan webapp ini apabila kamu butuh lebih dari 1 proyek.

Sayangnya, taiga.io ditujukan kepada pengguna metodologi agile, sehingga hanya memuat fitur-fitur yang berguna dalam methodologi tersebut. Contohnya adalah tidak adanya gantt chart dan perencanaan waktu terhadap tugas. Hal ini terjadi karena dalam methodologi agile, tim didorong untuk mengambil tugas yang ada tanpa di tuntut deadline. Tugas selesai ketika tugas selesai.

Kesimpulanya, Taiga.io cocok untuk kamu yang menggunakan metodologi agile.

3. Odoo

Harga: Gratis, 270.000 rupiah perbulan untuk fitur tambahan.
Fitur: 4/5
User Interface: 4/5

Hebatnya Odoo adalah dia open source. Jadi kalau kamu punya server sendiri, kamu bisa coba install di server kamu secara gratis.

Fitur yang dimiliki webapp ini cukup lengkap. Kamu bisa melakukan perencanaan, menggunakan kanban untuk melihat tugas dan lain sebagainya. Sayangnya, user interfacenya sedikit kuno, sehingga sedikit sulit untuk memasukan tugas. Kelemahan lainya adalah tidak adanya fitur milestone, sehinga menyulitkan kamu untuk membagi tugas.

Kesimpulan: Gunakan Odoo kalau kamu punya server sendiri dan tidak menggunakan milestone.

4. OpenProject

Harga : Gratis apabila host sendiri, Opensource. 5euro, minimum 25 orang.
Fitur : 5/5
User Interface : 5/5

OpenProject adalah salah satu webb app yang terlengkap. seluruh fitur yang kamu mau ada di sini, gratis pula! sayangnya kamu harus host sendiri aplikasi ini.

5. Trello

Harga: Gratis, berbayar untuk fitr tambahan
Fitur: 2/5
User Interface: 5/5

Sebenarnya trello bukan untuk melakukan manajemen proyek, tetapi kalau kamu cuma butuh papan kanban yang bisa kolaborasi, trello bisa menjadi pilihan. Sayangya, untuk bisa menggunakan fitur penting seperti menetapkan deadline ke tugas kamu harus membayar

Yak, itu adalah 5 webapp gratis untuk melakukan manajemen proyek. Semoga berguna!

Tutorial encode video menjadi h264 dengan FFmpeg

FFmpeg adalah program yang bertujuan untuk mengubah format video. Kelebihan FFmpeg selain dukungan format nya yang sangat luas, program ini juga mendukung proses encode dengan akselerasi hardware, membuat proses perubahan format video lebih cepat.  Sayangnya, program ini tidak memiliki GUI resmi, (Walaupun yang tidak resmi bisa di download disini: http://winff.org) dan memiliki banyak sekali opsi.

Tulisan ini akan membantu anda mengubah format video lewat CLI:

  1. Download versi terakhir disini: http://ffmpeg.zeranoe.com/builds/
  2. Extract zip ke desktop
  3. Buka command prompt
  4. Ketik
     cd Desktop/ffmpeg/bin

    (Sesuaikan ‘ffmpeg ‘ dengan nama folder hasil extract)

  5. Ketik :
    ffmpeg -h

    lalu klik enter. Apabila hasil output seperti dibawah, maka anda siap menggunakan program ini. Apabila belum ,coba cek nama folder terextract.

  6. Ketik
    ffmpeg -i 
    

    lalu klik spasi dan drag video yang mau di ubah formatnya

  7. Pilih format output audio dan video
    -c:v h264_qsv -c:a aac
    

    -c:v berarti codec:video , -c:a berarti codec audio. h264_qsv adalah codec h264 dengan akselerasi Intel QSV. Tidak semua prosesor mendukung QSV! kamu bisa melihat apakah computer kamu mendukung akselerasi hardware disini: http://ark.intel.com/. Apabila kamu memiliki GPU NVidia, kamu bisa mencoba ubah codec videonya menjadi h264_nvenc. Apabila computer kamu tidak mendukung akselerasi sama sekali, atau kamu membutuhkan kualitas gambar terbaik, kamu bisa gunakan libx264. Kamu juga bias memilih codec lain. daftar codec yang bisa dipilih bisa dilihat disini: https://www.ffmpeg.org/ffmpeg-codecs.html#Video-Encoders . AAC adalah format audio yang popular, dan memiliki kualitas suara lebih baik dari MP3.Daftar codec audio bisa dilihat disini: https://www.ffmpeg.org/ffmpeg-codecs.html#Audio-Encoders

  8. Set kualitas video yang diinginkan,
    -profile:v high -preset:v medium

    Setting ini sudah cukup baik sehingga anda tidak bisa membedakan video sebelum di encode dan setelah di encode. Silahkan lihat daftar setting kualitas video disini : https://trac.ffmpeg.org/wiki/Encode/H.264

  9. Set lokasi output.
    output.mp4

    Selain mp4, kamu bisa juga menggunakan .mkv maupun . webm

  10. Klik enter untuk memulai encoding.
    ffmpeg -i source.avi -c:v h264_qsv -c:a aac -profile:v high -preset:v medium output.mp4

    Selamat, kamu berhasil mengubah format video menggunakan FFmpeg!

Tutorial Database MySQL dengan PHP (Bagian 2)

Kali ini saya mau menjelaskan bagaimana caranya melakukan select data dari database lalu menampilkan hasilnya menjadi table menggunakan PHP. Sebelum menjalankan tutorial ini, ada baiknya anda melakukan tutorial bagian 1 (https://www.gilangcp.com/2017/02/09/tutorial-mysql-dengan-php-bagian-1/). Hal ini perlu dilakukan karena disitu dijelaskan cara membuat database dan mengisi data contoh yang akan digunakan di tutorial ini.

Selamat mencoba!

1. Buka kembali file tutorial.php yang anda buat di tutorial sebelumnya

2. Ketik baris kode dibawah setelah  “?>” pada line 25.

<?php 
//Persiapkan query yang ingin dilakukan
$sql = "SELECT Nama FROM table_test";

//Lakukan request ke server MySQL Tampung hasilnya di variabel $result
$result = $conn->query($sql);
?>

Baris code ini di gunakan untuk melakukan query ke database.

SELECT Nama FROM table_test

adalah perintah SQL yang dijalankan. Kamu bisa ubah ini menjadi query yang kamu mau.

3. Saatnya untuk menampilkan data menjadi tabel! ketik baris dibawah ini setelah “?>” yang terakhir:

<table>

  <!-- Digunakan untuk menampilkan judul kolom-->
  <!-- tr digunakan untuk merepresentasikan 1 baris-->
  <!-- td digunakan untuk merepresentasikan kolom-->
  <tr>
    <td>Nama</td> <!-- Kita hanya memiliki 1 kolom yang ingin ditampilkan -->
  </tr>

  <!-- Iterasi tiap baris data yang di ambil dari database menjadi baris di database-->
  <?php while($row = $result->fetch_assoc()):?>

    <tr> 
      <!-- tanda <?= digunakan untuk print variable php-->
      <!-- Kita mau print kolom "Nama" dari database-->
      <td><?=$row["Nama"]?></td> 
    </tr>
  <?php endwhile;?>
</table>

 

4. Tutup koneksi MySQL

<?php $conn->close()?>

5. Test hasilnya dengan mengetik http://localhost/tutorial.php

Apabila keluar hasil seperti diatas, maka selamat! anda telah berhasil melakukan query select di PHP dengan database MySQL! apabila belum, coba cek kode lengkapnya disini:
https://gist.github.com/gilangcp/032c275c7b6cd59233396b25bc1ca604

Link bacaan lanjutan:

http://www.tutorialrepublic.com/php-tutorial/php-mysql-select-query.php
http://codular.com/php-mysqli
https://www.binpress.com/tutorial/using-php-with-mysql-the-right-way/17
http://www.phptuts.nl/view/26/

Nantikan tutorial ketiga, mengenai Insert data ke dalam database!

 

 

 

Tutorial Database MySQL dengan PHP (Bagian 1)

PHP adalah salah satu bahasa pemrograman web yang paling umum di internet. Hampir semua hosting mendukung PHP. Tetapi, bagaimana cara mengintegrasikannya dengan MySQL, Sebuah server database yang sama populernya dengan PHP? Seri tutorial ini akan membantu anda melakukan hal tersebut.

Tutorial ini akan dibagi menjadi 3 bagian. Bagian pertama (tutorial ini) berisi bagaimana caranya membuat database sederhana menggunakan phpMyAdmin, lalu membuat objek PHP yang merepresentasikan koneksi Mysql. Bagian Kedua akan berfokus pada view data yang ada di MySQL menggunakan PHP, sedangkan bagian ketiga akan membahas bagaimana caranya melakukan edit dan delete data.

Selamat menikmati tutorialnya!

Membuat Database menggunakan phpMyAdmin :

1.Klik New pada phpMyAdmin, Saya contohkan dengan membuat database dengan nama ‘Test”, isi name dengan “Test”, lalu klik tombol create.

2. Buat table pada database tersebut dengan nama test_table dan 2 kolom:

3. Berikan nama “Id” Pada baris pertama, klik CheckBox A_I (Auto Increment), berikan nama “Nama” pada baris kedua, Ubah type menjadi varchar, ubah length menjadi 255.

4. Tambahkan data baru dengan cara klik table tersebut lalu klik tab SQL, dan masukan perintah SQL dibawah lalu klik tombol Go:

INSERT INTO `table_test`(`Nama`) VALUES ("Mega Kusuma");
INSERT INTO `table_test`(`Nama`) VALUES ("Putu Sri");
INSERT INTO `table_test`(`Nama`) VALUES ("Sinta Mawar");
INSERT INTO `table_test`(`Nama`) VALUES ("Eko Utari");
INSERT INTO `table_test`(`Nama`) VALUES ("Batario Nirmala");
INSERT INTO `table_test`(`Nama`) VALUES ("Melati Cahyo");
INSERT INTO `table_test`(`Nama`) VALUES ("Tirta Cahya");

Selamat! anda telah berhasil membuat database sederhana dengan phpMyAdmin!

 

Koneksikan MySQL tersebut dengan PHP:

1.  Buat file php baru pada folder htdocs anda, saya menggunakan nama tutorial.php

2. Ketik baris berikut pada file yang baru anda buat

<?php

// gunakan localhost apabila MySQL terletak di komputer yang sama
$namaserver = "localhost"; 
$username = "username"; //ini adalah username MySQL anda
$password = "password"; //ini adalah password MySQL anda

//ini adalah nama database yang anda buat pada step sebelumbya.
//Dalam hal ini maka nama databasenya adalah Test
$namadatabase = "test";

// Memulai Koneksi
$conn = new mysqli($namaserver, $username, $password);

// Cek apakah koneksi ke mysql berhasil
if ($conn->connect_error) {
 die("Koneksi gagal: " . $conn->connect_error);
} 

//Cek apakah bisa terkoneksi dengan database
$selected = mysqli_select_db($conn,$namadatabase) 
 or die("Database tidak ditemukan");

echo "Koneksi sukses";
?>

3. Buka tutorial.php pada browser. Pada komputer saya, http://127.0.0.1/tutorial.php. Apabila terprint tulisan “Koneksi sukses”, maka selamat, anda sudah berhasil mengkoneksikan MySql dengan aplikasi PHP anda!

Berikut adalah bahan bacaan lebih lanjut mengenai topik ini:

https://www.siteground.com/tutorials/php-mysql/database_connection.htm
http://webcheatsheet.com/php/connect_mysql_database.php
https://www.tutorialspoint.com/mysql/mysql-connection.htm
http://www.w3schools.com/php/php_mysql_connect.asp
https://coolestguidesontheplanet.com/how-to-connect-to-a-mysql-database-with-php/

Bagian 2 akan membahas bagaimana melakukan query data menggunakan koneksi yang dibahas pada tutorial ini. Nantikan!

Update: baca bagian ke-2 disini : https://www.gilangcp.com/2017/02/17/tutorial-database-mysql-select/

Instalasi bahasa pemrograman scala, Windows 10

Scala adalah sebuah bahasa pemrograman yang menganut paham pemrograman fungsional. Bahasa ini berjalan pada Java Virtual Machine, sehingga bisa dengan mudah menggunakan library – library yang tersedia pada bahasa pemrograman Java. Artikel ini berisi tutorial bagaimana melakukan instalasi dan menjalankan program scala pada windows 10.

Bahasa pemrograman ini umumnya digunakan untuk menganalisa Big Data, Cluster Computing, dan tugas-tugas lainnya yang berhubungan dengan Concurrency dan Distributed Computing.

Tutorial ini akan menjelaskan bagaimana caranya menginstall Bahasa pemrograman Scala pada komputer dengan sistem operasi Windows 10.

Selamat mencoba!

1. Pastikan anda terkoneksi dengan internet.
2.Buka Command Prompt dari start menu, dengan mengetik cmd, lalu klik kanan dan  run as administrator

capture

3. ketik cmd lalu tekan tombol enter

capture

4. Install Chocolatey, Chocolatey adalah manajer aplikasi untuk windows. Copy dan paste baris kode dibawah ke command prompt, lalu klik enter

@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"

capture

5. Pastikan Choco sudah terinstall dengan benar dengan cara mengetik

choco --version

Pada Command Prompt. Apabila sudah seperti screenshot dibawah, maka anda sudah berhasil menginstall Choco.

capture

6. Install Scala dengan mengetik:

choco install scala

7. Anda akan ditanyakan beberapa kali apakah ingin melanjutkan menginstall. Ketik y dan tekan tombol enter.

capture

8. Test Apakah scala sudah terinstall dengan benar dengan mengetik scala, lalu menekan tombol enter. Apabila terjadi kesalahan “not recognized as an internal or external command”, coba tutup command prompt lalu buka kembali.

capture

10. Apabila sudah seperti screenshot diatas, Maka selamat! anda sudah berhasil melakukan instalasi Scala pada komputer anda.

Selanjutnya anda bisa membaca dokumentasi dan tutorial lain mengenai topik ini menggunakan link dibawah:

https://www.scala-lang.org/documentation/
https://www.tutorialspoint.com/scala/
https://twitter.github.io/scala_school/

Selamat mencoba!

Kematian, dari sudut pandang seorang nihilis

Sebagai seorang agnostik, banyak yang bertanya, kemana saya akan pergi setelah meninggal? Apakah kamu tidak takut perdengan kematian?

Bagi saya, sebelum menjawab pertanyaan itu, saya harus menjawab pertanyaan lain: Kenapa saya harus pergi ketempat lain, setelah saya meninggal? 

Bagi saya, dengan berpikiran bahwa saya akan pergi ke tempat lain, berarti saya mengimplikasikan bahwa diri saya itu abadi.

Tapi tidak ada yang abadi di dunia ini.

Semua benda yang tercipta pasti akan hancur.

Kita bisa mencoba menganalogikan kematian dengan batu.

Batu
Batu

Kita namakan sebuah batu [A].

[A] tentu saja memiliki berbagai macam ciri, contoh [A] berbentuk bulat, kasar, memiliki beberapa lubang, posisi atom, dan lain-lain

Pukul [A] tersebut dengan palu, maka [A] akan hancur menjadi pasir.

Apapun caranya, pasir tersebut tidak akan bisa menjadi [A] lagi, dimana posisi setiap atom, lubang dan bentuk sama.

Yang terjadi adalah, konsep, ide, aturan, atribut, properti, dasar yang menjadikan batu tersebut [A] sudah musnah.

Saya berpikir bahwa hal yang sama terjadi ketika saya mati.

Saya akan hilang, musnah, hancur, tidak ada, kosong. 

Illustrasi kosong
Illustrasi, kekosongan yang sesungguhnya tidak berwarna

Mungkin sulit membayangkan bagaimana rasanya tidak ada.

Tapi satu hal yang pasti, saya tidak bisa merasakan apa-apa setelah mati. Tidak ada lagi rasa tidak adalagi rasa kesepian, sedih, kesal, ketakutan, bahagia. Tidak bisa mengingat apapun.

Mungkin kamu bisa mencicipi sedikit rasanya kematian yang saya deskripsikan dengan mengingat apa yang terjadi sebelum lahir. Kira-kira seperti itu rasanya, kosong karena tidak bisa mengingat apa-apa.

Bagi saya, Manusia terlalu insignifikan untuk hidup abadi. Manusia terlalu kecil untuk memiliki arti atau tujuan tertentu.

Mungkin ada yang bertanya lagi:

Untuk apa hidup berbuat baik kalau pada akhirnya mati dan menjadi tidak ada? tidak kah pemikiran itu mengimplikasikan bahwa hidup ini menjadi tidak ada maknanya?

Bagi saya, karena hidup ini kosong, tidak ada maknanya, Maka saya bisa isi kekosongan itu dengan apapun yang saya mau.

Kenapa saya berbuat baik, karena dari hati saya yang paling dalam, saya ingin berbuat baik. Saya berbuat baik bukan karena takut hukuman atau larangan.

Saya berbuat baik karena ingin mengisi kekosongan makna hidup tersebut dengan kebaikan.

Server MQTT, Instalasi dan contoh penggunaan untuk IOT

Lanjutan dari artikel sebelumnya, tulisan ini berisi cara instalasi dan contoh sederhana penggunaan server MQTT.

Sebelum melanjutkan, anda sudah harus memiliki server dengan sistem operasi linux. Apabila anda belum punya, anda bisa coba dengan virtualbox. Sistem operasi yang saya gunakan adalah Ubuntu 16.04 yang bisa di unduh disini: http://www.ubuntu.com/download

Berikut tutorialnya:
1. Tambahkan PPA Mosquitto

sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update

2. Install Mosquitto

Sudo apt install mosquitto

Untuk mengetes, saya akan menggunakan Node.JS sebagai client MQTT.

1. Install Node.JS

sudo apt install nodejs
sudo apt install npm

2. Install requirement MQTT clientside untuk node.JS

npm install mqtt --save

3. Buat file baru dengan mengetik

touch testmqtt.js
nano testmqtt.js

4. Masukan baris code dibawah

var mqtt    = require('mqtt');
var client  = mqtt.connect('mqtt://localhost');

client.on('connect', function () {
  client.subscribe('contohtopik');
  client.publish('contohtopik', 'Halo dunia');
});

client.on('message', function (topic, message) {
  console.log(message.toString());
  client.end();
});

5. Quit nano dengan ctrl+o, lalu ctrl+x

6. Jalankan client dengan mengetik

nodejs testmqtt.js

Output program
Output program

Output dari program client diatas seharusnya seperti ini:

Apabila muncul seperti baris diatas, maka selamat ! anda telah berhasil menginstall mosquitto, server MQTT !

Selanjutnya mari kita membedah sedikit client yang saya berikan.

var client  = mqtt.connect('mqtt://localhost');

Digunakan untuk mengkoneksikan client, dalam hal ini program node.js ke server MQTT. apabila server MQTT dan client dalam komputer yang berbeda, silahkan ubah localhost menjadi IP dimana server MQTT berada.

client.on('connect', function () {
  client.subscribe('contohtopik');
  client.publish('contohtopik', 'Halo dunia');
});

akan otomatis dijalankan, ketika client berhasil terkoneksi ke server MQTT, dalam hal ini melakukan dua hal, yang pertama:

  client.subscribe('contohtopik');

Fungsi ini memberitahu server MQTT , bahwa program ini ingin menerima semua pesan dalam topik ‘contohtopik’

  client.publish('contohtopik', 'Halo dunia');

Fungsi ini memberitahu server MQTT bahwa program ini akan mengirimkan pesan ‘Halo dunia’ ke seluruh pengguna server MQTT yang melakukan subscribe ke topik ‘contohtopik’

client.on('message', function (topic, message) {
  console.log(message.toString());
  client.end();
});

Baris ini digunakan untuk melakukan sesuatu terhadap pesan-pesan yang diterima oleh client ini setelah di subscribe. message adalah pesannya, sementara topic adalah topik asal pesan tersebut. Pada program ini, yang dilakukan adalah mengeprint pesan ke console.

Alur lengkap program adalah:
1. program mengkoneksikan diri ke server MQTT
2. program akan subscribe ke topik ‘contohtopik’
3. program mengirimkan ‘Halo dunia’ ke topik ‘contohtopik’
4. server MQTT meneruskan pesan ‘Halo dunia’ ke seluruh subscriber topik.
5. program menerima pesan baru
6. program memprint pesan yang diterima
7. Halo dunia dimunculkan ke console.

Yang perlu di note adalah, client MQTT ini tidak terbatas hanya di Node.JS saja. Anda bisa menggunakan bahasa pemrograman apapun seperti PHP, C , C++ , Java di platform apapun misalnya web, desktop, mobile dan embedded  seperti arduino dan ESP 8266.   Hanya saja, library client yang digunakan berbeda dan memiliki cara pemrograman yang  berbeda juga, walaupun konsep dasar publish-subscribenya tetap sama.

Berikut adalah beberapa library dalam berbagai bahasa pemrogramman, dan biasanya sudah ada tutorial penggunaanya di link tersebut.

PHP : http://www.hivemq.com/blog/mqtt-client-library-encyclopedia-mosquitto-php
C# : https://github.com/ppatierno/m2mqtt
Java : https://github.com/fusesource/mqtt-client
C/C++: https://eclipse.org/paho/
Ruby : https://github.com/njh/ruby-mqtt
Python: https://pypi.python.org/pypi/paho-mqtt/1.1

Selamat mencoba 🙂

Budaya tidak seharusnya di lestarikan!

Kebudayaan tidak sepatutnya dilestarikan, Banyak alasan untuk tidak melestarikan budaya. salah satunya tidak sesuai dengan definisi kebudayaan itu sendiri.

Sebelum saya mengemukakan pendapat saya lebih lanjut, sebaiknya saya memulai dengan mendefinisikan terlebih dahulu apa yang dimaksud dengan melestarikan. Menurut kamus besar bahasa indonesia (http://kbbi.web.id/) melestarikan berarti :

menjadikan (membiarkan) tetap tidak berubah; membiarkan tetap seperti keadaan semula; mempertahankan kelangsungan (hidup dan
sebagainya)

Budaya itu pada KBBI memiliki arti

pikiran; akal budi: hasil –;2 adat istiadat: menyelidiki bahasa dan –;3 sesuatu mengenai kebudayaan yang sudah berkembang (beradab, maju): jiwa yang –;4cak sesuatu yang sudah menjadi kebiasaan yang sudah sukar diubah;

Sedangkan adat istiadat :

tata kelakuan yang kekal dan turun-temurun dari generasi satu ke generasi lain sebagai warisan sehingga kuat integrasinya dengan pola perilaku masyarakat;

Masyarakat sendiri memiliki arti:

sejumlah manusia dalam arti seluas-luasnya dan terikat oleh suatu kebudayaan yang mereka anggap sama

Kita bisa simpulkan dari beberapa definisi di atas bahwa melestarikan budaya memiliki arti menjadikan pemikiran, akal budi, adat istiadat tetap tidak berubah, seperti semula.

Lalu dimana masalahnya? Kenapa saya berpendapat budaya tidak seharusnya di lestarikan? Bagi saya, masalahnya terletak pada kata “tidak berubah”, padahal masyarakat yang di definisikan berdasarkan kebudayaan, selalu berubah seiring dengan jalannya waktu, dan waktu tidak pernah berhenti berjalan.

Menurut saya, melestarikan budaya berarti menolak masyarakat itu sendiri. Kebudayaan adalah sebuah sifat yang muncul ketika sekumpulan individu mengelompokan diri, Bukan sebuah sifat yang dimiliki seorang individu saja. Hal ini berimplikasi, bukan seorang individu, bukan seorang pemimpin, bukan pula sebuah organisasi mampu menentukan kebudayaan dalam sebuah kelompok masyarakat. Masyarakat tersebutlah yang otomatis, alamiah menentukan kebudayaan yang sesuai. Budaya ditentukan oleh masyarakat, bukan budaya yang menentukan masyarakat. Melestarikan budaya berarti menolak perubahaan dalam masyarakat, menolak sifat alamiah masyarakat, yang artinya menolak masyarakat itu sendiri.

Perubahan ini tidak bisa di hindari. Apabila kebudayaan dipaksakan dilestarikan. Yang terjadi adalah hal tersebut akan dianggap membosankan, tidak sesuai dengan jaman dan pada akhirnya pasti akan gagal dilestarikan tergantikan dengan budaya-budaya lain yang sesuai dengan waktu.

Bagi saya, yang perlu kita lakukan bukanlah melestarikan kebudayaan, tetapi mengembangkan budaya yang sudah ada. dengan cara ini,kebudayaan tetap bisa relevan dengan perkembangan jaman. Menurut saya, ada beberapa cara mengembangkan kebudayaan:

1. Menambahkan kebudayaan yang ada dengan sesuatu yang original.
Sesuatu yang baru, kreatif dan inovatif akan selalu di apresiasi.

2. Mengamati, Membandingkan perbedaan masing-masing kebudayaan-kebudayaan. Efeknya, kita bisa tahu dimana kelebihan dan kekurangan setiap kebudayaan yang ada.

3. Meniru, kebudayaan lain yang memiliki efek positif. Jangan malu meniru, apabila hal tersebut baik.

4. Memodifikasi kebudayaan yang di tiru, dicampurkan dengan kebudayaan milik sendiri yang positif, sehingga kebudayaan tersebut semakin positif.

5. Menghilangkan kebudayaan yang negatif. Tidak ada kebudayaan yang sempurna, Bisa dikatakan sebagai chauvinisme, apabila terlalu bangga dengan kebudayaan kita sendiri sehingga buta terhadap kekurangan-kekurangan yang di depan mata.

Akhir kata, menurut saya, satu-satunya kebudayaan yang perlu di lestarikan adalah budaya untuk berubah, karena hanya perubahan yang abadi seiring jalannya waktu. Mari jadikan perubahan sebagai identitas diri!