Posts on Technology

NMEA Generator: A drawing tool for creating GPS logs


Posted by Diego Assencio on 2017.01.06 under Technology (Location services)

NMEA is a standard which is widely used for representing GPS position information in textual form. This standard defines a set of one-line sentences which are independent from each other and contain information such as position, velocity and time.

Given the broad range of applications which are capable of understanding NMEA data, I decided to create a tool for manually drawing a path on a map representing an object or person moving around while carrying a GPS device which gives them their current position at regular time intervals (e.g. once every second). This path can then be stored as an NMEA file, i.e., as a text file containing NMEA sentences which represent the position information for all points in the path.

The tool is called NMEA Generator. I hope you will put it to good use, and should you have any questions, please don't hesitate to write a comment below or send me an e-mail. Enjoy it! :-)

Comments (3) Direct link

An easy-to-use IP geolocation server


Posted by Diego Assencio on 2015.11.27 under Technology (IP geolocation)

I have recently released the first version of a new project called easy-geoip: an easy-to-install and easy-to-use IP geolocation server. It works with both IPv4 and IPv6 addresses.

With easy-geoip, you can get IP geolocation data in either JSON or plain text format. To see what the output looks like for your IP address, check out my own running instance of easy-geoip. To get the output as plain text data, use this link instead.

Download and installation instructions are available here. Enjoy! :-)

Comments (0) Direct link

The complexity of feature-rich systems


Posted by Diego Assencio on 2015.10.05 under Technology (General)

Anyone who works with technology knows intuitively that as more features are added to a system, its complexity increases rather fast and often in unpredictable ways. Given that the more complex a system is, the more susceptible it is to incorrect or suboptimal functioning due to an improper interaction of its features, one is lead to wonder: how fast does the complexity of a system actually grow with the addition of new features?

Even if an exact quantification of the complexity of a given system could be properly defined, its computation would certainly require us to understand the system in its entirety, which is not exactly what we are aiming at here. Consider instead this simple question: for a system having $n$ features, how many pairwise feature interactions are possible?

The question may sound too abstract, so let us motivate it first. For that, consider a car. If one steps on the gas pedal while the parking brake is activated, the car may even move, but slower than if the parking brake would be released. The car may even get physically damaged as a result of operating in this mode for too long. This means two features of the system (the gas pedal and the parking brake) lead to a suboptimal functioning of the car when in the state "gas pedal pressed down" with "parking brake activated".

The example just given illustrates just one of the many possible interactions which can happen between the features of a car. A car is a complex system, and understanding how its features interact is necessary for its proper operation. If a car has $n$ features in total, the number of pairwise feature interactions $N^{(2)}$ is the total number of possible combinations of two from the $n$ features: $$ \displaystyle N^{(2)} = \left(\matrix{n \\ 2}\right) = \frac{n!}{2!(n-2)!} = \frac{n(n-1)}{2} = \frac{1}{2}(n^2 - n) $$ This result is already alarming: the number of pairwise feature interactions grows quadratically with the number of features. The natural question which follows is: what is the number of possible interactions $N^{(3)}$ involving three features? The answer is the total number of possible combinations of three from the $n$ features: $$ \displaystyle N^{(3)} = \left(\matrix{n \\ 3}\right) = \frac{n!}{3!(n-3)!} = \frac{n(n-1)(n-2)}{6} = \frac{1}{6}(n^3 -3n^2 + 2n) $$ Things are now even worse: the complexity of our system grows cubically with the number of features. Let us then go ahead and compute the total number $N$ of possible interactions over any possible subset of features of the system: $$ \begin{eqnarray} N &=& N^{(2)} + N^{(3)} + \ldots + N^{(n)} \nonumber\\[5pt] &=& \displaystyle \left(\matrix{n \\ 2}\right) + \left(\matrix{n \\ 3}\right) + \ldots + \left(\matrix{n \\ n}\right) \nonumber\\[5pt] &=& \sum_{k=0}^n \left(\matrix{n \\ k}\right) - \left(\matrix{n \\ 1}\right) - \left(\matrix{n \\ 0}\right) \label{post_bd2985d293fcd5959b3b4f4f36d3965a_eq_deriv_N} \end{eqnarray} $$ We can now use the binomial theorem to compute the sum on the last line of the equation above: $$ \displaystyle (x + y)^n = \sum_{k=0}^n \left(\matrix{n \\ k}\right)x^{n-k}y^k $$ Taking $x = y = 1$, we have then that: $$ \displaystyle (1 + 1)^n = 2^n = \sum_{k=0}^n \left(\matrix{n \\ k}\right) \label{post_bd2985d293fcd5959b3b4f4f36d3965a_eq_binom_theorem} $$ The right-hand side of equation \eqref{post_bd2985d293fcd5959b3b4f4f36d3965a_eq_binom_theorem} is exactly the sum which appears on the last line of equation \eqref{post_bd2985d293fcd5959b3b4f4f36d3965a_eq_deriv_N}. Therefore: $$ \boxed{N = 2^n - n - 1} $$ As $n$ grows, the value of $N$ quickly becomes dominated by the term $2^n$, i.e., the number of possible feature interactions grows exponentially with the number of features.

Although simplistic, the analysis above has dramatic consequences to the development and testing of new technologies. As more features are added to a system, the number of possible interactions between its features grows so fast that it becomes quickly impossible for the human mind to fully comprehend the system as a whole. Testing its usage under all possible scenarios may become not just difficult, but impractical. As a result, unforeseen problems may end up appearing in the production version of the system — some of which may be really embarrassing for those who designed them.

Comments (0) Direct link