Arsip Tag: software

Penjelasan Ringkas Lisensi-Lisensi Perangkat Lunak


Bismillahirrahmanirrahim.

Pernahkan Anda membaca tulisan yang menjelaskan perbedaan lisensi-lisensi perangkat lunak? Contoh tabelnya bisa dilihat di bawah. Jika pernah membaca, Anda sangat beruntung. Karena pada dasarnya orang Indonesia tidak pernah memperoleh pendidikan seperti yang Anda dapatkan. Pendidikan bahwasanya perangkat lunak memiliki lisensi yang berbeda-beda. Pendidikan yang ujungnya pemahaman bahwa hak pembuat perangkat lunak wajib dihormati. Kenapa? Karena pembahasan masalah ini sangat pelik sehingga jarang orang dapat memahaminya dengan jelas. Oleh karena itu, tulisan ini berusaha menjelaskan mengenai norma lisensi perangkat lunak dalam hal menyikapi mereka dengan seharusnya. Tulisan ini dibuat to the point untuk mengurangi pembajakan perangkat lunak di Indonesia. Tulisan ini berfokus pada commercial proprietary saja dengan mengontraskannya pada free software. Tulisan ini tidak didedikasikan untuk orang yang tidak mau sadar. Semoga tulisan ini bermanfaat. Baca lebih lanjut

Iklan

Pemrograman Qt 3 – Mendayagunakan QFrame dan QVBoxLayout untuk Membentuk Kolom Lebih Banyak dalam QDialog


Bismillahirrahmanirrahim.

Kalau kemarin kita ngite dengan QGroupBox dan QHBoxLayout, sekarang kita akan mencoba QFrame sebagai ganti QGroupBox baik sebagai kontainer maupun pembuat spasi. Ide dasar program ketiga ini adalah spasi kosong untuk setiap grup widget yang kita buat di dalam QDialog. Oh iya, sampai hari ini kita hanya akan berkutat dengan QDialog tanpa menyentuh QMainWindow. Tentulah, semua hard coding ini tujuannya membuat aplikasi GUI di Linux. Semoga bermanfaat untuk kaum muslimin semuanya.

Wujud Program yang Diinginkan

ngite-kedua9

Daftar Kelas Qt yang Dipakai

  1. QDialog = dipakai untuk membuat jendela tertinggi
  2. QVBoxLayout = dipakai untuk membuat kontainer yang menampung setiap blok/grup dari tombol
  3. QGridLayout = dipakai untuk membuat kontainer paling besar yang menampung semua objek QVBoxLayout nantinya
  4. QPushButton = dipakai untuk membuat tombol
  5. QIcon = dipakai untuk memasukkan gambar sebagi ikon tombol, QIcon dipakai sebagai passing parameter
  6. QSize = dipakai untuk membuat objek yang menyimpan ukuran, yang di program ini objek berisi ukuran tersebut diterapkan pada logo dalam tombol
  7. QFrame = dipakai untuk menggantikan QGroupBox dalam hal menampung tombol-tombol jadi satu blok/grup.

Daftar Method Qt yang Dipakai

  1. addWidget -> dipakai oleh QVBoxLayout, QGridLayout
  2. setMinimumSize -> dipakai oleh QPushButton
  3. setIconSize -> dipakai oleh QPushButton
  4. setIcon -> dipakai oleh QPushButton
  5. setLayout -> dipakai oleh QFrame dan QDialog
  6. setFixedWidth -> dipakai oleh QFrame
  7. setFrameShadow -> dipakai oleh QFrame untuk membentuk bayangan; opsi-opsinya adalah QFrame::Raised, QFrame::Sunken, dan QFrame::Plain
  8. setFrameShape -> dipakai oleh QFrame untuk membentuk wujud panel apakah itu timbul atau tenggelam; opsi-opsinya adalah QFrame::StyledPanel [dipakai oleh default-nya Qt Creator GUI Builder], QFrame::Box
  9. setColumnMinimumWidth -> dipakai oleh QGridLayout untuk menentukan ukuran setiap blok/grup dan menentukan jumlah blok/grup yang bisa dipakai
  10. setRowMinimumHeight -> dipakai oleh QGridLayout, idem
  11. setLayout -> dipakai oleh QDialog selaku kelas tertinggi untuk memasang QGridLayout ke dalam dirinya.

Peta GUI

Saya jelaskan dulu peta QFrame dalam program ini yang saya susun.

ngite-kedua9B

A = QFrame (frameKiri) dengan QVBoxLayout (layoutKontainerKiri)
B = QFrame (frameTengah)
C = QFrame (frameKanan)
D = QFrame (frameSangga)
E = QFrame (frameBawah)
F = QFrame (framePojok)

Kode Program

Sama dengan kegiatan ngite kita kemarin, hanya berkas mainwindow.cpp yang penting.

mainwindow.cpp


#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtGui>

Dialog::Dialog()
{
    QVBoxLayout *layoutKontainerKanan  = new QVBoxLayout;
    QVBoxLayout *layoutKontainerKiri   = new QVBoxLayout;
    QVBoxLayout *layoutKontainerTengah = new QVBoxLayout;
    QVBoxLayout *layoutKontainerBawah  = new QVBoxLayout;
    QVBoxLayout *layoutKontainerPojok  = new QVBoxLayout;
    QGridLayout *layoutUtama           = new QGridLayout;

    QPushButton *tombolSatu          = new QPushButton("SATU");
    QPushButton *tombolDua           = new QPushButton("DUA");
    QPushButton *tombolTiga          = new QPushButton("TIGA");
    QPushButton *tombolEmpat         = new QPushButton("");

        layoutKontainerKanan->addWidget(tombolSatu);
        layoutKontainerKanan->addWidget(tombolDua);
        layoutKontainerKanan->addWidget(tombolTiga);
        layoutKontainerKanan->addWidget(tombolEmpat);

        QSize size(88,88);                                  //menentukan ukuran, bisa dipakai di mana-mana nanti

        tombolEmpat->setMinimumSize(100,100);               //objek size lalu dimasukkan ke dalam method setIconSize dalam tombolEmpat
        tombolEmpat->setIconSize(size);                     //nggak sangka, dasar OOP; sampai ukuran ikon pun disimpan sebagai objek
        tombolEmpat->setIcon(QIcon(":/gambar/ubuntu.png")); //logo ubuntu.png ini jadi seukuran 88x88 betulan dalam tombol [sebelumnya gagal]

    QPushButton *tombolLima          = new QPushButton("LIMA");
    QPushButton *tombolEnam          = new QPushButton("ENAM");
    QPushButton *tombolTujuh         = new QPushButton("TUJUH");
    QPushButton *tombolDelapan       = new QPushButton("DELAPAN");

        layoutKontainerKiri->addWidget(tombolLima);
        layoutKontainerKiri->addWidget(tombolEnam);
        layoutKontainerKiri->addWidget(tombolTujuh);
        layoutKontainerKiri->addWidget(tombolDelapan);

    //TOMBOL-TOMBOL DI BARISAN BAWAH
    QPushButton *tombolSembilan      = new QPushButton("SEMBILAN");

        layoutKontainerBawah->addWidget(tombolSembilan);

    QPushButton *tombolSepuluh       = new QPushButton("SEPULUH");

        layoutKontainerPojok->addWidget(tombolSepuluh);

    //FRAME-FRAME PEMUAT TOMBOL
    QFrame *frameKanan = new QFrame;
    frameKanan->setLayout(layoutKontainerKanan);

    QFrame *frameKiri  = new QFrame;
    frameKiri->setLayout(layoutKontainerKiri);

    QFrame *frameTengah = new QFrame;
    frameTengah->setFixedWidth(66);                     //berhasil mengatur ukuran lebar frame secara galak
//    frameTengah->setFrameShadow(QFrame::Raised);      //setFrameShadow dan setFrameStyle
//    frameTengah->setFrameShape(QFrame::StyledPanel);  //kalau dimatikan, maka semua shadow hilang dan hanya tampak spasi kosong
    frameTengah->setLayout(layoutKontainerTengah);      //jangan lupa masukkan layout ke dalam frame

    QFrame *frameBawah = new QFrame;
    frameBawah->setLayout(layoutKontainerBawah);

    QFrame *frameSangga = new QFrame;
    frameSangga->setFixedHeight(88);

    QFrame *framePojok  = new QFrame;
    framePojok->setFixedHeight(50);
    framePojok->setLayout(layoutKontainerPojok);

    layoutUtama->addWidget(frameKanan, 1, 3);
    layoutUtama->addWidget(frameTengah, 1, 2);
    layoutUtama->addWidget(frameKiri, 1, 1);
    layoutUtama->addWidget(frameBawah, 3, 1);
    layoutUtama->addWidget(frameSangga, 2, 1);
    layoutUtama->addWidget(framePojok, 3, 3);
    layoutUtama->setColumnMinimumWidth(3, 100);     //menentukan jumlah kolom dan lebar masing-masingnya
    layoutUtama->setRowMinimumHeight(3, 10);       //menentukan jumlah baris dan tinggi masing-masingnya
    setLayout(layoutUtama);
}

Analisis Kode Program

Sebenarnya sama saja dengan program sebelumnya. Maka akan saya jelaskan beberapa saja yang terpenting.

SATU

QFrame *frameKanan = new QFrame;
 frameKanan->setLayout(layoutKontainerKanan);

Masih seperti kemarin, itulah bentuk umum pembuatan objek dari kelas. Di sini yang disebut kelas ialah QFrame sedangkan objeknya frameKanan. Sesudah dibuat, objek dipasangi layout dengan memakai method setLayout.

DUA

frameTengah->setFixedWidth(66);

Inilah ide dasar program ketiga ini. Method setFixedWidth, sesuai namanya, berguna untuk menentukan ukuran lebar dari frameTengah. Frame yang ini posisinya ada pada baris pertama kolom kedua. Kalau bingung, lihat lagi Peta GUI di atas.

TIGA

layoutUtama->addWidget(frameKanan, 1, 3);
layoutUtama->addWidget(frameTengah, 1, 2);
layoutUtama->addWidget(frameKiri, 1, 1);
layoutUtama->addWidget(frameBawah, 3, 1);
layoutUtama->addWidget(frameSangga, 2, 1);
layoutUtama->addWidget(framePojok, 3, 3);

Perhatikan, layoutUtama sudah dibentuk dari QGridLayout, bukan layout model lainnya. Kalau dibentuk dari kelas ini, maka dia memiliki bentuk umum passing parameter ala QGridLayout juga. Dan ini spesial karena Grid Layout milik Qt itu fleksibel bisa ke samping dan ke bawah sekaligus. Misalnya saja, kode layoutUtama->addWidget(frameKanan, 1, 3); berarti maksudnya masukkan ke dalam Grid Layout bernama layoutUtama sebuah objek bernama frameKanan, pada baris 1 kolom 3. Mudah sekali, bukan? Begini bentuk umumnya:

void QGridLayout::addWidget ( QWidget * widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = 0 )

Bentuk umum ini saya dapat dari dokumentasi internal Qt Creator (tekan F1). Bentuk umum yang njelimet ini, ternyata bisa diterjemahkan jadi kode saya tadi. Bagaimana memahaminya? Begini caranya:

  1. void ini berarti bentuk kode QGridLayout::addWidget dst. adalah fungsi, bukan kelas bukan yang lain. Jadi, tidak perlu dilihat nama QGridLayout-nya kalau mau menggunakan ini. Cukup lihat addWidget dst. saja. Ini artinya fungsi addWidget() di dalam kelas QGridLayout itu cara pakainya demikian. Dan memang berbeda addWidget untuk QGridLayout dengan yang untuk layout lainnya.
  2. QWidget * widget diganti dengan frameKanan
  3. int fromRow diganti dengan 1
  4. int fromColumn diganti dengan 3
  5. sisanya tidak diisi tidak apa-apa.

EMPAT

layoutUtama->setColumnMinimumWidth(3, 100);
layoutUtama->setRowMinimumHeight(3, 10);

Penjelasannya persis seperti nama method-nya. Bentuk umumnya adalah

void QGridLayout::setColumnMinimumWidth ( int column, int minSize )

yang artinya fungsi setColumnMinimumWidth ini gunanya untuk mengatur ukuran lebar minimum untuk kolom yang ditentukan. Maka, kode saya tadi maksudnya aturlah pada kolom ketiga, ukuran lebar 100 piksel.

LIMA

QSize size(88,88);
tombolEmpat->setMinimumSize(100,100);
tombolEmpat->setIconSize(size);
tombolEmpat->setIcon(QIcon(":/gambar/ubuntu.png"));

Nah, untuk kode ini, sengaja saya akhirkan penjelasannya. Pertama, dibuat sebuah objek yang menampung suatu dimensi piksel x piksel. Objek itu bernama size yang diturunkan dari kelas QSize. Ini unik, khas OOP. Segalanyaaa… objek. Bahkan sampai yang namanya dimensi pun dibuat sebagai objek. Sesudah itu, tombolEmpat diatur ukuran minimumnya lalu nah. Inilah gunanya. Dengan method milik PushButton yang bernama setIconSize, objek size tadi dimasukkan ke sini. Jadi kita tidak menuliskan setIconSize(88,88) melainkan setIconSize(size). Gunanya untuk baris berikutnya. Method setIcon gunanya untuk mengatur ikon dari tombol. Bisa ditebak, saya memang ingin membuat aplikasi yang berbasis gambar lagi. Begitu gambar dimasukkan, karena tadi sudah diatur dengan setIconSize, maka otomatis nanti kalau dijalankan programnya, ikon yang ditentukan di sini pasti berukuran 88 x 88. Mudah dipahami, bukan? Yang unik dari method terakhir ini adalah setIcon(QIcon(“”));. Perhatikan, ada method di dalam method. Dan di sini dipakailah kelas QIcon. Saya sendiri tidak seberapa paham mengapa harus begini (tetapi saya mengerti juga buat apa?) yang penting bisa masuk gambarnya. Perhatikan lagi, :/gambar/ubuntu.png itu adalah aturan Qt Creator dalam mengimpor gambar. Lihat tulisan pertama saya soal Qt bila belum mengerti soal impor gambar.

ENAM

frameTengah->setFrameShadow(QFrame::Raised);
frameTengah->setFrameShape(QFrame::StyledPanel);

ngite-kedua12

Khusus untuk baris ke-58 kode, saya jadikan komentar. Seandainya diaktifkan, maka nanti frameTengah akan kelihatan border-nya. Bentuk border yang seperti ini keren, tetapi saya tidak inginkan dalam program kali ini. Mungkin nanti pas perlu baru dipakai. Yang penting, perhatikan passing parameter-nya. QFrame::Raised untuk setFrameShadow dan QFrame::StyledPanel untuk setFrameShape. Begitu cara menulis passing parameter-nya. Anda bisa mencarinya dalam dokumentasi internal Qt Creator untuk jenis shadow dan jenis framestyle lainnya.

Hasil Akhir

Ini hasil yang saya inginkan, yakni ada spasi kosong antargrup. Sebagai bonus, kita berhasil membuat tombol dengan gambar sekaligus mengatur sekehendak kita ukurannya.

ngite-kedua9

Bandingkan dengan program kemarin yang masih kelihatan spasi antargrupnya:

ngite-kedua11

Rangkuman

  1. Grid Layout adalah yang paling bebas yang bisa dipakai untuk meletakkan objek-objek GUI ke samping dan ke bawah.
  2. Untuk mengatur ukuran gambar dalam tombol, kita bisa gunakan QSize untuk menampung ukuran dan memasukkannya ke dalam passing parameter dalam method setIconSize.

Qt Creator – Pemrograman Aplikasi GUI di Linux


Bismillahirrahmanirrahim.

Tulisan ini tidak lain ingin memaparkan bagaimana membuat aplikasi GUI dasar dengan mudah menggunakan Qt Creator. Aplikasinya sederhana, hanya menunjukkan fungsi dasar tombol dan label (untuk gambar). Jika tombol pertama diklik, maka gambar A muncul. Jika tombol kedua diklik, maka gambar B muncul. Hanya itu saja sudah cukup untuk memahami cara pakai 2 dasar terpenting memrogram dengan Qt Creator yakni signal dan slot. Tutorial ini dibuat di Linux dan aplikasinya untuk Linux.

SATU :: Menyiapkan Proyek

1. Buka Qt Creator dan buat proyek baru. Pilih Qt Widget Project > Qt GUI Application. Selalu pilih ini untuk proyek yang akan datang.qtproject

2. Beri nama Double karena kita hanya akan membuat program dengan 2 tombol. Selanjutnya Next.

qtproject2

3. Next terus sampai pada bagian Class Information, berikan nama Double pada Main Class maka semuanya akan mengikuti secara otomatis.

qtproject3

4. Finish, maka tampilan Qt Creator Anda akan seperti ini.

qtproject4

5. Perhatikan, dalam proyek ini Anda 5 berkas penting secara otomatis:

                        • Double.pro (berkas proyek Qt Creator yang bisa dipakai di OS mana pun)
                        • double.cpp (berkas kode inti tempat signal dan slot dituliskan)
                        • double.h (berkas header)
                        • double.ui (berkas GUI)
                        • main.cpp (berkas berisi fungsi yang selalu ada dalam semua program C/C++ yakni main())

Selalu seperti ini jika Anda membuat proyek GUI baru.

DUA :: Sedikit Pengaturan Qt Creator

Klik pada ikon Filter Tree > Simplify Tree. Maka kerumitan folder yang tadinya begini:

 qtproject5  qtproject7

menjadi sederhana begini:

qtproject6

TIGA :: Membuat Aplikasi

1. Buka double.ui ini adalah berkas XML yang mengatur GUI. Kalau diklik, maka GUI Builder milik Qt Creator akan langsung muncul. Di sini letak enaknya memrogram dengan Qt Creator. Bisa drag and drop dan jadi GUI langsung seperti di Microsoft Visual Basic. Cari elemen GUI bernama Push Button. Tempelkan dua biji. Di bawahnya, tempelkan Label. Jadinya seperti ini.

qtproject8

2. Buang teks asli dari Label sehingga kosong. Lalu ganti teks Push Button dengan SATU dan DUA. Lihat ini. Pastikan Label masih terpilih.

qtproject9

3. Berikan nama objek untuk Label ini pada Property Panel di samping kanan. Di situ, di bagian atas sendiri ada QObject, di bawahnya pas ada objectName. Pas di situ, ganti tulisan label dengan Gambar. Ingat-ingat nama objek ini.

qtproject10

4. Sekarang ganti juga nama objek dari tombol SATU dan DUA menjadi SATU dan DUA.

5. Sekarang klik kanan tombol SATU > Go To Slot. Di sinilah Anda akan berjumpa 2 inti Qt Creator, signal dan slot. Lihat jendela yang muncul. Yang ada di situ semuanya adalah signal. Apa itu signal? Anggap saja sekarang, signal = nama fungsi ketika terjadi sesuatu pada tombol SATU. Kebetulan yang harus kita pilih adalah signal bernama clicked(). Anda tidak usah perhatikan kolom sebelah kanan. Tekan OK saja.

qtproject11

5. Hasil dari signal terpilih adalah slot, yakni satu fungsi baru yang kosong pada berkas double.cpp. Perhatikan, Anda sedang menyunting double.cpp. Dan perhatikan pula, nama objek SATU menjadi nama fungsinya. Apa sih, yang sedang kita kerjakan ini? Intinya, kita membuat jalan (signal) bagi tombol SATU, agar jika diklik (clicked), dia mengganti isi (slot) dari objek Gambar. Anda hanya akan fokus pada fungsi kosong ini.

qtproject12

6. Karena akan butuh dua buah berkas gambar (JPG/PNG), maka kita impor gambar dulu sebelum menuliskan kodenya ke dalam slot void Double::on_SATU_Clicked() yang baru jadi. Ini caranya mengimpor gambar. Klik kanan proyek kita > Add New > Qt > Qt Resource File. Ini akan membuat sebuah berkas baru berformat .qrc dalam proyek kita. Beri nama citra (karena tadi sudah ada nama Gambar), dan alamat foldernya sudah biarkan saja default pada proyek kita.

qtproject13

qtproject14

7. Tampilan Qt Creator Anda akan seperti demikian. Ini sebenarnya Qt Creator sedang menyunting isi dari citra.qrc yang baru saja dibuat.

qtproject158. Klik Add > Add Prefix. Pasti hasilnya /new/prefix1. Sekarang Klik Add > Add Files. Pilih gambar apa saja dari sistem Anda. Kalau ada peringatan, oke-oke saja. Yang penting nanti harus ada 2 gambar seperti ini. Ingat nama berkas gambarnya.

qtproject16

9. Kembali ke double.cpp. Isikan kode C++ berikut pada slot yang sudah dibuat.

QImage bingkai;
bingkai.load(":/new/prefix/desktopfungsional-3a.jpg");
ui->Gambar->setPixmap(QPixmap::fromImage(bingkai));

PENTING! Ubah nama berkas gambar Anda sesuai berkasnya. Misalnya satu.png, maka ganti desktopfungsional-3a.jpg dengan satu.png. Saya hanya memberi contoh global.

10. Lakukan hal yang sama dari poin 5 agar tombol DUA juga memiliki fungsi untuk memanggil gambar pada Label. Pokoknya bedakan gambar untuk SATU dengan yang untuk DUA.

11. Jika sudah, maka keseluruhan kode double.cpp Anda akan menjadi seperti ini.

qtproject17

12. Sudah cukup. Sekarang klik tombol segitiga hijau (Run | Ctrl+R). Program Anda akan berjalan. Dia pasti bisa ganti gambar setiap klik tombol. Sampai sini, program Anda sudah berhasil. Selamat, aplikasi pertama Anda baru saja tercipta!

qtproject18

qtproject19

EMPAT :: Publikasi

Anda ingin agar aplikasi buatan Anda ini digunakan orang lain? Mudah. Lakukan saja Build maka sebuah eksekutabel (mirip EXE) akan tercipta dan ini bisa Anda jalankan di Linux lainnya. Klik saja tombol palu (Ctrl+B). Maka pada folder QtProject kita, akan muncul folder baru bernama Double-build-desktop-Qt_4_8_1_in_PATH__System__Release. Dalam Ubuntu saya, folder ini berada di /home/master/Publik/QtProject. Ya, berdampingan dengan folder Double dan bukan di dalam Double. Buka folder ini dan Anda pasti temukan satu berkas bernama Double. Coba jalankan. Pasti aplikasi Anda muncul. Pindahkan saja berkas Double ini ke Ubuntu teman Anda dan jalankan. Berkas lainnya abaikan saja. Selamat, Anda telah berhasil membuat aplikasi selayaknya aplikasi buatan para programer!

qtproject20

qtproject21

PERINGATAN

Saya menduga build yang dilakukan Qt Creator pada kondisi default-nya adalah dynamic linking yang artinya aplikasi buatan Anda ini tidak mandiri di komputer orang lain. Dia tidak bisa sendirian sebagaimana EXE di Windows sehingga butuh suatu pustaka tambahan yang mesti diinstal duluan di komputer lain sebelum dia dijalankan. Pustaka itu adalah Qt. Ini sebabnya aplikasi buatan kita ini bisa berjalan mulus di sesama Ubuntu (karena Ubuntu prainstal sudah ada Qt-nya). Lakukan perintah ldd Double untuk mengetahui apa saja pustaka yang diperlukan oleh aplikasi Anda ini. Puaskan rasa ingin tahu Anda.

Penutup

Saya butuh fokus. Ketika menulis ini, sungguh rasanya saya bebas dari distraksi yang lama mengekang saya untuk menulis soal Qt. Alhamdulillah. Saya harap ini cocok untuk membuka pintu Anda memrogram Qt atau membuat aplikasi GUI di Linux. Semoga ini bermanfaat.

Menyoal Kebebasan


Bismillahirrahmanirrahim.

Semenjak awal Otodidak dibuat hingga selesainya Behind The Scene, saya terus berada dalam ruang vakum. Saya berhenti menulis. Sekarang perasaan ingin menulis itu terus menggedor. Lalu jadilah esai ringkas ini. Esai ini dimulai dari pertemuan saya dengan sekian peristiwa di komunitas yang menyandarkan dirinya dengan sesuatu bernama kebebasan. Kebebasan dalam software. Dan mereka –sepertinya– bangga dengan kebebasan itu. Saya ingin menulis tentang itu. Berdasarkan apa yang saya miliki sekarang.

  1. Apalah artinya kebebasan jika pengguna tidak bebas membeli hardware? Jika hardware yang dibeli ternyata oh ternyata tidak kompatibel dengan OS yang disandarkan pada kebebasan?
  2. Apalah artinya kebebasan jika pengguna tidak bebas mengubah tampilan OS-nya menjadi mirip OS lain, yang secara user experience dia butuhkan? Jika setiap ada pengguna ingin tampilan seperti OS lain, dia diejek?
  3. Apalah artinya kebebasan jika pengguna tidak bebas menjalankan aplikasi OS lain di atas compatibility layer? Jika setiap ada pengguna mau melakukan itu, dia diejek juga? Padahal compatibility layer-nya sendiri juga software bebas yang diakui oleh orang-orang itu sebagai bagian dari kebebasan?
  4. Apalah artinya kebebasan jika pengguna tidak mendapatkan kemudahan seperti yang dia peroleh di OS lainnya? Jika melakukan instalasi aplikasi saja harus tersambung internet, yang notabene bukan barang bebas di Indonesia? Jika pada akhirnya berbagi installer aplikasi menjadi sesuatu yang mustahil dilakukan?

Itulah empat hal yang saya temukan berulang-ulang secara rekursif di mana-mana. Saya punya akun di hampir semua komunitas kebebasan itu.

Lalu di mana kebebasan itu?

Perlu waktu bagi kita untuk menjawabnya bersama, karena permasalah ini rumit. Permasalahan ini sama dengan pola dependensi paket-paket saat prajurit seperti apt/zypper/pacman beraksi. Inilah realitas yang kita hadapi di Indonesia ini. Inilah poin-poin yang kita lemah di dalamnya. Inilah security holes yang mesti kita tambal. Mulai dari diri kita, dari hal-hal kecil ini, hari ini juga.

Menyoal Kebebasan 1

Saya dapatkan ini dari peristiwa modem dan VGA. Menginstal OS kebebasan tetapi dia tidak bebas memperoleh fitur dari hardware yang dia miliki. OS itu untuk hardware, agar manfaatnya dapat diambil oleh pemiliknya. Namun justru dengan OS kebebasan ini, si pemilik tidak merasakan manfaat dari modem atau VGA yang dia punya.

Modem: tidak bisa cek pulsa, tidak bisa sms, tidak bisa telepon, mau konek saja butuh internet lainnya, mau konek saja harus setting secara manual ala teknisi UNIX, mau konek saja tidak sederhana (sederhana=sedikit gerak untuk mencapai 1 tujuan). Padahal manfaat dari modem adalah yang paling penting bagi pengguna, yakni internet. Ini bukan kebebasan.

VGA: glitch, watermark, clipping, font rendering jelek, performa kurang, layar error,  padahal VGA-nya mahal lagi canggih. VGA semahal itu jadi tidak berguna dan seakan menjadi mesin rongsokan saja. Lalu di mana kebebasannya? Apalagi jika yang namanya penggerak proprietary dianggap sesuatu yang kontra-kebebasan, padahal pengguna tidak butuh istilah itu. Pengguna hanya butuh VGA dia berjalan dengan semestinya dan bisa di-tweak dengan bebas.

Apa hanya dua benda ini? Tidak. Pikirkan lagi perangkat wifi Broadcom dan teman-temannya. Berapa banyak pengguna yang bertanya soal wifi-nya, padahal OS kebebasan itu selalu butuh internet? Bagaimana dia bisa instal aplikasi pendukung jika internetnya saja tidak jalan di laptop dia? Dan mengunduh satu paket berarti juga harus tahu+mengunduh paket lain yang menjadi dependensinya? Inikah kebebasan? Bukan. Dan karena ada pesan dari salah seorang pengguna komputer yang berkata seperti ini: “ngapain pakai OS kebebasan kalau ujung-ujungnya beli VGA mahal-mahal nggak fungsi?“, saya terinspirasi untuk menyusun esai ini. Ini belum masuk ke hardware lainnya.

Di manakah kebebasan? Kebebasan yang kita umbar sana-sini, kita gembar-gemborkan, dan bahkan tanpa sadar sebagian kita memujinya hampir tanpa henti. Sudah pantaskah sikap kita itu?

Menyoal Kebebasan 2

  1. Apa kesalahan seorang pengguna jika dia ingin OS kebebasan yang dia miliki tampilannya diubah menjadi seperti OS lain? Tidak ada.
  2. Lalu mengapa masih ada ejekan terhadap permintaan/pertanyaan yang demikian di forum-forum? Karena sikap kita yang tidak tepat, atau saya katakan: kita bersikap tanpa mengetahui permasalahan. Salah satu bentuknya, ya, fanatisme.
  3. Lebih jauh, apa salahnya seorang pengguna yang memanfaatkan fasilitas Feature Request dalam wiki, meminta agar user experience design milik OS yang punya wiki dibuat sedemikian mirip dengan OS lain? Tidak ada.
  4. Lalu mengapa sampai ada ejekan terhadap pengguna tersebut? Bukankah dia sudah memberikan kepedulian terhadap OS yang punya wiki? Jawabannya mirip-mirip saja.

Jika ini terjadi pada orang-orang yang baru tahu OS kebebasan tersebut, dan baru memilikinya di laptop mereka, maka ini bukan kebebasan. Si pengejek mengingkari slogan kebebasan yang dia anut sendiri. Dia menjadikannya kosong dan sirna seperti buih di lautan. Lalu di manakah kebebasan?

Menyoal Kebebasan 3

  1. Apakah salah pengguna yang ingin menjalankan aplikasi OS lain semacam Microsoft Office di atas compatibility layer? Tidak.
  2. Apakah compatibility layer-nya adalah software bajakan? Tidak juga.
  3. Apakah compatibility layer-nya bukan software bebas? Tidak sama sekali. Dia software bebas. Dia bagian dari kebebasan.
  4. Lalu mengapa masih ada ejekan terhadap setiap pengguna baru yang membutuhkan compatibility layer tersebut? Lalu bertanya masalah software lain yang diinstal ke dalamnya? Jawabannya sama: sikap kita tidak tepat atau kita bersikap tanpa mengetahui permasalahan.

Itukah yang dinamakan kebebasan? Tidak.

Menyoal Kebebasan 4

  1. Apakah pengguna harus selalu terhubung ke internet setiap ingin menginstal aplikasi? Tidak.
  2. Kenyataannya? Sebaliknya.
  3. Efek buruknya? Boros bandwidth dengan amat sangat. Di sisi pengguna, ini dinamakan repot. Tidak ada mekanisme backup per aplikasi yang bisa disebarkan ke OS di mesin yang lain, sebagaimana sistem EXE di OS yang katanya tidak ada kebebasannya sama sekali.

Inikah kebebasan? Tidak.

Seharusnya Kebebasan 1-2-3-4

  1. Seharusnya pengguna bebas dari kekhawatiran akan tidak kompatibelnya hardware yang dia miliki.
  2. Seharusnya pengguna bebas untuk mengubah tampilan OS dia sebagaimana dia butuhkan, dan bebas mendapatkan jawaban bagaimana cara melakukannya.
  3. Seharusnya pengguna bebas memakai compatibility layer (tentu selama software targetnya legal) dan bebas mendapatkan jawaban bagaimana cara melakukannya.
  4. Seharusnya pengguna bebas memperoleh kemudahan dan kesederhanaan penggunaan suatu OS serta memperoleh kemudahan dan kesederhanaan juga dalam membagikan aplikasi yang sudah dia unduh.

Itulah kebebasan yang saya ingin sampaikan dalam esai ini. Kebebasan yang saya ingin dijaminkan kepada setiap pengguna yang ada, lebih dari atau minimal setara dengan kebebasan ala kita biasanya yang sering kita pertunjukkan pada dunia. Mengapa? Karena inti dari segala revolusi OS, segala macam promosi OS, segala macam marketing aplikasi apa pun, adalah pengguna. Pengguna adalah raja dan segala-galanya bagi marketing ini. Dan karena saya hidup di Indonesia. Saya mendukung pengguna awam dan pemula di Indonesia!

Mengapa-oh-mengapa?

Dua hal. Pertama, saya bayangkan nanti akan ada pertanyaan semacam “Mengapa Anda menulis ini?” maka saya siapkan jawabannya:

  1. Saya sedang ingin menulis.
  2. Saya tidak suka dengan keadaan yang saya temukan. Saya hendak mengubahnya.
  3. Saya ingin OS kebebasan mendapatkan tempat yang selayaknya di tangan-tangan pengguna komputer di seluruh Indonesia, agar mereka semua menikmati kebahagiaan dan manfaat besar yang sama seperti saya sekarang yang juga menggunakannya.

Kedua, saya bayangkan ada pertanyaan “Mengapa tidak dimulai dengan 0?” maka jawabannya:

  1. Saya orang Indonesia.
  2. Saya berpola pikir orang Indonesia.

Realitas?

OS kebebasan kita masih jauh dari empat poin kebebasan ini. Tentulah kebebasan versi saya yang subjektif, yang kecil lagi ringkih pemahamannya. Akan tetapi silakan direnungkan. Mau lari ke mana lagi kalau tidak kepada (minimal) keempat hal ini? Realitas yang ada sungguh masih jauh dari harapan.

Sikap kita? Seringkali kita terlalu cepat senang dan puas dengan kebaikan-kebaikan yang kita lakukan. Kita mungkin merasa teknologi kitalah yang paling hebat. Bahkan merasa bahwa sistem kebebasan ini adalah yang terbaik. Pikirkan kembali, ATM yang ada di sekitar kita menggunakan OS tidak bebas. Sekian banyak BUMN kalau membuka lowongan kerja, akan tampak membutuhkan ahli pada software yang tidak bebas. Pikirkan lagi, rekaman kajian yang ada di http://ilmoe.com itu disediakan dalam mp3, format yang kita kata tidak bebas, akan tetapi telah bermanfaat sangat besarnya kepada sekian banyak kaum muslimin di Indonesia. Pikirkan kembali. Kita tidaklah sempurna.

Realitas yang paling nyata adalah perjuangan masih panjang. Terlalu cepat untuk bersantai. Terlalu murah untuk menyerah. Dan realitas senantiasa kontra-permainan. Realitas selalu mendepak kita dari main-main.

Solusi?

Mungkin bagian yang paling Anda sukai adalah ini. Bagian ini ada agar jangan sampai dikira OS kebebasan tidak memiliki kemanfaatan. Ada kemanfaatannya, bahkan bisa menjadi yang terbesar. Dan saya adalah salah satu anak muda yang dididik dengan paradigma: selalu ada solusi. Siapa yang mendidik? Ya, komunitas kebebasan itu. Ini saya tunjukkan beberapa solusi yang saya temukan dan saya bahagia kala menemukannya.

  • Open Source Driver yang sangat mengagumkan -> bagaimana tidak? Kala sebuah hardware dibuat dengan diskriminasi terhadap OS kebebasan (drivernya tidak dibuat), maka sebagian orang membuatkan drivernya untuk OS kebebasan ini. Ini membuat baterai, beberapa sound card, beberapa VGA dan periferal lain berfungsi di OS kebebasan padahal aslinya mustahil. Ini sangat mengagumkan. Siapa saja yang kagum dengan anak tanpa tangan lalu bisa menulis akan kagum juga, sama seperti saya.
  • Kernel Linux yang luar biasa fleksibel dan boleh dikata ajaib -> bagaimana tidak ajaib kala saya tidak menginstal driver apa pun di mesin komputer ASUS X44C saya ini namun segalanya bekerja dengan lancar? Dan bagaimana tidak ajaib kala modem Huawei EC1261-2 saya langsung dikenali dan konek internet tanpa instal driver dan software apa pun? Bahkan di Windows pun tidak sampai sepraktis itu.
  • Tampilan yang banyak pilihannya -> Compiz, KWin, Mutter, Emerald, Awesome, Openbox, DWM, dan lain-lain dari sisi pengolah tampilan jendela. KDE, GNOME, XFCE, LXDE, Enlightenment, RazorQt, Manokwari, Pantheon, dari sisi pengatur keseluruhan tampilan OS. Sekian ribu tema yang tersedia di macam-macam web siap diunduh gratis untuk mengubah tampilan. Belum termasuk pernak-pernik macam Conky yang betul-betul indah, Dock seperti Cairo Dock dan AWN, *let/Widget yang jadi default di DE besar macam KDE dan Cinnamon, serta banyak lagi hal yang menjadi permen-mata bagi tampilan OS. Dan sungguh telah tersedia peralatan beserta manualnya, untuk mengubah total tampilan OS kebebasan kita ini menjadi OS lain. Sesuai dengan user experience betulan.
  • Compatibility layer terbaik di dunia yang bernama Wine, menjadikan OS kebebasan kita mendekati sempurna kala si OS sanggup menjalankan aplikasinya sendiri tetapi juga sanggup menjalankan aplikasi yang bukan miliknya, secara baik. Ini semestinya mustahil, akan tetapi sungguh inilah satu daya tarik terbesar OS kebebasan kita. Bagaimana tidak ajaib?
  • Adanya solusi luar biasa bernama Mintbackup dari Linux Mint yang mampu melakukan backup aplikasi yang sudah diunduh/diinstal, dengan kebebasan di sisi pengguna untuk memilih mana yang mau di-backup. Bagian yang saya tebalkan dan garis bawahi adalah yang terpenting. Lalu bisa di-restore kapan saja pengguna butuh. Bahkan Windows pun (sepengetahuan saya) tidak bisa seperti itu. Sayangnya banyak distribusi di luar Mint seakan kurang peduli terhadap solusi brilian ini sehingga software ini hanya tersedia untuk Mint. Yang lain? Meski tidak sempurna 100%, tidak sepraktis EXE/MSI/DMG, tetapi ada Keryx, apt-web, apt-id, apt-offline, alldeb-maker, alldeb-user, PortableLinuxApps.orgSynaptic script, offline repository in DVD, Zeroinstall, dan lain-lain.

Dan masih sisa sekian banyak solusi bermanfaat yang sudah dirasa manfaatnya oleh banyak pengguna. Akhirnya tidak hanya paradigma selalu ada solusi, melainkan juga solusi itu banyak. Meski begitu, masih teramat luas ladang solusi yang bisa kita garap. Masih sangat lebar kesempatan kita untuk berkarya. Masih sangat besar kesempatan kita untuk membantu orang lain dengan pengetahuan komputer yang kita miliki. Janganlah kita meremehkan hal ini.

Ide dari Mana?

Ya, dari manakah ide untuk menulis esai ini? Sederhana saja. Saya membaca laman ini: http://www.wikivs.com/wiki/Apple_Innovation_vs_Microsoft_Innovation dan paragraf awalnya sangat berkesan buat saya. Ternyata Microsoft sudah menyadari kesusahan-kesusahan seperti yang kita alami jauh hari sebelum kita menikmati GUI yang seperti OS kebebasan kita sekarang. Mereka melobi perusahaan-perusahaan hardware agar dibuatkan driver untuk OS mereka (baca: mereka membela kompatibilitas/kebebasan 1). Hasilnya jelaslah kini OS mereka dipakai oleh semua pengguna komputer destop, dan semua vendor hardware kini tidak usah diminta oleh Microsoft lagi melainkan merekalah yang berinisiatif membuat driver untuk Microsoft. Inilah hal krusial yang tak terpikirkan oleh saya, dan saya yakin banyak teman juga belum tahu mengenai hal ini. Padahal inilah yang terpenting. Di OS kebebasan kita, siapa yang bakal melakukan lobi ini? Ini butuh dana besar. Atau butuh keajaiban. Dari sinilah idenya.

Kesimpulan

  1. Berhenti mengejek pengguna baru, apalagi yang awam.
  2. Software hanya wasilah, bukan tujuan.
  3. Mulailah mengadakan solusi-solusi untuk masalah yang muncul, minimal bagi diri sendiri.
  4. Bersikap atau bertindak dengan didahului berpikir dan pertimbangan matang adalah yang terbaik.

Penutup

Ya, software hanya wasilah. Dia bukan tujuan. Maka dari itu gunakan software sesuai keperluan. Tidak perlu bersikap berlebihan. Selama legal, pakai saja. Buat apa membebani diri lalu membebani orang lain? Sampai sini saya puas sekali. Akhirnya saya menulis esai setelah lama. Terima kasih dari saya untuk asatidzah ahlus sunnah di Indonesia yang memberikan saya ilmu dan inspirasi yang sangat kuat untuk menulis esai ini. Semoga bermanfaat dan terima kasih.

Istirahat Bersama Otodidak


Lama sekali tidak melakukan penulisan manual, mungkin 4 bulan sudah. Sejak Otodidak mulai dibuat, saya hanya terfokus pada pengetikan mesin. Itu pun sedikit esai yang sempat saya tulis. Namun hati kecil tak bisa dibohongi. Saya masih ingin terus menulis. Setidaknya masih ada beberapa rencana yang sudah saya canangkan. Di antaranya menulis esai Behind The Scene berseri untuk Otodidak dan menulis esai khusus mengapa Otodidak dibuat. Tujuannya jelas, mengajak semua anak muda Indonesia untuk mengembangkan aplikasi. Kalau sudah ada gerakan pemrograman Android yang sanggup menarik minat banyak orang, mengapa tidak untuk gerakan pemrograman aplikasi Linux? Biarlah saya memulainya.

Pertama-tama, yang paling penting, memikirkan objek. Objek saya adalah anak-anak muda Indonesia. Usia SD/SMP/SMA dan sangat saya harapkan ada anak SMK tertarik mengembangkan. Karena objeknya adalah mereka, dan mereka adalah bagian dari Indonesia, maka ada 2 hal penting yang harus dipersiapkan: (1) pola pikir sederhana (2) hindari menggunakan pemikiran Barat untuk mengajari mereka. Dengan memerhatikan 2 hal ini, saya akan melangkah. Tanpanya, orang Indonesia akan sulit mengenal pemrograman. Inilah konsep yang saya bangun dalam rencana tersebut.

Sekaang, apa wujud dari 2 hal penting ini? Menurut saya, tentu saja dengan

  1. mengenalkan pemrograman berbasis visual, dominan gambar minim kode, hasil instan, dan interaktif, serta proses pengerjaan aplikasi secara keseluruhan yang sederhana (dikurangi kerumitannya secara ekstrem).
  2. pemikiran barat yang saya maksud ialah metode mengajar supermandiri yang menurut saya tidak cocok untuk orang Indonesia, apalagi usia SD/SMP/SMA. Jadi rencana saya, wujudnya adalah saya yang akan menyiapkan segalanya mulai dari buku, tutorial, gambar, contoh aplikasi (Otodidak), dan lain-lain sehingga minim sekali nanti saya suruh mereka cari sendiri. Tujuan saya hanya mengajari mereka bikin aplikasi, bukan memperumit mereka. Sederhana, bukan?

Mengapa saya melakukan ini? Sederhana juga. Inspirasi saya adalah adik-adikku di seluruh Indonesia yang putus sekolah, teman-temanku di usia SMA yang mencari jati diri, dan kisah Lintang di buku cerita Laskar Pelangi. Kalian semuanya, janganlah menyerah. Aku tahu kalian ingin jadi orang yang berguna, yang bermanfaat bagi orang lain. Jika keterbatasan menghimpit kalian, lawan! Kalian sanggup melakukannya. Adik-adikku, kawanku semuanya, percayalah. Hari ini pun kalian bisa jadi orang yang berguna, tidak perlu menanti. Tidak perlu ada putus asa, tidak perlu ada perkelahian. Kalian semua ada di Indonesia yang subur teknologi informasinya. Kalian semua bisa berguna dengan mendayagunakan teknologi informasi. Salah satu bidangnya adalah pembuatan aplikasi. Ya, aplikasi seperti Otodidak. Oleh karena itu, kakak ingin mengajak kalian semua untuk memulai bidang ini. Industri besar kita yang baru ini. Kita bikin aplikasi, mulai dari yang cara termudah yang kalian pasti bisa. Adik-adikku, kalian semua adalah inspirasi bagi kakak. Jangan pernah menyerah.

Kapan akan dilakukan? Tentu setelah saya siap. Memang sesaat setelah saya putuskan membuat Otodidak, saya langsung mendokumentasikannya. Saya tulis dan gambar desain aplikasi di buku tulis sekolah saya (SIDU 58 lembar). Saya juga catat potongan kode istimewa yang dibutuhkan setiap saya mengedit Otodidak. Cukup lengkaplah dokumentasi manualnya. Hanya saja saya belum memotret buku itu (revisi: sudah dipotret pada 10 Maret 2013). Dokumentasi itulah yang akan menjadi titik berat Otodidak Behind The Scene nanti. Tentulah ditambah literatur luar agar tujuan membuat aplikasi tercapai. Sederhana dan mudah, bukan? Jadi, ini baru bisa dilaksanakan setelah buku itu selesai dipotret.

Apakah hanya dengan menulis esai? Tidak. Saya ingin menerapkan apa yang selalu dicari jawabannya oleh Microsoft: what’s next? Jadi, setelah ini, saya ingin mengadakan kuliah online bagaimana membuat aplikasi dengan Netbeans. Bentuk kuliahnya sama persis dengan kuliah kami biasanya yang diselenggarakan oleh komunitas. Bagaimana itu? Ya, chatting di kanal IRC #ubuntu-indonesia pada server freenode. Sederhana tetapi banyak manfaatnya. Kanal ini bisa menampung jumlah orang tak terhingga. Sebagaimana kuliah kami biasanya, nanti tentu bisa tanya-jawab di sana. Akan saya tunjukkan betapa menyenangkannya. Lagipula, ini berguna juga untuk meramaikan kanal ini.

Setelah merilis Otodidak pada 24 Februari 2013 ini, esok harinya saya langsung istirahat total selama 48 jam. Selama itu saya tidak menyentuh mesin sama sekali. Sekarang badan saya sudah bugar lagi dan siap bertempur kembali. Saya berharap semua ini bermanfaat untuk saya sendiri dan masyarakat Indonesia semuanya. Dukung Indonesia Goes Open Source! Sampai di sini, saya tutup esai ini dengan terima kasih. Terima kasih untuk semua inspirator dan para pembaca.

 

 

Diselesaikan di Mojokerto
pada 26 Februari 2013

Cara Mendapatkan Software Gratis di Internet


Bismillah. Saya menulis ini sebagai bentuk syukur kepada Allah yang atas kemurahanNya saya bisa mendapatkan perangkat lunak/software gratis apa pun yang saya inginkan di internet. Saya tujukan tulisan ini untuk orang-orang yang baru mengenal komputer dan internet, yang merasa sulit untuk memperoleh software tertentu yang dibutuhkan. Biasanya seseorang bingung mau cari di mana suatu program antivirus, office, pemutar audio, desain grafis, aplikasi Al-Qur’an, webserver, web browser, ftp client, aplikasi chatting, dan sebagainya. Biasanya pula bingung bagaimana cara mengunduh/men-download program-program itu. Saya berikan cara ini untuk memperoleh atau mengunduh software yang lisensinya gratis (freeware) dan bebas (free/open source software)Beda dengan biasanya, saya tulis ini untuk pengguna Windows. Silakan biasakan mengunakan software lisensi gratis daripada berbayar jika yang gratis itu sudah mencukupi. Manfaatnya yaitu 1) hemat (lawan boros, sedangkan boros adalah sifat Syaithan) 2) selamat dari syubhat (Anda terhindar dari pembajakan).  Berikut ini caranya.

1. Ketahui dulu, banyak ahli  yang menyediakan software gratis di internet

Ini harus diketahui dulu. Anda boleh merasa tenang karena Anda tidak sendirian. Baik di Indonesia maupun di seluruh dunia, hampir semua pakar maupun awam software rela meluangkan tempat untuk membagi banyak sekali software gratis. Siapa saja mereka? Saya tidak tahu. Tetapi Anda cukup tahu situs-situs mereka. Ini daftar situs untuk mengunduh/download software gratis yang legal dan tidak bercampur dengan bajakan insya Allah. Saya benci mencantumkan situs yang menyediakan aplikasi yang bercampur bajakan. Jika Anda tahu yang demikian, silakan beri komentar biar saya hapus dari sini.

Dari luar negeri:

http://softpedia.com

http://download.cnet.com/

http://filehippo.com

http://majorgeeks.com

http://www.freedownloadsportal.com/

http://snapfiles.com

http://www.filecluster.com/

http://www.geardownload.com/

http://www.nonags.com/

http://freedownloadscenter.com/

http://www.oldversion.com/

http://www.freewarefiles.com/

http://tucows.com

http://downloads.zdnet.com/

http://www.soft32.com/

http://brothersoft.com

bersambung…