Archive

Archive for the ‘.NET’ Category

Porting Apache Avro into .NET Core

September 7, 2016 Leave a comment

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.

appdomainmissing

dynamicmethod

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.

test_passed

Cheers

 

 

Categories: .NET, net core Tags: , , , ,

Awesome free Cloud Services to try !!

December 7, 2012 Leave a comment

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. Open-mouthed smile 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.

image

 

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.

image

 

Do you have another alternatif ? Free and .NET support please ?

 

Cheers

Websocket and Windows .. Why…. :(

December 7, 2012 1 comment

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.

image

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.

image

But the happiness ends there.. Take a look at this picture..

image

 

image

 

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. Smile

 

Cheers

Categories: .NET, HTML 5, IIS, WebSocket Tags: , , ,

Going Native untuk C# dan .NET Developer

February 29, 2012 Leave a comment

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://windowsteamblog.com/windows/b/developers/archive/2010/04/27/windows-api-code-pack-past-present-and-future.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://www.streamcoders.com/

http://wpfmediakit.codeplex.com/

http://jeremiahmorrill.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

  1. Mengakses Operating System resource,
  2. Hardware
  3. Graphical processing
  4. Computing power
  5. Game programming dengan DirectX
  6. 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

February 25, 2012 Leave a comment

Windows Phone 7 and Azure is the perfect match. Learn that from now. 🙂

 

ASP .NET MVC, Razor and WebMatrix

July 11, 2010 1 comment

ASP .NET MVC merupakan web programming model yang baru dari Microsoft. Dibandingkan ASP .NET banyak kelebihan dan juga kekurangan. Tapi saya lebih memilih model programming dengan ASP .NET MVC karena lebih nature terhadap aplikasi web yg stateless.

Ketika aku mencoba ASP .NET MVC ada sedikit perasaaan tak nyaman dengan model programming di View. Hal tersebut adalah pasangan tag yg harus mengapit code2.

<ul id="products">
	<% foreach(var p in products) {%>
		<li><%=p.Name%> ($<%=p.Price%>)</li>
	<% } %>
</ul>

Dengan new view templating engine Razor kita dapat menulis view dengan cara berikut

<ul id="products">
	@foreach(var p in products) {
		<li>@p.Name ($@p.Price)</li>
	}
</ul>

Perhatikan bahwa tag2 pengapit code tersebut dihilangkan. Lebih simple kan? Source untuk razor salah satunya adalah

Razor in InfoQ
Introducing Razor by Scott Gu

Berita baik tidak hanya berhenti pada Razor saja. WebMatrix juga membawa satu kemudahan lagi. Yah WebMatrix menyediakan kemudahan development web dari awal sampai akhir. Dari building web page, code logic, debuging, test, db management n deployment.

Source untuk WebMatrix :

WebMatrix in InfoQ
ASP .NET WebPage using Razor Syntax
WebMatrix How To
Create WebSite from Gallery Application

Enjoy It….

Categories: .NET, ASP .NET MVC

Reading NSB Message Content

March 10, 2010 2 comments

Jika terjadi exception pada handler dari NServiceBus maka proses tersebut akan di eksekusi sebanyak 5 kali secara default. Dan jika tidak juga berhasil ditangani maka message tersebut akan dipindahkan ke error queue. Kemudian exception yg ada tersebut akan di log oleh log4net.

Sehingga system administrator akan membaca log tersebut untuk mengetahui penanganan kesalahan dan setelah perbaikan mengembalikan message yg ada di error queue tersebut ke queue semula.

Penanganan tersebut dijelaskan pada Dokumentasi NServiceBus pada bagian http://www.nservicebus.com/Documentation.aspx
Read more…