January 2008 - Posts

Software Enterpreneurship Conference photos

These are photos when i'm in software enterpreneurship conference at BlitzMegaplex.

DSC06179  DSC06170

Tim penggembira dari Microsoft. :)

DSC06114  DSC06115

Risman Adnan, ISV Lead Microsoft Indonesia talking something secret with me. :)

DSC06121  DSC06125

In action.

DSC06132 DSC06130

The audiences.

DSC06119

In the middle is Mr. Rhenald Kasali, the main speaker. In the right side is Mr. Jonah Stephen from Microsoft Indonesia.

DSC06105

It's me. :)

Share this post: | | | |
Posted by agung | 4 comment(s)
Filed under:

Face Recognition

Mengikuti jejak mas Reza disini, saya coba post face recognition juga nih. Hehehe.

wife1

wife2

Who are they ? Just guess ...

:)

Note: Tapi sepertinya yang ditengah jauh lebih cantik dari wajah-wajah yang mengelilinginya tuh. Hihihihi.

Share this post: | | | |
Posted by agung | 2 comment(s)
Filed under:

Ajax View: Remotely Monitoring Web 2.0 Applications

The goal of the Ajax View project is to improve developer's visibility into and control over their web applications' behaviors on end-user's desktops.

The Ajax View approach is to insert a server-side proxy (or web server plugin) in-between the web server machines and the end-user's browser. This proxy captures the web application's JavaScript code as it is being sent to a browser and rewrites the code to insert extra instrumentation code. The injected instrumentation code runs with the rest of the web application inside the end-user's browser and can capture performance, call graph, application state and user interaction information, providing visibility directly into the last hop of the user's experience.

Check this out : http://research.microsoft.com/projects/ajaxview/

You can download it here.

Note:
As an alternative, you can use Fiddler (
http://www.fiddler-tool.com) or Web Development Helper (http://projects.nikhilk.net/Projects/WebDevHelper.aspx) or Burp Proxy (http://www.portswigger.net/proxy ).

Share this post: | | | |
Posted by agung | with no comments
Filed under:

iMulai - Software Enterpreneurship Conference

Bersama ini, kami dari tim pelaksana iMULAI (Microsoft dan SENADA) mengundang para anggota program iMULAI untuk menghadiri acara ‘Software Enterpreneurship Conference’ yang akan diselenggarakan pada:

Hari/Tanggal       :  Kamis/24 Januari 2008
Waktu               :  08.00 – 11.30 
Tempat              :  Blitz Megaplex, Pacific Place
                            Sudirman Central Business District  (SCBD)                        
                            Jl. Jenderal Sudirman
                            Jakarta 12190, Indonesia

Adapun agenda acara adalah sebagai berikut:

08:00     Registrasi
08:15     Opening keynote oleh Caesar Layton, SENADA
08:30     Opening keynote oleh Jonah Stephen, Microsoft
08:45     “Be Enterpreneur, Be Rich”  oleh Rhenald Kasali       
09:30     “Meet the Real ISV Role Model
10:15     “ISV: The Path for Enterpreneurship
11:00     Penutupan dan Makan Siang
11:30     Pertunjukan Theatre

Karena keterbatasan tempat, berlaku aturan ‘first-come-first-served’, oleh karena itu DAFTARKAN DIRI ANDA SEKARANG JUGA!

Untuk mendaftar, kirimkan email ke: event@imulai.com dengan mencantumkan: nama, institusi (apabila ada), nomor telp./HP yang dapat dihubungi, username iMULAI dan data lainnya.

Tambahkan event@imulai.com pada contact Windows/MSN/Live Messenger anda untuk dapat melakukan ‘chat’ apabila anda membutuhkan informasi lainnya mengenai acara ini.

See you there !

MC : Me (jika tidak ada perubahan agenda dari Microsoft Indonesia). Sst, this is the first time i become MC (master of ceremony). But since this is talk about enterpreneurship so there is nothing to worry about what should i have to speak. :)

 

Share this post: | | | |
Posted by agung | 5 comment(s)
Filed under:

.NET 3.5 Clinic - Silverlight presentation and demos

Seperti yang saya janjikan kemarin, hari ini saya publish materi presentasi Silverlight dan demo kode. Sebenarnya awalnya saya tidak ingin menggunakan model presentasi, pengennya sih ngobrol dan kita solving case saja. Akan tetapi mengingat peserta yang datang 99% belum pernah code menggunakan Silverlight ya akhirnya harus menjelaskan dari awal.

Untuk menjelaskan dari awal, slide dan demo yang menurut saya paling cocok adalah slide dari Scott Guthrie. Meski demikian, saya berikan beberapa penambahan yang sesuai dengan karakteristik yang sekarang. Seperti misalnya, saya tambahkan dukungan ADO .NET Data Service. Yakni bagaimana Silverlight bisa mengkonsumsi ADO .NET Data Service selain tentu saja Web Service. ADO .NET Data Service dulu memiliki code name "Astoria". Dan tidak lupa hal yang sangat mendasar yakni bagaimana cara memahami Silverlight project yang diintegrasikan ke dalam aplikasi ASP .NET Anda.

  Slide

Berikut ini adalah apa yang saya sampaikan di .NET Clinic tanggal 17 Januari 2008 :

  • Silverlight + .NET Overview
  • Getting Started
  • XAML
  • Shapes
  • Controls
  • Layout
  • Brushes and Transforms
  • Events and Code
  • Building Custom Controls
  • HTML and Script Integration
  • File Open Dialog
  • HTTP Network Access
  • Web Services
  • ADO .NET Data Services - NEW
  • Isolated Storage

Pertama, bukalah Visual Studio 2008 Anda. Klik File --> New Project. Pilih "Silverlight Project" dari template yang ada. Saya menggunakan bahasa Visual C#. Berilah nama "SilverlightDemos". Setelah itu buatlah sebuah website baru bertipe "ASP .NET 3.5 Extensions Web Site" dari template yang tersedia, beri nama "SilverlightWebDemos". Jadi, sekarang Solution Explorer Anda berisi 2 project yakni :

  1. Silverlight Project bernama "SilverlightDemos"
  2. ASP .NET 3.5 Extensions bernama "SilverlightWebDemos"

Part I - Bekerja dengan SilverlightWebDemos

Klik pada "SilverlightWebDemos", lalu klik kanan dan pilih "Add New Item".

01

Dari template yang ada, pilih "ADO .NET Entity Data Model". Beri nama "Northwind.edmx". Saya akan menggunakan database Northwind sebagai contoh.

02

Sesaat akan tampil pesan seperti di bawah ini, klik Yes saja. Anda pasti tahu maksudnya bukan ? :)

03

Setelah klik Yes, kemudian akan ditampilkan "Entity Data Model Wizard". Lalu pilih "Generate from database" dan klik tombol Next.

04

Isikan koneksi string database Northwind yang ada pada komputer Anda. Kemudian klik tombol Next.

05

Pilihlah "Database Objects" yang ingin Anda sertakan di dalam ADO .NET Entity Data Model. Saya hanya memilih "Tables" saja. Hilangkan centang pada Views dan Stored Procedure. Lalu klik Finish.

06

Tunggulah beberapa saat. Setelah itu Visual Studio akan menampilkan struktur ADO .NET Entity Data Model untuk database Northwind Anda sebagai berikut :

07

Ok. Semua sudah dilakukan dengan baik. Yang Anda lihat sebenernya representasi code yang ditampilkan secara visual. Di belakang layar, Anda sudah dibuatkan class-class yang berhubungan dengan table yang Anda letakkan di dalam ADO .NET Entity Data Model.

Langkah berikutnya adalah membuat ADO .NET Data Service pada aplikasi web Anda agar dapat diconsume oleh Silverlight.

Klik kanan kembali pada project website Anda. Lalu pilih "Add New Item".

01

Dari template yang ada, pilih "ADO .NET Data Service" dan beri nama "Northwind.svc" dan klik tombol Add.

08

Setelah itu akan ditampilkan halaman code sebagai berikut :

09

Perhatikan area yang saya beri warna merah. Itu adalah area tempat Anda menambahkan kode yang diperlukan agar ADO .NET Data Service dapat berfungsi dengan baik. Tambahkan kode berikut ini pada dua area merah tersebut :

10

11

NorthwindModel.NortwindEntities adalah class yang terbentuk saat Anda melakukan generate via ADO .NET Entity Model Wizard di langkah sebelumnya. Anda bisa melihatnya pada file web.config untuk lebih jelasnya. Sedangkan config.SetResourceContainerAccessRule() itu adalah method yang harus Anda panggil untuk membuat entity yang ada bisa Anda akses berdasarkan apa hak aksesnya (bisa All, AllRead, Write, dsb). Anda bisa mengacu pada dokumentasi ADO .NET Data Service untuk mendapatkan informasi yang lebih detail mengenai ini.

Setelah semua sudah diisi, simpanlah hasil perubahan Anda. Dan saatnya sekarang Anda mengkonsumsi service-nya melalui browser. Caranya adalah klik kanan pada file "Northwind.svc" lalu klik "View in Browser". Perhatikan address yang terbentuk. Nah, alamat inilah yang nanti akan kita butuhkan di project Silverlight kita sebagai sumber data.

12

Sesaat akan ditampilkan tampilan XML berformat ATOM.

  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
- <service xml:base="http://localhost:53980/SilverlightWebDemos/Northwind.svc/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" xmlns="http://www.w3.org/2007/app">
- <workspace>
  <atom:title>Default</atom:title>
- <collection href="Categories" mce_href="Categories">
  <atom:title>Categories</atom:title>
  </collection>
- <collection href="CustomerDemographics" mce_href="CustomerDemographics">
  <atom:title>CustomerDemographics</atom:title>
  </collection>
- <collection href="Customers" mce_href="Customers">
  <atom:title>Customers</atom:title>
  </collection>
- <collection href="Employees" mce_href="Employees">
  <atom:title>Employees</atom:title>
  </collection>
- <collection href="Order_Details" mce_href="Order_Details">
  <atom:title>Order_Details</atom:title>
  </collection>
- ... remove for brevity ...
  </workspace>
  </service>

Sekarang test-lah service Anda menggunakan beberapa URL sebagai berikut :

http://localhost:53980/SilverlighWebDemos/Northwind.svc/Products
http://localhost:53980/SilverlighWebDemos/Northwind.svc/Products(1)
http://localhost:53980/SilverlighWebDemos/Northwind.svc/Products(1)/Suppliers

Yes ! That's ADO .NET Data Services. Sekarang hanya melalui URL saja Anda bisa mendapatkan data yang jauh lebih mudah dibandingkan web service. :) Terakhir, pada project SilverlightWebDemos, klik kanan lalu pilih "Add Silverlight Link" dan arahkan pada "SilverlightDemos". That's it. Saat nanti Anda mem-build website atau Silverlight project-nya, maka otomatis library hasil compile terbaru dari Silverlight project itu akan secara otomatis di-copy-kan ke website-nya.

Part II

Sekarang klik pada SilverlightDemos, lalu tambahkan sebuah folder baru bernama "10_Astoria". Ini hanyalah penamaan saja, saya hanya mengurutkan dari sample demo yang dibuat oleh Scott Guthrie. Demo file dari Scott Guthrie tidak menyertakan ADO .NET Data Services, jadi saya lengkapi. :)

Desain Silverlight yang saya buat tidak neko-neko, cuku sebuah TextBlock saja yang nanti akan me-retrieve data dari server menggunakan ADO .NET Data Service. Ya, Anda bisa memodifikasi dengan lebih baik lagi menggunakan Expression Blend untuk menghasilkan desain UI yang lebih intuitive dan interaktif.

Klik kanan pada folder "10_Astoria" lalu pilih "Add New Item" dan dari template yang ada lalu klik "Silverlight" dan klik "Silverlight Page". Beri nama "AstoriaTest.xaml".

13

Sesaat kemudian akan terbentuk file AstoriaTest.xaml di folder "10_Astoria". Perhatikan pada code .xaml yang dihasilkan, lalu tambahkan TextBlock sehingga seperti di bawah ini :

<Canvas x:Name="parentCanvas"
        xmlns="http://schemas.microsoft.com/client/2007"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Loaded="Page_Loaded"
        x:Class="SilverlightDemos._10_Astoria.AstoriaTest;assembly=../ClientBin/SilverlightDemos.dll"
        Width="640"
        Height="480"
        Background="White"
        >
    <TextBlock x:Name="txtResult" FontFamily="Tahoma" FontSize="16"></TextBlock>
</Canvas>

Adapun x:Name itu padanannya jika di ASP .NET adalah ID. Artinya nanti Anda bisa mengacu referensi TextBlock itu menggunakan pola txtResult.[member]. Masuklah ke code behind dari AstoriaTest.xaml tersebut, lalu isilah dengan kode berikut ini :

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

using Microsoft.Data.WebClient;

namespace SilverlightDemos._10_Astoria {
    public class Region {
        public int RegionID { get; set; }
        public string RegionDescription { get; set; }
    }

    public partial class AstoriaTest : Canvas {
        public void Page_Loaded(object o, EventArgs e) {
            // Required to initialize variables
            InitializeComponent();

            WebDataContext context = new WebDataContext("http://localhost:53980/SilverlightWebDemos/Northwind.svc");

            WebDataQuery<Region> regions = context.CreateQuery<Region>("/Region?$orderby=RegionDescription");

            foreach(Region reg in regions) {
                txtResult.Text += reg.RegionDescription.Trim() + Environment.NewLine;   
            }
        }

    }
}

Perhatikan yang saya cetak tebal pada kode tersebut.

Bagian pertama saya membuat local class bernama Region agar bisa saya put sebagai tipe data untuk class collection WebDataQuery<T> agar Silverlight saya dapat mengkonsumsi ADO .NET Data Services sebagai sumber datanya dengan cara yang lebih mudah. Saya menggunakan library yang disediakan oleh Microsoft agar Silverlight dapat mengakses ADO .NET Data Service. Library tersebut ada di dalam assembly "Microsoft.Data.WebClient". Dan perlu Anda ketahui bahwa ada 2 versi assembly ini yakni "Microsoft.Data.WebClient" yang terdapat pada folder "C:\Program Files\Reference Assemblies\Microsoft\Framework\ASP.NET 3.5 Extensions" dan library sebagai SilverlightAddsOn yang di download terpisah khusus untuk Silverlight. Namanya sama-sama "Microsoft.Data.WebClient", tetapi berbeda pada versioning. Khusus untuk Silverlight, Anda tidak bisa menggunakan library yang berada di dalam folder "C:\Program Files\Reference Assemblies\Microsoft\Framework\ASP.NET 3.5 Extensions", tetapi harus mendownload secara terpisah dari sini.

Setelah itu compile-lah Silverligh project Anda. Secara otomatis, struktur folder dan file-file presentation layer serta .DLL yang dihasilkan akan dicopy-kan ke website Anda. Dan sekarang Silverlight Anda sudah bisa mengkonsumsi ADO .NET Data Service. Perlu dicatat bahwa saat ini Silverlight belum mengizinkan pemanggilan lintas domain (cross domain), jadi artinya setelah Anda buat code tersebut di Silverlight project, maka silverlight host-nya harus Anda buat lagi di website-nya. Anda tidak bisa langsung menjalankannya dari Silverlight project baik melalui View in Browser maupun Build. Sintaks javascript untuk memanggil Silverlight plug-in harus Anda buat di dalam website yang berisi ADO .NET Data Service ini.

Kombinasi antara ADO .NET Entity Data Model dan ADO .NET Data Service sangat mempercepat waktu development dan sangat fleksibel. Meski demikian, pendekatan dalam bekerja dengan ADO .NET Data Service bisa juga menggunakan custom business object, tidak melulu ADO .NET Entity Data Model. Kata "Data" pada "Data Service" tidak melulu identik dengan "Database". Itu bisa berarti ANY DATA !. ADO .NET Data Service bekerja dengan semua tipe-tipe yang mengimplementasikan IQueryable<T>. Artinya juga Anda bisa membuat dengan pendekatan LINQ to SQL karena DataContext yang dihasilkannya mengexpose individual entities sebagai turunan dari tipe Table<T> yang juga mengimplementasikan IQueryable<T>. Coba perhatikan pada bagian ini :

public class Northwind : WebDataService<NorthwindModel.NorthwindEntities>

Dan lakukan sedikit reflection pada WebDataService, maka kita akan tahu bahwa class yang dia tangkap haruslah bersifat IQueryable<T>. Artinya bisa saja Anda menggunakan pendekatan seperti ini (misal) :

// Single entity for Employee object
public class Employee {
    public int EmployeeId { get; set; }
    [DataWebKey]
    public string EmployeeName { get; set; }

    public Employee(int employeeId, string employeeName) {
        EmployeeId = employeeId;
        EmployeeName = employeeName;
    }
}

public class EmployeeContainer {
    private List<Employee> _employees;

    private EmployeeContainer() {
        _employees = new List<Employee> { new Employee(1, "Agung Riyadi"),
                                                               new Employee(2, "Akbar Putra Riyadi"),
                                                               new Employee(3, "Mentari Ayu"),
                                                               new Employee(4, "Bayu Aji Putra Riyadi")
                                                             };
    }

    public IQueryable<Employee> Employees {
        get { return _employees.AsQueryable(); }
    }
}

Dan Anda memanggil pada ADO .NET Data Service sebagai berikut :

public class Northwind : WebDataService<EmployeeContainer>

Cool yah !

:)

Note:

Mohon maaf untuk attachmentnya, saya selalu gagal untuk upload. Jadi, yang berminat bisa lewat jalur pribadi, posting email Anda di halaman ini via comment, atau bisa mengunduh langsung dari situs Scott Guthrie. Khusus yang lewat jalur pribadi dan comment maka saya akan kirimkan saja via email slide presentasi + demo-nya.

Share this post: | | | |
Posted by agung | 8 comment(s)

Creating DNN Text Editor programatically

I have a lot of question from people who asking me about "How to create DotNetNuke Text Editor programmatically". DNN module developer are confuse to do that because there is no documentation about it. Honestly .. not yet. :)

So far, the easiest way is to do like this :

            DotNetNuke.UI.UserControls.TextEditor te = new DotNetNuke.UI.UserControls.TextEditor();
            te.Width = Unit.Pixel(400);
            te.Height = Unit.Pixel(200);
            te.Text = "this is some text";
            ph1.Controls.Add(te);

Note: ph1 is PlaceHolder control. The DotNetNuke Text Editor will be injected to PlaceHolder and then set it's properties.

But if you do that, you will receive this message : "object not set to an instance of an object"

Even if you use this technique :

            UserControl uc = (UserControl)this.LoadControl("~/controls/texteditor.ascx");
            DotNetNuke.UI.UserControls.TextEditor te = (DotNetNuke.UI.UserControls.TextEditor)uc;
            te.Width = Unit.Pixel(400);
            te.Height = Unit.Pixel(200);
            te.Text = "this is some text";
            ph1.Controls.Add(te);

You will receive same error message which indicating that the object is not set to an instance of an object.

If you search across DotNetNuke forums or from forums.asp.net, you will got - almost - no answer (or maybe hard to find the solution).

Actually, the answer is simple. You can do it with two lines of code. Watch me.

            DotNetNuke.UI.WebControls.DNNRichTextEditControl te = new DotNetNuke.UI.WebControls.DNNRichTextEditControl();
            te.Value = "this is some text";
            ph1.Controls.Add(te);

The solution is ... use DotNetNuke.UI.WebControls instead of DotNetNuke.UI.UserControls !

It's more easier and make your headache gone forever. :)

Cheer !

Share this post: | | | |
Posted by agung | with no comments
Filed under:

People, we have new MVPs

Yes, that's true !

Here’s a warm welcome to all new and returned MVPs for the January 2008 award cycle!

  1. Rahmat Zikri - Windows Server System - Exchange Server
  2. Ridi Ferdiana - Visual Developer - Client Application Development
  3. Faisal Susanto - Windows Server System - Infrastructure Architect
  4. Raymond Engelbert - Windows Server System - Exchange Server
  5. Hendra Eka Putra - Windows Server System - SQL Server

Congratulation !

Share this post: | | | |
Posted by agung | 4 comment(s)