Selasa, 22 Maret 2016

Penggunaan Begin, Rollback dan Commit Tran

Pada kesempatan kali ini, saya ingin berbagi sedikit tentang cara menggunaan perintah BEGIN, ROLLBACK dan COMMIT TRAN pada SQL Server. Perintah - perintah ini erat kaitannya bersamaan dengan perintah DML (Data Manipulation Language) seperti DELETE, UPDATE, INSERT dan lain - lain. Terkadang saat kita melakukan transaksi baik itu delete, update ataupun insert pada data di suatu table, bisa saja terjadi kesalahan transaksi misal seperti salah melakukan delete atau update pada suatu data. Atau kita terlanjur melakukan insert data yang padahal seharusnya data itu tidak dilakukan insert. Karena itulah kita sebenarnya dalam melakukan transaksi perlu menggunakan perintah seperti BEGIN, ROLLBACK, dan COMMIT TRAN.

Arti dari kata BEGIN TRAN artinya adalah suatu tanda awal bahwa kita akan melakukan transaksi baik itu delete, update ataupun insert. ROLLBACK TRAN adalah jika suatu transaksi telah terjadi, maka dengan perintah tersebut kita bisa mengembalikan data dimana transaksi tersebut sebelum dijalankan. Kemudian untuk COMMIT TRAN adalah lawan dari ROLLBACK TRAN, kita akan mengunci atau membuat permanen data dari hasil transaksi yang telah dilakukan, sehingga kita tidak bisa mengembalikan data sesaat sebelum dilakukannya transaksi.

Untuk lebih jelasnya saya akan mencoba memberikan contoh dalam penggunaan BEGIN TRAN - ROLLBACK TRAN dan BEGIN TRAN - COMMIT TRAN berikut di bawah ini

Gambar Contoh BEGIN TRAN - ROLLBACK TRAN
Pada script di atas menjelaskan bahwa terdapat transaksi delete data dari table Category dengan ID = 16. Ketika dilakukan select sebelum dan sesudah perintah delete, terlihat data untuk ID = 16 tidak ada setelah dilakukan delete. Namun dilakukannya select kembali setelah perintah ROLLBACK TRAN maka data untuk ID = 16 kembali muncul. Artinya adalah setelah dilakukannya Rollback, data dikembalikan kepada saat sebelum transaksi itu dijalankan.

Gambar Contoh BEGIN TRAN - COMMIT TRAN
Pada script di atas menjelaskan bahwa terdapat transaksi delete data dari table Category dengan ID = 16. Ketika dilakukan select sebelum dan sesudah perintah delete, terlihat data untuk ID = 16 tidak ada setelah dilakukan delete. Namun dilakukannya select kembali setelah perintah COMMIT TRAN maka data untuk ID = 16 juga tidak muncul. Artinya adalah setelah dilakukannya Commit, data secara permanen telah berubah setelah transaksi itu dijalankan.

Sekian dan semoga bermanfaat. Terimakasih

Minggu, 28 Februari 2016

Debug program di Visual Studio 2015

Debug adalah suatu fitur yang diidamkan bagi hampir seluruh developer. Setiap pengembangan suatu system khususnya pada coding, tidak dapat dipungkiri bahwa Debugging sangat diperlukan sekali bagi para developer. Dengan adanya debug, para developer tidak harus selalu mengawang-awang logic yang telah dibuatnya saat setelah melakukan proses compile.

Terkadang saat kita sudah merangkai code pada program yang kita buat, pada proses compile memang success (berhasil), namun tidak selamanya code yang kita buat berhasil pada tahap compile-nya, berhasil pula berjalan mulus pada saat dijalankan (running). Karena seyogyanya kita memang perlu memikirikan berbagai kemungkinan (test case) pada code yang telah kita buat.

Pada artikel kali ini, saya akan berbagi cerita tentang bagaimana saya melakukan debug pada IDE Visual Studio 2015. Sebelum saya lanjut pada topik intinya, saya akan menjelaskan sedikit tentang IDE Visual Studio 2015. Belum lama ini Microsoft telah me-release IDE Visual Studio 2015 yang banyak sekali enhancement pada fitur-fitur yang lebih memudahkan para developer .Net Framework dalam mengembangkan system yang dibuatnya. Dibanding versi-versi sebelumnya. Terdapat penambahan dan perbaikan fitur-fitur yang semakin canggih dalam memudahkan para developer. Salah satunya adalah fitur untuk Debug.

Sebenarnya fitur untuk debug ini adalah fitur lama dan memang sudah ada pada Visual Studio versi sebelum-sebelumnya. Namun, pada Visual Studio 2015 ini. Ada kelebihan yang cukup membantu sekali menurut pribadi saya sendiri. Kelebihannya adalah selain kita bisa melakukan debug, saat melakukan debug kita bisa langsung pula mengubah code kita jika memang kita menemukan kesalahan yang kita sadari saat program didebug. Dengan adanya fitur seperti ini, kita tidak perlu melakukan compile ulang lagi saat setelah kita mengubah code kita. Kita bisa saja cukup melakukan satu kali compile lalu saat kita debug dan kita menemukan kesalahan logic pada code kita, kita bisa langsung mengubah code kita saat kita melakukan debug tanpa harus stopping proses. Berikut adalah contoh sederhana dari debugging yang saya lakukan.

Gambar Proses Debugging Pada Visual Studio 2015
Pada gambar diatas, jika dijalankan maka akan menghasilkan output "Nilai b lebih besar dari a". Asumsi misal logic tersebut salah dan kita mau mengganti nilai variable a menjadi a = 13. Kita tidak perlu melakukan stop terlebih dahulu kemudian kita ganti variable tersebut. Maka saat setelah kita langsung mengganti variable a menjadi a = 13 saat sedang debug, output dari program tersebut akan menghasilkan "Nilai b lebih besar dari a".

Seperti itulah keunggulan melakukan debug pada Visual Studio 2015. Kurang lebihnya semoga bermanfaat. Terimakasih.



Sabtu, 17 Oktober 2015

Template Function Vs Overloading Function Pada C++

Halo pembaca setia digital saintis. Maaf rasanya sudah lama sekali saya tidak kembali menulis, mungkin karena mengingat waktu yang hanya tetap 24 jam sehari, namun hal yang harus dikerjakan terus bertambah :D. Ok langsung saja saya akan mencoba membahas topik yang akan saya tulis kali ini. Topik kali ini adalah perbandingan antara penggunaan Template Function dengan Overloading Function. Kenapa saya mencoba menulis topik ini, karena saya pernah bertemu sebuah situasi yang mana ada sebuah method atau fungsi memerlukan nilai kembalian (return) yang berbeda, namun dengan type parameter yang sama. Kemudian saya menjadi teringat dengan penggunaan Template Function.

Pada situasi tersebut, memang ada solusi lain untuk menjawabnya, kita tinggal melakukan casting pada nilai hasil kembalian dari fungsi tersebut menjadi nilai type yang kita inginkan. Tetapi menurut hemat saya, cara itu tidak akan selamanya berhasil. Karena misal jika ada sebuah fungsi dengan nilai kembalian (return) bertipe float, kemudian kita ingin melakukan casting nilai tersebut menjadi int, maka akan ada pembuangan nilai seperti 3.3 akan menjadi 3. Kita kehilangan originalitas nilai sebesar 0.3. Jadi karena itu saya mencoba memilih solusi dengan menggunakan Template Function.

Untuk situasi seperti itu, teknik overloading dari salah satu cabang ilmu Object Oriented Programming juga tidak bisa menjadi solusi. Karena overloading tidak bisa membuat 2 fungsi yang memiliki nama sama, jumlah parameter yang sama, tipe parameter yang sama namun tipe kembalian nilainya yang berbeda. Pada topik ini saya lebih mengulas fungsi yang mengembalikan nilai, karena yang kita tahu sebenarnya fungsi itu sendiri memiliki 2 macam, yang mengembalikan nilai (return) dan yang tidak mengembalikan nilai (void).

Saya akan mencoba menjelaskan terlebih dahulu tentang apa itu Template Function. Template Function adalah salah satu feature atau keunggulan dari C++. Dengan Template Function, kita bisa membuat sebuah fungsi secara general dengan akan menerima berbagai macam tipe data. Berikut adalah rumusan umum untuk membuat sebuah Template Function pada C++.

template <class type> type func_name(type arg1, ...);
*http://www.cprogramming.com/tutorial/templated_functions.html

Dari rumusan umum di atas, saya mencoba membuat sebuah program sederhana dengan membuat dan menggunakan Template Function sebagai contohnya. Berikut adalah program sederhana yang saya buat.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>

using namespace std;

template <class type> type addWithTemplate(type a, type b)
{
    return a + b;
}

int addWithOverloading(int a, int b)
{
    return a + b;
}

float addWithOverloading (float a, float b)
{
    return a + b;
}

int main()
{        
    cout << "addWithTemplate(5, 5) : " << addWithTemplate(5, 5) << endl;
    cout << "addWithTemplate(5.5f, 5.5f) : " << addWithTemplate(5.5f, 5.5f) << endl;
    cout << "\n******************************************************************\n" << endl;
    cout << "addWithOverloading(3.5f, 3.5f) : " << addWithOverloading (3.5f, 3.5f) << endl;
    cout << "addWithOverloading(3, 3) : " << addWithOverloading (3, 3) << endl;
    return 0;
}

Pada baris 5 - 8 menjelaskan bahwa saya membuat sebuah Template Function dengan nama addWithTemplate dengan dua parameter yang bernama a dan b. Tipe parameter - parameter tersebut tidak dideklarasikan secara eksplisit, namun diganti menggunakan type. Dari identifier type tersebut yang akan membuat fungsi addWithTemplate bisa menerima tipe data apa saja. Dapat kita lihat bersama, fungsi tersebut hanyalah tidak lebih dari sebuah fungsi penjumlahan biasa antara dua nilai.

Pada baris 10-18 menjelaskan bahwa saya membuat fungsi penjumlahan pula dengan nama fungsinya addWithOverloading, namun dengan teknik Overloading Function. Saya membuat dua fungsi yang overloading, pertama bertipe int dan kedua bertipe float.

Pada baris 22-26 adalah pemanggilan fungsi-fungsi yang telah dibuat tadi. Untuk baris 22 saya memanggil fungsi addWithTemplate dengan nilai parameter masing - masing 5 (int). Untuk baris 23 saya juga memanggil fungsi addWithTemplate dengan nilai parameter masing - masing 5.5f (float). Lalu pada baris 25 saya memanggil fungsi addWithOverloading dengan nilai parameter masing - masing 3.5f (float). Untuk baris 26 saya juga memanggil fungsi addWithOverloading dengan nilai parameter masing - masing 3(int).

Berikut adalah hasil dari program tersebut jika dijalankan.

Gambar Hasil Program Penggunaan Template Function & Overloading Function
Terlihat pada hasilnya, untuk fungsi addWithTemplate, meskipun dengan tipe parameter int atau float, tetap bisa menghasilkan dengan benar. Begitupun juga dengan fungsi addWithOverloading, dapat menghasilkan nilai yang benar dan sesuai. Hanya saja fungsi addWithOverloading harus dideklarasikan dua kali dengan hanya dibedakan tipe parameternya, sedangkan fungsi addWithTemplate cukup sekali dalam pendeklarasiannya. Jadi jelas lebih simple penggunaan Template Function dan lebih efisien dari sisi code yang ditulis.

Jadi kembali dengan situasi permasalahan pada awal - awal paragraf yang telah saya tulis, bahwa Template Function bisa menjadi solution yang tepat, karena kita tidak perlu memerlukan casting lagi yang dapat menyebabkan originalitas nilainya berkurang.

Semoga tulisan kali ini cukup bermanfaat dan bisa memberikan wawasan kepada teman-teman khususnya para developer C++ yang sudah membaca tulisan saya ini. Terimakasih.

*Note : Seharusnya feature Template Function ini tidak hanya ada pada C++, melainkan ada pula pada Java dan C# CMIIW

Senin, 29 Juni 2015

Cara Decompile File Jar


Pada artikel kali ini saya akan mencoba untuk mengulas bagaimana caranya kita ingin membongkar source code pada file executeable java (.jar). Caranya ternyata tidak begitu sulit, kita cukup menyiapkan sebuah tools decompiler untuk melakukan decompiling file JAR tersebut menjadi source code kembali (.java). Tools decompiler ini tersedia di Java Decompiler. Silahkan download tools tersebut terlebih dahulu.

Ketika sudah mendownload tools tersebut, buka tools tersebut.

Gambar Membuka Java Decompiler Tools
Setelah dibuka maka akan tampil form seperti gambar berikut ini

Gambar Form Utama Java Decompiler Tools

Pilih Menu File > Open File. Kemudian pilih file jar yang ingin didecompile menjadi source code. Pada contoh di artikel ini saya memilih program java sederhana yang telah saya buat dengan nama Decompile.

Gambar Setelah Memilih File Jar
Setelah itu pilih Menu File > Save All Sources. Ketika telah disave, maka akan menjadi seperti yang ditampilkan pada gambar berikut ini.
Gambar Hasil Save Source Untuk Decompile.jar
Kemudian extract file tersebut, dalam contoh artikel ini, file yang diextract adalah Decompile.jar.src.zip. Pada akhirnya nanti kita akan menemukan file Decompile.java. Pada artikel ini terletak pada direktori \Decompile.jar.src\decompile\Decompile.java. Langkah terakhir yaitu membuka file Decompile.java tersebut dengan editor tercinta Anda. Kemudian Anda akan melihat source code tersebut. Berikut adalah source code hasil decompile dari tools Java Decompiler.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/*    */ package decompile;
/*    */ 
/*    */ import javax.swing.JOptionPane;
/*    */ 
/*    */ 
/*    */ 
/*    */ 
/*    */ 
/*    */ 
/*    */ 
/*    */ 
/*    */ 
/*    */ 
/*    */ 
/*    */ public class Decompile
/*    */ {
/*    */   public static void main(String[] args)
/*    */   {
/* 19 */     JOptionPane.showMessageDialog(null, "Halo");
/*    */   }
/*    */ }


/* Location:              D:\Tio\Decompile\dist\Decompile.jar!\decompile\Decompile.class
 * Java compiler version: 7 (51.0)
 * JD-Core Version:       0.7.1
 */

Seperti itulah hasil source code yang telah didecompile. Formatnya memang agak berbeda daripada kita menulis dari awal. Dan sedikit catatan dari saya pribadi, terkadang tools Java Decompiler ini menghasilkan source code tidak 100% benar (ada error jika dicompile lagi) namun kesalahannya tidak begitu fatal melainkan seperti adanya nama kelas atau variable yang sama dan pada scope yang sama yang telah dideklarasikan, ataupun seperti adanya kelas yang perlu didefinisikan namun tidak didefinisikan terlebih dahulu sehingga menyebabkan error.

Sekian dahulu dari saya, semoga dapat bermanfaat. Terimakasih.

Selasa, 16 Juni 2015

Penggunaan Regex Dengan QRegularExpression

Kali ini saya akan mencoba menulis tentang penggunaan Regex dengan menggunakan Class QRegularExpression pada Qt. Sebelum jauh melangkah kepada penggunaan QRegularExpression. Saya akan mencoba menjelaskan sedikit tentang apa itu Regular Expression atau biasa dikenal dengan Regex. Ya yang jelas Regex itu bukan suatu genre lagu.

Regex merupakan suatu fungsi yang digunakan dalam pengaturan pola pada suatu teks. Regex biasanya digunakan dalam melakukan validasi-validasi teks agar data teks yang masuk dapat terkendali dan terhindar dari Garbage In. Pengaturan pola pada Regex menggunakan notasi-notasi yang cukup bervariasi dalam penggunaannya. Kenapa kita perlu Regex? Karena untuk mempersingkat baris pada program kita dalam melakukan validasi, dengan menggunakan notasi-notasi dari Regex, kita bisa menghemat banyak baris dalam melakukan validasi pada program kita.

Dalam tulisan ini saya tidak membahas detil tentang notasi-notasi Regex, saya langsung saja menjelaskan bagaimana cara menggunakan Class QRegularExpression pada Qt. Berikut saya akan mulai menjelaskannya dengan diawali dari code program di bawah ini.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#include <QCoreApplication>
#include <QRegularExpression>
#include <QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QRegularExpression regExp("[^\w]+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$");
    QString email = "freakandstein@gmail.com";
    if(regExp.match(email).hasMatch()){
        qDebug() << "Match";
    }else{
        qDebug() << "Not Match";
    }
    return a.exec();
}

Code program di atas melakukan contoh validasi format email dengan menggunakan Class QRegularExpression. Pada baris ke 7 terdapat pattern atau pola Regular Expresssion dengan menggunakan notasi-notasi yang akan melakukan validasi teks apakah itu email atau bukan. Untuk pattern Regex email tidak selamanya harus seperti pada baris ke 7 di atas, itu semua tergantung logic dan pengetahuan tentang notasi dari si pembuat pattern, bisa lebih singkat atau bisa lebih panjang.

Pada baris ke 8 kita mencoba email dengan nama "freakandstein@gmail.com" apakah valid atau tidak sebagai email. Lalu pada baris ke 9, email akan dicocokan dengan pola yang telah dibuat dengan menggunakan fungsi match() dan hasMatch(). Hasil dari baris ke 9 akan mengembalikan nilai True jika memang email tersebut terdapat kecocokan dengan pola atau akan mengembalikan nilai False jika memang email tersebut tidak ada kecocokan dengan pola.

Pada code program di atas saat dijalankan, maka akan menghasilkan "Match". Berikut adalah gambar dari contoh programnya.

Output Program Regex
Fungsi yang digunakan pada Class QRegularExpression untuk program di atas adalah fungsi match() dan hasMatch(). Sebenarnya masih ada beberapa lagi fungsi yang ada pada Class QRegularExpression. Tetapi untuk kali ini saya hanya menggunakan 2 fungsi tersebut, untuk selebihnya dapat dicari lagi lebih dalam pada documentation yang telah disediakan.

Untuk sekedar tambahan, saat ini banyak website yang menyediakan sarana untuk belajar Regex secara langsung. Kita bisa langsung mencoba membuat pola dengan notasi-notasi dan kita bisa langsung mengujinya dengan teks inputannya. Contohnya adalah https://regex101.com/, menurut saya website tersebut cukup rekomen bagi yang ingin belajar Regex. Di website tersebut selain kita bisa menguji pola yang kita telah buat secara langsung, di sana juga terdapat penjelasan yang cukup komprehensif untuk setiap notasi-notasinya.

Sekian dari saya, semoga tulisan ini bisa bermanfaat bagi kita semua khususnya pribadi saya sendiri. Terimakasih.

Jumat, 12 Juni 2015

Setup QT Developer For Android

Pada artikel kali ini saya akan mencoba berbagi tentang bagaimana caranya melakukan setup konfigurasi pada QT Developer untuk develop Android. Seperti yang kita telah tahu sebelumnya pada artikel saya, QT adalah sebuah tools atau framework yang berbasis C++ dan bisa mendevelop aplikasi desktop dan juga mobile seperti Android, Blackberry dan iOS. Kali ini saya akan mencoba fokus untuk Android terlebih dahulu, karena saya memang hanya memiliki Android saja :D.

Pertama dan yang utama adalah, kita harus mendownload QT untuk Android terlebih dahulu. Berikut adalah linknya jika ingin mendownloadnya terlebih dahulu QT For Android. Setelah download selesai, maka diinstal dan sedikit menunggu sampai dengan selesainya menginstal. Jika instalasi selesai, langsung saja buka QT Creator pada Program. Pilih Qt Creator (Community) seperti yang ada pada gambar di bawah ini

Qt Creator (Community) Pada Menu Program Windows

Jika kita sudah pernah menginstal QT namun bukan untuk yang develop Android, maka jangan sampai tertukar shortcut programnya. Tetapi sedikit tips dari saya, lebih baik dari awal kita instal saja QT untuk develop Android, karena bagaimanapun dengan QT Android kita bisa mendevelop aplikasi Android dan juga bisa mendevelop desktop. Namun jika kita menggunakan QT untuk desktop, maka kita tidak akan bisa mendevelop untuk aplikasi Android.

Saat Qt Creator (Community) telah dibuka. maka akan tampil sama persis seperti QT Creator untuk desktop. Kemudian masuk pada menu Tools -> Options->Android. Pada gambar di bawah, ini adalah tampilan dari menu Android.

Configuration Qt for Android
Pada gambar di atas, dibutuhkan JDK, Android SDK, Android NDK dan Ant Executable. Untuk ke empat file tersebut harus kita miliki untuk kemudian kita referensikan pada Qt Creator for Android. Bagi yang belum memiliki, berikut saya melampirkan link JDKSDKNDK dan Apache Ant. Bagi Programmer Mobile yang berbasis Java, tidak asing dengan apa yang dimaksud JDK dan SDK, namun saya akan mencoba menjelaskan sekilas tentang apa itu NDK. NDK adalah suatu Toolset yang mana kita bisa menulis program dengan menggunakan C/C++ Native pada develop aplikasi Android, inilah bagian penting dari Qt for Android Developer, karena dengan menggunakan Qt untuk mendevelop aplikasi Android, kita akan menggunakan bahasa pemrograman C/C++, sehingga membutuhkan yang namanya NDK sebagai penterjemah untuk bisa berkomunikasi dengan Dalvik Virtual Machine. Sedangkan Apache Ant itu sendiri adalah semacam Java Library untuk pendukung saat proses building software.

Setelah ke empatnya telah kita download, untuk JDK biasanya kita install, lalu untuk NDK, SDK dan Apache Ant cukup kita ekstrak saja. Kemudian untuk masing-masing lokasinya kita browse seperti gambar yang ada di atas. Sesuaikan masing-masing lokasinya. Setelah itu Qt for Android siap digunakan, kita bisa langsung mendeploy aplikasi yang telah kita buat ke dalam Gadget Android kita atau maupun bisa juga kita membuat terlebih dahulu virtual Gadget Android nya sebagai tester untuk aplikasi yang kita buat.

Sekian dari artikel yang singkat ini, semoga dapat bermanfaat.





Minggu, 07 Juni 2015

Cara USB Debugging Zenfone 2

Pada artikel kali ini, saya sedikit berbagi bagaimana caranya untuk melakukan debug pada Asus Zenfone 2 melalui USB. Awalnya, saya sempat bingung untuk melakukan debugging ini. Saya sempat berpikir bahwa ini adalah masalah kecil, karena biasanya pada gadget-gadget android terdapat menu Developer Options di dalam menu Settings, namun pada Zenfone 2 ini, saya tidak menemukan menu tersebut, saya sempat menghabiskan waktu cukup banyak untuk mencari dimana menu untuk mengubah mode menjadi USB Debugging. Namun saya tidak menemukannya juga, kemudian saya mencoba mencari forum luar lewat si kacamata Google, alhasil saya menemukan caranya, ternyata caranya agak sedikit unik, tidak menggunakan aplikasi tambahan pula. Unik dan simpel. Dua kata yang mewakili. Penasaran bagaimana caranya? Ok langsung saja saya mulai.

1. Buka menu Settings

Menu Settings

2. Pilih About, kemudian pilih Software Information


Menu About => Software Information

3. Pada Build number, tap beberapa kali


Build number

4. Tap beberapa kali hingga muncul seperti ini


Unlock Developer Option

5. Setelah itu kembali ke menu Settings dan lihat ada menu Developer Options


Menu Developer Options

6. Pilih Developer Options, kemudian akhirnya kita menemukan USB Debugging mode.


USB Debugging
Jika kita belum melakukan tahap seperti di atas, menu Developer Options tidak akan muncul. Demikian cara untuk menampilkan Developer Options pada Asus Zenfone 2. Terimakasih dan selamat mendeploy.