CategoriesAndroidAutomated testAutomated tests

Instrumentation Testing pada Android

Setelah kemarin kita membahas tentang unit testing, sekarang kita membahas jenis testing lainnya di android yaitu Instrumentation Testing. Instrumentation Testing atau biasa disebut dengan UI Testing bertujuan untuk menguji Aplikasi melalui instruksi-instruksi yang telah dibuat sebelumnya ke UI aplikasi kita, karena itu Instrumentation Testing membutuhkan emulator / real device untuk menjalankannya.
masih belum paham ? kita coba praktekkan sekarang.

Continue reading
CategoriesAndroidAutomated testProgramming

Unit Testing pada Aplikasi Android

Saat ngoding kita tentu harus menguji kodingan kita terlebih dahulu agar kita bisa tau kodingan kita benar atau error. tidak terkecuali saat ngoding aplikasi Android. mungkin kebanyakan dari kita melakukan pengujian aplikasi Android secara manual dengan melakukan prosedur yang telah kita tentukan secara berulang ulang, hal ini sebenarnya cukup melelahkan dan seringkali membuat kita jenuh.

Continue reading
CategoriesProgrammingSwift

Setting Assets dan Support Dark Mode iOS Apps

Dalam pengembangan Aplikasi iOS pada jaman sekarang kebutuhan tentang support dark mode semakin sering kita jumpai, kita semua tau kalau dałam mengembangkan iOS apps dibutuhkan Mac untuk bisa menginstall Xcode demi bisa membuat iOS Apps. Di Xcode sendiri sebenarnya sudah disediakan beberapa macam color yang ada di iPhone SDK, antara lain bisa dilihat di gambar 1.

Gambar 1.
Gambar 1. Color Default iPhone SDK
Continue reading
CategoriesProgramming

Membuat Planner dengan Microsoft Graph API

Microsoft Graph adalah platform dari Microsoft yang menghubungkan banyak layanan dan perangkat yang sudah disediakan oleh Microsoft. Dengan menggunakan Microsoft Graph, pengembang dapat melakukan integrasi layanan dengan layanan – layanan yang ada di Microsoft 365. Misal dalam tulisan ini saya ingin menggunakan layanan Microsoft Planner untuk membuat Task menggunakan API sendiri.

Berikut adalah langkah – langkahnya:

Continue reading
CategoriesAutomated testsProgramming

API testing menggunakan Mocha & Chai

Diskripsi singkat

Hai gaes pasti kalian sudah familiar kan dengan API itu apa? Jadi secara singkatnya API itu adalah seperangkat aplikasi yang bisa berbentuk fungsi, method atau URL endpoint yang dapat kita gunakan untuk mengembangkan aplikasi, baik dalam satu platform maupun lintas platform. 

Terus mocha dan chai ini apa sama? jadi gini mocha itu adalah javascript library testing dan Chai sendiri adalah library yang digunakan untuk memudahkan Mocha dalam melakukan assertion pada setiap API yang dipanggil. Nah gimana udah paham kan? sekarang kita eksekusi yok gimana cara pakai mocha dan chai nya. 

 

Persiapan 

Pastikan kalian sudah menginstal nodejs, jika belum terinstall silakan install dulu disini! 

Continue reading

CategoriesUI DesignUncategorizedUX Design

Jangan Buat User Berpikir

Artikel ini terinspirasi oleh buku Don’t Make Me Think karya Steve Krug. Buku ini menjelaskan bagaimana cara berpikir para UX Designer Experts dalam penjelasan yang simple dan mudah dipahami.

Buku Don’t Make Me Think Karya Steve Krug

Manusia pada dasarnya adalah makhluk yang sangat malas. Selama evolusi perkembangan manusia hingga pada masa modern ini, manusia akan tetap dan selalu akan menjadi malas jika mereka tidak memiliki motivasi tertentu. Tengoklah orang-orang yang bersemangat, maka Anda akan menemukan motivasi utama terbesar, salah satu contohnya yaitu UANG untuk memenuhi kebutuhan utama hidup mereka (sandang, pangan, papan).

Dari sini, kita sepakati bahwa manusia sejatinya adalah pemalas. Karakter kemalasan ini menjadi suatu problem yang menjadi dasar dari semua hal yang berhubungan dengan otomatisasi. Manusia suka akan hal-hal yang memudahkan mereka dalam mengerjakan sesuatu. Salah satu bidang keilmuan yang berusaha menjawab problem ini adalah bidang Human Centered Design. Berikut adalah beberapa tips dalam mendesign sistem berdasarkan Human Centered Design agar sistem Anda memudahkan user dan pada akhirnya akan diminati oleh user:

Continue reading
CategoriesProgramming

Aplikasi Video Conference dengan Flutter

Pandemi Covid-19 benar-benar mengubah kebiasaan masyarakat. Mulai dari sekolah sampai bekerja yang awalnya kegiatan dilakukan secara tatap muka, sekarang berubah menjadi serba online dengan memanfaatkan teknologi yang bernama Video Conference.

Video Conference memungkinkan kita berkomunikasi dengan lebih dari satu orang dalam waktu yang bersamaan. Kali ini kita akan mencoba membuat aplikasi Video Conference dengan menggunakan Flutter.

Continue reading
CategoriesProgramming

Teknik Materialized View dengan Database MySQL

Apa itu Materialized View?

Materialzied View adalah Hasil fisik / table dari sekumpulan table yang dilakukan Query JOIN, berbeda dengan View dimana Hasil dari Query JOIN. Materialized View memiliki keuntungan dari segi normalisasi Performa database yang cepat, secepat kita GET data Table, sedangkan View untuk mengambil 1 Data dari sekumpulan Query JOIN sangat banyak dan dengan data yang sangat Banyak dari Table akan memakan Waktu. Permasalahan Utama kita kenapa menggunakan Material View adalah GET data dengan JOIN table yang sangat banyak.

 

Materialized View akan berfungsi dan dibutuhkan pada saat system Anda berjalan dan sudah banyak data yg berjalan serta system membutuhkan data yang Real Time, Apabila optimasi ini belum diterapkan akan lebih bijaknya Anda pertimbangkan untuk menggunakannya.

Beberapa Database Lain sudah support untuk Materialized View diantaranya:

Di artikel Ini kita akan membahas Materialized View di MYSQL, benar MYSQL tidak ada dalam list Database yang support untuk Materialized View, namun disini saya akan mencoba memberikan beberapa Teknik yang lumayan mudah untuk diterapkan Apabila System Anda menggunakan Database MYSQL. Berikut Gambaran dasar Materialized View secara garis Besar: 

Gambaran Beberapa Table yang digunakan untuk menghasilkan Table Materialized view

Berdasarkan Gambaran Diatas bisa akita lihat  Hasil query dari beberapa table akan menghasilkan single table. Bagaimana caranya?

Berikut kita masuk ke topik utama yaitu Teknik Materialized View di Database MYSQL.

Sebagai Contoh disini saya membuat database untuk penjualan Rumah Makanan yang sederhana:

1.  Table user

CREATE TABLE `user` (

      `id` INT(11) NOT NULL AUTO_INCREMENT,

      `name` VARCHAR(50) NULL DEFAULT NULL COLLATE ‘utf8mb4_general_ci’,

      `phone` VARCHAR(50) NULL DEFAULT NULL COLLATE ‘utf8mb4_general_ci’,

      `role_id` INT(11) NULL DEFAULT NULL,

      `status` TINYINT(4) NULL DEFAULT ‘1’,

      `created_at` DATETIME NOT NULL DEFAULT current_timestamp(),

      `updated_at` DATETIME NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),

      PRIMARY KEY (`id`) USING BTREE,

      INDEX `role_id` (`role_id`) USING BTREE

)

COLLATE=‘utf8mb4_general_ci’

ENGINE=InnoDB

AUTO_INCREMENT=2;

2. Table role

CREATE TABLE `role` (

      `id` INT(11) NOT NULL AUTO_INCREMENT,

      `name` VARCHAR(50) NULL DEFAULT NULL COLLATE ‘utf8mb4_general_ci’,

      `created_at` DATETIME NOT NULL DEFAULT current_timestamp(),

      `updated_at` DATETIME NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),

      PRIMARY KEY (`id`) USING BTREE

)

COLLATE=‘utf8mb4_general_ci’

ENGINE=InnoDB

AUTO_INCREMENT=4;

 

3. Table menu (menu makanan)

CREATE TABLE `menu` (

      `id` INT(11) NOT NULL AUTO_INCREMENT,

      `name` VARCHAR(50) NULL DEFAULT NULL COLLATE ‘utf8mb4_general_ci’,

      `price` DOUBLE(22,0) NULL DEFAULT NULL,

      `status` TINYINT(4) NULL DEFAULT NULL,

      `created_at` DATETIME NOT NULL DEFAULT current_timestamp(),

      `updated_at` DATETIME NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),

      PRIMARY KEY (`id`) USING BTREE

)

COLLATE=‘utf8mb4_general_ci’

ENGINE=InnoDB

AUTO_INCREMENT=6;

 

4. Table Invoice

CREATE TABLE `invoice` (

      `id` INT(11) NOT NULL AUTO_INCREMENT,

      `user_id` INT(11) NULL DEFAULT NULL,

      `created_at` DATETIME NOT NULL DEFAULT current_timestamp(),

      `updated_at` DATETIME NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),

      PRIMARY KEY (`id`) USING BTREE,

      INDEX `user_id` (`user_id`) USING BTREE

)

COLLATE=‘utf8mb4_general_ci’

ENGINE=InnoDB

AUTO_INCREMENT=2;

 

5. Table invoice_detail

CREATE TABLE `invoice_detail` (

      `id` INT(11) NOT NULL AUTO_INCREMENT,

      `invoice_id` INT(11) NULL DEFAULT NULL,

      `menu_id` INT(11) NULL DEFAULT NULL,

      `price` DOUBLE(22,0) NULL DEFAULT NULL,

      `quantity` INT(11) NULL DEFAULT NULL,

      `created_at` DATETIME NOT NULL DEFAULT current_timestamp(),

      `updated_at` DATETIME NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),

      PRIMARY KEY (`id`) USING BTREE,

      INDEX `menu_id` (`menu_id`) USING BTREE,

      INDEX `invoice_id` (`invoice_id`) USING BTREE

)

COLLATE=‘utf8mb4_general_ci’

ENGINE=InnoDB

AUTO_INCREMENT=2;

6. View invoice_report_list ini adalah view yang akan kita Materialized.

DROP TABLE IF EXISTS `invoice_report_list`;

CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW `invoice_report_list` AS SELECT i.id,id.invoice_id, id.price, id.quantity, i.created_at AS sale_date, u.name AS cahsier, m.name AS menu_name, r.name AS role_name, r.id AS role_id FROM invoice_detail id JOIN invoice i ON (id.invoice_id = i.id) JOIN user u ON (i.user_id = u.id) JOIN menu m ON (id.menu_id = m.id) JOIN role r ON (u.role_id = r.id) ;

Berikut beberapa Teknik Materialized View:

1. Materialize View dengan Event Scheduller dan Store Routine (Tidak Real Time).

Event Scheduller digunakan untuk memanagement Eksekusi suatu event dalam Batabase MYSQL dan Task dijalankan secara barkala atau sesuai dengan penjadwalan. Event Scheduller dalam Materialized View ini digunakan sebagai perintah penjadwalan yang kemudian digunakan untuk eksekusi secara berkala sehingga hasil Materialized View akan terupdate berdasarkan Jadwal dari Event Scheduller.  Disini selain menggunakan Event scheduler juga menggunakan Store Routine. Store Routine adalah semacam prosedur fungsi yang bisa digunakan di MYSQL. Dengan menggunakan DB Rumah makan diatas, Berikut Langkah Materialized View:

  • Kita akan membuat Table dengan nama invoice_report_mv_event_sche sebagai Materialized View nya yang memiliki field sama dengan View invoice_report_list:

CREATE TABLE `invoice_report_mv_event_sche` (

      `id` INT(11) NULL DEFAULT NULL,

      `invoice_id` INT(11) NULL DEFAULT NULL,

      `price` DOUBLE(22,0) NULL DEFAULT NULL,

      `quantity` INT(11) NULL DEFAULT NULL,

      `sale_date` DATETIME NULL DEFAULT NULL,

      `chasier` VARCHAR(50) NULL DEFAULT NULL COLLATE ‘utf8mb4_general_ci’,

      `menu_name` VARCHAR(50) NULL DEFAULT NULL COLLATE ‘utf8mb4_general_ci’,

      `role_name` VARCHAR(50) NULL DEFAULT NULL COLLATE ‘utf8mb4_general_ci’,

      `role_id` INT(11) NULL DEFAULT NULL

)

COLLATE=‘utf8mb4_general_ci’

ENGINE=InnoDB;

  • Buat Store Routine yang digunakan untuk refresh Table invoice_report_mv_event_sche.

CREATE DEFINER=`root`@`localhost` PROCEDURE `store_routine_mv`(

      IN `rc` INT

)

LANGUAGE SQL

NOT DETERMINISTIC

CONTAINS SQL

SQL SECURITY DEFINER

COMMENT

BEGIN

        TRUNCATE TABLE invoice_report_mv_event_sche;

     INSERT INTO invoice_report_mv_event_sche

     select * from invoice_report_list;

     SET rc = 0;

END

  • Buat Event untuk melakukan penjadwalan refresh dari Store Routine yang telah kita buat tadi. Event disini saya buat akan dijadwalkan setiap 1 Jam akan dieksekusi

CREATE DEFINER=`root`@`localhost` EVENT `event_scheduller_mv`

      ON SCHEDULE

            EVERY 1 HOUR STARTS ‘2020-10-25 10:46:00’

      ON COMPLETION NOT PRESERVE

      ENABLE

      COMMENT

      DO BEGIN

      CALL `store_routine_mv`(@rc);

END

  • Untuk menjalankan Event Scheduller di system dengan menggunakan command berikut:

SET GLOBAL event_scheduler = ON;

  • Apabila semua step diatas sudah dilaksanakan maka table invoice_report_mv_event_sche akan ter refresh setiap 1 Jam.

2. Materialized View dengan Trigger (Real Time)

Materialized View dengan Trigger ini digunakan untuk setiap perubahan  1 data akan menambah data dari Table Material View sehingga akan terlihat Real Time. Jadi INSERT, UPDATE, DELETE akan mempengaruhi Tabel dari material view khusus untuk hanya 1 (INSERT, UPDATE, DELETE) data row saja. Berikut Langkah untuk Materialized View untuk INSERT dengan Trigger:

  • Buat Table Materialized View dengan nama invoice_report_mv_trigger

CREATE TABLE `invoice_report_mv_trigger` (

      `id` INT(11) NULL DEFAULT NULL,

      `invoice_id` INT(11) NULL DEFAULT NULL,

      `price` DOUBLE(22,0) NULL DEFAULT NULL,

      `quantity` INT(11) NULL DEFAULT NULL,

      `sale_date` DATETIME NULL DEFAULT NULL,

      `chasier` VARCHAR(50) NULL DEFAULT NULL COLLATE ‘utf8mb4_general_ci’,

      `menu_name` VARCHAR(50) NULL DEFAULT NULL COLLATE ‘utf8mb4_general_ci’,

      `role_name` VARCHAR(50) NULL DEFAULT NULL COLLATE ‘utf8mb4_general_ci’,

      `role_id` INT(11) NULL DEFAULT NULL

)

COLLATE=‘utf8mb4_general_ci’

ENGINE=InnoDB

ROW_FORMAT=DYNAMIC;

  • Buat Trigger yang akan update setiap ada penambahan di table invoice_detail kemudian insert ke table Materialized View.

CREATE DEFINER=`root`@`localhost` TRIGGER `trigger_invoice_detail_mv` AFTER INSERT ON `invoice_detail` FOR EACH ROW BEGIN

INSERT INTO invoice_report_mv_trigger SELECT * FROM invoice_report_list WHERE id = NEW.id;

END

  • Apabila step sudah dilakukan maka data di table Materialized View invoice_report_mv_trigger akan terupdate dan bisa dikatakan Real Time.


3. Materialized View dengan Easy Script

Easy Script disini kita tinggal panggil query SQL setiap ada perubahan dari table utama kemudian kita update hasil View ke Materialized View, car aini hamper sama dengan MV Trigger, ini tergantung dengan logic yang Anda gunakan apaah bisa digunakan atau tidak, tapi tentunya bisa digunakan sesuai dengan alur scripting Anda. Untuk report Rumah Makan kita akan memperhatikan perubahan dari table invoice_detail, untuk setiap penambahan id dari invoice_detail maka akan kita update row di table  Materialized View invoice_report_mv_trigger. Untuk query terserah Anda sesuai kreasi Anda namun di Report Rumah Makan ini saya hanya akan menggunakan query INSERT berikut untuk mengupdate:

INSERT INTO invoice_report_mv_trigger SELECT * FROM invoice_report_list WHERE id = $id_invoice_detail

 

4. Materialized View dengan Flex View

flexviews menggunakan plugin untuk backlog proses Materialized View di DB Utama sehingga akan erlihat realtime tanpa harus membuat proses yang berlebihan . Repository -> Resource (ada Async biar seperti NoSQL)
Manual -> Resource
PPT -> Resource

Silahkan menggunakan File SQL Berikut Untuk Mencoba Sendiri Teknik Materialized View di Database MYSQL : Download

Materialized View akan terasa gunanya pada waktunya namun sebaiknya anda impementasikan diawal saat pembuatan system apabila menggunakan MYSQL, ditakutkan apabila diimplementasikan ditengah tengah program berjalan akan mempengaruhi performa dan kestabilan jalannya program apabila tidak berhati hati. 

Semoga Bermanfaat

Wassalamualaikum

CategoriesProgramming

Mengenal Phoenix Web Framework

        Sebelum Masuk ke Phoenix Framework kita mengenal dulu Elixir functional language, Elixir adalah bahasa pemrograman functional yang di build berdasarkan VM dari Erlang. Dan dibuat untuk memenuhi kebutuhan developing scalable system dan maintainable system.

        Jika kamu ingin mengembangkan aplikasi yang selalu ada dan tersedia (high-availability), maka Elixir bisa menjadi pilihan yang bagus. Sebagai referensi, Erlang Virtual Machine masuk dalam nine nines reability yang membuat downtime-nya sangat rendah. Downtime-nya tidak sampai satu detik dalam setahun! Hampir tidak pernah crash. Sedari awal, Elixir dibangun dengan fitur toleran-kesalahan (fault-tolerance) yang memungkinkan menjalankan ulang proses yang mengalami kegagalan dalam ketika dijalankan. Setiap kode berjalan pada sebuah lightweight thread terisolasi yang disebut sebagai proses (process) dan berkomunikasi menggunakan pesan (messages). Resource: https://medium.com/phoenixir/kenapa-memilih-elixir-c628dabddc3b

Phoenix Framework digunakan sebagai Realtime Data comment App

         Elixir memiliki Framework bernama Phoenix Framework untuk pengembangan Web, masih jarang yang menggunakan Phoenix Framework terutama di Indonesia namun Apabila anda mencari reability, Aplikasi Web Interaktif dengan less code, dan Real Time data. Maka Phoenix bisa menyajikan dengan sangat Baik.

Kelebihan yang diberikan Phoenix Framework:

1. Real Time

Interaksi dengan berbagai User yang dibuild dengan Phoenix dan tanpa ada kompleksitas untuk develop dari client side.

2. Di build dengan MVC yang rapi

MVC dibuld semudah mungkin dan dengan mudah untukdi maintainace.

3. Scalability

Phoenix menyediakan VM Erlang yang mana untuk membuat realtime data bisa dengan mudah tanpa harus menggunakan pihak ketiga.

Cara penggunaan:

Silahkan Buka Laman untuk versi Phoenix yang terbaru : https://hexdocs.pm/phoenix/Phoenix.html

Dalam Dokumentasi Phoenix memiliki struktur Modul yang rapi dan menurut saya lengkap diantaranya:

  1. Modul MVC
  2. Testing
  3. Adapter dan Plugin
  4. Socket dan Transport
  5. Templating
  6. Exception

Beberapa Contoh Penggunaan Phoenix Web Framework:

1. Build a real-time Twitter clone

 

Dalam Video ini akan menjelaskan langkah dan cara membuat Real Time Tweets Clone dengan menggunakan Phoenix Framework. Resource : Link

2. Realtime Chat
 Hasil dari Contoh Realtime chat dengan Phoenix Framework

Realtime Chat sederhana Anda bisa melihat contoh berikut:

Phoenix Web Framework  untuk komunitas masih belum sebesar Bahar bahas pemrogramn yang lain, namun  Framework ini memiliki feature dan modul yang lengkap dilihat dari segi framework. Silahakan Anda coba mempelajari Phoenix Framework ini nanti Anda akan menumakn dimana simplenya Phoenix Web Framework. Berikut Link Utama Phoenix Framework: Link

Semoga Bermanfaat

Wassalamualaikum