|
-
Beberapa waktu lalu pada acara Microsoft Technology Update Road Trip 2011 @iSTTS, saya menyampaikan materi tentang MultiPoint. Di tengah-tengah sesi, saya sempat melakukan live coding sederhana sesuai tradisi, Hello World untuk menunjukkan pada rekan-rekan iSTTS bahwa membuat aplikasi Multipoint sangatlah mudah. Berikut adalah langkah-langkah untuk memulainya: - Pilih File – New – Project pada Visual Studio 2010.
- Karena aplikasi multipoint dibangun pada Windows Presentation Foundation, pilih WPF Application pada template yang tersedia.
- Pada Solution Explorer lakukan klik kanan pada References dan pilih Add Reference.
- Pilih Microsoft.Multipoint.Sdk.Controls.dll dan Microsoft.Multipoint.Sdk.dll yang terdapat pada C:\Program Files\Windows MultiPoint Mouse SDK\Bin kemudian klik OK.
- Buka Design View dari MainWindows.xaml, kemudian tambahkan sebuah MultipointButton, MultipointTextBox dan TextBlock pada Grid.
- Tambahkan event handler Loaded pada Window bernama OnLoaded untuk melakukan inisialisasi dari objek MultipointSdk.
1: private void OnLoaded(object sender, RoutedEventArgs e)
2: {
3: MultipointSdk.Instance.Register(this);
4: }
- Tambahkan event handler MultipointClick pada MultipointButton bernama OnClick untuk melakukan aksi ketika terjadi penekanan button tersebut oleh pointer multipoint. Aksi yang dilakukan adalah menampilkan “Hello ”, text yang tertulis pada MultipointTextBox serta device id dari pointer yang melakukan klik pada button tersebut.
1: private void OnClick(object sender, RoutedEventArgs e)
2: {
3: MultipointMouseEventArgs args = (MultipointMouseEventArgs) e;
4: string deviceId = args.DeviceInfo.Id.ToString();
5: string text = string.Format("Hello {0}! Mouse ID: {1}",
6: multipointTextBox1.Text, deviceId);
7: textBlock1.Text = text;
8: }
- Sebaiknya ubah tampilan menjadi full screen untuk menghindari kebingungan pengguna yang tidak dapat melakukan klik pada control standard Windows. Namun, sementara ini cukup ubah WindowState menjadi Maximized untuk memudahkan.
Berikut adalah hasil screenshot dari aplikasi multipoint Hello World ini:
Jika berminat untuk mengunduh aplikasi Hello World ini silahkan diunduh:
Semoga bermanfaat.
|
-
Pendahuluan Pada hari Kamis tanggal 3 Maret 2011, MSP Regional Jawa Timur bekerja sama dengan Himpunan Mahasiswa Teknik Informatika iSTTS mengadakan acara Microsoft Technology Update Road Trip 2011 di Institut Sains Terapan dan Teknologi Surabaya. Tujuan utama dari acara ini adalah memberikan update mengenai teknologi terbaru dan pengenalan program-program akademik dari Microsoft. Pembicara dalam kegiatan ini, yaitu: Jeffrey Hermanto Halimsetiawan (MSP ITS), Reza Adhitya Saputra (MSP ITS), Taufan Ardhinata (MSP PENS-ITS) dan Julius Fenata (Academic Developer Advisor Microsoft Indonesia). Pelaksanaan - Hari / Tanggal : Kamis, 3 Maret 2011
- Waktu : 14.00 - 17.00 WIB
- Tempat : Ruang U401, iSTTS
Agenda Acara ini diawali dengan sesi pertama yang diisi oleh Jeffrey Hermanto Halimsetiawan (MSP ITS). Pada sesi ini dijelaskan mengenai asal mula teknologi MultiPoint, penerapan aplikasi MultiPoint, sekilas mengenai Windows MultiPoint Mouse SDK 1.5.1, membangun aplikasi Flash dengan memanfaatkan Microsoft MultiPoint SDK 1.1 dan diakhiri demo aplikasi flash multipoint bernama Petualangan Aksara di Tanah Jawa. Berikut adalah materi presentasi Multipoint: Kemudian materi tentang Augmented Reality with GoblinXNA dibawakan oleh Reza Adhitya Saputra (MSP ITS). Diawali dengan penjelasan singkat mengenai augmented reality, penjelasan mengenai GoblinXNA dan ALVAR, serta diakhiri dengan demo aplikasi yang menampilkan berbagai macam robot sesuai dengan marker yang tampil pada kamera.  Berikut adalah materi presentasi Augmented Reality: Materi selanjutnya dibawakan oleh Taufan Ardhinata (MSP PENS-ITS) mengenai Windows Phone 7. Penjelasan ini dimulai dari hardware dari Windows Phone 7 lalu Windows Phone 7 dari sisi consumer dan developer. Sesi ini diakhiri dengan demo aplikasi sederhana Hello World di emulator Windows Phone 7 dan game XNA di Windows Phone 7. Berikut adalah materi presentasi Windows Phone 7: Julius Fenata yang memberikan penjelasan mulai dari MSDN AA, Did You Know?, showcase aplikasi WPF, Silverlight, XNA dan Microsoft Surface dalam bentuk video serta Imagine Cup sebagai kompetisi IT terbesar di dunia. Sesi ini diselingi beberapa sesi tanya jawab kepada penonton yang disertai pembagian beberapa goodies kepada penonton yang bertanya. Acara ini diakhiri oleh demo langsung game Kinect Adventures dengan Microsoft Kinect oleh beberapa MSP yang kemudian dicoba secara langsung oleh beberapa peserta. Demo Kinect ini memperoleh antusias yang sangat besar dari penonton.  Berikut adalah beberapa foto yang menunjukkan antusiasme peserta acara ini. Semoga dengan adanya acara ini dapat menumbuhkan motivasi mahasiswa iSTTS untuk berkarya dengan menggunakan teknologi-teknologi terbaru Microsoft untuk berkompetisi dalam Imagine Cup 2012 tahun depan. Terima kasih kepada Himpunan Mahasiswa Teknik Informatika iSTTS yang telah membantu menyukseskan acara ini.
|
-
Kelas WebClient memungkinkan untuk melakukan pengambilan data dalam bentuk string dari suatu URL tertentu. Permasalahan terjadi ketika misalnya WebClient telah melakukan request ke alamat http://jeffrey.halimsetiawan.net/getHighscore.php untuk memperoleh daftar seluruh skor tertinggi, kemudian melakukan penambahan skor dengan melakukan request ke alamat http://jeffrey.halimsetiawan.net/addScore.php, lalu kembali melakukan request ke alamat http://jeffrey.halimsetiawan.net/getHighscore.php. Daftar skor tertinggi yang diperoleh dalam bentuk XML sebelum dan sesudah terjadi penambahan skor dalam running program yang sama akan menghasilkan XML sebelum terjadi penambahan skor. Hal ini disebabkan karena WebClient akan mengambil data dari cache apabila membuka URL yang sama dengan sebelumnya. Oleh karena itu, tips sederhana yang dapat dimanfaatkan adalah pemanfaatan GUID (Globally Unique Identifier) pada query string URL sebagai berikut: 1: //GUID menghasilkan 32 alphanumerik yang berbeda sehingga
2: //mencegah WebClient agar tidak mengambil data dari cache
3: string url = string.Format("{0}?{1}",
4: "http://jeffrey.halimsetiawan.net/getHighscore.php",
5: Guid.NewGuid().ToString());
6: WebClient downloader = new WebClient();
7: downloader.DownloadStringCompleted += new DownloadStringCompletedEventHandler(OnDownloaderDownloadStringCompleted);
8: downloader.DownloadStringAsync(new Uri(url));
Semoga bermanfaat.
|
-
Beberapa waktu yang lalu salah seorang teman saya meluncurkan sebuah API yang masih dalam tahap percobaan dari website miliknya bernama ongkir.info. Karena tertarik untuk mencobanya, saya mempelajari cara penggunaan API tersebut dan ternyata API tersebut menggunakan metode HTTP POST. Percobaan untuk memanfaatkan API tersebut pun mulai dilakukan. Kali ini, sebuah aplikasi sederhana yang menampilkan hasil query kota dengan data binding pada Windows Phone 7 akan dibuat. Langkah-langkah yang dilakukan antara lain: - Pilih New – Project.
- Pilih Silverlight for Windows Phone pada Installed Templates, kemudian pilih Windows Phone Application.
- Tambahkan sebuah ListBox yang diberi nama lbxQuery pada ContentPanel.
- Tambahkan sebuah TextBox sebagai input kriteria pencarian dan Button pada ContentPanel.
- Tambahkan event handler OnClick pada btnSearch ketika event Click dibangkitkan.
- Pilih Add Reference untuk menambahkan System.Xml.Linq.dll yang berguna untuk melakukan parsing XML ke dalam project.
- Lakukan pengiriman HTTP POST dengan memanfaatkan method UploadStringAsync dari kelas WebClient pada event handler OnClick yang telah ditambahkan.
1: private void OnClick(object sender, RoutedEventArgs e)
2: {
3: if (txtSearch.Text.Length == 0)
4: return;
5:
6: WebClient client = new WebClient();
7:
8: //URL dari API
9: string url = "http://api.ongkir.info/city/list";
10: //POST Parameter
11: StringBuilder parameter = new StringBuilder();
12: parameter.AppendFormat("{0}={1}&", "query", HttpUtility.UrlEncode(txtSearch.Text));
13: parameter.AppendFormat("{0}={1}&", "type", HttpUtility.UrlEncode("origin"));
14: parameter.AppendFormat("{0}={1}&", "courier", HttpUtility.UrlEncode("jne"));
15: //API Key sengaja disamarkan
16: parameter.AppendFormat("{0}={1}", "API-Key", HttpUtility.UrlEncode("xxxxxxx"));
17:
18: //Set header
19: client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
20: client.Headers[HttpRequestHeader.ContentLength] = parameter.Length.ToString();
21:
22: //menangani respon yang diberikan oleh server ketika menjalankan method UploadStringAsync()
23: client.UploadStringCompleted += new UploadStringCompletedEventHandler(OnUploadStringCompleted);
24: //melakukan UploadString dengan method POST secara asynchronous
25: client.UploadStringAsync(new Uri(url), "POST", parameter.ToString());
26: }
- Tambahkan event handler OnUploadStringCompleted yang bertugas melakukan parsing XML yang diterima ketika respon diperoleh karena proses pengunggahan dilakukan secara asynchronous.
1: private void OnUploadStringCompleted(object sender, UploadStringCompletedEventArgs e)
2: {
3: if (e.Error != null)
4: return;
5: //mengambil respons yang diperoleh
6: string response = e.Result;
7: //melakukan parsing XML dari string
8: XElement xmlFeed = XElement.Parse(response);
9:
10: //memperoleh kode status
11: var status = xmlFeed.Descendants("status").Elements<XElement>("code");
12:
13: if (Int32.Parse(status.First<XElement>().Value) == 0)
14: {
15: //memperoleh semua item kota yang ada
16: var cities = xmlFeed.Descendants("cities").Elements<XElement>("item");
17: var citiesString = from ItemFeed in cities
18: select ItemFeed.Value;
19: //melakukan data binding ke listbox
20: lbxQuery.ItemsSource = citiesString;
21: }
22: else
23: {
24: MessageBox.Show("Tidak ditemukan kota yang diawali dengan band.");
25: }
26: }
- Jalankan aplikasi sederhana ini.
Respon yang diterima dalam bentuk XML dari server ketika melakukan kriteria pencarian “ban” adalah sebagai berikut:
1: <xml>
2: <status>
3: <code>0</code>
4: <description>OK</description>
5: </status>
6: <cities>
7: <item>BANDAACEH</item>
8: <item>BANDARLAMPUNG</item>
9: <item>BANDUNG</item>
10: <item>BANJARMASIN</item>
11: </cities>
12: </xml>
13:
Berikut adalah hasil dari aplikasi yang berjalan:
Selamat mencoba.
|
-
Suatu game tentu tidak lengkap rasanya apabila tidak dilengkapi dengan musik yang mendukung. Jika suatu game dikembangkan dengan Silverlight for Windows Phone, framework tersebut telah menyediakan kemudahan untuk memutar file musik berformat mp3 dan wma melalui kelas MediaElement. Sayangnya, MediaElement harus ditambahkan sebagai UIElement pada antarmuka sehingga musik akan diputar kembali dari awal kembali saat terjadi perpindahan PhoneApplicationPage ke PhoneApplicationPage lainnya. Selain itu, dua objek MediaElement pada antarmuka yang sama tidak dapat memainkan musik secara bersamaan sehingga background music dan sound effect dari game juga tidak dapat berjalan bersamaan. Oleh karena itu, beberapa kelas yang terdapat pada framework XNA dalam Microsoft.Xna.Framework.dll dapat dimanfaatkan untuk memutar musik. Kelas MediaPlayer dan Song dalam Microsoft.Xna.Framework.Media dapat dimanfaatkan untuk memutar musik berformat mp3 dengan cara sebagai berikut: 1: Song song = Song.FromUri("pdgbulan", new Uri("Sounds/pdgbulan.mp3", UriKind.Relative)); 2: MediaPlayer.IsRepeating = true; 3: MediaPlayer.Play(song);
Sedangkan kelas SoundEffect dalam Microsoft.Xna.Framework.Audio dapat dimanfaatkan untuk memainkan efek suara berformat wav dengan cara sebagai berikut:
1: SoundEffect se = SoundEffect.FromStream(TitleContainer.OpenStream("Sounds/click.wav")); 2: se.Play();
Salah satu pendekatan sederhana yang dapat dilakukan untuk mengatur pemutaran background music dan sound effect adalah pembuatan suatu kelas singleton bernama SoundManager seperti di bawah ini:
1: /// <summary>
2: /// Kelas yang mengatur pemutaran musik dan sound effect
3: /// Author: Jeffrey Hermanto Halimsetiawan
4: /// </summary>
5: public class SoundManager
6: {
7: #region Constant
8:
9: private const string NormalBgm = "gundhul";
10: private const string GameBgm = "pdgbulan";
11:
12: #endregion
13:
14: #region Variable
15:
16: private bool _isMute;
17:
18: private static SoundManager _instance;
19:
20: private string _lastBgm = string.Empty;
21:
22: #endregion
23:
24: #region Constructor
25:
26: private SoundManager()
27: {
28: _isMute = false;
29: }
30:
31: #endregion
32:
33: #region Property
34:
35: /// <summary>
36: /// Mengambil dan menentukan apakah suara sedang di-mute
37: /// </summary>
38: public bool IsMute
39: {
40: get
41: {
42: return _isMute;
43: }
44: set
45: {
46: _isMute = value;
47: if (_isMute)
48: MediaPlayer.Stop();
49: }
50: }
51:
52: #endregion
53:
54: #region Method
55:
56: /// <summary>
57: /// Mengambil Singleton Instans dari SoundManager
58: /// </summary>
59: /// <returns></returns>
60: public static SoundManager GetInstance()
61: {
62: if (_instance == null)
63: {
64: _instance = new SoundManager();
65: }
66: return _instance;
67: }
68:
69: /// <summary>
70: /// Memainkan background musik sesuai Page yang dibuka
71: /// </summary>
72: /// <param name="page">Page yang sedang dibuka</param>
73: public void PlayBgm(PhoneApplicationPage page)
74: {
75: if (IsMute)
76: return;
77:
78: Song song = null;
79: if (page is GamePage)
80: {
81: song = Song.FromUri(GameBgm, new Uri("Sounds/pdgbulan.mp3", UriKind.Relative));
82: if (_lastBgm != GameBgm)
83: {
84: PlaySong(song);
85: }
86: _lastBgm = GameBgm;
87: return;
88: }
89: song = Song.FromUri(NormalBgm, new Uri("Sounds/gundhul.mp3", UriKind.Relative));
90: if (_lastBgm != NormalBgm)
91: {
92: PlaySong(song);
93: }
94: _lastBgm = NormalBgm;
95: }
96:
97: /// <summary>
98: /// Memutar musik
99: /// </summary>
100: /// <param name="song">musik yang dimainkan</param>
101: private void PlaySong(Song song)
102: {
103: MediaPlayer.Stop();
104: MediaPlayer.IsRepeating = true;
105: MediaPlayer.Play(song);
106: }
107:
108: /// <summary>
109: /// Memainkan sound effect
110: /// </summary>
111: public void PlaySoundEffectClick()
112: {
113: if (IsMute)
114: return;
115: SoundEffect se = SoundEffect.FromStream(TitleContainer.OpenStream("Sounds/click.wav"));
116: se.Play();
117: }
118:
119: #endregion
120: }
Cara untuk menjalankan background music pada suatu PhoneApplicationPage adalah sebagai berikut:
1: SoundManager.GetInstance().PlayBgm(this);
Semoga Bermanfaat.
|
-
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!
|
-
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.
|
-
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: - Pilih menu bar File – New – Project
- Pilih Windows MultiPoint Mouse SDK pada Project types dan Multipoint Application template project
- Tambahkan kelas HostManager pada project yang berperan sebagai mediator dari seluruh UserControl yang ada.
- 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.
- 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: }
- 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: }
- 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:
- 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: }
- Implementasikan constructor pada kelas HostManager agar melakukan pergantian ke MenuHost.
1: public HostManager() 2: { 3: ChangeHost(MenuHost.GetInstance(this)); 4: }
- 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: }
- 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:
Berikut adalah hasil program ketika dijalankan:
Jika berminat, silahkan unduh solution dari program ini:
Semoga bermanfaat :D
|
-
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: - Pada Microsoft Visual Studio 2010, buat New Project dengan Console Application template.
- Pilih Add Reference dan tambahkan library ExcelPackage, yaitu: ExcelPackage.dll ke dalam project.
- Definisikan sebuah method untuk membuat xlsx file.
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: }
- Definisikan method FillData yang dipanggil di dalam method CreateXlsx untuk mengisi data pada worksheet.
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: }
- Definisikan method SetDocumentProperties yang dipanggil di dalam method CreateXlsx untuk menentukan properti dari dokumen.
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: }
- Panggil method CreateXlsx pada main.
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:
Selamat mencoba.
|
-
Salah satu varian Microsoft Office yang populer dan banyak digunakan adalah Microsoft Office Excel. File yang umumnya dihasilkan oleh Microsoft Office Excel 2003 adalah sebuah file berekstensi .xls, sedangkan file yang dihasilkan oleh Microsoft Office Excel 2007 adalah sebuah file berekstensi xlsx. Seiring dengan perkembangan Microsoft Office yang telah mencapai versi Microsoft Office 2010, banyak perusahaan ataupun orang yang telah memigrasikan berkas-berkas yang dihasilkan oleh sistem mereka dari binary format (xls) menjadi Office Open XML format (xlsx). Tentunya dalam proses migrasi ini membutuhkan pengujian terhadap validitas dan kesesuain data yang dihasilkan pada file xls dan xlsx tersebut. Kebanyakan library yang beredar hanya memfasilitasi pembacaan Excel File beformat xls saja ataupun xlsx saja, salah satu library yang memudahkan pengguna untuk membaca data pada kedua ekstensi file serta membandingkan data yang tersimpan di kedua file tersebut adalah Excel Data Reader. Berikut adalah langkah-langkah sederhana untuk membuat sebuah reader sederhana ini: - Pada Microsoft Visual Studio 2010, buat New Project dengan WPF Application template.
- Pilih Add Reference dan tambahkan library ExcelDataReader, yaitu: Excel.dll dan ICSharpCode.SharpZipLib.dll ke dalam project.
- Tambahkan dua buah control DataGrid yang diberi nama dgFirst dan dgSecond pada MainWindow.
- Definisikan sebuah static method GetDataFromXlsxFile untuk memperoleh DataSet dari suatu file .xlsx.
1: /// <summary> 2: /// This method is used to get data from Xlsx file. 3: /// Author : Jeffrey Hermanto Halimsetiawan 4: /// </summary> 5: /// <param name="filepath">filepath of .xlsx file</param> 6: /// <returns>Data Table which keep .xlsx data</returns> 7: private static DataSet GetDataFromXlsxFile(string filepath) 8: { 9: string filePathXlsx = filepath; 10: FileStream streamXlsx = File.Open(filePathXlsx, FileMode.Open, FileAccess.Read); 11: IExcelDataReader excelReaderXlsx = ExcelReaderFactory.CreateOpenXmlReader(streamXlsx); 12: DataSet ds = excelReaderXlsx.AsDataSet(); 13: excelReaderXlsx.Close(); 14: return ds; 15: }
- Definisikan sebuah static method GetDataFromXlsFile untuk memperoleh DataSet dari suatu file .xls.
1: /// <summary> 2: /// This method is used to get data from Xls file 3: /// Author : Jeffrey Hermanto Halimsetiawan 4: /// </summary> 5: /// <param name="filepath">filepath of .xls file</param> 6: /// <returns>Data Table which keep .xls data</returns> 7: private static DataSet GetDataFromXlsFile(string filepath) 8: { 9: string filePathXls = filepath; 10: FileStream streamXls = File.Open(filePathXls, FileMode.Open, FileAccess.Read); 11: IExcelDataReader excelReaderXls = ExcelReaderFactory.CreateBinaryReader(streamXls); 12: DataSet ds = excelReaderXls.AsDataSet(); 13: excelReaderXls.Close(); 14: return ds; 15: }
- Tentukan DataContext dari kedua control DataGrid yang telah ada untuk mengambil data dari GetDataFromXlsxFile dan GetDataFromXlsFile pada constructor MainWindow.
1: public MainWindow() 2: { 3: InitializeComponent(); 4: DataSet ds = GetDataFromXlsxFile("DataTest.xlsx"); 5: dgFirst.DataContext = ds.Tables[0].DefaultView; 6: DataSet dsXls = GetDataFromXlsFile("DataTest.xls"); 7: dgSecond.DataContext = dsXls.Tables[0].DefaultView; 8: }
Sementara itu, siapkan kedua file Excel yang akan dicoba untuk dibaca data yang terdapat di dalamnya dan beri nama “DataTest.xlsx” dan “DataTest.xls”. Berikut adalah sampel data yang terdapat dalam kedua file tersebut: Hasil uji coba program tersebut seperti yang terlihat pada gambar di bawah ini: Selamat mencoba dan semoga bermanfaat :D
|
-
Software Refactoring adalah suatu teknik untuk melakukan restrukturuisasi pada kode yang ada dan memodifikasi struktur internalnya tanpa mengubah fungsionalitasnya. Konsep software refactoring memiliki kedekatan metode pengembangan perangkat lunak xtreme programming, yaitu: suatu paradigma pemrograman yang menekankan bahwa pengembangan suatu perangkat lunak akan lebih efektif saat proses pengembangan daripada menghabiskan waktu untuk pembuatan desain. Istilah refactoring pertama kali dimunculkan oleh William Opdyke dalam disertasi doktoral miliknya pada tahun 1992 sebagai sebuah teknik restrukturisasi pada pemrogaman berorientasi obyek. Martin Fowler seorang kolega dari Erich Gamma (anggota Gang of Four - pencetus design pattern) memantapkan konsep Opdyke lewat bukunya yang terkenal “Refactoring: Improving the Design of Existing Code”. Dalam buku tersebut, Fowler mendefinisikan refactoring sebagai “the process of changing a software system in such a way that it does not alter the external behaviour of the code, yet improves its internal structure”. Salah satu add-on tambahan Microsoft Visual Studio yang dapat digunakan untuk membantu proses Software Refactoring adalah JetBrains ReSharper yang saat ini telah memasuki versi 5.1.1. Add-on ini sebenarnya berbayar, namun kita dapat menggunakan yang versi 30-day free trial. Beberapa kemudahan yang ditawarkan oleh produk ini antara lain: - Continuous code quality analysis in C#, XAML, XML, ASP.NET, and ASP.NET MVC.
- Instant fixes to eliminate errors and code smells.
- 40 solution-wide refactorings to safely change your code base, and 200+ code editing helpers.
- Extended web development support with code inspections, code generation, navigation, and extended IntelliSense.
- Navigation features to let you instantly traverse your whole solution.
Bagian yang paling memudahkan adalah kemampuannya untuk melakukan code quality analysis secara terus menerus dan juga membetulkan error ataupun bad smell code secara instan. Code quality analysis yang dilakukan juga tidak hanya pada bagian code behind yang menggunakan bahasa C# tetapi juga meliputi analisa pada bagian XAML dan XML nya. Selain itu, add-on ini juga memberikan kemudahan untuk menentukan ruleset dari Naming Convention yang akan digunakan sehingga jika terjadi nama method/field yang tidak sesuai dengan konvensi yang telah ditetapkan dapat dideteksi dan di-rename dengan cepat. Berikut adalah beberapa contohnya: - Remove unused directives in file : hal ini dilakukan untuk menghapus directives yang tidak dipakai.
- Check parameter for null : hal ini dilakukan untuk melakukan pengecekan sebuah parameter yang berpotensi memiliki nilai null.
Template kode yang akan dihasilkan adalah: 1: if (canvas == null) throw new ArgumentNullException("canvas");
- Invert ‘if’ : hal ini dilakukan untuk mengurangi nesting pada kode sehingga memudahkan pembacaan kode.
Template kode yang akan dihasilkan adalah:
1: if (scrollViewer == null) return;
- Make return type ‘void’ : hal ini terjadi ketika ada sebuah method dengan return value tertentu yang nilai return value-nya tidak digunakan di dalam program.
- Convert part of body into LINQ-expression : hal baru yang ditawarkan versi ini adalah kemampuannya untuk mengubah assignment dalam sebuah looping for-each menjadi sebuah LINQ-expression.
Kode sebelum:
1: foreach(CircuitSymbol symbol in this.LogicalCircuit.CircuitSymbol) 2: { 3: Gate gate = symbol.Circuit as Gate; 4: }
Kode sesudah:
1: foreach (Gate gate in this.LogicalCircuit.CircuitSymbol.Select(symbol => symbol.Circuit as Gate)) 2: { 3: 4: }
- Rename to : hal ini terjadi ketika terjadi penamaan field atau method yang tidak konsisten dengan ruleset yang telah ditentukan.
Apabila merasa tidak nyaman dengan ruleset yang telah ada, setting terhadap naming rule juga dapat diubah melalui kotak dialog berikut:
Untuk lebih jelasnya, silahkan meng-install versi trial dari JetBrains ReSharper ini yang dapat meningkatkan produktivitas dari developer. Selamat mencoba.
|
-
Sejak awal dirilisnya Windows MultiPoint Mouse SDK, SDK yang berasal dari sebuah penelitian mahasiswa S3 di Microsoft Research India ini sebenarnya memang ditujukan bagi dunia pendidikan. Dengan adanya SDK ini, sebuah komputer memungkinkan untuk dapat digunakan secara bersamaan oleh 25 siswa secara simultan, cukup hanya dengan menambahkan sebuah mouse untuk setiap siswa. Tentunya ini merupaka sebuah teknologi yang sangat efektif dan ekonomis untuk diterapkan pada sekolah-sekolah di negara berkembang yang umumnya masih jarang memiliki laboratorium komputer. Setelah beberapa tahun, sekolah-sekolah di beberapa negara juga telah banyak menerapkan aplikasi multipoint di dalam kelas. Berikut adalah video penggunaan teknologi multipoint di Thailand: Bahkan dalam MultiPoint Mouse SDK Documentation, telah disertakan desain layout kelas yang mendukung digunakannya aplikasi multipoint. Tentunya dengan desain layout dimana seorang siswa memiliki mouse untuk mengontrol kursor mouse mereka masing-masing, seorang siswa dapat merasa keasyikan. Hal ini dapat menyebabkan seorang guru kesulitan dalam memperoleh perhatian siswa ketika guru ingin memberikan instruksi kepada siswanya. Windows MultiPoint Mouse SDK ini juga memfasilitasi hal tersebut dengan memungkinkan developer menyediakan fitur bagi guru untuk menghentikan pergerakan kursor multipoint mouse. Caranya pun cukup mudah, yaitu: 1: private void FreezeMice() 2: { 3: foreach(var deviceInfo in MultipointSdk.Instance.MouseDeviceList) 4: { 5: deviceInfo.DeviceVisual.DisableMovement = true; 6: } 7: }
Selamat mencoba :)
|
-
Sebelumnya, telah dibahas bagaimana cara membuat sebuah control InkCanvas dapat dikenai event mouse drag yang dilakukan oleh multipoint cursor pada post InkCanvas dengan Windows MultiPoint Mouse SDK. Namun, program yang dibuat di post sebelumnya belum mampu menangani jika terjadi event mouse drag oleh beberapa multipoint cursor secara simultan. Untuk dapat mengakomodasi hal tersebut, beberapa perubahan terkait harus dilakukan dengan memanfaatkan deviceID dari setiap mouse yang terhubung pada komputer. Beberapa perubahan yang harus dilakukan antara lain: - Ubah variabel penanda sedang di-drag, koordinat sebelum dan koordinat sesudah suatu mouse sesuai dengan jumlah mouse yang terhubung pada komputer. Oleh karena itu, semua variabel yang ada diubah dalam bentuk array.
1: private int _secondX; 2: private int _secondY; 3: private int _firstX; 4: private int _firstY; 5: private bool _isDraw = false;
1: private Point[] _arrPointFirst; 2: private Point[] _arrPointSecond; 3: private bool[] _arrIsDraw;
- Definisikan sebuah method yang akan dipanggil ketika program telah melakukan registrasi instans MultipointSDK karena pada saat itu akan dikenali berapa jumlah mouse yang terhubung pada komputer.
1: private void InitializeState() 2: { 3: if (_arrIsDraw == null) 4: { 5: int mouseCount = MultipointSdk.Instance.MouseDeviceList.Count; 6: _arrIsDraw = new bool[mouseCount]; 7: _arrPointFirst = new Point[mouseCount]; 8: _arrPointSecond = new Point[mouseCount]; 9: for (int i = 0; i < mouseCount; i++) 10: { 11: _arrIsDraw[i] = false; 12: _arrPointFirst[i] = new Point(); 13: _arrPointSecond[i] = new Point(); 14: } 15: } 16: }
- Lakukan sedikit perubahan pada definisi method mpbDrawing_MultiPointMouseDownEvent dengan mengambil deviceID dari mouse terlebih dahulu.
1: private void mpbDrawing_MultiPointMouseDownEvent(object sender, RoutedEventArgs e) 2: { 3: InitializeState(); 4: MultipointMouseEventArgs args = (MultipointMouseEventArgs)e; 5: DeviceInfo mouseObject = args.DeviceInfo; 6: MultipointMouseDevice mpDevice = (MultipointMouseDevice)mouseObject.DeviceVisual; 7: int x = (int)mpDevice.Position.X; 8: int y = (int)mpDevice.Position.Y; 9: 10: int deviceId = args.DeviceInfo.Id; 11: 12: if (!_arrIsDraw[deviceId]) 13: { 14: _arrIsDraw[deviceId] = true; 15: _arrPointSecond[deviceId].X = x; 16: _arrPointSecond[deviceId].Y = y; 17: _arrPointFirst[deviceId].X = x; 18: _arrPointFirst[deviceId].Y = y; 19: } 20: else 21: { 22: mpbDrawing_MultiPointMouseUpEvent(sender, e); 23: } 24: } 25:
- Lakukan sedikit perubahan pada definisi method mpbDrawing_MultipointMouseMoveEvent dengan mengambil deviceID dari mouse terlebih dahulu.
1: private void mpbDrawing_MultipointMouseMoveEvent(object sender, RoutedEventArgs e) 2: { 3: InitializeState(); 4: MultipointMouseEventArgs args = e as MultipointMouseEventArgs; 5: int deviceId = args.DeviceInfo.Id; 6: if (_arrIsDraw[deviceId]) 7: { 8: DeviceInfo mouseObject = args.DeviceInfo; 9: MultipointMouseDevice mpDevice = (MultipointMouseDevice)mouseObject.DeviceVisual; 10: 11: int x = (int)mpDevice.Position.X; 12: int y = (int)mpDevice.Position.Y; 13: 14: _arrPointFirst[deviceId].X = _arrPointSecond[deviceId].X; 15: _arrPointFirst[deviceId].Y = _arrPointSecond[deviceId].Y; 16: _arrPointSecond[deviceId].X = x; 17: _arrPointSecond[deviceId].Y = y; 18: 19: AddLine(_arrPointFirst[deviceId].X, _arrPointFirst[deviceId].Y, 20: _arrPointSecond[deviceId].X, _arrPointSecond[deviceId].Y); 21: } 22: } 23:
- Lakukan sedikit perubahan pada definisi method mpbDrawing_MultiPointMouseUpEvent dengan mengambil deviceID dari mouse terlebih dahulu.
1: private void mpbDrawing_MultiPointMouseUpEvent(object sender, RoutedEventArgs e) 2: { 3: InitializeState(); 4: MultipointMouseEventArgs args = (MultipointMouseEventArgs)e; 5: 6: DeviceInfo mouseObject = args.DeviceInfo; 7: MultipointMouseDevice mpDevice = (MultipointMouseDevice)mouseObject.DeviceVisual; 8: int x = (int)mpDevice.Position.X; 9: int y = (int)mpDevice.Position.Y; 10: 11: int deviceId = args.DeviceInfo.Id; 12: _arrIsDraw[deviceId] = false; 13: }
Berikut adalah demo video program sederhana ini :
|
-
Pendahuluan
Pada hari Jumat tanggal 19 November 2010, MSP Regional Jawa Timur
bekerja sama dengan Himpunan Mahasiswa Teknik Computer-Informatika (HMTC) ITS mengadakan acara Road to Imagine Cup 2011 di Institut Teknologi Sepuluh Nopember, Surabaya. Tujuan utama dari acara ini adalah pemberian suntikan motivasi dan juga wawasan bagi mahasiswa ITS dan PENS-ITS untuk mengikuti Imagine Cup 2011. Pembicara dalam kegiatan ini, yaitu: Julius Fenata (Academic Developer Advisor Microsoft Indonesia), MSP ITS (Jeffrey Hermanto Halimsetiawan, Alexander Rahardjo, Izzuddin Gumilar, dan Reza Adhitya), serta MSP PENS-ITS (Taufan Ardhinata dan Febrianto Arif).
Pelaksanaan
- Hari / Tanggal : Jumat, 19 November 2010
- Waktu : 14.00 - 17.00 WIB
- Tempat : Aula Lantai 2 Teknik Informatika ITS
Agenda
Acara ini diawali dengan sambutan dari Tirta Priambadha (Ketua HMTC) dan Bambang Setiawan, S.Kom., M.T. (Pembantu Dekan III Fakultas Teknologi Informasi ITS). Sesi pertama diisi oleh Julius Fenata yang memberikan penjelasan mulai dari MSDN AA hingga seputar Imagine Cup sendiri. Sesi ini diselingi beberapa sesi tanya jawab kepada penonton yang disertai pembagian beberapa goodies kepada penonton yang bertanya.
Sesi berikutnya tentang MultiPoint yang dibawakan oleh Jeffrey Hermanto Halimsetiawan (MSP ITS) dan Alexander Rahardjo (MSP ITS). Pada sesi ini dijelaskan mengenai asal mula teknologi MultiPoint, penerapan aplikasi MultiPoint, sekilas mengenai Windows MultiPoint Mouse SDK 1.5.1, membangun aplikasi Flash dengan memanfaatkan MultiPoint, dan diakhiri showcase singkat dari beberapa aplikasi MultiPoint.
Berikut adalah materi presentasinya:
Materi selanjutnya dibawakan oleh Taufan Ardhinata (MSP PENS-ITS) dan Febrianto Arif (MSP PENS-ITS) mengenai XNA. Penjelasan ini dimulai dari XNA 2.0 sampai dengan XNA 4.0 yang dapat di-deploy pada Windows Phone 7. Sesi ini diakhiri dengan demo aplikasi XNA di PC dan aplikasi XNA di Windows Phone 7.
Berikut adalah materi presentasinya:
Kemudian materi tentang Augmented Reality with GoblinXNA dibawakan oleh Izzuddin Gumilar (MSP ITS) dan Reza Adhitya (MSP ITS). Diawali dengan penjelasan singkat mengenai augmented reality, penjelasan mengenai GoblinXNA dan ALVAR, serta diakhiri dengan demo aplikasi yang menampilkan berbagai macam robot sesuai dengan marker yang tampil pada kamera.
Berikut adalah contoh demo aplikasi augmented reality nya:
Tak lupa, acara ini diakhiri dengan sesi foto bersama para pembicara.
Semoga dengan adanya acara ini dapat semakin menumbuhkan motivasi mahasiswa ITS dan PENS-ITS untuk berkarya dalam Imagine Cup 2011 nanti.
|
-
PendahuluanPada tanggal 18 November 2010, MSP Regional Jawa Timur mengadakan MSP Gathering: FY11 Activity Plan & Kick Off. Acara ini dihadiri oleh semua MSP Jawa Timur, yaitu: 4 MSP ITS, 2 MSP PENS-ITS, 1 MSP UNAIR, dan 1 MSP Advisor serta Julius Fenata sebagai Academic Developer Advisor Microsoft Indonesia.
Pelaksanaan- Hari/Tanggal : Kamis, 18 November 2010
- Waktu : 19.00 - 22.00 WIB
- Tempat : Hachi Hachi Bistro, Tunjungan Plaza 4 Lantai 5, Surabaya
AgendaKegiatan yang dilakukan meliputi: - Sharing
- Persiapan Acara Road to Imagine Cup 2011 @ ITS
- Activity Plan (Offline Event di Surabaya pada bulan Februari, Students Blog dan Imagine Cup)
- Pemilihan MSP Leader Regional Jawa Timur FY 11

|
More Posts Next page »
|
|
|