Subscribe RSS Join our Facebook Group Follow us on Twitter!
in Search

Jeffrey Hermanto Halimsetiawan's Blog

January 2011 - Posts

  • Petualangan Aksara di Tanah Jawa for Web

    Sebelumnya Petualangan Aksara di Tanah Jawa untuk Windows Phone 7 telah dikembangkan dengan Silverlight for Windows Phone untuk berpartisipasi pada Windows Phone 7 Challenge. Namun, masih banyak orang yang belum memiliki device Windows Phone 7 sehingga tidak semua orang dapat menikmati PAJ for WP7. Oleh karena itu, berawal dari sekedar coba-coba Petualangan Aksara di Tanah Jawa (PAJ) for Web ini juga turut dikembangkan. Karena dasar dari keduanya sama-sama menggunakan Microsoft Silverlight, perubahan-perubahan yang dilakukan tidak terlalu banyak. Beberapa penyesuaian yang harus dilakukan, antara lain:

    • Perubahan Resolusi
    • Perubahan dari PhoneApplicationPage menjadi UserControl
    • Perubahan Navigasi yang harus mengakomodasi tombol "Back"
    • Perubahan PanoramaPage pada Windows Phone 7
    • Sedikit Perubahan pada Storyboard karena adanya perubahan ukuran pada beberapa Image menyesuaikan dengan perubahan resolusi

    Penyesuaian tersebut sebenarnya mudah, namun cukup merepotkan juga karena harus dilakukan pada seluruh UserControl. Jika tertarik untuk memainkan game sederhana ini, silahkan memainkannya di bawah ini untuk sekedar mengisi waktu luang anda namun pastikan bahwa web browser yang digunakan telah terinstall Silverlight Plug-in. Selamat menikmati!

    346 Views, 1 Comment(s), Published on: 01-29-2011 10:51 by jeffrey to Jeffrey Hermanto Halimsetiawan's Blog
    | More
    Filed under: ,
  • Petualangan Aksara di Tanah Jawa for WP7

    Petualangan Aksara di Tanah Jawa (PAJ) adalah sebuah game pada Windows Phone 7 yang memadukan unsur budaya dan teknologi. PAJ for WP7 ini hadir untuk melengkapi versi desktop dari PAJ terdahulu yang memanfaatkan teknologi Flash Multipoint. PAJ tidak hanya mengedepankan faktor fun saja, tetapi juga memberikan unsur edukasi tentang Aksara Jawa kepada penggunanya. Cara bermain yang sederhana namun menarik sangat sesuai bagi pengguna ponsel. Pemain hanya perlu menjawab terjemahan dari urutan Aksara Jawa yang ditampilkan, dan apabila semua urutan telah terjawab dengan benar maka pemain harus melakukan konfirmasi jawaban pada waktu yang tepat. Jika pemain merasa kesulitan tentang cara bermain PAJ ataupun Aksara Jawa, PAJ menyediakan fitur Tutorial dan Help bagi pemain. Selain itu, tampilan antarmuka yang memikat dan kental dengan unsur budaya Indonesia memberikan nuansa bermain yang baru. PAJ juga memberikan unsur kompetitif kepada pemainnya dengan adanya fitur Highscore yang mencatat nilai seluruh pemain PAJ pada server sehingga pemain akan merasa penasaran dan ketagihan untuk mengalahkan skor temannya. Game ini berpartisipasi pada Windows Phone 7 Challenge – Indonesia.

    Selamat menikmati.

  • Switch UserControl pada Windows Presentation Foundation

    Pada pembangunan aplikasi dengan menggunakan Windows MultiPoint Mouse SDK, developer hanya dimungkinkan untuk menggunakan sebuah Window yang dapat dikenai multipoint event. Oleh karena itu, beberapa kelas UserControl digunakan untuk mengimplementasikan rancangan antarmuka aplikasi. Agar perpindahan antar UserControl berjalan smooth, hal tersebut dapat dilakukan dengan mengimplementasikan beberapa pattern, yaitu: mediator, state, dan singleton. Berikut adalah langkah-langkahnya:

    1. Pilih menu bar File – New – Project
    2. Pilih Windows MultiPoint Mouse SDK pada Project types dan Multipoint Application template projectimage
    3. Tambahkan kelas HostManager pada project yang berperan sebagai mediator dari seluruh UserControl yang ada. image
    4. Tambahkan kelas BaseHost pada project yang merupakan turunan dari kelas UserControl dan induk dari semua UserControl yang akan dibuat. Kelas BaseHost dan turunannya merupakan penerapan dari pattern state.image
    5. Implementasikan kelas HostManager yang telah ditambahkan menjadi turunan dari kelas Grid dan memiliki asosiasi ke kelas BaseHost.
        1: /// <summary>
        2: /// Kelas yang berperan sebagai mediator
        3: /// Author: Jeffrey Hermanto Halimsetiawan
        4: /// </summary>
        5: public class HostManager : Grid
        6: {
        7:     /// <summary>
        8:     /// Current Host
        9:     /// </summary>
       10:     private BaseHost _currentHost;
       11: 
       12:     public HostManager()
       13:     {
       14:         
       15:     }
       16: 
       17:     /// <summary>
       18:     /// Changes the host.
       19:     /// </summary>
       20:     /// <param name="newHost">The new host.</param>
       21:     public void ChangeHost(BaseHost newHost)
       22:     {
       23:         Children.Remove(_currentHost);
       24:         _currentHost = newHost;
       25:         Children.Add(_currentHost);
       26:     }
       27: 
       28:     /// <summary>
       29:     /// Exits the application.
       30:     /// </summary>
       31:     public void ExitApplication()
       32:     {
       33:         Application.Current.Shutdown();
       34:     }
       35: }
    6. Implementasikan kelas BaseHost yang memiliki asosiasi yang merupakan turunan dari UserControl dan memiliki asosiasi ke HostManager. Sebenarnya, BaseHost merupakan kelas abstrak yang tidak dapat diinstansiasi tetapi BaseHost tidak dijadikan kelas abstrak agar kelas turunan dari BaseHost dapat menampilkan Designer View.
        1: /// <summary>
        2: /// Author: Jeffrey Hermanto Halimsetiawan
        3: /// </summary>
        4: public class BaseHost : UserControl
        5: {
        6:     private HostManager _owner;
        7: 
        8:     public BaseHost()
        9:     {
       10: 
       11:     }
       12: 
       13:     public BaseHost(HostManager owner)
       14:     {
       15:         _owner = owner;
       16:     }
       17: 
       18:     /// <summary>
       19:     /// Gets or sets the owner.
       20:     /// </summary>
       21:     /// <value>The owner.</value>
       22:     protected HostManager Owner
       23:     {
       24:         get { return _owner; }
       25:         set { _owner = value; }
       26:     }
       27: }
    7. Tambahkan sebuah kelas MenuHost yang merupakan turunan dari BaseHost dan memiliki sebuah MultipointButton dengan XAML sebagai berikut:
        1: <ucs:BaseHost x:Class="UserControlSwitcher.MenuHost"
        2:     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        3:     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        4:     xmlns:ucs="clr-namespace:UserControlSwitcher"
        5:     xmlns:mp="clr-namespace:Microsoft.Multipoint.Sdk.Controls;assembly=Microsoft.Multipoint.Sdk.Controls"
        6:     Height="300" Width="300">
        7:     <Grid>
        8:         <mp:MultipointButton Height="53" VerticalAlignment="Top" Margin="51,45,56,0" Name="mpbClick">
        9:             Click
       10:         </mp:MultipointButton>
       11:     </Grid>
       12: </ucs:BaseHost>
       13: 
    8. Implementasikan pattern singleton pada kelas yang merupakan turunan dari BaseHost, yaitu: MenuHost karena pergantian UserControl yang sama saat aplikasi berjalan biasanya dilakukan berulang kali sehingga penerapan pattern singleton dapat mencegah memory leak.
        1: /// <summary>
        2: /// Author: Jeffrey Hermanto Halimsetiawan
        3: /// </summary>
        4: public partial class MenuHost : BaseHost
        5: {
        6:     private static MenuHost _instance;
        7: 
        8:     public MenuHost(HostManager owner)
        9:         : base(owner)
       10:     {
       11:         InitializeComponent();
       12:     }
       13: 
       14:     /// <summary>
       15:     /// Gets the instance.
       16:     /// </summary>
       17:     /// <param name="owner">The owner.</param>
       18:     /// <returns></returns>
       19:     public static MenuHost GetInstance(HostManager owner)
       20:     {
       21:         if (_instance == null)
       22:         {
       23:             _instance = new MenuHost(owner);
       24:         }
       25:         return _instance;
       26:     }
       27: }
    9. Implementasikan constructor pada kelas HostManager agar melakukan pergantian ke MenuHost.
        1: public HostManager()
        2: {
        3:     ChangeHost(MenuHost.GetInstance(this));
        4: }
    10. Tambahkan asosiasi ke HostManager pada kelas MultipointWindow.
        1: // <summary>
        2: /// Interaction logic for MultiPointWindow.xaml
        3: /// Author: Jeffrey Hermanto Halimsetiawan
        4: /// </summary>
        5: public partial class MultipointWindow : System.Windows.Window
        6: {
        7:     private HostManager _manager;
        8: 
        9:     /// <summary>
       10:     /// This window template uses MultiPoint SDK to support
       11:     /// multiple mice. Please refer SDK documentation to support
       12:     /// multiple instances of other devices.
       13:     /// </summary>
       14:     public MultipointWindow()
       15:     {
       16:         InitializeComponent();
       17:         _manager = new HostManager();
       18:         Content = _manager;
       19:         // Add handler to window loaded event where all multipoint
       20:         // initialization will happen
       21:         this.Loaded += new RoutedEventHandler(MultipointWindow_Loaded);
       22:     }
       23: 
       24:     /// <summary>
       25:     /// This is event handler for window "Loaded" Event.
       26:     /// All MultiPoint initialization should happen on this event.
       27:     /// </summary>
       28:     void MultipointWindow_Loaded(object sender, RoutedEventArgs e)
       29:     {
       30:         // initialize the MulitPoint system
       31:         MultipointSdk.Instance.Register(this);
       32:     }
       33: }
    11. Jika ingin menambahkan kelas UserControl yang lain, maka cukup mengulangi langkah 7 dan 8.

    Berikut adalah kelas diagram yang menunjukkan hubungan antar kelas pada project yang telah dibuat:image

    Berikut adalah hasil program ketika dijalankan:image

    Jika berminat, silahkan unduh solution dari program ini:

    Semoga bermanfaat :D

    299 Views, 1 Comment(s), Published on: 01-11-2011 12:26 by jeffrey to Jeffrey Hermanto Halimsetiawan's Blog
    | More
    Filed under: , ,
  • Membuat File Excel Berformat xlsx dengan Excel Package

    Pada blog post sebelumnya telah dibahas bagaimana cara untuk membaca data dari file Microsoft Office Excel berformat xls, terkait dengan adanya proses migrasi file Microsoft Office Excel ke format terbaru, yaitu: xlsx tentunya dibutuhkan suatu cara untuk membuat sebuah file berformat xlsx tersebut. Sebuah library bernama Excel Package menawarkan kemudahan untuk membuat dan membaca file Excel berformat xlsx.  Berikut adalah langkah-langkah untuk membuat sebuah file xlsx sederhana:

    1. Pada Microsoft Visual Studio 2010, buat New Project dengan Console Application template. image
    2. Pilih Add Reference dan tambahkan library ExcelPackage, yaitu: ExcelPackage.dll ke dalam project. image
    3. Definisikan sebuah method untuk membuat xlsx file.
    4.   1: /// <summary>
        2: /// Membuat sebuah xlsx file.
        3: /// </summary>
        4: private static void CreateXlsx()
        5: {
        6:     FileInfo file = new FileInfo(@"testfile.xlsx");
        7:     ExcelPackage xlsx = new ExcelPackage(file);
        8: 
        9:     FillData(xlsx);
       10:     SetDocumentProperties(xlsx);
       11:     //Menyimpan dalam bentuk xlsx file dengan nama file yang telah ditentukan
       12:     xlsx.Save();
       13: }
    5. Definisikan method FillData yang dipanggil di dalam method CreateXlsx untuk mengisi data pada worksheet.
    6.   1: /// <summary>
        2: /// Mengisi data pada sebuah file excel
        3: /// </summary>
        4: /// <param name="excel">The excel.</param>
        5: private static void FillData(ExcelPackage excel)
        6: {
        7:     int[] jerseyNumber = { 1, 3, 23, 5, 2, 22, 19, 15, 10, 17, 9 };
        8:     string[] player = { "Markus", "Zulkifli", "Hamka", "Maman", "Nasuha", "Ridwan", 
        9:                         "Bustomi", "Firman", "Okto", "Irfan", "Gonzales" };
       10:     ExcelWorksheet sheet = excel.Workbook.Worksheets.Add("Indonesia");
       11: 
       12:     sheet.Column(1).Width = 3;
       13: 
       14:     sheet.Cell(1, 1).Value = "No.";
       15:     sheet.Cell(1, 2).Value = "Pemain";
       16: 
       17:     for (int i = 0; i < jerseyNumber.Length; i++)
       18:     {
       19:         ExcelCell cellJersey = sheet.Cell(i + 2, 1);
       20:         cellJersey.Value = jerseyNumber[i].ToString();
       21: 
       22:         ExcelCell cellPlayer = sheet.Cell(i + 2, 2);
       23:         cellPlayer.Value = player[i];
       24:     }
       25: }
    7. Definisikan method SetDocumentProperties yang dipanggil di dalam method CreateXlsx untuk menentukan properti dari dokumen.
    8.   1: /// <summary>
        2: /// Men-set document properties.
        3: /// </summary>
        4: /// <param name="excel">The excel.</param>
        5: private static void SetDocumentProperties(ExcelPackage excel)
        6: {
        7:     excel.Workbook.Properties.Title = "AFF Cup";
        8:     excel.Workbook.Properties.Author = "Jeffrey Hermanto Halimsetiawan";
        9:     excel.Workbook.Properties.Company = "Microsoft Student Partners";
       10: }
    9. Panggil method CreateXlsx pada main.
    10.   1: static void Main(string[] args)
        2: {
        3:     CreateXlsx();
        4: }

    Berikut adalah hasil dari file Excel yang dibuat beserta document properties yang juga telah ter-update:image

    Selamat mencoba.