Jumat, 27 November 2015

FUSE

  1. File system adalah struktur pokok dari komputer yang digunakan untuk mengorganisir data.
  2. Tipe dari file system:
  • Disk file system
                        File system yang digunakan pada disk.
                        Contoh: FAT, Ext, NTFS.
  • Flash file system
                        File system yang digunakan pada flash memory.
                        Contoh: JFFS, YAFFS.
  • Network file system
                        File system yang bekerja sebagai client.
                        Contoh: client untuk ASF, NFS, SMB protocol.
  • Database file system
            File sistem untuk menyimpan file sebagai database.
                        Contoh: IBM DB2.
  • Tape file system
                        File system yang digunakan pada tape.
                        Contoh: LTFS.
3. Virtual file system adalah suatu lapisan perangkat lunak dalam kernel yang menyediakan interface sistem berkas untuk program userspace dan menangani semua system call yang berhubungan dengan suatu system berkas di bawahnya. Fungsi dari VFS adalah me-mediasi dari perbedaan sistem berkas yang digunakan oleh beberapa sistem berkas, misal windows, mac os, linux. Dengan VFS, suatu aplikasi dapat mengakses berkas dari sistem berkas yang berbeda.

4.
  • Dentry atau Directory Entry merupakan suatu struktur data yang bertugas sebagai penerjemah dari suatu nama berkas ke inode-nya. disimpan dalam cache di vfs. isi dari dentry adalah name, use of count,chains for lots of list, pointer to parent dentry, list head of childre, pointer to inode. Operasi pada dentry d_compare, d_release, dan d_delete.
           
  • inode : it stands for index node. semua objek yang ada di dalam file system diwakili oleh sebuah index (inode). Inode merupakan identifier dari file dan atribut. Inode berisi struktur data pada file system yang menyimpan informasi dasar tentang sebuah file, direktori, atau obke file system yang lain.

  • superblock : berisi informasi tentang file system seperti file system type, status, size, dan informasi tentang struktu metadata. jikalau inode berisi file attribute, superblock berisi file system attribute. superblock merepresentasikan setiap sistem berkas yang di-mount.

5. Fuse (Filesystem in Userspace) adalah sebuah kerangka sistem berkas pada area pengguna. Fuse terdiri dari modul kernel, pustaka pada area pengguna, dan sebuah utilitas untuk melakukan proses mount (fusermount). fuse memungkinkan pengguna untuk membuat filesystemnya sendiri tanpa mengubah kernel [to make their filesystem theirselves without change the kernel].


6.  Cara Kerja FUSE:
·         fuse_main() (lib/helper.c) = program user memanggil fungsi fuse_main() kemudian fungsi fuse_mount() dipanggil. Lalu memanggil fuse_new() untuk memesan ruang untuk fuse file system data. lalu fuse_loop dipanggil untuk memproses session.
·         fuse_mount() (lib/mount.c) = menciptakan UNIX domain socket, lalu membuat child process yang menjalankan fusermount.
·         fusermount() (util/fusermount.c) = untuk mengecek apakah modul FUSE sudah di load. then open /dev/fuse dan mengirim file handle melalu UNIX domain socket kembali ke fungsi fuse_mount()
·         fuse_new() (lib/fuse.c) = create struktur data yang besiri ruang yang digunakan untuk menyimpan data file system
·         fuse_loop() (lib/fuse.c) = membaca file system calls dari /dev/fuse

7. Keuntungan menggunakan FUSE:
  • Pengguna biasa dapat menciptakan file system mereka sendiri dan memodifikasi tanpa mengubah mode kernel.
  • Kernel tidak akan berpengaruh saat terjadi crash.
  • Dapat dilakukan load dan mount dengan user biasa.
  • Dapat menggunakan lebih banyak library.
  • Kode dari filesystem yang mengalami hang dapat dimatikan dengan mudah.


Kamis, 05 November 2015

Cara Memutar Musik Anti Mainstream dengan Thread

Kali ini saya akan membahas memutar musik dengan thread. sebeleumnya apa itu thread? thread adalah bagian kecil dari suatu progres yang bisa dijadwalkan oleh sistem operasi.

Thread juga disebut  sebagai proses ringan (lightweight).
a. Single Threading
   Adalah sebuah proses yang hanya memiliki satu thread yang berjalan . Biasanya fungsi thread ini digunakan sebagai penggendali jalannya proses.

b. Multi Thread
   Adalah proses yang dimiliki lebih dari satu thread yang berjalan didalamnya , sehingga dalam hal ini proses dapat menjalankan lebih dari satu thread.

\
Cukup sekilas tentang thread , sekarang kita akan mengoding di linux ubuntu untuk memutar musik di linux.
berikut kodungnya :

#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>
#include <dirent.h>

pthread_t tid[5];
char lagu[100];
int t;
void* playandmenu (void *arg)
{
    unsigned long i = 0;
    pthread_t id = pthread_self();
    int flag;
    if(pthread_equal(id,tid[0]))
    {
        printf("1. list\n2. play [Nama_lagu]\n3. pause\n4. continue\n5. stop\n");
        fflush(stdout);
    }
    else if(pthread_equal(id,tid[1]))
    {
        system("ls /home/aditya/Modul3/Nomor1/Playlist/ | grep .mp3");
    }
    else if(pthread_equal(id,tid[2]))
    {
        system("pkill mpg123");
        system("clear");
        char popup[]="mpg123 -q /home/aditya/Modul3/Nomor1/Playlist/";
        strcat(popup,lagu);
        system(popup);
    }
    else if(pthread_equal(id,tid[3]))
    {
        sleep(t);
        system("pkill -STOP mpg123");
    }
    else if(pthread_equal(id,tid[4]))
    {
        sleep(t);
        system("pkill -CONT mpg123");
    }
    else if(pthread_equal(id,tid[5]))
    {
        sleep(t);
        system("pkill mpg123");
        system("clear");
    }
    return NULL;
}

int main(void)
{
    while(1)
    {
        int err;
        char pilihan[10];
        scanf("%s", pilihan);
        system("clear");
        if(strcmp(pilihan,"help")==0)
        {
            system("clear");
            err=pthread_create(&(tid[0]), NULL, &playandmenu, NULL);
        }
        else if(strcmp(pilihan,"list")==0)
        {
            system("clear");
            err=pthread_create(&(tid[1]), NULL, &playandmenu, NULL);
        }
        else if(strcmp(pilihan,"play")==0)
        {
            system("clear");
            scanf(" %[^\t\n]s",lagu);
            err=pthread_create(&(tid[2]), NULL, &playandmenu, NULL);
        }
        else if(strcmp(pilihan,"pause")==0)
        {
            system("clear");
            scanf("%d", &t);
            err=pthread_create(&(tid[3]), NULL, &playandmenu, NULL);
        }
        else if(strcmp(pilihan,"continue")==0)
        {
            system("clear");
            scanf("%d", &t);
            err=pthread_create(&(tid[4]), NULL, &playandmenu, NULL);
        }
        else if(strcmp(pilihan,"stop")==0)
        {
            system("clear");
            scanf("%d", &t);
            err=pthread_create(&(tid[5]), NULL, &playandmenu, NULL);
        }
    }
    return 0;
}


saya menggunakan 5 thread dalam kodingan ini , thread pertama untuk melihat list lagu di folder playlist yang anda buat, thread kedua untuk memutar musik , thread ketiga untuk mem-pause musik, thread ke empat untuk continue musik yan g telah di pause , thread ke lima untuk men-stop musik. Sebelum itu pastikan anda telah mengistall "MPG123" player pada linux anda.

Kodingan ini harus disertai folder playlist yang berisi lagu akan dimainkan.
selamat mencoba :)

Sabtu, 17 Oktober 2015

Gambar Berwarna menjadi Gambar Hitam Putih Melalui Linux

Kali ini saya akan membahas bagaimana membuat gambar berwarna menjadi gambar hitam putih dengan menggunakan bash terminal Linux. Tidak hanya dengan image editor / photo editor kita dapat merubah warna gambar menjadi hitam putih.  Sebelum memulai mengoding di bash terminal linux teman-teman harus menginstall Imagemagick pada linux anda cara meninstall image magick dengan menulis  "sudo apt-get install imagemagick" dengan koneksi internet yang sedang terhubung.
Setelah melalukan install image magick tulisakan kodingan berikut di terminal linux.

#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <syslog.h>
#include <string.h>

int main(void)
{
    pid_t pid, sid;
    pid = fork();
    if (pid < 0)
    {
        exit(EXIT_FAILURE);
    }

    if (pid > 0)
    {
        exit(EXIT_SUCCESS);
    }

    umask(0);

    sid = setsid();

    if (sid < 0)
    {
        exit(EXIT_FAILURE);
    }

    if((chdir("/")) < 0)
    {
        exit(EXIT_FAILURE);
    }

    close(STDIN_FILENO);
    //close(STDOUT_FILENO);
    close(STDERR_FILENO);
    FILE *fp;

    while(1)
    {
        char file_type[100];
        fp = popen("ps aux | grep .jpg | grep -v grep | awk 'END{print $NF}'", "r");

        if (fp == NULL)
        {
            printf("Failed to run command\n" );
            exit -1;
        }
        else if(fgets(file_type, sizeof(file_type), fp) != NULL)
        {
        sleep(2);
            printf("%s", file_type);

            if(file_type[0] == '\n')
            {
        sleep(2);
                printf("No JPG Open");
            }
            else
            {
                file_type[strlen(file_type)-5]='\0';

                char file_name[400];
                strcpy(file_name, file_type);
                strcat(file_name, "_copy.jpg");

                if(access(file_name, F_OK) == -1)
                {
                    char buf[500];
                    snprintf(buf, sizeof(buf), "convert %s.jpg -colorspace Gray -gamma 2.2 %s", file_type, file_name);
                    system(buf);
                }
            }
        }

    }
    fclose(fp);
    exit(EXIT_SUCCESS);

}


file gambar yang di convert berupa jpg pada kodingan saya kali ini. dan jangan lupa kodingan ini di simpan dengan format .C. setelah selesai mengoding dengan format save (.c) . run atau jalankan dengan menuliskan "gcc [nama kodingan yang kalian simpan.c] -o [nama program anda]" contoh :
"gcc aditya.c -o gunawan" dan setelah itu ketik "./gunawan" untuk menjalankan programnya.

Setelah itu klik gambar yang ingin kalian rubah warna gambarnya, akan muncul gambar seperti dibawah ini :

akan ada copyan dari file asli dengan warna hitam putih.
Untuk mematikan program ini hanya dengan menuliskan pada terminal linux "pkill [nama program anda]" , seperti "pkill gunawan".


okee selamat mencobaa kawan-kawan.

Jumat, 25 September 2015

Menentukan Bilangan Prima di Bash Scripting

Menentukan bilangan prima itu hal dasr bagi programer , bisa dikatakan ini adalah salah satu latihan wajib bagi seorang programer. Saya akan membahas algoritma dan contoh code untuk bilangan prima . Langsung aja gan di simak penjelasan saya dibawah ini .

"Dalam matematika, bilangan prima adalah bilangan asli yang lebih besar dari angka 1, yang faktor pembaginya adalah 1 dan bilangan itu sendiri. 2 dan 3 adalah bilangan prima. 4 bukan bilangan prima karena 4 bisa dibagi 2. Sepuluh bilangan prima yang pertama adalah 2, 3, 5, 7, 11, 13, 17, 19, 23 dan 29." kutipan diatas saya ambil dari wikipedia.com.

Jadi kita membutuhkan 2 buah perulangan untuk menacari bilangan prima bisa dengan  for atau dengan while . Mengapa butuh 2 perulangan ???????
langsung aja di lihat algo sekaligus kodingannya gan, kodingan saya ini kebetulan memakai perulangan while  gan cekidot

 #!/bin/bash
x=$1
i=2

while [ $i -le $x ]   // disini perulangan yang pertama
do
flag=0   // flag disini adalah untuk penghitung jumlah bilangan yang habis           di  bagi


j=$i
        while [ $j -ge 1 ]  // perulangan kedua
        do
        if [ $(( i%j )) -eq 0 ]; then  // jika  variabel j habis dibagi dengan i maka flag akan bertambah
        let "flag=$flag+1"
        fi
        let "j=$j-1"
        done
if [ $(( flag )) -eq 2 ]; then // jika flag berjumlah 2 maka akan menampilkan bilangan prima
echo $i
fi
let "i=$i+1"
done











Cukup sekian dari artikel ini , maaf jika ada kesalahan saya juga masi belajar gan :)