Welcome to Dotnet Semarang Sign in | Join | Help

Silverlight for Real LOB Application

Silverlight merupakan RIA (Rich Internet Application) yang dibuat oleh Microsoft. Silverlight tidak hanya dapat digunakan untuk animasi. Dengan kombinasi Silverlight dan ASP.NET AJAX, dapat juga digunakan dalam dunia bisnis secara nyata.

Saya buat beberapa aplikasi pendukung SAP untuk PT. Indonesia Epson Industry menggunakan teknologi ASP.NET AJAX,  Silverlight dan ExtJs. ASP.NET AJAX digunakan untuk komunikasi anatara browser dengan webservice, Silverlight untuk presentation yang ringan dan interaktif sedangkan ExtJs (www.extjs.com) digunakan untuk membuat UI yang menarik. Kombinasi ketiga teknologi tersebut menghasilkan aplikasi yang ringan, interaktif dan menarik untuk dilihat. Berikut adalah screenshoot salah satu halaman aplikasi intranet yang saya buat untuk Epson.

 Silverlight Charting

Dulunya untuk membuat charting di ASP.NET saya gunakan GDI+ yang digenerate oleh ASP.NET generic http handler. Ternyata cara tersebut tidak bisa fleksibel. Akhirnya saya coba untuk beralih menggunakan Silverlight dan ternyata sungguh menakjubkan. Chart yang dibikin dengan Silverlight dapat tampilkan dengan cepat dan "interaktif" 

Walaupun hanya berbekal Visual Studio 2008 Express, saya bisa menyelesaikan beberapa modul aplikasi yang dibutuhkan. Rencana semua aplikasi yang ada di Epson akan saya buat dengan ASP.NET AJAX dan Silverlight. Semoga setelah melihat hasil aplikasi yang dibikin menggunakan Silverlight ini, tahun depan Epson menganggarkan untuk membeli Visual Studio Orcas. Dan beberapa aplikasi akan saya migrasi ke .NET 3.5.

Posted by cahnom | 0 Comments
Filed under:

Mashup

Mashup adalah website atau aplikasi web yang isinya berasal dari lebih dari satu sumber. Isi dari website ini biasanya berasal dari penyedia layanan pihak ke tiga dengan antarmuka yang disebut sebagai API. Berbeda dengan RSS yang hanya mempublikasikan berita, mashup bisa berupa peta, foto, informasi produk, berita, dll. Sebagai contoh, dengan mashup bisa mengambil foto dari flickr, menjual barang yang dijual di eBay pada situs kita, menampilkan peta dari googlemap.

Pembuatan website dengan mashup tidak harus mengerti pemprograman. Terdapat tool yang dapat digunakan untuk membuat website dengan mashup seperti Mapbuilder atau Goole Mashup Editor. Dengan tool tersebut dapat dibuat layanan sederhana tanpa harus menulis kode.

Biasanya untuk memanfaatkan mashup diperlukan pendaftaran ke penyedia layanan. Sebagai contoh, untuk menggunakan layanan Google Map API, dapat dilakukan pendaftaran melalui situs http://www.google.com/apis/maps/signup.html.

Untuk memulai membuat mashup, masing-masing API memiliki cara tersendiri. Silakan baca dokumentasi pada masing-masing API.

Posted by cahnom | 0 Comments

Mendaftar Domain .web.id (Gratis)

Dari beberapa permintaan mengenai panduan gimana mendapatkan domain web.id, saya tulis beberapa langkah praktis untuk mendaftar.

Daftar User di register.web.id

Buka halaman http://register.web.id. Jika anda belum memiliki account di register.web.id, lakukan pendafataran terlebih dahulu dengan klik [Register]. Isi formulir dengan benar. Username boleh tidak sama dengan domain yang akan kita daftarkan.

Mendaftarkan Domain Baru

Setelah proses registrasi selesai, login dengan user anda. Dan kerjakan langkah-langkah berikut.

  1. Periksa domain yang akan didaftarkan apakah masih tersedia atau tidak. Masuk ke halaman pemeriksaan domain.
  2. Masukkan domain yang akan diperiksa dan pilih induk domain yang diinginkan (dalam hal ini kita ingin mendaftar domain .web.id)
  3. Jika domain terlah digunakan oleh orang lain, ganti nama domain yang lain. Jika domain masih tersedia, klik tombol [Register] di bawah.
  4. Isi formulir pendaftaran domain dengan lengkap dan benar.
    Name diisi dengan nama anda
    Registrant type: Personal
    Primary server diisi dengan nameserver anda (contoh: ns1.myhosting.com). Jika belum memiliki nameserver bisa diisi sembarang dulu, bisa diubah di kemudian hari.
    Net Address diisi dengan IP address nameserver anda.
  5. Setelah semua formulir diisi dengan benar, klik tombol [Register]

Langkah selanjutnya adalah upload dokumen

Upload Dokumen

Untuk melakukan upload dokument, klik menu [Document Management], dan klik tombol [Create] untuk upload dokumen baru.

Pada halaman Document Submission:

  1. Pilih domain yang telah didaftarkan (belum disetujui)
  2. Pilih dokument type dengan KTP atau SIM (sesuai dengan dokument yang akan diupload)
  3. Document number diisi dengan nomor KTP atau SIM (contoh: KTP#11.1234.010171.0064)
  4. Browse file hasil pindaian (scan) KTP atau SIM
  5. Klik [Submit] untuk mengirim dokumen

Selesai

Pendaftaran domain web.id selesai. Silakan tunggu beberapa waktu untuk mendapatkan persetujuan dari DepKomInfo. Domain saya dalam waktu kurang dari 24 jam disetujui. Namun teman saya yang butuh waktu satu minggu baru disetujui, tergantung dari kesibukan petugas DepKomInfo.

Setelah domain disetujui, maksimal butuh waktu 1x24jam untuk bisa mengakses domain baru kita. Lamanya waktu tergantung waktu sinkronisasi domain baru dengan pengelola domain internasional.

Setelah domain baru selesai dibuat, tinggal setting nameserver di komputer server / shared hosting. Setting di komputer server bisa lihat dokumentasi dari masing-masing OS. Sedangkan untuk shared hosting, bisa lihat manualnya di masing-masing hosting provider.

Selamat melakukan registrasi di domain web.id

Posted by cahnom | 1 Comments

Gempa di Sumbawa

Pagi ini telah terjadi gempa di daerah Sumbawa NTB pada 2007-05-24 01:06:24 GMT (atau sekitar pukul 09:06:24 WITA). Sumber http://geofon.gfz-potsdam.de/db/eqinfo.php

Tapi yang disayangkan sampai tulisan ini ditulis belum ada data dari BMG, padahal dari jaringan GEOFON sudah ada beberapa saat setelah kejadian. Apa sebenarnya yang terjadi dengan BMG kita? Apa peralatan yang dimiliki sudah terlalu usang atau orang-orangnya belum bangun dari tidur?

Posted by cahnom | 0 Comments

Ajax or AJAX?

Ungkapan Ajax pertama kali dikenalkan oleh Jesse James Garrett untuk mendeskripsikan gaya aplikasi web dan teknologi-teknologi yang menyertainya, sehingga dapat membuat aplikasi web yang interaktif. Pada mulanya, ungkapan Ajax yang tersebar di web adalah sebuah akronim AJAX (Asynchronous JavaScript And XML). Saat ini kenyataannya huruf "X" pada AJAX tidak representatif untuk menunjukkan format data yang digunakan sebagai komunikasi client dengan server web semenjak banyak aplikasi Ajax yang beralih menggunakan JSON. JSON merupakan alternatif format pertukaran data yang lebih sederhana dan lebih efisien. Daripada merubah akronim AJAX menjadi AJAJ pada aplikasi web yang lebih interaktif ini, ungkapan Ajax digunakan tetap dipertahankan namun bukanlah sebuah akronim AJAX.

Posted by cahnom | 0 Comments
Filed under:

ASP.NET Enter Key Problem

Pada pembuatan sebuah halaman web, terkadang terdapat beberapa input dan beberapa tombol (button). Ketika cursor focus ke sebuah textbox dan tekan tombol Enter, akan terjadi postback ke server. Sebagai contoh bila dalam halaman terdapat dua buah textbox dan dua buah tombol separti pada kode berikut:

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" Text="Button" /> <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> <asp:Button ID="Button2" runat="server" Text="Button" />

Setelah mengisi TextBox1 dan menekan tombol enter, terjadi postback ke server dan Event Click pada Button1 akan dikerjakan. Begitu *** jika TextBox2 yang diisi dan tombol Enter ditekan, Event Click pada Button1 yang dikerjakan, padahal yang diinginkan adalah Button2 yang harus dikerjakan.

Untuk memecahkan masalah ini, pada ASP.NET 2.0 terdapat property DefaultButton pada Form dan Panel. Dalam kasus ini, digunakan Panel karena kedua TextBox tersebut berada dalam satu Form. Kelompokkan masing-masing inputan beserta default tombolnya ke dalam Panel.

<asp:Panel ID="Panel1" runat="server" DefaultButton="Button1"> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" Text="Button" /> </asp:Panel> <asp:Panel ID="Panel2" runat="server" DefaultButton="Button2"> <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> <asp:Button ID="Button2" runat="server" Text="Button" /> </asp:Panel>

Pada ASP.NET 1.1 diperlukan trik khusus menggunakan Javascript untuk melakukan hal ini. Tambahkan code berikut pada event Load

TextBox1.Attributes.Add("onkeydown", "if(event.which || event.keyCode)" + "{if ((event.which == 13) || (event.keyCode == 13)) " + "{document.getElementById('"+Button1.UniqueID+"').click();return false;}} " + "else {return true}; "); TextBox2.Attributes.Add("onkeydown", "if(event.which || event.keyCode)" + "{if ((event.which == 13) || (event.keyCode == 13)) " + "{document.getElementById('"+Button2.UniqueID+"').click();return false;}} " + "else {return true}; ");

Pada kode di atas, jika saat kursor sedang berada di TextBox{n}, ketika tombol Enter ditekan (keycode untuk tombol enter adalah 13) maka akan memanggil method click pada Button{n}. Pada Firefox, event.keyCode tidak berjalan dengan baik, sebagai penggantinya digunakan event.which.

Posted by cahnom | 0 Comments

Balek Maning neng Java

Wis genep sak pendak dino aku ngasto winten Jakarta. Rodo bingung sih... Wayah neng Semarang saben dino ngomong karo rencang-rencange nganggo Boso Jowo. Basan pindah menyang Jakarta, kabeh podho ngomong loe-gue... Aku ora biso kon ngomong loe-gue, lha wong biyasane ngomong sampean-aku/kulo saiki kon melu-melu loe-gue. Tinimbang kaku mendingan nganggo kamu-aku wae, luweh gambang diucapke.

Alhamdulillah, dino iki salah siji karyawan neng kene ono sing Wong Jowo, gelem ngomong Boso Jowo. Ya... etung-etung ijeh biso ngomong Boso Jowo neng Jakarta. Biasane wong Jowo sing wis boro menyang Jakarta podo lali karo basane dewe. Balek-balek neng ndeso loe-gue-ne ijeh digowo-gowo. Embuh ngaya yen wis dadi wong Jakarte opo pancen bener-bener lali karo boso emake dewe.

Mbuh kerjo neng Jakarta, pengene tetep Boso Jowo. Sampe anak putuku meh tak ajari Boso Jowo kromo sing bener, ojo melu-melu kanca-kancane sing urip neng Jowo tapi ora biso Boso Jowo.

Ono cerito meneh pas jamane aku kuliah neng Undip. Kenalan karo cah wedok, cah Tembalang asli, tak takoni nganggo Boso Jowo Inggil ora mudeng. Ki bocah pancen ora biso Boso Jowo opo mung ethok-ethok ora biso. Aku mikir, yen ora soko awake dewe sing njogo Boso Emake, sopo meneh. Suwe-suwe Boso Jowo biso ilang.

Ayo podo dijogo Budoyo Jawi meniko supados mboten ilang kanton cerito.

Posted by cahnom | 0 Comments
Filed under:

First Day In Jakarta

Hari ini merupakan hari pertamaku kerja di Jakarta. Cape, sebelum subuh harus bangun, tepat setelah sholat subuh harus mandi dan sarapan dengan secangkir sereal dan roti. Mengejar waktu biar ga kesiangan dan terjebak kemacetan jalanan ibukota.

Sejenak setelah menunggu ankot di depan gerbang perumahan Om saya di Perumahan Wahana Pondok Gede, akhirnya datang juga angkot yang ditunggu. Saya naik angkot menuju Terminal Kampung Rambutan dengan menempuh waktu sekitar 30 menit.

Dilanjutkan dengan naik bus kota menuju Terminal Lebak Bulus, yach... nunggu agak lama di bus alias ngetem cari penumpang.

Sampai Lebak Bulus sekitar jam 7:10, saya cari angkot nomor S14, yang saya naiki ternyata bukan S14 tapi cuma nomor 14. Gak tahu huruf S di depannya itu punya arti atau tidak. Di tengah perjalanan saya bingung koq angkotnya masuk tol? Padahal sebelumnya angkot tersebut tidak masuk tol. Saya tanya sopir apakah angkotnya melewati Jl. Bintaro Permai dijawab tidak dan akhirnya saya turun.

Bingung juga karena belum pernah pernah menginjakkan kaki di daerah tersebut. Akhirnya saya putuskan untuk naik ojek, eh ternyata sudah deket banget, kira-kira cuma 1km saja.

Sesampai di kantor pulkul 7:30, pintu masih terkunci. Sambil menunggu karyawan lain sampai kantor saya duduk di ruko sebelah. Akhirnya tidak selang beberapa lama saya melihat mobil Suzuki Katana hendak parkir di depan kantor. Pak Agung keluar dari mobilnya dan mengetuk pintu kantor untuk meminta dibukakan office boy yang ada di lantai atas.

Sesampai di dalam ternyata masih sepi. Saya langsung ditunjukkan komputer yang akan saya gunakan.

Hari ini hari pertamaku bekerja di PT. Bataviasoft. Pekerjaanku hari ini hanya install komputer dari awal (fresh) untuk diisi software developer tool, senjata andalan seorang programmer.

Sesaat sebelum makan siang saya diberi tugas oleh Pak Fajar untuk mempelajari dokumen project yang sedang dikerjakan saat ini. Alhamdulillah sedikit demi sedikit saya dapat memahaminya dengan baik.

Sehabis makan siang saya diminta mengutak-atik project yang dikerjakan tersebut. Alhamdulillah sore harinya pekerjaan hari ini sudah terselesaikan dengan baik.

Kesan pertama, bekerja dalam tim yang kompak sangat menyenangkan. Tidak ada kesenjangan antara senior dengan junior, antara atasan dan bawahan, antara boss dan karjawan. Semoga situasi ini dapat berlangsung sampai perusahaan ini tumbuh besar dan memiliki sebesar Microsoft saat ini. Amin.

Saatnya pulang, saya harus pulang biar tidak kemalaman di jalan. Soalnya angkot untuk pulang ke rumah tidak sampai malam, hanya sampai jam 21:00 saja. 

Posted by cahnom | 0 Comments

Generics

Generics merupakan type baru dalam .NET 2.0. Framework .NET 2.0 memiliki beberapa class generic dalam namespace System.Collections.Generic, di antaranya Dictionary, Queue, SortedDictionary, dan SortedList. Class-class tersebut bekerja seperti halnya class nongeneric dalam namespace System.Collections dengan penambahan kinerja dan type safety.

Kegunaan Generics.

Pada Framework .NET 1.0 dan 1.1 biasanya menggunakan class Object pada parameter dan member untuk melakukan casting dari dan ke class Object. Ada dua kelebihan generics dibandingkan dengan class Object:

  • Mengurangi kesalahan saat run-time. Compiler tidak dapat mendeteksi kesalahan jika terdapat casting dari dan ke class Object. Sebagai contoh, jika terdapat castring dari string ke class Object dan dilakukan casting dari class Object tersebut ke integer, compiler tidak dapat mendeteksi kesalahan tersebut. Pada saat program dijalankan, runtime .NET melempar exception karena terdapat kesalahan casting dari string ke integer. Dengan menggunakan generic, compiler dapat memberitahukan kesalahan ini sebelum program dijalankan. Dengan generic juga dapat ditentukan constraint untuk membatasi class-class yang digunakan pada generic, sehingga compiler dapat mendeteksi type yang tidak cocok.
  • Perbaikan Kinerja. Casting membutuhkan boxing (konversi dari value type ke reference type) dan unboxing (konversi dari reference type ke value type) yang membutuhkan sumber daya prosesor lebih banyak dan kinerja program lebih lambat. Dengan menggunakan generic tidak diperlukan casting atau boxing sehingga menambah kinerja run-time.

 Untuk memahami perbedaan antara penggunaan class Object dan generic, lihat contoh program berikut:

class Obj
{
    public Object t;
    public Object u;
    public Obj(Object _t, Object _u)
    {
        t = _t;
        u = _u;
    }
}

class Gen<T, U>
{
    public T t;
    public U u;
    public Get(T _t, U _u)
    {
        t = _t;
        u = _u;
    }

Seperti terlihat pada program di atas, class Obj memiliki dua member dengan type Object. Class Gen memiliki dua member dengan dua member dengan type T dan U. Pada class Obj, padameter dapat diisi oleh sembarang type sedangkan pada class Gen variable sudah ditentukan typenya sehingga meminimalkan kesalahan run-time.

Penggunaan Type Generic

Ketika menggunakan Type Generic, anda harus menentukan type yang digunakan. Berikut contoh penggunaan class Obj dan Gen.

// Menambahkan dua string menggunakan class Obj
Obj oa = new Obj("Hello, ", "World!");
Console.WriteLine((string)oa.t + (string)oa.u);

// Menambahkan dua string menggunakan class Gen
Gen<string, string> ga = new Gen<string, string>("Hello, ", "World!");
Console.WriteLine(ga.t + ga.u);

// Menambahkan double dan int menggunakan class Obj
Obj ob = new Obj(10.125, 2005);
Console.WriteLine((double)ob.t + (int)ob.u);

// Menambahkan double dan int menggunakan class Gen
Gen<double, int> gb = Gen<double, int>(10.125, 2005);
Console.WriteLine(gb.t + gb.u);

Ketika program dijalankan pada aplikasi console, class Obj dan Gen menghasilkan keluaran yang sama persis. Akan tetapi kode yang menggunakan class Gen akan berjalan lebih cepat dibandingkan dengan class Obj karena tidak memerlukan boxing dan unboxing ke dan dari class Object.

Contoh program berikut menunjukkan bagaimana compiler memeriksa kesalahan sebelum program dijalankan.

// Menambahkan double dan int menggunakan class Gen
Gen<double, int> gc = Gen<double, int>(10.125, 2005);
Console.WriteLine(gc.t + gc.u);

// Menambahkan double dan int menggunakan class Obj
Obj oc = new Obj(10.125, 2005);
Console.WriteLine((int)oc.t + (int)oc.u);

Baris terakhir pada kode diatas mengandung kesalahan yaitu nilai oc.t di-casting ke int padahal seharusnya double. Kesalahan tersebut baru diketahui setelah program dijalankan, compiler tidak memberitahukan adanya kesalahan ini pada waktu program di-compile. Dengan menggunakan generic, tentunya lebih memudahkan untuk mendeteksi dan memperbaiki kesalahan sejak dini.

Menggunakan Constraint

Constraint digunakan untuk membatasi penggunaan parameter dengan type tertentu. Generic mendukung empat jenis constraint yaitu:

  • Interface. Hanya mengijinkan type yang menerapkan interface tertentu untuk menggunakan generic.
  • Base class. Hanya mengijinkan tyoe yang cocok atau diturunkan dari base class tertentu untuk menggunakan generic.
  • Constructor. Dibutuhkan type tertentu untuk menggunakan generic untuk menerapkan constructor tanpa parameter.
  • Reference atau value type. Dibutuhkan type tertentu untuk menggunakan generic salah satu dari reference atau value type.

Pada C# digunakan klausa where untuk menerapkan constraint pada generic. Sebagai contoh, class generic berikut harus digunakan hanya oleh type yang menerapkan interface IComparable.

class ComGen<T>
    where T : IComparable
{
    public T t1;
    public T t2;

    public ComGen(T _t1, T _t2)
    {
        t1 = _t1;
        t2 = _t2;
    }

    public T Max()
    {
        if (t2.CompareTo(t1) < 0)
            return t1;
        else
            return t1;
    }
}

Class di atas akan di-compile tanpa kesalahan. Namun jika klausa where dihapus, compiler akan melaporkan kesalahan yang menunjukan bahwa tyoe T tidak mengandung definisi CompareTo. Dengan memberikan constraint generic kepada class yang mengimplementasikan IComparable, class tersebut dijamin selalu mengandung method CompareTo.

Contoh penggunaan generic pada class library Framework .NET 2.0 adalah pada List (System.Collections.Generic.List). Berikut contoh potongan kode yang menggunakan List.

class ListTest
{
    public List<Employe> GetEmployes()
    {
        List<Employe> list = new List<Employe>();
        Configuration conf = WebConfigurationManager.OpenWebConfiguration();
        ConnectionStringSettings setting = conf.ConnectionStrings.ConnectionStrings["MyConn"];
       
        SqlConnection conn = new SqlConnection(setting.ConnectionString);
        SqlCommand cmd = new SqlCommand("SELECT FirstName, LastName, Age FROM Employe");
        cmd.Open();
        SqlDataReader reader = cmd.ExecuteReader();
        while (reader.Read()) {
            Employe emp = new Employe(reader["FirstName"].ToString(), reader["LastName"].ToString(), Convert.ToInt32(reader["Age"]));
            list.Add(prs);
        }
        reader.Close();
        conn.Close();
        return list;
    }
}

class Employe
{
    private string firstname;
    private string lastname;
    private int age;
    public string FirstName
    {
        get { return firstname; }
        set { firstname = value; }
    }
    public string LastName
    {
        get { return lastname; }
        set { lastname = value; }
    }
    public string Age
    {
        get { return age; }
        set { age= value; }
    }
    public Age(string _firstname, string _lastname, int _age)
    {
        firstname = _firstname;
        lastname = _lastname;
        age = _age;
    }

Contoh program di atas memanfaatkan List (dalam namespace System.Collections.Generic) untuk menampung data Employe ke dalam collection. Class ListTest menggunakan List<Employe> sebagai nilai kembalian untuk method GetEmployes. Untuk mengakses kembalian dari method GetEmployes tidak diperlukan casting melainkan tinggal dipanggil secara langsung.

// Mengakses method GetEmployes
ListTest lsTest = new ListTest();
List<Employe> list = lsTest.GetEmployes();
for (int i=0; i < list.Count; i++)
{
    Console.WriteLine("Employe #{0}\n", i);
    Console.WriteLine("First Name : {0}\n", list[i].FirstName);
    Console.WriteLine("Last Name  : {0}\n", list[i].LastName);
    Console.WriteLine("Age        : {0}\n", list[i].Age);
}

Dari contoh program di atas dapat dilihat bahwa tidak ada casting sehingga program dapat dibaca dengan mudah, kesalahan ketidakcocokan type dapat terdeteksi pada saat program di-compile serta kinerja program dapat meningkat.

Posted by cahnom | 0 Comments

Setup Microsoft SQL Server 2005 Failover Cluster

Langkah demi langkah pembangunan Microsoft SQL Server Fail Over Cluster telah saya dokumentasikan di http://www.masykur.erudeye.net/SQLFOC.aspx

Semoga pengalaman saya tersebut dapat bermanfaat bagi yang lain. 

Posted by cahnom | 0 Comments

Membuat Pembasmi Brontok

Hari ini sungguh menyedihkan... Pekerjaan terganggu akibat seranagn virus Brontok. Semua antivirus yang dimiliki termasuk CompactbyteAV tidak dapat mengenali varian Brontok terbaru ini. Apa boleh buat, daripada menunggu update antivirus dari vendor terlalu lama yang mungkin bisa memakan waktu 1 minggu aku coba untuk membuat pembasmi brontok menggunakan C#.

Pertama adalah analisis karakteristik virus Brontok. Virus Brontok yang saya dapat menggunakan ekstensi *.exe dan *.pif yang tersebar di banyak folder dalam harddisk. File virus tersebut mengandung metadata sebagai berikut:

Item name Value
Comments Bokeph MemendeZ
Company File Folder
File Version 1.00
Internal Name BRoNToK
Language English (United States)
Legal Trademark Virus Revolution Project
Original File name BRoNToK.exe
Product Name BRoNToK
Product Version 1.00

Berdasarkan informasi tersebut dapat dibuat pembasmi brontok dengan metadata sebagai kunci pencarian virus. Sebelum melakukan pembersihan file virus brontok, yang harus dilakukan adalah membunuh semua proses virus yang berjalan. Dengan memanfaatkan Windows Management Instrumentation dapat diambil semua proses yang berjalan dan informasi file proses tersebut berada. Jika file proses tersebut mengandung metadata seperti di atas, proses tersebut langsung dibunuh menggunakan namespace System.Diagnostics

Karena keterbatasan waktu, pembasmi brontok yang dibuat hanya berfungsi menghapus semua file virus yang ada tanpa memperbaiki atribut file dan nilai registry yang dirusak oleh virus. Untuk menyembuhkan kerusakan ini dapat digunakan tool HijackThis dan unduh semua Windows® XP File Association Fixes file dari situs http://www.dougknox.com/xp/file_assoc.htm. Tool HijactThis digunakan untuk membuka blocking RegistryTool oleh virus dan menghapus semua startup program virus. Setelah RegistryTool dapat diakses kembali, lakukan penyembuhan pada registry dengan menjalankan file *.reg yang telah diunduh tadi.

Kode sumber project saya sertakan dalam lampiran tulisan ini.

 

Posted by cahnom | 0 Comments
Filed under: ,

Attachment(s): brondong.zip

First Look 2007 Microsoft Office System

Ingin tahu apa saja yang ada di 2007 Microsoft Office System. Microsoft memberikan eBook setelab 213 halaman yang memaparkan masing-masing fitur dari 2007 Microsoft Office System. Bagi yang ingin tahu tentang teknologi apa yang ada di 2007 Microsoft Office System dapat unduh ebook-nya di http://download.microsoft.com/download/3/5/a/35a8cb9f-1349-4645-ac2a-49ba61834826/First-Look-2007-Microsoft-Office-System.pdf
Posted by cahnom | 0 Comments
Filed under:

Solusi Crystal Report Error "The maximum report processing jobs limit configured by your system administrator has been reached."

Lagi enak-enak lihat laporan, menampilkan beberapa laporan sekaligus eiittt.... koq munculnya pesan kesalahan "The maximum report processing jobs limit configured by your system administrator has been reached." Dengan sedikit kesabaran, dianalisis dan tanya ke Om Google, tidak lama mendapatkan jawaban atas kesalahan tersebut.

Setelah komputer di-start-ulang (restart) penyakit ini akan sembuh sementara namun tidak dapat memberikan solusi yang baik terutama untuk server yang sangat sibuk. Kesalahan ini timbul dikarenakan crystal report engine mengerjakan tugas yang terlalu banyak secara bersamaan. Penulisan kode yang kurang baik juga dapat menimbulkan kesalahan tersebut. Biasanya terjadi akibat Report Document tidak ditutup (close) atau dispose.

Posted by cahnom | 0 Comments
Filed under:

Pengalaman Baru dengan Windows Vista

 

Alhamdulillah

Hari ini, pagi hari kedatanganku di kantor telah disambut oleh perangkat keras baru -- kartu grafis NVIDIA GeForce FX 5500, harddisk 140GB dan RAM 1GB. Setelah sedikit berkeringat mengganti perangkat keras dengan yang baru, aku coba untuk pasang Windows Vista RC1 yang didapat dari Majalah Chip Edisi 10/2006. Pengalaman pertama pasang Windows Vista tidak 100% mulus. Peratama saya lupa untuk meminta Procuct Key dari Microsoft. Hach.... booting lagi ke Win XP untuk browsing ke Microsoft (http://www.windowsvista.com/preview/register) untuk mendapatkan Product Key Windows Vista R1. Microsoft tidak berbelit-belit dalam memberikan Product Key untuk evaluasi tersebut. Saya tinggal masuk dengan Microsoft Passport dan memasukkan beberapa pilihan, Alhamdulillah Product Key secara cuma-cuma diberikan oleh Microsoft kepada saya.

Selanjutnya saya ulangi proses pemasangan Windows Vista dan akhirnya terpasang dengan baik tanpa hambatan yang berarti. Proses pemasangan sangat mudah, boleh dibilang lebih mudah dari Windows sebelumnya.

Setelah Windows Vista terpasang, saya belum menemukan keungulan yang digembar-gemborkan oleh Microsoft selama ini padahal kebutuhan minimum perangkat keras sudah terpenuhi. Setelah mencari di help, tidak sulit untuk mendapatkan referensi bagaimana mengaktifkan Aero di Windows Vista, tinggal search dan dapat deh cara mengaktifkan Aero (How do I get Windows Aero?).

Ikuti langkah-langkah dalam dokumen tersebut dan hasilnya, Aero yang sangat menarik telah aktif di desktop saya.

Kesan-kesan:

  1. Microsoft berusaha meniru Tiger-nya Mac dengan Aero namun menurut saya belum bisa menggunggulinya. Microsoft hanya sebatas dapat mengekor kejayaan Mac-OS X dalam hal kecantikan animasi desktop.
  2. Walaupun banyak perubahan dalam tampilan Windows Vista namun saya belum menemukan perubahan yang sangat berarti dari versi sebelumnya (mungkin dikarenakan saya belum mencobanya secara keseluruhan kali yach?)
  3. Dari sisi keamanan, cukup baik. Segala sesuatu yang berkaitan dengan administrasi sistem -- instalasi, konfigurasi, update -- selalu dimintakan konfirmasi berupa jendela pop-up. Berbeda dengan pop-up versi Windows sebelumnya, jendela pop-up Vista mendisable semua jendela lainnya. Peningkatan keamanan juga memberikan dampak penurunan kenyamanan karena terlalu banyak pop-up yang muncul.
  4. Masih banyak aplikasi yang tidak dapat berjalan (di-install) di Vista termasuk software paling gress dari Microsoft (MS Office 2007 Beta 2, dari DVD original-nya Microsoft) walaupun sudah menggunakan Compatibility Mode.
  5. Ada kemajuan yang cukup melegakan ketika berselancar dengan Internet Explorer 7, saat melakukan download berkas (file) berukuran besar. Walaupun tidak terdapat perubahan tampilan dibandingkan dengan versi sebelumnya (tidak ada tombol resume) namun aktifitas download dapat dilanjutkan kembali di lain waktu (resume). Hal ini sangat berbeda dengan versi IE sebelumnya yang sangat kacau dalam pengelolaan download dan memerlukan download manager untuk meningkatkan keberhasilan download.
Posted by cahnom | 1 Comments
Filed under:

Transfer Logins dan Passwords Antar Instance MS SQL Server

Pendahuluan

Terdapat beberapa masalah saat kita memindahkan database dari instance satu ke instance lainnya atau dari mesin server satu ke server lainnya atau saat melakukan upgrade side-by-side MS SQL Server dari versi lama ke versi yang baru. Salah satu masalah tersebut adalah objek login dan password tidak ikut ditransfer padahal semua data telah dipindahkan baik dengan cara backup restore maupun detach dan attach database. Setelah semua data selesai dipindahkan dan berusaha login ke database, akan muncul pesan:

Msg 18456, Level 16, State 1
Login failed for user '%ls'.

Masalah ini timbul karena data login dan password tidak disimpan dalam masing-masing database namun disimpan dalam master database sehingga perlu dilakukan pemindahan secara manual.

Transfer Login dan Password Antar Server MS SQL Server 7.0

Fasilitasn Transfer Objek pada SQL Server 7.0 Transformation Services (DTS) dapat digunakan untuk mentransfer login dan user antara dua buah sever tetapi tidak password login SQL Server tidak ikut ditransfer. Untuk mentransfer login dan password pada SQL Server 7.0 ke server lain yang menjalankan SQL Server 7.0 dapat dilakukan dengan langkah-langkah pada sesi "Solusi Lengkap untuk Transfer Login dan Password antar SQL Server dengan Versi yang Berbeda".

Transfer Login dan Password dari SQL Server 7.0 ke SQL Server 2000 atau Antar Instance SQL Server 2000

Transfer Login dan Password dari SQL Server 7.0 ke instance SQL Server 2000 atau antar dua Instance SQL Server 2000 dapat dilakukan dengan menggunakan Task Transfer Paket Login pada DTS dalam SQL Server 2000. Langkah-langkah transfer yang dilakukan sebagai berikut:

  1. Konek ke SQL Server 2000 tujuan, pada SQL Server Enterprise Manager pindah ke Data Transformation Services, buka folder, klik-kanan Local Packages, dan klik New Package.
  2. Setelah DTS package designer terbuka, klik Transfer Logins Task pada menu Task. Lengkapi informasi tentang Source, Destination dan tab Logins dengan tepat.

Penting: SQL Server 2000 tujuan tidak dapat berjalan pada SQL Server 2000 versi 64-bit. Komponen DTS untuk SQL Server 2000 versi 64-bit tidak tersedia.

Catatan: Metode DTS akan mentransfer password namun tidak mentransfer SID yang asli. Jika login tidak dibuat dengan SID asli dan user database ditransfer ke server yang baru, user database tidak akan berhubungan dengan login. Untuk mentransfer SID asli, lakukan langkah pada sesi "Solusi Lengkap untuk Transfer Login dan Password antar SQL Server dengan Versi yang Berbeda".

Transfer Login dan Password Antar Instance SQL Server 2005

Informasi mengenai transfer login dan password antar instance SQL Server 2005 dapat dilihat pada artikel Microsoft Knowledge Base:

918992 How to transfer the logins and the passwords between instances of SQL Server 2005.

Solusi Lengkap untuk Transfer Login dan Password antar SQL Server dengan Versi yang Berbeda

Metode ini dapat diterapkan untuk:

  • Transfer login dan password dari SQL Server 7.0 ke SQL Server 7.0.
  • Transfer login dan password dari SQL Server 7.0 ke SQL Server 2000.
  • Transfer login dan password dari SQL Server 7.0 ke SQL Server 2005.
  • Transfer login dan password antar server yang menjalankan instance SQL Server 2000.
  • Transfer login dan password dari SQL Server 2000 ke SQL Server 2005.

Note Lihat catatan pada akhir artikel ini mengenai informasi penting tentang langkah-langkah berikut.

Untuk mentransfer login dan password antar versi SQL Server yang berbeda, ikuti langkah-langkah berikut:

  1. Jalankan script di bawah pada SQL Server sumber. Script ini akan membuat dua stored procedure dengan nama sp_hexadecimal dan sp_help_revlogin dalam database master. Lanjutkan langkah 2 setelah pembuatan procedure selesai.
    Catatan: Procedure di bawah merupakan independen pada tabel sistem SQL Server. Struktur tabel mungkin dapat berubah antar versi SQL Server, dan pengambilan langsung dari tabel system tidak dianjurkan.
    ----- Begin Script, Create sp_help_revlogin procedure -----
    
    USE master
    GO
    IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL
      DROP PROCEDURE sp_hexadecimal
    GO
    
    CREATE PROCEDURE sp_hexadecimal
        @binvalue varbinary(256),
        @hexvalue varchar(256) OUTPUT
    AS
    DECLARE @charvalue varchar(256)
    DECLARE @i int
    DECLARE @length int
    DECLARE @hexstring char(16)
    SELECT @charvalue = '0x'
    SELECT @i = 1
    SELECT @length = DATALENGTH (@binvalue)
    SELECT @hexstring = '0123456789ABCDEF' 
    WHILE (@i <= @length) 
    BEGIN
      DECLARE @tempint int
      DECLARE @firstint int
      DECLARE @secondint int
      SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
      SELECT @firstint = FLOOR(@tempint/16)
      SELECT @secondint = @tempint - (@firstint*16)
      SELECT @charvalue = @charvalue +
        SUBSTRING(@hexstring, @firstint+1, 1) +
        SUBSTRING(@hexstring, @secondint+1, 1)
      SELECT @i = @i + 1
    END
    SELECT @hexvalue = @charvalue
    GO
    
    IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL
      DROP PROCEDURE sp_help_revlogin
    GO
    CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS
    DECLARE @name    sysname
    DECLARE @xstatus int
    DECLARE @binpwd  varbinary (256)
    DECLARE @txtpwd  sysname
    DECLARE @tmpstr  varchar (256)
    DECLARE @SID_varbinary varbinary(85)
    DECLARE @SID_string varchar(256)
    
    IF (@login_name IS NULL)
      DECLARE login_curs CURSOR FOR 
        SELECT sid, name, xstatus, password FROM master..sysxlogins 
        WHERE srvid IS NULL AND name <> 'sa'
    ELSE
      DECLARE login_curs CURSOR FOR 
        SELECT sid, name, xstatus, password FROM master..sysxlogins 
        WHERE srvid IS NULL AND name = @login_name
    OPEN login_curs 
    FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd
    IF (@@fetch_status = -1)
    BEGIN
      PRINT 'No login(s) found.'
      CLOSE login_curs 
      DEALLOCATE login_curs 
      RETURN -1
    END
    SET @tmpstr = '/* sp_help_revlogin script ' 
    PRINT @tmpstr
    SET @tmpstr = '** Generated ' 
      + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */'
    PRINT @tmpstr
    PRINT ''
    PRINT 'DECLARE @pwd sysname'
    WHILE (@@fetch_status <> -1)
    BEGIN
      IF (@@fetch_status <> -2)
      BEGIN
        PRINT ''
        SET @tmpstr = '-- Login: ' + @name
        PRINT @tmpstr 
        IF (@xstatus & 4) = 4
        BEGIN -- NT authenticated account/group
          IF (@xstatus & 1) = 1
          BEGIN -- NT login is denied access
            SET @tmpstr = 'EXEC master..sp_denylogin ''' + @name + ''''
            PRINT @tmpstr 
          END
          ELSE BEGIN -- NT login has access
            SET @tmpstr = 'EXEC master..sp_grantlogin ''' + @name + ''''
            PRINT @tmpstr
          END
        END
        ELSE BEGIN -- SQL Server authentication
          IF (@binpwd IS NOT NULL)
          BEGIN -- Non-null password
            EXEC sp_hexadecimal @binpwd, @txtpwd OUT
            IF (@xstatus & 2048) = 2048
              SET @tmpstr = 'SET @pwd = CONVERT (varchar(256), ' + @txtpwd + ')'
            ELSE
              SET @tmpstr = 'SET @pwd = CONVERT (varbinary(256), ' + @txtpwd + ')'
            PRINT @tmpstr
    	EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
            SET @tmpstr = 'EXEC master..sp_addlogin ''' + @name 
              + ''', @pwd, @sid = ' + @SID_string + ', @encryptopt = '
          END
          ELSE BEGIN 
            -- Null password
    	EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
            SET @tmpstr = 'EXEC master..sp_addlogin ''' + @name 
              + ''', NULL, @sid = ' + @SID_string + ', @encryptopt = '
          END
          IF (@xstatus & 2048) = 2048
            -- login upgraded from 6.5
    
            SET @tmpstr = @tmpstr + '''skip_encryption_old''' 
          ELSE 
            SET @tmpstr = @tmpstr + '''skip_encryption'''
          PRINT @tmpstr 
        END
      END
      FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd
      END
    CLOSE login_curs 
    DEALLOCATE login_curs 
    RETURN 0
    GO
     ----- End Script -----
    
    

  2. Setelah stored procedure sp_help_revlogin dibuat, jalankan procedure sp_help_revlogin dari Quert Analyzer pada server sumber. Stored procedure sp_help_revlogin dapat digunakan pada SQL Server 7.0 dan SQL Server 2000. Keluaran stored procedure sp_help_revlogin adalah script login untuk membuat login dan password dengan SID asli. Simpan keluaran, dan kemudian paste dan jalankan pada Query Analyzer SQL Server tujuan. Contoh:
    EXEC master..sp_help_revlogin
    
Sampai sejauh ini proses pemindahan login dan password berjalan lancar. Informasi lebih jauh dapat dilihat pada http://support.microsoft.com/kb/246133/ 
Posted by cahnom | 0 Comments
Filed under:
More Posts Next page »