Multithreaded Programming Techniques in C#

The age of single core CPUs in computing is long gone. As processing power increases and multiple processing cores get stacked into a single silicon chip, the applications we write too need to be optimized to utilize the underlying hardware it runs on.
Though we overlook at times and focus ourselves more on the business logic implemented, in the long run in terms of usability and scalability applications would need to be revised and thought through for better optimization.

Multithreading however helps in solving the following.

  • Improved responsiveness of applications.
  • Maximize utilization and performance.
  • Concurrent access to resources.

Continue reading

Contour Identification of an Image using C# and EmguCV

Finding Contours can be useful in creating masks for images and to segment and extract features from an image. Its used by Meteorologists to understand weather maps and for analysis and forecasts. The following post describes how contours could be identified in an image.

Implementation would be based on EmguCV the popular .NET ported version of OpenCV. Even though OpenCV is built in C++, EmguCV provides a wrapper which manages to invoke the same OpenCV libraries.By use of the EmguCV wrapper it provides all the necessary functions as well as data types of OpenCV in a .NET compliant library making it easier to implement.

Continue reading

Configure Jenkins with SonarQube for static code analysis and integration

Continuous integration and static code analysis

Continuous integration deals with merging code implemented by multiple developers into a single build system. Developers frequently integrate their code and the final build is automated, developer unit test are executed automatically to ensure the stability of the build. This approach is inspired by extreme programming methodologies. With a test driven approach put into place continuous integration would yield in the following benefits.

  • Identifying bugs and issues immediately as they arise.
  • Automated deployment and configuration to minimize manual deployment time.
  • Supports in generating documentation (Java Docs) automatically as post build steps.
  • Identifying conflicts in changes integrated.
  • Easier revert back to stable builds.
  • Metrics which provide code complexity and coverage.

Continue reading