Archive
Porting Apache Avro into .NET Core
We are from Geekseat has been used Avro extensively. Currently our project needs to be done on .NET core so .As i post previously i’m working on porting Apache Avro into .NET Core. Basically there are two Avro library available. One from Apache and one from Microsoft. I want to port both of library as that has been used a lot in big data application.
Let’s get back to Apache Avro.
There are two main problem that made headache when porting this one. One is AppDomain and IL Generator / Dynamic method is missing.
Both problem exists in the ObjectCreator.cs. This class is responsible for dynamically creating object on the fly based on the avro type.
ILGenerator has been known as the fastest object creator by Ayende Research. So i think this can be replaced with Expression tree but not sure how. Then i remember that Zeddy Iskandar has been create a forum post on how to create object with expression tree with constructor. You can see the method from this forum post. Here’s the complete source code of the ctor delegate.
One down, one more to go.
AppDomain has also been solved by Michael Whelan. Here’s the blog post around how to replace AppDomain.
I use the polyfill approach from that blog post. You can see that in action here.
After fixing both problem i’ve got 382 test passed and 6 failing. I’m quite happy with this result, declare victory and push that to repository. Thanks Zeddy and Michael.
Cheers
Awesome free Cloud Services to try !!
Not because I don’t like azure. but everyone is looking for something free. not to mention that I don’t have a credit card. So I like a free cloud services. Especially with .NET support
I think both of this services need to be explored.
Appharbor is very simple to get started with and the feature I like is background process. You can combine the solution and be creative. For some services it’s free.
Realtime apps development is getting common latetly. Being able to push realtime data to client and streaming it efficiently and securely is the need of the modern apps. But building a distributed and networked apps is not easy. You need to know a lot about that. So why build one, let’s use the best in this area. I’ve just found this services and need to give it a try for the capability.
Do you have another alternatif ? Free and .NET support please ?
Cheers
Websocket and Windows .. Why…. :(
As you know, I’ve been playing a lot with WebSocket lately. What I expect is the built in websocket support in IIS. Previously I use websocket library server like SuperWebsocket or
Fleck. But because we have already run IIS on port 80, we have to use another port for websocket. Not a standard one. This is actually against the specification and cause a lot of problem in the strict network policy environment.
The beauty of websocket is in that part. It use a standard port. Open a non standard port in some company is very difficult job. Firewall and proxy friendly in the future. Of course you can use tweak to make it run in the same port or use proxy to enable the behaviour. But that’s unnatural.
Finally i ‘m so happy because it will be supported in the IIS 8 with help .NET 4.5. You can take a look at this interesting article. Very simple codes for websocket. Just create the ashx handler and it works.
But the happiness ends there.. Take a look at this picture..
You should definitely sad to hear about this one. We can be expected just to change our production server in the short run. There are a lot of work need to be done.
So we have to find another alternative right ? until next post.
Cheers
Going Native untuk C# dan .NET Developer
Beberapa bulan belakangan ini Microsoft dengan gencar menggalakkan program Going Native atau sering juga disebut sebut C++ Renaissance. Hal ini tentu menarik perhatian banyak programmer managed code (c# .net). Ada mungkin yang merasa terusik dengan kebangkitan kembali c++, ada juga yang skeptic dsb.
Sebelum memberikan banyak komentar mengenai Going Native ini, mungkin terlebih dahulu kita harus terlebih dahulu mengakui bahwa software di dunia ini paling banyak ditulis dengan c. Sebut saja operating system linux dan windows. Sehingga bagaimanapun kita tidak akan lepas dari native code.
Dunia Windows
Saya bekerja di lingkungan Windows, wajar saja karena saya adalah .NET developer. Sistem operasi Windows tentu saja tidak dapat dipungkiri yang paling banyak penggunanya. So we have to face it. We’re living in Windows World.
Code base dari Windows sendiri banyak ditulis dengan menggunakan C. Seiring dengan berjalannya waktu maka code c tersebut dibungkus dengan menggunakan C++ sehingga terlihat Object Oriented. – -“
Tetapi tetap saja native dari C tidak hilang.
Untuk sejenak kita tinggalkan dunia .Net dan kilas balik ke dunia sebelumnya dimana Win32 adalah segalanya. Anda akan berkenalan dengan MFC, COM dan ATL. Kesemuanya itu familiar untuk kalangan Win32 programmer.
.NET dan keterbatasannya
Sejak kemunculan .NET framework maka banyak orang beranggapan bahwa C++ sudah tidak relevan lagi di dunia industry. Hal ini bisa jadi benar tergantung di lingkungan mana orang tersebut berada. Jika kesehariannya pekerjaannya adalah membuat business application yang berkutat dengan data,data dan data binding ? Maka tidak ada gunanya untuk menggunakan c++ untuk hal tersebut, karena salah satu inti dari software development adalah produktifitas dari programmer.
Tetapi…. Kadang kala kita akan berhubungan dengan kasus dimana .NET mencapai keterbatasannya. Tidak semua Win32 API di ekspose ke managed c#. Kadang kala kita harus membuat wrapper untuk mengakses Win32 API tersebut.
Meskipun Microsoft sudah menyediakan alternative untuk menutupi kekurangan managed code tersebut dengan menyediakan Windows API Code Pack. Tetap library tersebut tidak mencakup keseluruhan dari Win32 API. Kita juga tidak dapat mengharapkan Microsoft untuk menulis ulang dari library tersebut sepenuhnya ke c#. Coba lihat Visual Studio 2010. Visual Studio 2010 memanfaatkan ketangguhan dari WPF and XAML. Tetapi tetap saja code native sebelumnya tidak bakalan dibuang begitu saja. Native code still exist. That’s the point. Library tersebut pasti di reuse dan di wrap sehingga dapat diakses dari .NET.
http://archive.msdn.microsoft.com/WindowsAPICodePack
http://windowsteamblog.com/windows/b/developers/archive/2009/05/18/windows-7-managed-code-apis.aspx
http://www.microsoftpdc.com/2009/CL12
Suatu saat mungkin anda akan merasakan hal yang sama ketika dihadapkan kepada kasus dimana .NET tidak dapat menyelesaikan masalah anda sepenuhnya. Saya juga pernah mengalaminya ketika mengerjakan tugas kantor yang berhubungan dengan Video dan Audio processing. Pada akhirnya tetap saja kita harus mengakses dan menggunakan library Win32, COM dengan menggunakan interoperability.
Interoperability juga harus dilakukan dengan hati2 karena kita bisa kena performance penalty jika melakukannya sembarangan.
Beberapa website ini akan memberikan anda gambaran dan pembuktian mengenai keterbatasan .NET dalam beberapa hal sehingga membutuhkan c++.
http://wpfmediakit.codeplex.com/
Ada beberapa cara untuk melakukan interop .NET ke C++. Saya hanya akan memberikan pointer kepada anda untuk melakukan eksplorasi sendiri.
http://blogs.microsoft.co.il/blogs/sasha/archive/2008/02/16/net-to-c-bridge.aspx
http://msdn.microsoft.com/en-us/library/aa730837(v=vs.80).aspx
http://stackoverflow.com/questions/1933210/c-cli-why-should-i-use-it
Apakah anda sudah dapat menerima mengapa managed guy juga membutuhkan native code ?
Tentu saja saya akan melanjutkan inception ini 🙂
Dari penjelasan di atas saya akan memberikan beberapa point dimana kita membutuhkan native c++. Seperti yang kita ketahui bahwa c++ merupakan bahasa yang dekat ke mesin, memiliki abstraksi yang bagus tanpa mengorbankan performance. Sehingga c++ sangat bagus untuk hal-hal berikut
- Mengakses Operating System resource,
- Hardware
- Graphical processing
- Computing power
- Game programming dengan DirectX
- Mengunakan code yang sudah ada dan ditulis dengan menggunakan c, c++
Saya tidak mengatakan bahwa kita harus sepenuhnya pindah agama ke c++. Saya hanya mengingatkan bahwa kita sebaiknya mempersiapkan diri jika dihadapkan dengan keterbatasan managed code. Saya berharap agar kita dapat mengantisipasi hal ini.
C++11
C++ sendiri sudah mengalami perubahan yang sangat besar belakangan ini. C++11 yang baru saja disahkan akhir tahun lalu benar-benar berbeda dengan c++ yang dulu anda kenal. Seperti yang dikatakan oleh pembuatnya Bjarne Stroustrup, c++11 feels like a new language. Jika anda merupakan programmer c++ veteran maka anda dapat mengupgrade pengetahuan anda mengenai perkembangan yang ada. Jika anda merupakan pendatang baru maka anda dapat saja langsung belajar style baru dengan c++11.
Learning something new wouldn’t hurt right ?
Windows 8
Dengan datangnya Windows 8 dengan MetroStyle UI yang diprediksi bakalan release tahun ini, semakin membuat dunia Windows bervariasi. JavaScript dan HTML developer sekarang sudah menjadi first class language untuk melakukan pembangunan aplikasi MetroStyle. Apakah ini membuat c# dan c++ menjadi tidak relevant lagi ?
Tentu saja tidak.
Masing-masing developer dapat memilih alat yang dirasa sesuai dan nyaman digunakan. Tapi…
Satu hal yang pasti adalah keterbatasan di JavaScript, C# tetap masih ada di MetroStyle Apps. Sama saja seperti kasus di Windows sebelumnya. Kedatangan WinRT mungkin membawa angin segar bagi Windows Developer yang tidak familiar dengan COM dan kerumitannya. Tetapi tetap saja untuk saat ini tidak semua Win32 yang dibungkus oleh WinRT.Sebagian harus diakses langsung dengan menggunakan Win32 atau kita harus membuat WinRT component dan mengaksesnya dari JavaScript atau C#.
Tidak jauh berbeda bukan dari jaman ke jaman.
C++ selalu menghantui hidup kita. Kita mungkin bisa lari dan mengabaikan tetapi suatu saat kita pasti dihadapkan kepada keterbatasan itu. One language that can do it all is c++.
Berikut salah satu video yang saya rasa menggambarkan pentingnya interoperability ke c++
http://channel9.msdn.com/posts/Raman-Sharma-Building-Metro-Style-Apps-with-C-and-JavaScript
Anda ingin membuat games dengan DirectX di MetroStyle?
Yeah. That’s should be in c++ I think. There’s no other choice.
Parallelism
Salah satu hal yang makin marak belakangan ini juga adalah mengenai parallelism. C# 5 juga sangat gencar dengan fitur ini.
Nah bagaimana dengan c++ ?
Pagi ini saya baru saja menonton video yang mungkin membuat anda semakin yakin bahwa c++ pantas untuk dipelajari. J. Video ini mengenai c++ AMP (
http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-802T
Video tersebut mengenai C++ AMP (Accelerated Massive Parallism)
Nama yang cukup menakutkan bukan ?
Saya langsung saja mencari padanan dari hal tersebut di c#. Kemudian saya pulang dengan tangan hampa. L. Kita harus melakukan interoperability lagi untuk hal ini.
http://blogs.msdn.com/b/pfxteam/archive/2011/09/21/10214538.aspx
http://blogs.msdn.com/b/pfxteam/archive/2011/11/12/10236375.aspx
C++ untuk c# developers ?
Jadi tidak aneh saya rasa jika dengan kemunculan Windows 8 dan MetroStyle appsnya, c++ semakin relevan di industry. Saatnya bagi kita programmer c# untuk belajar c++. Ingat bahwa ini adalah investasi. Kita tidak akan merasakan efeknya sekarang tetapi di masa yang mendatang. J. Berikut adalah buku yang membantu anda untuk melakukan pengenalan dengan c++
http://blogs.msdn.com/b/jerrynixon/archive/2012/02/20/c-for-c-developers.aspx
Persiapkan diri anda untuk menyambut Windows 8 dengan c++. :).
Go Native!!
WP 7 dan Push Notification di Azure
Windows Phone 7 and Azure is the perfect match. Learn that from now. 🙂