August 2009 - Posts
Dahulu,
perjuangan memasuki dunia keteknikinformatikaan dimulai dengan menggunakan bahasa C dan C++. Hal yang
masih menjadi kesulitan terbesar saya- bahkan hingga saat ini- adalah
penggunaan pointer ,variabel yang menunjuk ke alamat memori.
Di tingkat 2, saya mulai berdamai
dengan kesulitan memrogram, dan .NET pun merasuk dalam kehidupan
pemrograman, memberikan banyak kemudahan dan kelas-kelas dasar untuk
digunakan. Ya,itulah framework, sekumpulan library yang membentuk
kerangka program yang mau kita tulis. Zaman sekarang, jika ingin
membuat aplikasi, sebaiknya dimulai dengan eksplorasi tersedia atau
tidaknya framework yang mendukung pembuatan aplikasi tersebut. Tidak
terbatas hanya .NET, berlaku untuk semua bahasa. Jika sudah terdapat
framework, tentu pekerjaan kita terbantu seperti pepatah yg banyak
bilang “Don’t reinvent the wheel …” .
Nah, C# sejak setahun terakhir memang
menjadi pilihan utama saya dalam pengerjaan tugas ataupun proyek yang
kebetulan mampir. C# sangat apik, menyembunyikan keseluruhan manajemen
memori dengan hadirnya garbage collector dan reference. Akan
tetapi,untuk membuat suatu bahasa cukup powerful terkadang pada
sebagian kasus kita butuh untuk mengakses memori secara langsung,
itulah yang dimaksud dengan unsafe code- Kode yang tidak aman.
Unsafe Code
Pada dasarnya, sebagaian besar pemrograman pada .NET tidak membutuhkan unsafe code, kecuali untuk hal-hal sebagai berikut :
- Aplikasi real-time, untuk meningkatkan performa aplikasi
- Fungsi eksternal, dalam non-.net DLL beberapa fungsi memerlukan pointer sebagai parameter, seperti WinAPI yang ditulis dalam C
- Debugging, terkadang dibutuhkan inspeksi terhadap isi memori pada saat debugging.
Di situs ini (http://msdn.microsoft.com/en-us/library/aa288474(VS.71).aspx)
ditambahkan bahwa penggunaan unsafe code terutama untuk masalah yang
berkenaan dengan pengaksesan struktur pada storage, dan advance COM.
Peringatannya adalah, kode yang tidak aman ini tidak dapat dijalankan
pada lingkungan yang tidak terpercaya (untrusted environment), misalnya
internet.
Berikut keuntungan dan kekurangan unsafe code yang saya terjemahkan dari (http://www.codersource.net/csharp_unsafe_code.html)
Keuntungan Unsafe Code
- Performansi dan fleksibiltas, pengaksesan data dan manipulasinya dapat dikerjakan dengan lebih efisien
- Kompatibilitas, terutama dengan native winApi.
- Pengalamatan memori, tidak mungkin mengetahui alamat memori suatu data tanpa menggunakan pointer
Kekurangannya
- Sintaks yang cukup kompleks
- Sulit digunakan, dan mesti hati-hati karena bisa mengakibatkan
overwriting, stack oveflow, access memory yang kosong dan overwrite
informasi yang dbuuthkan .net runtime.
- Kode lebih susah di debub, kesalahan kecil pada penggunaan pointer,
membuat aplikasi bisa crash secara random, tidak terprediksi dan sulit
diproduksi lagi kesalahannya
- Pengaturan boleh tidaknya unsafe code di jalankan pada mesin yang berbeda
Salah satu penggunaan yang memerlukan unsafe code ketimbang managed code adalah pada field image processing.
Sebelum ini, saya sedang mengerjakan tugas yang berkaitan dengan
pengaksesan pixel demi pixel menggunakan kelas Bitmap yang disediakan
.NET. Memang tergolong cukup mudah, telah tersedia method setPixel dan
getPixel, kita hanya perlu menggunakannya. Akan tetapi, untuk kasus
ukuran file yang begitu besar, terkadang failed dan waktu eksekusinya
cukup lama. Lalu pada beberapa forum ada yang menyarankan penggunaan
unsafe code, dimana Bitmap di lock di dalam memori, dan kita mengakses
pixel per pixel ke alamat nya langsung di memori. Alhasil, ternyata
memang benar, algoritmanya berjalan lebih cepat dan hingga saat ini
masih selalu berhasil untuk ukuran file yang besar.
Penggunaan unsafe code ada beberapa cara, misalnya mendeklarasi kan keseluruhan kelas sebagai unsafe
Unsafe class ClassX
{
//Use pointer here
}
Atau pada bagian properti saja misalnya
class ClassX
{
Unsafe int* ptr;
Unsafe void MyMethod()
{
//use pointer here
}
}
Untuk penggunaan unsafe local variabel pada method dapat menggunakan block unsafe seperti
static void Main()
{
//can’t use pointers here
unsafe
{
//you can declare and use pointer here
}
//can’t use pointers here
}
Kemudian hal yang saya temukan lagi
adalah perbedaan representasi nilai RGB pada Windows. Secara berurutan
windows menyimpan RGB menjadi BGR untuk satu pixel data di memori. Hal
ini saya sadari ketika menggambar histogram citra yang mengakibatkan
terbaliknya nilai R dan B akibat representasi yang sebelumnya tidak
saya ketahui ini.
Pada postingan terdahulu saya sudah membahas topik makalah yang akan dibahas untuk kuliah kripto yang saya ambil dan dapat dilihat disini.
Hasil eksperimennya sudah selesai dan dapat dilihat disini
Kesimpulan yang saya peroleh adalah, berkas Xaml dapat dijadikan cover-object untuk penyembunyian pesan (steganografi). Cara yang dilakukan bukanlah modifikasi pada bit2 file melainkan melakukan manipulasi urutan atribut yang terdapat pada berkas xaml. Seperti kita ketahui, XAML sebagai berkas terstruktur,turunan dari XML memiliki banyak sekali atribut pada tag-tagnya. Hal ini memungkinkan karena setiap tag pada xaml berasosiasi dengan kelas pada CLR.Pada tag yang memiliki minimal dua atribut, kita dapat menukar posisinya, misalnya
<Image Souce="test.jpg" Height="2" Width="4"></Image>
menjadi
<Image Souce="test.jpg" Width="4" Height="2"></Image>
Pertukaran 1 atribut berasosiasi dengan penyembunyian 1 bit data. Memang, tidak dapat digunakan untuk keperluan praktis, karena ukuran file yang bisa disembunyikan sangat tergantung pada jumlah pasangan atribut yang ada pada file XAML itu. Tapi, untuk kepentingan teori, pada dasarnya bisa dilakukan dan memenuhi konsep-konsep stegano untuk kriteria tidak dapat di deteksi, tidak mengubah file, dan dapat dikembalikan. Teknik perubahan posisi atribut bisa juga diterapkan kepada seluruh berkas yang formatnya diturunkan dari XML.
Haha,,,tenang-tenang,judul nya bukan bermaksud self-claimed, justru saya juga sedang mempertanyakan hal tersebut. Pada postingan kali ini saya hendak membagi kisah perjuangan saya bersama rekan-rekan tim dalam mengikuti lomba perancangan game yang diadakan salah satu universitas di Bandung. Alhamdulillah, untuk penjurian tahap 1 yaitu konsep game dari proposal, tim kami berhasil maju dan dipersilahkan untuk mengajukan prototipe game tersebut.
Lalu, apakah Veda itu ? Jadi, nama game ini kami ambil dari bahasa sanskerta yaitu Veda, artinya khasanah pengetahuan. Tema yang diangkat penyelenggara sendiri adalah game yang mampu meningkatkan wawasan user terhadap kebudayaan nasional Indonesia. Beranjak dari tema tersebut kami menggodok ide-ide permainan yang sebenarnya sederhana, sudah ada tapi dikemas dalam konsep fresh menggunakan teknologi Multipoint besutan Microsoft. Selanjutnya kami berharap konsep game ini bener2 dapat memperkaya atau mengenalkan user, khususnya anak2 dengan kebudayaan Indonesia sesuai dengan nama yang dibebankan pada nya, yaitu Veda.
Nantinya, Veda direncanakan terdiri dari 6 level, dimana masing2 level pemain akan memainkan permainan sederhana, seperti penyusunan kata, puzzle, cepat tepat dan lain-lain yang dapat dimainkan secara simultan dengan maksimal pemain 6 orang pada saat bersamaan. Setiap level polanya bisa kompetitif,kolaboratif ataupun gabungan keduanya. Lebih lengkapnya level-level tersebut, beserta permainan dan tujuan yang hendak dicapai :
-
SusunKata,dengan tujuan pemain mengenal dan mengetahui berbagai peribahasa Indonesia dan maknanya.
-
PasangAcak, dengan tujuan pemain mengenal dan mengetahui berbagai nama pahlawan, rumah adat, alat musik dan senjata tradisional
-
CepatTepat,dengan tujuan pemain mengenal dan mengetahui pengetahuan umum terkait budaya, geografis dan sebagainya
-
CeritaRakyat, dengan tujuan pemain mengenal ceritarakyat,mitologi dan legenda yang ada di Indonesia
-
BangunGambar, dengan tujuan pemain mengenal pakaian adat, gambar peta, rumah adat alat musik dan sebagainya
-
PetaButa, dengan tujuan pemain mengenal aspek geografis dari asal senjata tradisional,rumah adat, flora fauna dan sebagainya.
Untuk pemilihan karakter, kami memilih 10 fauna khas daerah (anoa,badak jawa, beruang madu, bekantan, dll) propinsi2 yang ada di Indonesia yang diremake menjadi versi kartun. Karakter akan menjadi pengganti pointer masing2 mouse yang digunakan user pada permainan. Harus diakui, level 3 dan 6 sedikit mengadaptasi samples yang disediakan dari multipoint SDK.

Sebelum memulai permainan, para pemain diperkenankan untuk memilih karakter yang dia inginkan dan mengetikkan namanya untuk digunakan sebagai identifikasi pada permainan.

Kira2 layout utama dari masing-masing level akan menjadi seperti ini :




Beberapa kode yang mendukung konsep game sudah pernah di posting disini dan disini. Mohon doa dari para .NET-ers sekalian :p
Selama ini nggak pernah kepikiran saya bakal menyentuh benda-bendi Microsoft yang seperti ini. BizTalk, middleware server system yang berguna untuk integrasi aplikasi-aplikasi, terutama LOB application yang sudah ada diorganisasi. Meski belum terlalu mengerti, kenapa harus pake BizTalk, kenapa gak modif aja aplikasi yang sudah ada biar bisa saling interface, tapi kalo sampe Microsoft bikin benda beginian tentu ada alasan khusus. Sedikit membaca, kegunaan BizTalk adalah untuk orkestrasi message. Nama operasi nya aja udah keren gitu => orkestrasi, berasa ada konser :p .
Nah, jadi dalam deskripsi kerja tugas KP saya, saya dan peserta KP lainnya include dalam tim yang bertugas mengintegrasikan aplikasi web internal dengan server project yang dimiliki perusahaan via BizTalk. Sudah terdapat aplikasi web, yang digunakan secara internal oleh organisasi. Aplikasi web sendiri dibangun dengan ASP.NET. Server project nya berupa MOPS, Microsoft Office Project Server kali ya ? cmiiw,,, sbg storage data-data project yang sedang dikerjakan perusahaan. Nah salah satu kelemahan sistem yang ada sekarang, pada penggunaan aplikasi web internal, terdapat aksi yang dilakukan manual oleh aktor antara, dimana ia harus menerima notifikasi berdasarkan operasi yang ada di web internal dan melakukan sinkronisasi agar data pada web internal dan data pada MOPS itu sejalan. Keduanya tidak share database yang sama sehingga butuh sinkronisasi hal semacam itu.

Jadi besar kemungkinan solusi yang digunakan adalah aplikasi web internal akan memproduce file (xml,flat file) yang menjadi inputan BizTalk untuk diproses lebih lanjut. Nah,BizTalk sendiri yang akan memanipulasi data itu dan menginput nya ke MOPS. Proses input ke MOPS juga harus hati-hati karena databasenya tidak bisa langsung diakses dengan query. Untuk keamanan, MOPS sudah menyediakan PSI (Project Server Interface), semacam API yang dapat kita gunakan untuk manipulasi terhdap database. Akhirnya penggunaan PSI menjadi hal yang penting sementara tutorialnya masih sedikit, bermodal dokumentasi resmi saja tanpa contoh2 di jagad maya kadang tidak cukup bagi mahasiswa cupu seperti saya :p .
Secara konsep sih,harusnya nggak begitu sulit kali ya. Sesuai skema, dari web internal, keluarin xml file,diproses BizTalk jadi deh file project di MOPS. Namun ternyata si BizTalk ini benda yang sulit juga konfigurasinya. Lebih banyak configurenya daripada kodingnya deh. Untuk orkestrasinya sendiri, BizTalk lebih memanfaatkan desainer tool dibanding coding, meski ada juga sih codingya. Selama ini saya masih drag n drop style saja, mencoba tutorial2 BizTalk yang ada dari situsnya. Tapi ada aja deh masalah selama bikin proof of conceptnya,,ya itu tadi karena ini aplikasi yang memanfaatkan aplikasi2 yang sudah ada, tidak terpusat pada satu mesin dan mahal (saya bertaruh BizTalk pasti mahal deh :p). Mungkin karena saya tidak terbiasa juga oprek2 aplikasi yang distributed, selama ini yg paling yang standalone kalau gak web begitu. Pengalaman yang seru kayaknya mah