Minggu, 21 Desember 2014

Polymorphism (OOP) C++

Polymorphism merupakan kemampuan suatu method untuk bekerja dengan lebih dari satu tipe argumen. Pada bahasa lain (khususnya C++), konsep ini sering disebut dengan method overloading.

Polymorphism adalah suatu object dapat memiliki berbagai bentuk, sebagai object dari class sendiri atau object dari superclassnya.

#include <iostream>
using namespace std;

class polygon //class utama
{
      protected:
      int panjang, lebar;
      public:
      int setvalues (int a, int b)
      {
          panjang=a;              
          lebar=b;
      }
};

class retangle: public polygon
{
      public:
      int luas()
      {
          return panjang*lebar;
      }
};

class triangel: public polygon
{
      public:
      int luas()
      {
          return panjang*lebar/2;
      }
};

int main()
{
    retangle rect;                   
    triangel trgl;
    polygon*ppoly1=&rect;               
    polygon*ppoly2=&trgl;
    ppoly1->setvalues (4,5);
    ppoly2->setvalues (7,6);
    cout<<"luas persegi: "<<rect.luas()<<endl;
    cout<<"luas segitiga: "<<trgl.luas()<<endl;

    system ("pause");
    return 0;

}

Read & Write C++

Read

Program ini membaca file teks dan mencetak konten pada layar. dengan membaca file baris demi baris, menggunakan getline. Nilai yang dikembalikan oleh getline  adalah referensi ke objek itu  sendiri.

#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

int main ()
{
      string line;
      ifstream myfile ("example.txt");
      if (myfile.is_open())
     {
          while ( getline (myfile,line) )
          {
                   cout << line << '\n';
          }
          myfile.close();
     }

     else cout << "Unable to open file";
 
     system("pause");
     return 0;
}

Program diatas akan membaca isi dari sebuah file yang bernama  “example.txt”.



Write

 Program ini dirancang untuk menyimpan teks dan dengan demikian semua nilai-nilai yang input atau output dapat mengalami beberapa transformasi format. Operasi menulis pada file teks dilakukan dengan cara yang sama kita beroperasi dengan cout.

#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

int main ()
{
      ofstream myfile ("example.txt");
      if (myfile.is_open())
      {
         myfile << "This is a line.\n";
         myfile << "This is another line.\n";
         myfile.close();
      }
      else cout << "Unable to open file";
 
      system("pause");
      return 0;
}


Program diatas akan menulis sebuah text dan menyimpannya pada sebuah file bernama ”example.txt”. Text yang ditulis adalah: “This is a line.” Pada baris pernama dan “This is another line.” Pada baris kedua.

Konstruktor (OOP) C++

Konstruktor adalah fungsi khusus yang akan dijalankan secara otomatis ketika kita melakukan inisialisasi atau pembuatan suatu objek. Konstruktor juga bisa di bilang bagian dari kelas yang digunakan  untuk menciptakan objek.

Ciri-ciri Konstruktor :
a.       Namanya harus sama dengan nama kelas.
b.      Ia tidak mengembalikan nilai/tipe tertentu, bahkan void sekalipun.

Aturan Konstruktor :
a.       Nama Konstruktor harus sama dengan nama kelas yang mendefiniskannya
b.      Konstruktor tidak memiliki nilai balik
c.       Konstruktor harus diletakkan pada bagian public

Konstruktor biasanya di gunakan untuk melakukan alokasi memori dan memberikan nilai awal terhadap anggota kelas dan melakukan tugas umum lainya.

Fungsi Konstruktor (constructor) adalah fungsi yang dipanggil pada saat pembuatan sebuah objek. Berikut merupakan sebuah kontruktor untuk menghitung luas persegi:

#include <iostream>
using namespace std;

class rectangle
{
      int panjang, lebar;
      public:
             rectangle (int,int);
             int luas()
             {
                 return (panjang*lebar);
             }
};

rectangle::rectangle (int a, int b)
{
       panjang = a;
       lebar = b;                          
}

 int main()
{
    rectangle persegi1 (3,4);
    rectangle persegi2 (5,6);
   
    cout<<"luas persegi1 :"<<persegi1.luas()<<endl;
    cout<<"luas persegi2 :"<<persegi2.luas()<<endl;
   
    system ("pause");
    return 0;
}

Pada program di atas, konstruktor digunakan untuk melakukan operasi inisialisasi dan melakukan alokasi memori. Dengan menggunakan konstruktor kita bisa sedikit ‘berhemat’ dengan tidak membuat suatu fungsi yang secara khusus diciptakan untuk melakukan suatu inisialisasi, namun cukup dengan menggunakan suatu konstruktor.

Inheritance (OOP) C++

Salah satu konsep yang paling penting dalam pemrograman berorientasi objek adalah inheritance. Inheritance memungkinkan kita untuk mendefinisikan kelas dalam hal kelas lain, yang membuatnya lebih mudah untuk menciptakan dan mengatur aplikasi. Inheritance juga memberikan kesempatan untuk menggunakan kembali fungsi yang telah dibuat dan waktu pelaksanaan yang lebih cepat.

Ketika membuat class, daripada menulis fungsi anggota data baru dan fungsi anggota, programmer dapat menetapkan bahwa kelas baru harus mewarisi anggota kelas yang ada. Kelas yang ada ini disebut kelas dasar, dan kelas baru disebut sebagai kelas turunan.

#include <iostream>
using namespace std;

class shape // class utama
{
      public:
            
             int setalas(int a)
             {
             alas = a;
             }
             int settinggi(int t)
             {
             tinggi = t;
             }
      protected:
                int alas;
                int tinggi;
};

class triangel: public shape // class turunan
{
      public:
             int luas()
             {
             return ((alas*1/2)*tinggi);
             }
};

int main()
{
    triangel trgl;
   
    trgl.setalas(6);
    trgl.settinggi(7); 
   
    cout<<"total area: "<<trgl.luas()<<endl;
   
    system ("pause");
    return 0;

}

Rabu, 10 Desember 2014

Perkalian Array Dua Dimensi C++

Larik (Bahasa Inggris: array), dalam ilmu komputer, adalah suatu tipe data terstruktur yang dapat menyimpan banyak data dengan suatu nama yang sama dan menempati tempat di memori yang berurutan serta bertipe data sama pula.
Larik dapat diakses berdasarkan indeksnya. Indeks larik umumnya dimulai dari 0 dan ada pula yang dimulai dari angka bukan 0. Pengaksesan larik biasanya dibuat dengan menggunakan perulangan (looping). Sedangkan array dua dimensi adalah sebuah array yang memiliki jumlah baris dan kolom.


#include <iostream>
using namespace std;

int main()
{
    int a[3][2], b[3][2], hasil[3][2]; // deklarasi variable matriks dengan 3baris dan 2kolom
    int i,j;
 
    cout<<"matriks a: "<<endl;
    for (i=0;i<3;i++)// deklarasi jumlah baris
    {
        for (j=0;j<2;j++)// deklarasi jumlah kolom
        {
            cout<<"a["<<i<<"]["<<j<<"]= ";// keterangan elemen matriks a
            cin>> a[i][j];// input nilai elemen a
         
        }
    }
 
    cout<<endl;
 
    cout<<"matriks b: "<<endl;
    for (i=0;i<3;i++)// deklarasi jumlah baris
    {
        for (j=0;j<2;j++)// deklarasi jumlah kolom
        {
            cout<<"b["<<i<<"]["<<j<<"]= ";// keterangan elemen matriks b
            cin>> b[i][j];// input nilai elemen b
         
        }
    }
 
    cout<<endl;
 
    for (i=0;i<3;i++)
    {
        for (j=0;j<2;j++)
        {
            hasil[i][j]= a[i][j]*b[i][j];// deklarasi hasil perkalian
            cout<<"hasil ["<<i<<"]["<<j<<"]= "<<hasil[i][j];// output hasil
            cout<<endl;
        }
    }

    system("pause");
    return 0;
}

Sabtu, 06 Desember 2014

Faktorial Rekursif C++

Dalam matematikafaktorial dari bilangan asli n adalah hasil perkalian antara bilangan bulat positif yang kurang dari atau sama dengan n. Faktorial ditulis sebagai n! dan disebut n faktorial. Sebagai contoh, nilai dari 7 faktorial adalah  7*6*5*4*3*2*1= 5040. Berikut merupakan contoh program untuk mencari bilangan faktorial dengan metode rekursif.


#include <iostream>
using namespace std;

int factorial(int);
int main()
{
    int r;
 
    cout<<"masukkan bilangan bulat positif: ";
    cin>>r;
 
    if (r<0)
    cout<<"bukan bilangan bulat";
    else
    cout<<r<<" faktorial adalah: "<<factorial(r)<<endl;
 
    system ("pause");
    return 0;            
}
int factorial(int r) // fungsi faktorial rekursif
{
    int result;
 
    if (r<=1)return 1;
    result=r*factorial(r-1);
    return result;
}


Rekursi adalah suatu proses dari fungsi yang memanggil dirinya sendiri. Disebut juga dengan fungsi rekursif. Dalam sebuah fungsi rekursif pemanggilan dapat terjadi berulang kali hingga ada suatu kondisi yang mengakhiri prosesya.

Pada contoh progam C++  diatas kondisi penghentiannya adalah jika r lebih kecil atau sama dengan 1. Setiap kali fungsi memeanggil dirinya sendiri, nilai dari r dikurangi 1 sehingga nilai r akhirnya menjadi 1 dan proses rekursi akan diakhiri, sehingga fungsi ini akan memanggil dirinya sendiri sebanyak r kali.

Misalkan pada program C++ diatas kita masukan bilangan positif 4 maka proses rekursi yang pertama adalah: result(4*factorial(3)); proses ini akan memanggil kembali fungsi dirinya sendiri dengan mengirimkan nilai 3 sebagai nilai r yang baru. Karena nilai r masih lebih besar dari 1 maka proses rekursi kedua akan dilakukan dengan hasilnya adalah: 3*factorial(2) hingga seterusnya sampai nilai r sama dengan 1. Untuk nilai r sama dengan 1, perintah return (1) akan mengembalikan proses ke bagian yang memanggilnya.

Kekurangan dari fungsi rekursif:
-          Memerlukan lebih banyak memori untuk menyimpan activation record dan variable local.

-          Memerlukan waktu yang lebih banyak untuk menangani activation record.

Fibonacci Rekursif

Dalam matematika, bilangan Fibonacci adalah barisan yang didefinisikan secara rekursif sebagai berikut: barisan ini berawal dari 0 dan 1, kemudian angka berikutnya didapat dengan cara menambahkan kedua bilangan yang berurutan sebelumnya. Dengan aturan ini, maka barisan bilangan Fibonaccci yang pertama adalah: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946...dst. Berikut merupakan contoh program untuk mencari bilangan fibonacci dengan metode rekursif.


#include <iostream>
using namespace std;

int Fibonacci(int);

int main() 
{
    int f;

    cout << "masukkan bilangan bulat positf: ";
    cin >> f;
    if (f < 0)
        cout << "bukan bilangan bulat";
    else
        cout << f << " fibonacci adalah: " << Fibonacci(f) << endl;
    
    system ("pause");
    return 0;
}

int Fibonacci(int x) // fungsi fibonacci rekursif
{
    if (x < 2){
     return x;
    }     
    return (Fibonacci (x - 1) + Fibonacci (x - 2));
}



Random PIN Generator C++

Merupakan sebuah program yang akan menghasilkan urutan angka maupun huruf/karakter secara acak. berikut merupakan contoh program random pin generator.


#include <iostream>
#include <cstring>
using namespace std;

char alphanum[]= "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

int stringrange = sizeof (alphanum)-1;
char genrandom3() // fungsi random pin generator
{
        return alphanum3 [rand()%stringrange3];
}
 
int main()
{
    srand((unsigned)time(0));
    int i;
     
    cout<<"random pin adalah: "<<endl;
    for (i=0; i<5; i++) // jumlah random pin
    {
        cout<<"pin "<<i+1<<": ";
        for (int a=0; a<8; a++) // panjang random pin
        {
            cout<<genrandom1();
        }
        cout<<endl;
    }
    cout<<endl;
 
    system ("pause");
    return 0;
}

Faktorial Iteratif C++

Dalam matematikafaktorial dari bilangan asli n adalah hasil perkalian antara bilangan bulat positif yang kurang dari atau sama dengan n. Faktorial ditulis sebagai n! dan disebut n faktorial. Sebagai contoh, nilai dari 7 faktorial adalah  7*6*5*4*3*2*1= 5040. Berikut merupakan contoh program untuk mencari bilangan faktorial dengan metode iteratif.


#include <iostream>
using namespace std;

int factorial(int);
int main()
{
    int i;
 
    cout<<"masukkan bilangan bulat positif: ";
    cin>>i;
     
    if (i<0)
    cout<<"bukan bilangan bulat";
    else
    cout<<i<<" faktorial adalah: "<<factorial(i)<<endl;
 
    system ("pause");
    return 0;
}
int factorial(int i) // fungsi faktorial iteratif
{
    int result=1;
    for (int n=1; n<=i; n++)
    {
        result *= n;
    }
    return result;
}


Iteratif merupakan fungsi perulangan (looping) yang melakukan proses perulangan terhadap sekelompok instruksi di mana perulangan tersebut akan berhenti jika batasan syarat sudah tidak terpenuhi.

Pada contoh progam C++  diatas kondisi penghentiannya adalah jika nilai n  lebih kecil atau sama dengan i, dimana n berawal dari 1. Setiap kali fungsi melakukan perulangan atau looping, nilai dari n bertambah 1 sehingga nilai n akhirnya menjadi lebih kecil atau sama dengan nilai i. dan proses iteratif akan diakhiri, sehingga fungsi ini akan melakukan perulanagnan atau looping sebanyak i kali.
Misalkan pada program C++ diatas kita masukan bilangan positif 4 maka proses loopingnya adalah: n berawal dari nilai 1  akan dikalikan dengan looping berikutnya hingga nilai n memenuhi syarat: n<=4.

For (int n=1; n<=4; n++)
{
                result *= n
}

Dengan proses: 1*2*3*4= 24.

Kelebihan perulangan iteratif:
-          Mudah dipahami dan mudah melakukan debugging ketika ada perulangan yang salah.
-          Dapat melakukan nested loop atau yang disebut dengan looping bersarang.
-          Proses lebih singkat karena perulangan terjadi pada kondisi yang telah disesuaikan.
-          Jarang terjadi overflow karena batasan dan syarat perulangan yang jelas.

Kelemahan perulangan iteratif:
-          Tidak dapat menggunakan batasan berupa fungsi.
-          Perulangan dengan batasan yang luas akan menyulitkan dalam pembuatan program perulangan  itu sendiri.

Jumat, 28 Maret 2014

Karena Pembajakan Untuk Pendidikan itu Dibolehkan

Karena Pembajakan Untuk Pendidikan itu Dibolehkan
Suatu sore yang tenang, saya sedang asyik membaca majalah Tegalboto. Kebetulan tema majalah yang saya baca waktu itu adalah tentang Pendidikan. Satu tulisan menarik yang saya baca adalah tulisan Widi Widahyono, senior saya di Tegalboto.

Widi orangnya periang. Humoris. Suka sekali bercanda dan main gitar sore-sore di depan sekretariat. Selain itu, Widi juga dikenal sebagai pakar tata letak dan juga desain. Ia ahli mengoperasikan Adobe Photoshop, juga Corel Draw. Karena itu, Widi sering sekali diundang Lembaga Pers Mahasiswa lain untuk memberi pelatihan tentang tata letak dan desain.

Di tulisannya, Widi dengan cerdas mengatakan bahwa pembajakan untuk pendidikan itu boleh. Lha kok? Ini seluruh dunia sedang ribut menggiatkan kampanye anti pembajakan, kok Widi malah menyuruh membajak untuk pendidikan.

Tapi dasar orang cerdas yang optimal menggunakan otak kanan, Widi punya argumen yang sama sekali di luar bayangan. Ia lantas menyebutkan program-program Microsoft dan peranti lunak yang sering ia pakai. Mulai dari Microsoft Office, Adobe Photoshop, hingga Corel Draw. Harga perangkat lunak aslinya sangatlah mahal.

Saya beri contoh harga perangkat lunak dasar: Microsoft Windows. Di salah satu situs penjualan perangkat lunak asli, harga untuk Windows 7 Home Basic Edition dibandrol sebesar 1 juta 30 ribu rupiah. Sepengetahuan saya, satu perangkat lunak hanya boleh dan legal dipakai di satu komputer saja. Itu artinya, jika satu rumah punya tiga komputer, maka sang empunya rumah harus mengeluarkan 3 juta rupiah lebih untuk membeli perangkat lunak Microsoft Windows.

Begitu pula untuk Microsoft Office. Harga perangkat lunak Office Home and Student 2013 yang asli mencapai 999 ribu rupiah. Untuk kantoran, lain lagi harganya. Harus memakai Office Home and Business yang harganya mencapai 2,5 juta. Sekarang bayangkan kalau seorang wirausahawan kecil yang ingin membuka warnet dengan 10 komputer. Ia harus menyediakan paling tidak 25 juta rupiah untuk membeli perangkat lunak.

Lalu bagaimana dengan perangkat lunak yang penggunaannya lebih eksklusif, seperti Adobe Photoshop? Harganya lebih gila lagi. Saya tadi iseng-iseng menengok harga jual Adobe Photoshop CS6. Harganya mencapai 10 juta 832 ribu rupiah. Gila bener.

Repotnya adalah: Microsoft sudah terlalu mendarahdaging di Indonesia, alias memonopoli sistem operasi dan perangkat lunak.

Padahal ada tandingan sistem operasi Linux yang berbasis open source, yakni sistem yang membolehkan pemakai untuk mengunduh perangkat lunak secara legal. Juga bebas untuk mengembangkan peranti lunak sendiri, untuk kemudian disebar. Tapi seberapa banyak yang memakai Linux? Tentu jauh lebih sedikit dibandingkan pengguna Windows.

Dulu di Jember pernah ada satu warnet yang berbasis Linux. Saya beberapa kali berselancar di sana. Beberapa kali ngobrol juga dengan pemiliknya, seorang pria ramah dengan kacamata tebal.

"Sampai sekarang, orang terlalu tergantung pada Microsoft Windows, padahal ada Linux yang software-nya gratis, dan sebenarnya penggunaannya mudah. Hanya perlu dibiasakan saja," kata mas itu, yang saya lupa namanya.

Sayang, karena faktor tak biasa, warnet Linux itu pun bangkrut.

Kebiasaan tergantung pada Windows juga mengakar di kalangan birokrat sekalipun. Tahun 2011 misalkan, Kementrian Pendidikan Indonesia bekerja sama dengan Microsoft untuk "...memperkuat pengetahuan teknologi informasi, meningkatkan inovasi, dan kreativitas di dunia pendidikan di Indonesia."

Sekilas itu seperti pakta perjanjian biasa saja. Namun akibatnya apa? Seluruh sekolah di Indonesia 'dipaksa' menggunakan Windows asli, yang harus membayar dalam jumlah besar. Hmmm, saya mencium aroma komisi di sini. Selain masalah itu, konsekuensinya adalah para murid juga 'dipaksa' tergantung dengan Windows, alias menghasilkan murid dengan Windows minded.

Padahal dulu pemerintah Indonesia pernah membuat program keren: Indonesia Goes Open Source. Namun kemana program itu? Entahlah. Hehehe.

Gara-gara tak biasa menggunakan sistem open source, dan tak mampu membeli perangkat lunak asli, maka akhirnya para pengguna komputer larinya ke perangkat lunak bajakan. Indonesia, kalau saya tak salah ingat, menempati peringkat ke 7 dalam negara pengguna perangkat lunak bajakan. Tapi apa itu salah? Kalau menurut saya, tentu tidak. Asalkan kembali lagi ke percakapan di atas: pembajakan untuk pendidikan.

Sekarang gini...

Kalau anda mahasiswa, bukan anak Aburizal Bakrie atau Harry Tanoe, yang artinya masih menggantungkan hidup dari kiriman orang tua dengan jumlahnya pas-pasan, atau cuma mampu makan dua kali sehari, apa mampu membeli perangkat-perangkat lunak itu semua? Padahal Microsoft Windows, Microsoft Office, adalah dua perangkat yang harus ada di tiap komputer dan komputer  jinjing mahasiswa.

Kalau tidak mampu, apa artinya para mahasiswa tidak boleh belajar dan menggarap tugas? Karena tidak mampu membeli perangkat lunak, maka banyak orang Indonesia dipaksa tetap jadi bodoh dan tak boleh belajar komputer. Mengerikan bukan?

Itulah inti dari tulisan Widi dan saya ceritakan ulang di sini.

Gerakan anti pembajakan ala Microsoft memang sedang digiatkan semenjak beberapa tahun terakhir. Microsoft bisa dibilang merupakan pihak yang memonopoli sistem operasional dan perangkat lunak di negara-negara berkembang.

Di Guatemala misalnya, pernah ada kasus yang cukup menghebohkan.

Suatu hari, pihak Microsoft bersama aparat keamanan Guatemala yang bersenjata lengkap, merazia Seguros Universales, sebuah perusahaan asuransi di Guatemala. Padahal perusahaan itu sudah menggunakan 98% perangkat lunak asli. Pihak Microsoft memaksa  Seguros Universales untuk membayar 70 ribu dollar Amerika di tempat, atau pihak Microsoft menghapus semua server yang menyimpan semua data di kantor itu.

Kasus ini menjadi perhatian dunia karena ternyata Microsoft dan aparat keamanan Guatemala tidak membawa surat perintah dan surat izin razia.

Seguros Universales yang merasa diperas dan dipermalukan, akhirnya balik menuntut Microsoft dan aparat keamanan Guatemala. Perusahaan ini juga menuduh Microsoft menjalankan pemerasan macam ini di banyak negara, kebanyakan karena sembarangan menarget perusahaan. Hal ini juga terjadi di Belgia.

Suatu hari Microsoft merazia perusahaan bernama Deckers-Snoeck, dibantu dengan aparat lokal. Perusahaan itu lantas diwajibkan membayar denda sebesar 40.000 dollar Amerika, atau pihak Microsoft mengambil semua komputer perusahaan itu.

"Itu lebih merupakan perampokan ketimbang razia," kata CEO Deckers-Snoeck, Joris Decker.

Karena terancam tutup kalau tidak membayar, maka pihak perusahaan percetakan itu pun membayar. Tapi toh ujungnya tak enak: tak semua perangkat lunak yang dipasang adalah perangkat lunak asli. Nggapleki cuk!

Akhirnya perusahaan Deckers menuntut Bussiness Software Alliance selaku organisasi yang memayungi Microsoft, ke pengadilan. Deckers memenangkan gugatan dan menghilangkan kewajiban membayar sepeser pun kepada Microsoft dan BSA.

Hal yang sama juga terjadi di Indonesia. Dalam skala yang lebih lokal, terjadi di Jember, kota tempat saya menuntut ilmu.

Sekitar pertengahan tahun 2009, ada razia besar-besaran di warung internet seputaran kampus Universitas Jember. Nyaris semua, malah sepertinya semua, warnet kena razia. Alasannya? Bukan soal menyimpan film porno, atau dijadikan tempat mesum mahasiswa horny. Melainkan karena menggunakan software bajakan.

Beberapa warnet dengan dana besar, akhirnya membayar sejumlah uang --saya tak tahu berapa-- agar tetap bisa beroperasi. Mereka juga memasang stiker besar: "Warnet Ini Menggunakan Software Windows Asli". Warnet kecil yang tak sanggup membayar? Ya terpaksa gulung tikar. Dan itu jumlahnya jauh lebih banyak ketimbang warnet bermodal besar.

Tapi tunggu dulu, razia yang menimpa warnet itu belum cerita keseluruhan. Saya sih dengan iseng membayangkan: bagaimana kalau operasi macam itu dilakukan pada komputer para mahasiswa?

Saya yakin, seyakin-yakinnya, nyaris semua mahasiswa --bahkan mungkin dosen juga-- di Indonesia memakai perangkat lunak bajakan. Yang mau dan mampu membeli perangkat lunak asli pasti hanya beberapa gelintir mahasiswa yang tak pernah merasakan kelaparan di akhir bulan.

Bisa membayangkan kalau Microsoft bersikeras dan 'memaksa' aparat di Indonesia untuk meluncurkan razia besar-besaran kepada komputer atau komputer jinjing para mahasiswa? Para mahasiswa yang tertangkap menggunakan perangkat lunak bajakan lantas diwajibkan membayar ratusan ribu, atau malah jutaan, agar bisa menggunakan program-program Microsoft. Gila kan?

Yang tak bisa membayar? Ya selamat tinggal belajar komputer. Ya selamat tinggal menggarap tugas. Ya selamat tinggal kuliah. Ya selamat datang kebodohan.

Itu kenapa saya setuju sekali pendapat Widi, bahwa pembajakan untuk pendidikan adalah halal dan dibolehkan. Apa jadinya kalau kita dilarang belajar komputer hanya gara-gara kita tak mampu beli perangkat lunak?

Jadi pilihannya cuma dua: mulai membiasakan diri memakai sistem open source, atau menggunakan perangkat lunak bajakan? Sementara ini, saya memilih opsi nomer dua. Hehehe.

Long live piracy for education!

source : 
http://nuranwibisono.blogspot.com