0

QR Code Testing Updates

Aku baru je test satu lagi projek QRCode, ZXing. Actually projek ni adalah projek untuk baca semua jenis barcode. Aku dah test dengan beberapa jenis QRCode yang aku dah generate. Bagusnya dia boleh detect QRCode dalam semua arah walaupun telah dirotate.

Dalam post aku sebelum ni, projek tu x boleh recognize kalau QRcode tu dah dirotate beberapa degree.


Kalau nak try, boleh gi web ni. Ader link untuk online encode & decode.
http://code.google.com/p/zxing/
0

GWT Ext Grid Remote Paging + PHP JSON

Aku tengah belaja cara nak pakai Google Web Toolkit sendiri lepas Jimin tunjuk kat aku projek dia yang pakai GWT ni. Maklumat lanjut pasal GWT ni boleh rujuk kat sini.

http://code.google.com/webtoolkit/
http://extjs.com
http://www.gwt-ext.com
http://code.google.com/p/cypal-studio/


Masa aku try, aku berdepan dengan satu masalah. Macam mana nak buat remote paging & sort remotely pakai JSON. Dekat sehari aku try baru berjaya. Masa aku deploy error ada popup message Error:Expected";". Rupanya, GWT ni dia pakai Callback untuk JSON dia.

online demo kat sini
http://www.gwt-ext.com/demo/#remotePagingGrid

Full URL yang dipanggil oleh GWT setiap kali ke page seterusnya adalah seperti di bawah:
http://extjs.com/forum/topics-browse-remote.php?start=25&limit=25&sort=lastpost&dir=DESC&_dc=1203168761468&callback=stcCallback1002

Kalau dalam PHP kena buat macama ni.

$arr = array('totalCount'=>"4",'topics'=>$data);
$jsonstr= json_encode($arr);
print $_GET['callback']."(".$jsonstr.");";
?>





0

AES Random IV

Sebenarnya lama dah aku nak try buat random IV untuk Rjindael Encryption ni. Actually Jimin pernah tunjuk kat aku tapi tu dah setahun yang lepas rasanya. Mostly, sample kat internet dia buat ambik dari Hash (SHA atau MD5) dari salt. 32 byte pakai untuk key , 16 byte pakai untuk IV.

Semalam aku sempat try sambil2 aku tolong staf aku buat secure config.

Apa kejadahnya IV ni?

IV ni sebenarnya adalah Initiallized Vector. IV ni akan menentukan output encryption. kalau pakai statik IV, password yang sama dan data yang sama, hasil output akan konsisten je setiap kali encrypt. Kalau pakai random IV ni, password sama dan data yang sama, hasil outputnya akan berbeza setiap kali encrypt. Jadi, ini menjadikan ia lebih susah untuk dihack(aku rasala). Tambah2 lagi kalau digunakan dalam watermarking atau steganography.

Nak cerita lebih2 pun payah, takut x paham pulak. aku letak code dia kat sini. Korang try la sendiri kalau nak la. X nak sudah..... hahahhahah...


Imports System.Security.Cryptography
Imports System.IO

Public Class clsAESJCE
Public Shared Function Encrypt(ByVal data() As Byte, ByVal key As String) As Byte()
Dim ms As New MemoryStream
Dim AES As New System.Security.Cryptography.RijndaelManaged
Dim SHA As New SHA512Managed

Dim keybyte() As Byte = System.Text.ASCIIEncoding.ASCII.GetBytes(key.ToCharArray)
Dim HashByte() As Byte = SHA.ComputeHash(keybyte)

Dim keys(31) As Byte
Dim IV(15) As Byte

System.Array.Copy(HashByte, 0, keys, 0, 32)
'System.Array.Copy(HashByte, 32, IV, 0, 16)

AES.KeySize = 256
'AES.BlockSize = 256
AES.Mode = CipherMode.CBC
AES.Padding = PaddingMode.PKCS7
AES.GenerateIV()

Dim newdata() As Byte
Try
Dim objCryptoStream As CryptoStream
objCryptoStream = New CryptoStream(ms, AES.CreateEncryptor(keys, IV), CryptoStreamMode.Write)
objCryptoStream.Write(data, 0, data.Length)
objCryptoStream.FlushFinalBlock()

newdata = ms.ToArray()
objCryptoStream.Close()
ms.Close()
Catch ex As Exception

End Try

Return newdata
End Function


Public Shared Function Decrypt(ByVal data() As Byte, ByVal key As String) As Byte()

Dim ms As New MemoryStream(data)
Dim AES As New System.Security.Cryptography.RijndaelManaged
Dim SHA As New SHA512Managed

Dim keybyte() As Byte = System.Text.ASCIIEncoding.ASCII.GetBytes(key.ToCharArray)
Dim HashByte() As Byte = SHA.ComputeHash(keybyte)

Dim keys(31) As Byte
Dim IV(15) As Byte

System.Array.Copy(HashByte, 0, keys, 0, 32)
'System.Array.Copy(HashByte, 32, IV, 0, 16)

AES.KeySize = 256
'AES.BlockSize = 256
AES.Mode = CipherMode.CBC
AES.Padding = PaddingMode.PKCS7
AES.GenerateIV()

Dim newdata(data.Length - 1) As Byte
Dim iRead As Integer = -1
Try
Dim objCryptoStream As CryptoStream
objCryptoStream = New CryptoStream(ms, AES.CreateDecryptor(keys, IV), CryptoStreamMode.Read)

iRead = objCryptoStream.Read(newdata, 0, newdata.Length)

objCryptoStream.FlushFinalBlock()
objCryptoStream.Close()
ms.Close()
Catch ex As Exception

End Try
ReDim data(iRead - 1)
System.Array.Copy(newdata, 0, data, 0, iRead)
Return data
End Function
End Class
0

QR Code


Masa aku tengah carik2 paper on Wavelet. Mojette Transform & watermarking aku terbaca pasal QR Code. Actually dia lebih kurang macam project Optar (lihat post aku sebelum ni).

Actually QR Code ni adalah 2D barcode. Dicipta oleh Denso Wave Incorporated dan banyak digunakan dalam industri di seluruh dunia. Lebihnya QR Code ni dia laju, kapasiti besar dan saiznya yang lebih kecil berbanding dengan teknik barcode yang lain.

Aku tengah test dengan beberapa keadaan untuk test ketahanan & charateristic QR Code ni. Harap2 aku boleh implement dalam projek watermarking aku nanti.

Nak tahu lebih lanjut baca kat sini :
http://code.google.com/p/zxing/ (Open Source Java Project)
http://www.denso-wave.com/qrcode/qrgene1-e.html (Denso Wave Inc.)
http://www.codeproject.com/KB/cs/qrcode.aspx (Open Source C# project)
http://en.wikipedia.org/wiki/QR_Code
1

Covariance matrix

Prof Christian Bharat, dari Antropolis,Nice,France datang buat lawatan kerja kat opis aku. Prof Marzuki mintak dia consult researchers kat opis aku (CAIRO) on projek Kenalkayu.

Aku try nak buat program untuk kurangkan features untuk training database kenalkayu (ni actually hasil kajian Prof Christian tu la). Nak buat benda ni kena pakai matrix. Tiba-tiba aku check x de la pulak function Covariance dalam library matrix tu. Ahh... sudah. Jenus nak kena carik pulak. Dalam matlab satu baris je Cov(M).

Jadi aku pun berhempas pulas la dengan Due(email glamor dia =MrUTM) nak buat benda ni. Akhirnya berjaya jugak.Ni aku pastekan code dalam VB.NET yang aku buat.

Private Function Covariance(ByVal M As CSML.Matrix, Optional ByVal N As Integer = 0)
Dim iRow As Integer = M.Size(0)
Dim iCol As Integer = M.Size(1)

Dim i, j As Integer
'Console.WriteLine("Mean")
'Dim MeanMat As New CSML.Matrix(Mean)
'Console.WriteLine(MeanMat.ToString)
Dim MeanMat As CSML.Matrix = Mean(M)
Me.PrintMatrixSize("Covariance Mean=", MeanMat)
Me.PrintMatrix("Covariance Mean=", MeanMat)

Dim A As New CSML.Matrix
For i = 1 To iRow
Dim B As CSML.Matrix = M.Row(i) - MeanMat.Row(1)
A.InsertRow(B, i)
Next
'Console.WriteLine(A.ToString)

Dim AT As CSML.Matrix = A.Transpose
Dim covMat As CSML.Matrix = AT * A

Dim divider As Integer = iRow - 1
If N = 1 Then
divider = iRow
End If

covMat = covMat / divider
'Console.WriteLine(covMat.ToString)
Return covMat
End Function


Library matrix(C#) boleh download kat sini :
http://www.codeproject.com/KB/cs/CSML.aspx

References :
http://en.wikipedia.org/wiki/Covariance_matrix


0

Dynamic Pattern Recognition : Temporal Planification of Classification Tools eFISH : Recognition of Fish Freshness

Hari ni Prof. Pierre Loonis dari Institut Sup´erieur de l’Automobile et des Transports - ISA, Universit ´e de Bourgogne datang bagi Talk sikit pasal Dynamic Pattern Recognition. Dia buat satu sistem untuk dapatkan tahap kesegaran ikan di pasar La Rochelle. 7 tahun dia buat research ni. Dia pakai HMM (Hidden Markov Model) + Fuzzy Petri Net. Menarik juga idea dia.

Dia tinggalkan presentation dalam PC aku. Aku masukkan dalam blog ni. Kalau nak cari ada dalam blog.

Kalau nak tengok presentation di ada kat sini,
http://sites.google.com/site/peyotest/file-c/utm-05nov2009.pdf?attredirects=0
0

Twibright Optar

Jimin bagitau aku pasal projek Optar untuk OPTical ARchive. Menarik jugak benda ni boleh aku implement dalam watermarking. Source semua boleh download. Kalau ada masa aku nak port code dia ni ke C#. Senang aku nak pakai nanti.

http://ronja.twibright.com/optar/
0

LIFO Alarm Processing

Sekarang aku tengah buat alarm processing untuk support LIFO data transaction. Ini bermakna alarm akan direkodkan tanpa mengira masa dihantar. Jadi setiap kali data dihantar ke server, kita perlu memproses dan membandingkan data yang terima dengan alarm yang telah ada di dalam database.

Boleh tahan jugak memikirkannya. Tapi aku dah jumpa caranya. Nanti aku update post ni nanti dengan cara-cara aku buat.

Seminggu kemudian ....

aku dah siap buat LIFO alarm processing ni.

Katakan kita ada table alarm yang mempunyai field seperti berikut :
  • alarmid (auto increment)
  • alarmcode
  • alamrmdatetime
  • rtuid
  • alarmofftime
Processing flownya macam ni:
Kena ambil 1 alarm sebelum dan 1 selepas masa data diterima.

























































Sebelum Selepas Offtime=Set? Current=Alarm? Result
X X X 1 Create new alarm
X 1 X 1 Update alarm selepas  alarmtime=current
X 1 1 1 Update alarm selepas  alarmtime=current
1 X X X Update alarm sebelum alarmtime=current
1 X 1 X Update alarm sebelum current >offtime, create new alarm
1 1 1 X Update alarm sebelum offtime = current jika current <
offtime
1 1 1 1 Update alarm selepas  alarmtime=current
1

MySQL multi keywords search with priority

Ader org tanya aku pasal nak buat carian nama berdasarkan lebih dari satu keyword dan nak result tu disusun mengikut priority carian tersebut.

kata kan mencari nama manaf osman

nama yang akan keluar :

manaf bin osman
manaf abdul osman
manaf gazali osman
manaf hashim osman
abdul manaf
daud manaf
osman manf

Jadi aku try la buat satu query untuk sort carian tu. Idea dia,

1. Carik location carian tu berlaku untuk setiap keyword.
2. Kalau result location dia 0 (x jumpa), kene jadikan value dia paling tinggi.
3. Left pad kan result dengan kosong di hadapan, max aku pakai 7 digit
4. CONCAT semua result carian.
5. CAST result yang dah di CONCAT kepada nilai integer.
6. Susun mengikut hasil pada no 5.

Ni contoh query yang aku dah buat.

SELECT * FROM (
SELECT CAST(CONCAT(LPAD(BBPos1,7,'0'),LPAD(BBPos2,7,'0')) as UNSIGNED) as Position,CC.* FROM (
SELECT IF(Pos1=0,999999,Pos1) as BBPos1,IF(Pos2=0,999999,Pos2) as BBPos2,BB.* FROM (
SELECT LOCATE('mohd',namapenuh) as Pos1,LOCATE('HJ',namapenuh) as Pos2,AA.* FROM (
SELECT * FROM ahli WHERE namapenuh LIKE '%mohd%'
UNION
SELECT * FROM ahli WHERE namapenuh LIKE '%HJ%'
) as AA
) as BB
) as CC
) as DD ORDER BY Position,namapenuh

Ni kira math dan logik kena power gak la. Macam ninja.

Nin.. Nin..
Hemo... Hemo..
0

PHP Web Service, .NET Remote MySQL Dataset

Projek open source aku yang pertama kat google code.
Kebanyakkan web hosting tak membenarkan connection MySQL dari luar untuk dasar keselamatan. Biasanya kalau nak manage ke pakai phpMyAdmin. Tapi kalau database tu dah besar, nak dump data macam lama gila, tambah lagi dengan internet yang slow.

So, aku create la web service pakai PHP dan return data dalam bentuk .NET dataset untuk mudahkan aku process data. Harap projek ni berguna jugak untuk org lain.

Nin...nin..

http://code.google.com/p/phpremotemysqldataset/downloads/list
0

SQLite for ADO.NET 2.0

Dalam aku tengah rilek-rilek aku teringat nak carik library untuk develop system PDA guna Sqlite sebagai database. Sebelum ni aku dah guna Sqlite ni untuk desktop application. Kira Ok jugak SQlite ni. Bagus untuk small embbed database dan boleh digunakan dalam CD. Library yang ni ader include sekali binary untuk Compact Framework.

Ni link untuk ke website dia.
http://sourceforge.net/project/showfiles.php?group_id=132486
0

First Post

Tujuan aku buat blog ni sebagai catatan berkaitan kerja aku dalam programming. Mungkin org lain pun boleh dapat manfaatnya.
 
Copyright © peyotest