Still learn about all

i want to know all about in the world and all

Sejarah Hacker

Posted by mahatma88 on February 15th, 2009

Sikap para hacker

Pekerjaan hacker menyelesaikan masalah dan membangun sesuatu, dan hacker percaya pada kebebasan dan kerjasama sukarela. Agar dapat diterima sebagai seorang hacker, Anda harus berbuat seolah-olah Anda memiliki sikap ini. Dan agar dapat berbuat demikian, sikap ini harus benar-benar diyakini.

Tapi kalau Anda berniat menumbuhkan sikap ini hanya agar dapat diterima di lingkungan hacker, maka Anda belum menangkap maknanya. Menjadi orang yang meyakini sikap hacker penting bagi Anda sendiri — agar bisa terus belajar dan termotivasi. Sama seperti semua seni kreatif lain, cara paling efektif untuk menjadi seorang ahli adalah dengan meniru cara berpikir ahli-ahli lainnya — bukan hanya secara intelektual tapi juga emosional.

Seperti diungkapkan oleh sebuah sajak Zen modern di bawah:

Untuk mengikuti jalan:
pandanglah sang ahli,
ikuti sang ahli,
berjalan bersama sang ahli,
kenali sang ahili,
jadilah sang ahli.

Hacker muncul pada awal tahun 1960-an diantara para anggota organisasi
mahasiswa Tech Model Railroad Club di Laboratorium Kecerdasan Artifisial
Massachusetts Institute of Technology (MIT). Kelompok mahasiswa tersebut
merupakan salah satu perintis perkembangan teknologi komputer dan mereka
beroperasi dengan sejumlah komputer mainframe. Kata hacker pertama kali muncul
dengan arti positif untuk menyebut seorang anggota yang memiliki keahlian dalam
bidang komputer dan mampu membuat program komputer yang lebih baik dari yang
telah dirancang bersama. Kemudian pada tahun 1983, analogi hacker semakin
berkembang untuk menyebut seseorang yang memiliki obsesi untuk memahami dan
menguasai sistem komputer. Pasalnya, pada tahun tersebut untuk pertama kalinya
FBI menangkap kelompok kriminal komputer The 414s yang berbasis di Milwaukee
AS. 414 merupakan kode area lokal mereka. Kelompok yang kemudian disebut hacker
tersebut dinyatakan bersalah atas pembobolan 60 buah komputer, dari komputer
milik Pusat Kanker Memorial Sloan-Kettering hingga komputer milik Laboratorium
Nasional Los Alamos. Salah seorang dari antara pelaku tersebut mendapatkan
kekebalan karena testimonialnya, sedangkan 5 pelaku lainnya mendapatkan hukuman
masa percobaan.

Kemudian pada perkembangan selanjutnya muncul kelompok lain yang
menyebut-nyebut diri hacker, padahal bukan. Mereka ini (terutama para pria
dewasa) yang mendapat kepuasan lewat membobol komputer dan mengakali telepon
(phreaking). Hacker sejati menyebut orang-orang ini ‘cracker’ dan tidak suka
bergaul dengan mereka. Hacker sejati memandang cracker sebagai orang malas,
tidak
bertanggung jawab, dan tidak terlalu cerdas. Hacker sejati tidak setuju jika
dikatakan bahwa dengan menerobos keamanan seseorang telah menjadi hacker.

Para hacker mengadakan pertemuan setiap setahun sekali yaitu diadakan setiap
pertengahan bulan Juli di Las Vegas. Ajang pertemuan hacker terbesar di dunia
tersebut dinamakan Def Con. Acara Def Con tersebut lebih kepada ajang
pertukaran informasi dan teknologi yang berkaitan dengan aktivitas hacking.

Pengertian Hacker dan Cracker

1. Hacker

Hacker adalah sebutan untuk mereka yang memberikan sumbangan yang bermanfaat
kepada jaringan komputer, membuat program kecil dan membagikannya dengan
orang-orang di Internet. Sebagai contoh : digigumi (Grup Digital) adalah sebuah
kelompok yang mengkhususkan diri bergerak dalam bidang game dan komputer.
Digigumi ini menggunakan teknik teknik hexadecimal untuk mengubah teks yang
terdapat di dalam game. Contohnya, game Chrono Trigger berbahasa Inggris dapat
diubah menjadi bahasa Indonesia. Oleh karena itu, status Digigumi adalah
hacker, namun bukan sebagai perusak. Hacker disini artinya, mencari,
mempelajari dan mengubah sesuatu untuk keperluan hobi dan pengembangan dengan
mengikuti legalitas yang telah ditentukan oleh developer game. Para hacker
biasanya melakukan penyusupan-penyusupan dengan maksud memuaskan pengetahuan
dan teknik. Rata - rata perusahaan yang bergerak di dunia jaringan global
(internet) juga memiliki hacker. Tugasnya yaitu untuk menjaga jaringan dari
kemungkinan perusakan pihak luar “cracker”, menguji jaringan dari kemungkinan
lobang yang menjadi peluang para cracker mengobrak - abrik jaringannya, sebagai
contoh : perusahaan asuransi dan auditing “Price Waterhouse”. Ia memiliki team
hacker yang disebut dengan Tiger Team. Mereka bekerja untuk menguji sistem
sekuriti client mereka.

2. Cracker

Cracker adalah sebutan untuk mereka yang masuk ke sistem orang lain dan cracker
lebih bersifat destruktif, biasanya di jaringan komputer, mem-bypass password
atau lisensi program komputer, secara sengaja melawan keamanan komputer,
men-deface (merubah halaman muka web) milik orang lain bahkan hingga men-delete
data orang lain, mencuri data dan umumnya melakukan cracking untuk keuntungan
sendiri, maksud jahat, atau karena sebab lainnya karena ada tantangan. Beberapa
proses pembobolan dilakukan untuk menunjukan kelemahan keamanan sistem.

Hirarki / Tingkatan Hacker

1. Elite

Ciri-ciri : mengerti sistem operasi luar dalam, sanggup mengkonfigurasi &
menyambungkan jaringan secara global, melakukan pemrogramman setiap harinya,
effisien & trampil, menggunakan pengetahuannya dengan tepat, tidak
menghancurkan data-data, dan selalu mengikuti peraturan yang ada. Tingkat Elite
ini sering disebut sebagai ’suhu’.

2. Semi Elite

Ciri-ciri : lebih muda dari golongan elite, mempunyai kemampuan & pengetahuan
luas tentang komputer, mengerti tentang sistem operasi (termasuk lubangnya),
kemampuan programnya cukup untuk mengubah program eksploit.

3. Developed Kiddie

Ciri-ciri : umurnya masih muda (ABG) & masih sekolah, mereka membaca tentang
metoda hacking & caranya di berbagai kesempatan, mencoba berbagai sistem sampai
akhirnya berhasil & memproklamirkan kemenangan ke lainnya, umumnya masih
menggunakan Grafik User Interface (GUI) & baru belajar basic dari UNIX tanpa
mampu menemukan lubang kelemahan baru di sistem operasi.

4. Script Kiddie

Ciri-ciri : seperti developed kiddie dan juga seperti Lamers, mereka hanya
mempunyai pengetahuan teknis networking yang sangat minimal, tidak lepas dari
GUI, hacking dilakukan menggunakan trojan untuk menakuti & menyusahkan hidup
sebagian pengguna Internet.

5. Lamer

Ciri-ciri : tidak mempunyai pengalaman & pengetahuan tapi ingin menjadi hacker
sehingga lamer sering disebut sebagai ‘wanna-be’ hacker, penggunaan komputer
mereka terutama untuk main game, IRC, tukar menukar software prirate, mencuri
kartu kredit, melakukan hacking dengan menggunakan software trojan, nuke & DoS,
suka menyombongkan diri melalui IRC channel, dan sebagainya. Karena banyak
kekurangannya untuk mencapai elite, dalam perkembangannya mereka hanya akan
sampai level developed kiddie atau script kiddie saja.

Cracker tidak mempunyai hirarki khusus karena sifatnya hanya membongkar dan
merusak.

Kode Etik Hacker

1. Mampu mengakses komputer tak terbatas dan totalitas.

2. Semua informasi haruslah FREE.

3. Tidak percaya pada otoritas, artinya memperluas desentralisasi.

4. Tidak memakai identitas palsu, seperti nama samaran yang konyol, umur,
posisi, dll.

5. Mampu membuat seni keindahan dalam komputer.

6. Komputer dapat mengubah hidup menjadi lebih baik.

7. Pekerjaan yang di lakukan semata-mata demi kebenaran informasi yang
harus disebar luaskan.

8. Memegang teguh komitmen tidak membela dominasi ekonomi industri
software tertentu.

9. Hacking adalah senjata mayoritas dalam perang melawan pelanggaran batas
teknologi komputer.

10. Baik Hacking maupun Phreaking adalah satu-satunya jalan lain untuk
menyebarkan informasi pada massa agar tak gagap dalam komputer.
Cracker tidak memiliki kode etik apapun.

Aturan Main Hacker

Gambaran umum aturan main yang perlu di ikuti seorang hacker seperti di
jelaskan oleh Scorpio, yaitu:

· Di atas segalanya, hormati pengetahuan & kebebasan informasi.

· Memberitahukan sistem administrator akan adanya pelanggaran keamanan
/ lubang di keamanan yang anda lihat.

· Jangan mengambil keuntungan yang tidak fair dari hack.

· Tidak mendistribusikan & mengumpulkan software bajakan.

· Tidak pernah mengambil resiko yang bodoh - selalu mengetahui
kemampuan sendiri.

· Selalu bersedia untuk secara terbuka / bebas / gratis memberitahukan
& mengajarkan berbagai informasi & metoda yang diperoleh.

· Tidak pernah meng-hack sebuah sistem untuk mencuri uang.

· Tidak pernah memberikan akses ke seseorang yang akan membuat
kerusakan.

· Tidak pernah secara sengaja menghapus & merusak file di komputer yang
dihack.

· Hormati mesin yang di hack, dan memperlakukan dia seperti mesin
sendiri.

Hacker sejati akan selalu bertindak berlandaskan kode etik dan aturan main
sedang cracker tidak mempunyai kode etik ataupun aturan main karena cracker
sifatnya merusak.

Perbedaan Hacker dan Cracker

a. Hacker

1.Mempunyai kemampuan menganalisa kelemahan suatu sistem atau situs. Sebagai
contoh : jika seorang hacker mencoba menguji situs Yahoo! dipastikan isi situs
tersebut tak akan berantakan dan mengganggu yang lain. Biasanya hacker
melaporkan kejadian ini untuk diperbaiki menjadi sempurna.

2.Hacker mempunyai etika serta kreatif dalam merancang suatu program yang
berguna bagi siapa saja.

3. Seorang Hacker tidak pelit membagi ilmunya kepada orang-orang yang serius
atas nama ilmu pengetahuan dan kebaikan.

b. Cracker

1. Mampu membuat suatu program bagi kepentingan dirinya sendiri dan
bersifat destruktif atau merusak dan menjadikannya suatu keuntungan. Sebagia
contoh : Virus, Pencurian Kartu Kredit, Kode Warez, Pembobolan Rekening Bank,
Pencurian Password E-mail/Web Server.

2. Bisa berdiri sendiri atau berkelompok dalam bertindak.

3. Mempunyai situs atau cenel dalam IRC yang tersembunyi, hanya
orang-orang tertentu yang bisa mengaksesnya.

4. Mempunyai IP yang tidak bisa dilacak.

5. Kasus yang paling sering ialah Carding yaitu Pencurian Kartu Kredit,
kemudian pembobolan situs dan mengubah segala isinya menjadi berantakan.
Sebagai contoh : Yahoo! pernah mengalami kejadian seperti ini sehingga tidak
bisa diakses dalam waktu yang lama, kasus clickBCA.com yang paling hangat
dibicarakan tahun 2001 lalu.

Dua Jenis Kegiatan Hacking

1. Social Hacking, yang perlu diketahui : informasi tentang system apa
yang dipergunakan oleh server, siapa pemilik server, siapa Admin yang mengelola
server, koneksi yang dipergunakan jenis apa lalu bagaimana server itu
tersambung internet, mempergunakan koneksi siapa lalu informasi apa saja yang
disediakan oleh server tersebut, apakah server tersebut juga tersambung dengan
LAN di sebuah organisasi dan informasi lainnya

2. Technical Hacking, merupakan tindakan teknis untuk melakukan penyusupan
ke dalam system, baik dengan alat bantu (tool) atau dengan mempergunakan
fasilitas system itu sendiri yang dipergunakan untuk menyerang kelemahan
(lubang keamanan) yang terdapat dalam system atau service. Inti dari kegiatan
ini adalah mendapatkan akses penuh kedalam system dengan cara apapun dan
bagaimana pun.

Contoh Kasus Hacker

1. Pada tahun 1983, pertama kalinya FBI menangkap kelompok kriminal
komputer The 414s(414 merupakan kode area lokal mereka) yang berbasis di
Milwaukee AS. Kelompok yang kemudian disebut hacker tersebut melakukan
pembobolan 60 buah komputer, dari komputer milik Pusat Kanker Memorial
Sloan-Kettering hingga komputer milik Laboratorium Nasional Los Alamos. Salah
seorang dari antara pelaku tersebut mendapatkan kekebalan karena
testimonialnya, sedangkan 5 pelaku lainnya mendapatkan hukuman masa percobaan.

2. Digigumi (Grup Digital) adalah sebuah kelompok yang mengkhususkan diri
bergerak dalam bidang game dan komputer dengan menggunakan teknik teknik
hexadecimal untuk mengubah teks yang terdapat di dalam game. Contohnya : game
Chrono Trigger berbahasa Inggris dapat diubah menjadi bahasa Indonesia. Oleh
karena itu, status Digigumi adalah hacker, namun bukan sebagai perusak.

3. Pada hari Sabtu, 17 April 2004, Dani Firmansyah, konsultan Teknologi
Informasi (TI) PT Danareksa di Jakarta berhasil membobol situs milik Komisi
Pemilihan Umum (KPU) di http://tnp.kpu.go.id dan mengubah nama-nama partai di
dalamnya menjadi nama-nama “unik”, seperti Partai Kolor Ijo, Partai Mbah
Jambon, Partai Jambu, dan lain sebagainya. Dani menggunakan teknik SQL
Injection(pada dasarnya teknik tersebut adalah dengan cara mengetikkan string
atau perintah tertentu di address bar browser) untuk menjebol situs KPU.
Kemudian Dani tertangkap pada hari Kamis, 22 April 2004.

Akibat yang Ditimbulakan oleh Hacker dan Cracker

Hacker : membuat teknologi internet semakin maju karena hacker menggunakan
keahliannya dalam hal komputer untuk melihat, menemukan dan memperbaiki
kelemahan sistem keamanan dalam sebuah sistem komputer ataupun dalam sebuah
software, membuat gairah bekerja seorang administrator kembali hidup karena
hacker membantu administrator untuk memperkuat jaringan mereka.

Cracker : merusak dan melumpuhkan keseluruhan sistem komputer, sehingga
data-data pengguna jaringan rusak, hilang, ataupun berubah.

Kesimpulan

Para hacker menggunakan keahliannya dalam hal komputer untuk melihat, menemukan
dan memperbaiki kelemahan sistem keamanan dalam sebuah sistem komputer ataupun
dalam sebuah software. Oleh karena itu, berkat para hacker-lah Internet ada dan
dapat kita nikmati seperti sekarang ini, bahkan terus di perbaiki untuk menjadi
sistem yang lebih baik lagi. Maka hacker dapat disebut sebagai pahlawan
jaringan sedang cracker dapat disebut sebagai penjahat jaringan karena
melakukan melakukan penyusupan dengan maksud menguntungkan dirinya secara
personallity dengan maksud merugikan orang lain. Hacker sering disebut hacker
putih (yang merupakan hacker sejati yang sifatnya membangun) dan hacker hitam
(cracker yang sifatnya membongkar dan merusak)

Posted in Hacking | 2 Comments »

PHP

Posted by mahatma88 on February 15th, 2009

——————————————-
PENGERTIAN PHP
——————————————-

PHP adalah bahasa pemrograman script yang paling banyak dipakai saat ini. PHP banyak dipakai untuk
memrogram situs web dinamis, walaupun tidak tertutup kemungkinan digunakan untuk pemakaian lain.

Contoh terkenal dari aplikasi PHP adalah phpBB dan MediaWiki (software di belakang Wikipedia). PHP
juga dapat dilihat sebagai pilihan lain dari ASP.NET/C#/VB.NET Microsoft, ColdFusion Macromedia,
JSP/Java Sun Microsystems, dan CGI/Perl. Contoh aplikasi lain yang lebih kompleks berupa CMS yang
dibangun menggunakan PHP adalah Mambo, Joomla!, Postnuke, Xaraya, dan lain-lain.

——————————————-
SEJARAH PHP
——————————————-

PHP pertama kali dibuat oleh Rasmus Lerdorf pada tahun 1995. Pada waktu itu PHP masih bernama FI (Form Interpreted), yang wujudnya berupa sekumpulan script yang digunakan untuk mengolah data form dari web.

Selanjutnya Rasmus merilis kode sumber tersebut untuk umum dan menamakannya PHP/FI, kependekan dari Hypertext Preprocessing’/Form Interpreter. Dengan perilisan kode sumber ini menjadi open source, maka
banyak programmer yang tertarik untuk ikut mengembangkan PHP.

Pada November 1997, dirilis PHP/FI 2.0. Pada rilis ini interpreter PHP sudah diimplementasikan dalam
program C. Dalam rilis ini disertakan juga modul-modul ekstensi yang meningkatkan kemampuan PHP/FI secara signifikan.

Pada tahun 1997, sebuah perusahaan bernama Zend menulis ulang interpreter PHP menjadi lebih bersih, lebih baik, dan lebih cepat. Kemudian pada Juni 1998, perusahaan tersebut merilis interpreter baru
untuk PHP dan meresmikan rilis tersebut sebagai PHP 3.0.

Pada pertengahan tahun 1999, Zend merilis interpreter PHP baru dan rilis tersebut dikenal dengan PHP 4.0. PHP 4.0 adalah versi PHP yang paling banyak dipakai pada awal abad ke-21. Versi ini banyak dipakai disebabkan kemampuannya untuk membangun aplikasi web kompleks tetapi tetap memiliki kecepatan dan stabilitas yang tinggi.

Pada Juni 2004, Zend merilis PHP 5.0. Dalam versi ini, inti dari interpreter PHP mengalami perubahan
besar. Versi ini juga memasukkan model pemrograman berorientasi objek ke dalam PHP untuk menjawab perkembangan bahasa pemrograman ke arah paradigma berorientasi objek.

————————————————————————————–
KELEBIHAN PHP DARI BAHASA PEMROGRAMAN LAIN
————————————————————————————–

1 * Bahasa pemrograman PHP adalah sebuah bahasa script yang tidak melakukan sebuah kompilasi dalam
penggunaanya.

2 * Web Server yang mendukung PHP dapat ditemukan dimana - mana dari mulai IIS sampai dengan apache, dengan configurasi yang relatif mudah.

3 * Dalam sisi pengembangan lebih mudah, karena banyaknya milis - milis dan developer yang siap
membantu dalam pengembangan.

4 * Dalam sisi pemahamanan, PHP adalah bahasa scripting yang paling mudah karena referensi yang
banyak.

5 * PHP adalah bahasa open source yang dapat digunakan di berbagai mesin (linux, unix, windows) dan dapat dijalankan secara runtime melalui console serta juga dapat menjalankan perintah-perintah system.

sumber: http://id.wikipedia.org/wiki/PHP

Posted in education | 2 Comments »

Pengertian Java

Posted by mahatma88 on February 15th, 2009

Sebenernya apa si Java itu, saya sendiri koq sering bertanya … setelah searching-searching dapet dari temen-temen forum juga si … , yaw da saya copas saja ya… semoga tidak ada yang marah hihihi :).

Tulisan ini ditujukan untuk memberikan gambaran sekilas tentang Java bagi para pemrogram dan pengelola sistem (system administrator) dan perancang sistem (system designer). Tulisan ini mencakup penjelasan tentang “apakah Java”, “apa yang dapat dilakukan dengan Java”, dan “bagaimana perkembangan Java sampai saat ini”. Dengan harapan, tulisan ini dapat membantu para pemrogram, pengelola sistem dan juga perancang sistem untuk memutuskan kapan dan dimana dan bagaimana mengimplementasikan teknologi Java dalam sistem mereka. Dan tulisan ini telah diusahakan agar tetap terbuka bagi orang-orang yang tidak mempunyai latar belakang teknis tentang pemrograman dan jaringan komputer. Tulisan ini adalah bagian pembuka dari jalinan ‘cerita’ yang akan menuju kepada pembahasan mengenai pengembangan sistem terdistribusi dengan Java. Kami memulai dengan memberikan gambaran menyeluruh tentang Java ( sebagai bahasa dan sebagai platform ). Dari sana kami akan beranjak kepada pemaparan tentang aspek networking pada Java. Kini, kita hidup dalam sebuah connected world, oleh jaringan komputer. Dimana aplikasi akan bergeser menuju aplikasi berbasis jaringan, aplikasi yang tidak terikat pada sebuah komputer, aplikasi-aplikasi yang bisa saling berkomunikasi, berbagi data , dan menggabungkan kekuatan satu sama lain walaupun dipisahkan oleh jarak yang sangat jauh. Pengetahuan tentang aspek ini sangat penting bagi pihak-pihak yang berkepentingan untuk ambil bagian dalam “trend” itu dengan memanfaatkan kemampuan Java.
Saat ini, Java telah mempunyai teknologi yang dirancang khusus untuk kepentingan pengembangan sistem tersebar (distributed system). Yaitu Remote Method Invocation (RMI). Teknologi RMI inilah yang telah dan sedang kami pelajari. Remote Method Invocation ini akan menuntun kita pada satu teknologi lagi, yang disebut “mobile code” atau dikenal dengan sebutan Agent.

Apakah Java ?

Java adalah sebuah bahasa pemrograman dan juga sebuah platform. Sebagai sebuah bahasa pemrograman tingkat tinggi, Java adalah sebuah bahasa berorientasi objek (object oriented programming). Jika anda pernah memprogram dengan bahasa pemrograman OOP , seperti C++ atau Smalltalk , mungkin anda ingat betapa menyenangkannya memprogram dengan konteks objek. Anda merancang beberapa objek satu demi satu dengan mendefinisikan berbagai property yang dimiliki object tersebut dan pekerjaan (task) yang dapat ditangani oleh objek tersebut. Kemudian anda merangkai semua objek tersebut dengan mendefinisikan relasi antar objek tersebut seperti halnya membangun sebuah mobil dari komponen-komponennya. Belakangan ini , mungkin anda akrab dengan slogan “reusable of code”. “Reuse of code” ini bukanlah cut & paste ( tapi harus diakui cut & paste memang sangat menyenangkan ). Yang dimaskud dengan “reuse of code” ini adalah suatu keadaan dimana para programmer untuk membangun sebuah objek dengan mengextend objek-objek yang telah ada secara mudah. Secara mudah disini adalah , programmer itu mungkin tidak perlu tahu dengan kode-kode dari objek yang ingin ia extend , yang ia butuhkan hanyalah pengetahuan mengenai property dari objek itu dan hal-hal yang dapat dilakukan oleh objek itu.

Read the rest of this entry »

Posted in education | No Comments »

Overflow dan Underflow

Posted by mahatma88 on February 5th, 2009

Kok, ada anomali ya? Katanya komputer barang yang canggih, tapi kenapa ya? Sebelumnya saya pernah katakan bahwa komputer adalah barang yang bego, yang tidak akan bergerak tanpa ada instruksi! Komputer, hanya bisa kita anggap sebagai budak saja lah. Lalu kenapa terjadi anomali, karena di sana terjadi apa yang disebut dengan overflow dan underflow. Nah lho apa lagi tuh? Kejadian overflow akan terjadi saat nilai sebuah bilangan bulat melebihi nilai positif maksimumnya, sementara underflow akan terjadi saat nilai sebuah bilangan bulat kurang dari nilai negatif minimumnya. Tapi, para programmer seringnya menggunakan kata “overflow” saja untuk menjelaskan kedua fenomena tersebut. Program-program C# pada dasarnya mengizinkan adanya overflow, karena C# dapat melakukan penjumlahan, pengurangan perkalian, dan pembagian terhadap bilangan bulat tanpa adanya kekhawatiran apakah nantinya hasilnya dapat ditampung pada ruangan 32-bit atau tidak. Mengabaikan overflow dalam melakukan perhitungan aritmetika terhadap bilangan bulat adalah sebuah cara yang paling efisien dan paling cepat dilakukan oleh komputer. Komputer, namanya saja budak bego, akan terus saja meneruskan perhitungan tersebut tanpa harus berhenti sejenak untuk mengecek apakah terjadi overflow atau tidak.

Meskipun beberapa program aplikasi mungkin dapat mengambil keuntungan dari overflow bilangan bulat, dalam banyak kasus, overflow menjadi sebuah masalah dan dianggap menjadi sebuah bug di dalam kode kita. Sebagai contoh, program sebuah bank yang menerima uang hingga miliaran rupiah, adalah sebuah program yang tidak menerima overflow, karena ketika seorang nasabah memiliki hutang -2.147.483.647 rupiah dalam saldo, lalu ada bunga 1 rupiah, maka saldonya akan berubah menjadi 2.147.483.648, yang berarti hal tersebut berubah menjadi keuntungan buat si penghutang tersebut. Siapa penjahatnya? Bukannya teller atau kasir, tapi overflow lah yang jadi penjahatnya.

Teknik pertama melibatkan kompiler C# itu sendiri. Kita dapat menginstruksikan kompiler C# untuk membuat kode yang mampu melakukan pengecekan terhadap overflow terhadap bilangan bulat. Ini merupakan contoh dari opsi kompiler. Untuk mengilustrasikannya, marilah kita kembali ke contoh program Program0201.cs.

Jika kita menggunakan Microsoft Visual Studio atau Microsoft Visual C# Express Edition, bukalah jendela properti Program0201 dengan cara mengklik kanan pada proyek yang bersangkutan lalu memilih menu Properties. Pada Project Properties yang keluar selanjutnya, bukalah tab Build. Di sana ada sebuah tombol Advanced, dan tekanlah tombol tersebut untuk memunculkan Advanced Build Settings seperti yang terlihat pada gambar berikut. Centanglah checkbox Check for arithmetic overflow/underflow. Lalu tekan OK untuk menutup kotak dialog tersebut.

Konfigurasi checking overflow/underflow

Lakukan kompilasi, dan jalankan programnya. Saat program Program0201 berjalan, program tersebut akan menampilkan lima buah baris pertama, sebelum akhirnya akan memunculkan sebuah eksepsi.

Program berjalan saat pengecekan overflow

Kita juga sebenarnya bisa melakukan pengecekan terhadap overflow pada ekspresi-ekspresi secara individual di dalam kode sumber dengan menggunakan operator checked. Statemen berikut:

B = checked(5 * A);

akan mengeluarkan sebuah eksepsi, meskipun kita telah membuang tanda centang pada opsi Check for arithmetic overflow/underflow, jika memang di dalam ekspresi tersebut akan menghasilkan sebuah nilai yang berada di luar jangkauan. Lawan dari operator checked adalah unchecked, sehingga ekspresi di atas diubah menjadi seperti:

B = unchecked(5 * A);

sehingga ekspresi tersebut tidak akan mengeluarkan eksepsi, meski opsi Check for arithmetic overflow/underflow kita telah centang.

Kita juga bisa menggunakan operator checked dan unchecked dalam sebuah blok kode (yang diapit oleh tanda kurung keriting { dan }). Perhatikan contoh berikut:

checked
{
    A += 1000000;
    B = B * A;
}

Setiap statemen yang berada di dalam blok tersebut yang nantinya akan menghasilkan overflow dalam operasi aritmetika akan mengeluarkan eksepsi. Operator unchecked juga bisa digunakan sebagai lawan dari checked.

Pilihan ketiga adalah dengan menggunakan pilihan kompiler C# (csc.exe) dengan tambahan switch /checked+ untuk mengaktifkan proses pengecekan atau /checked- untuk menonaktifkan proses pengecekan.

   csc.exe Program0201.cs /checked+

(perintah ini sama saja dengan opsi Check for arithmetic overflow/underflow dalam SharpDevelop atau IDE lainnya.)

Jadi, kita punya banyak pilihan. Kita juga bisa mengizinkan kalkulasi aritmetika untuk terus maju tanpa memperhatikan kemunculan overflow (yang mungkin akan menyebabkan kesalahan di dalam hasilnya), atau kita bisa menghentikan kalkulasi seperti ini untuk menyebabkan sebuah eksepsi. Untuk saat ini, memang tidak ada pilihan lagi, karena memang eksepsi bisa menghentikan proses eksekusi program. (sebenarnya ada sebuah cara tentang bagaimana sebuah program dapat mendeteksi kapan eksepsi dapat dimunculkan dan dapat kembali ke dalam proses eksekusi saat program selesai melakukan eksekusi. Tapi saat ini kita belajar ini dulu saja ya).

Mungkin, kita berkata “ah lebih baik gunakan opsi /checked+ saja lah, biar nantinya program yang saya buat nggak akan muncul overflow, toh overflow akan mematikan program saya!” Jujur saja, saya menentang hal tersebut! Mengaktifkan pengecekan overflow untuk semua operasi aritmetika dapat menurunkan performa dan kecepatan program yang kita buat. Oke, yang saya tentang adalah ketika kita membuat program untuk didistribusikan ke pengguna, kita mengaktifkan opsi pengecekan overflow, tapi saat kita mengembangkan program kita, ya nggak apa-apa lah! Toh yang menggunakan program, kita-kita juga. Saran saya, gunakan saja operator checked dan unchecked pada statemen dan ekspresi yang mungkin akan membuat eksepsi overflow, daripada menggunakan opsi /checked+ atau /checked-, sebelum kita belajar mengenai penangan eksepsi secara lebih elegan!

Bilangan Bulat Bertanda

Whew! Mungkin yang ada di dalam pikiran kita, kenapa sih saya menggunakan int melulu seolah-olah C# hanya mendukung int? Oke deh. Saya kembali ke jalan lagi. Tipe data int memang merupakan tipe data yang paling populer, akan tetapi sebenarnya, C# mendukung keberadaan tipe data lainnya lho.

Anggap kita sedang menangani data populasi manusia di Indonesia. Pasti, tidak ada penduduk yang dianggap negatif oleh komputer, sehingga kenapa juga kita menggunakan signed integer? Lagian, kita juga nggak bakal menggunakan setengah nilai dari total nilai yang disediakan oleh signed integer (berarti semiliar data, wow! Padahal Indonesia kan cuma 250 juta jiwa doang). Lalu, apa dong yang bisa digunakan? Kita bisa menggunakan unsigned integer (bilangan bulat tidak bertanda), ketimbang kita menggunakan bilangan signed integer (bilangan bulat bertanda).

Bahasa C# mendukung tipe data bilangan bulat tidak bertanda berukuran 32-bit, yang disebut dengan uint. Cara bacanya: “you int”. Kita bisa mendeklarasikan uint sebagaimana kita mendeklarasikan int, dengan cara:

uint A;

Bilangan bulat tak bertanda tidak memiliki bit penanda (sign bit). Bit yang paling kiri (most significant bit) akan dianggap sama seperti halnya bit yang lain. Seperti halnya int, uint juga dimulai dari 0:

0000-0000-0000-0000-0000-0000-0000-0000

Dan terus menerus naik hingga nilai maksimum dari int:

0111-1111-1111-1111-1111-1111-1111-1111 atau setara dengan 2.147.483.647

Akan tetapi, tidak seperti int, uint akan terus menerus mendapatkan nilai positif:

1000-0000-0000-0000-0000-0000-0000-0000 atau setara dengan 2.147.483.648

Hingga nilai maksimum positifnya:

1111-1111-1111-1111-1111-1111-1111-1111 atau setara dengan 4.294.967.295

sehingga, tipe data uint dapat menyimpan nilai dari 0 hingga 4.294.967.295 (232-1). Sebuah tipe data uint saat ini mampu menangani data populasi orang Indonesia, dan mungkin semua negara di dunia. Akan tetapi, saat harus menghadapi jumlah populasi seluruh manusia di Bumi, uint pun takluk!

Sama seperti tipe data int, uint juga dapat terkena “kutukan” overflow dan underflow. Perhatikan contoh di bawah ini:

uint A = 4294967295;
A += 1;

Variabel A akan menghasilkan nilai 0 jika pengecekan overflow terhadap integer tidak dilakukan, atau bernilai 1 saat pengecekan overflow dilakukan.

Bilangan bulat kurang dari 32-bit

Kita juga bisa menggunakan bilangan bulat yang lebih kecil daripada 32-bit. Jika bilangan bulat 64-bit dinamakan dengan long (yang berarti panjang dalam bahasa Inggris), maka lawan dari long adalah short. Untuk bilangan short tidak bertanda, digunakanlah tipe data ushort. Panjangnya berapa sih si short ini? Dalam C#, short memiliki panjang hingga 16-bit, sehingga mampu menampung nilai dari 0 hingga 65536. Tipe data short bertanda memiliki jangkauan dari -32768 hingga 32767, sementara tipe data ushort memiliki jangkauan dari 0 hingga 65536.

Selain short dan ushort, C# juga memiliki sebuah tipe data lagi yang digunakan untuk menyimpan bilangan bulat dengan panjang 8-bit, sehingga totalnya mampu menampung 256 buah angka. Seperti halnya bilangan bulat lainnya, tipe data ini juga terbagi atas dua buah jenis, yakni bertanda (sbyte) dan tidak bertanda (byte). Tipe data sbyte dapat memiliki nilai dari -127 hingga 128, sementara byte dapat memiliki nilai dari 0 hingga 255.

Tipe-tipe data seperti int, long, dan short semuanya merupakan tipe data bilangan bulat bertanda; sementara uint, ulong, dan ushort merupakan tipe data bilangan bulat tak bertanda. Kita bisa membedakan antara keduanya dengan melihat keberadaan huruf “u” di sana. Akan tetapi, untuk bilangan bulat 8-bit, penamaannya dibalik: byte merupakan tipe data bilangan bulat tidak bertanda, sementara sbyte merupakan bilangan bulat bertanda.

Beberapa pertimbangan

Secara umum, meski jika sebuah variabel tertentu hanya digunakan untuk menyimpan bilangan bulat dengan nilai kurang dari 32767, kita lantas nggak harus menggunakan short ketimbang int. Prosesor 32-bit modern saat ini dapat menangani nilai 32-bit dengan lebih mudah dan efisien jika dibandingkan dengan 16-bit.

Rumus umum yang bisa digunakan untuk menulis variabel bilangan bulat adalah “saat membutuhkan bilangan bulat, mulailah dari int.” Tipe data int mungkin menjadi pilihan terbaik untuk sebagian besar kebutuhan terhadap bilangan bulat yang kita butuhkan. Jika memang kita membutuhkan nilai yang lebih besar lagi, maka gunakanlah long.

Tipe data Integer dan .NET Framework

Pada Modul 2, saya menyebutkan bagaimana caranya untuk mengakses dokumentasi yang terdapat di dalam .NET Framework. Jika kita telusuri ruang nama System di dalam dokumentasi .NET Framework, kita akan menemukan sebuah struktur dengan nama Int32. Nama “int” dalam C# sebenarnya merupakan alias (singkatan atau nama lain yang lebih pendek) bagi struktur System.Int32 yang terdapat di dalam .NET Framework. Tujuh tipe data bilangan bulat lainnya juga merupakan alias untuk struktur-struktur lainnya. Ketimbang kita menggunakan sebuah variabel dengan menggunakan bahasa C#:

int A;

kita juga bisa mendeklarasikannya dengan menggunakan nama struktur .NET:

System.Int32 A;

Kedua statemen di atas adalah 100% sama! Atau, bahkan jika kita telah menggunakan direktif:

using System;

pada bagian atas kode kita, kita bahkan menyingkat pendeklarasian bilangan bulat bertanda berukuran 32-bit dengan menggunakan statemen:

Int32 A;

Dan sekarang, ketimbang kita mengatakan bahwa kita mendeklarasikan sebuah variabel dengan tipe data int, atau kita membuat objek dengan tipe data int, kita juga bisa menyebut hal tersebut sebagai pembuatan sebuah kejadian (instance) dari struktur System.Int32. Whew! Apa lagi tuh? Tapi, jika Anda bertanya kepada para programmer bahasa berorientasi objek, mereka akan menjawab pilihan ketiga, ketimbang pilihan pertama dan kedua.

sumber

Posted in education | 2 Comments »

Tipe data primitif bilangan bulat (integer)

Posted by mahatma88 on February 5th, 2009

Mengenal Data dan Tipe Data

Oke deh, sebelum melangkah lebih jauh, lebih baik kita belajar terlebih dahulu mengenai apa sih tipe data itu. Data, adalah bentuk jamak dari Datum, yang berarti “to give” atau “to grant“. Secara literal, Datum berarti sebongkah informasi. Secara istilah, data dapat disamakan dengan informasi yang diperoleh dari eksperimen atau survei yang digunakan sebagai dasar pengambilan konklusi. Dalam ilmu komputer, data merujuk kepada informasi yang dapat diproses oleh komputer, yang dapat berupa angka-angka, teks, gambar, suara, video, dan lain sebagainya yang dapat disimpan di dalam memori komputer.

Bilangan Bulat (Integer)

Bilangan bulat atau Integer (disebut juga sebagai int di dalam C#) hampir ditemukan di semua tipe program. Oleh karena itu, adalah penting bagi seorang programmer untuk mengetahui secara pasti apa itu integer, dan di mana letak kekuatan dan kekurangannya. Sebagai contoh, berapa sih bilangan yang dapat ditampung di dalam tipe data integer? Untuk menjawabnya, kita bisa menulis sebuah program C# yang menunjukkan jawabannya:

using System;

class Program0201
{
    static void Main()
    {
        int x = 2;
        Console.Title = "Program0201 (x=2)";
        Console.WriteLine(x);
        Console.WriteLine(x *= x);
        Console.WriteLine(x *= x);
        Console.WriteLine(x *= x);
        Console.WriteLine(x *= x);
        Console.WriteLine(x *= x);
        Console.WriteLine(x *= x);
        Console.WriteLine(x *= x);
        Console.WriteLine(x *= x);
        Console.WriteLine(x *= x);
        Console.ReadKey();
    }
}

Whew, kalau dilihat, kode sumber di atas adalah banyak yang sama. Untuk sementara, kita dapat melakukan copy-paste saja dulu deh, meski di dalam C# ada metode yang jauh lebih efisien (nanti juga akan dibahas). Oke, apa yang akan dikerjakan oleh program di atas? Program di atas akan mendeklarasikan sebuah variabel dengan nama x dan tipe data int, dan kita memberinya nilai 2. Dalam statemen-statemen selanjutnya akan melakukan perkalian dengan bilangan sebelumnya, dan hasilnya pun akan ditampilkan, karena di sana telah terdapat metode WriteLine(). Nah, saat dijalankan, program tersebut akan menghasilkan tampilan seperti berikut:

Program di atas saat dijalankan

Nah lho! Awalnya programnya benar menghasilkan nilai-nilai 2, 4, 16, 256, 65536, tapi habis itu, kok malah hasilnya 0? Apakah ada yang salah? Misterius, bukan? Kenapa cuma lima nilai saja yang dapat dihitung, sementara nilai keenam menghasilkan 0. Karena nilai x pada statemen keenam adalah 0, maka nilai selanjutnya adalah 0 juga, karena bagaimanapun juga 0 dikalikan dengan 0 selalu menghasilkan nilai 0!.

Nah, yang jadi pertanyaan “Kenapa 65536 dikalikan 65536 sama dengan 0?”. Lalu, coba kita modifikasi nilai x=2 di dalam program di atas dengan menggunakan nilai baru x=3, kenapa juga hasilnya negatif?

Program di atas saat menggunakan nilai variabel x=3 dijalankan

Meski nilai-nilai hasil di atas terlihat sangatlah salah, nilai-nilai tersebut tidaklah dikeluarkan oleh komputer secara acak, akibat “kegilaan”. Meskipun sangatlah mengejutkan, nilai-nilai tersebut sangatlah bisa ditebak. Oleh karenanya, untuk menghindari kebingungan kita akibat adanya nilai-nilai seperti itu di dalam program “beneran” buatan kita, maka kita harus tahu bagaimana variabel dengan jenis-jenis berbeda disimpan dan dimanipulasi di dalam komputer. Read the rest of this entry »

Posted in education | No Comments »