Minggu, 19 Juni 2016

Cukup Dengan Memori 68 KB Untuk Keliling Angkasa

Ada yang sudah kenal Voyager? Saya kira belum banyak yang pernah mendengarnya, apalagi sampai mengenalnya. Tapi, tentunya semua sudah tidak asing lagi dengan NASA kan?
Ya, Voyager adalah sebuah proyek yang dikembangkan oleh NASA untuk mengemban misi eksplorasi luar angkasa.





Dalam Voyager terdapat 3 jenis komputer, dan masing masing jenis berjumlah 2. Jenis komputer tersebut ialah:
  • Computer Command System (CCS) - 18-bit word, interrupt type processors (2) with 4096 words each of plated wire, non-volatile memory.
  • Flight Data System (FDS) - 16-bit word machine (2) with modular memories and 8198 words each
  • Attitude and Articulation Control System (AACS) - 18-bit word machines (2) with 4096 words each.

Jika ditotal, ternyata Voyager hanya memiliki memori sekitar 68 KB. Selain itu, menurut FAQ situs resmi Voyager, pengendali utama mampu berjalan pada frekuensi 4MHz, namun CPU hanya mampu mencapai frekuensi 250 KHz saja. Setiap instruksi diperkirakan membutuhkan waktu 80 microsecond untuk dieksekusi, dalam waktu 1 detik ada sekitar 8000 instruksi tereksekusi. Sangat berbeda jauh dengan mikroprosesor zaman sekarang yang pada umumnya telah mencapai satuan frekuensi GHz dan kecepatan eksekusi hingga angka milyaran instruksi per detiknya.

Ada 2 Voyager yang diluncurkan oleh NASA. Keduanya biasa dikenal dengan sebutan Voyager 1 dan Voyager 2. Jika dihitung, keduanya sudah berada di angkasa selama lebih dari 37 tahun, yaitu sejak peluncurannya pada tahun 1977.

Misi utama Voyager sebelumnya adalah melakukan eksplorasi Jupiter dan Saturnus. Kemudian Voyager 2 melanjutkan perjalanannya ke Neptunus dan Uranus. Dan sekarang, keduanya tengah bekerja untuk mencapai misi eksplorasi ke bagian paling tepi dari orbit tata surya. Sampai saat ini, Voyager adalah satu-satunya objek yang berhasil melakukan perjalanan terjauh dari bumi.

Sangat sulit untuk dipercaya, tapi begitulah faktanya. Voyager memberikan kita sebuah hikmah, bahwa kekurangan bukanlah suatu pembatas.

Info lebih lanjut: http://voyager.jpl.nasa.gov/faq.html

Read more

Sabtu, 18 Juni 2016

Cara Aman Mengatasi Sistem Linux Hang / Freeze

Komputer mempunyai batasan kapasitas tertentu, yang erat kaitannya dengan spesifikasi hardware yang terpasang pada komputer tersebut. Jika melebihi ambang wajar, tentu kita merasakan bagaimana program kian menurun performanya. Dan jika terus dipaksa, abra kadabra, komputer sama sekali tak merespon yang kita perintahkan. Kita biasa menyebut peristiwa ini dengan sebutan hang atau freeze.



Sebenarnya, bukan hanya jumlah program yang dapat memicu timbulnya hang. Kerusakan hardware, seperti harddisk, juga sering kali menjadi salah satu akar penyebabnya. Tapi, secara umum, hang memang lebih sering ditimbulkan oleh software.

Saat hang, biasanya kita berusaha menutup program dengan menekan icon close di bagian pojok atas. Jika belum berhasil, buka terminal dan mengeksekusi xkill atau killall. Beda lagi urusannya, kalau hang-nya sudah parah, sampai-sampai mouse dan keyboard sama sekali tak bisa merespon.

Apa yang harus kita lakukan? Menekan tombol power? Ya, itu dulu, tapi sekarang jangan lagi. Cara tersebut dapat sangat beresiko, pada kerusakan sistem. Bahkan paling parah bisa berimbas pada kerusakan hardware. Dalam hal ini, mungkin harddisk adalah salah satu media yang paling rentan.

Selama ini Linux mengenal magic SysRq key. Kernel dapat segera memprioritaskan task untuk memproses kombinasi keyboard, jika yang salah satunya adalah tombol SysRq. Untk informasi lebih lanjut klik disini. Salah satu fitur yang disediakan dari kombinasi keyboard tersebut adalah safe reboot. Ini sangat bermanfaat ketika sistem benar-benar dalam keadaan hang dan tak bisa melakukan apapun. Caranya
1. Tekan Alt + PrtScr/SysRq
2. Sambil tetap menekan kedua tombol tersebut, Ketik R-E-I-S-U-B secara berurutan.
3. Komputer akan reboot.

Kenapa harus REISUB, bukan BUDIONO? Entahlah, penulis belum tahu-menahu soal sejarah adanya kombinasi tombol ini. Menurut Wikipedia, kata REISUB merupakan akronim yang memiliki beberapa makna, yaitu:
unRaw       (take control of keyboard back from X),
 tErminate  (send SIGTERM to all processes, allowing them to terminate   gracefully),
 kIll       (send SIGKILL to all processes, forcing them to terminate immediately),
  Sync      (flush data to disk),
  Unmount   (remount all filesystems read-only),
reBoot.



Read more

Membaca File dengan Bahasa C

Manajemen file adalah salah satu aspek penting yang sering diterapkan dalam pemrograman. Karena setiap program tentu membutuhkan media penyimpanan untuk menyimpan semua datanya. Oleh karena itu, setiap sistem operasi pasti menyediakan API untuk membudahkan programmer membuat programnya memanajemen file dengan mudah.



Bahasa C memiliki sebuah library, yang biasa dikenal dengan sebutan "libc". Awalnya bahasa C dikembangkan untuk lingkungan sistem operasi UNIX. Tapi seiring dengan perkembangan zaman. C menjadi bahasa wajib bagi semua sistem operasi, termasuk juga libc. Untuk menangani file, libc menyediakan banyak fungsi yang sangat mudah untuk digunakan. Biasanya operasi file selalu diawali dengan memanggil fopen() dan setelah selesai harus diakhiri dengan fungsi fclose().
fopen() : membuka atau membuat file baru.
fclose() : menutup file yang telah dibuka dengan fopen()

Ada 2 fungsi dasar yang sering digunakan untuk mengolah file, antara lain.
fread() : membaca data dari file.
fwrite() : menulis data ke file.
fseek() : Memilih offset file yang akan dibaca atau ditulis.


fopen()

FILE *fopen(const char *filename, const char *mode)

Parameter filename adalah nama file yang ingin dibuka atau dibuat. Kita dapat menentukan apakah ingin membuat file baru atau membuka file yang sudah ada, dengan memberikan argumen yang benar pada parameter mode.
Parameter mode menentukan bagaimana fopen akan bekerja. Mode yang diberikan berupa string yang berisi salah satu atau kombinasi karater berikut.

mode Deskripsi
"r" Membuka file yang sudah ada untuk menambahkan data pada file tersebut.
"w" Membuat file baru untuk keperluan menulis data. Jika nama file sudah ada, file tersebut akan dihapus dan dibuat file baru dalam keadaan kosong.
"a" Operasi penulisan data dengan fwrite akan menambahkan data yang ditulis tersebut di bagian akhir data yang sudah ditulis. Namun jika file belum ada, fopen akan membuat file kosong baru.
"r+" Membuka file untuk keperluan baca dan tulis data. File yang ditunjukkan oleh parameter filename harus ada.
"w+" Sama seperti "w", tapi kita juga bisa menulis data dengan fwrite().
"a+" Sama seperti "a", dengan tambahan bisa membaca data juga.

Setelah file dibuka atau dibuat dengan fopen() kita bisa mulai melakukan sesuatu dengannya. Fungsi fopen mengembalikan handle berupa tipe FILE*. Handle ini harus disimpan untuk operasi pembacaan dan penulisan data yang akan dilakukan.

fread()

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

Parameter ptr adalah pointer ke memori yang digunakan sebagai buffer. Untuk membaca data kita membutuhkan buffer untuk menyimpan data hasil pembacaan data. Buffer bisa diciptakan dengan membuat array, atau dengan mengalokasikan memory dengan malloc().
Julah data yang dibaca ditentukan oleh parameter size dan nmemb. size adalah ukuran elemen yang ingin dibaca dan nmemb adalah jumlah elemennya. Jadi jumlah data yang dibaca nanti adalah sebanyak size x nmemb.
Dan terakhir, parameter stream adalah handle file yang telah dibuka dengan fopen().

fwrite()

size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream)

Tidak berbeda jauh dengan fread(). Semua parameter yang digunakan fwrite sama persis. Yang membedakan adalah bahwa parameter ptr disini menunjuk ke buffer yang berisi data yang akan ditulis ke file.

fseek()
Setelah file terbuka, pembacaan dan penulisan data dimulai dari offset 0, atau offset pertama. Ada kalanya kita ingin membaca atau menulis data mulai dari offset tertentu. Ini bisa dilakukan dengan fseek().

int fseek(FILE *stream, long int offset, int whence)

Fungsi ini akan memindahkan pointer berdasarkan argumen offset dan whence. Ada 3 jenis argumen whence, yaiu:
SEEK_SET : offset dipindah secara absolut berdasarkan argumen offset.
SEEK_CUR : offset dipindahkan relatif terhadap offset saat ini(current offset). new offset = current offset + offset
SEEK_END : offset dipindah relatif terhadap offset terakhir file.

Contoh
fread.c
#include <stdio.h>
#include <stdlib.h>

int main(){
 FILE *file;
 char buffer1[20];
 char buffer2[20];
 size_t tmp;
 
 file = fopen("data.txt","r");
 //jika file tidak ada -> errror
 if(!file){
  printf("data.txt tidak ada atau tidak bisa dibuka");
  exit(EXIT_FAILURE);
 }
 //baca data dari awal
 tmp = fread(buffer1,7,1,file);
 if (tmp == 0){
  printf("baca data gagal");
  fclose(file);
  exit(EXIT_FAILURE);
 }
 else printf("Data buffer1: %s\n",buffer1);
 
 //baca data dari offset 8
 fseek(file,8,SEEK_SET);
 tmp = fread(buffer2,6,1,file);
 if (tmp == 0){
  printf("baca data gagal");
  fclose(file);
  exit(EXIT_FAILURE);
 }
 else printf("Data buffer2: %s\n",buffer2);
}

data.txt
Belajar bahasa C

Output

Read more