Pages

Thursday, February 2, 2012

Guide of Deciding System Files on USB Flash Drives

FAT16, FAT32, NTFS, or exFAT on USB Flash Drives?
by stewie

If you don't feel like reading this boring guide and your thumb drive or partition is 2 GB* or smaller, then stick with the default FAT16 for best performance and cross-platform compatibility. There is a reason why most UFDs in these sizes, including my 4 GB stick, come pre-formatted with FAT16.

*Windows NT 4.0, 2000, XP, and Vista can support FAT16 up to 4 GB using 64K cluster size. However, it may create compatibility issues with some applications. But for storage purposes, it shouldn't cause any problems.
Quote:
Originally Posted by Anonymous
I just bought a USB thumb drive, which format should I use?
This question has been asked many times on NBR, many people are not sure about which one to use or suits their needs. In this guide, I will help you to understand the benefits and drawbacks for each of them.

Tools used for this guide:
  • 1 GB USB flash drive
  • Nodesoft Disk Bench (no synthetic results)

FAT16 (a.k.a. FAT)

Pros:
  • Highest cross-platform compatibility
  • Best overall performance
Cons:
  • 2 GB volume size limit or up to 4 GB with some OSs
  • Maximum file size of 4 GB (minus 1 byte)
  • No access control and permissions (could be a pro)

FAT32

Pros:
  • Good cross-platform compatibility
  • No 2 or 4 GB volume size limitation
Cons:
  • Moderate to slow overall performance
  • Maximum file size of 4 GB (minus 1 byte)
  • No access control and permissions (could be a pro)

NTFS

Pros:
  • No 2 or 4 GB volume size limitation
  • No 4 GB file size limitation
  • Very fast write speed for single file
  • Fewer disk accesses than FAT if a file is badly fragmented
  • Access control and permissions (could be a con)
Cons:
  • Low cross-platform compatibility
  • Slow write speed for multiple files
  • May have permission issues between users and systems
  • May decrease the lifespan of the UFD due to additional writes
  • Must remove the UFD with the "Safely Remove Hardware" procedure

exFAT (a.k.a. FAT64)

Pros:
  • No 2 or 4 GB volume size limitation
  • No 4 GB file size limitation
  • Fast write speed for single file
  • Requires less disk space overhead than NTFS
Cons:
  • Very slow write speed for multiple files
  • Cannot be used for Windows Vista's ReadyBoost capability
  • No access control and permissions (could be a pro)
  • Very low cross-platform compatibility
    (Currently only Windows Embedded CE 6.0, Vista SP1, Server 2008, and Windows 7. Drivers can be added to XP for read and write, but cannot format.)

Some test results with Nodesoft Disk Bench

Multiple tests were done for better accuracy, they were all done with the default allocation size, optimize for performance enabled, and antivirus disabled.

1 MB file | Read (MB/s) | Write (MB/s)

FAT16 — 32.393 — 2.063
FAT32 — 32.393 — 1.339
NTFS — 32.393 — 2.797
exFAT — 32.393 — 1.464

10 MB file | Read (MB/s) | Write (MB/s)

FAT16 — 129.334 — 4.645
FAT32 — 129.334 — 3.943
NTFS — 129.334 — 29.326
exFAT — 129.334 — 4.703

100 MB file | Read (MB/s) | Write (MB/s)

FAT16 — 306.212 — 5.106
FAT32 — 306.212 — 5.065
NTFS — 321.915 — 4.952
exFAT — 379.010 — 5.188

Writing 50 MB of 712 files and 95 folders

FAT16 — 1 min 12 sec
FAT32 — 1 min 19 sec
NTFS — 1 min 50 sec
exFAT — 1 min 55 sec


Conclusion

If you're reading/writing a single file, NTFS seems to win hands down. But in real life situations where multiple files being read and write, then it's another story, NTFS was more than half a minute slower when writing just 50 MB of multiple files and directories.

For some reason, the reading times from Disk Bench seem to be pretty much the same between the file systems, I'm not sure if they're accurate, but many other test results on the Internet (e.g. Irongeek.com, AnandTech.com) have shown that FAT16 to be the quickest as well, although the difference becomes less significant for bigger files. If you have done some tests with your UFD, please feel free to post them.

Source: http://forum.notebookreview.com/hardware-components-aftermarket-upgrades/332023-guide-fat16-fat32-ntfs-exfat-usb-flash-drives.html

Friday, January 27, 2012

SMS Tidak Terkirim Pada Blackberry

Dari tanggal 15-27 Januari 2012 saat tulisan ini dibuat, saya mengalami kesulitan dalam mengirim SMS di Blackberry saya.

Awal-awal bisa SMS tanpa masalah, tapi entah dari kapan SMS mulai susah dilakukan, bahkan telp pun susah. Asumsi awal saya adalah :
1. Sinyal yang buruk. Berhubung sinyal 3 sangat buruk di gedung kantor yang baru dan juga di lantai dasar rumah saya
Tapi setelah saya lihat, sinyal bar yang ada di BB saya ternyata full namun tetap tidak bisa mengirim SMS., Alhasil setelah mengecek ternyata pulsa yang habis (maklum kebanyakan komunikasi via BBM).
Setelah melakukan isi ulang ternyata juga masih ERROR! tidak bisa mengirim SMS.

Menurut pengalaman saya, yang pertama adalah SMS Center yang mungkin berubah. Berikut list SMS Center yang ada:

(1) Three [Hutchinson] : +6289644000001
(2)
Axis [Lippo Tel] : +628315000032
(3)
XL [Excelcomindo] : +62818445009
(4)
Simpati & Kartu As [Telkomsel] : +6281100000
(5)
Mentari [Indosat] : +62816124
(6)
IM3 [Indosat] : +62855000000

Namun setelah dilakukan pengecekan, SMS Center telah benar. Berarti penyebabnya adalah BB itu sendiri!
Setelah menelaah, ternyata kesalahan terdapat pada DATA CODING dan NETWORK TO SEND OVER, harus merujuk masing-masing ke "7 bit" dan "Circuit Switched" atau "Circuit Switched Preferred".
Option tsb bisa dilihat di  Messages - logo bb - option.

Semoga info ini membantu.
Maksud hati hanya mao sharing yang saya tau kok dan mendokumentasikannya :D

Saturday, January 14, 2012

Common Keyword OOP (Static, Final, Abstract)

Di java dan C# (karena cuman didalam bahasa itu yang saya tau), terdapat keyword:

final menunjukkan bahwa class/method/variable yang dideclare dengan keyword final tidak dapat di override ataupun diubah valuenya (khusus untuk variable). Keyword final tidak dapat digabungkan dengan keyword abstract, karena sifatnya bertentangan (compile-error).

Karakteristik final:
- Biasanya digunakan untuk deklarasi konstan digabungkan dengan static keyword. Contoh: public static final MOVE = 1;
- Pengubahan value terhadap variable final; override dan overloading method; pewarisan/inheritance final class akan terjadi compile-error.

abstract menunjukkan bahwa class/method (agak lupa abstract variable ada di C# apa tidak) bersifat abstrak yang memaksa subclass / child nya untuk mengimplementasi method/class tersebut, jika tidak maka akan terjadi compile-error.

Karakteristik abstract:
- Harus di-implemen / di override oleh subclass / child nya, jika tidak akan compile error.
- Untuk abstract class, memiliki karakteristik yang serupa dengan interface tapi tidak sama.
- Tidak ada abstract variable dalam Java. (CMIIW)
- abstract class dapat memiliki konkrit method (tidak abstract), ini merupakan salah satu pembeda dengan interface.

Dahulu saya paling kesulitan memahami static keyword, namun beruntung sekarang saya sudah cukup paham tentang static, sebelum itu anda harus paham istilah dibawah ini:

instance = representasi/contoh/bentuk dari blueprint yang ada. Contohnya seperti Budi adalah representasi dari Manusia.
instantiate = istilah dari pembuatan untuk 1 instance.

static menunjukkan bahwa class/method/variable yang didefinisikan sebagai static hanya memiliki 1 instance untuk semua. Contohnya adalah dalam pembuatan object X terhadap class HURUF (1 atau lebih object), hanya akan ada 1 instance static method/variable yang dibuat/digenerate untuk 1 object tersebut. Method/variable static tsb adalah milik class HURUF, bukan milik object X, sehingga semua object akan mengakses 1 instance static yang sama milik class HURUF.
static sangat sering digunakan

Karakteristik static:
static keyword sering digabungkan dengan final untuk pembuatan konstan.
- Class dapat bersifat static, namun setiap member class harus bersifat static (mengikuti aturan dan fungsi dari static keyword), tidak mungkin bukan class yang hanya ada 1 instance dalam JVM, tetapi member class nya bisa lebih dari 1 instance?
- static metod tidak dapat mengakses non-static method/variable.
- static method dapat mengakses static method/variable.
- Untuk mengakses non-static method/variable, harus melakukan instantiate terlebih dahulu.

Prinsip diatas sesuai dengan fungsi dari static keyword. Bukankah sangat aneh bahwa 1 instance yang konkrit (static) memiliki instance yang tidak konkrit / belum jelas? untuk mengaksesnya maka harus dilakukan instantiated terlebih dahulu.
 
Semoga informasi ini berguna untuk anda.

Jika ada salah, mohon koreksinya :)
Maksud hati hanya mao sharing yang saya tau kok :D

Saturday, December 31, 2011

Cohesion (Kohesi) & Coupling (Kopling)

Cohesion dan Coupling merupakan konsep dasar dalam perancangan dan rekayasa perangkat lunak.
Membagi software/perangkat lunak menjadi modul-modul yang kecil bukan sekedar memisahkan kumpulan kode dari kumpulan kode lainnya. Tetapi memastikan bahwa modul yang dirancang menganut prinsip
"Loose Coupling, High Cohesion"

Coupling  adalah ketergantungan antar modul satu dengan modul lainnya. Bayangkan jika anda mengubah 1 modul A tapi karena modul lain memiliki ketergantungan terhadap modul A, maka efek perubahan ini mungkin saja punya impact terhadap modul lain. Karena itu loose coupling sangat penting dalam perancangan software.

Cohesion adalah keterikatan fungsi-fungsi di dalam suatu modul. Maksudnya adalah modul yang dibuat memiliki fungsi-fungsi yang serupa untuk 1 tanggung jawab. Karena itu high cohesion sangat penting dalam perancangan software.

Contoh coupling -> Terdapat 1 modul Transaksi untuk Penjualan dan Pembelian. Karena Pembelian dan Penjualan bisa dipisahkan (Pembelian adalah transaksi ke supplier, sedangkan Penjualan adalah transaksi ke Customer) adalah suatu hal yang terpisah, maka modul Transaksi dapat dibagi menjadi 2 modul terpisah yaitu modul Pembelian dan modul Penjualan. Sehingga perubahan terhadapa Penjualan tidak mempengaruhi Pembelian.

Contoh cohesion -> 1 class Lampu memiliki 1 tanggung jawab untuk Lampu saja. Fungsi-fungsi seperti turningOn, turningOff, changeColour, dll harus identik dengan tanggung jawab terhadap prilaku lampu secara umum.



Jika ada salah, mohon koreksinya :)
Maksud hati hanya mao sharing yang saya tau kok :D

Sunday, December 25, 2011

Mutable, Immutable, Thread Safe, Not-Thread Safe

Just notes:

Mutable adalah objek yang ketika dibuat (instantiate), dapat dirubah isinya.
Immutable adalah kebalikan dari Mutable, ketika sudah di instantiated maka objek tersebut tidak dapat dirubah isinya. Contoh paling umum adalah objek String.

Contoh pada Java, kita harus berhati-hati dalam menggunakan String karena objek ini sifatnya immutable. Pada saat anda mendeklarasikan String kata = "Saya immutable", JVM akan membuat 1 objek immutable.
Ketika anda melakukan perubahan: kata = "Saya mutable" anda sebenarnya melakukan pembuatan objek baru lagi dengan variable "kata" dan isi "Saya mutable" namun pada alokasi memori yang berbeda dari variable sebelumnya. Jika terlalu banyak operasi seperti itu, dapat mempengaruhi performance.



Jika anda akan melakukan banyak perubahan atau penambahan kalimat pada String objek, biasakan menggunakan class StringBuilder atau StringBuffer, lalu pada akhir manipulasi tersebut ubah menjadi String.

Perbedaan StringBuilder dan StringBuffer hanya pada Thread Safe (String Buffer) dan Not-Thread Safe (String Builder).

Thread Safe adalah konsep yang menjelaskan jika terdapat 1 resource yang digunakan bersama pada satu waktu (shared resource) tidak memberikan hasil yang berbeda / tidak sinkron. Thread Safe dapat diartikan dengan synchronization. Sehingga terdapat aksi wait() terhadap resource yang dipegang oleh banyak thread.

Not-Thread Safe adalah kebalikan dari Thread Safe, jika ada 2 thread yang menggunakan 1 resource (shared resource) maka hasil/value yang diberikan bisa berbeda/tidak sinkron, tergantung siapa yang lebih dahulu mememegang resource tsb (hold / lock the resource).

Contoh kasus seperti ini:
Misal ada Objek X, resource A, resource B, perintah 1-2 pada Objek X.

1. Objek X di akses oleh dua thread A dan B
2. Objek X dipegang oleh A, melakukan 1 perintah terhadapa objek X, ketika selesai nilai Objek X berubah.
3. Objek X kemudian diakses oleh B setelah setelah perintah 1 diekseskusi A, objek X nilainya akan berubah setelah dieksekusi oleh B (perintah 1 diekseskusi oleh B).
4. Karena thread A agak lama, maka B tetap mengakses objek X dan mengeksekusi perintah 2 terhadap objek X, nilai objek X berubah. 
5. Objek X kemudian diakses kembali oleh thread A untuk mengeksekusi perintah 2, value apa yang diperoleh oleh A pada saat diakses kali ini?

- Jawaban tergantung pada Thread Safe dan Not Thread Safe.
Karena alokasi objek X terdapat pada alamat memori yang sama, maka pada langkah 5 nilai sebenarnya adalah: objek X setelah diekseskusi oleh B.
Jika Thread Safe, maka A akan membaca nilai objek X dimana dia terakhir diubah oleh B.
Jika, Not Thread Safe maka nilai objek X yang dibaca adalah nilai objek X yang terakhir diubah oleh A.

Semoga penjelasan ini bisa dimengerti.
Sebenarnya lebih enak pakai gambar :D

Jika ada salah, mohon koreksinya :) Maksud hati hanya mao sharing yang saya tau kok :D

Saturday, December 10, 2011

How Select Statement SQL Works

Berikut adalah cara kerja SELECT statement pada Query SQL (setidaknya secara teori):
  1. Dimulai dari FROM clause dan membuat sebuah table dari semua join, union, intersection dan apapun itu pada FROM clause. Pada momen ini diijinkan untuk membuat alias pada table ( AS
    ) yang akan digunakan untuk query statement berikutnya.

  2. Menuju ke WHERE clause dan membuang semua row/record yang tidak masuk kriteria; selalu menolak suatu kondisi yang unknown dan false. WHERE clause berkaitan dengan proses kerja dari FROM clause.

  3. Menuju ke GROUP BY clause (jika ada), melakukan grouping dan mengurangi tiap group yang ada menjadi single row, me-replace working table yang ada dengan grup table yang didefinisikan. Row/record yang akan di grouping harus memenuhi karakteristik: (1) kolom table (2) Perhitungan terhadap grouping tsb (cth, aggregate functions) (3) function atau (4) suatu ekspresi yang dibuat dari no 1, 2 dan 3.

  4. Menuju ke HAVING clause (jika ada) dan menerapkannya terhadap grouping table yang sudah terbentuk. Jika tidak ada, maka dianggap keseluruhan table sebagai satu grup.

  5. Menuju ke SELECT clause dan mengkonstruksi/menggabungkan ekspresi yang terdapat di SELECT clause. Ini berarti semua scalar subqueries, function calls dan expression yang terdapat pada SELECT dijalankan ketika semua clause selesai dieksekusi. "AS" operator pada SELECT statement yang berfungsi sebagai pemberi nama/alias juga dieksekusi sebagai satu kesatuan, karena itu ia tidak dapat digunakan pada WHERE clause ataupun SELECT list yang lain.

  6. Untuk nested query atau query rangkap mengikuti aturan umum yang terdapat pada bahasa pemograman seperti C, VB, Java, dll. Yaitu cakupan/scopes pada referensi kolom atau table yang digunakan. Contohnya: table atau kolom pada nested query hanya dikenal dari nested query yang dicakupnya, namun ia bisa menggunakan reference table atau kolom diluarnya dimana nested query itu digunakan.
Ex: Select Id, name, category, (Select name from Supplier As sup Where prodid.sup = id.Prod) as SupplierName
From Products prod

    Note: SELECT tidak dapat memiliki lebih banyak kolom daripada GROUP BY, tetapi dapat memiliki lebih sedikit kolom dibanding GROUP BY.

    Jika ada salah, mohon koreksinya :) Maksud hati hanya mao sharing yang saya tau kok :D

Saturday, December 3, 2011

Calendar dan Date (Part 1)

Tanggal merupakan hal sangat penting dalam aplikasi-aplikasi bisnis. Java menyediakan Calendar class sebagai utilitas untuk memanipulasi tanggal. Date class telah ditinggalkan oleh Java karena banyak mengandung bug, walaupun begitu Calendar class juga memiliki beberapa bug namun nampaknya sudah diperbaiki pada Java 7.

Saya masih sangat lemah dalam manipulasi tanggal, karena itu saya mencoba untuk merangkum beberapa snippet code yang mungkin membantu mengingat memory saya (walaupun dapat dilakukan dengan googling dan search ke oracle java docs)

Hirarki Class :
java.lang.Object
   java.util.Calendar

java.lang.Object
  java.text.Format
     java.text.DateFormat
         java.text.SimpleDateFormat 


Menampilkan tanggal hari ini:


public static void main (String [] args) {
    //menginisialisasi calendar dan mendapatkan tanggal dan waktu berdasarkan default locale dan timezone.
    Calendar now = Calendar.getInstance();
    // return Date object dari Calendar yang di instantiate, ini berguna untuk manipulasi ke String
    Date date = now.getTime();

    // dahulu anda dapat menginisialisasi seperti ini, namun tidak disarankan karena Date Class di Java sudah ditinggalkan, sebagai gantinya menggunakan Calendar.
    // date = date.now(); 

   // melakukan inisialisasi dan memberi date pattern, hanya date pattern yang didefinisikan yang akan dikenal oleh SimpleDateFormat.

   DateFormat df= new SimpleDateFormat("dd-mmm-yyyy");
    // df.format(date) akan me-return StringBuffer, karena itu harus diubah menjadi String

   String datestring = df.format(date).toString().toUpper();
   System.out.println (datestring);

   date = df.parse("15-Feb-2012");  // return date object
   System.out.println (df.format(date).toString() );


 }

Akan show (tanggal hari ini) contohnya : 11-NOV-2011 dan 15-Feb-2012

Keterangan:
date-pattern :
"dd.mm.yyyy", "mm/dd/yyyy", 
"E, dd MMM yyyy HH:mm:ss Z" (Tue, 03 Jan 2012 21:30:45 +0153), "EEEE, dd MMMM yyyy HH:mm:ss zzzz" (Tue, 03 Jan 2012 15:30:45 India Standard Time), 
dll. Lihat JavaDoc untuk lengkapnya.

Snippet diatas hanya secara sederhana menjelaskan konversi Date menjadi String dan String menjadi date berdasarkan format pattern yang telah sesuai. Mungkin berikutnya adalah manipulasi tanggal dengan Calendar class.

To be continued


Java Doc reference:
http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html
http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html


Jika ada salah, mohon koreksinya :)
Maksud hati hanya mao sharing yang saya tau kok :D