Radix Sort

Earlier this week I ran into a description of Radix Sort. This sorting algorithm has been around for a few centuries (yes; that is not a typo). The algorithm dates back to 1887 to the work of Herman Hollerith (and yes; he was the inventor of the Hollerith Card Code for punched cards used in the past century).

This sorting algorithm is not the fastest, it requires additional space, but has been around for a long time. When you read about it, seems like it should not work; but it does. Continue reading “Radix Sort”

Returned Value versus Exception Handling

Most software developers now a day write code using object oriented (OO) programming languages. In some cases, due to performance reasons, some code may be written using a non OO language. One way or the other, the question may come up if return codes are better than using exceptions. I do not believe you can come with enough reasons to justify one method or the other which would be accepted by most software developers. What I will do is discuss some considerations and give my opinion. Please take it all with a grain of salt. Continue reading “Returned Value versus Exception Handling”

Geographic Information Systems (GIS)

A few weeks ago I was looking in Amazon for books that dealt with photogrammetry. During my search some associated books showed up. After taking a look at the table of content on two that called my attention, I decided to go with both, not for depth in the subject, but to get a broad look at GIS.

One of the books I selected is titled Geographic Information Systems – An Introduction by Tor Bernhardsen published by Wiley in 2002. In chapter 10 Data Collection II, section 10.3 Photogrammetry Mapping provides a simple and high level description of the basics in the subject. To be honest, you can get a more up to date and extensive description in Wikipedia. Continue reading “Geographic Information Systems (GIS)”

Storage Interface

The requirements for this project call for some type of interface which will allow clients to access storage services in a uniform way. On some occasions the client (e.g., on a smart phone, tablet or desktop) might want to store an object locally while on other occasions the same client might want to store or retrieve the same or other objects using a remote storage system. Continue reading “Storage Interface”

Coin Change 2

Went after the LeetCode challenge Coin Change 2 which you can find at the following URL:  https://leetcode.com/problems/coin-change-2/?tab=Description

There are two approaches typically used to solve this type of problem. They are:

Dynamic Programming

I consider dynamic programming more of an art than a science. I believe developers need to use it often enough to solve adequate problems to achieve and maintain proficiency in the technique.

I visited the Wikipedia page on Dynamic Programming and took notes which I present in the following couple paragraphs. That is simpler and quicker than starting from scratch ;o) Continue reading “Coin Change 2”

Test Driven Development

What is Test Driven Development? Is it useful? Should I and my team make use of it?

According to Wikipedia (I have edited the following paragraphs):

“Test-driven development (TDD) is a software development process that relies on the repetition of a very short development cycle: Requirements are turned into very specific test cases. The software is improved to pass new tests, only. This is opposed to software development that allows software to be added that is not proven to meet requirements. Continue reading “Test Driven Development”

Java Native Interface (JNI)

In today’s world most systems are architected as a set of services implemented in different programming languages deployed on multiple hardware platforms. Often it is required for a piece of software written in a different programming language than the module it needs to interface with. I have been in situations when modules written in C# or Java had the need to interface with code written using the C programming language (typically for performance, separations of concern reasons or to allow the Java program access functionality written in a different language). Continue reading “Java Native Interface (JNI)”

Bash on Ubuntu on Windows

I have been working and developing software on Linux, UNIX and Windows for a while. On the Microsoft platforms I started on MS DOS. Last week I was talking with a colleague and he mentioned that while still in BETA, Microsoft has something called Bash on Ubuntu on Windows. I do enjoy the simplicity and power of the Linux shells. I decided to give the Microsoft BETA software a run. Continue reading “Bash on Ubuntu on Windows”

Why Apache Cassandra?

cassandra_logoThe following question came up a couple weeks ago: Why would I use Apache Cassandra? First of all let’s get a definition for Apache Cassandra. Edited from Wikipedia (https://en.wikipedia.org/wiki/Apache_Cassandra):

“Apache Cassandra is a free and open-source distributed database management system designed to handle large amounts of data across many commodity servers, providing high availability with no single point of failure. Cassandra offers robust support for clusters spanning multiple datacenters, with asynchronous master less replication allowing low latency operations for all clients. Continue reading “Why Apache Cassandra?”

Shell Sort

shell_sortI spent some time reading (section 2.1 in the Algorithms fourth edition by Robert Sedgewick and Kevin Wayne) and experimenting with the Shell Sort algorithm.

The Shell sort algorithm is an optimized Insertion sort. The idea is to reduce the number of exchanges by presorting elements in sub sequences. Continue reading “Shell Sort”