Monday, November 18, 2013

Optical Character Recognition in .NET....

Interesting post about the optical character recognition in .NET

http://digit.lk/optical-character-recognitionocr-in-c/

Lakmal

Sunday, May 19, 2013

Simple Made Easy

Very very useful talk by "Rich Hickey" about how we can make things simple in Software development, which will leads to make things easy.
Simple Made Easy....

Cheers

Lakmal

Wednesday, April 24, 2013

Analysis Paralysis

Over thinking or over defending things can prevent lots of winning moments, profits or new inventions than preventing failures. Detail analysis should come to play at the right time and in right phase of anything. This is not only about software developments, it is applicable to any industry.

Found a nice article about Analysis Paralysis, an idea which is applicable to any domain.

http://www.reliableplant.com/Read/18128/analysis-paralysis

Cheers

Lakmal

Sunday, March 31, 2013

HTTP for Developers

HTTP, sometimes it is not quite noticeable that that HTTP is the paying a major role in allowing us to,

  1. Learn the latest cricket news and Updates from CricInfo.com
  2. Watch funny videos from YouTube.com
  3. Search the we and find the stiff using google.com
  4. and almost all whatever you do with the internet 
As Programmers, we got major responsibility of making opportunities to use Internet for people to achieve different different things in their life. Even though HTTP has been hidden from the Web Developers by the tools they use to develop web applications, still we need to know the basics, which will help to make things comfortable in,
  1. Come up with new solutions
  2. Troubleshooting the issues
  3. And etc.
Here I found a series of Articles, which are explaining the HTTP for developers from odetocode.com

Lakmal
 

Tuesday, March 26, 2013

Software Inventory

We know that different kind of inventories that we need to deal with in day today life. Inventory is not something that can make money. But what can make money is Products and Services which are in production.

The story is same for Software industry too. Having the ideas,code or software in inventory stage, is not making satisfaction for any one. While it is growing the size of the them, we know that no one feels comfortable about it. So what we need is we need our software in production, without been exist them as ideas,codes or software inventories. Joel Spolosky talks about Software inventory, content is very clear and useful.

Performance, Workload, scalability and etc, once systems are in Production


Udi Dahan, I found his writings not so long ago, but kind of addicted to his blog because of the way he writes the stuff and their content. He is a Software Simplist, which is not a familiar designation in our environment.

Recently I read his article on an experience they had with one of their System in Production. It was about handling the Workload, Performance and Scalability of the system, once it was exposed to the real production scenarios. We know that we are not that good in these type of system attribute testing in our software development and testing environments, but when it’s come to the production, things can go horribly wrong sometimes, if you had not thought about the them at the design phase of the system.

It is true that we can’t predict all possible scenario at the development stage of the systems, but we have to make sure that we have room for the extensions, whenever they need to be in place.
Here is the article. It is been written few years ago, but content is almost valid for more years to come too. 

Saturday, March 16, 2013

System Architecture And Design Talk...


Few days back we had a discussion about the System Architecture and System design within the Organization. Discussion had an agenda itself and first point was about stories that all of us wanted to share with each other. We had around 14 members participated for the discussion and it was very active discussion too. Sometimes it is bit nervous to hear about the things that we did wrong; but still its great know how people felt about them. Truly I experienced the power of making opportunities to talk about the things that they asked to work is the past.

In general, senior technical people used to work in System Architecture and Design stuff and they are the people who take the decisions most of the time. But the people who are truly implementing them, what’s about them?. Very rarely we asked about the problems they faced, how they feel after they worked on the Architecture and the Design we proposed them to work. We start the projects; people do implement them anyhow and deliver them with lots of difficulties. Finally once we delivered the solutions we have parties and gatherings and etc. If you delivered something successfully, people forget about painful stories behind it and try enjoying the winning moment almost all the time.

But people who work hard on the things that we asked, also have lots of painful stories to tell and share with all. Sometimes even though things went ok, but still people have things to mention in front of the people, who forced them work on that.

I would like take four key points came up in the discussion and talk a bit about them in detail.
          1. Take all the Architectural Decisions at first stage is not possible, but let it evolve by the time
         2.  Re-factor the code after each major releases to the QA
         3. Simple Deployment and it should be decided from the first
         4.Think about data volume from the first, when designing the Databases

Let Architecture Evolve by the Time

Decide the total architecture of a System (large Scale or medium scale) is almost impossible at the first phase of the Project. It’s even not possible if you do the same thing again and again too. Because each times you find things to improve or enhance while develop the systems.

But any of Software Architecture based one or two very simple basic concepts (Styles). These concepts we used say as Architectural styles. Ex Layered Architecture, Service Oriented Architecture, Aspect Oriented Architecture and etc. System Architecture can be a combination of few of these basic Architectural Styles. Sometimes we may need to build sort of custom architectural styles for Our Purposes, and you will not find them in common. Those we can specify as Domain specific or Application Specific Architectural Styles.

My opinion here is that we need to get that basic concepts right at the first stage and let Architecture to evolve around them. Keeping the concepts simple as much as possible will allow us to extend the system Architecture and the Design in the latter part of the Project Life cycle. But you may have a question that to what extent that we have to finish the Architectural

Implementation at the initial stage.  That’s depends on the feeling that architect and the team has. If you feel that you architectural implementation is enough to cater the current system implementation to accomplish main architectural goals, and then stop there for a while.

Re-factor the Core after each Major Release

One of the best points that came out in the discussion, yes we do re-factor sometime implicitly or explicitly. But here point is about doing the re-factoring explicitly. Developers hate of doing re-factoring most of the time, because they loves the code they wrote. May bit lazy to do things or fear for changes. But still we have to convince this as much as possible.
But avoid re-factoring effort as much as possible; we have to avoid taking Architectural and Design decisions at the early stages. That’s why we were talking about letting the Architecture and the Design to evolve by the time as system implementation goes on.

Simple Deployment and it should be decided at first

Again having things decided too much at the initial stage might eat our lots of energy for later re-factoring and changes. Yes we need to have basic style for deployment decided at the first stage. But my point is that we have to let it also evolve by the time. Once we have system implementation done to some extents, we know 100% which artifacts we need to deploy at which places, which time and etc.

Think about Data Volume at the initial Stage

Database is the one of the major building block of the system for data oriented applications. If you are going to change it by time to time, system base will be shaken frequently and that can make system unstable. Yes think about data volume at the start of the project will benefit lot. But at the same time we should make room for changes too. Mean if we face a situation where we need to change our database structure, how we are going to make it with minimum effort, which we have to think at the initial stage.

There were around 40 points came in the discussion and almost all of them are valuable. Let’s see how it goes in the next meet up.

Lakmal

Saturday, March 2, 2013

Entity Framework 6 Alpha 3 with Code First Stored Procedures and Connection Resiliency

Even though I'm not a big fan of Entity Framework, this looks interesting, the latest Entity Framework 6 Alpha 3 release.
Here is the link..

http://www.infoq.com/news/2013/03/ef-6-alpha-3

Lakmal

Monday, February 18, 2013

Choosing the Right Web Programming Model with ASP.NET

Choosing the right Programming model in ASP.NET, sometimes we do it without knowing anything just blindly, sometimes it's depends on our technology(architecture, model) preferences.

But it is always better to choose the right programming model with the evidences. I found a small  video explaining this very briefly, from Microsoft web site..

And this is the video link..

Cheers

Lakmal





Saturday, February 16, 2013

Localized Mobile Note Pad with Google Translation API


This idea is so much related to devices like Mobile phones, Tabs, Pads or may be for PCs and laptops. If you have used any of these devices mentioned, you may already have heard or even used the software application called “Note Pad”. There are different vendors; they provide these note pad applications with different features, Examples Note Pad comes with Windows Operating system, Note Pad++ and etc.
But for all of them, one thing is common that they all have to facilitate to manage (Create and Update) the notes. Even a basic note pad has many cool and advance features these days,
            1.  Line Numbers
            2.  Large Number of Encoding supports
              3. Word Wrapping
4            4. And more


Ok, I just took few minutes to give you a small introduction on Note Pads, but here my point is developing localized Note Pads, Especially for Mobile devices, Tabs, Pads and may be PCs and laptops . Most of our keyboards are English keyboards, but for some languages, they have these devices with localized keyboards, but for most, it’s not yet.
So use local language even with an English key board would be a great feature. But then we will face the problem of how you match English character or a word into the local language character or a word.
Google Translation API is the solution for this and Google is supporting this feature (translation) for large number of languages already and it’s being developing and improving day by day. Most importantly, if you use Google Translation API, then you will get latest translation facilities each time you use it. Means assume that you developed a note pad few months before, for Sinhala Language, and Google made number of updates few days back from today, I mean added few more words and etc, still you get these new words, since you call their Web API directly. If you know bit about Web Protocols; client applications should use the REST in calling this Web API.

To show you example for this, Google has this feature already implemented and hosted in their cloud. For Sinhala Version you can find from this URL - http://www.google.com/intl/si/inputtools/cloud/try/. (Just to make you update, Sinhala is the Language used by Majority of people in the country called Sri Lanka. To know about Sri Lanka, just Google it J. It’s a beautiful county, which you would love to see).



Just imagine, you can give this feature in Mobile, let your customers to send SMSs, Emails, or have notes, publish contents into Social Media in local language though a Mobile Note Pad, that would be great, isn’t it?. Not to wary about someone else has already implemented this or not, just try this with something unique, you will succeed surly. I bet you, most the languages, this has not been done yet. Just check Android Apps, IPhone App store, Windows mobile apps, or any other.

Little bit about Google Translation
Google Translation API is not a free Service, but it’s not very expensive service either. It’s just 20 dollars for 1 M characters. Just check the pricing here.


Cheers
Lakmal

Tuesday, February 5, 2013

Signing Assemblies..

Why we need to sign assemblies? hmm there are number of reasons that we need to sign assemblies, but it is not a compulsory task to do.

Signing assemblies make sure authenticity of it. Means once we have an assembly from the third party and assembly is signed, then it is assured we are getting the exactly same one that has been built by the the third party, which we are supposed to get it from. If assembly is not signed then it is not assured that no one has changed the assembly and built it again once it is delivered from the third that we are supposed to have it from.

Even though it is assured the authenticity of the the assemblies, still it is bit slow in loading singed   assemblies. And that force lots of the parties to not to sign assemblies in some scenarios. There are scenarios that we don't need to worry about singing assemblies.

Without singing assemblies we can notdeploy them in Windows GAC and GAC only accepts signed assemblies. So if you are going to deploy any of your assemblies in GAC, make sure you sign them with Strong names.

We know that we sign the assemblies with String Names, what is the meaning of this string named assemblies. Strongly named means that name is globally unique and there will not be one string name for two signed assemblies.

The next question is how .NET platform make sure these strong names for signed assemblies.

String Name = Name Text + Assembly Version + Culture Information + Public Key + Digital Signature

So this equation makes signed assembly's name strong. And these strong names ensure following feature of signed assemblies,


1. Strong names guarantee name uniqueness by relying on unique key pairs. No one can   generate the same assembly name that you can, because an assembly generated with one private key has a different name than an assembly generated with another private key.

2. Strong names protect the version lineage of an assembly. A strong name can ensure that no one can produce a subsequent version of your assembly. Users can be sure that a version of the assembly they are loading comes from the same publisher that created the version the application was built with.

3. Strong names provide a strong integrity check. Passing the .NET Framework security checks guarantees that the contents of the assembly have not been changed since it was built. Note, however, that strong names in and of themselves do not imply a level of trust like that provided, for example, by a digital signature and supporting certificate.

Signing assemblies can be done through Visual Studio or through the command line. But in any case at end of the day we use .NET SDK utilities. If you have already signed assemblies, there you can generate and give or give existing key file while you signing assemblies.

This singing is been done through a Certificate Authority and if you are using the built in Key Generation facility in the Visual Studio then you are using the Windows built in Certificate Authority. But instead of that you can use third party Certificate Authorities like Verizon for sign you assemblies.

Please following links for more information about signing assemblies,

http://msdn.microsoft.com/en-us/magazine/cc163583.aspx
http://msdn.microsoft.com/en-us/library/ms247123(v=vs.80).aspx
http://blog.codingoutloud.com/2010/03/13/three-ways-to-tell-whether-an-assembly-dl-is-strong-named/
http://msdn.microsoft.com/en-us/library/xc31ft41.aspx
http://msdn.microsoft.com/en-us/library/bb385180.aspx
http://stackoverflow.com/questions/3975723/c-why-sign-an-assembly
http://stackoverflow.com/questions/1197133/anything-wrong-with-not-signing-a-net-assembly
http://stackoverflow.com/questions/4725246/signing-net-assemblies?lq=1