Education is an ornament in prosperity and a refuge in adversity.
-Aristotle- Opportunity is missed by most people because it is dressed in overalls and looks like work.
-Thomas A. Edison- Dengan mengutip kata kata dari Aristoteles seorang filsuf yunani kuno yang pengetahuan dan filosofinya masih digunakan hingga saat ini, Pendidikan adalah kebanggan pada saat kita kaya dan juga perlindungan saat kita sedang miskin. Pada jaman yunani kuno pun aristoteles sudah menyadari mengenai pentingnya pendidikan untuk setiap individu. Pendidikan dapat meningkatkan status kita dalam masyarakat dan juga sekaligus berfungsi sebagai pegangan kita pada saat kita membutuhkannya untuk melakukan suatu pekerjaan atau mengambil suatu kesempatan. Beberapa abad kemudian, Thomas Alfa Edison berbicara mengenai kesempatan, kesempatan yang sering disiasiakan oleh individu karena datang dalam bentuk pekerjaan. Padahal pekerjaan tersebut merupakan jalan menuju sebuah kehidupan yang lebih baik lagi.
The right man for the right job dan The right job for the right man, nampaknya di indonesia ini amat sulit untuk mendapatkan hal tersebut, tidak jarang seseorang terus menerus berganti pekerjaan untuk mendapatkan pekerjaan impiannya, dan tidak jarang juga sebuah perusahaan mengganti pegawainya untuk mendapatkan pegawai yang cocok. Jika kedua hal diatas yaitu perusahaan dan pegawai memang terbagi secara merata, mungkin hal tersebut tidak akan menjadi sebuah masalah. Namun untuk daerah yang tidak memiliki baik banyak perusahaan maupun banyak tenaga kerja yang tepat, mungkin akan menjadi masalah. Saat ini pendidikan adalah barang yang langka di daerah, fasilitas pendidikan seperti gedung kuliah, tempat penelitian dan sarana lainnya jarang ada di daerah seperti kalimantan, sulawesi, maluku dan irian jaya.hal tersebut mendorong para mahasiswanya untuk pergi merantau ke pulau jawa, bali ataupun sumatra hanya sekedar untuk mendapatkan pendidikan. Dan ironisnya saat mereka selesai mendapatkan pendidikan, maka pilihan yang mereka ambil adalah untuk tinggal diperantauan tersebut dan bekerja disana, hingga akhirnya menetap dan melupakan kampung halamannya. Saat hal tersebut terjadi maka daerah akan kehilangan putra putri terbaiknya yang pada awalnya pergi merantau untuk mencari ilmu. Jika kita amati dengan lebih dalam, hal tersebut dikarenakan daerah tidak memiliki tawaran pekerjaan yang cukup dibandingkan dengan perantauan, dan untuk memulai sebuah usaha di daerah dengan berbasiskan pengetahuan yang didapat akan sangat menyeramkan untuk dilakukan. Oleh karena itu banyak individu yang memilih untuk play it save dengan tinggal di daerah perkotaan.
Untuk mencegah masalah ini terus terjadi secara berulang ulang, dan menyebabkan gap yang semakin besar saja antara kota dan desa/daerah, kami memiliki ide untuk membuat sebuah sistem yang berbasiskan internet yang dapat memberikan kesempatan pendidikan untuk bidang tertentu serta pekerjaan yang berkaitan dengan bidang tersebut. Dengan begitu para putra putri daerah tidak perlu jauh jauh merantau ke kota untuk belajar dan mencari pekerjaan. System yang kami tawarkan ini akan memiliki 5 pilar utama, yaitu :
Berbagai topik ilmu ditawarkan disini, mungkin kami akan mulai dengan IT, dan diperluas ke elektronik, administrasi dan bidang ilmu lainnya. Materi dari masing masing topik akan dikemas kecil kecil sehingga akan dapat dipelajari dalam waktu 1 – 2 jam saja setiap topiknya, diikuti dengan tugas dan latihan sehingga konsep Learning By Doing dapat diterapkan sehingga pengguna system dapat lebih mengerti mengenai apa yang mereka pelajari, kedepannya mungkin penyampaian ilmu melalui multimedia akan diadakan pada saat yang tepat.
Saat seorang individu sudah menguasai beberapa topik tertentu, ia dapat mengambil tantangan selanjutnya, yaitu benchmarking untuk melihat seberapa jauh ia memahami tentang topik topik tersebut dan seberapa baik ia dalam menerapkan topik tersebut. Benchmarking ini bukanlah ujian, melainkan kesempatan untuk mengukur kemampuan penguasaan materi sebuah topik secara teoritis dan praktis.
Ilmu tanpa tempat untuk mengaplikasikannya adalah sesuatu yang mubazir, disini kami memiliki visi untuk membuat semacam bursa kerja untuk project2 kecil, menengah hingga besar untuk dikerjakan oleh mereka yang menuntut ilmu di system ini. Benchmarking bisa menjadi salah satu referensi dari buyer untuk memilih orang yang tepat untuk pekerjaan ini, dan karena buyer perlu untuk mendefinisikan requirement terlebih dahulu, maka para programmer bisa memilih milih pekerjaan yang tepat untuknya. Disini kami berusaha untuk mencapai keadaan “The right man for the right job, dan the right job for the right man”.
Jika penggunan system ini bingung, ia dapat bertanya baik kepada rekannya maupun pembina system ini untuk menentukan baik study coursenya, topik topik yang perlu dipelajarinya, topik mana yang sedang populer, dll maupun jika ia memiliki sebuah pekerjaan yang ingin ditawarkannya via system, ia dapat berkonsultasi mengenai kebutuhan requirement untuk mengerjakannya sehingga tidak terjadi kesalahan pemilihan orang untuk mengerjakan pekerjaan tersebut.
Virtual workspace, adalah sebuah konsep yang kami tawarkan agar para pengguna system ini dapat dengan nyaman bekerja sama dengan sebuah virtual workspace sehingga masalah jarak dan waktu tidak lagi menjadi masalah untuk mereka. Fasilitas seperti group storage area, group CVS dan group Document management System dapat menjadi pilihan baru bagi mereka yang ingin bekerja di rumah di kampung halamannya. Bagaimana jika sistem ini benar benar diterapkan, apakah benar sistem ini dapat mengubah gaya hidup anda, coba bayangkan seperti ini, sebagai seorang pekerja & pelajar, bayangkan jika berikut ini adalah jadwal perkerjaan anda sehari hari :
- Anda bangun pagi diikuti dengan mencek email dan sistem ini
- Wah ada pekerjaan baru yang ditawarkan dan anda pun mulai memasukkan bid untuk pekerjaan ini sambil mengisi forum
- Kemudian anda mulai mandi dan sarapan, setelah itu mulailah anda mempelajari bahan untuk sebuah topik.
- Siang tiba,.. dan anda merasa siap untuk melakukan benchmarking dan anda mengambil benchmarking tersebut dalam 1 jam… selesailah benchmarking.
- Wuih, udah jam 3 mulai jenuh nih…. Keluarlah anda untuk hangout dengan teman2 anda di kedai kopi (Starbucks could be fun)
- Setelah 2 – 3 jam anda kembali lagi ke meja kerja anda dan anda melihat hasil benchmarking sudah keluar dan anda passed, dan bersamaan dengan itu…. Ternyata ada yang menerima bid anda.
- Berikutnya anda mengambil detail dari pekerjaan tersebut dan mulai mengerjakan project tersebut
- Dan begitu hari malam, anda tertidur dengan tenang di kampung halaman anda, setelah makan malam bersama keluarga.
- Hari hari berikutnya… setelah proyek selesai, anda memasukkan bid yang lebih besar lagi karena hasil benchmark anda sudah lebih banyak lagi dan hari2 indah tersebut terulang kembali
Sebagai seorang buyer / manajer, bayangkan jika ini adalah rutinitas anda sehari hari
- Pagi hari anda bangun dan pergi ke kantor
- Sampai di kantor anda melihat dokumen dari project yang akan dijalankan, dan kemudian membacanya
- Selesai membaca anda bingung… wah ini ada teknologi baru(misal WWF di .NET3.0) dan saya ga punya yang bisa ngerjain, saya ga punya pengetahuan apa2 soal ini
- Lalu anda beralih untuk masuk ke sistem kami, dan mulai menanyakan di forum konsultasi mengenai project anda. Tentu saja anda dapat membuat konsultasi ini private, tetapi anda memutuskan untuk mensharenya dengan yang lain
- Tak lama berselang… muncul hasil konsultasi dan ternyata terdapat beberapa point dari materi pengajaran yang diperlukan untuk dikuasai untuk mengerjakan project anda.
- Mulailah anda mem-post job di forum, dengan spesifikasi seperti yang diberikan seperti hasil konsultasi
- Dan pada akhir hari sebelum anda pulang, sudah terdapat 17 bid untuk pekerjaan ini, ada beberapa orang yang memenuhi spesifikasi dan ada juga yang tidak, anda memilih yang paling meyakinkan dan mempost spesifikasi pekerjaan
- Malamnya anda tidur nyeyak karena orang yang dipilih tersebut sudah dibenchmark dan keesokan harinya anda pergi kembali ke kantor
- Anda melihat bahwa dari orang yang anda pilih tersebut sudah mempost rencana pekerjaan beserta timelinenya
- Dan kemudian anda mengingat bahwa dulu anda pernah berpusing-pusing ria mencari orang dan mengajari orang baru dan anda pun tersenyum
Pendidikan merupakan basis utama dari seseorang untuk mendapatkan pekerjaan disini, dengan melakukan pembelajaran materi dan juga benchmarking, seorang user mendapatkan kepercayaan dari customer untuk melakukan sebuah pekerjaan, dengan melakukan bencmarking lebih banyak lagi, lebih banyak pula jenis pekerjaan yang dapat dilakukan. Seorang worker tidak perlu untuk seorang diri melakukan seluruh pembelajaran maupun pekerjaan, mereka dapat membentuk tim dalam sistem ini, bahkan sebuah tim tidak perlu berada di tempat yang sama untuk melakukan sebuah pekerjaan. Intinya sistem ini memfasilitasi worker dan buyer untuk mendapatkan the right job for the right man, dan the right man for the right job. Dengan menyediakan fasilitas benchmark dan learning serta consulting, anda akan mendapatkan sebuah sistem yang menyerupai keadaan di dunia nyata pada umumnya. Dan karena ini berupa dunia virtual, anda akan dapat mengatasi masalah jarak dan waktu.
Ide ini merupakan pengembangan dari ide PASAR yang pernah di post oleh reyza, Ide ini terinspirasi oleh masukan dari kawan2 sekalian yang diolah oleh saya & reyza, thanks guys.... masih ditunggu komen2nya :)
Pemrograman 3D adalah hal yang menarik, karena impian untuk bikin game, interactive system, sampai interactive animation bermula di 3D, tapi startnya .. sullllliiiiiit banget. Selain karena veteran2 3D banyak bermain di bidang OPEN GL, dan C++, C#.... sangat jarang sekali. Berikut saya akan coba share mengenai how to start programming Open GL dari yang sangat sederhana sekali.
Persiapan 1 : dll tambahan yang dibutuhkan
CsGL ( C# Open GL ) bisa di download di http://csgl.sourceforge.net
Setelah di download, dan di extract, jangan lupa untuk diinstall ( yang sebenarnya hanya memindahkan file csgl-native.dll ke windows system saja ) tapi ini adalah langkah yang penting, karena csgl-native.dll ini akan di reference oleh csgl.dll
Persiapan 2 : siap mental :P
Waktu pertama ngeliat codenya… saya sempat stress, selain ga biasa maen di dunia 3D, kodenya itu… struktural banget, ga ada OO nya.. ya jangan stress dulu la, kedepannya saya akan coba membimbing langkah demi langkah untuk membuat aplikasi open GL
Beginning OpenGL
Buat Project Windows Forms Application baru, lalu tambahkan reference ke CsGl.dll
Setelah itu, bukalah Form1.cs, tambahkan
using CsGl.OpenGL;
kemudian buatlah kelas baru yang akan mengimplementasikan openGL, misalkan nama kelasnya “MyGLView.cs”, tambahkan script berikut didalamnya
class MyGLView : OpenGLControl
{
/// <summary>
/// Di Method ini lah kita akan menggambar sesuatu
/// </summary>
public override void glDraw()
{
//Bersihkan dulu screen
GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
}
}
Lalu tambahkan MyGLView ke dalam Form1.cs dengan cara drag & drop dari toolbox, yup class yang baru saja dibuat akan diperlakukan layaknya usercontrol.
Dan coba dijalankan. Ya memang masih kosong, sabar ya……
Menggambar segitiga sederhana
Masih menggunakan solution yang tadi, kita akan mencoba untuk menggambar segitiga sederhana ( masih 2D, 3Dnya belum kelihatan )
Nah coba diganti lagi source code untuk method glDraw() dengan yang ini
public override void glDraw()
{
//Bersihkan dulu screen
GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
GL.glLoadIdentity();
//Menghitung ratio layar sehingga gambar dapat ditampilkan dengan tepat
double aspect_ratio = (double)this.Width / (double)this.Height;
GL.glMatrixMode(GL.GL_PROJECTION); // Select The Projection Matrix
GL.glLoadIdentity(); // Reset The Projection Matrix
GL.gluPerspective(45.0f, aspect_ratio, 0.1f, 100.0f);
// Pindahkan kursor ke titik -1.5f x dan -6.0fz
GL.glTranslatef(-1.5f, 0.0f, -6.0f);
// mulai menggambar segitiga
GL.glBegin(GL.GL_TRIANGLES);
GL.glVertex3f(0.0f, 1.0f, 0.0f);
GL.glVertex3f(-1.0f, -1.0f, 0.0f);
GL.glVertex3f(1.0f, -1.0f, 0.0f);
GL.glEnd();
}
Ya… mungkin ada banyak yang tidak anda mengerti mengenai syntax2 nya, sama … saya juga tidak banyak mengerti. Ini juga pertama kali saya menyentuh dunia 3D. Tapi tenang saja, akan ada tutorial berikutnya J
Btw… tolong jangan dipamerin dulu ke temen2, tunggu sampe bisa bikin minal animasi hehehe :p
Beberapa minggu yang lalu, temen kuliahku seorang dosen muda di Politeknik - ITB atau yang biasa beken dengan nama PolBan nge-request rekan2 mahasiswa S2 untuk sharing pengalaman mengenai apa yang biasa dikerjakan oleh kita2 (terutama yang kerja di software house) kepada mahasiswa2 Jurusan Teknik Komputer di PolBan. tapi baru kemarin2 ini sempet mempersiapkan bahan, akhirnya baru sabtu pagi inilah aku siap untuk share apa yang sudah pernah kukerjakan selama beberapa tahun ini.
Walaupun sekarang lagi gemar WWF, tp untuk pengenalan ke anak2 yang ga pernah nyentuh Visual studio dan ada juga yang ga pernah memprogram (anak anak tingkat 1) kayanya extrim banget deh WWF, jd kukenalin aja sama ASP.NET AJAX, ini salah satu extension dari .NET yang paling kugemari karena animasinya, dan kupikir mereka bakalan *** juga. setelah dibuat presentasinya siaplah aku untuk berangkat.
Nah pagi ini akhirnya berangkat juga lah ke PolBan, sempet nyasar ke setra duta sih, tp untung blom terlalu lost, dan setelah dengan perjuangan sampailah aku di PolBan, wuih kampusnya asik banget, kaya kampus UPI yang banyak tanaman , angin sepoi2 dan udaranya dingin (jam 9 an padahal, di tempat laen pasti udah panas). Temenku sudah nungguin di deket gerbang dan ga lama mulai lah masuk ke daerah jurusan teknik komputer, gedungnya sedikit tua, tp yakin banget aku kalo ruang kelasnya dipake tidur ( biasa aku sering tidur juga di 1201 ) Ga lama kemudian, sekitar jam 9 mulailah presentasiku
Presentasinya berjalan mulus, dimulai dari cara kerja web, AJAX, AJAX.NET kemudian disertai demo. wah mulailah mereka bisik2 "gampang ya", "lho cuma klik sana klik sini". setelah demo selesai, mulailah masuk ke sesi tanya jawab. Yang aktif bertanya adalah seorang dosen senior yang berkutat di bidang database, dia sangat tertarik dengan penerapan database di .NET dan minta didemokan cara untuk sekedar menampilkan data di .NET, wah padahal aku sudah lama ga menggunakan Visual Studio ( maklum kerjaan kantor make Borland C ) jadi ga bisa demoin lebih dari menampilkan database, padahal kalo ngeliat gridview in action mungkin mereka akan lebih tertarik.
Sudah ada pembicaraan lebih lanjut untuk mengadakan workshop bagi mahasiswa yang tertarik, tapi menurut para dosennya, mungkin sebaiknya menunggu mahasiswa yang meminta dan mengorganisir, ya ntar kalo diminta workshop dan ga siap modulnya, mungkin minjem aja dari yang uda pernah bikin, ada yang bisa dipinjem ga ya ? hehehe
Agaknya ini sesuatu yang semua orang sudah tau, tapi saya masukin lagi aja deh :D . Pembuatan Plug-in untuk sebuah aplikasi agar sebuah fitur dapat dijalankan on-the-fly pada saat aplikasi berjalan merupakan sebuah keunggulan bagi aplikasi tertentu, sebut saja winamp dengan visualization pluginsnya, dan windows media player dengan skin pluginsnya, fitur seperti ini tidak hanya terbatas pada tampilan, dan fungsi2 sederhana saja seperti untuk visualization dan skin, bahkan sebuah form dan class pun dapat di load secara on-the-fly di .NET dengan menggunakan fasilitas Loading Assembly yang terdapat pada System.Reflection.
Saya akan mencoba untuk membagi pengalaman saya bekerja dengan System.Reflection dalam dua bagian ,yang pertama adalah understanding dynamic loading dan dynamic loading class
Pada list kode kita terdapat metadata yang mendeskripsikan type, members dan references, dengan metadata inilah, sebuah class yang dibangun menggunakan VB.NET dapat berkomunikasi dengan baik dengan class yang dibangun dengan C#, karena pada dasarnya metadata ini adalah suatu hal yang sama baik untuk C#, VB.NET maupun J#. .NET Framework menyediakan run-time enviroment yang disebut Common Language Runtime (CLR) yang menjalankan kode dan menyediakan services. Saat membuat desktop application, biasanya kita membiarkan aplikasi yang melakukan loading metadata tersebut, namun terdapat situasi dimana metadata tersebut perlu untuk di load tidak pada saat melakukan loading.
Salah satu cara untuk melakukan hal tersebut adalah dengan membuat sebuah Dynamic Link Library (*.dll) yang terpisah dan kemudian dll tersebut di load oleh aplikasi pada saat runtime. Untuk melakukannya kita perlu untuk membuat sebuah “perjanjian” antara dll dan aplikasi, perjanjian tersebut tidak lain berupa sebuah interface class, interface ini harus berada baik pada dll, maupun pada aplikasi. Cara paling elegan untuk melakukannya adalah dengan membuat sebuah interface library (class library yang isinya interface).
Marilah kita mulai dengan melakukan dynamic loading methods terlebih dahulu. Yang akan dibuat disini adalah dll yang mengandung message (String) saja, message ini nanti akan diambil dan ditampilkan kelayar. Berikut adalah langkah langkah pembuatannya :
- Membuat SimpleInterface library (SimpleInterface.dll)
- Membuat SimpleDLL library (SimpleDLL.dll)
- Membuat SimpleApp
Berikut adalah listing untuk setiap kode beserta dengan penjelasannya, saat SimpleInterface selesai dibuat, jangan lupa untuk menambahkannya sebagai reference pada SimpleDLL & SimpleApp.
SimpleInterface.cs di project SimpleInterface.dll
using System;
namespace PluginInterface
{
public interface SimpleInterface
{
// Method GetMessage yang hanya berupa Getter saja
String GetMessage ();
}
}
SimpleDLL.cs di project SimpleDLL.dll
using System;
namespace SimpleDLL
{
// class SimpleDLL menginherit SimpleInterface
public class SimpleDLL : SimpleInterface.SimpleInterface
{
// Realisasi dari method Message di SimpleInterface dilakukan disini
public String GetMessage ()
{
return "Simple DLL, Have a Nice Day";
}
}
}
Form1.cs di SimpleApp – ringkasan bagian untuk menentukan apakah sebuah dll menginherit interface SimpleInterface
// lakukan loading dll yang dimaksud
Assembly assembly = Assembly.LoadFile(filename);
// iterate satu demi satu type yang terdapat pada dll
foreach (Type type in assembly.GetTypes())
{
// tampilkan typename
TextBoxResult.Text = "Type Name : " + type.ToString();
// mencari apakah type memiliki interface "SimpleInterface"
Type interfacetype =
Type.GetInterface("SimpleInterface.SimpleInterface");
// jike type tidak menginherit simple interface, maka null
if (interfacetype == null)
{
TextBoxResult.Text += "\n Error : Tidak ada type yang
menginherit Simple Interface";
}
else
{
TextBoxResult.Text += "\n Type dapat digunakan";
}
//bersih2
interfacetype = null;
}
Form1.cs di SimpleApp – ringkasan bagian untuk memanggil method GetMessage
// lakukan loading dll yang dimaksud
Assembly assembly = Assembly.LoadFile(filename);
// iterate satu demi satu type yang terdapat pada dll
foreach (Type type in assembly.GetTypes())
{
// Mengambil keterangan method info dari method "Message"
MethodInfo methodinfo = type.GetMethod("GetMessage");
// membuat instance class Simple DLL dalam bentuk Object
Object obj = Activator.CreateInstance(type);
// Memanggil Method Message dari obj
TextBoxResult.Text += "\n Result : " + methodinfo.Invoke(obj, null);
}
Setelah ini, untuk mengujinya, anda mungkin ingin menambahkan beberapa dll seperti simpleDLL dengan message yang berbeda. Tidak sulit khan ?
SimpleInterface.cs di project SimpleInterface.dll
using System;
namespace PluginInterface
{
public interface SimpleInterface
{
// Method GetMessage yang hanya berupa Getter saja
String GetMessage ();
}
}
SimpleDLL.cs di project SimpleDLL.dll
using System;
namespace SimpleDLL
{
// class SimpleDLL menginherit SimpleInterface
public class SimpleDLL : SimpleInterface.SimpleInterface
{
// Realisasi dari method Message di SimpleInterface dilakukan disini
public String GetMessage ()
{
return "Simple DLL, Have a Nice Day";
}
}
}
Form1.cs di SimpleApp – ringkasan bagian untuk menentukan apakah sebuah dll menginherit interface SimpleInterface
// lakukan loading dll yang dimaksud
Assembly assembly = Assembly.LoadFile(filename);
// iterate satu demi satu type yang terdapat pada dll
foreach (Type type in assembly.GetTypes())
{
// tampilkan typename
TextBoxResult.Text = "Type Name : " + type.ToString();
// mencari apakah type memiliki interface "SimpleInterface"
Type interfacetype =
Type.GetInterface("SimpleInterface.SimpleInterface");
// jike type tidak menginherit simple interface, maka null
if (interfacetype == null)
{
TextBoxResult.Text += "\n Error : Tidak ada type yang
menginherit Simple Interface";
}
else
{
TextBoxResult.Text += "\n Type dapat digunakan";
}
//bersih2
interfacetype = null;
}
Form1.cs di SimpleApp – ringkasan bagian untuk memanggil method GetMessage
// lakukan loading dll yang dimaksud
Assembly assembly = Assembly.LoadFile(filename);
// iterate satu demi satu type yang terdapat pada dll
foreach (Type type in assembly.GetTypes())
{
// Mengambil keterangan method info dari method "Message"
MethodInfo methodinfo = type.GetMethod("GetMessage");
// membuat instance class Simple DLL dalam bentuk Object
Object obj = Activator.CreateInstance(type);
// Memanggil Method Message dari obj
TextBoxResult.Text += "\n Result : " + methodinfo.Invoke(obj, null);
}
Setelah ini, untuk mengujinya, anda mungkin ingin menambahkan beberapa dll seperti simpleDLL dengan message yang berbeda. Tidak sulit khan ?
Btw..kalo ada yang pengen file projectnya, please japri aja ke saya dan informasikan juga anda menggunakan Visual Studio & .NET Framework versi berapa, agar tidak ada kesulitan saat ingin membukanya, nanti saya kirimkan via email
Pada hari sabtu malem, rencananya mau surfing, ngecek2 email sekalian kabar2 dari milis milis, udah sedia secangkir kopi ( sayang ga ada kue ) mulai lah nyalain komputer, ngaktifin Ym, dan buka mail.yahoo.com. setelah beberapa lama,... koq ga connect2 ya ? login gagal mulu lagi, dicoba di mail.yahoo sama aja, ga bisa login2... buset.....ternyata email account gw di hack dan buat nge restore password....harus make kartu kredit lagi. halah2..... akhirnya mulai bikin alamat baru deh jadi andrimirandi@yahoo.com
btw.. jika seandainya ada pesan2 di milis yang tidak berkenan mulai hari jumat ( mungkin mulai dari jumat kena dibajaknya ) mohon dimaafkan, karena itu bukan saya yang nulis. btw .. ada yang tau ga cara unsubscribe email yang lama ? yang andri_mirandi@yahoo.com tanpa melalui email tersebut ? account email yang di blog sih uda diganti jadi yang baru sama aku
When you`re doing a research on something, it is usual to spend lots of times in your labs, or even sometimes sleeps in labs. Wheter its good or not it depends on your campus point of views, but somewhere outthere in England there are a lab in which the students are recommended to live in it, the students are mainly study about smart home, enviroment, or art. Each of them live in a room inside the house which they called “Smart Home” while trying the topics which they researched.
I think the result of it will be great, since they were testing and created it and also living with it, that way, they know about the pro and cons of their own research , well of course they can also put their research in their friends room to ask for a feedback. Usually from a research to be used as a product took a long way of testing, and conforming to standards of health and safety, but the “Smart Home” enviroment accelarate the research into a product in a short time. It is one of the benefit of doing research in a smart home instead of laboratory, since we live with it any kind of problem could be taken care quicly
Here is the link to the smart home website : http://www.smarthome.duke.edu/
Actually this concept could be used for IT, we test, created, and living with the software that we made. But it rarely happens mostly because the software we make is not to be used by us. So I think the feedback by people who lives with the software we make is important, the faster the feed back came and taken care of, the better the software we made. I think A software which is build without a feedback by user will most likely vanished in a short time.
Its just a thought though
Pada .NET 2.0 data bitmap dapat diakses melalui kelas System.Drawing.Bitmap, dan syntaxnya lumayan sederhana dan mudah, hanya dengan :
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(“Namafile.bmp”);
Kita sudah dapat membuka file bitmap untuk dimodifikasi, namun kelemahan dari kelas ini adalah tidak support untuk data yang besar, atau memiliki format khusus ( dalam hal ini pengalaman saya adalah file TIFF 16-bit dengan besar 6000 x 6000 pixel, yaitu file USGS untuk data SRTM ), saya mengalami beberapa kali segmentation fault saat menggunakan class ini.
Pada .NET 3.0, tepatnya pada Windows Presentation Foundation (WPF) terdapat kelas bitmap lain yaitu System.Windows.Media.Imaging.BitmapSource yang merupakan file bitmap standard yang dapat digunakan untuk menyimpan data image untuk di manipulasi, class ini agak sedikit repot untuk digunakan, namun terbukti handal untuk membuka file berukuran besar dengan format khusus, berikut adalah contoh cara untuk membuka file image dengan menggunakan class BitmapSource.
/// Membuat stream source sebagai sumber data untuk membuka file image
System.IO.Stream StreamSource = new FileStream (“namafile.tiff”, FileMode.Open, FileAccess.Read, FileShare.Read);
///Membuat decoder sesuai dengan file yang ingin dibuka
///Selain TiffBitmapDecoder ada juga PNGBitmapDecoder, JPEGBitmapDecoder dan lain2
System.Windows.Media.Imaging.TiffBitmapDecoder decoder = new TiffBitmapDecoder(StreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
/// Membuat sebuah bitmapSource dan menggassign frame pertama yang didapat oleh decoder ke bitmap source tersebut
/// Untuk beberapa jenis image seperti GIF & TIFF, sebuah file bisa terdiri dari beberapa frame
BitmapSource bitmapSource = decoder.Frames[0];
BitmapSource teleh selesai diambil dan siap untuk digunakan, namun, bagaimana caranya untuk mengambil informasi pixel dari sebuah bitmapsource ? karena pada bitmapsource tidak disediakan method GetPixel atau SetPixel seperti pada kelas Bitmap pada .NET 2.0
Untuk mendapatkan keterangan pixel pada posisi (x,y) kita perlu sedikit melakukan workaround dengan step sebagai berikut : 1. Mengambil data array of byte dari bitmapsource: 2. menentukan posisi pixel yang diinginkan dan mengkonversi posisi pixel ke posisi byte pada bitmapsource: 3. Mengkonversi byte menjadi nilai warna yang dimaksud
Berikut adalah class untuk mengcopy array of byte dari bitmap source ke byte[]
private byte[] GetArrayOfPixels(BitmapSource bitmapsource)
{
Int32 stride = bitmapsource.PixelWidth * bitmapsource.Format.BitsPerPixel / 8;
Int32 ByteSize = stride * bitmapsource.PixelHeight * bitmapsource.Format.BitsPerPixel/8;
byte[] arrayofpixel = new byte[ByteSize];
bitmapsource.CopyPixels(arrayofpixel, stride, 0);
return arrayofpixel;
}
Dan ini adalah class untuk mengambil data color tertentu dari posisi pixel (x,y), class ini bertujuan untuk mengambil data warna dari sebuah image tiff 8bit grayscale ( hanya ada 256 warna saja )
private Color ConvertPixelValue(byte[] pixelsvalue, int x, int y)
{
int NumOfBytes = format.BitsPerPixel / 8;
int StartPosition = (y * ImageWidth * (format.BitsPerPixel / 8)) + ( x * (format.BitsPerPixel / 8) );
// untuk mengembalikan dalam bentuk System.Windows.Media.Color
byte colorvalue = pixelsvalue[StartPosition];
return System.Windows.Media.Color.FromRgb(colorvalue, colorvalue, colorvalue);
// Untuk mengembalikan dalam bentuk System.Drawing.Color
int colorvalue = Convert.ToInt32(pixelsvalue[StartPosition]);
return System.Drawing.Color.FromArgb(colorvalue,colorvalue,colorvalue);
}
Sehingga Line Of Code akan menjadi seperti ini :
/// Membuat stream source sebagai sumber data untuk membuka file image
System.IO.Stream StreamSource = new FileStream (“namafile.tiff”, FileMode.Open, FileAccess.Read, FileShare.Read);
///Membuat decoder sesuai dengan file yang ingin dibuka
///Selain TiffBitmapDecoder ada juga PNGBitmapDecoder, JPEGBitmapDecoder dan lain2
System.Windows.Media.Imaging.TiffBitmapDecoder decoder = new TiffBitmapDecoder (StreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
/// Membuat sebuah bitmapSource dan menggassign frame pertama yang didapat oleh decoder ke bitmap source tersebut
/// Untuk beberapa jenis image seperti GIF & TIFF, sebuah file bisa terdiri dari beberapa frame
BitmapSource bitmapSource = decoder.Frames[0];
/// Mengcopy data bitmapsource ke dalam array of byte
byte[] arrayofpixels = GetArrayOfPixels(bitmapSource);
/// Mengambil data Color tertentu untuk pixel pada posisi ( 0, 1 )
Color c = ConvertPixelValue ( arrayofpixels, 0, 1 );
Conclusion
Class BitmapSource memang memerlukan cukup banyak workaround hanya untuk mengambil data 1 buah pixel saja, namun disisi lain, dengan tipe data seperti itu bitmapsource akan sangat mudah dan cepat digunakan untuk melakukan image processing, mungkin pada bagian selanjutnya saya akan mencoba menerangkan image processing dengan menggunakan WPF
By Andri Mirandi
_______________________________________________________________________________________
Junior Programmer at PT CITA Inovasi Rekaprima
andri@cinovasi.com / andri_mirandi@yahoo.com
Aku pernah kerja di sebuah software house yang kebanyakan ngerjain project di bidang software yang ada hubungan dengan peralatan di lapangan, dan masalahnya selalu klasik, perubahan requirement, user minta yang aneh aneh, lost code di repository dan terakhir programmernya lagi "Autis Mode" dan kerjaannya cuma dia yang ngerti sehingga ga bisa di take over, dan berakhir dengan lebih lama di lapangan, bergadang2 lagi, autis2 lagi, dan banyak minum tolak angin + Heineken ( kalo lagi ga ada pengawas )
Akhirnya pernah diadakan beberapa pembicaraan serius diantara kita mengenai software yang ideal, mulailah semua orang mencari2, mulai dari configurable software hingga penggunaan Dynamic DLL, atau COM, tapi dirasa rasa .. masih ada sesuatu yang kurang, yang kurang adalah bagaimana semua itu dirangkum dan ditentukan urutannya pada software, nah pada saat membaca bab awal WWF timbullah pencerahan, nah ini dia solusinya. dilanjutkan dengan bab bab selanjutnya...dan mulailah discourage, duh ternyata sulit juga. Saat mulai gundah, mulailah ngobrol2 dengan rekan2 . . . "gimana nih ada barang baru mungkin solusi, ... tapi susah euy", kebanyakan sih pada cuma nyengir doang, trus tertawa sambil bergumam "I dont know what you`re talking about", tapi ada seorang senior programmer yang memberikan masukan positif, dia berkata.. "Ini sih semua yang biasa gw lakukan dengan Design Pattern di C++, cuma dikemas lebih rapi dan dikomersilin" ya mohon dimaafkan saja, karena dia blom baca bagian bahwa WWF itu bagian dari .NET Framework sehingga tidak ada biaya tambahan untuk menggunakan WWF, menurut dia WWF itu sudah sesuai dengan standard yang biasa dia anut, yaitu multithreading, dan gampang di bongkar pasang.
Mendengar encouraging seperti itu, jadi tertarik lagi buat nerusin baca, dan setelah mulai membaca2 lagi, ternyata yang bikin sulit adalah konsep pemrogramanku yang salah, karena saking mudahnya dunia dengan IDE yang bagus, pemrograman bagiku ( dulu ) adalah drag drop dan klik klik, jelas aja konsep workflow sulit untuk diterima pada awal awal, diiringin dengan membaca Head First Design Pattern mulailah terlihat bagaimana seharusnya menggunakan Workflow. berikut adalah pemahaman saya, tolong dikoreksi jika salah :
Workflow engine ( instance dari workflow ) adalah engine utama dari aplikasi, engine ini bertugas sebagai factory ( lihat:Factory Pattern ), dan ada juga Customer dari factory ini, yaitu aplikasi yang meminta sebuah aktivitas untuk dilakukan, Customer akan meminta sebuah aktivitas dan akan dijalankan di customer, namun sambil dipantau oleh workflow, sehingga saat terjadi crash pada sebuah aktivitas, workflow engine akan tetap berjalan karena engine dan aktivitas berjalan di thread yang berbeda. Customer dari workflow ini bisa berasal dari mana saja, host computer yang menjalankan workflow, komputer lain yang terhubung dengan workflow, hingga smart device, nah disinilah WCF ( Windows Communication Foundation ) masuk ke dalam peta, WCF dapat berfungsi sebagai jembatan agar sebuah activities dapat dilakukan pada customer, dan juga memungkinkan antar customer dapat berkomunikasi untuk sebuah aktivitas yang sama. Hal lainnya lagi adalah dengan domain business process terdapat di Workflow, domain User Interface dapat dibuat dengan sekreatif mungkin menggunakan WPF( Windows Presentation Foundation ).
Workflow memang menawarkan fasilitas yang menarik sekaligus berbeda dengan fasilitas fasilitas yang di tawarkan oleh .NET dulu, namun untuk sampai ke tahap produksi software, mungkin saya masih memerlukan penyelidikan lebih banyak agar bisa solid.
Share this post: 
|