Selasa, 02 November 2010

Byte Process

(Maaf kalo ga bersesuaian nama nama fungsinya) Ini adalah kumpulan fungsi-fungsi byte di C# yang kubuat sendiri. Fungsi2 dibawah ini tidak untuk dipakai dalam jumlah byte pada byte array (byte[]) lebih dari 32000, karena proses akan terasa lambat.

BytePush: menambahkan byte array (byte[]) ke belakang byte array yg sudah ada.

public static void BytesPush(ref byte[] toAdd, byte[] addBytes)
{
  if (addBytes.Length == 0) return; 
  byte[] bytesTemp = new byte[toAdd.Length + addBytes.Length]; 
  if (toAdd.Length > 0)
    Buffer.BlockCopy(toAdd, 0, bytesTemp, 0, toAdd.Length); 
  Buffer.BlockCopy(addBytes, 0, bytesTemp, toAdd.Length,
    addBytes.Length); 
  toAdd = bytesTemp;
}

ByteShift: mengambil byte array terdepan yang dibatasi oleh byte array separator/pembatas tertentu.

public static byte[] BytesShift(ref byte[] toShift, byte[] splitter)

  byte[] bytesShift, bytesTemp; 
  if (toShift.Length > 0) 
  { 
    BytesTrim(ref toShift, splitter); 
    int offset = BytesIndexOf(ref toShift, splitter, 0); 
    if (offset > -1) 
    { 
      bytesShift = new byte[offset]; 
      Buffer.BlockCopy(toShift, 0, bytesShift, 0, bytesShift.Length); 
      if ((toShift.Length - bytesShift.Length) > splitter.Length) 
      { 
        bytesTemp = new byte[toShift.Length - bytesShift.Length - 
          splitter.Length]; 
        Buffer.BlockCopy(toShift, bytesShift.Length + splitter.Length, 
          bytesTemp, 0, bytesTemp.Length); 
      } 
      else bytesTemp = new byte[0]; 
      toShift = bytesTemp; 
      return bytesShift; 
    } 
    else 
    { 
      bytesTemp = toShift; 
      toShift = new byte[0]; 
      return bytesTemp; 
    } 
  } 
  else return new byte[0];
}

public static int BytesIndexOf(ref byte[] toSearch, byte[] searchFor, int startOffset)

  byte[] temp = new byte[searchFor.Length]; 
  int rv = -1; 
  for (int i = startOffset; i < toSearch.Length - searchFor.Length; i++) 
  { 
    Buffer.BlockCopy(toSearch, i, temp, 0, searchFor.Length); 
    if (BytesEqual(temp, searchFor)) 
    { 
      rv = i; 
      break; 
    } 
  } 
  temp = null; 
  return rv;
}

public static int BytesLastIndexOf(ref byte[] toSearch, byte[] searchFor)
{
  byte[] temp = new byte[searchFor.Length];
  int rv = -1;
  for (int i = (toSearch.Length - searchFor.Length); i > rv; i—)
  {
    Buffer.BlockCopy(toSearch, i, temp, 0, searchFor.Length);
    if (BytesEqual(temp, searchFor))
    {
      rv = i;
      break;
    }
  }
  temp = null;
  return rv;
}

public static bool BytesEqual(byte[] bytesA, byte[] bytesB)
{
  if (bytesA.Length != bytesB.Length) return false; 
  int pos = 0; 
  foreach (byte a in bytesA) 
  { 
    if (!a.Equals(bytesB[pos])) return false; 
    pos++; 
  } 
  return true;
}

public static void BytesTrim(ref byte[] toTrim, byte[] trim)
{
  int offset = 0;
  byte[] bytesTemp;
  bool moreTrim = false;
  while (true)
  {
    offset = BytesIndexOf(ref toTrim, trim, 0);
    if (offset == 0)
    {
      bytesTemp = new byte[toTrim.Length - trim.Length];
      Buffer.BlockCopy(toTrim, trim.Length, bytesTemp, 0,
        bytesTemp.Length);
      toTrim = bytesTemp;
      moreTrim = true;
    }
    else moreTrim = false;
    offset = BytesLastIndexOf(ref toTrim, trim);
    if (offset == (toTrim.Length - trim.Length))
    {
      bytesTemp = new byte[toTrim.Length - trim.Length];
      Buffer.BlockCopy(toTrim, 0, bytesTemp, 0, bytesTemp.Length);
      toTrim = bytesTemp;
      moreTrim = moreTrim || true;
    }
    else moreTrim = moreTrim || false;
    if (!moreTrim) break;
  }
}

Jumat, 02 April 2010

Install Ulang (Reinstalling) Windows XP SERVICE PACK 3 TCP/IP Driver

Pernah suatu hari, aku menemukan "unable to contact ip driver" pada saat mem-ping komputer aku. Setelah kucari-cari ternyata masalahnya adalah korup pada konfigurasi driver TCP/IP. Aku hampir saja putus asa dan menginstall ulang Ms Windows-XP SERVICE PACK 3-ku. Aku putus asa karena untuk install ulang windows ku aja membutuhkan waktu setidaknya 3 hari.

Minggu, 14 Maret 2010

Hash MD5 dan SHA1 di MySQL, Microsoft SQL Server 2005

MySQL :

md5:
select md5('string untuk di md5 kan') from dual;

sha1:
select sha1('string untuk di sha1 kan') from dual;


Microsoft SQLServer 2005:

md5:
SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5','string untuk di md5 kan')), 3, 32); 

SHA1:
SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA1','string untuk di sha1 kan')), 3, 40); 

Sabtu, 06 Maret 2010

Bagi Maniak FV di FB yang menggunakan Smart EVDO

Mungkin sebagian dari kamu tidak bisa membuka Farmville hari ini. Seperti aku, sangat kesal karena tidak bisa membuka permainan yang kusukai ini.

Satu harian ku coba mengerti mengapa tidak bisa dibuka Farmville melalui Facebook. Alhamdulillah, akhirnya aku menemukan caranya.

Selasa, 23 Februari 2010

Membuat Effek Bayangan pada HTML

Mari kita lihat sebuah situs, http://sizzlejs.com/. Dari seolah olah ada kertas melayang diatas layar. Untuk mencoba-nya mari ikuti langkah berikut ini.
  1. Dari Adobe Photoshop, File->New, masukkan ukuran gambar, Width = 900, height = 240
  2. Set warna foreground menjadi warna lain, misalnya Hijau (#2F2D7E) dengan menggunakan "Paint Bucket Tools"
  3. Buat sebuah kotak, Tekan M dan buatlah kotak diatas kanvas tersebut.

Jumat, 19 Februari 2010

PHP UDF import function


Dalam pemrograman PHP, dimungkinkan ada ratusan file php yang harus dijalankan dari satu file. contoh: index.php.

File index.php merupakan file default yang dipanggil pada saat client membuka sebuah situs yang menggunakan PHP sebagai mesinnya.

Dari index.php ini akan dipanggil (include atau require) beberapa file php lainnya. Dan biasanya pemanggilan itu dilakukan dengan menggunakan fungsi require_once(). 

Pada tulisan ini saya akan memperbaiki fungsi require_once() agar lebih mudah diakses dan menggantikannya dengan klausa yang lebih mudah lagi, yaitu import.

Kamis, 18 Februari 2010

setAutoCommit

setAutoCommit adalah sebuah property objek Connection JDBC di Java. Semisalnya ada beberapa perintah SQL yang harus dijalankan pada sebuah transaksi dan memastikan semua transaksi harus sukses maka gunakanlah property ini.

Transaction pada database yang memilikinya, memiliki 2 perintah inti dalam mengakhiri kumpulan perintah SQL yaitu commit dan rollback. commit berarti menyimpan dengan sempurna semua data hasil kumpulan perintah SQL benar-benar ke dalam media penyimpanan dan rollback adalah kebalikanya, yaitu membatalkan semua kumpulan perintah SQL yang diberikan.

Yah, sebenarnya proses di database itu bertingkat pada database yang memiliki Transaction. Database tidak akan melakukan modifikasi data ke sebuah table sebelum dieksekusi perintah commit. Namun demikian ada beberapa database yang menon-aktifkan atau tidak memiliki Transaction. Sebut saja MySQL-MyISAM dan SqlLite. Beberapa contoh database yang memiliki fitur Transaction ini adalah : MySQL-InnoDB, PostgreSQL, Oracle, MSSQL Server.

Berikut dibawah ini contoh penggunaan setAutoCommit yang ada di Java JDBC.

Koneksi Database Mysql ke Oracle

Berikut ini catatanku tentang bagaimana membuat sebuah jembatan data dari Oracle ke MySQL.
  
Catatanku dibawah ini bercerita tentang hubungan database SIMDUK dengan SIAK. Keduanya adalah jenis Aplikasi Kependudukan yang digunakan di Dinas/Kantor Catatan Sipil. Hanya saja SIMDUK sudah dipensiunkan, dan SIAK adalah penggantinya. Database SIMDUK yang dalam bentuk Informix 5.0 sejauh yang aku tahu hanya memiliki ODBC 16Bit yang bisa berjalan diatas Win3.11 dan tidak didukung oleh JDBC. Karena itu aku mengkonversi data Simduk yang ada di Informix tersebut ke MySQL sebelumnya.
  
Huh.. Perjuangan yang panjang.

  1. Komputer- Laptop Celeron 1034Mhz RAM 756Mb + HDD 80Gb (Jadul amat yah)- Ms Windows XP SP3- MySQL V 5.1- MySQL ODBC Connection V5.1- Oracle 9.0.1.2
     

  2. Nama Schema Simduk di MySQL yang kumiliki adalah simdukdb
     

  3. Nama Schema/User SIAK di Oracle adalah siakdb
     

  4. Nama Instance Database Oracle adalah backme80
     

  5. Instalasi Oracle ada di d:\oracle

Situs Blogging pertama ku

Hai Semuanya...