Summernote, Text Editor Web Form

Sebua editor yang diberi Summernote https://summernote.org/terlihat sangat simpel dan mudah diintegrasikan dengan form sebagai editor.

Satu hal yang paling menarik dari Summernote ini adalah upload gambarnya. Jika kita upload gambar dari Select From Files, gambar langsung di emmbed dalam artikelnya.

Gambar akan berwujud base64 encode seperti ini:

<img src=”data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAq4AAAF7CAYAAAAT5AkHAA … dst” />

Jadi alternatif nih, daripada kita repot-repot nanganin upload gambar 🙂

Warning Untuk Web Programmer Malas

Masalah JQuery Reset Form

Saya itu web programmer malas. Malas ngetik program panjang-panjang. maunya dengan beberapa ketikan program sudah berjalan. Namun dunia sekarang berubah, harus lebih detail ..

Misalnya ketika membuat $(“#myForm1”)[0].reset() pada jQuery maunya semua yg ada dalam form dengan id #myForm sudah tereset. Ternyata input type hidden tidak bisa tereset dengan kode itu.

Sebuah potongan coding yang menyebabkan saya terkena masalah hari ini. Ada List, Modal dan Form. Jika saya baru mengupdate data kemudian saya menambah data ternyata malah mengupdate data sebelumnya. Adoh biyuung. Ini sebenarnya pernah saya alami sebelumnya, tapi karena sudah lama, lupa.

Intinya, $(“#myForm1”)[0].reset() tidak bisa mereset value pada hidden form. Sehingga kita harus meresetnya secara manuat. Hadooh …

Masalah null di MySQL

Kedua masalah null di mySQL. Dulu jika kita insert data, terus tanpa ada data yang dimasukkan pada kolom tertentu, walaupun default valuenya none, ok ok aja. Namun sekarang kalau default value pada kolom tidak kita setting null atau nilai tertentu,  error. Sehingga kalau pengin aman, setting default value pada fieldmu walaupun null. Ini disebabkan oleh STRICT_TRANS_TABLES

Sebenarnya ini disebabkan oleh konfigurasi default mysql baru yang strick. kalau kita membuka mysql.ini akan didapati beberapa batasan seperti ini.

sql_mode=”STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION”

Dan semuanya akan menjadi tidak strick jika
sql_mode = “”

Makanya pakai VPS ajah biar bisa edit mysql.ini 🙂

HeidiSQL Sudah Mendukung SQLite

Dulu saya pengguna aktif phpMyAdmin untuk memanage database, namun semenjak saya menemukan HeidiSQL untuk memanage database mySQL, saya lebih sering menggunakan alat ini untuk mengelola database, walaupun database yang saya gunakan hanya MySQL – MariaDB.

Aplikasi ini simpel, praktis, robush. Enteng. No Debat 🙂

Namun di kemudian waktu, saya juga pengguna aktif SQLite sebagai database paling praktis dan simpel untuk aplikasi kecil. Kecil, cepat, gampang di copas, dan disimpan dalam satu file. Tanpa tanding.

Sebagai pengguna SQLite garis keras, saya mencari tahu apakah HeidiSQL mendukung SQLite? Walaupun waktu itu dipilihannya memang tidak ada. Saya selalu mengikuti update terbaru, kalau-kalau pilihan sqlite muncul.

Suatu saat saya menemukan jawaban developer atas pertanyaan apakah SQLite akan didukung HeidiSQL?

Semenjak saat itu saya sudah tidak berharap. Jarang update aplikasi, kalaupun update saya juga tidak pernah menengok apakah ada pilihan sqlite atau tidak.

Hari ini ada notifikasi untuk update database, dan iseng saya lihat pilihan database yang di support. Dan, ternyata SQLite ada disitu.

Surprise!

Ok, nampaknya HeidiSQL sudah mendukung SQLite sejak 4 tahun yang lalu hehehe. Saya tidak tahu. Dan walaupun saya install Heidi SQL tidak pernah melihat  daftar database yang disupport. Sejak HeidSQL 11.

Terima kasih banyak untuk Ansgar Becker (Germany) dan kawan-kawan yang telah membuat software hebat ini.

Analisis data Penjualan dengan SQL

Beberapa waktu lalu saya menjumpai sebuah situs analisis data penjualan yang menarik minat saya di sebuah blog di medium . Kemudian saya ketahui bahwa sumber utama blog itu ada ada di Youtube Keith gali ini.

Dalam tulisan ini, saya menggunakan  sources yang ada di sini https://github.com/KeithGalli/Pandas-Data-Science-Tasks , untuk menggenerasi data.

Saya ingin melakukan analisis serupa, tapi hanya menggunakan SQLite via SQLiteStudio.

Iseng iseng saya menggenerate kembali dataset yang digunakan dengan pendekatan ke-Indonesiaan, yaitu dengan memodifikasi kota dan mata uang yang digunakan.

Saya menyatukan data bulanan berbentuk CSV yang dihasilkan oleh data generator yg dibuat Om Keith Galli, dan membersihkan datanya dengan Python, walaupun  untuk urusan membersihkan data, dengan SQL bisa juga, dimana kita cari kolom yang NULL lalu kita hapus.

Ok kita mulai.

Data Set

Data Set berupa data penjualan simulasi yang sudah siap pakai yang saya generasi dari skrip Pythonnya Keith Galli dengan beberapa modifikasi.

Dari data set diatas saya melakukan ekstraksi pada kolom Order_Date dan Purchase_Address agar mudah dianalisis. Saya menggunakan bantuan Library Regex pada SQLean .

SELECT  *, 
        REGEXP_CAPTURE(Purchase_Address, '^Jalan .+, (\w+?), .+', 1) || ' ' || 
        REGEXP_CAPTURE(Purchase_Address, ' (\w+) \d+$', 1) AS City, 
        REGEXP_CAPTURE(Order_Date, '^(\d{2})/', 1) AS Month,
        REGEXP_CAPTURE(Order_Date, '^\d{2}/(\d{2})', 1) AS Date,
        REGEXP_CAPTURE(Order_Date, '(\d{2}):\d{2}$', 1) AS Hour   
FROM sales

Hasilnya menjadi seperti ini

Lalu saya menyimpannya di view dengan nama sales2. Lalu view ini saya jadikan basis Query. Namun SQLiteStudio mempunyai kelemahan karena tidak bisa langsung menggenerasi Chart.

SQLite manager yang mampu menggenerate Chart adalah SqliteViz, namun Library SQLiteStudio  tidak bisa berjalan di SQLiteViz.

Kalau ingin menggenerasi chart lewat SQLiteViz, maka cara yang mudah adalah dengan menggenerate view table sales2 menjadi tabel yang sebenarnya. Bisa menggunakan Export CSV pada SQLite Studio dan langsung Load di SQLiteViz.

SQLiteViz bisa membaca dan melakukan query langsung dari CSV sekaligus bisa mengkonversi format CSV ke format SQLite dengan lebih baik daripada SQLiteStudio.

 Penjualan Bulanan

SELECT Month,
SUM(Quantity_Ordered * Price_Each) AS Sales
FROM sales2
GROUP BY Month

Menghasilkan output sebagai berikut:

Dengan grafik seperti ini

Mencari kota dengan tingkat penjualan tertinggi

SELECT  City, SUM(Quantity_Ordered * Price_Each) AS Sales FROM Sales2
GROUP BY City

Hasilnya sebagai berikut:

Dengan grafik sebagai berikut:

 

Analisis Waktu Penjualan

SELECT Hour, SUM(Quantity_Ordered * Price_Each) AS Sales  FROM sales2
Group BY Hour

Hasilnya sebagai berikut:

Dan nampak dalam grafik sbb:

Mencari produk yang terjual secara bersamaan (10 tertinggi)

Produk yang terjual secara bersamaan bisa dicari menggunakan SQL berikut

SELECT a.Product AS Product1, b.Product AS Product2, COUNT(a.Order_ID) AS Jumlah
FROM sales a
JOIN sales b ON a.Order_ID = b.Order_ID
WHERE a.Product < b.Product
GROUP BY Product1, Product2
ORDER BY Jumlah DESC

Menghasilkan hasil sebagai berikut:

Produk dengan Penjualan Tertinggi

SELECT Product, SUM(Quantity_Ordered) AS Quantity_Ordered,
CAST(AVG(Price_Each) AS INTEGER) AS Price
FROM sales2
GROUP BY Product

Menghasilkan output berikut:

Grafiknya akan seperti ini

Demikian, btw ini masih berupa output  yang belum dikasih komentar ya, nanti kalau ada waktu akan kita update 🙂