Sabtu, 28 November 2015

Sumbu

Ok temen - temen para pembaca blogku ini, kali ini saya akan menjelaskan tentang FUSE di linux. Daripada penasaran, ayo kita langsung bahas.

Apa itu FUSE? FUSE merupakan singkatan dari Filesystem in Userspace. Pertama, arti dari filesystem adalah sebuah metode pemberian nama pada file dan merupakan cara untuk menempatkannya ke dalam sebuah media penyimpan, termasuk juga penempatan file pada struktur direktori. Singkatnya FUSE adalah modul yang mengijinkan pengguna untuk membuat file system tanpa perlu memodifikasi kode pada kernel. Mungkin dari penjelasannya kurang jelas apa sih FUSE itu dan implementasinya seperti apa sih, biar lebih jelas kita masuk ke kodingannya

Kodingan FUSE seperti program lainnya pertama dimulai dengan library - library. Lalu kita menginisialisasi direktori path yang akan jadi rujukan oleh filesystem yang kita buat. Jadi, filesystem yang nanti akan dibuat oleh program FUSE merupakan sebuah folder yang isinya adalah isi dari folder lain yang ada di memori komputer kita. Maka dari itu dibutuh kan direktori acuan dari FUSE yang akan kita buat nantinya.


Lalu, untuk sisanya, FUSE berisi fungsi - fungsi untuk menjalankan perintah filesystem seperti open, chmod, rename, read, write, dan lain - lain. Dan tidak perlu bingung tentang fungsi - fungsinya, karena bisa dicari sendiri di internet. Namun yang dari internet merupakan fungsi sederhana, bila ingin melakukan yang lebih maka harus dimodifikasi lagi fungsi yang ada. Contoh fungsi - fungsi yang dijalankan di program FUSE adalah:


Gambar diatas ini merupakan beberapa fungsi yang ada di dalam FUSE. Ada fungsi yang di beri tanda command dan ada yang tidak. Kenapa? Karena tidak semua fungsi akan kita pakai, tergantung kebutuhan kita. Jadi fungsi - fungsi yang tidak mesti kita pakai, bisa kita beri command saja. Namun jika kita membutuhkan, kita bisa mencari fungsinya di internat dan menghilangkan command untuk fungsi yang ingin kita gunakan.

Fungsi mainnya sangatlah singkat, yaitu:

 Contoh salah satu fungsi FUSE seperti:

Fungsi readdir ini adalah untuk melihat folder apa saja yang ada di FUSE yang telah kita buat atau bila diterminal adalah perintah ls. Fungsi diatas masih murni dan belum dimodifikasi untuk situasi tertentu.

  

Untuk fungsi open ini, telah saya modifikasi terlebih dahulu. Jadi fungsi ini berfung si untuk membuat file backup dengan format <namafile> <ekstensi> .bak setiap kali kita membuka file yang ada di folder FUSE yang telah kita buat. Nah coba kita lihat alur kerja kodingannya. Pertama nama file dan ekstensi dari file yang akan di buat backup filenya disimpan dan di read isinya, setelah itu nama backup filenya juga dibuat, itu terjadi pada kodingan dari baris pertama sampai sebelum if. Lalu setelah itu fungsi akan mengecek apakah sudah ada file backup dengan nama yang sama, jika sama maka akan di remove. Jika tidak ada nama yang sama, maka fungsi akan menulis kembali apa yang telah diread sebelumnya dan menaruhnya ke file backup tersebut. Setelah file backup terbentuk, fungsi akan mengubah hak akses file backup menjadi hanya bisa dibuka tanpa bisa merubah isinya, itu terjadi di kodingan dimana ada chmod 444. Setelah selesai, file yang dibaca dan dibuat diclose. Nah yang menarik adalah sebenarnya, fungsi murni dari fungsi open adalah di 6 baris terakhir.

Mungkin sekian dulu aja yang bisa saya sampaikan dan berikan disini, mungkin cuma sedikit tapi semoga bermanfaat buat kalian. Jangan lupa berikan komentar kalian dibawah. Terima kasih, dan sampai jumpa ^^


Jumat, 06 November 2015

Life on a Thread

Halo temen - temen sekalian, balik lagi di blog saya. Kali ini, saya akan membahas tentang sesuatu yang bernama thread. Walaupun judulnya seperti itu, tapi sebenarnya itu biar keren dan menarik wkwkwk. Padahal kita akan membahas thread dalam komputer.

Jadi di dalam komputer, ada yang dinamakan thread dalam komputer. Thread ini digunakan untuk menjalankan dua aktivitas dalam waktu yang bersamaan. Metode thread biasanya digunakan pada web browser, music player, dan aplikasi - aplikasi lainnya. Untuk memperjelas, saya akan mencontohkannya dalam linux. Kali ini, saya akan membuat sebuah music player yang dijalankan menggunakan terminal. Untuk musix player ini, sebenarnya saya tidak membuatnya. Saya hanya menggunakan music player yang ada, yang saya gunakan dikodingan ini adalah mpg123, dan menjalankannya melalui terminal.

Jadi, music player yang akan saya buat memimliki beberapa spesifikasi yaitu:
  1. Jika kita menginputkan "help" maka akan keluar semua fitur - fitur yang bisa dilakukan oleh music player ini
  2. Jika kita menginputkan "list" maka terminal akan menampilkan semua lagu yang ada di dalam folder
  3. Jika kita menginputkan "play" maka kita bisa memilih lagu dari list dan memainkan lagu dengan nama file seperti yang diinputkan
  4. Jika kita menginputkan "pause" maka kita akan mempause lagu yang sedang dimainkan setelah jeda beberapa detik. Yang detiknya kita inputkan sebelumnya
  5. Jika kita menginputkan "continue" maka lagu yang sedang dipause akan dimainkan kembali setelah jeda beberapa detik. Yang detiknya kita inputkan terlebih dahulu
  6. Jika kita menginputkan "stop" maka lagu yang akan dimainkan dihentikan setelah jeda beberapa detik. Yang detiknya kita inputkan terlebih dahulu
  7. Jika kita menginputkan "exit" maka program music player akan dihentikan
Yang pertama kali kita lakukan untuk mengimplementasikan thread pastinya membuat thread itu sendiri. Inisialisasi dilakukan seperti ini:


Pertama thread diinisialisasi dengan fungsi diatas. Thread diinisialisasi di baris sebelum void. Thread yang saya buat pada kodingan ini berbentuk array, sehingga saya bisa menggunakan thread lebih dari satu. Array yang saya inisialisasi kan didalam fungsi void diatas adalah array untuk menyambungkan string agar nantinya bisa dieksekusi dengan menggunakan fungsi system. Lalu bila kita perhatikan, ada if yang didalamnya memiliki beberapa command. If tersebut digunakan untuk menjalankan thread pada array ke - 0. Fungsi tersebut berfungsi sebagai thread yang akan menjalankan lagu yang kita pilih namanya terlebih dahulu.


Setelah selesai dengan inisialisasi thread, maka kita langsung masuk ke main. Pertama terminal akan meminta inputan perintah seperti yang sudah saya sebutkan sebelumnya. Program ini akan terus berjalan selama belum diinputkan perintah "exit" maka while yang ada memiliki kondisi while(1). Lalu if yang pertama merupakan if untuk menjalankan perintah help. Untuk perintah ini tinggal kita tampilkan perintah - perintah apa saja yang bisa diinputkan.


If diatas merupakan fungsi untuk menjalankan perintah "list". Fungsi ini juga sederhana, tinggal kita menampilkan semua file yang memiliki extension file .mp3. Caranya dengan menggunakan perintah system("ls | grep .mp3"). Seperti yang sudah kita pakai sebelumnya, ls merupakan fungsi untuk menampilkan semua file yang ada pada direktori folder yang sedang kita buka, lalu grep merupakan fungsi untuk mengambil string tertentu yang pada kodingan diatas kita mengambil string yang memiliki kata .mp3. Jika kita mengambil semua string yang ada kata .mp3 maka kita akan mendapatkan lagu - lagu yang ada di folder tersebut.


If diatas merupakan fungsi untuk menjalankan perintah play. Seperti yang sudah saya jelaskan saat menginisialisasikan, thread pada kodingan ini digunakan untuk memainkan lagu. Maka dari itu, di main tinggal kita panggil threadnya. Kenapa disitu ada while? Karena terkadang pembuatan thread bisa error dan thread tidak terbentuk. Maka dari itu, saya membuat while agar thread akan terus dibuat jika thread gagal dibuat. Jika sudah terbuat, maka akan keluar dari while sehingga tidak terus menerus membuat thread.


Fungsi diatas berfungsi untuk menjalankan perintah pause. Pertama fungsi ini mengscan angka yang akan dijadikan lamanya detik untuk delay. Setelah itu, dijalankan sleep() sejumlah detik yang sudah diinputkan. Sleep digunakan untuk melakukan delay, jadi selama detik yang diinputkan, komputer diam dan menunggu. Setelah itu komputer menjalankan system("pkill -STOP mp123"). Fungsi ini digunakan untuk mempause lagu yang dijalankan di mpg123.


Setelah pause, ada fitur continue yang bisa kita lihat diatas. Sama seperti pause, kita pertama menginputkan detik dari delay. Setelah delay, kita menjalan kan system("pkill -CONT mpg123") untuk melanjutkan lagu yang sebelumya telah dipause.


Sama seperti pause dan continue, stop juga pertama menginputkan detik untuk delaynya. Lalu setelah delay berlangsung maka perintah system("pkill mpg123") dijalankan. Perintah ini berfungsi untuk menclose mpg123 dari process sehingga lagu yang dimainkan ikut berhenti


Dan yang terakhir ada perintah exit. Untuk perintah ini tinggal kita menjalankan break untuk keluar dari while yang pertama. Bila kita sudah keluar, otomatis programnya akan selesai dijalankan. Lalu bila kalian perhatikan, setelah else if, diluarnya, ada perintah tambahan lagi untuk mengscan perintah baru. Adanya baris itu untuk menginputkan command selanjutnya bila kita tidak menginputkan exit. 

Yap, segitu saja yang saya punya. Mungkin gak banyak tapi saya harap bisa bermanfaat buat kalian para pembaca. Jangan lupa tuliskan komentar agar saya bisa tau dimana kesalah - kesalahan dalam blog ini dan dapat membuatnya lebih baik lagi. Terima kasih, sampai jumpa