MVP Award

OLYMPUS DIGITAL CAMERA          

Pada bulan July 2009 saya mendapatkan kado istimewa berupa award Microsoft MVP (Most Valuable Professional) untuk bidang keahlian Visual Basic (https://mvp.support.microsoft.com/profile/erick).

MVP adalah penghargaan yang diberikan oleh Microsoft kepada para profesional bidang teknologi informasi (TI) atas keahlian dan kontribusi mereka terhadap komunitas TI. Penghargaan MVP diberikan oleh Microsoft kepada individu yang tidak hanya memiliki keahlian pada satu atau beberapa produk Microsoft, tetapi juga memberikan kontribusi yang signifikan serta berperan aktif dalam komunitas, baik secara offline maupun online. 

Terima Kasih kepada Teman-teman di Microsoft Indonesia, Komunitas INDC (Indonesia Developer Community) dan MUGI (Microsoft User Group) yang telah banyak membantu saya sehingga saya dapat memperoleh penghargaan yang cukup bergengsi ini.

Acara Seminar Technology Update di UNY

8220_1122963313638_1213743176_30328591_7334977_n

Pada tanggal 10 Oktober 2009 akan diadakan Seminar Technology Update di Universitas Negri Yogyakarta (UNY). Pada seminar tersebut saya mewakili MUGI (Microsoft User Group Indonesia) Jogja akan menyampaikan materi Pengenalan Kominitas MUGI dan Windows 7 for Developer menggunakan Windows7 CodePack API.

Hands On Labs ASP.NET MVC

Hari sabtu kemaren, tanggal 18 april 2009, saya mengisi workshop di Universitas Atmajaya Jogjakarta, topiknya adalah “ASP.NET MVC”, workshop singkat ini berlangsung selama 2.5jam (sesi 1) dan di teruskan sesi 2 tentang “Enterprise Library” oleh Pak Ridi.

Jika anda berminat anda dapat mendownload HOL dan source code dari workshop singkat yang saya bawakan kemaren pada link dibawah ini:

Semoga bisa bermanfaat untuk teman-teman yang ingin mencoba menggunakan aplikasi ASP.NET MVC :)

regards,

Erick Kurniawan

Fitur VB9 (LINQ to XML dan XML Literal)

Halo ini adalah posting kesebelas saya tentang fitur dari VB9
tentang XML Literal. Ini adalah fitur dari VB9 yang “cool”, pada VB9
XML menjadi “first class citizen” yang berarti anda dapat menuliskan
XML secara Literal.

anda dapat melihat posting saya sebelumnya:

Pada jaman dahulu kala (VB8) untuk membuat file XML anda harus menggunakan System.Xml untuk DOM manipulation, contoh kodenya:

   1: Imports System.IO
   2: Imports System.Xml
   3: Module Module1
   4:     Sub Main()
   5:         Using fs As New FileStream("produksample.xml", FileMode.Create)
   6:             Using wt As XmlWriter = XmlWriter.Create(fs)
   7:                 wt.WriteStartDocument()
   8:                 wt.WriteStartElement("Products")
   9:                 wt.WriteStartElement("Product")
  10:                 wt.WriteAttributeString("Id", "KB001")
  11:                 wt.WriteElementString("Name", "Laptop Acer")
  12:                 wt.WriteElementString("Price", "7000000")
  13:                 wt.WriteEndElement()
  14:                 wt.Flush()
  15:             End Using
  16:         End Using
  17:     End Sub
  18: End Module

kode diatas akan menghasilkan file “produksample.xml” sebagai berikut:

   1: <?xml version="1.0" encoding="utf-8"?>
   2: <Products>
   3:     <Product Id="KB001">
   4:     <Name>Laptop Acer</Name>
   5:     <Price>7000000</Price>
   6:     </Product>
   7: </Products>

LINQ to XML

Pada VB9 (.NET 3.5) anda dapat menuliskannya dengan cara yang baru. VB9 mendukung XElement
class yang terdapat pada namespace System.Xml.Linq, dengan menggunakan
cara penulisan ini code untuk pembuatan dokumen XML tampak menjadi
lebih “clean”. Class yang ada pada System.Xml.Linq adalah

Class Deskripsi
XAttribute Merepresentasikan attribut yang dibuat
XDocument Merepresentasikan Complete XML Tree
XElement Merepresentasikan XML Element, dan sebagai dasar untuk mengkonstruksi XML Tree
XName Merepresentasikan attribut dan element names
XNode Merepresentasikan base class dari XML Node

Untuk membuat dokumen xml seperti contoh sebelumnya dengan menggunakan XElement anda dapat menuliskan kode berikut:

   1: Imports System.Xml.Linq
   2: Module ContohXElement
   3:     Sub Main()
   4:         Dim xmlProd = New XElement("Products", _
   5:                           New XElement("Product", _
   6:                               New XAttribute("Id", "KB001"), _
   7:                               New XElement("Name", "Laptop Acer"), _
   8:                               New XElement("Price", "7000000")))
   9:         xmlProd.Save("xelementProd.xml")
  10:     End Sub
  11: End Module

XML Literal

VB9 juga menawarkan cara yang lebih simple dan clean selain
menggunakan XElement yaitu XML Literal, saat ini XML Literal hanya
disupport oleh VB9, C# 3.0 belum menssuport fitur ini (C# 4.0? Maybe
^_^). dengan XML Literal anda dapat menuliskan kode berikut:

   1: Imports System.Xml.Linq
   2: Module ContohXElement
   3:     Sub Main()
   4:         Dim xmlProd = <Products>
   5:                           <Product Id="KB001">
   6:                               <Name>Laptop Acer</Name>
   7:                               <Price>7000000</Price>
   8:                           </Product>
   9:                       </Products>
  10:         xmlProd.Save("literalprod.xml")
  11:     End Sub
  12: End Module

Anda juga dapat mengambil nilai dari attribute atau elemen dalam dokumen tersebut dengan iterasi

   1: Dim xmlProd = <Products>
   2:                   <Product Id="KB001">
   3:                       <Name>Laptop Acer</Name>
   4:                       <Price>7000000</Price>
   5:                   </Product>
   6:                   <Product Id="KB002">
   7:                       <Name>Laptop Toshiba</Name>
   8:                       <Price>9000000</Price>
   9:                   </Product>
  10:               </Products>
  11: For Each produk In xmlProd.<Product>
  12:     Console.WriteLine("Id {0}, Nama {1} dan harganya Rp.{2}", _
  13:                       produk.@Id, _
  14:                       produk.<Name>.Value, _
  15:                       produk.<Price>.Value)
  16: Next

Hasilnya:

image

Mudah ya? ^_^ jika kita perhatikan ketika anda melakukan iterasi
dokumen xml diatas, VS 2008 sudah cukup memberikan intellisense

image

namun intellisense tersebut tidak dapat menampilkan keterangan nama
elemen atau attribut yang ada pada dokumen XML yang anda buat, karena
IDE tidak memiliki informasi tentang XML Schema anda, untuk
menyelesaikan masalah ini anda dapat mengimports xml shema dari
dokumen. Caranya tambahkan XML Schema, cara yang paling mudah adalah
dengan menggunakan fitur pada VS 2008.

Tambahkan file xml yang sudah anda buat sebelumnya kedalam project,
kemudian buka dengan VS, pilih “Create Schema”. Copykan hasil schema
yang digenerate kedalam clipboard.

image

Tambahkan file XML Schema pada project, dan beri nama “ProdShema.xsd”.

image

Kemudian copykan hasil schema yang digenerate pada langkah
sebelumnya kedalam file “ProdShema.xsd”, jangan lupa untuk mengisi
atribut “targetNamespace”

image

Setelah itu kembali ke kode, dan anda dapat mengimports schema yang sudah anda buat.

image

Dengan begitu ketika anda mengetikan kode maka bantuan intellisense
akan lebih jelas karena dapat mengenali schema dari dokumen anda

image

wow programming xml dokumen jadi asik klo ada intellisense gini ^_^

Embedded Expression

Anda juga dapat menambahkan embedded expression dalam XML Literal,
jika anda pernah menggunakan ASP.NET pasti familiar dengan cara
penulisan embedded expression menggunakan keyword <%= %>. Contoh
penggunaannya.

   1: Imports System.Xml.Linq
   2: Module EmbeddedExpression
   3:     Sub Main()
   4:         Dim mahasiswa() = {New With {.Nim = "23082321", .Nama = "Erick", .Ipk = 3.5}, _
   5:                      New With {.Nim = "23082322", .Nama = "Bejo", .Ipk = 3.2}, _
   6:                      New With {.Nim = "23082323", .Nama = "Anton", .Ipk = 3.3}}
   7:         Dim xmlStudent = <Students>
   8:                              <%= From mhs In mahasiswa _
   9:                                  Select _
  10:                                  <Student Nim=<%= mhs.Nim %>>
  11:                                      <Nama><%= mhs.Nama %></Nama>
  12:                                      <Ipk><%= mhs.Ipk %></Ipk>
  13:                                  </Student> _
  14:                              %>
  15:                          </Students>
  16:         xmlStudent.Save("students.xml")
  17:         Console.WriteLine(xmlStudent.ToString())
  18:     End Sub
  19: End Module

jika dijalankan programnya akan menampilkan

image

Pada kode diatas kita menggenerate dokumen xml menggunakan nilai
yang diambil dari anonymous types yang sudah kita buat sebelumnya, anda
juga dapat menggenerate dokumen XML dengan data yang anda ambil dari
database, dll. Embedded Expression juga dapat digunakan untuk
menggenerate “VB View” secara dinamis pada ASP.NET MVC.

Selamat mencoba XML Literal dari VB9  ^_^

Fitur VB9 (LINQ Query)

Halo ini adalah posting kesepuluh saya tentang fitur dari VB9
tentang LINQ Query. LINQ (Language Integrated Query) adalah fitur yang
mensupport sintaks query pada general purpose programming language,
anda dapat melakukan query ke berbagai sumber data seperti object,
Database, XML, dll. Mungkin anda sudah sering melihat kode-kode LINQ di
C#, nah kali ini saya akan mencoba mencontohkan versi VB-nya :)

anda dapat melihat posting saya sebelumnya:

LINQ to Object / LINQ to Memory

Misal anda akan mengambil data dari object Array, anda dapat menuliskan kode:

Dim nilai() = {12, 34, 56, 11, 45, 66}
Dim query = From n In nilai _
            Where n Mod 2 = 0 _
            Select n
For Each bil In query
    Console.WriteLine(bil)
Next

query diatas akan mengembalikan bilangan yang genap, anda dapat menuliskannya dalam bentuk Lambda sebagai berikut:

Dim query = nilai.Where(Function(x) x Mod 2 = 0).Select(Function(x) x)
For Each bil In query
    Console.WriteLine(bil)
Next

Object yang dapat diquery dengan LINQ harus bertipe IEnumerable(Of
T), Select() dan Where() adalah Extension Method yang ditambahkan ke
IEnumerable(Of T), asal dari Select() dan Where() sebenarnya dari
System.Linq.Enumerable, aslinya anda dapat menuliskan:

Dim query = Enumerable.Select(Enumerable.Where(nilai, Function(x) x Mod 2 = 0), Function(x) x)
For Each bil In query
    Console.WriteLine(bil)
Next

LINQ to SQL

Selain query ke object, anda dapat juga melakukan query ke database
SQL Server, menggunakan OR Mapping tools yang bernama LINQ to SQL. ORM
digunakan untuk mapping dari database relational ke object. Misal anda
mempunyai database dengan nama MhsDb, kemudian dalam database tersebut
terdapat satu table dengan nama Mahasiswa dan fields berikut (nim
char(8) primary key, nama varchar(50), dan ipk float).

Pertama buat class dengan nama Mahasiswa.vb, kemudian mapping table Mahasiswa kedalam class:

Imports System.Data.Linq.Mapping
<Table(Name:="dbo.Mahasiswa")> _
Public Class Mahasiswa
    Private _nim As String
    <Column(IsPrimaryKey:=True)> _
    Public Property Nim() As String
        Get
            Return _nim
        End Get
        Set(ByVal value As String)
            _nim = value
        End Set
    End Property

    Private _nama As String
    <Column()> _
    Public Property Nama() As String
        Get
            Return _nama
        End Get
        Set(ByVal value As String)
            _nama = value
        End Set
    End Property

    Private _ipk As Single
    <Column()> _
    Public Property Ipk() As Double
        Get
            Return _ipk
        End Get
        Set(ByVal value As Double)
            _ipk = value
        End Set
    End Property
End Class

Anda dapat juga melakukan mapping secara otomatis menggunakan fasilitas “LINQ to SQL Class” atau “SQL Metal”.

Untuk mengakses data menggunakan LINQ to SQL kita harus membuat
object DataContext terlebih dahulu, kemudian ambil table yang akan kita
query

Imports System.Data
Imports System.Linq
Imports System.Data.Linq

Sub Main()

        Dim strConn = "Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=MhsDb;"
        Dim db As New DataContext(strConn)
        Dim tMahasiswa = db.GetTable(Of Mahasiswa)()

        Dim query = From m In tMahasiswa _
                    Select m

        For Each mhs In query
            Console.WriteLine(mhs.Nim & " " & mhs.Nama & " " & mhs.Ipk)
        Next
End Sub

LINQ Query Operator

Beberapa operator LINQ yang dapat digunakan adalah:

From : source dari query yang akan digunakan

From <tampung> [As<type>] In <source>

  • tampung berisi variable tampung yang akan digunakan dalam query
  • type berisi tipe data dari tampung (tapi tidak harus
    disebutkan karena vb akan secara otomatis menggunakan local type
    inference untuk menentukan tipenya). biasanya dapat berupa
    IEnumerable(Of T) atau IQueryable(Of T)
  • source berisi referensi ke object source, dapat berupa in-memory collection atau IQueryable(Of T) object

Select : mendefinisikan projection clause dalam query

Select <projection>

  • projection dapat berisi expression yang mengembalikan satu object,
    dapat juga berupa tampung dari From clause, atau object yang lebih
    kompleks.

[alias = ] <column>

  • anda juga dapat mendefinisikan alias (sifatnya optional),
    mengindikasikan nama dari property yang akan digenerate oleh anonymous
    type yang mewakili projection.
  • column mengacu ke fields atau property pada tampung, tapi dapat juga berupa expression yang lebih kompleks

Contoh:

'mencetak 9 8 7 6 5 4
Dim bil = From i In New Integer() {9, 8, 7, 6, 5, 4} Select i
For Each i In bil
    Console.WriteLine(i)
Next

'menghasilkan anonymous type {Dobel=2,Tripel=3},{Dobel=4,Tripel=6}
Dim bil2 = From i In New Integer() {1, 2} Select Dobel = 2 * i, Tripel = 3 * i
For Each i In bil2
    Console.WriteLine(i.Dobel & " " & i.Tripel)
Next

Order By : digunakan untuk mengurutkan hasil query

Order By <ordering> [Ascending] [Descending]

  • ordering berisi expression key yang digunakan untuk proses pengurutan

Contoh:

Dim mhs() = {New With {.Nim = "22081234", .IPK = 3.2}, _
             New With {.Nim = "23081235", .IPK = 3.5}, _
             New With {.Nim = "23081231", .IPK = 2.5}}
Dim query = From m In mhs Order By m.Nim Acending Order By m.IPK Select m.Nim, m.IPK
For Each m In query
    Console.WriteLine(m.Nim & " " & m.IPK)
Next

Distinct : melakukan filter terhadap nilai yang terduplikasi dari query

Contoh:

'menghasilkan 1 2 3 4
Dim bil = From i In New Integer() {1, 1, 1, 2, 3, 4} Select i Distinct
For Each b In bil
   Console.Write(b & " ")
Next

Skip dan Take: untuk memfilter range dari nilai hasil query

Take<number> : poisisi
Skip <number> : banyak nilai yang diambil

Contoh:

'menghasilkan 5,6 (ambil dari posisi ke 4 sebanyak 2 nilai)
Dim bil = From i In New Integer() {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} _
          Select i Skip (4) Take (2)
For Each b In bil
    Console.Write(b & " ")
Next

Aggregate : digunakan untuk operasi aggregation, contoh agregation

  • Count
  • Sum
  • Min
  • Max
  • Average

Aggregate <tampung> In <source> Into <aggregation list>

Contoh:

'penggunaan Sum
Dim tot = Aggregate i In (From i In New Integer() {1, 2, 3, 4, 5, 6} Select i) Into Total = Sum()
Console.WriteLine(tot)
'penggunaan Count
Dim jml = Aggregate i In (From i In New Integer() {1, 2, 3, 4, 5, 6} Select i) Into Jumlah = Count()
Console.WriteLine(jml)
'penggunaan Min
Dim min = Aggregate i In (From i In New Integer() {1, 2, 3, 4, 5, 6} Select i) Into Minimal = Min()
Console.WriteLine(min)
'penggunaan Average
Dim rata = Aggregate i In (From i In New Integer() {1, 2, 3, 4, 5, 6} Select i) Into Minimal = Average()
Console.WriteLine(rata)

Grouping : digunakan untuk membuat group berdasarkan group expression yang dibuat

Group By <key> Into Aggregate

Contoh:

Dim mhs() = {New With {.Nim = "22081234", .Jurusan = "TI", .IPK = 3.2}, _
             New With {.Nim = "23081235", .Jurusan = "SI", .IPK = 3.5}, _
             New With {.Nim = "23081231", .Jurusan = "SI", .IPK = 2.5}}
Dim query = From m In mhs Group By m.Jurusan Into Anggota = Group
For Each jur In query
   Console.WriteLine(jur.Jurusan)
   For Each m In jur.Anggota
       Console.WriteLine("- NIM :" & m.Nim & " IPK :" & m.IPK)
   Next
Next

Join : menggabungkan multiple source bersama berdasarkan kondisi join tertentu

Join <tampung> In <source> On <key1> equals <key2> and ….

Dim mhs() = {New With {.Nim = "22081234", .Jurusan = "TI", .IPK = 3.2}, _
             New With {.Nim = "23081235", .Jurusan = "SI", .IPK = 3.5}, _
             New With {.Nim = "23081231", .Jurusan = "SI", .IPK = 2.5}}

Dim kul() = {New With {.Kode = "IM2043", .Nama = "Web Database"}, _
             New With {.Kode = "IM2033", .Nama = "Rekayasa Web"}}

Dim ambil() = {New With {.Id = 1, .Kode = "IM2043", .Nim = "22081234"}, _
               New With {.Id = 2, .Kode = "IM2033", .Nim = "23081235"}, _
               New With {.Id = 3, .Kode = "IM2043", .Nim = "23081231"}}

Dim query = From m In mhs _
           Join a In ambil On m.Nim Equals a.Nim _
           Join k In kul On a.Kode Equals k.Kode _
           Select m.Nim, k.Nama

For Each hsl In query
       Console.WriteLine("Mahasiswa dengan Nim : " & hsl.Nim & " mengambil Matakuliah : " & hsl.Nama)
Next

demikian beberapa contoh penggunaan LINQ Query di VB9, untuk
contoh-contoh lebih detail tentang penggunaan LINQ (VB) akan dibahas di
posting2 selanjutnya, viva VB :)

Fitur VB9 (Lambda Expression)

Halo, setelah lama absen posting tentang VB kangen juga untuk
membahas fitur-fitur baru VB :), posting ini adalah posting kesembilan
saya tentang fitur dari VB9 yaitu Lambda Expression, Mungkin anda sudah
sering menggunakan Lambda Expression di C# 3.0, pada posting kali ini
akan ditunjukan juga beberapa perbedaan fitur di VB dan C#. 

anda dapat melihat posting saya sebelumnya:

Lambda Expression adalah istilah yang diambil dari functional
programming, Lambda Expression digunakan untuk memudahkan anda membuat
fungsi/method. contoh penulisan Lambda Expression

Function (e) e + 1

fungsi diatas mempunyai satu parameter e, dan mengembalikan e+1.

Untuk menunjukan penggunaan Lambda Expression pada VB, maka sebagai
contoh saya akan membuat array berisi integer dan memfilter yang
nilainya > 6 dengan Lambda Expression

Sub Main()
Dim arrBil() = {4, 5, 7, 9, 12, 3, 2}
Dim filter = arrBil.Where(Function(b) b > 5)
For Each i In filter
Console.WriteLine(i)
Next
End Sub

Lambda Expression dan Delegates

Lambda Expression dapat digunakan untuk mempermudah penggunaan delegates di VB. Tanpa Lambda anda dapat menuliskan:

'deklarasi delegates
Public Delegate Function UbahInt(ByVal x As Integer) As Integer

'buat fungsi yang akan ditunjuk oleh delegates
Function Gandakan(ByVal x As Integer) As Integer
Return x * 2
End Function

Kemudian buat instance delegates sebagai berikut

Sub Main()
Dim mydel As UbahInt = New UbahInt(AddressOf Gandakan)
Console.WriteLine("{0}", mydel(5))
End Sub

Maka program diatas akan mencetak 10.

Dengan menggunakan Lambda Expression anda dapat menuliskan :

Public Delegate Function UbahInt(ByVal x As Integer) As Integer
Sub Main()
Dim mydel As UbahInt = Function(x) x * 2
Console.WriteLine(mydel(5))
End Sub

Program diatas juga akan mencetak 10 sama dengan sebelumnya, tapi
dengan menggunakan Lambda Expression penambahan method menjadi lebih
mudah :)

Menggunakan Lambda dengan Dua Parameter

Anda juga dapat menggunakan Lambda dengan dua parameter, cara penulisannya:

'delegates dengan dua parameter
Public Delegate Function Kali(ByVal x As Integer, ByVal y As Integer) As Integer

'mencetak 5*6=30
Sub Main()
Dim mydel = Function(x, y) x * y
Console.WriteLine(mydel(5, 6))
End Sub

Anda juga dapat menggunakan Select() extension method dengan Lambda
Expression yang mempunyai dua parameter, parameter pertama untuk nilai
sedangkan parameter kedua untuk index

Dim nama() = {"erick", "wely", "sony", "ridi"}
Dim filter = nama.Select(Function(x, i) "Nama ke " + i.ToString() + " : " + x)
For Each i In filter
Console.WriteLine(i)
Next

jika program dijalankan akan mencetak:

image  

Statement Lambda Expression

VB9 belum mendukung Statement Lambda Expression seperti yang ada
pada C# 3.0, VB akan mensupport fitur ini pada versi VB10. Jika
menggunakan Statement Lambda Expression di C# anda dapat menuliskan:

//menggunakan Statement Lamda pada C# 
string[] nama = new[] { "erick","wely","sony","ridi","eriawan" };

foreach (string n in nama.Where(
x => {
if (x.Contains("eri"))
return true;
else
return false;
}
))

Console.WriteLine(n);

dengan VB9 anda dapat menghasilkan output yang sama dengan menuliskan kode sebagai berikut:

Function CekNama(ByVal nama As String)
If nama.Contains("eri") Then
Return True
Else
Return False
End If
End Function

Sub Main()
Dim nama() = {"erick", "wely", "sony", "eriawan"}
Dim filter = nama.Where(Function(x) CekNama(x))
For Each n In filter
Console.WriteLine(n)
Next
End Sub

maka akan dicetak output:

image 

happy coding ^_^