Arsip Bulanan: Oktober 2013

Pengantar Pemrograman Aplikasi GUI di Linux (Pustaka, Framework, dan IDE)


Bismillahirrahmanirrahim.

Artikel ini tersedia pula dalam PDF.

Apakah Anda ingin membuat aplikasi Linux? Anda ingin membuat aplikasi yang memiliki GUI sebagaimana program yang dibuat dengan Microsoft Visual Basic? Lakukan sekarang juga dengan memilih satu dari beberapa peralatan berikut. Choose one, master it!

Pustaka

1. GTK+

Pustaka ini adalah standar GUI untuk Ubuntu dan distro keluarga Debian lainnya. Pustaka inilah yang digunakan untuk membangun GNOME, Mate, Cinnamon, Nautilus, dan banyak program terkenal di Linux. GTK+ bisa dipakai di semua sistem operasi. Untuk menggunakan GTK, Anda bisa memakai bahasa C/C++ atau Python. Karena sangat banyak aplikasi Linux dibuat dengan GTK+, maka mudah sekali menemukan contoh aplikasi GTK+ yakni dengan membuka kode sumber aplikasi yang dibuat memakai GTK+.

2. Java SWING
Pustaka ini adalah salah satu standar GUI dalam Java. Aplikasi semacam Otodidak dibuat dengannya. Kelebihan Java SWING adalah kelengkapan tutorial resminya yang sempurna beserta besarnya jumlah komunitas programernya. Tutorial SWING berbahasa Indonesia paling banyak jika dibandingkan dengan peralatan lain yang disebutkan dalam posting ini. Jika Anda baru memulai pemrograman GUI, saya sendiri menyarankan untuk memulai dari SWING.

3. Qt Framework

qt-creator-logoQt sebetulnya bukan hanya pustaka, melainkan sudah merupakan framework untuk GUI. Qt itu sangat lengkap dan ia adalah framework yang membangun KDE, Unity, Texmaker, dan lain-lain. Qt memiliki dokumentasi resmi yang sangat lengkap (setara Java) dan komunitas yang sangat besar. Sedikit jumlah tutorial Qt berbahasa Indonesia tetapi jika Bahasa Inggris bukan halangan untuk Anda, maka dokumentasi asli Qt sudah mencukupi bahkan untuk pemula sekalipun. Kelebihan dokumentasi resmi Qt yang lain adalah lebih mudah dipahami dibanding yang lain sehingga pemula pun bisa mengerti dengan cepat. Untuk menggunakan Qt, Anda bisa menggunakan bahasa C++ atau Python.

IDE

1. Gambas

Nama Gambas merujuk kepada IDE sekaligus bahasa pemrogramannya. Gambas disebut sebagai Visual Basic-nya Linux. Jika Anda familiar dengan Microsoft Visual Basic, maka Anda akan mudah menggunakan Gambas.

2. Lazarus

Lazarus biasa disebut Delphi-nya Linux. Ia adalah IDE untuk Pascal. Anda bisa membuat GUI dengan GUI builder di dalamnya.

3. MonoDevelop

MonoDevelop ini IDE untuk membangun aplikasi GUI dengan C# dan .NET Framework. Ia memiliki GUI builder.

Gambar Contoh Aplikasi

Aplikasi GTK+

nautilus

Nautilus

Aplikasi Java SWING

Pemula-1

Otodidak

Aplikasi Qt

dolphin

Dolphin

Aplikasi dengan Gambas

myunity

MyUnity

Aplikasi dengan Lazarus

PeaZip (pengganti WinRAR dan WinZIP)

Aplikasi dengan MonoDevelop

banshee

Banshee Media Player

Gambar IDE

Glade

Netbeans

resized-netbeans

Qt Creator

qtcreator

Gambas

Lazarus

MonoDevelop

Penutup

Tulisan ini hanyalah pengantar. Gambar-gambar di atas sebagian diambil dari Wikipedia atau dari situs aslinya. Semoga benar-benar menjadi pengantar Anda untuk membuat aplikasi Linux. Semoga bermanfaat untuk Anda.

Cara Menggunakan apt-web


Bismillahirrahmanirrahim.

Alat dan Bahan

  1. Flash disk
  2. Satu folder kosong
  3. Warnet
  4. DownThemAll! (unduh di sini)

Cara Mengunduh

  1. Buka Mozilla Firefox.
  2. Instal DownThemAll! dengan cara dobel klik pada berkas .xpi yang Anda unduh di atas. Ini adalah installer bagi DownThemAll!. Jika ini tidak berhasil, klik kanan berkas downthemall-2.0.16-fx+sm.xpi pilih Open With … > Firefox. Kemudian Mozilla Firefox terbuka dan klik OK untuk menginstalnya. Jika diminta restart Firefox, maka OK juga. Kini Mozilla Firefox seharusnya sudah memiliki DownThemAll!.
  3. Buka http://apt-web.ntb.linux.or.id.
  4. Pilih versi Ubuntu. Saya contohkan Ubuntu 12.04 Precise Pangolin 32 bit. Ini harus benar.
  5. Pilih server Kambing. Kalau ada pilihan lain, silakan.
  6. Masukkan nama paket. Saya contohkan wine karena saya butuh Wine di Ubuntu. Ini juga harus benar.
  7. Submit.
  8. Muncul link unduh yang berakhiran .deb. Unduh itu semua dengan DownThemAll!. Caranya, sorot semua link yang berakhiran .deb sampai bawah lalu klik kanan > DownThemAll! > Download All Link. Arahkan ke folder kosong tadi dalam flash disk Anda.
  9. Biarkan DownThemAll! mengunduh semuanya sampai beres (biasanya tidak sampai 30 menit) lalu pulanglah. Pesan saya: hematlah biaya internet.

Cara Menginstal

  1. Kopi folder dari flash disk ke dalam /home/user Anda.
  2. Buka Terminal dan lakukan perintah sudo dpkg -i *.deb
  3. Tunggu sampai prosesnya selesai.
  4. Buka menu Anda dan program Wine sudah bisa digunakan.

Insya Allah tulisan ini akan saya perbarui nanti.

LaTeX, Gummi, dan Ubuntu


Bismillahirrahmanirrahim.

Saya menyukai tulisan yang rapi. Semenjak awal mengenal Linux, saya telah mengenal banyak PDF yang rapi. Ternyata PDF-PDF tersebut ditulis dengan \LaTeX, bukan dengan Microsoft Word seperti yang saya sangka. Sejak itu saya tertarik. Namun baru pada 22 Oktober 2013 saya menginstal \LaTeX untuk pertama kalinya. Ternyata sangat menarik. Jauh lebih menarik daripada Writer atau Word. Saya bisa mengendalikan seluruh dokumen semau saya tetapi otomatis rapi. Dan semangat menulis saya bangkit kembali setelah mencoba \LaTeX ini. Sungguh luar biasa menyenangkan. Saya ingin menunjukkan betapa mudah dan rapinya LaTeX.

LaTeX di Ubuntu

Saya menginstal Gummi selaku GUI untuk \LaTeX. Mengapa? Karena setelah saya membaca beberapa artikel perbandingan GUI untuk \LaTeX, saya memilih yang memiliki live preview. Sejauh ini baru Texmaker dan Gummi saja yang saya temukan. Sesungguhnya saya lebih menyukai Texmaker karena tampilannya keren sekali (seperti Qt Creator). Namun akhirnya pilihan saya jatuh pada Gummi. Ia yang paling kecil ukuran unduhannya (sekitar 300 MB) dibanding yang lain. Memang besar, tetapi kalau hasilnya serapi ini, 300 MB cuma angin lalu. Gambar ini diambil di KDE yang belum terinstal qtcurve, sehingga tampilan Gummi (GTK) terkesan kurang menarik.

compressed_latex-gummi1

Panel kiri untuk menulis kode dan kanan untuk preview

Awal “Keberanian” Saya

Sebelumnya saya “tidak berani” menginstal \LaTeX karena khawatir kesulitan memakainya. Namun saya mulai tertarik sejak melihat komputer seorang pengguna Windows yang di situ terdapat Texmaker. Ah, indah! Yang kedua, saya memberanikan diri mencari artikelnya. Subhanallah, saya menemukan artikel http://tex.stackexchange.com/questions/339/latex-editors-ides dan harus saya akui artikel ini penyebab saya bersikeras ingin menggunakan \LaTeX. Ya, di situ ada banyak skrinsot Texmaker, Gummi, Vim, dan editor lain yang demikian indah. Berikut ini skrinsot dari laman tersebut. Siapa tak tergoda mencobanya?

texmaker - latex

Texmaker

texstudio -latex

Texstudio

texworks - latex

Texworks

vim-latex

Vim & LaTeX Extension

Dan tidak akan saya lupakan, sebuah buku karya Kang Tedy Tirtawidjaja yang membahas \LaTeX secara komplet sehingga menumbuhkan semangat saya mencoba. Buku inilah yang pertama kali memprovokasi saya untuk mencoba \LaTeX. Saya memperoleh dasar-dasar menulis dengan \LaTeX awalnya dari buku ini. Akhirnya saya bisa menerapkannya. Terima kasih, Kang Tedy! Unduh bukunya di http://budi.insan.co.id/docs/membuat%20dokumen%20dengan%20latex%20-%20ver.0.3.pdf.

latex-tirta

Salah satu halaman buku tersebut

Apa Kelebihan LaTeX?

  1. \LaTeX adalah typesetter yang digunakan oleh profesor, peneliti, ilmuwan, matematikawan, mahasiswa, dan pelajar untuk menulis dokumen sejak dulu kala (1980) sebelum adanya Microsoft Office. Terlalu banyak skripsi, tesis, paper, bahkan buku dan tutorial dikerjakan dengan \LaTeX. Segera Anda akan menyadari bahwa banyak tutorial Linux yang Anda unduh selama ini ternyata ditulis dengan \LaTeX (baca Properties-nya). Banyak orang menggunakan \LaTeX. Karena itu, Anda tidak akan pernah kekurangan tutorial untuk \LaTeX.
  2. \LaTeX menghasilkan dokumen yang tingkat kerapiannya sangat tinggi. Bisa dibilang lebih rapi dari Microsoft Word.
  3. \LaTeX menghasilkan teks rumus matematika dengan tingkat ketelitian sangat tinggi. Ia bisa menuliskan rumus sesulit apa pun (oleh karena itu para profesor menggunakannya).
  4. \LaTeX itu otomatis. Penomoran heading otomatis dipegang oleh LaTeX. \LaTeX otomatis membuatkan daftar isi, daftar gambar, daftar tabel, bahkan daftar kode sumber. Begitu pula penomoran footnote, halaman, abstrak, margin, dan lain-lain.
  5. \LaTeX memiliki sintaks yang mirip HTML, dan sama sekali tidak sulit. Anda hanya butuh beberapa hari saja untuk bisa menggunakan \LaTeX (saya mulai menggunakan LaTeX 5 hari lalu/22 Oktober 2013).
  6. \LaTeX itu gratis.
  7. \LaTeX itu open source.
  8. \LaTeX punya banyak sekali package (baca: plugin) yang memperluas fungsinya sebagaimana Firefox dengan addons-nya.

Anda dan LaTeX

  • Anda, jika sudah bosan dengan Microsoft Word atau Libreoffice Writer, cobalah \LaTeX.
  • Jika Anda merasa Writer kekurangan fungsi equation editor (kalah dengan Word), maka Anda harus mencoba \LaTeX. Rasakan power-nya.  $latex \[ \int_a^b f(x)\,dx.\]$
  • Jika Anda menyukai matematika, sayang sekali jika tidak kenal \LaTeX.
  • Jika Anda merasa gairah menulis menurun karena kurang tantangan, cobalah \LaTeX.
  • Jika Anda sangat menyukai kerapian, gunakan LaTeX.
  • Jika Anda menyukai matematika, sayang sekali jika tidak kenal Jika Anda menyukai matematika, sayang sekali jika tidak kenal \LaTeX.
  • Jika tombol Delete Anda rusak sedangkan Libreoffice Writer maupun Kingsoft Writer tidak menerima rebinding Anda dengan xev dan xmodmap, maka cobalah Gummi + \LaTeX.
  • Atau jika Anda memang sedang senggang.

Saya dan LaTeX

Alhamdulillah, kemarin saya baru saja menyelesaikan tutorial Qt ke-11 sekaligus versi PDF-nya. Versi PDF ini adalah dokumen \LaTeX pertama saya. Biasanya saya hanya mengandalkan Writer untuk membuatnya. Sekarang bisa dilakukan dengan \LaTeX dan saya sangat puas. Hasilnya begitu rapi untuk ukuran seseorang yang baru memakai \LaTeX (yah, tutorialnya memang banyak, sih). Berikut ini skrinsot tulisan saya dengan \LaTeX.

latex-transisi

Tak pernah saya mengira tulisan saya bisa serapi ini. Tak putus-putus rasa hati ingin memandangnya. Padahal saya baru memakai sedikit kode \LaTeX. Dan tujuan saya menginstal Gummi di Ubuntu adalah menulis seluruh versi PDF untuk posting selanjutnya dengan LaTeX.

Daftar Tutorial LaTeX

Bagian yang paling saya suka adalah tutorial. Tentunya saya tak perlu menuliskannya karena sudah ada orang sebelum saya yang melakukannya. Mereka ahlinya. Maka silakan membaca tutorial mereka. Istimewa untuk buku Kang Tedy, saya sudah sebutkan tautannya di atas.

  1. http://matematika.upi.edu/wp-content/uploads/2011/03/LaTeXpemula.pdf
  2. http://ctan.cermin.lipi.go.id/macros/latex/contrib/hyperref/doc/manual.pdf
  3. http://www.stdout.org/~winston/latex/latexsheet.pdf
  4. http://ece.uprm.edu/~caceros/latex/introduction.pdf
  5. http://www.andy-roberts.net/res/writing/latex/original_toc.pdf
  6. http://en.wikibooks.org/wiki/LaTeX/Colors
  7. http://www.maths.tcd.ie/~dwilkins/LaTeXPrimer/GSWLaTeX.pdf
  8. http://www.tug.org/twg/mactex/tutorials/ltxprimer-1.0.pdf
  9. http://latex-project.org/guides/usrguide.pdf
  10. http://www.ling.ohio-state.edu//events/lcc/tutorials/intro-latex.pdf
  11. http://tex.stackexchange.com/questions/38978/how-can-i-manually-install-a-latex-package-debian-ubuntu-linux
  12. http://tex.stackexchange.com/questions/867/syntax-coloring-in-latex
  13. http://texblog.org/2011/06/11/latex-syntax-highlighting-examples/
  14. http://tex.stackexchange.com/questions/83882/how-to-highlight-python-syntax-in-latex-listings-lstinputlistings-command

Pemrograman Qt 11 – Phonon Framework untuk Memutar Audio OGG Ketika QPushButton Diklik


Bismillahirrahmanirrahim.

Unduh tutorial ini versi PDF.

qt-creator-logoAplikasi GUI membutuhkan User Experience Design (UX)  yang baik. Di antara poin penting UX adalah membuat pengguna tahu apa yang harus dilakukan. Salah satu metode untuk merealisasikan hal itu adalah dengan memberikan emphasizing untuk bagian-bagian user interface (UI) tertentu. Emphasizing ada banyak macam, dan salah satu yang terbaik adalah suara ketika terdapat event yang dikerjakan. Metode emphasize dengan suara ini diterapkan di jejaring sosial Facebook ketika terdapat notifikasi komentar, pernyataan suka, pesan masuk, dan segala yang menyinggung pengguna secara langsung. Metode ala Facebook inilah yang akan kita terapkan pada program Qt kali ini. Kita akan membuat aplikasi yang tombol-tombolnya memiliki suara sendiri ketika diklik. Tujuan pembuatan program ini adalah memberikan UX terbaik bagi pengguna.

Mengenal Phonon Framework

Apa itu Phonon? Apa hubungannya dengan Qt? Apa hubungannya dengan program kita ini? Secara sederhana, Phonon memungkinkan Anda memutar suara di dalam program Qt. Secara lebih kompleks, Phonon adalah suatu API tersendiri di dalam Qt yang bertugas mengendalikan video dan audio. Phonon sanggup mengimpor audio/video, memutarnya, memberlakukan loop untuknya, melakukan pause, dan hal-hal wajar yang Anda dapatkan dengan audio player pada umumnya. Sebagai contoh, Amarok adalah aplikasi Qt yang memanfaatkan Phonon untuk memutar audio.

Mengenal OGG Vorbis

Jika Anda hanya mengenal MP3 saja sebagai satu-satunya format audio, maka mulailah mengenal format audio satu ini. Namanya adalah OGG Vorbis. Ia adalah format audio yang berlawanan sifat dengan MP3 yakni ia bersifat terbuka bebas, sedangkan MP3 dimiliki (proprietary) oleh pihak tertentu. Mengapa harus OGG? Karena format OGG sudah tersedia dukungannya di Ubuntu secara default sedangkan MP3 tidak. Sehingga, kalaupun Anda belum menginstal paket-paket gstreamer untuk memutar MP3 di Ubuntu Anda saat menerapkan tutorial ini, maka suara tombol tetap bisa Anda dengar karena Ubuntu dapat memutar suara OGG. Tutorial ini akan menggunakan berkas audio OGG sebagai sumber suara tombol. Anda dapat mengunduhnya pada bagian (\refunduh) Unduh Kode Sumber di bawah.

Spesifikasi Sistem

  • Ubuntu 12.04
  • Qt Creator 2.4.1
  • Qt 4.8.0 (32 bit)

Daftar Kelas

  • Phonon::MediaObject
  • QCoreApplication

Daftar Method

  • play()
  • setApplicationName()

Kode

Seperti biasa, hanya 2 berkas yang perlu diperhatikan.
mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtGui>
#include <QSound>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    QPushButton     *satu;
    QPushButton     *dua;
    QPushButton     *tiga;
    QPushButton     *empat;
    QWidget         *widget;
    QVBoxLayout     *vl;

public slots:
//    void bersuara();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.cpp

//program mini ini bernama SuaraTombol
//program ini dibuat untuk mempelajari penggunaan Phonon Framework untuk memutar suara ketika tombol diklik
//tujuan akhir dari program ini adalah Perfect User Experience meniru notifikasi Facebook
//ketika pengguna Facebook menjadi sangat termudahkan bersosial ketika ada suara setiap ada notifikasi muncul
//hal yang terpenting dalam UX adalah _membuat_pengguna_tahu_apa_yang_harus_dilakukan_

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <phonon/Phonon/MediaObject>  //perhatikan pustaka baru yang digunakan

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    vl              =       new     QVBoxLayout;

    satu            =       new     QPushButton("SATU");
    dua             =       new     QPushButton("DUA");
    tiga            =       new     QPushButton("TIGA");
    empat           =       new     QPushButton("EMPAT");
    widget          =       new     QWidget;

    satu->setMinimumSize(88,55);
    dua->setMinimumSize(88,55);
    tiga->setMinimumSize(88,55);
    empat->setMinimumSize(88,55);

    QCoreApplication::setApplicationName( "SuaraTombol" );

    Phonon::MediaObject *bunyi_tombol_satu  = Phonon::createPlayer(Phonon::MusicCategory, Phonon::MediaSource("KDE-Sys-Special.ogg"));
    Phonon::MediaObject *bunyi_tombol_dua   = Phonon::createPlayer(Phonon::MusicCategory, Phonon::MediaSource("KDE-K3B-Finish-Success.ogg"));
    Phonon::MediaObject *bunyi_tombol_tiga  = Phonon::createPlayer(Phonon::MusicCategory, Phonon::MediaSource("KDE-Im-Message-Out.ogg"));
    Phonon::MediaObject *bunyi_tombol_empat = Phonon::createPlayer(Phonon::MusicCategory, Phonon::MediaSource("KDE-Im-Message-In.ogg"));

    connect(satu,  SIGNAL(clicked()), bunyi_tombol_satu,  SLOT(play()));
    connect(dua,   SIGNAL(clicked()), bunyi_tombol_dua,   SLOT(play()));
    connect(tiga,  SIGNAL(clicked()), bunyi_tombol_tiga,  SLOT(play()));
    connect(empat, SIGNAL(clicked()), bunyi_tombol_empat, SLOT(play()));

    vl->addWidget(satu);
    vl->addWidget(dua);
    vl->addWidget(tiga);
    vl->addWidget(empat);

    widget->setLayout(vl);

    this->setCentralWidget(widget);

}

MainWindow::~MainWindow()
{
    delete ui;
}

Qt Creator dan Kode

resized_ngite-kesebelas2

Hasil

Berikut ini tampilan SuaraTombol.

ngite-kesebelas

Ketika tombol SATU diklik, maka KDE-Sys-Special.ogg dimainkan. Ketika tombol DUA diklik, maka KDE-K3B-Finish-Success.ogg dimainkan. Dan seterusnya.

Bug

Ketika salah satu tombol diklik, lalu suara dimainkan, lalu dilakukan satu klik lagi sebelum suara pertama usai (interupsi), maka ada standard error muncul Aborting aboutToFinish handling. disertai mogoknya tombol yang diinterupsi. Saya belum menemukan solusinya setelah googling (26 Oktober 2013).

Pembahasan

mainwindow.h

Tidak ada yang istimewa pada header kita kali ini. Jika Anda belum memahami cara deklarasi di dalam header ini, silakan merujuk ke penjelasan deklarasi header.

mainwindow.cpp

Yang perlu diperhatikan pada berkas CPP kita kali ini adalah bagian deklarasi objek dari kelas Phonon::MediaObject dan adanya satu baris deklarasi QCoreApplication. Jika Anda belum memahami cara membuat GUI pada CPP ini, silakan merujuk ke penjelasan cara membuat GUI dasar.

Phonon::MediaObject *bunyi_tombol_satu =
Phonon::createPlayer(Phonon::MusicCategory,
Phonon::MediaSource("KDE-Sys-Special.ogg"));

Deklarasi di atas membentuk sebuah objek yang saya namakan bunyi_tombol_satu dari kelas Phonon::MediaObject. Yang istimewa di sini adalah nama kelas Phonon::MediaObject. Biasanya kita memakai kelas dengan satu kata saja. Kali ini, kita memakai kelas Qt yang terdiri dari dua bagian berbeda yakni namespace Phonon dan kelas MediaObject. Perhatikan juga bahwa saya meletakkan di parameter-nya nama berkas OGG secara langsung tanpa path. Artinya, saya telah meletakkan berkas yang ditulis namanya itu pada folder tempat program di-build. Karena program saya di-build di folder /home/master/Publik/QtProject/SuaraTombol-build-desktop-Qt_4_8_1_in_PATH__System__Release/, maka saya taruh berkas OGG di folder itu. Jika Anda meletakkan berkas OGG pada /home/ridwan, maka nanti tulis lengkap alamat path OGG di parameter-nya /home/ridwan/KDE-Sys-Special.ogg.

QCoreApplication::setApplicationName( "SuaraTombol" );

Deklarasi satu baris di atas wajib ada jika kita membuat program dengan Phonon. Saya belum menemukan alasannya tetapi yang pasti, jika kita hilangkan, maka pasti terjadi galat ketika kompilasi.

Unduh Kode Sumber

Program kali ini bernama SuaraTombol. Di dalamnya sudah tersedia berkas OGG yang digunakan para tulisan ini. Silakan diunduh dan dibuka di Qt Creator Anda.

Alamat: http://otodidak.freeserver.me/tarball/SuaraTombol.tar.gz
Ukuran: 125 KB

Kesimpulan

  • Harus ada QCoreApplication::setApplicationName() untuk membuat program dengan Phonon.
  • Program Qt bisa memainkan suara ketika tombol diklik sebagai notifikasi untuk pengguna.

Referensi

 

Pemrograman Qt 10 – QTextEdit, QLabel, Membaca Standard Output Shell, Membaca Berkas, dan Membuat Berkas TXT


Bismillahirrahmanirrahim.

Tulisan ini tersedia dalam PDF.

qt-creator-logoTulisan ini menjelaskan bagaimana membuat sebuah aplikasi kecil repo changer yang bisa mengganti konfigurasi repositori Ubuntu kita dan bisa membaca isi sources.list kita secara mudah dengan Qt. Aplikasi ini masih bersifat percobaan dan sama sekali bukan versi final. Seperti biasa, pada akhir tulisan disertakan tautan unduh kode sumbernya. Seluruh informasi repositori dalam tulisan ini diambil dari tulisan https://malsasa.wordpress.com/2013/10/15/daftar-lengkap-repositori-lokal-ubuntu-12-04-plus-cara-mengaturnya/. Semoga tulisan ini bermanfaat.

Spesifikasi Sistem

  1. Ubuntu 12.04
  2. Qt Creator 2.4.1
  3. Qt 4.8.0 (32 bit)

Daftar Kelas

  1. QTextEdit
  2. QFile
  3. QProcess
  4. QStringList
  5. QString
  6. QLabel

Daftar Method

  1. start()
  2. waitForFinished()
  3. setText() (milik QLabel)
  4. setReadOnly() (milik QTextEdit)
  5. readAllStandardOutput() (milik QProcess)

Cuma 5? Ya, cuma 5.

Arah Tulisan Ini

Tulisan ini akan menjelaskan bagaimana membuat program yang bisa melakukan hal-hal berikut

  1. Jika satu tombol diklik, maka isi sources.list berubah.
  2. Klik tombol Kambing maka isi sources.list berisi konfigurasi repo Kambing, klik tombol UGM maka berisi konfigurasi repo UGM, dan seterusnya.
  3. Klik tombol Baca maka isi sources.list akan ditayangkan di QTextEdit.
  4. Klik tombol Kambing, maka indikator (QLabel) menayangkan bahwa repo saat ini adalah Kambing dan seterusnya.

ngite-kesepuluh1

Secara teknis, kita akan belajar bagaimana menggunakan QTextEdit, membaca standard output, memasukkan standard output ke dalam QTextEdit, membuat berkas teks dengan Qt, dan menulis string di C++.

Apa Itu Standard Output?

Standard output adalah teks yang dikeluarkan oleh program dari dalam sistem setelah melakukan suatu proses. Biasanya kita melihat standard output di dalam Terminal. Contohnya ketika kita gunakan perintah ls -l maka keluarannya seperti ini:

total 3960
-rw-r--r-- 1 master master 2673568 Mar 13  2011 kbbi.dict.dz
-rw-r--r-- 1 master master 1348181 Mar 13  2011 kbbi.idx
-rw-r--r-- 1 master master     297 Mar 13  2011 kbbi.ifo
-rw-r--r-- 1 master master   24330 Mar 13  2011 kbbi.syn

Keluaran di atas disebut standard output. Pendek kata, keluaran dari segala perintah Linux adalah standard output. Yang paling penting untuk diingat adalah standard output itu dikeluarkan secara broadcast (seperti siaran televisi) sehingga tidak hanya Terminal kita saja sebetulnya yang bisa menayangkan keluaran tersebut. Jika kita membuat aplikasi yang bisa membaca standard output, maka keluaran dari perintah Linux apa saja bisa ditayangkan di dalam aplikasi kita. Artinya, tidak perlu membuka Terminal lagi untuk menayangkan keluaran perintah yang kita panggil. Mirip Synaptic yang bisa menayangkan keluaran dpkg secara realtime ketika menginstal program.

Antara Standard Output dan Program Ini

Apa hubungan standard output dengan program kali ini? Hubungannya adalah program kita ini harus bisa membaca isi dari berkas teks (sources.list). Metode pembacaan berkas ada banyak sekali. Kita pilih satu mettode saja, yakni menggunakan cat. Kita mengenal perintah cat (concatenate) untuk mengeluarkan isi teks ke layar Terminal. Kalau kita lakukan perintah cat sources.list, maka teks isinya akan ditayangkan di layar Terminal. Teks inilah standard output. Jika kita bisa menangkapnya, maka teks dari sources.list bisa ditayangkan di dalam aplikasi kita. Pembacaan standard output adalah rahasianya.

Mengenai sources.list Kita

Kita tidak akan menyentuh berkas sources.list yang asli pada /etc/apt/sources.list karena ini adalah berkas sistem. Berkas ini berisi baris-baris alamat repo kita. Kalau terdapat kesalahan satu huruf saja di dalamnya, apt pasti menayangkan pesan error ketika kita menginstal aplikasi. Jika sudah error, maka kita harus membetulkannya secara manual. Selain itu, jika kita buka berkas sources.list buatan sendiri di /home, otomatis Synaptic Package Manager akan terbuka karena adanya asosiasi sistem. Walaupun sebenarnya tidak masalah, tetapi kita memilih jalan paling praktis yakni membuat berkas bernama sources. Ya, sources begitu saja tanpa akhiran .list. Berkas ini diibaratkan sebagai sources.list betulan sehingga apa yang bisa dilakukan dengan ini, pasti hasilnya sama jika dilakukan pada sources.list yang asli. Berkas ini akan dibuat di dalam direktori build yang diciptakan otomatis oleh Qt Creator. Dalam Ubuntu saya, berkas ini akan dibuat di direktori /home/master/Publik/QtProject/ProyekRC-build-desktop-Qt_4_8_1_in_PATH__System__Release/.

ngite-kesepuluh3

Kode

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include &lt;QMainWindow&gt;
#include &lt;QtGui&gt;

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    QGridLayout         *vl;
    QVBoxLayout         *sl;
    QVBoxLayout         *dl;
    QWidget             *widget;
    QPushButton         *pb_kambing;
    QPushButton         *pb_fossid;
    QPushButton         *pb_ugm;
    QPushButton         *pb_buaya;
    QPushButton         *pb_baca;
    QTextEdit           *te_baca;
    QLabel              *lb_repo;

public slots:
    void ganti_ke_kambing();
    void ganti_ke_fossid();
    void ganti_ke_ugm();
    void ganti_ke_buaya();
    void baca_sources_list();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.cpp

//ProyekRC = Proyek Repo Changer
//proyek mini ini dibuat sebagai bak pasir bagi saya untuk mempelajari I/O, string,
//dan pembuatan berkas teks dengan Qt
//16 Oktober 2013
#include &quot;mainwindow.h&quot;
#include &quot;ui_mainwindow.h&quot;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    vl          =           new         QGridLayout();
    sl          =           new         QVBoxLayout();
    dl          =           new         QVBoxLayout();
    widget      =           new         QWidget();
    pb_kambing  =           new         QPushButton(&quot;KAMBING&quot;);
    pb_fossid   =           new         QPushButton(&quot;FOSS-ID&quot;);
    pb_ugm      =           new         QPushButton(&quot;UGM&quot;);
    pb_buaya    =           new         QPushButton(&quot;BUAYA&quot;);
    pb_baca     =           new         QPushButton(&quot;BACA&quot;);
    te_baca     =           new         QTextEdit;
    lb_repo     =           new         QLabel;

    vl-&gt;addWidget(pb_kambing, 1, 1);
    vl-&gt;addWidget(pb_fossid, 1, 2);
    vl-&gt;addWidget(pb_ugm, 1, 3);
    vl-&gt;addWidget(pb_buaya, 2, 1);
    vl-&gt;addWidget(pb_baca, 2, 2);
    vl-&gt;addWidget(lb_repo, 2, 3);
    vl-&gt;setHorizontalSpacing(3);
    vl-&gt;setVerticalSpacing(3);
    dl-&gt;addWidget(te_baca);

    pb_kambing-&gt;setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    pb_fossid-&gt;setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    pb_ugm-&gt;setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    pb_buaya-&gt;setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    pb_baca-&gt;setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    te_baca-&gt;setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

    pb_kambing-&gt;setMinimumHeight(55);     //pb_kambing-&gt;setMaximumWidth(133);
    pb_fossid-&gt;setMinimumHeight(55);      //pb_fossid-&gt;setMaximumWidth(133);
    pb_ugm-&gt;setMinimumHeight(55);         //pb_ugm-&gt;setMaximumWidth(133);
    pb_buaya-&gt;setMinimumHeight(55);       //pb_buaya-&gt;setMaximumWidth(133);
    pb_baca-&gt;setMinimumHeight(55);        //pb_baca-&gt;setMaximumWidth(133);
    te_baca-&gt;setMinimumSize(575,199);

    sl-&gt;addLayout(vl);
    sl-&gt;addLayout(dl);

    widget-&gt;setLayout(sl);

    this-&gt;setCentralWidget(widget);

    //saatnya mengasosiasikan tombol dengan fungsi
    connect(pb_kambing, SIGNAL(clicked()), this, SLOT(ganti_ke_kambing()));
    connect(pb_fossid, SIGNAL(clicked()), this, SLOT(ganti_ke_fossid()));
    connect(pb_ugm, SIGNAL(clicked()), this, SLOT(ganti_ke_ugm()));
    connect(pb_buaya, SIGNAL(clicked()), this, SLOT(ganti_ke_buaya()));
    connect(pb_baca, SIGNAL(clicked()), this, SLOT(baca_sources_list()));

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::ganti_ke_kambing()
{
    QStringList argumen;
    argumen &lt;&lt; &quot;-c&quot; &lt;&lt;
           &quot;echo 'deb http://kambing.ui.ac.id/ubuntu precise main restricted multiverse universe\n&quot;
                 &quot;deb http://kambing.ui.ac.id/ubuntu/ precise-update main restricted multiverse universe\n&quot;
                 &quot;deb http://kambing.ui.ac.id/ubuntu/ precise-security main restricted universe multiverse\n&quot;
                 &quot;deb http://kambing.ui.ac.id/ubuntu/ precise-backports main restricted universe multiverse' &gt; sources&quot;;
    /* C++ itu otomatis melakukan concatenate (penggabungan) untuk string yang dipisahkan barisnya seperti di atas
    - perhatikan &quot; dan ' di sana, asalnya baris-baris string itu satu
    - Tanda ' ditangguhkan sampai baris terakhir supay seluruh baris dianggap sebaris oleh QStringList
    - jangan lupakan \n (newline) di setiap akhir baris karena sources.list itu berkas berbahaya
    - sementara berkas keluaran tidak dinamakan _sources.list_ karena asosiasi penyunting teks dalam sistem
    - sumber: http://stackoverflow.com/questions/4276026/how-to-write-a-qstring-on-several-lines
    16 Oktober 2013 */

    QProcess perintah;
    perintah.start(&quot;/bin/bash&quot;, argumen);
    perintah.waitForFinished(-1);

    //baru terpikir pada 17 Oktober
    this-&gt;lb_repo-&gt;setText(&quot;&lt;b&gt;Repo Sekarang: Kambing&lt;/b&gt;&quot;);
}

void MainWindow::ganti_ke_fossid()
{
    QStringList argumen;
    argumen &lt;&lt; &quot;-c&quot; &lt;&lt;
            &quot;echo 'deb http://dl2.foss-id.web.id/ubuntu/ precise main restricted universe multiverse\n&quot;
                  &quot;deb http://dl2.foss-id.web.id/ubuntu/ precise-updates main restricted universe multiverse\n&quot;
                  &quot;deb http://dl2.foss-id.web.id/ubuntu/ precise-security main restricted universe multiverse\n&quot;
                  &quot;deb http://dl2.foss-id.web.id/ubuntu/ precise-backports main restricted universe multiverse' &gt; sources&quot;;

    QProcess perintah;
    perintah.start(&quot;/bin/bash&quot;, argumen);
    perintah.waitForFinished(-1);

    this-&gt;lb_repo-&gt;setText(&quot;&lt;b&gt;Repo Sekarang: FOSS-ID&lt;/b&gt;&quot;);
}

void MainWindow::ganti_ke_ugm()
{
    QStringList argumen;
    argumen &lt;&lt; &quot;-c&quot; &lt;&lt;
            &quot;echo 'deb http://repo.ugm.ac.id/ubuntu/ precise main restricted universe multiverse\n&quot;
                  &quot;deb http://repo.ugm.ac.id/ubuntu/ precise-updates main restricted universe multiverse\n&quot;
                  &quot;deb http://repo.ugm.ac.id/ubuntu/ precise-security main restricted universe multiverse' &gt; sources&quot;;

    QProcess perintah;
    perintah.start(&quot;/bin/bash&quot;, argumen);
    perintah.waitForFinished(-1);

    this-&gt;lb_repo-&gt;setText(&quot;&lt;b&gt;Repo Sekarang: UGM&lt;/b&gt;&quot;);
}

void MainWindow::ganti_ke_buaya()
{
    QStringList argumen;
    argumen &lt;&lt; &quot;-c&quot; &lt;&lt;
            &quot;echo 'deb http://buaya.klas.or.id/ubuntu/ precise main restricted universe multiverse\n&quot;
                  &quot;deb http://buaya.klas.or.id/ubuntu/ precise-updates main restricted universe multiverse\n&quot;
                  &quot;deb http://buaya.klas.or.id/ubuntu/ precise-security main restricted universe multiverse' &gt; sources&quot;;

    QProcess perintah;
    perintah.start(&quot;/bin/bash&quot;, argumen);
    perintah.waitForFinished(-1);

    this-&gt;lb_repo-&gt;setText(&quot;&lt;b&gt;Repo Sekarang: Buaya&lt;/b&gt;&quot;);
}

void MainWindow::baca_sources_list()
{
    //kode ini saya buat dengan menebak saja
    QString isi_sources_list;
    QProcess perintah_baca_sources;
    perintah_baca_sources.start(&quot;cat sources&quot;);
    perintah_baca_sources.waitForFinished(-1);
    isi_sources_list = perintah_baca_sources.readAllStandardOutput();

    this-&gt;te_baca-&gt;setText(isi_sources_list);
    this-&gt;te_baca-&gt;setReadOnly(true);
}

Qt Creator dan Kode

resized_ngite-kesepuluh2

Hasil

ngite-kesepuluh4

Jika tombol KAMBING diklik, maka QLabel akan memberikan informasi bahwa repo sekarang adalah Kambing. Perhatikan, QTextEdit masih kosong.

ngite-kesepuluh5

Barulah setelah tombol BACA diklik, maka QTextEdit membaca isi dari berkas sources kita.

Pembahasan

Pembahasan untuk kode sumber kali ini hanya berpusat pada mainwindow.cpp saja.

mainwindow.h

Isi header kali ini masih selaras dengan header program sebelumnya. Silakan merujuk ke sana jika Anda belum paham cara deklarasi dalam header ini.

mainwindow.cpp

Ada 2 bagian saja yang penting dalam berkas cpp kita kali ini. Bagian kelas utamanya (pembentukan jendela) tidak perlu diperhatikan. Namun jika Anda belum paham soal bagaimana membentuk jendela dan membuat koneksi SIGNAL & SLOT dengan Qt, silakan merujuk ke sini dan ke sini.

1. Fungsi Ganti Repo & Notifikasi QLabel

void MainWindow::ganti_ke_kambing()
{
    QStringList argumen;
    argumen &lt;&lt; &quot;-c&quot; &lt;&lt;
           &quot;echo 'deb http://kambing.ui.ac.id/ubuntu precise main restricted multiverse universe\n&quot;
                 &quot;deb http://kambing.ui.ac.id/ubuntu/ precise-update main restricted multiverse universe\n&quot;
                 &quot;deb http://kambing.ui.ac.id/ubuntu/ precise-security main restricted universe multiverse\n&quot;
                 &quot;deb http://kambing.ui.ac.id/ubuntu/ precise-backports main restricted universe multiverse' &gt; sources&quot;;

    QProcess perintah;
    perintah.start(&quot;/bin/bash&quot;, argumen);
    perintah.waitForFinished(-1);

    this-&gt;lb_repo-&gt;setText(&quot;&lt;b&gt;Repo Sekarang: Kambing&lt;/b&gt;&quot;);
}

Kode di atas adalah fungsi buatan sendiri. Nama fungsinya ganti_ke_kambing(). Isinya adalah deklarasi lokal dan fungsi-fungsi Qt untuk mengubah isi berkas source dengan teks pengaturan repositori Kambing UI. Cara kerja fungsinya adalah menggunakan QProcess sebagai pemanggil /bin/bash dan QStringList sebagai penampung argumen yakni perintah bash yang sebenarnya dipakai. Perintah bash yang dipakai adalah echo dengan memakai redirector ‘>‘ untuk membuat berkas sources. Jika Anda belum memahami metode pemanggilan perintah shell ini, silakan merujuk ke sini.

Kode di atas jika dijalankan, maka akan mengosongkan seluruh isi sources lalu menimpanya dengan teks yang tersebut dalam echo. Ini karena sifat redirector ‘>’ yang me-replace isi teks.   Tidak berhenti sampai situ. Pengguna memerlukan notifikasi yang menandakan konfigurasi repo telah berubah ke server tertentu. Maka dipanggillah fungsi setText() milik objek lb_repo (QLabel) dalam jendela (this). Kodenya adalah this->lb_repo->setText(“Repo Sekarang: Kambing”);. Cara kerja ini sama untuk fungsi-fungsi ganti_ke_*() di bawahnya.

Masalah C++ yang penting untuk diketahui adalah model penyimpanan string di dalam objek QString. Untuk memudahkan penulisan, kita harus menaruh satu baris URL repo di bawah baris yang lain. Kalau kita tulis memanjang ke samping, kode kita jadi tidak nyaman dibaca. Maka kita memakai salah satu fitur C++ itu sendiri yakni sanggup menggabungkan (concatenate) string yang terpisah baris tetapi setiap baris diapit dengan tanda petik ganda (“”) tanpa mengakhirkan apa-apa setelah terakhir. Coba perhatikan kode ini:

argumen &lt;&lt; &quot;-c&quot; &lt;&lt;
&quot;echo 'deb http://kambing.ui.ac.id/ubuntu precise main restricted multiverse universe\n&quot;
&quot;deb http://kambing.ui.ac.id/ubuntu/ precise-update main restricted multiverse universe\n&quot;
&quot;deb http://kambing.ui.ac.id/ubuntu/ precise-security main restricted universe multiverse\n&quot;
&quot;deb http://kambing.ui.ac.id/ubuntu/ precise-backports main restricted universe multiverse' &gt; sources&quot;;

Mari perhatikan perbedaan pemakaian tanda  (petik tunggal) dan  (petik ganda) dalam kode ini. Perhatikan pemakaian sebelum echo dan sesudah sources. Mereka berdua adalah pengapit seluruh baris. Perhatikan sebelum deb pada baris pertama dan sesudah multiverse pada baris terakhir. Itu adalah pengapit string bagi perintah echo. Jadi, echo punya string sendiri dan variabel argumen di sini punya string sendiri juga. Ada string di dalam string. Dan otomtis C++ menganggap semua baris sebagai satu string karena “” pada setiap baris hingga akhir tanpa ada tambahan karakter di setiap akhir baris. Ingat, harus ada escape character untuk newline (Enter) pada akhir setiap string karena kita harus mengikuti standar apt dalam mengisi sources.list yakni satu URL dalam satu baris, tidak boleh salah. Begitu caranya membuat banyak baris dalam 1 string di dalam C++.

2. Fungsi Baca Berkas


void MainWindow::baca_sources_list()
{
    QString isi_sources_list;
    QProcess perintah_baca_sources;
    perintah_baca_sources.start(&quot;cat sources&quot;);
    perintah_baca_sources.waitForFinished(-1);
    isi_sources_list = perintah_baca_sources.readAllStandardOutput();

    this-&gt;te_baca-&gt;setText(isi_sources_list);
    this-&gt;te_baca-&gt;setReadOnly(true);
}

Kode ini berbeda dengan semua fungsi ganti_ke_*() sebelumnya. Kode ini adalah fungsi yang dikoneksikan dengan tombol BACA (pb_baca). Namanya baca_sources_list(). Isinya deklarasi lokal dan fungsi bagi QProcess untuk membaca standard output dari perintah cat sources.

Yang perlu diperhatikan adalah baris

isi_sources_list = perintah_baca_sources.readAllStandardOutput();

Maksud baris tersebut adalah memasukkan apa yang ditangkap oleh method readAllStandardOutput() di dalam objek perintah_baca_sources, ke dalam variabel isi_sources_list. Ini cara kita menangkap standard output. Setelah itu, kita memasukkan hasil tangkapan tadi ke dalam QTextEdit dengan kode

this->te_baca->setText(isi_sources_list);

maka jadilah apa yang kita inginkan yaitu menampilkan isi berkas sources ke dalam aplikasi kita. Ya, rahasianya adalah dengan memakai perintah bash lalu membaca standard outputnya. Masih banyak cara lain yang belum saya mengerti. Sementara, kita akan memakai cara ini untuk program-program berikutnya.

Unduh Kode Sumber

Program kali ini bernama ProyekRC (Repo Changer). Silakan unduh dan impor di Qt Creator Anda.

Kesimpulan

  1. Pembacaan standard output di Qt bisa dilakukan dengan QProcess melalui method readAllStandardOutput().
  2. QTextEdit bisa dipakai untuk menerima penulisan teks dari pengguna maupun menayangkan teks dari program. Bahkan bisa menayangkan standard output.

Rujukan

Daftar Lengkap Repositori Lokal Ubuntu 12.04 (Plus Cara Mengaturnya)


Bismillahirrahmanirrahim.

Hak Cipta © Ade Malsasa Akbar

Inilah daftar server-server repositori lokal dari seluruh Indonesia yang bisa saya kumpulkan untuk Ubuntu 12.04. Kunci untuk memahami semua daftar ini hanyalah nama rilis Ubuntu 12.04 itu sendiri yakni Precise Pangolin. Oleh karena itu, semua baris di sini pasti memiliki nama precise yang artinya merujuk pada repositori khusus precise. Cara mengganti repositori bisa dilihat di bagian akhir tulisan.

1. Kambing UI

deb http://kambing.ui.ac.id/ubuntu/ precise main restricted universe multiverse
deb http://kambing.ui.ac.id/ubuntu/ precise-updates main restricted universe multiverse
deb http://kambing.ui.ac.id/ubuntu/ precise-security main restricted universe multiverse
deb http://kambing.ui.ac.id/ubuntu/ precise-backports main restricted universe multiverse

2. ITB

deb ftp://ftp.itb.ac.id/pub/ubuntu precise main restricted universe multiverse
deb ftp://ftp.itb.ac.id/pub/ubuntu precise-updates main restricted universe multiverse
deb ftp://ftp.itb.ac.id/pub/ubuntu precise-security main restricted universe multiverse
deb ftp://ftp.itb.ac.id/pub/ubuntu precise-backports main restricted universe multiverse

3. UGM

deb http://repo.ugm.ac.id/ubuntu/ precise main restricted universe multiverse
deb http://repo.ugm.ac.id/ubuntu/ precise-updates main restricted universe multiverse
deb http://repo.ugm.ac.id/ubuntu/ precise-security main restricted universe multiverse

4. IPB

deb http://pandawa.ipb.ac.id/ubuntu/ precise main restricted universe multiverse
deb http://pandawa.ipb.ac.id/ubuntu/ precise-updates main restricted universe multiverse
deb http://pandawa.ipb.ac.id/ubuntu/ precise-security main restricted universe multiverse

5. FOSS-ID

deb http://dl2.foss-id.web.id/ubuntu/ precise main restricted universe multiverse
deb http://dl2.foss-id.web.id/ubuntu/ precise-updates main restricted universe multiverse
deb http://dl2.foss-id.web.id/ubuntu/ precise-security main restricted universe multiverse
deb http://dl2.foss-id.web.id/ubuntu/ precise-backports main restricted universe multiverse

6. Komo

deb http://komo.padinet.com/ubuntu/ precise main restricted universe multiverse
deb http://komo.padinet.com/ubuntu/ precise-updates main restricted universe multiverse
deb http://komo.padinet.com/ubuntu/ precise-security main restricted universe multiverse
deb http://komo.padinet.com/ubuntu/ precise-backports main restricted universe multiverse

7. EEPIS-ITS

deb http://kebo.eepis-its.edu/ubuntu/ubuntu/ precise main restricted universe multiverse
deb http://kebo.eepis-its.edu/ubuntu/ubuntu/ precise-updates main restricted universe multiverse
deb http://kebo.eepis-its.edu/ubuntu/ubuntu/ precise-security main restricted universe multiverse

8. UNDIP

deb http://jaran.undip.ac.id/ubuntu/ precise main restricted universe multiverse
deb http://jaran.undip.ac.id/ubuntu/ precise-updates main restricted universe multiverse
deb http://jaran.undip.ac.id/ubuntu/ precise-security main restricted universe multiverse

9. UNEJ

deb http://mirror.unej.ac.id/ubuntu/ precise main restricted universe multiverse
deb http://mirror.unej.ac.id/ubuntu/ precise-updates main restricted universe multiverse
deb http://mirror.unej.ac.id/ubuntu/ precise-security main restricted universe multiverse

10. UB

deb http://singo.ub.ac.id/ubuntu precise main restricted universe multiverse
deb http://singo.ub.ac.id/ubuntu precise-updates main restricted universe multiverse
deb http://singo.ub.ac.id/ubuntu precise-security main restricted universe multiverse
deb http://singo.ub.ac.id/ubuntu precise-backports main restricted universe multiverse
deb http://singo.ub.ac.id/ubuntu precise-proposed main restricted universe multiverse

11. UKDW

deb http://repo.ukdw.ac.id/ubuntu precise main restricted universe multiverse
deb http://repo.ukdw.ac.id/ubuntu precise-updates main restricted universe multiverse
deb http://repo.ukdw.ac.id/ubuntu precise-security main restricted universe multiverse
deb http://repo.ukdw.ac.id/ubuntu precise-backports main restricted universe multiverse
deb http://repo.ukdw.ac.id/ubuntu precise-proposed main restricted universe multiverse

12. Komunitas Linux Jambi

deb http://repo.linuxjambi.org/ precise main restricted universe multiverse

13. Buaya

deb http://buaya.klas.or.id/ubuntu/ precise main restricted universe multiverse
deb http://buaya.klas.or.id/ubuntu/ precise-updates main restricted universe multiverse
deb http://buaya.klas.or.id/ubuntu/ precise-security main restricted universe multiverse

14. AMIKOM

deb http://tawon.amikom.ac.id/ubuntu/ precise main restricted universe multiverse
deb http://tawon.amikom.ac.id/ubuntu/ precise-updates main restricted universe multiverse
deb http://tawon.amikom.ac.id/ubuntu/ precise-security main restricted universe multiverse

15. Kartolo

deb http://kartolo.sby.datautama.net.id/ubuntu/ precise main restricted universe multiverse

16. IndikaNet

deb http://ubuntu.indika.net.id/ precise main restricted universe multiverse
deb http://ubuntu.indika.net.id/ precise-updates main restricted universe multiverse
deb http://ubuntu.indika.net.id/ precise-security main restricted universe multiverse

17. PesatNet

deb http://ubuntu.pesat.net.id/archive/ precise main restricted universe multiverse
deb http://ubuntu.pesat.net.id/archive/ precise-updates main restricted universe multiverse
deb http://ubuntu.pesat.net.id/archive/ precise-security main restricted universe multiverse

18. Kavalinux

deb http://mirror.kavalinux.com/ubuntu/ precise main restricted universe multiverse
deb http://mirror.kavalinux.com/ubuntu/ precise-updates main restricted universe multiverse
deb http://mirror.kavalinux.com/ubuntu/ precise-security main restricted universe multiverse

19. UPI

deb http://repository.poss-upi.org/ubuntu precise main restricted universe multiverse
deb http://repository.poss-upi.org/ubuntu precise-updates main restricted universe multiverse
deb http://repository.poss-upi.org/ubuntu precise-security main restricted universe multiverse

20. Pemerintah Provinsi Aceh

deb http://fileserver.acehprov.go.id/Repo/ubuntu/ precise main restricted universe multiverse

21. UNNES

deb http://repo.unnes.ac.id/iso/repo3/ubuntu/ precise main restricted universe multiverse

22. KOMINFO

deb http://cermin.kominfo.go.id/mirror/ubuntuarchive/ precise main restricted universe multiverse

23. BIZNET

deb http://ubuntu.biz.net.id/ precise main restricted universe multiverse

Terima Kasih

Terima kasih untuk CBN yang telah bertahun-tahun menyediakan server lokal untuk repo Ubuntu yakni http://ubuntu.cbn.net.id/Ubuntu/ yang kini telah tiada (15 Oktober 2013). Terima kasih dari saya pribadi untuk CBN dan seluruh pihak yang berjasa menyediakan repo serta cermin Linux/BSD di seluruh Indonesia hingga hari akhir.

trik-mencari-repo3.png

trik-mencari-repo4.png

Selamat tinggal, Cermin CBN.

Cara Mengganti Repositori

1. Konsep dasar ganti sumber repo adalah mengubah isi berkas sources.list yang ada di /etc/apt/sources.list Anda. Ini adalah berkas teks biasa tetapi Anda perlu hak root untuk mengubahnya.
2. $ sudo gedit /etc/apt/sources.list
3. Simpan dulu dengan nama lain, misalnya sources.list.asli. Ini tindakan backup.
4. Ctrl+O, buka /etc/apt/sources.list lalu hapus semua isinya.
5. Kopi-paste salah satu daftar repositori yang disebutkan di atas. Saya beri contoh untuk server Buaya (server terletak di Surabaya sehingga paling dekat dengan Mojokerto): trik-mencari-repo2.png
sehingga yang dikopi hanyalah baris yang berawalan kata deb saja.
6. Simpan (Ctrl+S).
7. $ sudo apt-get update
8. $ sudo apt-get install inkscape <<< pasti dia akan mengunduh dari Buaya atau sesuai server pilihan Anda.

Bonus

Pada bagian ini, saya menuliskan beberapa repositori bagus selain yang berisi Ubuntu atau Precise atau sistem operasi. Jika Anda pernah melupakan salah satu server ini, maka berbahagialah. Jika Anda bingung, maka langsung buka saja.

Peringatan

Tulisan ini adalah kumpulan hasil kerja keras komunitas sejak bertahun-tahun silam. Jika Anda menyalin sebagian atau keseluruhan, cantumkanlah alamat https://malsasa.wordpress.com/2013/10/15/daftar-lengkap-repositori-lokal-ubuntu-12-04-plus-cara-mengaturnya/.

Referensi

Belajar Menggunakan KDE Edisi 3


Bismillahirrahmanirrahim.

Tulisan edisi ketiga ini sudah mencapai tahap mengenal banyak elemen penting KDE bagi pengguna. Saya bagi edisi ini menjadi 11 poin penting KDE. Saya sengaja menyusunnya secara nonteknis berdasarkan pertimbangan pribadi saya dimulai dari yang penting-penting.

Daftar Isi

      1. Tombol Menu KDE
      2. Dua Gaya Menu KDE
      3. Mengenal Aplikasi Terpenting KDE
      4. Tidak Ada Refresh
      5. Menambahkan Shortcut Key
      6. Menambahkan Ikon di Panel
      7. Memindahkan Posisi Ikon di Panel
      8. Mengubah Ukuran Panel
      9. System Tray: Volume Suara
      10. System Tray: Notifikasi
      11. System Tray: Klipper

Bersiap-siaplah menggunakan salah satu antarmuka Linux yang tercanggih.

1. Tombol Menu KDE

Logo KDE

Tombol Menu KDE

Ini adalah tombol menu KDE yang fungsinya sama dengan tombol Start di Windows. Secara default, tombol menu KDE berada di kiri bawah seperti tombol Start di Windows.

2. Dua Gaya Menu KDE

  • Gaya Pertama – Gaya Windows 7

resized_belajar-menggunakan-kde1

Anda bisa mencari dengan mengetikkan nama program di menu. Gaya ini dinamakan Application Launcher oleh KDE.

  • Gaya Kedua – Gaya Windows XP

resized_belajar-menggunakan-kde

Anda bisa mencari program secara manual. Gaya ini dinamakan Classic Menu oleh KDE.

  • Cara Mengatur Gaya

belajar-menggunakan-kde2

Klik kanan menu -> Switch to Classic Menu Style -> menu berubah jadi ala Windows XP.

belajar-menggunakan-kde3

Klik kanan menu -> Switch to Application Launcher Style -> menu berubah jadi ala Windows 7.

3. Mengenal Aplikasi Terpenting KDE

Aplikasi itu bernama Dolphin. Inilah “Windows Explorer” di KDE. Anda akan mengelola folder-folder dan semua data dengan aplikasi ini. Buka dari menu -> File Manager atau bisa dengan ketik dol di menu bergaya Windows 7 di KDE maka munculz nama File Manager.

belajar-menggunakan-kde13 belajar-menggunakan-kde12

4. Tidak Ada Refresh

Tidak perlu kaget. Di dalam antarmuka KDE, dan di Linux desktop pada umumnya, tidak ada Refresh. Mengapa? Karena KDE melakukan refresh secara otomatis. Dan tahukah kita refresh itu apa sebenarnya? Refresh hanyalah sebuah perintah untuk memperbaharui ikon-ikon desktop, tidak lebih. Refresh tidak berguna untuk memperbaiki sistem. Bila ada ikon yang baru tetapi Windows belum menayangkannya, maka dengan Refresh akan ditayangkan. Namun KDE tidak demikian. Ia otomatis sehingga tidak ada refresh di dalam klik kanan.

Klik kanan desktop -> tidak ada pilihan Refresh

Klik kanan desktop -> tidak ada pilihan Refresh

5. Menambahkan Shortcut Key

Kita bisa mengasosiasikan shortcut key untuk seluruh aplikasi yang terinstal dengan KDE. KDE punya Cntrol Panel ajaib yang bernama KDE System Settings. Silakan Anda buka dari menu -> Applications -> Settings -> System Settings -> Shortcut and Gestures.

belajar-menggunakan-kde5

Ikon paling kanan adalah Shortcut and Gestures

Jika sudah dibuka, maka muncul tampilan pengaturan shortcut key yang terbagi tiga seperti gambar berikut.

belajar-menggunakan-kde6

Perhatikan panel paling kiri, ada 3 opsi

Saat ini, Anda cukup mengetahui opsi pertama dulu yakni Custom Shortcuts. Apa pentingnya opsi ini? Dengan ini, Anda bisa mengatur supaya File Manager milik KDE bisa terbuka dengan shortcut key Win+E sebagaimana Anda membuka Windows Explorer di Windows. Canggih, bukan?

Cara Membuat Shortcut Key

belajar-menggunakan-kde7

  • Pada jendela yang sama -> klik tombol Edit di bawah -> New -> Global Shortcut -> Command/URL.
  • Akan muncul satu entri baru bernama New Action di atas tombol Edit.
  • Lihat panel kanan, ada 3 tab.
  • Buka tab Trigger -> klik tombol None itu -> tekan tombol Win (logo Windows di keyboard) dan E secara bersamaan. Jangan kaget, Linux biasa menyebut tombol Win sebagai Metabelajar-menggunakan-kde11
  • Buka tab Action -> tuliskan di situ dolphin. Jangan sampai salah. 
    belajar-menggunakan-kde10
  • Klik Apply. belajar-menggunakan-kde9
  • Silakan tekan Win+E sekarang maka File Manager akan muncul. 
  • Lakukan cara ini untuk aplikasi-aplikasi yang lain, yang Anda ingin pasangkan dengan shortcut key kesukaan Anda.

6. Menambahkan Ikon di Panel

Di Windows, kita bisa memasukkan ikon shortcut ke dalam panel bawah. Tujuannya tentu akses cepat. Di KDE, kita juga bisa melakukannya. Buka menu -> klik kanan salah satu aplikasi -> Add to Panel.

belajar-menggunakan-kde14

Hasilnya:

belajar-menggunakan-kde16

Lakukan cara yang sama untuk shortcut yang lain.

7. Memindahkan Posisi Ikon di Panel

Setelah kita menambahkan ikon di panel, kita biasanya perlu memindahkan posisinya. Bagaimana caranya? Klik logo Panel Tool Box pada bagian paling kanan panel -> arahkan kursor kepada ikon yang mau dipindahkan -> seret ikon ke posisi mana saja sepanjang masih dalam panel.

belajar-menggunakan-kde19

Seret ikon ke kiri

belajar-menggunakan-kde20

Hasil pemindahan ikon

8. Mengubah Ukuran Panel

Panel menu di Windows bisa dipertebal atau dipertipis ukurannya. KDE juga bisa melakukan itu. Bagaimana caranya? Sama dengan memindahkan ikon di atas. Klik logo Panel Tool Box pada bagian paling kanan panel -> seret ikon Height di tengah panel hitam yang muncul -> seret ke atas berarti mempertebal -> seret ke bawah berarti mempertipis. 

belajar-menggunakan-kde21

Mempertebal berarti ditarik ke atas

belajar-menggunakan-kde22

Mempertipis berarti ditarik ke bawah

9. System Tray: Volume Suara

Kita bisa mengatur semua kanal suara baik itu dari dalam Linux maupun dari aplikasi kita hanya dengan menggeser slider Suara di system tray. System tray di KDE bertempat sama dengan system tray di Windows yakni kanan bawah. Lihat ikon speaker. Klik ikon speaker lalu geser slider suara ke atas/bawah untuk mengatur volume suara.

resized_belajar-menggunakan-kde23

Keterangan pengaturan volume mulai kolom kanan ke kiri:

  1. Built-In Audio Analog Stereo: volume suara sistem. Ini mengatur suara sistem secara keseluruhan. Jika dimatikan, maka semua suara mati.
  2. Event Sounds: volume suara aksi. Misalnya suara ketika ada error, suara ketika ada pesan masuk, suara selesainya copy-paste, dan lain-lain.
  3. Amarok: volume suara untuk aplikasi Amarok (pemutar audio KDE). Jika aplikasi Amarok yang berjalan, maka kolom ini berisi Amarok. Jika aplikasi lain semisal Banshee (pemutar audio juga), maka Banshee yang muncul di sini. Dan seterusnya. Anda bisa memilih untuk mengatur langsung pada aplikasi yang bersangkutan maupun secara terpusat di system tray ini.

Tambahan: pengatur volume pada system tray ini dinamakan KMix oleh KDE.

10. System Tray: Notifikasi

Notifikasi itu adalah pesan-pesan yang muncul dari system tray. Misalnya pesan bahwa copy-paste telah selesai, pesan error, pesan bahwa unduhan telah selesai/baru dimulai, pesan ada pesan chat masuk, pesan adanya update, dan sangat banyak lainnya. Windows juga memiliki sistem notifikasi seperti ini. Jika Anda melihatnya, cukup biarkan saja.

notifikasi-kde

Applet notifikasi itu adalah bundaran kecil bertuliskan jumlah angka notifikasi (15 di sini)

11. System Tray: Klipper

Di Windows, ada program yang bernama clipboard. Clipboard inilah yang menampung segala cut atau copy yang Anda lakukan sehingga bisa dilakukan paste. Pernah terbayang bagaimana bisa kita menyalin data dan data tersebut tersampaikan ke tujuan? Itulah jasa clipboard sebagai tempat penyimpanan sementara. Di KDE, clipboard lebih canggih lagi. Jika di Windows secara default hanya ada 1 slot penyimpanan, maka di KDE ada puluhan slot penyimpanan sementara dan bisa dipilih mana yang mau di-paste-kan. Aplikasi clipboard KDE ini berlogo gunting. Lihat gambar berikut.

belajar-menggunakan-kde24

Jika Anda melakukan copy beberapa kata yang berbeda di sebuah dokumen, maka Anda mendapatkan semua kopian kata tersebut di dalam Klipper (clipboard-nya KDE) ini. Anda cukup klik kata sebelumnya yang sudah Anda copy, lalu Ctrl+V untuk paste. Ini kelebihan tidak akan Anda temukan di Windows secara default.

Penutup

Masih banyak sekali elemen-elemen KDE yang belum kita kenal. Perlu sedikit adaptasi jika kita baru bermigrasi dari Windows. Namun tenang saja karena itu semua bisa diatur. Anda akan mengenali bahwa KDE adalah antarmuka yang sangat canggih. Apa saja ada di KDE. Anda lambat laun juga akan mengenal bahwa KDE mudah dikonfigurasi dan tentunya user friendly untuk kita. Saran saya, perbanyaklah menggunakan KDE jika ingin lancar bekerja dengannya.  Semoga ini semua bermanfaat untuk Anda.

Pemrograman Qt 9 – QProcess dan Menjalankan Perintah Linux


Bismillahirrahmanirrahim.

qt-creator-logoKita bisa mengomando Linux melalui GUI. Bagaimana caranya? Ada banyak cara. Lihat dulu contoh semisal Ubuntu Tweak. Aplikasi tersebut menggantikan ratusan perintah Terminal dengan beberapa tombol saja. Jika Anda menekan satu tombol di Ubuntu Tweak, maka itu berarti menjalankan perintah tertentu. Konsep ini (GUI front-end) sangat berguna jika kita ingin membuat aplikasi yang melakukan otomatisasi perintah Terminal yang biasa kita kerjakan. Misalnya kita ingin mengganti alamat sumber repositori Ubuntu. Apa yang kita lakukan? Ubah sources.list secara manual, ketik sendiri alamat-alamat yang banyak itu dari hafalan Anda, lakukan update. Hal yang seperti ini bisa dibuatkan GUI supaya otomatis dengan menyimpan alamat-alamat sumber repositori lalu menambahkan tombol untuk masing-masing repositori. Jadi, cukup satu klik untuk mengganti repositori kita ke server Kambing atau UGM atau yang lain. Ini contoh saja. Sekarang kita akan membuat yang lebih sederhana dari itu. Kita akan memakai QProcess (sebagai ganti method system() kemarin) untuk menjalankan perintah Linux lebih canggih lagi di dalam Qt. Mengapa kita beralih ke QProcess? Nanti kita akan tahu, insya Allah.

Spesifikasi Sistem

  1. Ubuntu 12.04
  2. Qt Creator 2.4.1
  3. Qt 4.8.0 (32 bit)

Daftar Kelas

  1. QProcess
  2. QStringList
  3. QByteArray

Daftar Method

  • start() milik QProcess.
  • waitForFinished() milik QProcess.
  • readAll() milik QProcess.
  • printf() method standar iostream dari C++.

Arah Tulisan Ini

Saya hanya ingin menunjukkan bagaimana aplikasi Qt bisa dibuat seperti contoh di atas, seperti Ubuntu Tweak yang satu tombolnya menggerakkan beberapa perintah Terminal. Dan saya bilang kali ini lebih canggih karena kita bisa menangkap keluaran dari perintah yang dijalankan. Ini penting untuk mewujudkan aplikasi-aplikasi yang dapat mengeksekusi perintah Terminal, menangkap keluarannya, memroses keluaran tersebut, lalu membuat keluaran baru. Contoh nyatanya adalah aplikasi pengganti sources.list otomatis pada paragraf pertama di atas.

Kode

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog();
    QVBoxLayout *layout;
    QPushButton *tombola;
    QPushButton *tombolb;
    QPushButton *tombolc;

public slots:
    void perintah_cat();
    void perintah_mkdir();
    void perintah_ls();

private:

};

#endif // MAINWINDOW_H

mainwindow.cpp

#include <iostream>
#include <QtGui>
#include <mainwindow.h>

Dialog::Dialog()   //kagak usah dikasih void
{
    layout  = new QVBoxLayout;
    tombola = new QPushButton("cat");
    tombolb = new QPushButton("mkdir");
    tombolc = new QPushButton("ls");

    tombola->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    tombolb->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    tombolc->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

    tombola->setMinimumSize(88,55);
    tombolb->setMinimumSize(88,55);
    tombolc->setMinimumSize(88,55);

    layout->addWidget(tombola);
    layout->addWidget(tombolb);
    layout->addWidget(tombolc);

    setLayout(layout);

    connect(tombola, SIGNAL(clicked()), this, SLOT(perintah_cat()));
    connect(tombolb, SIGNAL(clicked()), this, SLOT(perintah_mkdir()));
    connect(tombolc, SIGNAL(clicked()), this, SLOT(perintah_ls()));
}

void Dialog::perintah_cat()
{
    QProcess *cat = new QProcess;
    cat->start("/bin/bash -c \"rm isifolder.txt\"");
}

void Dialog::perintah_mkdir()
{
    QProcess sh;
    sh.start("sh", QStringList() << "-c" << "ifconfig | grep inet");

    sh.waitForFinished(-1);
    QByteArray output = sh.readAll();
    printf(output);
}

void Dialog::perintah_ls()
{
    QStringList options;
    options << "-c" << "ls -l | grep a | sort > isifolder.txt";

    QProcess process;
    process.start("/bin/sh", options);
    process.waitForFinished(-1);
}

Qt Creator dan Kode

ngite-kesembilan8

Panel sebelah kiri berisi mainwindow.cpp dan sebelah kanan mainwindow.h.

Hasil Kode

Tampilan program kali ini sama dengan sebelumnya. Bedanya, isi perintah untuk masing-masing tombol saya ubah. Saya akan jelaskan satu per satu hasil perintah mulai dari tombol ketiga.

Tombol ls

Isi tombol ls adalah perintah untuk mendaftar isi folder tempat si program berada, menyaring supaya hanya informasi yang memiliki huruf a saja yang ditampilkan, lalu menuliskannya ke sebuah berkas teks bernama isifolder.txt.

ngite-kesembilan1 ngite-kesembilan2

Jika tombol ls ditekan, maka perintah ls -l | grep -a > isifolder.txt dijalankan. Maka jadilah satu berkas teks bernama isifolder.txt.

ngite-kesembilan3

Demikian isi dari berkas isifolder.txt.

ngite-kesembilan9

Demikian keluaran (standard output) dari perintah yang sama tetapi dijalankan dari Terminal. Sama persis dengan isi teks. Ini berarti program valid.

Tombol mkdir

Isi tombol mkdir adalah perintah untuk mengeluarkan informasi jaringan pada baris yang memiliki teks inet saja (membuang semua baris yang lain) dan informasi itu dicetak di dalam Terminal saja. Perintahnya adalah ifconfig | grep inet.

ngite-kesembilan6

Keluaran (standard output) hanya muncul setelah program ditutup.

ngite-kesembilan7

Sama keluarannya (standard output di Terminal asli dengan Terminal di Qt Creator). Valid.

Tombol cat

Isi tombol cat adalah perintah untuk menghapus berkas isifolder.txt yang sudah ada. Karena inilah saya jelaskan dari bawah ke atas.

Pembahasan

mainwindow.h

Sama seperti tulisan sebelumnya. Jika Anda belum mengerti model deklarasi dalam header ini, silakan merujuk ke sini.

mainwindow.cpp

Pada berkas .cpp proyek ini, ada 3 fungsi buatan yang perlu diperhatikan karena inilah inti program. Kita punya 3 model eksekusi perintah Terminal di Qt, setidaknya dalam program ini. Jika Anda belum mengerti bagaimana membangun elemen-elemen GUI dengan Qt, silakan merujuk ke sini.

  • Model Eksekusi Perintah Pertama
QProcess *cat = new QProcess;
cat->start("/bin/bash -c \"rm isifolder.txt\"");

Kita membuat sebuah objek bernama cat (dari nama cat (concatenate) bukan kucing) dari kelas QProcess. Lalu, dengan objek ini, kita panggil fungsi start(). Di dalam start() ini kita masukkan string yang merupakan perintah Terminal. Perhatikanlah, kita tidak langsung menulis perintah rm isifolder.txt seperti biasa dilakukan di Terminal. Kita mesti mengawali string perintah dengan /bin/bash. Lalu gunakanlah argumen -c (artinya membaca perintah bash dari string) milik /bin/bash tersebut. Lalu barulah kita tuliskan perintah yang ingin dilakukan. Perhatikan, ada sedikit perbedaan. Di sini, ada escape character \” yakni membuat yang diapit keduanya sebagai string. Ya, argumen -c itu tadi sebabnya. Kita memasukkan string ke dalam bash tetapi ia sanggup menerimanya sebagai perintah karena argumen -c. Yang paling penting, inilah model paling ringkas menggunakan QProcess untuk mengeksekusi perintah Terminal.

  • Model Eksekusi Perintah Kedua
QProcess sh;
sh.start("sh", QStringList() << "-c" << "ifconfig | grep inet");

sh.waitForFinished(-1);
QByteArray output = sh.readAll();
printf(output);

Inti dari model kedua ini adalah pemanfaatan method start() milik QProcess yang memiliki bentuk umum: start(command, argument);. Perintah kita taruh di command, argumen kita taruh di argument. Sekadar catatan, rm -rf ubuntu.png berarti rm itu perintah sedangkan -rf ubuntu.png itu argumen. Di sini, perintah yang digunakan adalah sh (pasti ada di /bin/ Anda) sedangkan argumen yang digunakan adalah -c dan ifconfig | grep inet. Istimewanya, di sini penggunaannya tidak sesederhana itu. Kita menggunakan kelas tambahan bernama QStringList di dalam argumen start(). QStringList ini adalah kelas yang bisa menampung beberapa string sekaligus. Oleh karena itu, ia dipakai untuk menampung string yang berisi argumen-argumen perintah. Ia sangat praktis, maka ia sering digunakan. Di sini, QStringList dipakai dengan deklarasi langsung QStringList() << “-c” << “ifconfig | grep inet”. Terlihat aneh, terlihat tidak biasa. Namun ini gunanya supaya kita tidak usah membuat satu objek baru.

Teristimewa untuk QByteArray output = sh.readAll(), ini maksudnya memanggil method readAll() milik objek QProcess, yang menghasilkan keluaran dari perintah yang dijalankan oleh QProcess, lalu keluaran itu disimpan pada objek output yang dibuat dari kelas QByteArray. Pendek kata, baris deklarasi ini mengambil standard output dari perintah di dalam objek QProcess. Oleh karena itu, ia akan mengeluarkan output dari perintah ifconfig | grep inet ke Terminal di dalam Qt Creator. Apakah ini tidak penting? Tidak, justru ini (standard output dan standard error) penting sekali untuk membangun aplikasi sebagaimana ditulis di paragraf pertama tulisan ini.

  • Model Eksekusi Perintah Ketiga
QStringList options;
options << "-c" << "ls -l | grep a | sort > isifolder.txt";

QProcess process;
process.start("/bin/sh", options);
process.waitForFinished(-1);

Model ketiga ini adalah yang paling mudah dipahami. Pertama-tama kita membuat objek QStringList dahulu yang menampung seluruh argumen yang dibutuhkan. Objek ini bernama options. Lalu kita buat objek QProcess yang menampung perintah /bin/sh (bisa diganti /bin/bash atau /bin/zsh jika Anda punya zsh). Objek ini bernama process. Lalu, kita panggil start(“/bin/sh”, options); untuk process. Maka jadilah program seperti yang saya tampilkan di bagian Hasil Kode di atas.

Inti dari ketiga jenis eksekusi perintah Terminal dari dalam Qt di atas adalah pemakaian kelas QProcess. Ada beberapa hal penting yang patut diperhatikan:

  1. Kita bisa menggunakan pipeline (|) dan redirection (>, <, >>, <<) setelah mereka dimasukkan sebagai string sekaligus argumen pada QProcess. Pipeline dan redirection adalah the ultimate power di sistem operasi Linux.
  2. Tidak seperti biasanya, di sini, yang disebut command itu malah /bin/bash (shell) kita bukan langsung pada command yang biasa kita ketik di Terminal. Justru command yang biasa kita pakai itu menjadi argument di sini.
  3. Adanya method waitForFinished(-1) di sini. Arti nilai -1 ini adalah menunggu sampai objek QProcess selesai mengerjakan tugasnya. Tanpa method ini, program tidak berjalan semestinya.
  4. Seluruh kode yang ada di sini adalah dasar kita untuk membuat aplikasi yang selain mampu mengeksekusi perintah Terminal, juga mampu membaca keluaran dari perintah yang dieksekusi bahkan mampu memrosesnya.

Unduh Kode Sumber

Program kali ini bernama Embrio-Metamorfosa juga. Saya menggunakan Git jadi tidak khawatir kode rusak. Silakan unduh dan buka di Qt Creator Anda.

Tautan: http://otodidak.freeserver.me/tarball/Embrio-Metamorfosa_Edisi_2.tar.gz
Ukuran: 3 KB

Kesimpulan

  • Eksekusi perintah Linux dengan Qt bisa dilakukan dengan QProcess selain dengan method system().
  • QProcess bisa dimanfaatkan untuk membaca standard output dan standard error dari segala perintah Linux.
  • Ada beberapa model eksekusi perintah Linux di dalam Qt tetapi seluruhnya tidak keluar dari bentuk umum qprocess.start(command, argument).
  • Kita beralih ke QProcess karena ia praktis dan memiliki semua perlengkapan untuk memanggil perintah Linux serta membaca dan mengolah standard output-nya.
  • Inti dari semua ini adalah pembuatan sebuah proses baru lalu proses itu memanggil perintah Linux.

Rujukan

Qt Creator dan Git


Bismillahirrahmanirrahim.

qt-creator-logoSemua orang kini menggunakan Git dan Github. Apa itu? Git adalah program manajemen versi untuk kode sumber. Siapa saja yang hidupnya dekat dengan pemrograman akan mengenal sesuatu yang namanya SCM (Source Code Management) dan VCS (Version Control System). Git memiliki dua sifat ini, yakni sebagai SCM dan VCS sekaligus. Git sangatlah populer saat ini di kalangan orang yang dekat dengan pemrograman. Ia adalah pesaing baru untuk VCS-VCS sebelumnya semisal SVN, CVS, Mercurial, Bazaar, dan lain-lain. Ia menggeser semua CVS era lama dengan fitur-fiturnya. Saya menulis ini karena sangat tertarik dan bersemangat dengan Git. Saya baca buku-buku tentang Git dan mendaftar di Github. Memang masih bingung tetapi sangat menyenangkan! Dalam tulisan ini, saya ingin mencatat apa yang saya temukan dalam Qt Creator yang sudah dihidupkan fitur git-nya.

Apa itu Git dan Github?

Git adalah SCM dan VCS yang sifatnya terdistribusi dan fitur utamanya adalah kecepatan. Kalau kita bingung dengan istilah-istilah ini, bayangkanlah semua aplikasi yang pernah kita gunakan. Bagaimana bisa developer aplikasi merilis versi 1.2.3 setelah 1.2.2? Bagaimana mereka bisa membuat patch? Bagaimana mereka membuka development aplikasi mereka kepada semua orang dan tidak kacau hasil aplikasinya (seperti misalnya proyek KDE)? Jawabannya adalah dengan menggunakan Version Control System (VCS). VCS inilah yang bertanggung jawab mengurus versi aplikasi yang dibuat dan menyimpan setiap versi pada tempatnya. Dengan VCS ini, kita bisa melacak perubahan apa yang terjadi pada kode sumber, membuat patch (dengan diff), membandingkan versi baru dengan sebelumnya, menyatukan perubahan yang dibuat oleh banyak orang, dan lain-lain. Pokoknya Source Code Management. Git itu VCS, sedangkan Github itu Git di server cloud sana yang siap menampung kode kita.

Cara Kerja Git

Bekerja dengan Git itu hanyalah akan berputar pada hal-hal ini:

  1. commit,
  2. push,
  3. pull,
  4. diff,
  5. patch,
  6. stash,
  7. branch, dan
  8. merge.

Saya tidak jelaskan satu per satu artinya karena saya belum paham. Saya cuma punya penjelasan yang sangat sederhana berdasar percobaan saya sendiri. Lebih enak model cerita begini saja, ya?

  1. Saya instal git di Ubuntu saya terlebih dahulu.
  2. Saya buat sebuah proyek GUI baru di Qt Creator dengan memilih Git sebagai VCS untuk proyek ini. qt-git3
  3. Saya dapat lima berkas dasar yang dibuat otomatis oleh Qt Creator, seperti biasa. Saya biarkan isinya default tanpa diubah.
  4. Saya melakukan commit pertama untuk merekam versi awal dari proyek saya. Tekan Alt+G (jangan lepas Alt) lalu Alt+C. Saya isi keterangan bahwa ini versi awal lalu OK. Inilah commit. Commit ini sama layaknya Ctrl+S setiap kita mengubah dokumen Writer kita. a-commit-pertama
  5. Saya melakukan perubahan pada berkas mainwindow.cpp dengan menambahkan satu baris komentar saja. Lalu Ctrl+S (wajib).
  6. Setelah itu, saya coba diff yakni membuat patch. Apa itu? Ya inilah keajaiban VCS yakni mengetahui perubahan apa yang telah dilakukan terhadap proyek. Sekecil apa pun, perubahan pasti akan terlihat. Tanda + ini artinya baris yang ditambahkan. Diff melakukan delta yakni selisih antara proyek yang sudah diubah dengan proyek sebelumnya, sama seperti rumus matematika selisih = nilaibaru – nilaiawal. b-diff-pertamaku
  7. Selain diff bisa melacak perubahan dalam 1 berkas, ia juga bisa melacak perubahan untuk seluruh berkas di dalam proyek kita. Ini bakalan berguna ketika kegiatan pemrograman mulai mempunyai banyak berkas. Cara saya adalah menambahkan sebaris komentar di setiap berkas teks dalam proyek lalu saya simpan semuanya dan saya lakukan Diff Project (Alt+G, jangan lepas Alt, Alt+Shift+D). Hasilnya? Tanda –  berarti baris yang dihapus.c-diff-banyak-berkas-sekaligus
  8. Branch dilakukan untuk menyalin proyek jadi sebuah proyek baru (branch baru/cabang baru) dan untuk eksperimen di branch baru itu tanpa mengganggu sedikit pun branch asli/branch master. Jadi branch itu ada master (proyek pertama dan utama kita) dan branch selain master. Branch selain master bisa dibuat untuk menambah fitur baru, membersihkan bug, dan lain-lain lalu kemudian setelah beres bisa disatukan lagi perubahannya dengan master branch. Ini jawabannya mengapa developer bisa menambahkan fitur baru dan menyediakan update aplikasi buat kita. Kita mengaktifkan branch yang mau diubah isinya dengan perintah Checkout lalu kita ubah dan branch lain yang tidak di-checkout maka tidak akan terpengaruh. pindah-branch-ke-master
  9. Diff antar-branch. Apa saja perubahan yang dilakukan antara master branch dengan branch baru? diff-antar-branch
  10. Merge branch, gunanya untuk menggabungkan perubahan dalam satu branch ke dalam branch yang lain. Dari sini tampak jelas kegunaan VCS yakni memungkinkan untuk membuat salinan proyek lalu kita berkreasi dengan salinan itu, kemudian jika kreasi sukses maka perubahannya dikirim ke proyek aslinya sehingga proyek asli menjadi versi baru yang memiliki fitur baru pula. merge-branch
  11. Bonus: GUI untuk mengelola Git kita: gitk dan QGitgitk-setelah-semua-ini-terjadi qgit-setelah-semua-ini-terjadi

Apa Hubungan Qt Creator dan Git?

Qt Creator bisa menggunakan Git untuk mengelola kode sumber kita. Lihat gambar ini.

qt-git

Pada gambar di atas, menu Git hidup semuanya. Kita bisa lihat perintah-perintah Git macam Commit, Diff, Patch, dan lain-lain.

qt-git1

Pengaturan version control dalam Qt Creator.

qt-git2

Qt Creator mendukung banyak Version Control System di antaranya Bazaar, Mercurial, Subversion, Perforce, dan CVS. Hanya saja, semuanya tidak saya instal di Ubuntu saya sehingga warnanya merah di pengaturan. Kecuali Git saja karena sudah saya instal.

Demikian dulu hasil percobaan saya. Semoga ini bermanfaat.

Referensi

  1. http://qt-project.org/doc/qtcreator-2.7/creator-version-control.html
  2. http://ebb.org/bkuhn/blog/2011/01/23/git-shared-repository-tutorial.html
  3. http://en.wikipedia.org/wiki/File:Git-logo.svg
  4. Google: tutorial qt creator git merge branch – Google Search

Belajar Menggunakan KDE Edisi 2


Bismillahirrahmanirrahim.

Logo KDE

Sebelum merambah beberapa hal penting di KDE, marilah kita bandingkan dulu KDE dengan antarmuka Linux lainnya. Ini karena memahami sesuatu itu akan lebih mudah jika diketahui lawannya. Antarmuka di Linux di antaranya GNOME, XFCE, LXDE, Enlightenment, Fluxbox, Openbox, Xmonad, dan lain-lain.

Daftar Isi

  1. GNOME
  2. KDE
  3. XFCE
  4. LXDE
  5. Unity
  6. Razor-Qt
  7. Enlightenment
  8. Fluxbox
  9. Openbox
  10. Xmonad
  11. Pembagian Jenis Antarmuka
  12. Cara Menginstal KDE di Ubuntu

GNOME

KDE

kde-destop-asli.resized

XFCE

LXDE

Unity

unity

Razor-Qt

Enlightenment

Fluxbox

Openbox

Xmonad

Pembagian Jenis Antarmuka

Secara umum, di Linux kita mengenal dua jenis antarmuka yang paling sering digunakan. Mereka adalah desktop environment dan window manager. Desktop environment lebih besar dan lebih lengkap daripada hanya window manager, sebab sebenarnya setiap desktop environment memiliki window manager. Namun sebagian pengguna (berpengalaman) menggunakan window manager murni (tanpa dekstop environment) dengan alasan kecepatan. Jelas jika kita hanya menggunakan window manager saja maka akan sangat ringan karena komponen berat lain tidak dipakai (contohnya Zeitgeist pada Unity dan Nepomuk pada KDE).

Contoh desktop environment: KDE
Contoh window manager: OpenBox

Cara Menginstal KDE di Ubuntu

Jalankan perintah ini dalam keadaan internet stabil terkoneksi langsung (sekitar 200 MB):

sudo apt-get install kde-standard

atau kalau ingin KDE lengkap tetapi tidak mengubah Ubuntu jadi Kubuntu (ukuran unduhan lebih besar):

sudo apt-get install kde-full

Jika belum pengalaman instal KDE, banyak-banyaklah baca tutorial instalasi KDE di internet dan persiapkan hati andai terjadi error. Karena sebagian orang nekad menginstal KDE dalam keadaan belum paham lalu tidak dapat login ke Ubuntu karena layar blank. Sekali lagi, hati-hati. Silakan lakukan dengan risiko hak milik Anda seutuhnya.

Rujukan tutorial instalasi:

bersambung…