Rabu, 21 Juni 2017

Apa itu SSH (Secure Shell) ?


Menurut Wikipedia, Secure Shell (SSH) adalah sebuah protokol jaringan kriptografi untuk komunikasi data yang aman, login antarmuka baris perintah, perintah eksekusi jarak jauh, dan layanan jaringan lainnya antara dua jaringan komputer. Ini terkoneksi, melalui saluran aman atau melalui jaringan tidak aman, server dan klien menjalankan server SSH dan SSH program klien secara masing-masing.

Sedangkan menurut Ari Pratama, SSH atau Secure Shell adalah sebuah protokol jaringan yang terenskripsi untuk menjalankan shell sessions atau bisa juga disebut terminal ( text based ) dengan aman, tidak bisa terbaca oleh orang lain.Dengan SSH, kita dapat menjalankan sebuah perintah pada mesin tujuan tanpa berada didekat mesin tujuan ataupun secara langsung menggunakan mesin tujuan, istilahnya Remote. User juga bisa membuat jaringan yang tidak aman ( seperti pada jaringan publik, wifi, dll ) menjadi jaringan yang aman, karena terkoneksi melalui SSH Tunneling. Jadi website, account, dll yang kita input tidak akan tercatat pada log di router ataupun server.

Protokol spesifikasi membedakan antara dua versi utama yang disebut sebagai SSH-1 dan SSH-2.
Aplikasi yang paling terkenal dari protokol ini adalah untuk akses ke akun shell pada sistem operasi mirip Unix, tetapi juga dapat digunakan dengan cara yang sama untuk akun pada Windows. Ia dirancang sebagai pengganti Telnet dan protokol remote shell lainnya yang tidak aman seperti rsh Berkeley dan protokol rexec, yang mengirim informasi, terutama kata sandi, dalam bentuk teks, membuat mereka rentan terhadap intersepsi dan penyingkapan menggunakan penganalisa paket.[2] Enkripsi yang digunakan oleh SSH dimaksudkan untuk memberikan kerahasiaan dan integritas data melalui jaringan yang tidak aman, seperti Internet.

Fungsi SSH
Fungsi SSH dapat digunakan untuk menggantikan telnet, rlogin, ftp dan rsh, salah satu fungsi utamanya adalah untuk menjamin keamanan dalam melakukan transmisi data pada suatu jaringan. SSH banyak dimanfaatkan oleh berbagai network admin dibeberapa belahan dunia untuk mengontrol web dan jenis jaringan lainnya seperti WAN. Fuungsi SSH ini sebenarnya adalah dibuat untuk menggantikan protokol sebelumnya yang dianggap sangat rentan terhadap pencurian data melalui malware berbahaya. Protokol tersebut antara lain adalah rlogin, telnet dan protokol rsh.

Fungsi lain SSH adalah :

  • Melakukan enkripsi terhadap data yang dikirim,
  • Protokol untuk pertukaran data dalam suatu jaringan,
  • Otentifikasi, mekanisme untuk memastikan pengirim dan penerima adalah benar dan aman
  • Kerahasiaan, memastikan kerahasiaan daya yang dikirim agar hanya diketahui oleh penerima dan pengirim.


Manfaat menggunakan SSH
Manfaat menggunakan akun SSH adalah meningkatkan keamanan data pada komputer Anda ketika mengakses internet, karena dengan adanya Akun SSH sebagai perantara koneksi internet Anda, SSH akan memberikan enskripsi pada semua data yang terbaca, baru mengirimkannya ke server lain.
Selain dapat melakukan enskripsi data, SSH juga memiliki kemampuan melakukan Port Forwarding yang mana memungkinkan kita mendapatkan manfaat sebagai berikut ini:

  • Melakukan koneksi aplikasi TCP (misalnya : webserver, mail server, FTP server) dengan lebih secure (aman)
  • Melakukan koneksi dengan membypass (melewati) firewall atau proxy setempat.

Manfaat kedua diatas itulah yang sering dicari oleh para pengguna Internet dan memanfaatkannya untuk kepentingan akses internet. Dengan menggunakan Akun SSH Kita juga dapat mengelola VPS untuk dijadikan hosting ataupun fungsionalitas yang lain.

Menggunakan Akun SSH untuk tunneling koneksi internet Anda memang tidak menjamin meningkatkan speed internet Anda. Namun dengan menggunakan Akun SSH, otomatis IP yang Anda gunakan akan bersifat statis dan dapat Anda gunakan secara privat dengan catatan hanya Anda lah user dalam Akun SSH tersebut.

Protocol SSH ini memiliki banyak fungsi, selain fungsi tunneling yang sering kita gunakan, kita juga bisa menggunakan SSH untuk SFTP, SOCKS4/5 proxy atau bisa juga kita gunakan untuk mengatur VPS atau hosting milik kita khususnya VPS dengan OS Linux seperti CentOS.Untuk menggunakan tunneling menggunakan SSH ini kita bisa mengguankan SSH client seperti Bitvise Tunnelier ataupun Putty untuk sistem operasi Windows.

Untuk mendapatkan akun dan penggunaan dari SSH ini, kita bisa mendapatkan akun SSH gratis di cjb.net atau jika kita memiliki VPS biasanya pihak penyedia memberikan juga SSH untuk pengaturan VPS kita.

Kegunaan SSH 
SSH dirancang untuk menggantikan protokol telnet dan FTP. SSH merupakan produk serbaguna yang dirancang untuk melakukan banyak hal, yang kebanyakan berupa penciptaan tunnel antar host. Dua hal penting SSH adalah console login (menggantikan telnet) dan secure filetransfer (menggantikan FTP), tetapi dengan SSH anda juga memperoleh kemampuan membentuk source tunnel untuk melewatkan HTTP,FTP,POP3, dan apapun lainnya melalui SSH tunel.

Public Key Cryptografi (Kriptografi Kunci Publik) 
SSH menggunakan metode public-key cryptography untuk mengenkripsi komunikasi antara dua host, demikian pula untuk autentikasi pemakai. Dengan metode ini, kita akan memerlukan 2 buah kunci berbeda yang digunakan baik untuk melakukan enkripsi dan dekripsi. Dua buah kunci tersebut masing-masing disebut public key (dipublikasikan ke publik/orang lain) dan private key (dirahasiakan/hanya pemiliknya yang tahu). Masing masing kunci di atas dapat digunakan untuk melakukan enkripsi dan dekripsi.

Cara kerja SSH

Public/private key yang masing-masing menjadi identitas SSH bagi keduanya.
Langkah-langkah koneksinya adalah sebagai berikut :
Langkah 1
Client bind pada local port nomor besar dan melakukan koneksi ke port 22 pada server.
Langkah 2
Client dan server setuju untuk menggunakan sesi SSH tertentu. Hal ini penting karena SSH v.1 dan v.2 tidak kompatibel.
Langkah 3
Client meminta public key dan host key milik server.
Langkah 4
Client dan server menyetujui algoritma enkripsi yang akan dipakai (misalnya TripleDES atau IDEA).
Langkah 5
Client membentuk suatu session key yang didapat dari client dan mengenkripsinya menggunakan public key milik server.
Langkah 6
Server men-decrypt session ky yang didapat dari client, meng-re-encrypt-nya dengan public key milik client, dan mengirimkannya kembali ke client untuk verifikasi.
Langkah 7
Pemakai mengotentikasi dirinya ke server di dalam aliran data terenkripsi dalam session key tersebut. Sampai disini koneksi telah terbentuk, dan client dapat selanjutnya bekerja secara interaktif pada server atau mentransfer file ke atau dari server. Langkah ketujuh diatas dapat dilaksanakan dengan berbagai cara (username/password, kerberos, RSA dan lain-lain).

(Sumber)


Read more

Software Untuk Belajar C / C++

Bahasa pemrograman C dan C++ telah hadir dari generasi ke generasi. Kehandalannya sudah tidak diragukan lagi. Kegunaannya meluas dari yang awalnya sebatas desktop programming, merambah hingga platform mobile, embedded-device hingga mikrokontroler. Itu mengapa bahasa ini tetap eksis sampai sekarang.

Untuk membuat program dengan bahasa C, sebenarnya kita tidak butuh software macam-macam. Cukup compiler, linker dan sebuah editor teks. Tapi, jika cuma begitu pemrograman akan terasa membosankan. Kita perlu software IDE (Integrated Development Environment) untuk membantu kita.

Biasanya IDE menyediakan syntax highlighting, sehingga memudahkan kita dalam membaca kode. Bukan hanya itu, IDE secara otomatis mengintegrasikan program dengan compiler yang akan digunakan, lupakan compile dengan terminal/command line, cukup klik sini dan klik sana dari IDE untuk mengompile kode dan me-link objek menjadi program.

Berikut adalah daftar software IDE yang bisa kita gunakan untuk mempelajari C/C++.

1. Codeblocks
Software ini saya lihat cukup populer di grup pemrograman C. Tampilannya sederhana, namun dengan fitur dan plugin lengkap, sngat cocok untuk yang baru mulai belajar. Yang membuatnya lebih mantap, Codeblocks juga tersedia untuk platform Linux.



2. Codelite
Yang satu ini adalah favorit saya. Fitur dan pluginnya lengkap dibanding Codeblocks. Selain bagus untuk pemrograman C/C++, Codelite juga bisa digunakan sebagai IDE pemrograman PHP dan Node.js. Kalau dari perspektif saya, tampilan Codelite lebih user-friendly dibanding Codeblocks. Kabar baiknya, Codelite juga tersedia untuk Linux, sama seperti Codeblocks.


3. Pelles C
Kalau kalian cuma ingin belajar C saja, tanpa C++, Pelles C juga cukup bagus. Ukurannya kecil dibanding IDE lain. Tampilannya lumayan memadahi dan bebas lemot.

4. Visual C++
Bagi yang serius belajar C/C++ di Windows, Visual C++ bisa menjadi pilihan paling tepat. Fitur software ini adalah yang paling lengkap diantara yang lain. Tidak mengherankan, karena pengembangannya disupport oleh perusahaan kelas kakap, yakni Microsoft.


5. C++ Builder
Tidak kalah dengan Visual C++, C++ builder juga dipersembahkan dengan rapi oleh Borland. Kini diakuisisi oleh Embarcadero. Fiturnya juga mantap, selevel dengan Visual C++. IDE ini sangat cocok bagia kalian yang mulai fokus menggarap project C++ berbasis GUI. Meski Visual C++ juga menyediakan RAD tool untuk desain GUI, RAD tool yang ada di C++ builder jauh lebih mudah digunakan.


Lainnya?
Ada juga IDE lain yang belum pernh dicoba sepenuhnya oleh penulis. Jika ingin mencobanya, silahkan saja. Namun penulis sama sekali tidak merekomendasikan. Apalagi list software berikutnya ini belum banyak dipakai di lingkungan programmer Indonesia.

6. Geany
7. Eclipse CDT
8. Netbeans
9. JetBrains CLion
10. GNAT Programming Studio
11. Qt Creator

Ada yang punya saran IDE lain?
Jika tidak, demikianlah artikel singkat mengenai kumpulan software untuk belajar C / C++. Mudah-mudahan kedepannya artikel ini dapat memberikan manfaat bagi pembaca. Sekian, terima kasih sudah berkunjung.
Read more

Selasa, 20 Juni 2017

Software Untuk Cek Backlink Blog Link Exchange / Tukeran Link

Reputasi blog bisa ditingkatkan dengan meningkatkan jumlah backlink berkualitas di situs lain. Salah satu upaya paling mudah untuk mendapatkannya adalah melalui program tukeran link / bertukar link / link exchange. Sistemnya cukup  sederhana; kita menaruh link blog orang lain di blog kita dan orang tersebut menaruh link blog kita di blognya.

Tapi, saat kegiatan promosi link exchange dilakukan secara masiv, misalnya dengan promosi grup blogger, akan ada peluang dirugikan lebih besar. Blogger lain yang telah bersedia menjalin kerjasama link exchange dapat saja menghapus link kita sewaktu-waktu. Apalagi setelah tahu bahwa backlink kita sudah cukup banyak, mungkin kita akan semakin rentan dikelabuhi.


Solusinya, saya menciptakan software sederhana bernama Backlink Checker. Software ini akan memeriksa list URL halaman blog teman di mana link blog Anda ditempatkan. Cukup tambahkan daftar link dan mengklik tombol Add. Lalu klik Scan links.

Software ini bisa berjalan pada Windows, Linux ataupun Mac. Asalkan sistem tersebut sudah terinstall Java.


Tidak perlu mengetik ulang jika anda butuh melakukan pemeriksaan ulang, karena list tersebut bisa disimpan dan diload mellui menu File.

Selamat mencoba :)
Read more

Link Download Visual Studio Versi Lama (2008, 2010, 2012, 2013, 2015)


Microsoft sangat peduli dengan perkembangan teknologi dunia. Ini dibuktikan dengan adanya produk Visual Studio yang telah dihadirkan secara rutin. Bahkan tersedia pula versi Community Edition yang bisa diperoleh secara gratis.

Programmer yang masih awam dengan visual studio biasanya akan langsung mengunduh Visual Studio versi terbaru. Padahal belum tentu sesuai dengan spesifikasi laptop yang sedang digunakan. Kalaupun cocok, biasanya program berjalan lebih lambat. Mungkin dengan versi yang lebih jadul, lemot ini bisa diatasi. Tapi, dimana kita bisa memperoleh visual studio versi lama? Jawabannya ada di program Visual Studio Dev Essentials.

Agar dapat mengakses program Visual Studio Dev Essentials tersebut, kita cukup harus mendaftarkan diri sebagai subscriber (LINK DAFTAR).


Bukan hanya Visual Studio, di sini kita bisa memperoleh berbagai macam tool yang berkenaan dengan kebutuhan developer. Dengan memiliki akun tersebut, kita bukan hanya bisa memperoleh tools versi terbaru, tapi juga versi terdahulu yang masih diberi dukungan oleh pihak Microsoft.

Yuk, tunggu apa lagi. Segera daftar sebaga subscriber, guys.

Read more

Menambah Cron Job yang Dibatasi Server

Sebuah media terkadang harus melakukan sesuatu secara terjadwal. Sebagai contoh, ketika media harus mengupdate informasi dari suatu website secara berkala. Akan tetapi, layanan dari server kadang dibatasi untuk sejumlah cron job tertentu. Hal ini menjadi masalah ketika pada prakteknya kita membutuhkan lebih banyak cron job dari total entri cron job yang disediakan oleh layanan server.

Hal ini bisa diatasi dengan membuat entri cron job untuk dieksekusi dari pihak eksternal/3rd party. Dan, pada tulisan ini, kita akan melihat contoh pelaksanaannya dengan layanan cron job dari www.cron-job.org.

Daftarnya sangat mudah, tinggal masuk ke halaman sign up,lalu isikan data diri seperti pendaftaran biasa. Layanan ini disediakan secara gratis, tanpa ada embel-embel trial ataupun premium account. Jumlah cron job yang bisa ditambahkan tidak dibatasi, namun selalu direkomendasikan untuk menggunakan layanan secara wajar. Jika tidak, tentu akun anda akan kena banned.

Perlu diperhatikan juga mengenai efisiensi waktu eksekusi script yang diinputkan sebagai cron job. Karena banyak user yang memakai layanan ini, setiap script harus selesai dalam maksimal 30 detik. Jika script melebihi waktu itu secara berulang-ulang, pihak sana akan melakukan suspend script tersebut.



Demikianlah informasi mengenai cara menambah entri cron job yang dibatasi jumlahnya oleh server. Selamat mencoba, mudah-mudahan bermanfaat.
Read more

Cara Membuat Tombol Share di Blogger Dalam 3 Langkah (Gaya Simple + Elegant)


Sebuah blog populer biasanya akan banyak memperoleh feedback dari pembacanya. Contoh bentuknya adalah share artikel ke media sosial. Mulai dari yang paling populer, Facebook, sampai dengan media sosial ala chatting seperti Whatsapp.

Pengetahuan utama yang harus diketahui adalah alamat link share media sosial yang dituju. Setelah diketahui, sebuah tombol share baru bisa ditambahkan berdasarkan link tersebut. Agar terliihat menarik, tombol share dilengkapi dengan ikon yang berkorelasi dengan tujuan share media sosial.

Contoh link share (Facebook & Twitter) :
https://www.facebook.com/sharer/sharer.php?u=LINK_ARTIKEL&t=JUDUL_ARTIKEL
https://twitter.com/intent/tweet?source=LINK_ARTIKEL&text=TWEET

Simpelnya, kita bisa membuat link share dengan tag HTML anchor ( <a>), lalu menambahkan ikon di dalamnya agar terlihat menarik. Pertanyaannya, dimana kita tahu judul dan link artikel yang perlu disisipkan pada link tersebut?

Untuk platform blogger,  judul dan link artikel bisa diperoleh dengan script layout data tags. Pakai data:post.title untuk memperoleh judul dan data:post.link untuk link artikel. Contohnya...

<a expr:href='&quot;https://www.facebook.com/sharer/sharer.php?u=&quot; + data:post.url + &quot;&amp;t=&quot; + data:post.title' target='_blank'>....</a>

Agar lebih menarik, kita gunakan ikon font awesome. Sehingga menjadi seperti ini...

<a expr:href='&quot;https://www.facebook.com/sharer/sharer.php?u=&quot; + data:post.url + &quot;&amp;t=&quot; + data:post.title' target='_blank' title='Share on Facebook'>
   <i aria-hidden='true' class='fa fa-facebook-square fa-2x'></i>
</a>

Oke, langsung saja. Pertama cari kode <b:includable id='shareButtons' pada template anda.

<b:includable id='shareButtons' var='post'>
 ...
</b:includable>

Ubah semua isinya menjadi kode berikut ini.

<b:includable id='shareButtons' var='post'>
  <ul class='custom-share-buttons'>
<li>
 <a expr:href='&quot;https://www.facebook.com/sharer/sharer.php?u=&quot; + data:post.url + &quot;&amp;t=&quot; + data:post.title' target='_blank' title='Share on Facebook'>
<i aria-hidden='true' class='fa fa-facebook-square fa-2x'>
</i>
<span class='sr-only'>
 Share on Facebook
</span>
 </a>
</li>
<li>
 <a expr:href='&quot;https://twitter.com/intent/tweet?source=&quot; + data:post.url + &quot;&amp;text=&quot;+ data:post.title + &quot;:%20&quot; + data:post.url' target='_blank' title='Tweet'>
<i aria-hidden='true' class='fa fa-twitter-square fa-2x'>
</i>
<span class='sr-only'>
 Tweet
</span>
 </a>
</li>
<li>
 <a expr:href='&quot;https://plus.google.com/share?url=&quot; + data:post.url' target='_blank' title='Share on Google+'>
<i aria-hidden='true' class='fa fa-google-plus-square fa-2x'>
</i>
<span class='sr-only'>
 Share on Google+
</span>
 </a>
</li>
<li>
 <a expr:href='&quot;http://www.tumblr.com/share?v=3&amp;u=&quot; + data:post.url + &quot;&amp;t=&quot; +  data:post.title + &quot;&amp;s=&quot;' target='_blank' title='Post to Tumblr'>
<i aria-hidden='true' class='fa fa-tumblr-square fa-2x'>
</i>
<span class='sr-only'>
 Post to Tumblr
</span>
 </a>
</li>
<li>
 <a expr:href='&quot;http://pinterest.com/pin/create/button/?url=&quot; + data:post.url + &quot;&amp;media=&quot; +  data:post.thumbnailUrl + &quot;&amp;description=&quot; + data:post.snippet' target='_blank' title='Pin it'>
<i aria-hidden='true' class='fa fa-pinterest-square fa-2x'>
</i>
<span class='sr-only'>
 Pin it
</span>
 </a>
</li>
<li>
 <a expr:href='&quot;http://www.reddit.com/submit?url=&quot; + data:post.url + &quot;&amp;title=&quot; + data:post.title' target='_blank' title='Submit to Reddit'>
<i aria-hidden='true' class='fa fa-reddit-square fa-2x'>
</i>
<span class='sr-only'>
 Submit to Reddit
</span>
 </a>
</li>
<li>
 <a expr:href='&quot;http://www.linkedin.com/shareArticle?mini=true&amp;url=&quot; + data:post.url + &quot;&amp;title=&quot; + data:post.title + &quot;&amp;summary=&quot; + data:post.snippet + &quot;&amp;source=&quot; + data:post.url' target='_blank' title='Share on LinkedIn'>
<i aria-hidden='true' class='fa fa-linkedin-square fa-2x'>
</i>
<span class='sr-only'>
 Share on LinkedIn
</span>
 </a>
</li>
<li>
 <a expr:href='&quot;mailto:?subject=&quot; + data:post.title + &quot;&amp;body=&quot; + data:post.snippet + &quot;:%20&quot; + data:post.url' target='_blank' title='Send email'>
<i aria-hidden='true' class='fa fa-envelope-square fa-2x'>
</i>
<span class='sr-only'>
 Send email
</span>
 </a>
</li>
  </ul>
</b:includable>

Langkah berikutnya, sisipkan kode CSS berikut di atas tag </head> template anda.
<style>
ul.custom-share-buttons li {
display: inline-block;
border: none !important;
padding: 5px !important;
}
.custom-share-buttons li a, .custom-share-buttons li a:visited {
color: #888;
}
.custom-share-buttons li a:hover {
color: #444;
}
</style>

Terakhir, cari kode awesome.min.css atau awesome.css di template anda. Jika keduanya tidak ada, sisipkan kode berikut di bawah tag <head> atau sebelum kode CSS di atas.

<link crossorigin='anonymous' href='https://opensource.keycdn.com/fontawesome/4.7.0/font-awesome.min.css' integrity='sha384-dNpIIXE8U05kAbPhy3G1cz+yZmTzA6CY8Vg/u2L9xRnHjJiAK76m2BIEaSEV+/aU' rel='stylesheet'/>

Dan, selesai. Selamat mencoba :)
Btw, jika tampilan belum sesuai keinginan atau melenceng dari screenshot artikel ini, silahkan berkomentar. Nanti akan saya bantu mengarang kodenya.
Read more

Sabtu, 17 Juni 2017

Perbedaan Type Data INT dan LONG di C / C++

Tipe data kadang harus dipilih dengan benar agar, efisiensi memori dapat tercapai. Pemilihannya tergantung pada kemungkinan nilai terkecil dan terbesar yang akan muncul saat program berjalan / runtime.

Sementara itu, bahasa C memiliki beberapa tipe data standar untuk menyimpan bilangan berjenis integer / bilangan bulat.

TypeStorage sizeValue range
char1 byte-128 to 127 or 0 to 255
unsigned char1 byte0 to 255
signed char1 byte-128 to 127
int4 bytes-2,147,483,648 to 2,147,483,647
unsigned int2 or 4 bytes0 to 65,535 or 0 to 4,294,967,295
short2 bytes-32,768 to 32,767
unsigned short2 bytes0 to 65,535
long4 bytes-2,147,483,648 to 2,147,483,647
unsigned long4 bytes0 to 4,294,967,295
Sumber : https://www.tutorialspoint.com/cprogramming/c_data_types.htm

Tidak ada yang aneh dengan semua tipe data pada tabel di atas, kecuali INT dan LONG yang memiliki ukuran penyimpanan sama (4 bytes). Anehnya lagi, referensi juga bisa mengatakan bahwa INT bisa berukuran serupa SHORT (2 byte). Bagaimana? dan; Mengapa?

Mengenai keanehan kedua, tidak perlu dikhawatirkan lagi. Ukuran INT hanya 2 byte saat masih banyak prosesor 16-bit bertebaran. Sementara sekarang, 32-bit kian menguasai pasar, sehingga hampir dapat dipastikan bahwa INT selalu berukuran 4 byte.

Sebenarnya, dari semua type data di atas; ketentuan value range merupakan ketentuan yang di atur oleh standarisasi C. Meski pada umumnya INT berukuran 4 byte di prosesor 32-bit, ukurannya bisa berbeda jika program dicompile dengan compiler atau arsitektur prosesor lain. Misalnya, banyak yang mengatakan INT dapat menampung data antara -2,147,483,648 hingga 2,147,483,647. Namun itu bukan berarti INT selalu berukuran 4 byte. Compiler bisa memilih 4 byte, 8 byte, bahkan 16 byte; selama mungkin dilakukan dan ukuran byte tersebut mampu menampung data antara  -2,147,483,648 hingga 2,147,483,647.

Pernyataan di atas semakin diperkuan dengan referensi yang penulis peroleh dari Wikipedia; bahwa, ukuran byte dari tipe data dapat bervariasi pada implementasinya. Jadi, hati-hati saat menggunakan tipe data antara INT dan LONG. Menurut standarisasi bahasa C, keduanya dianjurkan agar dapat menampung data antara -2,147,483,648 hingga 2,147,483,647. Sehingga umumnya variabel ini sama-sama berukuran 4-byte. Namun, kadang tipe LONG bisa berukuran 4 byte saat program dicompile pada prosesor 64-bit.

Sebagai contoh kasus, saya menemukan referensinya dari sini, katanya :
For 32-bit systems, the 'de facto' standard is ILP32 — that is, int, long and pointer are all 32-bit quantities.

For 64-bit systems, the primary Unix 'de facto' standard is LP64 — long and pointer are 64-bit (but int is 32-bit). The Windows 64-bit standard is LLP64 — long long and pointer are 64-bit (but long and int are both 32-bit).

Lalu apa?
Saran dari saya, jika anda sangat mementingkan efisiensi penyimpanan data dan anda ingin menyimpan data antara -2,147,483,648 hingga 2,147,483,647; gunakan tipe INT, karena secara umum implementasinya selalu menggunakan variabel berukuran 4 byte.

Apa pentingnya?
Anda mungkin belum menduga betapa pentingnya hal ini. Beberapa project yang saya kerjakan adalah poject open source, tentu saja harus ada jaminan kode ini bisa dicompile rang lain. Beberapa implementasi kode harus mengikuti dokumen standar yang telah ditetapkan. Seringnya, dokumen mengatakan secara implisit bahwa tipe data yang harus digunakan berukuran 4 byte. Nah, jika menemukan hal demikian INT adalah yang sesuai untuk dipakai, karena meski ukuran LONG di compiler saya 4 byte, ukurannya bisa berlainan di komputer atau compiler lain.

Read more

Jumat, 16 Juni 2017

Cara Melacak Akun Pemilik Blog AGC/Pencuri Konten

Akhir-akhir ini marak ditemukan tindakan pelanggaran hak cipta di internet dalam bentuk pencurian artikel. Saya prihatin sekaligus bersedih, karena pelaku ini akan selalu berusaha menyembunyikan diri dan rasanya akan sulit dilacak.

Yang menyakitkan, ada pencuri yang berani menyalin konten secara habis-habisan (semua posting blog). Mereka menggunakan script AGC(Auto Generated Content) yang menyalin konten dari RSS Feed. Sebenarnya, hal ini bisa mudah dihindari dengan menyajikan feed dalam bentuk ringkasan. Namun, bagaimana bila sudah terlanjur dan pelaku bersembunyi?

Kejadian kasus AGC pernah menimpa blog Komputoo dan salah satu teman penulis, namanya Kholid Farhan. Pelaku berusaha mengelabuhi korban dengan menyembunyikan nama pengarang pada tiap posting blog. Kami sempat kebingungan. Dalam waktu bersamaan saya menemukan blog kami dicuri oleh sebuah blog AGC yang sama.

Bodohnya, kami mencari pelaku di grup facebook Blogger Indonesia secara terang-terangan. Lagian, mana ada maling yang mau ngaku, sih? Apa lagi dipaksa ngaku di depan umum! :v

Dalam keadaan bingung, saya mencoba memutar akal.
- Klik kanan blog tersangka
- Pilih view source
- Ctrl+F
- Cari Email atau kontak lain dengan pattern tertentu.

Ternyata tidak ada data berarti yang dapat saya temukan. Namun, jika beruntung bisa saja kita menemukan kontak dalam berbagai bentuk yang disembunyikan, misalnya nomor ponsel, akun media sosial atau email.

Taktik kedua, saya menggali informasi dari RSS feed. Beruntung sekali, pelaku menggunakan platform Blogger. Sebaik apapun ia menyembunyikan link RSS nya, tetap saja, alamat feed posting blogger akan selalu berwujud demikian:
http://pelaku.blogspot.com/feeds/posts/default
atau
http://pelaku.blogspot.com/feeds/posts/default?alt=rss

Dari pelacakan ini, kita bisa memperoleh nama dan akun G+ si pelaku AGC.

Selanjutnya, tinggal cari kontak yang bisa dihubungi untuk merembugkan kasus ini dengan baik-baik. Lacak juga namanya dari list anggota grup Blogger yang sering anda kunjungi untuk sharing link. Karena umumnya pelaku tahu link anda dari grup tersebut. tidak perlu marah-marah, pasti dia ngerti kok, Kalau marah, takutnya pelaku malah kabur. :D
Read more

Pengertian File System dan Beberapa Macam File System

File system atau sistem berkas adalah mekanisme manajemen berkas dalam suatu media penyimpanan dengan tujuan untuk memudahkan akses berkas tersebut secara efektif serta efisien. Dalam kerjanya, sebuah file system memiliki beberapa subfungsi/subsystem untuk mencapai target manajemen efektif dan efisien.

File system diimplementasikan oleh sistem operasi untuk mengatasi keterbatasan kemampuan dari media penyimpanan tersebut. Sehingga sebuah berkas di dalam media penyimpanan bukan hanya dapat disimpan datanya saja. Karena yang terpenting, file system juga akan mengatur bagaimana nama berkas disimpan.

Sebuah berkas bukan saja terdiri atas data, namun juga komponen metadata/informasi mengenai data yang bersangkutan. Apabila dijabarkan, sebuah berkas paling tidak terkandung komponen dasar sebagai berikut:
- data
- nama berkas
- ukuran berkas
- atribut berkas  (misalnya read only atau hidden)
- pemilik berkas
- informasi berkas (waktu pembuatan, waktu modifikasi, ...)

Bukan hanya itu, file system juga harus mampu mengalokasikan seluruh jenis data di atas di dalam disk. Ini karena kemampuan abstrak disk yang terbatas hanya pada pembacaan dan penulisan data.

Sebuah media penyimpanan masa kini umumnya bermodel alokasi berbasis sektoral. Setiap sektor menampung data sebanyak 512 byte. Setiap sektor akan dialamatkan dengan logical block address 0, 1, 2, 3, ...., dst.

Data yang tersimpan dalam sektor  bersifat universal jika dilihat dari sudut pandang media penyimpanan. Artinya, media memandang semua data tersebut sama saja. Jadi, media tidak mampu membedakan apakah data di dalam sektor X merupakan bagian data dari suatu berkas, data mengenai nama berkas, atau mungkin data informasi mengenai berkas. Nah, tugas filesystem adalah mengatasi masalah mendasar tersebut.

Ada banyak jenis filesystem yang bisa ditemui. Perbedaan besar diantara mereka terletak pada bagaimana file system melakukan alokasi komponen berkas ke dalam sektor media penyimpanan, Namun secara garis besar jenis data yang disimpan tetap sama:
- data berkas
- nama berkas
- informasi mengenai berkas.

Komponen informasi mengenai berkas juga banyak memiliki perbedaan disamping kesamaan. Sebagai contoh, beberapa perbandingan file system EXT dan FAT pada aspek informasi file akan nampak seperti berikut.
Informasi mengenai berkas yang sama-sama ada:
- atribut file
- waktu pembuatan file
- waktu modifikasi file
Informasi yang hanya ada di EXT *:
- pemilik file
- hak akses file

* Kedua informasi di atas ada karena semua file dalam EXT bisa dikhususkan untuk dapat dipakai untuk pemakai tertentu saja, sedangkan semua file dalam FAT bebas diakses siapa pun.

Ada banyak sekali macam filesystem. Sebenarnya kesemua jenis ini bisa saja dipakai oleh sistem operasi manapun, akan tetapi beberapa jenis file system memang dipersembahkan khusus untuk sistem operasi tertentu. Untuk dapat menggunakan file system lain, terkadang kita harus menginstall driver untuk file system tersebut, karena sistem operasi belum menyediakannya. Berikut daftar sistem berkas yang dapat anda ketahui:

FAT (File Allocation Table)
Adalah file system pertama yang dikembangkan oleh Microsoft untuk sistem CP/M dan DOS. Seiring dengan tumbuhnya Microsoft, FAT generasi awal sering disebut sebagai FAT12, lalu dilakukan diversifikasi varian FAT16 dan FAT32 yang dapat digunakan untuk kapasitas media lebih besar.

FAT12
FAT12 merupakan sistem berkas yang menggunakan unit alokasi yang memiliki batas hingga 12-bit. File System ini hanya dapat menampung maksimum hanya 12^2 unit alokasi saja atau sebanyak 4096 buah. FAT12 pertama kali digunakan pada Sistem Operasi MS-DOS. Karena kapasitasnya sedikit yakni hanya 32 MB, maka FAT12 hanya digunakan sebagai file system pada media penyimpanan floppy disk.

FAT16
FAT16 merupakan sistem berkas yang menggunakan unit alokasi yang memiliki batas hingga 16-bit. File System ini dapat menampung maksimum 2^16 unit alokasi atau sebanyak 65536. Kapasitas File System ini sebanyak 4 GB, jauh melebihi versi sebelumnya yang hanya 32 MB. Ukuran unit alokasi yang digunakan FAT16 tergantung kapasitas partisi harddisk yang akan diformat. Jika kapasitasnya kurang dari 16 MB, maka yang akan digunakan adalah FAT12. Jika melebihi 16 MB maka yang digunakan adalah FAT16.

FAT32
FAT32 merupakan sistem berkas yang menggunakan unit alokasi yang memiliki batas hingga 32-bit. File System ini dapat menampung maksimum 2^32 unit alokasi atau sebanyak 4294967296. Meskipun demikian, dalam implementasinya, jumlah unit alokasi yang dapat dialamati oleh FAT32 hanya 2^28 atau 268435456 buah. FAT32 pertama kali dikenalkan pada Sistem Operasi Windows 95 OSR2. Pada Sistem Operasi Windows NT 5.x ke atas, hanya mengizinkan pembuatan partisi FAT32 hingga 32 GB. Jika partisinya melebihi 32 GB, maka yang akan digunakan adalah File System NTFS.

exFAT
exFAT singkatan dari Extended File Allocation Table atau sering disebut sebagai FAT64. exFAT merupakan sistem berkas proprietary yang cocok untuk digunakan oleh media-media penyimpanan berbasis memori flash.


NTFS (New Technology File System)

NTFS merupakan File System yang memiliki sebuah desain sederhana namun memiliki kemampuan yang lebih baik dibandingkan FAT File System. NTFS pertama kali dikenalkan Microsoft pada Sistem Operasi Windows NT dan mendukung Sistem Operasi yang terbaru yaitu Windows 7. Sejak pertama kali dibuat hingga sekarang, NTFS telah mengalami perkembangan. Beberapa versi NTFS antara lain:

NTFS versi 1.0
NTFS ini datang bersama dengan Windows NT 3.1. Versi ini menawarkan fungsi yang sangat dasar, tetapi sudah jauh lebih baik dibandingkan FAT File System.

NTFS versi 1.1
NTFS ini datang bersama dengan Windows NT 3.50. Versi ini menambahkan dukungan terhadap pengaturan akses secara diskrit (discretionary access control).

NTFS versi 1.2
NTFS ini datang bersama dengan Windows NT 4.0. Versi ini menambahkan dukungan terhadap auditing setiap berkas dan juga kompresi transparan.

NTFS versi 2.0
NTFS ini tidak dirilis secara umum, karena berbagai kendala yang dialaminya, yang tidak diumumkan oleh Microsoft. Microsoft menggagalkan proyek NTFS 2.0 dan langsung menginjak NTFS 3.0

NTFS versi 3.0
NTFS ini datang bersama dengan Windows 2000. Versi ini menawarkan banyak peningkatan dibandingkan dengan versi sebelumnya. Di antaranya adalah penetapan kuota kepada setiap pengguna, Encrypting File System (EFS), sistem keamanan yang dapat diatur dari server pusat, fitur indeksasi terhadap properti dan isi setiap berkas, dan lain-lain. Selain itu, NTFS 3.0 juga menawarkan dukungan kepada struktur GUID Partition Table dan Logical Disk Management.

NTFS versi 3.1
NTFS ini datang bersama dengan Windows XP SP1 dan Windows Server 2003. Versi ini menawarkan perbaikan yang minor yang terjadi dalam versi sebelumnya (khususnya di bidang performa), dan juga penggantian algoritma enkripsi yang digunakan oleh EFS dari DESX atau 3DES menjadi AES-256.

Ext(Extended File System)
Ext 2 (2nd Extended)
Ext 2 merupakan tipe file system yang paling tua yang masih ada. File system ini pertama kali dikenalkan pada tahun 1993. Ext 2 adalah file system yang paling ampuh di linux dan menjadi dasar dari segala distribusi linux. Pada Ext 2 file system, file data disimpan sebagai data blok. Data blok ini mempunyai panjang yang sama dan meskipun panjangnya bervariasi di antara Ext 2 file system, besar blok tersebut ditentukan pada saat file system dibuat dengan mk2fs. Jika besar blok adalah 1024 bytes, maka file dengan besar 1025 bytes akan memakai 2 blok. Ext 2 File System menyimpan data secara hirarki standar yang banyak digunakan oleh sistem operasi. Data tersimpan di dalam file, file tersimpan di dalam direktori. Sebuah direktori bisa mencakup file dan direktori lagi di dalamnya yang disebut sub direktori.

Ext 3 (3rd Extended)
Ext 3 merupakan peningkatan dari Ext 2 File System. Beberapa peningkatan yang ada antara lain:

Journaling:
Dengan menggunakan journaling, maka waktu recovery pada shut down yang mendadak tidak akan selama pada Ext 2.

Integritas Data:
Ext 3 menjamin adanya integritas data setelah terjadi kerusakan atau unclean shut down. Ext 3 memungkinkan kita memilih jenis dan tipe proteksi dari data.

Kecepatan:
Daripada menulis data lebih dari sekali, Ext 3 mempunyai throughput yang lebih besar daripada Ext 2 karena Ext 3 memaksimalkan pergerakan head harddisk. Kita bisa memilih tiga jurnal mode untuk memaksimalkan kecepatan, tetapi integritas data tidak terjamin.

Mudah Dilakukan Migrasi:
Kita dapat melakukan migrasi atau konversi dari Ext 2 ke Ext 3 tanpa harus melakukan format ulang pada harddisk.

Di samping keunggulan di atas, Ext 3 juga memiliki kekurangan. Dengan adanya fitur journaling, maka membutuhkan memori yang lebih dan memperlambat operasi I/O.

Ext 4 (4th Extended)
Ext 4 dirilis secara komplit dan stabil berawal dari kernel 2.6.28. Jadi, apabila distro yang secara default memiliki kernel tersebut atau di atasnya secara otomatis system sudah support Ext 4. Apabila masih menggunakan Ext 3, dapat dilakukan konversi ke ext 4 dengan beberapa langkah yang tidak terlalu rumit.

Keuntungan menggunakan Ext 4 ini adalah mempunyai pengalamatan 48-bit blok yang artinya dia akan mempunyai 1 EiB = 1.048.576 TB ukuran maksimum file system dengan ukuran 16 TB untuk maksimum file sizenya, fast fsck, journal checksumming, defragmentation support.

Selain dari beberapa macam file system di atas, ada pula sistem berkas yang masih jarang dikenal. Ada CDFS(ISO 9660), UDF, HPFS, ReiserFS, BtrFS, BeFS, BFS, MFS, LEAN, dan masih banyak lagi.

Referensi : https://dhanz3rd.wordpress.com/2010/12/14/file-system-di-windows-dan-linux/
Read more

Kamis, 01 Juni 2017

Pengertian Spinlock dan Implementasinya

Multitasking adalah tantangan baru bagi programmer sistem operasi. Ada banyak macam resource yang harus digunakan oleh semua thread, namun jumlahnya terbatas, dan tidak mungkin diakses bersamaan. Untuk itu, masing-masing thread harus dapat diatur agar dapat mengaksesnya secara bergiliran secara sinkron.

Dalam hal ini, synchronization primitives adalah metode yang perlu diimplementasikan dalam sebuah sistem operasi. Synchronization primitives yaitu sebutan untuk metode yang dapat menjamin seluruh task dalam sistem multitasking agar dapat berjalan secara sinkron dalam pengaksesan sebuah resource.
 
void putchar(int chr){
   ...
}

void print(char * str){
   while (* str){
      putchar(*str);
      str++;
   }
}

Kode di atas adalah contoh sederhana, dimana programmer harus mulai mempertimbangkan untuk mengimplementasikansynchronization primitive. Bayangkan jika dua task mengakses print() secara hampir bersamaan dalam sistem multitasking. Belum sempat salah satu task mencetak satu per satu karakter dari string, tiba-tiba terjadi task switch ke task lain yang juga ingin menggunakan fungsi print().

task 1:
print (“hello”);
task 2:
print (“world”);

Tanpa sinkronisasi, bisa jadi yang akan tampil di layar terlihat kacau. Misalnya saja, apabila setiap baru saja mencetak sebuah karakter, terburu terjadi task switch, mungkin akan tampil seperti ini.


hweolrllod
Spinlock adalah salah satu metode sinkronisasi dengan menerapkan lock. Contohnya pada fungsi print() yang sudah dimodifikasi di bawah ini. Selama fungsi print() diakses oleh salah satu task, print_lock akan tetap bernilai 1. Task lain yang perlu mengakses print() wajib menunggu hingga task sebelumnya menyelesaikan print dan mengembalikan print_lock sehingga bernilai 0.

char print_lock;
void print(char * str){
   acquire_spinlock(&print_lock);
   while (* str){
      putchar(*str);
      str++;
   }
   release_spinlock(&print_lock);
}

Task yang lebih dahulu memanggil print() akan memanggilacquire_spinlock(). Fungsi ini akan meng-set variabel print_lock = 1 apabila print_lock masih bernilai 0, lalu segera melanjutkan eksekusi. Task lain yang berjalan bersamaan namun sedikit tertinggal, akan mengalami peristiwa busy-waiting ketika memanggil acquire_spinlock(), karena print_lock masih di-set bernilai 1 oleh task sebelumnya. Busy-waiting akan terus berlangsung hingga task sebelumnya memanggil release_spinlock(), sehingga meng-set print_lock = 0.

Algoritma
Acquire Spinlock:
1. Tunggu hingga lock bernilai 0.
2. Jika lock sudah 0, set lock = 1.

Release Spinlock:
1. Set lock = 0.

Implementasi
Sederhananya, acquire_spinlock() bisa saja ditulis dengan kode C semacam ini:
void acquire_spinlock(char * lock ){
   while (* lock != 0){
      //do nothing
      //busy-waiting
   }
   * lock = 1;
}

Akan tetapi, dalam dunia nyata, kode di atas jauh kurang efektif. Apalagi dalam keadaan thread yang cukup padat. Ini karena jika diuraikan, kode while() akan diterjemahkan compiler menjadi serangkaian instruksi assembly yang rumit.

tes:
cmp BYTE PTR [print_lock], 0
jne tes
mov BYTE PTR [print_lock], 1

Misalnya, katakanlah terdapat 3 task yang sama-sama melakukan acquire. Task 1 baru saja melepas print_lock. Sayangnya, setelah itu task 2 dan task 3 secara bersamaan baru saja selesai melakukan instruksi CMP yang memberikan sinyal bahwa print_lock sudah terlepas, namun sama-sama pula terjadi task switch sebelum menjalankan instruksi JNE. Akhirnya, task 2 dan task 3 lolos dari lock lalu mengakses fungsi print() secara bersamaan.
Kondisi seperti itu dapat dihindari dengan memanfaatkan atomic operation, yaitu dengan memanfaatkan instruksi assembly yang dapat melakukan acquire tanpa harus melakukan instruksi pembandingan (CMP) ataupun testing terlebih dahulu. Dalam arsitektur intel, ini bisa dilakukan dengan instruksi XCHG yang diinputkan melalui inline assembly.

tes:
mov al, 1
xchg BYTE PTR [print_lock], al
cmp al,1
je tes

Selama XCHG menghasilkan nilai 1, sudah diketahui bahwa print_lock masih dikuasai task lain, namun jika 0, artinya task sudah berhasil mengambil alih lock. Meskipun terjadi task switch antar banyak task, semuanya tidak akan dapat melewati taktik XCHG.

inline unsigned char _atomic_xchg8(unsigned char* lock, unsigned char x ){
   asm volatile("xchg %1, %0":"=r" (x):"m"(*(volatile unsigned char *)lock),"0" (x):"memory");
   return x;
}

inline void acquire_spinlock(unsigned char *lock){
   while ( 1){
      if ( _atomic_xchg8(lock, 1)== 0) return ;
      while (* lock != 0){
         asm("pause");
      }
   }
}

inline void release_spinlock(unsigned char *lock){
   * lock = 0;
}
Read more