Visual Studio 2012 Is Launched!!

There has never been a year where Microsoft as a company is so focused in driving applications, never!. Today is a great day where we launched Visual Studio 2012 on www.visualstudiolaunch.com. Keep in mind - Visual Studio 2012 and .NET 4.5, a state-of-the-art development solution for building modern applications that span connected devices and continuous services, from the client to the cloud! Welcome on Earth! Watch Some keynote here:

clip_image001

In addition to Soma keynote, the Visual Studio development team has put together over 60 videos to help you learn about the new Visual Studio 2012 capabilities in more detail, and all of these will be available for watching starting this afternoon at the site. Please watch those videos as those provide a great point of reference across a wide variety of features and capabilities. On top of it, we also have some series of tutorial at Channel9 regarding Visual Studio Premium and Ultimate.

Visual Studio is the leader of application lifecycle management tools (Gartner) and yes, a state-of-the-art development solution for building modern applications for individual developers, small startups, ISV/SI, corporate and enterprises.

 

clip_image002                 clip_image004

Visual Studio always the first software I installed after Operating System, and I would like to encourage you to start using it to develop your modern apps, from connected devices to continuous services, from the client to the cloud! From native ISO C++11, managed codes (C#, VB.NET) to Windows Runtime.

Enjoy coding with Visual Studio 2012!

 

Cheers – Risman Adnan

Share this post: | | | |

Part 1 : Concurrency in C++11

Standar bahasa pemrograman ISO C++ baru saja dirilis September 2011 lalu – sering disebut C++11. Salah satu fitur penting yang dimasukkan ke dalam C++11 adalah dukungan terhadap multithreading. Fitur ini akan memudahkan developer untuk mengatasi multithreading concurrency dalam aplikasi tanpa bergantung pada library diluar standard C++11 ataupun platform specific extension. Dalam istilah sehari-hari, concurrency adalah konsep untuk melakukan beberapa aktifitas secara bersamaan. Pada artikel ini kita mengacu pada concurrency terhadap threads of execution di dalam aplikasi single-process.

 

Suatu thread of execution (disingkat saja thread) adalah satu alur kontrol dalam suatu program. Setiap thread dalam suatu program dalam mengakses semua obyek dan fungsi dalam program. Program C++ (atau process) dapat memiliki satu atau beberapa thread yang berjalan secara concurrent dimana eksekusi dari program tersebut merupakan eksekusi dari keseluruhan thread yang ada. [Catatan: ada beberapa atomic operation yang mengizinkan interleaving].

 

Mengapa developer menggunakan concurrency? Dua hal yang biasanya dapat diharapkan adalah separation of concern dan performance dalam aplikasi. Separation yang dimaksud adalah identifikasi, pengelompokan atau pemisahan beberapa bagian dari kode sehingga dapat berjalan secara concurrent, seperti untuk mendapatkan responsiveness dari GUI atau proses di background. Performance biasanya berhubungan dengan parallelism, yang mendayagunakan kemampuan multi-cores/multi-processors untuk mengeksekusi beberapa threads secara parallel. Istilah parallelism mengacu pada penggunaan concurrency untuk melakukan dekomposisi kode untuk berjalan secara terpisah dibeberapa processors (atau cores). Ide ini banyak digunakan dalam scientific, numerical dan supercomputing. Beberapa framework seperti PPL (Pattern Parallel Library) dan MS-MPI (Microsoft Message Passing Interface) sering digunakan untuk parallelism yang dimaksud. Artikel dari Herb Sutter – The free lunch is over: The Fundamental Turn Toward Concurrency in Software, menjelaskan lebih detil mengenai why concurrency. Perlu dicatat bahwa threads adalah sumber daya terbatas dalam sistem operasi, misalnya dalam 32-bit OS dimana address space terbatas 4GB. Dalam hal ini developer disarankan untuk menggunakan thread pool agar optimalisasi performance tetap dapat dicapai.

 

Artikel ini membahas multithreading spesifik untuk C++11, tidak mencakup topik platform specific API seperti process dan thread API dalam Win32. Meskipun C++11 standar telah menyediakan type dan fungsi native handler, penggunaannya tidak termasuk dalam cakupan artikel ini. Untuk bagian pertama, artikel ini fokus pada dasar-dasar multithreading seperti thread class. Contoh kode dalam artikel ini di compile menggunakan C/C++ versi terbaru dalam Visual Studio 2012 yang telah compatible dengan C++11.

 

Memahami Thread Class

Deklarasi thread class dalam C++11 diberikan pada header file <thread>. Thread class memberikan mekanisme untuk membuat thread baru, menggabungkan (join) atau menunggu (wait) suatu thread untuk selesai serta melakukan beberapa operasi untuk mengatur dan mengetahui keadaan dari suatu thread. Obyek dari class thread akan secara unik merepresentasikan suatu thread of execution. Representasi ini dapat di transfer ke obyek lain sehingga tidak ada dua obyek yang secara simultan merepresentasikan thread yang sama. Obyek dari class thread bisa dalam berada dalam keadaan yang tidak merepresentasikan suatu thread, yaitu setelah pemanggilan default construction, dipindahkan (move_thread), detach atau join. Perhatikan thread class diagram dan contoh code berikut ini:

 

image
#include<iostream>
#include<thread>

using namespace std;

void ConsoleOpen(){char i; cin>>i;}

void SayHello1(){
    cout<<"Welcome to Concurrency World... \n";
}

void SayHello2(){
    cout<<"I love Visual Studio 2012 and VC++... \n";
}

inline void ShowThreadIDs(const thread *x1, const thread &x2){
    cout<< "Main Thread ID = " << this_thread::get_id() << endl;
    cout<< "t1 ID = " << x1->get_id() <<endl;
    cout<< "t2 ID = " << x2.get_id() <<endl;
    cout<< "t1 hardware contexts= " << x1->hardware_concurrency() <<endl;
    cout<< "t2 hardware contexts= " << x2.hardware_concurrency() <<endl;
}

int main(){
    //Create two threads with two allocations
    thread *t1 = new thread(SayHello1);
    thread t2(SayHello2);
    cout<< "Before Join Operation....\n";
    ShowThreadIDs(t1, t2);
    // call join operation
    t1->join();
    t2.join();
    // after join operation
    cout<< "After Join Operation....\n";
    ShowThreadIDs(t1, t2);
    //Keep Console Open
    ConsoleOpen();
}

 

Dalam contoh tersebut, terdapat dua obyek thread baru (t1 dan t2) yang digabungkan dengan main thread aplikasi console. Setelah pemanggilan operasi join(), kedua obyek tersebut tidak lagi memiliki ID yang sebelumnya (menjadi 0) dan obyek tersebut tetap hidup di memory dan beberapa method masih mengembalikan nilai, seperti hardware concurrency untuk jumlah processor core yang dimiliki komputer. Obyek thread dapat di instantiate dengan dua mekanisme alokasi, static dan dynamic. Hal lain yang menarik untuk diperhatikan pada contoh di atas adalah passing obyek thread sebagai parameter di fungsi ShowThreadIDs hanya dapat dilakukan by reference (thread&). Passing obyek thread by value akan mengakibatkan compile time error karena constructor thread class dideklarasikan sebagai private member. Sebagai percobaan anda dapat memodifikasi contoh dengan fungsi swap():

 

void swap(thread& t1, thread& t2);

image 

Pada contoh kode HelloWorld, kedua thread yang dibuat merepresentasikan fungsi yang independent. Bagaimana dengan fungsi yang merupakan anggota dari class atau struct? Misalnya, modifikasi berikut ini:

 

class HelloWorld{
public:
    void operator() () const{
        cout<<"Welcome to Concurrency World... \n";
    }
    void SayHello(){
        cout<<"I love Visual Studio 2012 and VC++... \n";
    }
};

Constructor dari thread class dapat bekerja untuk semua callable type. Untuk HelloWorld class seperti di atas, kita dapat membuat obyek thread dari operator function call () maupun fungsi anggota SayHello sebagai berikut:

 

HelloWorld hWorld;
thread t1(hWorld);
thread t2(&HelloWorld::SayHello, hWorld);

 

Saya berharap HelloWorld program yang diberikan disini sudah cukup untuk memulai. Di bagian kedua, kita akan mempelajari mutual exclusion, salah satu konsep utama di concurrency. Mutex class sudah di support oleh C++11, yang perlu dipahami oleh developer adalah konsep utama dari mutex sebelum membahas code detail.

image

 

Hope this helps!

 

Cheers - RAM

Share this post: | | | |

Get your email in Outlook.com

Hi, I just registered new email at www.outlook.com. It is awesome!!!. It has consistent UX with Outlook 2013 desktop client.

image image

Please try. My new email is rismanadnan@outlook.com, for exchange information regarding developer community related works.

 

Cheers - Risman Adnan

Share this post: | | | |

Boost Libraries and C++/Cx

Boost is a widely used portable C++ libraries. It works well with C++ standard library (STL) and usable across a broad spectrum of apps or component framework, including C++/Cx and WinRT. In this tutorial, I would like to give you introduction on how you can utilize boost in your WinRT component project.

Get Your Boost Ready with VS

By the time you've completed the following steps, you'll be at least somewhat comfortable with the contents of a Boost distribution and how to use it with Visual Studio 2012.

1. Get Boost
The easiest way to get a copy of Boost is to use an installer, provided by
BoostPro Computing, as it can download and install precompiled library binaries for you. Unfortunately by this time, no available installer for v.1.50.0 and VS 2012. The next question you will have is how to compile Boost library binaries then? The good news is there is nothing to build as “most” of libraries are header-only,  they consist entirely of header files containing templates and inline functions, and require no separately-compiled library binaries or special treatment when linking. Only small portion of Boost libraries need to be built separately, like Boost.FileSystem, Boost.IOStreams, Boost.MPI, etc. You will need Phyton to compile Boost separately, but that is out of scope in this tutorial, as we will focus on header-only library.

First, please download Boost v1.50.0 from www.boost.org and unpack it to your selected Boost directory. Please learn the Boost directory structure as following:

image


2. Build Simple Program using Boost and VS 2012

  • From Visual Studio's File menu, select New > Project…
  • In the left-hand pane of the resulting New Project dialog, select Visual C++ > General > Empty Project.
  • In the name field, enter “BoostExample”.
  • In Configuration Properties > C/C++ > General > Additional Include Directories, input Boost root directory, in my case D:\CPP\Libraries\boost_1_50_0.
  • Make sure in Configuration Properties > C/C++ > Precompiled Headers, to Not Using Precompiled Headers.

 

image    image

  • Copy the snipped codes below and from the Build menu, build the Solution.
  • Test the application by entering “1 2 3” as input in command prompt console. The result should be “3 6 9”.
   1: #include <boost/lambda/lambda.hpp>
   2: #include <iostream>
   3: #include <iterator>
   4: #include <algorithm>
   5: using namespace std;
   6:  
   7: int main()
   8: {
   9:     using namespace boost::lambda;
  10:     typedef istream_iterator<int> in;
  11:  
  12:    for_each(in(cin), in(), cout << (_1 * 3) << " " );
  13: }


Boost Lambda Library (BLL) that we currently use is a C++ template library, which implements a form of lambda abstractions for C++. In our example :

for_each(in(cin), in(), cout << (_1 * 3) << " " );

The expression cout << (_1 * 3) << ' ' defines a unary function object. The variable _1 is the parameter of this function, a placeholder for the actual argument. Within each iteration of for_each, the function is called with an element of a as the actual argument. This actual argument is substituted for the placeholder, and the “body” of the function is evaluated. You can learn more about BLL from Boost library documentation and samples, that will be fun as it very rich, from algorithm and data structure, concurrent programming, memory management (smart pointers, pool), etc.


Leverage Boost in C++/Cx


Once you are familiar with Boost, you can use it in your applications, including WinRT based Metro apps, more specifically C++/Cx. The way you use Boost is very straight forward because most of the Boost libraries are header-only, designed to be portable, work well with STL and it has low usage of APIs not part of Windows SDK for Metro style app. In this case we can have the entire power of Boost to build Metro style apps like XAML, Direct2D, Direct3D and components.

image


However, C++/Cx introduced some new data types, such as platform string, strong pointer and strong reference. In that case, type conversion will be one of the issue as Boost APIs usually require/return standard types. For example, most API's in Windows Runtime (where Platform::String is mostly used) are Wide char and like other strings Platform::String does not have built in functionality to convert between Wide and Narrow.

The good news is C++ provides a variety of implicit conversions between Windows Runtime types and standard C++ types. In case of string, we can use Data() and Length() methods in Platform::String to obtain wchar_t* and length of the string and conversion interchange can be done using widechar strings. And also we can initialize Platform::String from standard string like wchar_t*. The typical pattern is to use standard C++ types and libraries internally as usual, and convert to Windows Runtime types in the public interfaces. Here is the sample from MSDN:

   1: using namespace Platform;
   2: #include <string>
   3: // initializing a String^
   4: String^ str1 = "Test";// no need for L
   5: String^ str2("Test");
   6: String^ str3 = L"Test";
   7: String^ str4(L"Test");
   8: String^ str5 = ref new String(L"Test");
   9: String^ str6(str1);
  10: String^ str7 = str2;
  11: wchar_t msg[] = L"Test";
  12: String^ str8 = ref new String(msg);
  13: std::wstring wstr1(L"Test");
  14: String^ str9 = ref new String(wstr1.c_str());
  15: String^ str10 = ref new String(wstr1.c_str(), wstr1.length());
  16:  
  17: // accessing chars into String^
  18: auto it = str1->Begin();
  19: wchar_t ch = it[0];
  20:  
  21: // String^ is null terminated (but can contain L'/0', just like wstring)
  22: assert(it[str1->Length()] == L'/0');
  23:  
  24: // String^ is immutable
  25: it[1] = L'A';// yields compile error C3892
  26:  
  27: // initializing a std::wstring from String^
  28: std::wstring wstr2(str1->Data());
  29: std::wstring wstr3(str1->Data(), str1->Length());
  30:  
  31: // comparisons
  32: if (str1 == str2) { /* ... */ }
  33: if (str1->Equals(str2)) { /* ... */ }
  34: if (str1 != str2) { /* ... */ }
  35:  

Let see a simple case where I used Boost string algorithm to operate on wstr1 and initialized Platform::String to fill the text in a textbox. Please note that conversion comes with some costs, please use it efficiently!.

   1:  
   2: void StringBoost::MainPage::Button_Click_1(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
   3: {
   4:     String^ s = "This is WinRT platform String type";
   5:     tbxToken->Text = s;
   6: }
   7:  
   8:  
   9: void StringBoost::MainPage::btnToken_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
  10: {
  11:     using namespace boost;
  12:        std::wstring wstr1(L"HELLO WORD");
  13:     std::wstring wstr2=to_lower_copy(ireplace_first_copy(wstr1,"hello","halo")); 
  14:     tbxToken->Text = ref new String(wstr2.c_str());
  15: }

 

Boost is huge library and you can start to use it in your Metro apps using C++/Cx. I hope you like it like I do.


Hope this helps!


Cheers – RAM

Share this post: | | | |

Microsoft BizSpark Startup Night

This is an invitation to all startups. Come together in this gathering discuss about devices and cloud.

5 april_@america_presentation_Ideation Bootcamp_eposter_indo

See you there. Don’t forget to register here .

 

Cheers – Risman Adnan

Share this post: | | | |

C++/Cx Tutorial 2: 3rd Party Library

Pada tutorial 1, saya menjelaskan mengenai beberapa dasar pemrograman C++/Cx seperti type, ref class dan property. Kali ini kita akan coba bermain-main dengan 3rd party library. Pada event BUILD sebelumnya Ale Contenti menunjukkan bagaimana dia menggunakan Bullet C++ physics engine untuk demo sederhana. Pada tutorial ini kita akan mencoba melakukan reuse Box2D di WinRT dan membuat UI sederhana dengan HTML/JavaScript. Semoga dengan contoh ini rekan-rekan akan semakin tertarik dengan pemrograman C++/Cx.

image_thumb[10]

Saya menggunakan Physics engine untuk 2D games, Box2D, open source C++ engine untuk mensimulasikan rigid bodies dalam 2D. Beberapa fitur yang menarik dalam Box2D adalah collision dan aspek physics nya. Kita tidak akan mempelajari Newtonian untuk rigid body disini, tapi kita akan belajar bagaimana menggunakan Box2D codes untuk aplikasi game dengan HTML5/JavaScript atau XAML/JavaScript yang menggunakan WinRT komponen dari Box2D.


1. Membuat WinRT Box2D Layer

image

Kita akan membuat satu WinRT layer dari original Box2D codes. Buat satu project WinRT Component DLL dengan Visual Studio 11 Express dan namakan dengan Box2DWinRT. Untuk client, buat satu aplikasi Metro (Blank Template) dengan HTML/JavaScript yang memiliki reference ke project Box2DWinRT, beri nama Box2DHelloJS.

image   image

Import source codes dari Box2D ke dalam project Box2DWinRT, dengan cara Add –> Existing Item. Sebelumnya buat New Filter di dalam project Box2DWinRT agar susunannya sama dengan struktur folder di source codes Box2D. Jangan panik jika menemukan error saat kompilasi pertama, pastikan bahwa lokasi #include header files anda benar sesuai dengan struktur folder. Setelah berhasil melakukan kompilasi, anda siap untuk membuat WinRT layer.

Selanjutnya kita akan membuat WinRT layer sederhana untuk Box2D. Buka file WinRTComponent.h dan buat ref class sebagai berikut:

Code Snippet
  1. #pragma once
  2. #include<Box2D.h>
  3. #include <cstdio>
  4. #include<map>
  5. #include<Common/b2Math.h>
  6.  
  7. using namespace std;
  8.  
  9. namespace Box2DWinRT
  10. {
  11.     public ref class Box2DHelloWorld sealed
  12.     {
  13.     public:
  14.         Platform::String^ CalculatePosition();
  15.     };
  16. }

Contoh code tersebut hanya memiliki satu class Box2DHelloWorld yang berisi satu method untuk menghitung posisi akhir dari satu vector. Implementasi dari ref class Box2DHelloWorld adalah sebagai berikut:

Code Snippet
  1. // WinRTComponent.cpp
  2. #include "pch.h"
  3. #include "WinRTComponent.h"
  4. #include<Common/b2Math.h>
  5. #include<Dynamics/b2World.h>
  6. #include<Dynamics/b2Body.h>
  7. #include<Collision/Shapes/b2PolygonShape.h>
  8. #include<Dynamics/b2Fixture.h>
  9.  
  10.  
  11. using namespace Box2DWinRT;
  12. using namespace Platform;
  13.  
  14.  
  15. Platform::String^ Box2DWinRT::Box2DHelloWorld::CalculatePosition()
  16. {
  17.     // Define the gravity vector.
  18.     b2Vec2 gravity(0.0f, -10.0f);
  19.  
  20.     // Construct a world object, which will hold and simulate the rigid bodies.
  21.     b2World world(gravity);
  22.  
  23.     // Define the ground body.
  24.     b2BodyDef groundBodyDef;
  25.     groundBodyDef.position.Set(0.0f, -10.0f);
  26.  
  27.     // Call the body factory which allocates memory for the ground body
  28.     // from a pool and creates the ground box shape (also from a pool).
  29.     // The body is also added to the world.
  30.     b2Body* groundBody = world.CreateBody(&groundBodyDef);
  31.  
  32.     // Define the ground box shape.
  33.     b2PolygonShape groundBox;
  34.  
  35.     // The extents are the half-widths of the box.
  36.     groundBox.SetAsBox(50.0f, 10.0f);
  37.  
  38.     // Add the ground fixture to the ground body.
  39.     groundBody->CreateFixture(&groundBox, 0.0f);
  40.  
  41.     // Define the dynamic body. We set its position and call the body factory.
  42.     b2BodyDef bodyDef;
  43.     bodyDef.type = b2_dynamicBody;
  44.     bodyDef.position.Set(0.0f, 4.0f);
  45.     b2Body* body = world.CreateBody(&bodyDef);
  46.  
  47.     // Define another box shape for our dynamic body.
  48.     b2PolygonShape dynamicBox;
  49.     dynamicBox.SetAsBox(1.0f, 1.0f);
  50.  
  51.     // Define the dynamic body fixture.
  52.     b2FixtureDef fixtureDef;
  53.     fixtureDef.shape = &dynamicBox;
  54.  
  55.     // Set the box density to be non-zero, so it will be dynamic.
  56.     fixtureDef.density = 1.0f;
  57.  
  58.     // Override the default friction.
  59.     fixtureDef.friction = 0.3f;
  60.  
  61.     // Add the shape to the body.
  62.     body->CreateFixture(&fixtureDef);
  63.  
  64.     // Prepare for simulation. Typically we use a time step of 1/60 of a
  65.     // second (60Hz) and 10 iterations. This provides a high quality simulation
  66.     // in most game scenarios.
  67.     float32 timeStep = 1.0f / 60.0f;
  68.     int32 velocityIterations = 6;
  69.     int32 positionIterations = 2;
  70.  
  71.     b2Vec2 position(0.0f, 0.0f);
  72.     
  73.     // This is our little game loop.
  74.     for (int32 i = 0; i < 60; ++i)
  75.     {
  76.         // Instruct the world to perform a single step of simulation.
  77.         // It is generally best to keep the time step and iterations fixed.
  78.         world.Step(timeStep, velocityIterations, positionIterations);
  79.  
  80.         // Now print the position and angle of the body.
  81.         position = body->GetPosition();
  82.     }
  83.     
  84.     // return last position
  85.     Platform::String^ stringResult = "x= " + position.x + "y= " + position.y;
  86.     return stringResult;
  87.  
  88. }

 

Setelah berhasil dikompilasi tanpa error, anda siap untuk membuat client sederhana dalam project Box2DHelloJS. Codes nya seperti ini:

default.html

Code Snippet
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <meta charset="utf-8">
  5.     <title>Box2DHelloJS</title>
  6.  
  7.     <!-- WinJS references -->
  8.     <link href="//Microsoft.WinJS.0.6/css/ui-dark.css" rel="stylesheet">
  9.     <script src="//Microsoft.WinJS.0.6/js/base.js"></script>
  10.     <script src="//Microsoft.WinJS.0.6/js/ui.js"></script>
  11.  
  12.     <!-- Box2DHelloJS references -->
  13.     <link href="/css/default.css" rel="stylesheet">
  14.     <script src="/js/default.js"></script>
  15. </head>
  16. <body>
  17.     <h1>Box2D Get Position</h1><br />
  18.     <h1><div id="box2d"></div></h1>
  19. </body>
  20. </html>

default.js

Code Snippet
  1. // For an introduction to the Blank template, see the following documentation:
  2. // http://go.microsoft.com/fwlink/?LinkId=232509
  3. (function () {
  4.     "use strict";
  5.  
  6.     var app = WinJS.Application;
  7.  
  8.     app.onactivated = function (eventObject) {
  9.         if (eventObject.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {
  10.             if (eventObject.detail.previousExecutionState !== Windows.ApplicationModel.Activation.ApplicationExecutionState.terminated) {
  11.                 // TODO: This application has been newly launched. Initialize
  12.                 // your application here.
  13.             } else {
  14.                 // TODO: This application has been reactivated from suspension.
  15.                 // Restore application state here.
  16.             }
  17.  
  18.             var positionString = new Box2DWinRT.Box2DHelloWorld();
  19.             document.getElementById("box2d").innerText = positionString.calculatePosition();
  20.             WinJS.UI.processAll();
  21.         }
  22.     };
  23.  
  24.     app.oncheckpoint = function (eventObject) {
  25.         // TODO: This application is about to be suspended. Save any state
  26.         // that needs to persist across suspensions here. You might use the
  27.         // WinJS.Application.sessionState object, which is automatically
  28.         // saved and restored across suspension. If you need to complete an
  29.         // asynchronous operation before your application is suspended, call
  30.         // eventObject.setPromise().
  31.     };
  32.  
  33.     app.start();
  34. })();

 

Hasilnya setelah di debug dalam Simulator adalah sebagai berikut:

image

Dalam Windows 8 Hackathon di Jogjakarta (Mei 16-17), rekan-rekan akan bertemu dengan beberapa game makers untuk berdiskusi lebih lanjut dan bertukar ide dan informasi. Daftarkan diri anda untuk begabung bersama kami di Windows 8 Hackahton 24 jam. Saya berharap tutorial sederhana ini berguna untuk persiapan anda.

Web Banner Windows 8 Hackathon

Cheers – Risman Adnan

Share this post: | | | |

C++/Cx Tutorial 1: Fundamental Type, Class, dan Property

C++/Cx (Component Extensions) adalah extension dari Microsoft C++ compilers yang memungkinkan C++ programmers untuk menulis program di atas WinRT. Sintaks dan library-nya berbasis model pemrograman WinRT (COM) dan penting untuk memahami bahwa walaupun C++/Cx mirip sekali dengan C++/CLI, infrastrukturnya sangat berbeda dengan CLR, karena compiler C++/Cx akan menghasilkan native code (x64, ARM, tergantung target device), bukan .NET assembly.

Penggunaan C++/Cx untuk Metro style apps, biasanya untuk:

  • Membuat DLL (Windows Runtime components) yang dapat digunakan oleh Metro style apps yang ditulis dengan JavaScript+HTML atau C#+XAML.
  • Membuat logic aplikasi Metro style, informasi kultural dan sensor-based data, dan menggunakan XAML untuk UI.
  • Membuat game, graphics, hardware-dependent, intensif komputasi untuk high performance app, seperti DirectX, Parallel Patterns Library, dan C++ AMP.
  • Reuse code/libraries yang pernah ditulis dengan C++.

Artikel ini akan membahas bahasa dan model pemrograman C++/Cx. Saya berasumsi bahwa pembaca pernah mengenal bahasa pemrograman C++ sebelumnya.

C++/Cx Fundamental Type

Setelah memberi contoh “Hello World”, biasanya semua buku pemrograman membahas type. Berikut ini adalah quick reference untuk type mapping dari Standard C++ ke C++/Cx. Saya tidak akan membahas semua, hanya yang terkait. Jangan buang buku C++ anda dirumah karena masih akan sangat berguna. C++/CX mendukung type system yang didefinisikan dalam arsitektur WinRT yang mendukung data types dan functions yang dapat dipanggil dari bahasa pemrograman lainnya seperti C#, JS dan VB. Perbandingan fundamental type di Standard C++ dan C++/Cx dapat anda peroleh disini. Beberapa type yang baru seperti:

image

Type lainnya seperti Array, Anum, Class, Struct, dan Interface juga didukung dalam C++/Cx, tetapi yang menarik adalah, C++/Cx mendukung delegate untuk menggantikan function pointer, event, collection dari event handlers (delegate), property dan generics. Fitur-fitur ini membuat pemrograman dalam C++/Cx seperti layaknya dalam C# dan VB.NET.

Seperti biasa, jangan menghapal fundamental types, yang perlu anda mengerti adalah konsep penggunaannya dan jika anda cukup “geeky” pelajari internal works nya dengan mempelajari WinRT metadata-nya via ILDASM.

 

Class dan Structure

C++/Cx mendukung user-defined reference classes dan structs seperti halnya C++ standard. Akan tetapi, accessibility public dari type ini dapat dilewatkan melalui WinRT komponen dan apps, sementara standard C++ classes dan structs tidak bisa. Ini yang menjadi bagian yang sangat menarik. Banyak sekali physics engine, game engine, numerical library, dan library lainnya yang masih ditulis dengan C++, yang tentu saja dapat digunakan dengan modern UX menggunakan XAML atau HTML5.

Untuk mendeklarasikan class (ref class), gunakan ref class contextual keyword. Suatu ref class dapat berisi function yang bersifat public, protected, dan private , data members, dan nested classes. Secara default, accessibility adalah private. Suatu reference struct (ref struct) sama seperti ref class, tetapi ref struct mendeklarasikan suatu ref class yang secara default bersifat public accessibility.
 
Kita dapat meninstansiasi ref class atau ref struct jika memiliki paling tidak satu implicit atau explicit public constructor. Kita juga dapat dengan mudah menggabungkan standard C++ types dan functions dalam suatu ref class. Meskipun demikian dalam WinRT komponen, kita hanya dapat melewatkan public ref classes, ref structs, value structs, dan value classes.
 

Sintaks untuk deklarasi ref class dan ref struct adalah sebagai berikut. Jika type tersebut public, harus di sealed agar tidak dapat di inherit.


ref class identifier sealed{}

ref struct identifier sealed{}

Contoh penulisan deklarasi untuk HackathonParticipant ref class adalah:

 

#pragma once

using namespace std;
#include<map>

namespace CPPCX01
{
ref class HackathonParticipant sealed
{
public:
  typedef Windows::Foundation::Collections::IMapView<Platform::String^, Platform::String^> NumbersView;
  HackathonParticipant(Platform::String^ name);
  void AddPhoneNumber(Platform::String^ type, Platform::String^ number);
  property NumbersView^ PhoneNumbers
  {
    NumbersView^ get();
  }
private:
  Platform::String^ name_;
  std::map<Platform::String^, Platform::String^> numbers_;
};

}

Dalam ref class HackathonParticipant didefinisikan type NumbersViews dari IMapView interface untuk menampung property PhoneNumbers dari peserta Hackathon di jogja. Perhatikan bahwa type standard C++ std::map digunakan dalam private members, dan WinRT C++/Cx IMapView interface digunakan dalam public interface. Juga perhatikan bagaimana handle-to-object modifier (^) digunakan dalam deklarasi reference type.

Dalam WinRT type system, ref class dan and ref struct adalah reference type. Reference type diimplementasikan sebagai reference-counted pointers ke WinRT objects (COM). C++/CX secara otomatis merubah reference count (ref count) dari suatu object ketika di instantiasi di copy, di set ke null atau lainnya. Ketika reference count menjadi nol, object destructor dipanggil seperti halnya dalam program C++ lain. Tidak ada mekanisme GC dalam C++/CX
 

Contoh implementasi ref class HackathonParticipant akan menjadi seperti berikut:

// WinRTComponent.cpp
#include "pch.h"
#include "WinRTComponent.h"
#include<map>
#include<collection.h>

using namespace CPPCX01;
using namespace Platform;

HackathonParticipant::HackathonParticipant(Platform::String^ name): name_(name) { }
void HackathonParticipant::AddPhoneNumber(Platform::String^ type, Platform::String^ number)
{
   numbers_[type] = number;
}
HackathonParticipant::NumbersView^ HackathonParticipant::PhoneNumbers::get()
{
    return ref new Platform::Collections::MapView<Platform::String^, Platform::String^>(numbers_);
}

Untuk menggunakan class tersebut dalam C++,

using namespace Platform;

HackathonParticipant^ p = ref new HackathonParticipant("Risman Adnan");
p->AddPhoneNumber("Home", "021-78880000");
p->AddPhoneNumber("Work", "021-25518100");
String^ workphone = p->PhoneNumbers->Lookup("Work");

Pada contoh tersebut kita gunakan ref new expression untuk membuat reference-counted WinRT object. Kita menggunakan simbol ^ symbol sebagai pengganti pointer de-reference operator (*) ketika mendeklarasikan variable, tetapi menggunakan operator –> untuk mengakses anggota object. Kita tidak memanggil delete secara eksplisit pada object karena WinRT secara otomatis menghapus object ketika copy terakhir dimemory menjadi out of scope. Pada low level, WinRT object pada dasarnya adalah COM object yang dimiliki oleh suatu “smart pointer”.

Standard C++ library (STL) dan Parallel pattern library dapat digunakan dengan baik di C++/Cx. Sebagian dari Win32 masih dapat digunakan, tetapi ada beberapa APIs yang tidak relevan di WinRT. Untuk 3rd party library atau library anda sendiri, perlu diperhatikan beberapa Win32 Call yang tidak relevan di WinRT object. Daftar Win32 API yang dapat digunakan pada Metro style app dapat diperoleh disini.

 

Pada Windows 8 Hackathon yang akan diadakan di Jogjakarta Mei 16-17, rekan-rekan akan belajar lebih banyak mengenai WinRT dan C++/Cx. Untuk mendaftarkan diri anda, klik gambar berikut ini.

Web Banner Windows 8 Hackathon

Semoga tutorial ini bermanfaat.

 

Ciao – Risman Adnan

Share this post: | | | |

Tutorial untuk Getting Start on Metro Style Apps

Rekan-rekan, menyambut Microsoft Developer Conference – Windows 8 Hackathon di Jogjakarta, beberapa community leader mempersiapkan materi pembelajaran yang dapat digunakan sebagai persiapan menghadapi hackathon. Saya akan cover mengenai WinRT dan C++ bersama dengan Welly Tambunan, Dr. Ridi Ferdiana akan fokus ke C#/XAML dan Yusak untuk HTML/JavaScript.

Berikut ini adalah URL para bloggers yang berisi materi-materi pembelajaran. Setiap peserta Hackathon diharapkan menyiapkan mesin development nya (Windows 8 installed, SDK installed), bisa di laptop dengan memori mininum 2GB dan HDD space untuk sekitar 40GB.

 

HTML/CSS/JavaScript Developers/Designers

Yusak membuat beberapa video untuk developer HTML dan JavaScript, dengan video step-by-step yang ada di Youtube. Klik gambar berikut untuk navigasi ke lokasi tutorial.

image

C# dan XAML Developers/Designers

Dr. Ridi Ferdiana, MIC Lead dari UGM akan membuat beberapa guidance untuk membantu .NETters memulai eksplorasi Metro Style apps development. Salah satunya sudah dirilis melalui blogs nya.

 

image

 

WinRT dan C++ Developers

Untuk pencinta C/C++, dapat memulai eksplorasinya melalui step-by-step guidance di blogs berikut:

image         image

Beberapa informasi yang lebih mendalam bisa didapatkan di official website:

Untuk instalasi dan persiapan mesin development, dapat diperoleh dari MSDN:

image

Hope this helps!.

 

Cheers – RAM

Share this post: | | | |

WinRT Under Cover dari C++

Pada tutorial sebelumnya, kita sudah mempelajari cara membuat native DLL dengan C++ dan menggunakan DLL tersebut dari aplikasi client yang dibuat dengan C# dan JavaScript. Mungkin awalnya terlihat seperti magic, karena metadata dari CalcDLL dapat di query oleh C# dan JavaScript melalui Visual Studio editor seperti layaknya .NET assembly. Pada artikel kali ini kita akan membahas sedikit lebih dalam mengenai under cover dari WinRT. Untuk mengikuti tutorial ini anda membutuhkan tools favorit, ILDASM yang dapat dipanggil melalui developer command prompt (type ildasm).

Saya asumsikan anda memiliki project CalcDLL dari tutorial sebelumnya. Compile project anda dan perhatikan dalam folder Debug, ada dua file, CalcDLL.dll dan CalcDLL.winmd yang dihasilkan oleh compiler. CalcDLL.dll adalah native DLL dari code C++ sedangkan extension *.winmd adalah file Windows Metadata yang mengadopsi format CLI (common language infrastructure) dari .NET. Winmd dapat dibuka menggunakan ILDASM selayaknya .NET assembly. Dari manifest Metadata yang anda dapatkan jelas ini bukan .NET metadata, tetapi // Metadata version: WindowsRuntime 1.2. Ya, ini adalah WinRT Metadata yang visible dari Object Browser dan Intellisense Visual Studio 11. Perbedaannya dengan .NET assembly metadata adalah, ada dua definisi didalam Metadata tersebut, pertama adalah class definition CalcDLL.Calculator dan interface definition CallDLL._ICalculatorPublicNonVirtuals. Interface dibutuhkan untuk mapping antara C++ patterns (seperti constructor) dengan WinRT interface, juga untuk mapping antara parameter output dan return values, serta exceptions dan HRESULT.

Coba perhatikan:

image

Windows Runtime, adalah model pemrograman terbaru yang menjadi backbone aplikasi Metro-style apps dalam Windows 8 operating system. WinRT mendukung pemrograman dengan C++ (dikenal dengan istilah Component Extensions, C++/CX). Aplikasi yang ditulis dengan WinRT dapat berjalan di platform Intel dan ARM tanpa modifikasi code. WinRT pada dasarnya adalah COM-based API, COM yang lebih canggih. Karena berbasis COM yang bersifat native, WinRT relatif mudah untuk interfacing ke beberapa bahasa pemrograman lain. Metadata dari WinRT API disimpan dalam file *.winmd yang di encoded dengan format CLI, ECMA 335. Dengan CLI, overhead nya menjadi lebih kecil ketika aplikasi memanggil WinRT komponen, dibandingkan dengan P/Invoke yang selama ini kita kenal.

Untuk menyesuaikan dengan fitur yang ada dalam WinRT, C++/Cx mengadopsi beberapa C++/CLI sintaks. Regular C++ dengan gaya pemrograman COM-specific juga dapat digunakan untuk menulis code komponen WinRT, yaitu dengan bantuan WRL, WinRT Template Library. Tetapi lebih disarankan untuk menggunakan C++/CX. Jika anda tertarik mempelajari under cover dari WinRT, beberapa video tutorial di BUILD website (www.buildwindows.com) telah tersedia untuk mempercepat proses belajar anda. Saya akan menuliskan beberapa panduan dalam beberapa hari ke depan untuk mempersiapkan rekan-rekan dalam Windows 8 Hackathon yang akan diadakan di Jogjakarta nanti. Klik banner berikut untuk mendaftarkan diri anda segera.

 

Web Banner Windows 8 Hackathon

Hope this helps!

 

Cheers – Risman Adnan

Share this post: | | | |

Microsoft Developer Conference– Windows 8 Hackathon @Jogjakarta

Rekan-rekan developers. 24 jam pertama ketika anda mempelajari teknologi baru sangat berpengaruh terhadap perkembangan pengetahuan kitanantinya. Salah satu slogan yang saya suka, lakukan dengan benar sejak awal. Biasanya, cara para geeks cukup aneh, mereka tidak berhenti ngoprek or hacking teknologi (framework, API, runtime, etc) sampai benar-benar paham. Kami ingin menfasilitasi “cara geeks” tersebut untuk eksplorasi Windows 8, WinRT dan Metro style apps.

Microsoft Developer Conference kali ini, 1000 developer akan berkumpul di Yogjakarta selama 24 jam untuk mempelajari mengenai teknik pemrograman aplikasi Metro di Windows 8 dipandu oleh Software Design Engineer langsung dari Microsoft Corporation USA. Peserta akan berkompetisi untuk menghasilkan Metro Style App terbaik yang akan dipilih untuk memenangkan hadiah menarik dari Microsoft Indonesia. Ini kesempatan luar biasa bagi developer dari kalangan mahasiswa, freelancer dan startup di seluruh Indonesia, belajar dengan benar sejak awal dari sumber yang tepat.

 

Print

Acara ini akan diramaikan oleh pembicara-pembicara ternama dari Microsoft Corporation USA dan akan dicatat sebagai Hackathon terbesar dalam rekor MURI.

 

Profil Pembicara Utama

  • Walid Abu-Habda, Vice President, Developer and Platform Group, Microsoft Corporation
  • Said Zahedani, PhD, General Manager, Developer and Platform Group, Microsoft Asia Pacific HQ
  • Andreas Diantoro, Country Manager, Microsoft Indonesia

Profil Trainer Utama

  1. Risman Adnan, Director Developer and Platform Group, Microsoft Indonesia
  2. Herman Widjaja, Senior Test Lead, Microsoft Corporation
  3. Norman Sasono, Technical Evangelist, Microsoft Indonesia
  4. Irving Hutagalung, Technical Evangelist, Microsoft Indonesia
  5. Darmawan Suandi, Technical Evangelist, Microsoft Indonesia
  6. Julius Fenata, Technical Evangelist, Microsoft Indonesia
  7. Wirawan Winarto, Developer Tools Specialist, Microsoft Indonesia
  8. Umi Fadillah, UX Specialist, Microsoft Indonesia
  9. Dr. Ridi Ferdiana, Microsoft Innovation Center Lead, UGM
  10. Erick Kurniawan, Microsoft Valuable Professional, UKDW
  11. Puja Pramudya, Microsoft Valuable Professional, ITB

Hackathon ini terbuka untuk mahasiswa, alumni, dosen dan IT startup/freelancer yang berdomisili di Yogjakarta dan sekitarnya. Saat ini sudah banyak peserta dari Malang, Surabaya, Bandung, Jogja dan sekitarnya telah mendaftar. Peserta hackathon adalah individual atau tim 1-5 anggota dengan kompetensi yang berbeda, seperti Architect, Developer, Project Manager dan UI/UX Designer/Artist. Kompetensi yang diharapkan dari peserta adalah sebagai berikut:

  • Kemampuan pemrograman: HTML/CSS dan JavaScript atau .NET (C#, VB.NET, C++) dan XAML
  • Kemampuan UI design dan Multimedia dengan Microsoft Expression Designer atau Tool lainnya
  • Telah menginstall Windows 8 di laptop masing-masing dan memiliki ide/skenario aplikasi Metro Style (Tablet/Slate)
  • Memiliki komitmen untuk menyelesaikan aplikasi selama pelaksanaan Windows 8 Hackathon dan sesudah
  • Mengikuti Campus Roadshow di UGM, UKDW, AKAKOM dan AMIKOM untuk peserta Mahasiswa dari Jogjakarta

Bagi yang tidak dapatmenghadiri persiapan Hackathon di campus, beberapa rekan-rekan komunitas, termasuk saya, akan menulis blogs tutorial step-by-step untuk memberi pemahaman yang cukup untuk peserta dalam melakukan persiapan. Banyak sekali ide skenario aplikasi anda bisa dapatkan, yang terpenting adalah anda memiliki pengetahuan yang cukup mengenai Windows Runtime, Metro Style UX guideline dan aspek monetisasi di dalam Windows Store.

 

Sampai bertemu di Jogjakarta, kota kebanggaan kita, pusat kultur budaya Jawa.

 

Hope this helps! RAM

Share this post: | | | |

WinRT Application Binary Interface dengan C++

Tutorial ini ditujukan untuk developer yang ingin mempelajari pemrograman Metro App di Windows 8 dengan C++. Sebelum membahas konsep dan istilah-istilah yang akan membingungkan anda, saya ingin menunjukkan skenario sederhana, dimana kita akan membuat satu komponen DLL dengan native C++ dan memanggil DLL tersebut menggunakan JavaScript atau C#. Sangat sederhana tetapi saya berharap bisa membuka wawasan anda mengenai WinRT untuk eksplorasi lebih dalam.

Untuk mengikuti tutorial ini, anda perlu menginstall Visual Studio 11 Express Beta untuk Windows 8. Silahkan download disini. Saya asumsikan anda telah menggunakan Windows 8 dan siap dengan Visual Studio. Mari kita mulai dengan membuat project WinRT Component DLL (Visual C++). Dalam contoh saya, kita akan membuat DLL sederhana sebagai native WinRT library dengan nama project CalcDLL.

image

Buat satu class Calculator anda yang paling sederhana, dengan satu public method untuk menjumlahkan dua integer. Hapus code yang di generate oleh Visual Studio yang tidak anda butuhkan sehingga WinRTComponent.h anda adalah sebagai berikut:

#pragma once

namespace CalcDLL
{
    public ref class Calculator sealed
    {
    public:
        int Add(int i, int j)
        {
            return i+j;
        }
    };
}

dan WinRTComponent.cpp anda terlihat seperti berikut:

 

// WinRTComponent.cpp
#include "pch.h"
#include "WinRTComponent.h"

using namespace CalcDLL;
using namespace Platform;

 

Selanjutnya compile/build project CalcDLL tersebut dan kita telah siap untuk membuat aplikasi client menggunakan C# atau JavaScript. Untuk membuat aplikasi client di C#, tambahkan satu project C# di solution anda dan pilih Blank Application, beri nama CalcDLLCSClient. Set project C# tersebut sebagai Startup project karena aplikasi client ini yang akan kita jalankan terlebih dahulu.

image 

Untuk menggunakan CalcDLL sebagai referensi dalam project CalcDLLCSClient, klik kanan di menu References dan klik Add Reference. Visual Studio akan memberikan Reference Manager form untuk memilih project mana yang akan anda referensikan ke CalcDLLCSClient. Tentu saja kita pilih CalcDLL.

image

Sekarang saatnya kita membuat User Interface sederhana dengan XAML. Drag satu Textbox control dari Toolbox beri nama yang mudah diingat, CalcResult, dan XAML code anda akan terlihat seperti ini:

<TextBox Name="CalcResult" HorizontalAlignment="Left" Margin="341,55,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="174"/>

Tambahkan using CalcDLL namespace di code behind C# dan instantiate object Calculator, sebagai berikut (tulisan merah):

 

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using CalcDLL;

namespace CalcDLLCSClient
{
    public sealed partial class BlankPage : Page
    {
        public BlankPage()
        {
            this.InitializeComponent();
           
Calculator calcObject = new Calculator();
            CalcResult.Text = calcObject.Add(100, 200).ToString();

        }
    }
}

Dan anda telah selesai membuat C# Client. Untuk menjalankan aplikasi client, tekan F5 (seperti biasa) dan dapatkan hasil perhitungan 100 + 200 di dalam textbox.

image

Dan kita telah selesai membuat satu DLL dengan C++ dan satu client menggunakan XAML dan C#. Jika anda cukup jeli, ini hal yang sangat menarik untuk dipelajari lebih jauh. Terutama buat veteran .NET jaman saya dulu, membuat satu DLL dengan native C++ dan mengkonsumsi DLL tersebut di C#, perlu menggunakan P/Invoke atau COM object. Di dalam WinRT, Application Binary Interface, Language Projection dan Windows Metadata (winmd) memungkinkan hal ini terjadi dengan cara yang natural dan mudah dimengerti.

 

Bagaimana dengan rekan-rekan yang terbiasa dengan Web, HTML dan JavaScript? Apakah bisa mendapatkan hal yang sama? Banyak sekali games engine atau numerical libraries yang masih ditulis dengan C++, STL dan boost. Dengan WinRT, anda dapat memanfaatkan code tersebut untuk membuat aplikasi yang modern dengan C++. Saat anda belajar algoritma di kampus dengan C/C++, saat itu juga anda bisa mulai membuat aplikasi Metro.

 

Mari kita membuat HTML/JavaScript client. Tambahkan satu project JavaScript, berikan nama CalcDLLJSClient. Mirip seperti C#, tetapi kali ini kita akan menuliskan code nya menggunakan JavaScript. Jangan lupa set CalcDLLJSClient sebagai startup project anda. Seperti halnya dengan C# project anda perlu menambahkan referensi ke project CalcDLL. Setelah itu kita bisa membuat satu div di code HTML untuk menampung hasil perhitungan nantinya.

 

<br/>
<div id="calcResult"></div>

Di bagian JavaScript, code untuk membuat object calculator juga sangat sederhana, karena CalcDLL.Calculator telah tersedia dalam Intellisense Visual Studio. Windows Metadata (winmd) menyediakan semua metadata yang dipublish dalam WinRT. Berikut ini adalah code di JavaScript nya.

(function () {
    "use strict";

    var app = WinJS.Application;

    app.onactivated = function (eventObject) {
        if (eventObject.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {
            if (eventObject.detail.previousExecutionState !== Windows.ApplicationModel.Activation.ApplicationExecutionState.terminated) {
                   } else {
            }

            var calc = new CalcDLL.Calculator();
            document.getElementById("calcResult").innerText = calc.add(100, 200);

            WinJS.UI.processAll();
        }
    };

    app.oncheckpoint = function (eventObject) {
 
    };
    app.start();
})();

Jika semuanya berjalan dengan baik, anda akan mendapatkan hasil penjumlahan 100 + 200 di aplikasi client JavaScript. Sekali lagi, pasti banyak pertanyaan yang anda miliki mengapa dengan mudah kita dapat memanggil native DLL yang ditulis dengan native C++ di aplikasi client yang ditulis dengan C# dan JavaScript. Jika anda tertarik mengetahui “what is under the cover”, banyak sekali materi pembelajaran yang ada di MSDN, Channel9 dan BUILD. Saya sangat menyarankan anda melakukan eksplorasi lebih jauh mengenai WinRT, Windows Metadata, App Binary Interface, Language projection, melalui websites tersebut.


Untuk mempercepat proses belajar anda, kami memiliki serangkaian program pembelajaran untuk anggota komunitas melalui Microsoft Developer Conference (MDC). Beberapa hari lagi, tanggal 16-17 Mei 2012, Microsoft Indonesia akan menyelenggarakan MDC – Windows 8 hackathon di Jogjakarta. Event ini akan menjadi sarana belajar yang effisien buat anda, karena dalam 24 jam bersama kami, anda akan mempelajari banyak hal mengenai Windows 8 dan Metro App. Hackathon ini terbuka untuk mahasiswa, freelancer dan professional developer, silahkan mendaftar di : http://aka.ms/mdcjogja. Atau klik digambar berikut:

Web Banner Windows 8 Hackathon

Menyambut MDC – Windows 8 Hackathon, saya akan menulis serangkaian tutorial untuk membantu persiapan anda.

 

Hope this helps!

 

Cheers – Risman Adnan

Share this post: | | | |

Dr. Sehat Sutardja Public Lecture at University of Indonesia

I was mentioned about him long time back, finally he will come for a public lecture event at University of Indonesia.

image

Marvell is a world leader in the development of storage, communications, and consumer silicon solutions. Marvell's diverse product portfolio includes switching, transceiver, communications controller, wireless, and storage solutions that power the entire communications infrastructure including enterprise, metro, home, and storage networking. As used in this release, the term "Marvell" refers to Marvell Technology Group Ltd. and its subsidiaries. For more information, visit Marvell.com.

 

Cheers – Risman Adnan

Share this post: | | | |

Darmawan Suandi as IT Pro Evangelist

I am delighted to announce the appointment of Darmawan Suandi to the position of IT Pro Evangelist at Microsoft Indonesia. Darmawan is joining Microsoft from Astra International where in the last one year he has worked as Application Integration Architect. Prior to Astra, he worked as technical leader at several Microsoft’s customer and partner, like Bank International Indonesia, PACOMNET and Bali Camp, since 1997.

Darmawan will be responsible for driving broad technical audience evangelism. He will focus to engage broad technical audience (IT PRO and Developer) and competitive influential open source audience like PHP and Java. Darmawan will work with technical influencers and user group communities, drive technology adoption and content creation in key channels like IT magazines, Technet, MSDN, INDC, WSS-ID and MUGI websites.

In Darmawan’s own words: “I am delighted to be given the opportunity to lead the technical audience in Indonesia at a very exciting time, and to be responsible for adoption of amazing portfolio of products on Cloud! I’m really looking forward to working across the segments on ensuring Microsoft platform commercial success, and on winning in the many competitive battles to comes. I have strong passion on exploring Microsoft’s technologies and correlate it to business success to make a sustainable IT ecosystem in Indonesia!”


I’m look forward to him bringing his strong business and technology experiences to technical audience here in Indonesia! Please warmly welcome Darmawan to this community and work together with him to make a better IT ecosystem in Indonesia!

 

Cheers – Risman Adnan

Share this post: | | | |

ITPN–First Cloud Computing Technology Institute

Finally, after a very intensive planning, I proudly announce the first cloud computing focus technology institute in Indonesia. This is an important milestone to land cloud computing, especially on Microsoft platform. ITPN – Institute of Technology Purwadhika Nusantara – aims to produce next generation of software engineers who are ready on Microsoft cloud technologies, covering cloud computing for business, games, and mobile.

The core values of ITPN is belief, values and action. ITPN was created from a strong belief that we can produce qualified software engineers in Indonesia in area of cloud computing to serve local, regional and global market. With cloud as its identity, ITPN aims to drive back “scientific and engineering education culture” as its core values while keep encouraging students to be practical in designing and constructing next generation cloud applications (actions).

ITPN curriculum is designed with proper portion of Math, Comp. Science and Software engineering, and very well aligned with all Microsoft platform. All students are required to have MCPD (Microsoft Certified Professional Developer) before graduation and job placement is guaranteed from some selected partners in Microsoft partner and customer ecosystem. ITPN provides link and match to IT industry by involving the employers in certain phases. ITPN will collaborate with PrimagamaPlus to filter talented high school students across Indonesia and provide scholarship for top talents.

POSTER IPTN

In the next 4 years, I expect to have a great pool of talented world class Microsoft certified engineers from ITPN who will build the next generation applications. ITPN’s curriculum perfectly fit to Microsoft technology stack, and I look forward to seeing great education quality up there - and also, I feel so privileged to be able to influence ITPN curriculum from the beginning.

 

Cheers – Risman Adnan

Share this post: | | | |

Inviting you to IMULAI 3.0

image

In many years, I have seen how IT startups created without good business model. This is a very common issue as many of those startups founders are coming from very technical background and having lack of interests in business architecture. Some of them are survived anyway, but it takes 5-10 years to grasp that business architecture is critically important before running a startup. Nothing wrong actually by starting a company without a solid business model, but only few having their success in the first 10 years. Some are just collapsed.


Business architecture/model is not a myth. There are some approaches to define it, through mentoring process or self exploration for instance. In IMULAI 3.0, you will be challenged to present your business model. The top 15 winners will get:

- Mini MBA Enterpreneur
- Soft Skills training
- Attend the Venture Capital (VC) workshops
- VC Pitching Session
- Hardware and Software from sponsors


Get the detail here www.imulai.org and be the winner who will have pitching sessions with Venture Capital.

Cheers – Risman Adnan

Share this post: | | | |
More Posts Next page »