90 likes | 276 Views
Cerita Pengembangan SQLiteBoy Noprianto nop@tedut.com http://tedut.com. Kebutuhan. Data entry dan reporting sederhana Berbasis web dan dapat diakses dari perangkat mobile Multi user (admin/standard) dan ada pembatasan akses (keamanan)
E N D
Cerita Pengembangan SQLiteBoy Noprianto nop@tedut.com http://tedut.com
Kebutuhan • Data entry dan reporting sederhana • Berbasis web dan dapat diakses dari perangkat mobile • Multi user (admin/standard) dan ada pembatasan akses (keamanan) • Server harus dapat dijalankan standalone (datang dengan web server sendiri), oleh user biasa • Berjalan di berbagai sistem operasi • Di Microsoft Windows, program harus terdiri dari satu file executable, yang dapat dijalankan dari removable storage • Database harus terdiri satu file dan semua (gambar, file upload, dan lainnya) harus disimpan dalam database (tidak di file sistem) • Definisi data entry, reporting dan lainnya harus sederhana dan kompatibel • Harus dapat diintegrasikan dengan sistem eksternal (contoh: ERP) • Fungsi-fungsi bantu (terbilang beberapa bahasa, format bilangan, tanggal/waktu, dan lainnya) harus sudah tersedia • Program harus sekaligus berfungsi sebagai management tool untuk database yang digunakan • Solusi dapat di-deploy dalam bentuk script • Tampilan dapat dikustomisasi oleh user tanpa mengubah kode program
Pemilihan Teknologi • Bahasa Pemrograman: Python (suka, terbiasa, nyaman, multi platform, hanya mengerti 2.x) • Database: SQLite (dapat diandalkan, satu file, tidak menggunakan server, terbiasa, public domain, tersedia dalam standard library python 2.5+) • Pustaka python tambahan (karena sangat susah kalau hanya dengan standard library): web.py (suka, terbiasa, pure python, fleksibel, public domain, kode nyaman dimengerti, datang dengan web server, datang dengan templating yang nyaman dimengerti) • Kode untuk definisi data entry/reporting/script: JSON (cukup nyaman dimengerti, tersedia dalam standard library python 2.6+) • Packager agar program python dapat dijalankan sebagai satu file executable (tidak perlu install python/pustaka tambahan): pyinstaller (dapat memaketkan dalam satu file sesungguhnya, terutama pada python 2.6+) • Halaman web (UI): HTML/CSS minim JavaScript (tanpa Ajax, karena perlu berjalan pada perangkat mobile tertentu yang terbatas) • Pustaka tambahan, namun tidak wajib ada: ReportLab (untuk laporan dalam format PDF) dan PIL (dibutuhkan ReportLab, implementasi fitur-fitur lain di masa depan)
Catatan lain • Program harus dapat digunakan sebagai management tool untuk database: fungsi data entry, reporting dan lainnya harus datang sebagai extended feature (tidak wajib) • Implementasi sistem user sendiri: karena perlu multi user dan SQLite tidak bekerja dengan sistem user • Implementasi sistem keamanan: pembatasan hak bagi user standard terhadap akses langsung pada database, pembatasan hak antar user, pembatasan akses terhadap file sistem server, pembatasan hak akses dari host tertentu, dan lainnya • Semua gambar, file upload dan input dari user harus disimpan dalam database (tidak pada file sistem): • base64 encode: maka akan lebih lambat • Simpan apa adanya, apabila binary: maka harus dapat direpresentasikan dengan baik pada web page • Integrasi dengan sistem eksternal: sediakan python handler untuk data entry (supaya bisa tulis/proses ke sistem lain) dan reporting (supaya bisa baca/proses dari sistem lain) • Fungsi bantu (terbilang beberapa bahasa, format bilangan, tanggal/waktu, dan lainnya): implementasi sebagai fungsi pada level database, agar dapat digunakan pada query biasa • Custom template: apabila ditemukan, kita harus gunakan, supaya user dapat mengganti tampilan sendiri • Struktur data, definisi data entry dan reporting harus kompatibel: apabila harus ada perubahan, maka deteksi dan upgrade otomatis (versi 0.76, versi 1.26, versi *1.27)
Fitur SQLiteBoy • SQLite Management tool berbasis web: browse (sort, BLOB, halaman), pembuatan tabel, query, insert/update, tambah kolom, ganti nama, kosongkan/hapus, impor/ekspor CSV, kopi tabel, skema, vakum, dll • Datang dengan berbagai user-defined function (prefix: sqliteboy_): terbilang (dalam berbagai bahasa), pemformatan bilangan (dengan pemisah ribuan dan desimal yang bisa diatur), lookup tabel dengan mudah, hash (md5, sha1 dan lainnya), base64 (encoding dan decoding), acak, tambahan fungsi tanggal/waktu, tambahan fungsi string, regular expression, dan berbagai utilitas. • Data entry sederhana (form/subform): sintaks JSON • Deteksi otomatis tipe field • Field: readonly, required, reference (SQL Query, python list), default (fungsi, statik), constraint, onsave • SQL query statemen tambahan (untuk operasi yang lebih kompleks) • Dapat digunakan untuk insert/update/delete/lainnya • Python handler: integrasi dengan sistem eksternal • Reporting sederhana: sintaks JSON • Format: PDF, HTML, HTML (printer friendly), CSV • Field: readonly, reference (SQL Query, python list), default (fungsi, statik), constraint • Custom SQL • Headers/footers • Python handler: integrasi dengan sistem eksternal • Multi user dan user-defined profile • Tambahan: Files (+sharing, bisa dibatasi, view/download), Notes, Page, Calculator, Hosts, Scripts • Lisensi GPL. Tersedia dukungan komersial. • Selengkapnya: www.sqliteboy.com
sqliteboy.py • Satu file python (semuanya terkandung di dalam): sqliteboy.py • Versi: dari 0.01, penambahan 0.01, tidak lompat • Pada saat presentasi ini dibuat: versi 1.30 (> 11.000 baris kode)
Demo • Simple Medical Record • Menggunakan script dari: http://tedut.com/sqliteboy-script-medical_record.json • Dengan beberapa tambahan
Terima Kasih • :)