Wednesday, November 26, 2014

Pthread

Halo sudah 2 minggu belum update, ok kesempatan kali ini saya ingin share salah satu ilmu yang sudah saya dapatkan lagi yaitu pthread atau bisa disebut juga POSIX thread

1. Dasar Teori
Library POSIX thread adalah thread standar berbasis API untuk C/C++. ini dapat mengembangkan satu  proses untuk mengijinkan proses yang lainya untuk ikut berproses. ini srangat efektif untuk sistem bermultiprosesor dimana alur proses bisa dialokasikan  untuk menjalankan prosesor lain sehingga kecepattan proses menjadi lebih cepat. selain pada sistem multiprosesor, kegunaan ini bisa didapatkan juga di sistem uniprosesor yang menggunakan I//O dan fungsi sistem lainya yang mungkin bisa mematikan proses lainya.  semua threads yang sedang  beproses memiliki kesamaan kapasitas alamat. thread akan dipanggil dengan mendefinisikan suatu fungsi dengan argumenya yang akan diproses dengan thread lainya. jadi kesimpulanya adalah kegunaan POSIX threads adalah agar suatu software dapat berjalan dengan lebih cepat.

 fungsi-fungsi yang ada pada library pthread.h:
  •  pthread_t = tipe data thread
  •  pthread_mutex_t= tipe data mutex thread
  •  pthread_create = int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);
    Fungsi yang digunakan untuk menciptakan thread baru   dalam suatu proses dengan atribut ditentukan oleh attr. Jika attr diisi NULL, atribut default akan dimuat. Jika pemanggilan fungsi berhasil, fungsi akan menyimpan ID dari thread ciptaan pada rujukan yang ditunjuk thread
  • pthread_detach = int pthread_detach(pthread_t thread);
    Fungsi ini digunakan untuk mengindikasikan pada implementasi bahwa ruang penyimpanan thread pada thread bisa diminta kembali ketika thread berakhir
  • pthread_cancel = int pthread_cancel(pthread_t thread);
    Fungsi ini digunakan untuk meminta agar thread dibatalkan. Kondisi kemampuan membatalkan dan tipedari thread yang dituju menentukan kapan pembatlan terjadi.
  • pthread_mutex_lock = int pthread_mutex_lock(pthread_mutex_t *mutex);
    Fungsi ini digunakan untuk mengunci objek mutex yang dirujuk oleh mutex. Jika mutex sudah dikunci, thrad pemanggil akan ditahan hingga mutex menjadi tersedia (tidak terkunci). Operasi ini mengembalikan objek mutex yang dirujuk oleh mutex pada keadaan terkunci dengan thread pemanggil sebagai pemiliknya
  • pthread_mutex_unlock = int pthread_mutex_unlock(pthread_mutex_t *mutex);
    Fungsi ini berguna untuk membebaskan objek mutex yang dirujuk mutex. Bagaimana cara mutex dibebaskan tergantung dari tipe atribut mutex
  • pthread_mutex_destroy = int pthread_mutex_destroy(pthread_mutex_t *mutex);
    Fungsi ini menghancurkan objek mutex yang dirujuk oleh mutex, sehingga objek tersebut menjadi tidak terinisialisasi. Objek yang dihancurkan bisa diinisialisasi masukan diberikan .
2. Contoh Soal:
 persoalan:
     Pembagian Kelompok untuk mengerjakan tugas secara berkelompok secara   acak. asumsikan bahwa anda seorang dosen/guru dan anda ingin membuat kelompok untuk mengerjakan suatu tugas. asumsikan bahwa siswa dikelas anda berjumlah 48 dan per kelompok terdiri atas 4 orang.
solusi:
Karena pthread berjalan secara serentak maka thread keberapapun diurutkan secara random sehingga kita tak tau pasti urutan ke berapa terlebih dahulu yang keluar. maka sebagai solusi pthread termasuk pthread yang tepat
berikut adalah instruksinnya:
  • untuk pertama-tama kita definisikan terlebih dahulu beberapa fungsi yang akan dipakai dan sebuah konstanta berupa jumlah thread maksimal/Jumlah Siswa yaitu 48

  • selanjutnya kita langsung main ke fungsi yang akan dijalankan oleh POSIX thread yaitu fungsi pengelompokan, karena berjalan secara bersamaan maka kita membutuhkan mutex lock sehingga pengelompokan dilaksanakan secara stabil walaupun secara bersamaan. lalu untuk penulisan kelompok jadi disini kita mendeklarasikan variable counter dan counter tersebut akan di modulus 4 sehingga kelompok akan di shift ke kelompok berikutnya apabila counter tersebut menghasilkan 0 apabila di modulus 4. lalu langsung kita memanfaatkan id thread yang sebagai nomor urut siswa disini lalu langsung di print nomor urut mahasiswa tsb, lalu counter di increment dan mutexnya di unlock.

  • di int main kita hanya perlu mendeklarasikan satu variable threads yang berarray, lalu langsung memulai perulangan untuk membuat thread tersebut dan memulai fungsi pengelompokan didalam thread tersebut. dan selesai. jangan lupa dengan pthread_exit. agar thread bisa berhenti berproses.


    Berikut hasil compile dan run'nya:



    Sekian dan Semoga bermanfaat :)

    Thursday, November 6, 2014

    FIFO example

    Halo semua, terimakasih apabila kalian masih follow up saya disini :v
    ok langsung aja, untuk kesempatan kali ini saya akan menjelaskan tentang FIFO dan contoh programnya.
    ok langsung saja ini yang akan saya lampirkan :)

    *pengertian 
    FIFO adalah akronim untuk First In, First Out (Pertama Masuk, Pertama Keluar), sebuah abstraksi yang berhubungan dengan cara mengatur dan memanipulasi data relatif terhadap waktu dan prioritas. Ungkapan ini menggambarkan prinsip teknik pengolahan antrean atau melayani permintaan yang saling bertentangan dengan proses pemesanan berdasarkan perilaku first-come, first-served (FCFS): di mana orang-orang meninggalkan antrean dalam urutan mereka tiba, atau menunggu giliran satu di sebuah sinyal kontrol lalu lintas.
    FCFS juga merupakan jargon istilah untuk sistem operasi penjadwalan algoritma FIFO, yang memberikan setiap proses CPU waktu sesuai dengan urutan mereka datang. Dalam arti yang lebih luas, abstraksi LIFO, atau Last-In-First-Out adalah kebalikan dari abstraksi organisasi FIFO. Bedanya mungkin adalah yang paling jelas dengan mempertimbangkan sinonim yang kurang umum digunakan dari LIFO, FILO (berarti First-In-Last-Out). Pada intinya, keduanya adalah kasus khusus dari daftar yang lebih umum (yang dapat diakses di mana saja). Perbedaannya adalah tidak ada dalam daftar (data), tetapi dalam aturan untuk mengakses konten. Satu sub-tipe menambah satu ujung, dan melepaskan dari yang lain, sebaliknya mengambil dan menempatkan sesuatu hanya pada salah satu ujungnya.
    sumber: id.wikipedia.org


    *contoh program

    Program yang ingin saya tunjukan adalah penerapan FIFO dalam hubungan antara client dan server di suatu warnet atau rental computer dalam bahasa c. ketentuanya adalah, client akan mendapatkan 5 pilihan di dalam warnet: 1.game offline -> rp 2000 2. Game online -> Rp 4000 3. internet-> Rp 3000 dan 4 game dan Internet -> Rp 5000 serta 5. tinggal saja(gak bayar). dan out putnya akan diterima hanya untuk server berupa pendapatan yang didapatkan per 10 pengunjung yang datang

    ok langsung saja berikut tahap2 pembuatanya.
    1. bukalah Gedit atau Geany(apabila anda memilikinya)
    2. Lalu kita akan memulai untuk membuat program untuk client terlebih dahulu
        a. include bbrp library seperti gambar di bawah, kurang lebih kita membutuhkan library tersebut dan         jangan lupa untuk menambahkan define  
      
        b. lalu langsung masuk ke fungsi main, definisikan suatu char untuk pop up message dan                           beberapa integer untuk menyimpan pilihan paket (pilihan[10]), dan banyak jam                                       penyewaan(jam[10]), serta 2 variable integer untuk memasukan data yang telah diinputkan                   user(gt dan ht) untuk selain itu urutan[10],ft dan countert di abaikan saja, karena saya lupa                   menghapus :p           

        c. lalu berikan user leluasa untuk mengisikan pilihan paket dan lama pakainya, langsung saja ikuti           kode sebagai berikut. (pengulangan terjadi 10 kali karena hanya akan memasuki 10 user saja               per run). jangan lupa dengan sprintf dan system("mssg") yang digunakan untuk pop up message,         namun ini sebenarnya optional
        d. setelah itu masukan kode dibawah ini, kode ini berfungsi untuk memberikan perintah kepada               sistem untuk membuat suatu FIFO(char * = "/tmp/ "; mkfifo( , 0666), dan memasukan isi dari              variable pilihan paket dan jam ke masing-masing FIFO ( = open(inout, OWRONLY); dst).                  lalu jangan lupa save file tsb dengan extension .c
             


    3. untuk client sudah selesai, maka kita sekarang fokus untuk server
        a. Sama Seperti Client inilah beberapa library yang akan kita butuhkan
           
           b. Lalu Deklarasikan beberapa variable (kecuali countert) untuk pengambilan data dari                            fifo(gt,ht,buf,buf1). lalu deklarasikan 2 fifo dan 2 fifo tersebut akan mengambil data dari                      client. 

             c. Lalu berikan harga dari inputan client, buf[i] digambar ini berlaku sebagai pilihan paket dan               buf1[i] akan berlaku sebagai banyaknya jam, serta sum sebagai total dan subsum sebagai                     jumlah yang harus dibayarkan setiap usernya
              d. setelah itu, lakukan pop up message apabila 10 user telah mengunjungi warnet server. dan                   print semua output dalam format pilihan paket i x jam= subsum sebanyak 10 user. lalu                         tampilkan sum yang berupa hasil penjumlahan dari smua subsum diatas. lalu save dengan                   extension .c
    4. Baik Sudah selesai. cheers! :D
    dan berikut bbrp screenshot run programnya





    Baik, Sekian Disini dulu, Semoga Bermanfaat! ;)

    Thursday, October 9, 2014

    program untuk mengecek diantara jam berapakah jam sekarang ini

    halo, pada kesempatan kali ini saya akan menunjukan salah satu aplikasi trivial yang baru saya buat beberapa jam yang lalu, yaitu program untuk mengecek diantara jam berapakah jam sekarang ini. contohnya: jika ja sekarang adalah 01:34:10 maka ia berada diantara jam 01:00:00 dan 02:00:00.

    baik langsung saja inilah cara membuat program tersebut:
    1.  buatlah document txt dan letakan di folder home/ folder (saya menyimpan di folder home) manapun juga tidak masalah. isi dokumen txt tersebut adalah sebagai berikut
      00:00:00
      01:00:00
      02:00:00
      03:00:00
      04:00:00
      05:00:00
      06:00:00
      07:00:00
      08:00:00
      09:00:00
      10:00:00
      11:00:00
      12:00:00
      13:00:00
      14:00:00
      15:00:00
      16:00:00
      17:00:00
      18:00:00
      19:00:00
      20:00:00
      21:00:00
      22:00:00
      23:00:00
    2. Setelah itu langsung di save dan berikan nama sesuai yang anda inginkan (saya memberikan nama dokumen tsb timetime.txt)
    3. Lalu kita akan mulai bermain dengan bash scripting. buatlah dokumen sh dan berikan nama dokumen tersebut sesuai dengan yang anda inginkan (saya menggunakan nama badak.sh):
      1. deklarasikan variabel tanggal dan waktu terlebih dahulu, seperti pada tulisan yang di blok pada gambar berikut dan jangan lupa untuk membuat variable penampung untuk menampung jam yang sekarang
      2. lalu buatlah folder baru dengan mkdir dengan nama berupa tanggal pada waktu sekarang, jangan lupa menambah -p karena kita hanya akan membuat folder tersebut sekali saja dalam sehari. lalu copykan file txt yang telah anda buat di tahap paling pertama menuju ke folder yang telah dibuat tersebut dan ubahlah namanya dengan waktu sekarang, jangan lupa untuk menggantikan hak aksesnya dengan chmod
      3.  lalu "execute" file yang telah tercopy tsb dengan perintah exec < pathfile/namafile (punya saya exec< /home/stankey/$tgl$bln$thn/$jam:$mnt:$dt ) namun didahului dengan exec 6<&0 terlebih dahulu, lalu deklarasikan array dengan syntax "declare -a (nama)" dengan indexnya.

      4. setelah itu mulai masuk kedalam perulangan dengan membaca string dalam file tersebut perbaris, masukan hasil bacaan tersebut kedalam array yang telah dibuat lalu ambilah 2 angka depanya saja untuk dibandingkan dengan jam yang sekarang(${array[$index]:0:2}) apabila jam sekarang sama dengan jam pada file tersebut (menit dan detik tidak termasuk) maka jam pada file tersebut akan diberi tanda "waktu sekarang ada diantara waktu yang ditunjuk hingga bawahnya" cara menggantikan kata tersebut adalah dengan perl, perl adalah fungsi untuk menukarkan kata2. lalu setelah itu untuk jam berikutnya adalah batas atas dari jam tersebut, maka 1 jam berikutnya diberikan kata"maksudnya adalah ini". namun jika jam sekarang sudah 23 maka akan ditambah dengan kata "waktu sekarang ada diantara waktu yang ditunjuk hingga 00:00:00 hari berikutnya" tanpa memberi tahu batas waktu atasnya dimana.
      5. setelah itu tutuplah semua fungsi if, while dan exec dengan fi, done dan exec 0<&6 6<&-. dan scripting telah selesai.
    4.   apabila ingin melakukan bash ini berulang2 anda bisa menggunakan crontab. bukalah terminal linux dan ketik crontab -e maka anda akan tiba di screen berikut.
    5. agar bash berjalan setiap satu jam maka isikan * */1 * * * (path script anda). note: untuk setiap waktu lainya bisa dilihat di teori crontab, saya sudah lampirkan teori tersebut berupa post sebelum ini.
    6. selesai. berikut adalah hasil programnya

      Sekian dan semoga bermanfaat. :)

    Monday, October 6, 2014

    bagaimana cara mendownload file lewat terminal linux?


    Mendownload file adalah hal yang sudah terlalu biasa jaman sekarang ini, apalagi sekarang internet udah beredar luas sekali, tapi mungkin masih banyak orang (apalagi orang2 yang tidak menggunakan linux) yang belum mengerti cara mendownload tanpa lewat program downloader maupun browser di linux . nah pada kesempatan kali ini saya akan menunjukan cara mendownload file tanpa membuka browser, cukup anda mengetahui alamat addressnya

    1. buka lah terminal Linux
    2. Download (contoh linknya adalah http://ftp.gnu.org/gnu/wget/wget-1.5.3.tar.gz)
      1. Langsung saja untuk mendownload secara default, langsung saja dengan
        wget http://ftp.gnu.org/gnu/wget/wget-1.5.3.tar.gz
      2. Apabila download gagal dan ingin melanjutkan downloadan tersebut anda bisa menggunakan perintah
        wget -c
        http://ftp.gnu.org/gnu/wget/wget-1.5.3.tar.gz
      3. Apabila Anda ingin mendownload file dan langsung menggantikan nama file dan path terebut langsung saja dengan cara sebagai berikut (contohnya ingin memindahkan ke direktori home atas nama stankey dengan nama ren)
        wget -O /home/stankey/ren.tar.gz 
        http://ftp.gnu.org/gnu/wget/wget-1.5.3.tar.gz
    3. Demikian beberapa dasar-dasar dari wget yang sering dipakai untuk syntax yang lebih lanjut bisa mengetik wget --help di terminal.

      sekian semoga bermanfaat :)

    Teori Crontab

    Crontab adalah aplikasi daemon (berjalan dibalik layar) yang digunakan untuk menjalankan tugas yang dijadwalkan pada suatu waktu di sistem operasi linux. Setiap user di sistem yang memiliki file crontab, mengijinkan file tersebut untuk melakukan suatu aksi yang telah dispesifikasikan sesuai waktu yang telah ditentukan. Crontab biasa digunakan untuk membuat backup secara otomatis, sinkronisasi files, dll.


    1. Install crontab
    Buat yang belum diinstall crontab-nya, cara install nya adalah :
    sudo apt-get install cron
    2. Melihat aktifitas crontab
    Untuk melihat schedule yang sedang berjalan di sistem Anda :
    sudo crontab -l
    3. Mengedit cron jobs
    sudo crontab -e
    editor default dari cron adalah vi atau pico
    4. Format penulisan cron
    Format penulisan crontab ditulis dengan format seperti ini :
    * * * * * /home/sigit/script.sh

    Penjelasan :
    5 bintang (*) diatas merepresentasikan bagian2 format tanggal yang berbeda, urutannya sebagai berikut :
    1. (* pertama) : menit (isian : 0 – 59)
    2. (* kedua) : jam (isian : 0 – 23)
    3. (* ketiga) : hari dari bulan / tanggal (isian : 1 – 31)
    4. (* keempat) : bulan (isian : 1 – 12)
    5. (* kelima) : hari dari minggu (isian : 0 – 6) –> 0 = minggu

    Sunday, October 5, 2014

    Bagaimana Cara Menginstall Linux Ubuntu?



    Hai, Di Postingan Pertama saya ini. saya ingin share nih, bagaimana cara menginstall linux Ubuntu ke hardware. Saya kurang tau sih untuk distro linux yang lain seperti apa caranya tapi kurang lebih cara install linux hampir semuanya sama ehehhe.

    berikut adalah apa yang akan anda butuhkan:
    • PC/Laptop yang sesuai dengan kebutuhan
    • Usb Flashdisk (minimal 2GB)
    • Iso Linux Ubuntu
    Pastikan setidaknya anda sudah menyiapkan semua ini. langsung saja daripada panjang lebar saya langsung memberikan prosedur sebagai berikut :)
    • Mempersiapkan device untuk booting
      1. Download-lah iso file Linux Ubuntu. Berhubung Linux itu gratis dan sekarang iso filenya tersebar luas di internet, maka mendownload iso linux tidaklah susah. ukuran isonya pun mayoritas tidak mencapai 1 GB meskipun versinya udah paling terakhir. berikut official linknya http://www.ubuntu.com/download/desktop
      2. Selain iso file linux Ubuntu, anda juga akan membutuhkan sebuah program untuk mengkonversikan USB normal Menjadi USB booter. anda bisa memakai UnetBootin sebagai salah satunya http://unetbootin.sourceforge.net/
      3. lalu setelah iso Ubuntu selesai di download dan terdapat di Hardisk Anda. siapkan satu buah flashdisk yang berukuran minimal 2 GB. dan buka program UnetBootin, maka tampilanya akan sebagai berikut.screenshot
      4. klik Diskimage, masukan ISO Ubuntu dan isi drive sesuai dengan letak USB yang anda pasang lalu tekan OK
      5. Lalu Tunggulah Prosesnya Hingga Selesai
    •  Proses Booting
      Setelah usb booter berhasil dibuat, langsung saja restart komputer dan lakukan boot pada usb

      17 Langkah Mudah Install Linux Ubuntu 14.04 LTS Trusty Tahr (Step by Step)
      Klik Install Now, apabila ingin langsung menginstall

      17 Langkah Mudah Install Linux Ubuntu 14.04 LTS Trusty Tahr (Step by Step)

      Pada langkah diatas anda juga bisa memilih Download Update While Installing, yaitu pilihan untuk mendownload paket terbaru yang ada pada Ubuntu sama halnya dengan Install this third party software pilihan ini akan mendownload paket-paket yang berhubungan dengan multimedia seperti mpeg, mp3 dan lain sebagainya, semua pilihan ini bisa anda jalankan kalau terkoneksi dengan jaringan internet. Jika yakin pada pilihan anda klik Continue untuk melanjutkan

       17 Langkah Mudah Install Linux Ubuntu 14.04 LTS Trusty Tahr (Step by Step)
      pada langkah selanjutnya, klik something else apabila anda tidak ingin suatu hal yang tidak diharapkan terjadi

      17 Langkah Mudah Install Linux Ubuntu 14.04 LTS Trusty Tahr (Step by Step)
      Lalu Klik new partition Table, ini gunanya untuk membuat partisi baru, lalu klik continue apabila muncul peringatan

      17 Langkah Mudah Install Linux Ubuntu 14.04 LTS Trusty Tahr (Step by Step)
      Buatlah Partisi untuk ext4 journaling file system dan mount point menuju root "/"
      Sisakan Hardisk sebanyak 1 GB untuk SWAP AREA

      17 Langkah Mudah Install Linux Ubuntu 14.04 LTS Trusty Tahr (Step by Step)


      Lalu buatlah SWAP AREA di free space yang berukuran 1GB, fungsinya SWAP area adalah sbg RAM cadangan

      17 Langkah Mudah Install Linux Ubuntu 14.04 LTS Trusty Tahr (Step by Step)
      Apabila semua format udah ceklist langsung saja klik install now

      17 Langkah Mudah Install Linux Ubuntu 14.04 LTS Trusty Tahr (Step by Step)
      langsung saja, pilih daerah tempat tinggal anda dan Klik Continue pada langkah ini, ini hanya menentukan dimana wilayah anda

      17 Langkah Mudah Install Linux Ubuntu 14.04 LTS Trusty Tahr (Step by Step)
      Klik continue juga pada langkah ini















      isilah data dibawah ini, sebagai identitas anda dan klik continue

      17 Langkah Mudah Install Linux Ubuntu 14.04 LTS Trusty Tahr (Step by Step)
      setelah itu proses install dimulai, silahkan menunggu


      17 Langkah Mudah Install Linux Ubuntu 14.04 LTS Trusty Tahr (Step by Step)
      Selesai, silahkan merestart komputer anda. selamat!! :D