Converting between different types of enums is quite easy and it typically works fine. For a while. But changed business requirements might require that you modify the enums, and it’s easy to forget a conversion somewhere.
You have probably created a windows service or other types of applications where you have code which need to be run in the background to not block the main thread. To do that you have different types of solutions in .NET, for instance Threads, Timers and Tasks. However, you need to construct them manually, make sure that they do not throw unhandled exceptions etc.
Griffin.Framework provides a simpler solution where you only need to implement a small interface. The library also have full support for your favorite inversion of control container, which enables to to use dependency injection in your application services.
Griffin.Framework have built in support for streams if you are using MicroMsg. This example will demonstrate how you can send a file stream over the network.
Have you read about the Command/Query separation pattern and wondered how hard it would be to get started with it? With Griffin framework you only need a few lines of code to have everything configured, no matter if the messages are being executed in process or executed in a server application somewhere.
ProtoBuf is Googles open serialization format which can be used to serialize objects in a standardized way. With it, different platforms can communicate with a format that is much more efficient than XML. Combine the most popular implementation if it, protobuf-net, with Griffin.Framework and you get an easy and fast way of sending information between processes.
Griffin.Networking was my attempt to create a Netty inspired library. The library is working pretty well but the internal architecture became a bit complex which I am not really satisfied with. Griffin.Framework can now be considered to be a stable replacement of Griffin.Networking.
This article explains how you can automatically proxy CORS requests (Cross-origin resource sharing) in jQuery without changing your existing code. The proxy is integrated in ASP.NET and works with all ASP.NET libraries like WebForms, Mvc and WebApi.
I introduced Entity Framework (Code first) to my team in the beginning of this week. The other devs have not used it before, but as they are a Microsoft focused shop it was the only option other than ADO.NET. EF is a great tool but yet again I’ve got an example of how it blinds developers. It’s not just a Entity Framework problem, but frameworks in general.
The thing is that we have tables which represents our entities. Some of the tables are loosely coupled, but the EF Power Tools interpreted the relations as strong (thus interpreting some tables as junction tables). Most of the problems was sorted quickly by the dev. But one problem remained. And that was that cascading deletes did not work.
Instead of writing the delete queries manually the dev spent a day or two to fix the problem. I’m quite certain that a vanilla ADO.NET solution would have taken at most 30 minutes. What I’m saying is that ORMs works for most cases but not all. Unfortunately they blind developers. ORMs are so easy to use for the more common cases that the devs doesn’t seem to see that they waste hours on something that could have taken minutes with an alternative solution.
Use the right tool for the job.
I’ve followed the development of bitcoins for a while and I’ve from the start avoided to get involved (i.e. using bitcoins). I don’t think that there is anything wrong with bitcoin in itself. It’s a real awesome innovation. However, I don’t think that bitcoin will ever work in the real world. Here is why.
As you might know I’m running a .NET exception service called OneTrueError. When I moved from a NoSQL db to SQL Azure I had to be able to work with the database in some way. I’m not using OR/Ms any more. They might significantly reduce the bootstrapping, but in the long run they always tend to make you struggle as the application grow. To me, ORMs is a bit like ASP.NET WebForms, but for data. i.e. it tries to make something what it isn’t. I therefore wanted something that did not take away the control from me nor hide the underlying layer. I still want to work with my domain entities though.