App Version from Git Tag in Qt / QML | Everything Frontend

While making an app it is really important to keep accurate track of the versions. Usually such a tracking is implemented via tags in version control system like git. It’s also a good idea to keep in mind semantic versioning when assigning version to your code.

But tagging your code with the right version number is only the first step. You also need to show version to the user and in some cases the system.

This –reblogged– post was actually drafted by the end of last year. I developed an open source Qt project then, namely Alldeb Installer and I wanted it to have the Git versioning to be used as part of the app’s version number.

via App Version from Git Tag in Qt / QML | Everything Frontend.

Advertisements

MuseScore: Integrasi Keyboard MIDI Virtual

Saya mencoba instal MuseScore setelah mengunjungi laman Showroom aplikasi-aplikasi Qt yang belum lama dibuat: http://showroom.qt-project.org/musescore/ (mungkin pranala akan berubah beberapa waktu ke depan). Sebagaimana umumnya aplikasi Qt, MuseScore ini bisa running pada multi-platform, termasuk pula Ubuntu (atau Linux secara keseluruhan). Aplikasi ini adalah aplikasi pembuat partitur musik. Walaupun saya tidak paham soal musik, tapi melihat fitur-fitur yang ada di dalamnya, kelihatannya dia adalah aplikasi yang mumpuni untuk menggubah aransemen musik.

Tulisan ini adalah untuk memperkenalkan dan mempromosikan aplikasi opensource MuseScore. Saya tidak tahu cakupannya sampai seluas apa, atau kepada golongan mana. Tetapi saya yakin pasti ada yang membutuhkannya, mungkin suatu hari nanti.

Continue reading MuseScore: Integrasi Keyboard MIDI Virtual

Building Qt Framework from Source Menggunakan MinGW

Setelah sebelumnya saya mem-build Qt Framework dengan MS Visual C++ compiler, nah kali ini saya tulis yang pakai MinGW dan MSYS. Sudah lama juga blog ini tidak menulis tentang Qt.

Selayang pandang MinGW dan MSYS

MinGW adalah singkatan dari Minimalist GNU for Windows. Bisa ditebak apa isinya dari “GNU”-nya. Menurut dokumentasinya, maksudnya minimalis adalah bahwa MinGW tidak menyediakan lingkungan runtime POSIX. Tetapi MinGW menyertakan tool set opensource yang lengkap untuk development di lingkungan Windows.

msys logo icon
Ikon MSYS

Sedangkan MSYS adalah singkatan dari Minimal System, yang intinya adalah konsol shell untuk menjalankan baris perintah. Ya seperti CMD-nya Windows. Atau kalau di Linux dan Mac seperti Terminal. Nanti MSYS digunakan untuk menjalankan perintah-perintah untuk kompilasi source code Qt framework.

Mempersiapkan Peralatan

  1. Unduh MinGW yang ada di http://mingw-w64.sourceforge.net/
  2. Unduh MSYS dari http://downloads.sourceforge.net/mingw/MSYS-1.0.11.exe
  3. Unduh source code Qt dari http://download.qt-project.org/archive/qt/5.3/5.3.2/single/
  4. Di sini saya hanya mengunduh ‘qtbase’ dari http://download.qt-project.org/archive/qt/5.3/5.3.2/submodules/ (hemat kuota internet ­čśÇ )
  5. Di sistem saya sudah terinstall Python, Ruby dan (Active)Perl. Mungkin ketiganya perlu diinstal jika mem-build seluruh modul Qt, terutama Webkit.
  6. Instal OpenSSL atau kompil sendiri dari kode sumbernya. Pada tulisan yang lalu, ternyata saya tidak mengompilasi OpenSSL, sehingga aplikasi yang dihasilkan tidak bisa mengakses https.

Mengompilasi Kode Sumber

Pastikan semuanya siap, dan lihat apakah folder bin MinGW ada di PATH.

  1. Ekstrak source code Qt. Saya misalkan di D:/Develop/Qt-Lib/5.3.2/.
  2. Buka MSYS, pindah ke direktori source code barusan.
  3. Kita akan melakukan pseudo build, maka buat folder ‘build’ di situ >> mkdir build
  4. cd build
  5. Jalankan perintah:
    ../configure -opensource -confirm-license \
    -platform win32-g++ -prefix "D:/Develop/Qt-Lib/5.3.2/release" \
    -nomake examples -nomake tests -no-icu -openssl \
    -I "D:/Develop/openssl-1.0.1i/dist/include" \
    -L "D:/Develop/openssl-1.0.1i/dist/lib" -v
  6. Keterangan: -prefix adalah tempat hasil akhir kompilasi, semua akan disalin ke situ saat perintah make install. -no-icu sama seperti tulisan yang dulu, gunanya adalah menghilangkan dukungan Unicode. Lainnya sesuaikan.
  7. Pastikan tidak ada error. Lalu jalankan mingw32-make.exe (atau cukup ‘make‘)
  8. Jika sukses, jalankan mingw32-make.exe install
  9. Selesai

Sekarang tinggal menambahkan qmake hasil kompilasi ke Qt Creator. Jika folder bin hasil kompilasi itu ada di PATH sistem, maka Qt Creator akan mendeteksinya secara otomatis.

Untuk deployment, aplikasi membutuhkan 3 DLL dari MinGW, antara lain: libstdc++-6.dll libgcc_s_dw2-1.dll dan libwinpthread-1.dll.

dependency walker
Melihat dependensi pustaka aplikasi

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.

Acang Plasma Mawakit (Plasma Widget Mawakit) di Kubuntu 14.04 Trusty Tahr

Judulnya aneh ya? Saya lupa padanan kata terbaru untuk “widget” selain acang.

Mawakit adalah acang untuk lingkungan desktop KDE yang berguna untuk menampilkan jadwal waktu shalat. Saya mencari-cari PPA-nya tetapi tidak menemukan, sepertinya saya harus bertindak nih ­čśÇ . Sepertinya dulu pernah ada tutorial berbahasa Indonesia yang menerangkan cara kompilasi Mawakit, tetapi sudah tidak ada di Google.

Selain Mawakit, ada aplikasi lain yang juga berguna untuk mengingatkan jadwal shalat, namanya Minbar. Tapi karena Minbar berbasis GTK+, saya lebih memilih Mawakit. Bukannya saya tidak suka GTK+, tapi saya ingin agar aplikasi yang saya install punya integrasi dengan KDE, jadi saya lebih memilih Mawakit. Selain itu, Mawakit tidak perlu autostart, karena merupakan acang plasma yang mana akan dimuat seketika log masuk lingkungan KDE. Continue reading Acang Plasma Mawakit (Plasma Widget Mawakit) di Kubuntu 14.04 Trusty Tahr

Meng-install Paket Aplikasi di Ubuntu secara Luring (offline) [Lagi]

EDIT 2017: Mungkin cara yang ditawarkan oleh tulisan ini sudah usang. Saya menyarankan kepada pembaca, silakan pakai teknologi yang lebih baik yang sudah disediakan oleh Nif Kurniawan di https://alldeb.net

Unduh versi PDF dari tulisan ini dengan sejumlah perubahan dan penyesuaian, di sini:
https://bokunokeiken.wordpress.com/2014/06/offline-install.pdf

Ada sejumlah alasan mengapa kita tidak bisa melakukan sudo apt-get install nama-paket di Ubuntu. Yang jelas karena tidak ada sambungan internet. Entah karena modem yang tidak cocok, kuota internet habis, atau alasan lainnya. Ubuntu dan distro Linux secara umum memang memudahkan penggunanya untuk menginstal aplikasi, bagi yang tersambung internet. Memang di barat sana kan internet sudah menjadi pasangan dari perangkat komputer. Nah di Indonesia sini kita sudah tahu sendiri bahwa listrik saja masih ada yang belum pernah merasakan, apalagi internet.

Sasaran

Dalam tulisan ini, sebagai contoh saya menggunakan Kubuntu 12.04.4 yang saya instal dalam Oracle VirtualBox. Tetapi jika anda memakai Ubuntu dengan varian lainnya, semisal Xubuntu, Lubuntu, atau Edubuntu, insyaallah tulisan ini masih relevan. Tulisan ini saya tujukan bagi anda yang baru saja menginstal Ubuntu tanpa internet sama sekali entah apa pun penyebabnya. Terlebih bagi anda yang belum pernah merasakan sudo apt-get update, saya sangat menyarankan untuk membaca tulisan ini.

Continue reading Meng-install Paket Aplikasi di Ubuntu secara Luring (offline) [Lagi]

Kubuntu 13.04 64-bit

kubuntu logo
Logo Kubuntu

Beberapa hari lalu Kubuntu 12.04 saya mengalami kendala pada saat booting yang mana tidak bisa melewati plymouth (splash screen). Kemungkinan besar penyebabnya adalah karena X.Org yang tidak sengaja terhapus. Mungkin itu karena saya memasang paket ubuntu-desktop. Saya pikir itu karena konflik antara lightdm dan kdm. Tapi walaupun sudah saya hapus salah satunya dan mencoba memasang X.Org kembali dari tty, tetap saja masalah berlanjut. Akhirnya saya putuskan untuk install ulang saja. Saya hanya punya dua pilihan: Ubuntu 13.10 atau Kubuntu 13.04, semuanya 64-bit. Sebenarnya saya masih ingin pakai yang LTS, tapi semua ISO ada di partisi Ubuntu kecuali dua itu. Setelah saya buat flash disk multi bootable, langsung saya coba keduanya, dan yang bisa di-boot hanya Kubuntu. Ternyata entry GRUB untuk Ubuntu Saucy pada file menu.lst ada yang salah. Tapi ini lebih baik buat saya, karena PC saya tidak support OpenGL yang dipakai Unity. Dan saat saya berhasil mem-boot Live USB Ubuntu Saucy, kinerjanya terasa berat.

Continue reading Kubuntu 13.04 64-bit