Kubuntu 14.04

Sebagaimana kita tahu, distro Linux sangatlah beragam. Ini menyebabkan fragmentasi yang sangat besar, terutama komunitasnya. Ini bisa menyebabkan munculnya fanatisme terhadap suatu distro tertentu dan kadang menyebabkan perselisihan kecil antara anggota komunitas-komunitas. Sehingga tak heran jika ada komunitas yang kurang welcome kepada pengguna baru.

Fragmentasi juga terjadi pada lingkungan desktop. Yang mana kasus ini menurut saya bagus karena pengguna bisa menyesuaikan seleranya masing-masing, Keberagaman dan perkembangan desktop environment ini sangat menarik untuk diperhatikan. Sejak munculnya Unity dan GNOME 3, muncul pula MATE dan lain sebagainya disebabkan oleh ketidakpuasan anggota komunitas terhadap keduanya dan juga karena semangat open source tentunya. Di mana kebebasan itu benar-benar ada, termasuk kebebasan untuk memilih DE yang cocok untuk kita masing-masing.

Ngomong-ngomong soal kebebasan memilih, saya sendiri saat ini merupakan pengguna Kubuntu sejak beberapa waktu lalu. Lebih tepatnya sejak saya mendapati bahwa KDE lebih responsif daripada Unity Ubuntu. Ini menyangkut keterbatasan kemampuan pengolahan grafis perangkat keras komputer saya. Awalnya, sebagai ganti Unity, saya menggunakan Gnome-fallback Ubuntu. Tetapi karena sudah tidak seperti dulu yang mudah dikustomisasi tampilannya, saya mencoba lagi KDE yang pada waktu itu masih terkesan ‘berat’. Namun kenyataan berkata lain. Tim pemelihara Kubuntu bekerja dengan sangat baik dengan memberikan sentuhan akhir yang menjadikan Kubuntu adalah distro KDE dengan penggunaan resource paling rendah di jajaran atas.

Continue reading Kubuntu 14.04

Advertisements

Aplikasi Android dengan Pustaka Qt Framework

Salah satu alasan saya mempelajari pemrograman dengan Qt Framework adalah karena dukungan multiplatform. Sesuai dengan mottonya: “Code less. Create more. Deploy everywhere“. Yang perlu ditekankan adalah deploy everywhere-nya. Walaupun tidak sama seperti Java, Qt masih punya peluang untuk running di Android. Ini dibantu oleh Ministro yang akan mengunduh library Qt untuk Android.

Saya belum menjelajah sampai jauh utuk mencari tahu seberapa potensialnya Qt dipakai untuk mengembangkan aplikasi Android. Tapi jika googling, pasti kita akan menemukan banyak sekali pembahasan mengenai ini. Sejauh ini bisa saya simpulkan bahwa untuk pengembangan aplikasi Android dengan Qt, banyak developer yang lebih memilih QML daripada Qt widget. Bahkan contoh program Ubuntu SDK untuk Ubuntu Touch juga ditulis dalam QML.

Terlepas dari itu, saya kira Java tetaplah yang paling pantas untuk pengembangan aplikasi Android. Google juga menyatakan bahwa kita memang berpeluang untuk menggunakan bahasa C++ tapi jangan karena kita lebih suka dengan C++. Kode natif memang lebih powerful untuk mengakses fitur hardware, tapi akses ke API Android tidak banyak. Oleh karena itu, ada yang menyatakan, jika kita hanya akan sekali saja membuat aplikasi untuk Android, memakai Qt tidak masalah. Tapi jika berencana untuk membuat banyak aplikasi, tentunya Java lebih diutamakan.
Continue reading Aplikasi Android dengan Pustaka Qt Framework

Perbandingan 2 APT-WEB

Beberapa bulan yang lalu saya baru tahu kalau ada laman web yang bisa membuat link unduhan paket-paket Ubuntu untuk pengguna offline seperti saya (in particular). Teknologi laman tersebut dinamakan apt-web. Dari googling, hasil pencarian “apt web” teratas akan menampilkan antara lain:

  1. aptweb.dahsy.at
  2. repo.ugm.ac.id/aptweb
  3. aptweb.ntb.linux.or.id

Itu semua merupakan apt-web buatan mas Fajran Iman Rusadi. Yang nomer 3 saya mendapat info dari kang Malsasa dari grup Ubuntu Indonesia di Facebook. Continue reading Perbandingan 2 APT-WEB

Building Qt Framework from Source (Windows) dan Deploy Project-nya

Mengompilasi Kode Sumber Qt di Windows 7

Kali ini saya berbagi cara instalasi Qt Framework dengan megompilasi sendiri kode sumbernya. Tujuannya adalah mendapatkan hasil aplikasi yang sesuai dengan keinginan kita, dalam hal ini kebutuhan untuk deploy.

Pertama tentunya unduh kode sumber Qt di sini, cari yang ZIP ‘for Windows’, kira-kira berukuran 280-an MB (Qt 5.3).

Sediakan prasyarat

Sesuai dengan dokumentasi resmi ada di sini, kita membutuhkan:

  1. ActivePerl – Install a recent version of ActivePerl (download page) and add the installation location to your PATH.
  2. Python – Install Python from here and add the installation location to your PATH in order to be able to build Qt WebKit.
    • Jika kita memilih installer MSI, instal python dengan perintah msiexec /i python.msi di cmd dengan akses administrator.
  3. Install Ruby from here and add the installation location to your PATH in order to be able to build Qt WebKit.

Tentunya MSVC harus sudah terinstal. Saya menginstal MS Visual Studio C++ 2010 Express. Jika belum punya, unduh file installer dari sini.

Alternatif dari MSVC adalah MinGW. Tapi tidak saya bahas di sini, karena saya pun belum pernah mencobanya.

Continue reading Building Qt Framework from Source (Windows) dan Deploy Project-nya

Pemrograman Model/View dalam Qt (Terjemahan)

Mulai pada tulisan ini, saya coba menerjemahkan dokumentasi dalam Qt Creator tentang Model/View Programming. Saya tidak begitu menangkap maksud dari dokumentasi itu dalam bahasa Inggris. Jadi, dengan bekal Google Translate dan bismillah, sedikit demi sedikit semoga bisa paham pada akhirnya.

Pengantar Model/View Programming

Qt memuat seperangkat kelas item view yang menggunakan arsitektur model/view untuk mengelola hubungan antara data dan caranya disajikan kepada pengguna. Pemisahan fungsionalitas yang diperkenalkan oleh arsitektur ini memberikan fleksibilitas yang lebih besar pada pengembang untuk menyesuaikan presentasi dari item, dan menyediakan antarmuka model standar untuk memungkinkan berbagai sumber data agar bisa digunakan dengan penggambaran item yang ada. Dalam dokumen ini, kami memberikan pengenalan singkat paradigma model / view, menguraikan konsep yang bersangkutan, dan menjelaskan arsitektur sistem penggambaran item. Masing-masing komponen dalam arsitektur dijelaskan, dan contoh diberikan untuk menunjukkan bagaimana menggunakan kelas yang tersedia.

Arsitektur model / view

Model-View-Controller (MVC) adalah pola desain yang berasal dari Smalltalk yang sering digunakan ketika membangun antarmuka pengguna. Dalam Design Patterns, Gamma dkk. menulis:

MVC terdiri dari tiga macam objek. Model adalah objek aplikasinya, View adalah presentasi layarnya, dan Controller mendefinisikan cara user interface bereaksi terhadap input pengguna. Sebelum MVC, pengguna desain antarmuka cenderung mengumpulkan obyek ini bersama-sama. MVC memisahkan mereka untuk meningkatkan fleksibilitas dan penggunaannya kembali.

Jika objek penggambaran dan pengendali digabungkan, hasilnya adalah arsitektur model / view. Ini masih memisahkan cara data itu disimpan dari cara penyajian kepada pengguna, tetapi memberikan kerangka lebih sederhana berdasarkan prinsip-prinsip yang sama. Pemisahan ini memungkinkan untuk menampilkan data yang sama dalam beberapa penggambaran yang berbeda, dan menerapkan jenis penggambaran baru, tanpa mengubah struktur data yang mendasarinya. Untuk memungkinkan penanganan input pengguna yang fleksibel, kami memperkenalkan konsep delegasi. Keuntungan memiliki delegasi dalam kerangka ini adalah bahwa dia memungkinkan untuk kustomisasi cara item data digambarkan dan diedit.

Arsitektur model / view
model-view-controller qtModel berkomunikasi dengan sumber data, menyediakan sebuah antarmuka untuk komponen lain dalam arsitektur. Sifat komunikasi tergantung pada jenis sumber data, dan cara model diimplementasikan.

View memperoleh indeks model dari model itu; ini adalah referensi untuk item-item dari data. Dengan menyediakan indeks model untuk model, view bisa mendapat detail item data dari sumber data.

Dalam view yang standar, delegasi menggambar item data. Bila item diedit, delegasi berkomunikasi dengan model secara langsung dengan menggunakan indeks model.

Secara umum, kelas model / view dapat dipisahkan menjadi tiga kelompok yang dijelaskan di atas: model, view, dan delegasi. Masing-masing komponen ini didefinisikan oleh kelas abstrak yang menyediakan antarmuka umum dan, dalam beberapa kasus, implementasi default dari fitur-fitur. Kelas abstrak dimaksudkan agar bisa diturunkan dalam rangka memberikan kelengkapan fungsi yang diharapkan oleh komponen lainnya; ini juga memungkinkan komponen khusus bisa ditulis.

Model, view, dan delegasi berkomunikasi satu sama lain menggunakan sinyal dan slot:

  1. Sinyal dari model memberi tahu view tentang perubahan pada data yang dimiliki oleh sumber data.
  2. Sinyal dari view memberikan informasi tentang interaksi pengguna dengan item yang ditampilkan.
  3. Sinyal dari delegasi digunakan selama mengedit untuk memberitahu model dan view tentang keadaan editor.

Model

Semua model-model item berdasarkan pada kelas QAbstractItemModel. Kelas ini mendefinisikan sebuah antarmuka yang digunakan oleh view dan delegasi untuk mengakses data. Data itu sendiri tidak harus disimpan dalam model; dapat disimpan dalam struktur data atau repositori yang disediakan oleh kelas terpisah, file, database, atau komponen aplikasi lainnya.

Konsep dasar mengenai model disajikan pada bagian Kelas Model. (Pada tulisan yang akan datang)

QAbstractItemModel menyediakan antarmuka data yang cukup fleksibel untuk menangani view yang mewakili data dalam bentuk tabel, daftar, dan pohon. Namun, ketika menerapkan model baru untuk daftar dan struktur data sejenis tabel, kelas QAbstractListModel dan QAbstractTableModel merupakan titik awal yang lebih baik karena mereka menyediakan implementasi standar sesuai dengan fungsi umum. Masing-masing dari kelas-kelas ini dapat diturunkan untuk menyediakan model yang mendukung jenis khusus dari daftar dan tabel.

Proses menurunkan kelas model dibahas pada bagian Membuat Model Baru.

Qt menyediakan beberapa model siap pakai yang dapat digunakan untuk menangani item data:

  1. QStringListModel digunakan untuk menyimpan daftar sederhana item QString.
  2. QStandardItemModel mengelola struktur pohon yang lebih kompleks dari item, masing-masing dapat berisi data yang berubah-ubah.
  3. QFileSystemModel menyediakan informasi tentang file dan direktori dalam sistem berkas-berkas lokal.
  4. QSqlQueryModel, QSqlTableModel, dan QSqlRelationalTableModel digunakan untuk mengakses database dengan menggunakan kaidah model / view.

Jika model-model standar tidak memenuhi kebutuhan Anda, Anda dapat menurunkan QAbstractItemModel, QAbstractListModel, atau QAbstractTableModel untuk menciptakan model kustom Anda sendiri.

Views

Implementasi lengkap disediakan untuk berbagai jenis tampilan: QListView menampilkan daftar item, QTableView menampilkan data dari model dalam sebuah tabel, dan QTreeView menunjukkan item-item model data dalam daftar hirarkis. Masing-masing kelas ini berdasarkan pada kelas dasar abstrak QAbstractItemView. Meskipun kelas-kelas ini adalah implementasi yang siap pakai, mereka juga dapat diturunkan untuk memberikan view yang disesuaikan.

View yang tersedia diusut pada bagian View Classes.

Delegasi

QAbstractItemDelegate adalah kelas dasar abstrak untuk delegasi dalam kerangka model / view. Implementasi delegasi default disediakan oleh QStyledItemDelegate, dan ini digunakan sebagai delegasi default dengan view standar Qt. Namun, QStyledItemDelegate dan QItemDelegate alternatif independen untuk pelukisan dan menyediakan editor untuk item dalam view. Perbedaan antara mereka adalah bahwa QStyledItemDelegate menggunakan gaya yang sekarang untuk melukis itemnya. Oleh karena itu kami merekomendasikan menggunakan QStyledItemDelegate sebagai kelas dasar ketika mengimplementasikan delegasi kustom atau ketika bekerja dengan stylesheet Qt.

Delegasi dijelaskan pada bagian Kelas-kelas Delegasi.

Penyortiran

Ada dua cara untuk mendekati penyortiran dalam arsitektur Model / view; pendekatan mana yang dipilih bergantung pada model yang mendasarinya.

Jika model Anda bisa diurutkan, yaitu jika ia menggunakan kembali fungsi QAbstractItemModel::sort(), baik QTableView maupun QTreeView menyediakan API yang memungkinkan Anda untuk mengurutkan data model secara terprogram. Selain itu, Anda dapat mengaktifkan pernyortiran interaktif (yaitu memungkinkan pengguna untuk menyortir data dengan mengklik header dari view), dengan menghubungkan sinyal QHeaderView::sortIndicatorChanged() ke slot QTableView::sortByColumn() atau slot QTreeView::sortByColumn(), masing-masing.

Pendekatan alternatif, jika model Anda tidak memiliki antarmuka yang diperlukan atau jika Anda ingin menggunakan tampilan daftar untuk menyajikan data Anda, adalah dengan menggunakan model proxy untuk mengubah struktur model Anda sebelum menyajikan data dalam view. Hal ini dibahas secara rinci pada bagian Proxy Model.

Kelas yang Memudahkan

Sejumlah kelas yang memudahkan berasal dari kelas standar view untuk kepentingan aplikasi yang mengandalkan kelas-kelas item view dan tabel Qt yang berbasis item. Mereka tidak dimaksudkan untuk diturunkan.

Contoh kelas tersebut termasuk QListWidget, QTreeWidget, dan QTableWidget.

Kelas-kelas ini kurang fleksibel dibandingkan dengan kelas-kelas view, dan tidak dapat digunakan dengan model yang berubah-ubah. Kami menyarankan agar Anda menggunakan pendekatan model / view untuk menangani data dalam item view kecuali jika Anda sangat membutuhkan seperangkat kelas berbasis item.

Jika Anda ingin memanfaatkan fitur yang disediakan oleh pendekatan model / view sementara masih menggunakan antarmuka berbasis item, pertimbangkan untuk menggunakan kelas view, seperti QListView, QTableView, dan QTreeView dengan QStandardItemModel.

Manajemen Database SQLite dengan Qt

Sekarang kita latihan Qt lagi, kali ini bermain dengan database SQlite. Saya sudah belajar pemrograman C++ dengan Qt Framework sejak beberapa waktu lalu. Tapi belum banyak yang saya hasilkan sih, karena tidak fokus.

Program kali ini adalah program sederhana yang menampilkan tabel dari data yang ada di database SQlite. SQlite saya pilih karena drivernya sudah disertakan bersama installer Qt Framework (Windows). Tapi kalau Ubuntu, kita perlu menginstalnya terlebih dahulu. Paket driver SQlite adalah libqt4-sql-sqlite untuk Qt4 dan libqt5sql5-sqlite untuk Qt5.

Sebenarnya kita bisa mencontoh kode dari Examples yang ada di Qt Creator, yaitu project SQL Browser.

Continue reading Manajemen Database SQLite dengan Qt

Kalender Hijriyah dan jadwal waktu sholat sehari

Tulisan ini dipindahkan dari tulisan di blog saya yang lain.

Your Portfolio Archive currently has no entries. You can start creating them on your dashboard.

Sudah banyak widget-widget kalender hijriyah dan jadwal waktu sholat untuk situs web yang dibagikan oleh orang lain di internet. Namun kali ini saya memilih untuk membuatnya sendiri. Bukan karena tidak menghargai mereka yang sudah mendahului, tetapi karena saya ingin sekalian belajar dan mengembangkan kemampuan PHP dan juga menambah keanekaragaman karya semacam ini. Maksud saya adalah karya yang berhubungan dengan Islam. Semoga bisa menjadi salah satu syi’ar Islam.

Continue reading Kalender Hijriyah dan jadwal waktu sholat sehari