Common Sense Software Engineering: Letter to a Young Woman (Part II)


Author Notes:

This is the second part of a three-part series.   It is a huge piece of writing.  It resulted from a conversation I had with a young woman who showed interest in learning how to program and possibly enter the IT profession.  It is also an attempt to bring the realities of Information Technology profession as it is today into perspective so that a young woman interested in this field can make informed choices as to how she may be able to enter the field either professionally or for self-interest.

Those who read this piece and would like to pursue further study are more than welcome to contact me with their questions and requests for assistance at

I will do everything I can to help you on this long but potentially exciting journey while also offering advice on how to avoid the most serious pitfalls you may encounter.

In addition, since this is such a long piece, it is also available in downloadable PDF form at the following address…!AnW5gyh0E3V-g2bQ4UCq4Df-V2tf


The 21st Century

By 2000, Microsoft had introduced its next generation operating system, Windows 2000, which could take advantage of the newer 486 chip sets and then the Pentium chip sets, which though still 32bit machines could process computer instructions even faster due to advances in the internal chip architectures.

And then the economic bubble reared its head as a frenzy in the field began to unfold as the Internet became the platform of choice for development.

New startup companies began popping up in the technical industry like an uncontrolled growth in lawn weeds.  A new generation of young professionals was entering the industry in droves and was suddenly being offered highly inflated salaries for their technical, educational backgrounds, though few had any real-world experience.  Venture capitalists were pouring in monies like water into new companies that barely had legitimate business plans for development.

The result, in a word was… chaos.   The only real change to come out of this economic fantasy was a severe increase in working hours for developers and the beginnings of a decrease in job security.

After the bubble burst, thousands of technical personnel lost their positions while numerous companies collapsed under the weight of their own mismanagement.  One thing remained; business perceptions that development could be sped up increasingly by cutting corners in the design of applications.

Another outcome, though not a direct result, was that to increase the speed of development while at the same time cutting its costs, US businesses turned to outsourcing technical work at ever increasing levels.  And insourcing increased similarly as well with a new generation of foreign workers entering the US technical workforce who were not trained nearly as well as their earlier counterparts and nor did they have the engaging personalities of their earlier contemporaries.  Foreign outsourcing companies began feeding into the technical pipeline personnel that were simply not qualified to work in the technical profession from a technical standpoint nor from a personal one.

Many of the new foreign personnel were trained only in the details of technology and had little understanding of how systems and applications were actually built for longevity purposes.  They thought they did and many lauded it over their American counterparts along with the foreign management that was increasingly brought in at lower costs as well solely for the purpose of brow-beating developer staffs into fulfilling increasingly deadlier deadlines..  Until the US Millennials would begin entering the profession, the atmosphere in the Information Technology field became one of terrible pressures and arrogance, which caused a complete undercurrent of sociological disruption in the US technical workforce.  US citizens were being viewed as second class members of the profession since so many could not compete with the exploitative circumstances of both the foreign insourced personnel and the outsourced ones.

It was at this point that professional women in the field began leaving the industry in droves as undercurrents of the oppressive working conditions in the work place started to get out of control as developers were seemingly expected to be either working or on call 24/7.  To encourage this perspective, television advertisements began “glorifying” the non-stop work habits of young workers that provided no time for personal lives.

In short, female technical personnel reacted with a sense of sanity towards a profession that was barreling towards an all-consuming, technically-oriented lifestyle as the release of mobile computing technologies emerged along with a maturation of development techniques and tools that in reality had little alternative for innovation in the business environments.  To this end, developers who adapted to the increasing promotions of freely available, open-source software products (software\source code provided freely) started using them to design their own tools with the idea that redundancy was some form of innovation.

“Open Source” software was a new wrinkle in the profession that up through the early 2000s had a substantially successful “cottage industry” where software developers could sell their own crafted software for moderate prices under the aegis of what was called “shareware”, which was simply software that either had a trial period or limited feature sets both enforced by licensing.

The “Open Source” movement grew out of the sociology of the growing Java Community in which many of its promoters were quite young and were still living with their parents or academics who saw writing software on their own time as a way to promote their own ideas.  However, to be fair, this movement was also given impetus by Richard Stall’s “Free Software Foundation”, which promoted that all software should be free.

Read more of this post

Common Sense Software Engineering: Letter to a Young Woman (Part I)


Author Notes:

 The following is a huge piece of writing.  It resulted from a conversation I had with a young woman who showed interest in learning how to program and possibly enter the IT profession.  It is also an attempt to bring the realities of Information Technology profession as it is today into perspective so that a young woman interested in this field can make informed choices as to how she may be able to enter the field either professionally or for self-interest.

 Those who read this piece and would like to pursue further study are more than welcome to contact me with their questions and requests for assistance at

I will do everything I can to help you on this long but potentially exciting journey while also offering advice on how to avoid the most serious pitfalls you may encounter.

In addition, since this is such a long piece, it is also available in downloadable PDF form at the following address…!AnW5gyh0E3V-g2bQ4UCq4Df-V2tf

Opening Notes… And there are many…

In the past several years there has been a noticeable effort to recruit young, capable women into the Information Technology profession.  From the articles I have come across on this subject it appears that there is little understanding as to why so many left the field during the 1990s and early 2000s.  The result is that many such efforts are aimed at technical training with the underlying idea that women are as good as men in this field of endeavor.  However, historically that has never been the point.

The profession used to be populated by a female work force of around 35% to 40%.  This number has now dwindled down to approximately 17%.  This reduction in female technical professionals did not come about due to a lack of self-esteem but more from a better understanding of the field has evolved in the more recent years.

The real question is why would any sane Human being want to engage in a profession that has few if any real professional standards, ever changing technologies that disallow anyone to become finely honed in their preferred skill sets, increasingly thins knowledge bases for what technologies and processes actually work to get the job done, onerous working hours, and most often bad working conditions resulting from the band aids that are being touted as the new software engineering standards?  Only really crazy people would enter such an activity.  And only really crazy people would rationalize that somehow this all so much fun.

To be fair there is a lot of fun to be had in this profession but that enjoyment of creating a personal piece of quality for another has been terribly overshadowed by the sociological changes in US society that has found their way into other societies as well, though maybe not as disastrously.

Women in Human societies have often had and continue to experience a form of second-class citizenship due to their lack of masculine attributes.  Even if they have adopted masculine psychological attributes, acceptance is still in many respects viewed with suspect simply because they have the underlying desire to create, nurture, and build; something which most males of the species don’t seem to comprehend let alone have.

With the exception of such aberrations as the Hillary Clintons, Madeline Albrights, and the Margaret Thatchers of the world, along with their “protégés”, when was the last time anyone can remember an intelligent woman demanding that a country go to war?

Surprisingly as this may sound it is this sociology and its offshoots that has reduced the number of women in a profession that currently appears to only cater to those who don’t mind floundering around in the growing technological quagmire that is the US Information Technology profession.

I doubt any amount of technical education or esteem building seminars directed at young ladies will increase the dismal percentage of female workers in this activity.  So far there have been no noticeable results to crow about.

A young woman I met while she was working at a discount pharmacy my wife and patronize told me she was interested in learning about our profession looking at it from the point of view that she has seemingly acquired that it shouldn’t be a “boys only” field.  She was of course right and it is my guess that the substantial loss of our female counterparts has contributed significantly to the erratic nature of the realities of working in this field.  Women often bring a soothing influence to the environments they inhabit and there is really nothing soothing about having your life upended by the constant cycles of deployment that Agile promoters have brought to the daily lives of professional developers.  Noticeably, there have been quite few pieces written about the constant stresses of such development styles that often lead to burnout.

Read more of this post

Black Falcon Software Releases SQL Server Source Control 2.1.1


Black Falcon Software is proud to announce its release of SQL Server Source Control for Developers 2.1.1…

This release is a major upgrade to its current product, which was at version 1.0.3.  The reason for the large skip in version numbers is that an interim 1.1.1 release had been planned but it was thought better to combine all of the modifications and new features into a single release.

This latest version has a brand new interface style, which will bring it more in line with current expectations by users.

A new usage statistics form has been added that allows users to view the used space in their defined repositories.

An new email form has also been added that will allow users to contact Black Falcon Software directly from within the application.

A new utility has also been added that allows users to clear dangling data when a database connection has been deleted.  This dangling data was a result of the application not clearing all of the repositories with data associated with the deleted connection.  Since this “bug” was internalized by the fact that without the deleted database connection information, the associated data could never be viewed, it resulted merely in the data using up space than being any type of issue.  Running this utility once will rectify this issue without disrupting any data associated with existing, active data.

Many modifications have also been made to this product and are currently listed on the home-page of Black Falcon Software’s web-site.

If you are an employee, consultant, or freelancer who requires source control for your SQL Server database object scripts because your place of work does not have such a capacity or you just would like to have your own individualized form of such source control, which is similar in nature to the Mercurial private source control system, go to Black Falcon Software’s web-site at and download a freely available 30-day trail version.  Licensing is very affordable and allows for installation on 5 different machines.

A tremendous amount of effort has gone into this latest release so it is hoped that everyone who tries it will enjoy working with it.

Database access has been tested up through SQL Server 2014 and should be compatible with all previous versions with this popular database engine.

In addition, this release has also been successfully tested against Windows 10.

The next expected release (2.1.2) will have the capability to access the newly released SQL Server 2016 database engine.

Steve Naidamast
Sr. Software Engineer

Common Sense Software Engineering: Windows Developers Should Follow the Stable Infrastructure and Development Environments of the Java Community and Forget the Hype



In the 1990s when Java began to appear on the developer scene it met its competition from Microsoft head-on in that it struggled to gain an acceptable place within the international development community.  However, over the years Java appears to have arrived at more stable set of infrastructure and development standards than Microsoft appears to offer now.  This is the result of both communities taking maturation trajectories that were in a very real sense diametrically opposites of each other.  Microsoft, at the time, was offering maturing technologies while Java was the “new kid on the block”.  Both communities also offered completely different viewpoints towards their product developments.  Microsoft offered products with “ease of use” as the underlying factor allowing developers to quickly create both desktop and web applications far more quickly than competing solutions.  This was especially true when compared against the new Java tools.  However, Java had its founding basis in the academic and scientific arenas.

One could see this easily with the many Java articles that took apart various interface controls that we in the Microsoft Community took for granted with the exception of third-party control developers.

The Java Community did have a difficult time to get its place as an accepted form of development until it presented an alternative to Microsoft products in the large enterprise development area, which was Microsoft’s weak spot since Microsoft products at the time were targeting division and department level applications.  Once Java tools became more usable for developers, the large enterprise arena saw the advantages of Java development with its better suited enterprise offerings (ie: J2EE, and later, the Spring Framework).

Today, we find a Java Community that appears to be far more stable than that of the Microsoft Community though one would not know it with the subdued reporting around it.  Years ago such reporting was quite different as the two communities fought each other for developer supremacy  Reading online magazines such as today, most of the articles appear to concentrate on existing technologies along with their refinements.  The opposite appears to be true for Microsoft, which seemingly approaches product refinement the way the US Pentagon approaches new weapons procurement; both throw out perfectly fine technologies and start over with brand new and completely untested concepts.

In this author’s opinion, and as one who has worked with Microsoft technologies his entire career since leaving the mainframe world around 1989, Microsoft has made some serious mistakes with not only the products they are offering but how their style of developing applications has changed over the years.  This appears to have happened most egregiously with the latest CEO of Microsoft, Satya Narayana Nadella, while under Steve Ballmer; Microsoft appeared to be more stable in this regard despite his terrible reputation.

Read more of this post

A Simple Way to Make a Custom WPF Message Box



In my last piece (“A Simple Way to Make a WPF Chromeless Window”) I demonstrated how one could easily create a chromeless window using Microsoft’s “Windows Foundation Framework”, more commonly known as WPF.  This time around I will show you how to make a customized WPF message box.

The reason for this is that the WPF default message box uses the same chrome that the default WPF window does.  As a result, if you are going to develop a custom window you will also have to do the same with your message boxes or the contrasts between the two will not look symmetrical.

And being deficient in the graphic arts like many software engineers I found this out the hard way when my own commercial product was well reviewed except for the interface.  Hence, my recent work to refine the interface to something much more aesthetically pleasing.

Limitations With Your Own Message Box We Can Work With

The first thing to realize is that developing your own message box will constrain you to a certain extent as to what you can provide with it as the default WPF message box comes with a number of configurable options that you can select to produce certain results.  The only problem is that you cannot change how the default message box is displayed since it is reliant on the Win API.

Essentially, a message box will request a user to do one of two things, read the provided information and move on, or ask a questions, which is in practically all cases a “yes” or “no” question.

Luckily, with the WPF modal dialogue, which is the type of window we will use for our message box, we can easily return a “true” or “false” value allowing us to handle the second scenario noted previously.

Read more of this post

A Simple Way to Make a WPF Chromeless Window



Microsoft introduced the “Windows Presentation Foundation” or WPF to align desktop development with similar experiences developers have with developing web applications.  With the exception of possible a rather weak graphical interface for creating windows and pages, WPF for the most part offers desktop developers a quality foundation for delivering desktop and desktop-styled applications into production environments as well as multiple mobile platforms.

Like with web development that now has it’s interface and coding constructs more or less separated between HTML/CSS and client\server side coding (though the client side coding model is merely a throwback to “Classic ASP”), WPF provides a similar format.

In WPF you have both Window and Page objects similar to the original WinForms environment where one could have a Window and page-like controls whereby both can have Windows displaying Pages within them.

Unlike web development, Microsoft for some reason has chosen to make styling WPF Windows and Pages an utter nightmare for developers to wrap their heads around.  Though CSS, which can become awfully complex in the hands of a skilled web developer, CSS still retains a sense of simplicity that most web developers can attain skills with in order to make their web pages acceptable.

WPF on the other hand takes CSS simplicity and turns it on it’s head by implementing templates that provide base styling for every one of the WPF controls provided by either Microsoft or third-party vendors.  For many what would be considered minor styling options with CSS, WPF presents an array of complexity for developers that has many throwing up their hands in disgust.

One would think that having the need for a completely separate application from Visual Studio to design WPF styles in the Guise of “Blend”, such a process would have been made much easier.  And it would have been had the styling terminology used would have been turned into simplistic language that everyone could understand instead of the ambiguous terminology that has most turning to the Help systems for clarification.

Making a simple styling change such as the color of the selection highlighting in a WPF list-box could have one implementing the entirety of an updated list-box style template into a page, which is extremely verbose or finding a way to add styling resources to the same.  In either case, the research needed to find quality information on such processes can be quite extensive as there are really few quality manuals that deal with WPF styling in a simplistic and straightforward manner.

One of the things that many developers would like to be able to provide their clients and users are Windows without the ugly chrome that surrounds them that is similarly ever present with web browsers.  Interestingly enough, most developers are under the impression that to do this they require an expensive tool suite that provides for chromeless windows as well as advanced styling.

Admittedly, I was under the same impression and my own commercial product has suffered the same visual detriment that many have… until recently.  After doing a lot of research on the subject with the intent of avoiding an expenditure for a tool suite I did not believe justified I found enough information to put together such an interface finding it far easier than one would believe once I sifted through the various documents others had put up on technical sites.

Read more of this post

Part I – Creating a Digital Hexagonal Tile Map


Author’s Notes: 
This article is written for experienced developers using the C# language and the Monogame Framework. Monogame is in active development with a new release just published recently. This piece is highly technical and requires that developers be proficient in their chosen language of choice. Therefore there is no information that will enable new programmers to work with the sample code easily.
The title prefix, “Part I”, indicates an expectation that as this project progresses into a war game I hope to develop over time that simulates a major conflict of the 18th century, it is hoped that as new code is developed additional articles will be published with the intent of guiding developers in such a difficult form of game development.
Because this piece is published on both Microsoft and Java Community sites, there is information in this piece that should make it easier for Java developers to develop similar code for their own projects.  However, the Java information is limited since such a piece cannot provide code and explanations for both languages as the libraries used are completely different from each other
It should also be noted that there is code in the provided project that is no longer currently used but was left as reminders for further development as the project progresses.  Such code is noted in this piece.
Due to the length of this piece, a downloadable Word document is available at the following link…!AnW5gyh0E3V-g12SlguqkHrRVyq8
 The complete project for this paper can be downloaded from the following link…
 To submit questions to the author regarding the provided information, please email the author at…



One of the most difficult aspects of developing a game is one in which the genre you would like to develop for is such a niche area of development that standardized tools have yet to be created for it.  With the popularity of 3D graphic art and gaming the 2D aspect of this creative endeavor hasn’t kept pace with current technologies to the same degree.  For 3D game development there are several popular genres that have a wide degree of support; first-person-shooters, simulations (ie: racing, flying), adventure games, and strategic simulations, which are in many cases simply war games on steroids without the thought provoking challenges that a turn-based game of the same genre can provide.  For such development there are excellent tools freely available, the most popular being “Unity”, which also has a wide array of 3rd party support in the form of add-ons that provide tools for all the mentioned game types.

With 2D development, scrolling games have been developed to the point that there are many excellent articles describing how to implement one with quite a bit of sample code along with a few very good toolsets to help a developer in his or efforts.

The one genre in 2D development that has gotten very little or rather uneven exposure in the development area is that of the original turn-based, hexagonal map, war game.  And beside the original style of adventure gaming whereby the “maze like” foundations were quite thought provoking, war gaming itself has been considered the top of all such mental challenges and at one time was even promoted for the “over educated”.

However, with a lack of some level of standardized tools for such development, this realm of gaming has probably become one of the most difficult areas in creative activity within the game development field.  There are several reasons for this that has been described in a number of texts on the subject.

For starters, the computer AI in such games is at a terrible disadvantage compared to the Human opponent since the Human opponent can take as long as he or she likes to develop tactics and strategies that if done carefully over time will not only defeat the computer AI but yield weak spots in it that can aid the player in increasing their battlefield wins somewhat consistently.

In an article describing such a situation within the “Civilization” series of games it was found in one case that players were able to defeat the AI in one significant area of lumber yields by repeating the creation of forests in a single hex, deforesting the hex through lumber production, and then seeding a new forest to start the cycle over again.  The AI in the game could not do this giving the Human player a significant advantage in such production, which in turn allowed the Human player to build wooden-based entities more quickly than the AI could.

Though Firaxis Games has openly admitted that their “Civilization” AI cheats (and pretty unfairly as well), when they realized this weakness (called “lumberjacking”) in their AI, they issued a patch placing the AI and the Human opponent on equal footing in this part of the game, making “lumberjacking” no longer possible by the Human player.

The result of this drawback in turn-based war games is that the AI implemented in such games has to be quite good in order to make the game not only enjoyable but repeatable as well.  Thus, turn-based war games require above average AI implementations that are more than just what any pre-made tools can offer.

In addition, the AI implementation has to be suited for the level of war game being developed.  In such games there are three primary types of AI that can be used, strategic (large unit formations such as divisions), tactical (medium sized unit formations such as regiments), and squad based where each unit represents a single piece of equipment or a soldier.  And in each case the AI implementation, as mentioned, has to be done quite well.

This is not the same as with RTS games (real time strategy) where the Human player is at a disadvantage being that he or she must stay on their toes to do battle with an aggressive AI whereby studying the battlefield for any length of time is not an option.  The result is that most such games are not very realistic in terms of technique since in reality, as fast as it may occur, war would never be as fast as a computer emulation would propose unless it was designed to be such as with in-depth military training emulations.  The lightning fast movements for example in the “Battlefield” franchise could never occur since Humans cannot react at such speeds normally.

The next area of difficulty in the development of turn-based war games are the graphics employed.  With the exception of some tile mapping tools that provide the ability to create maps using hexagonal tiles, the developer still has to use original programming to control the map and the units portrayed on it once it is loaded.  And since such maps can have a variety of sizes, no one code base offered will necessarily be able to provide the mathematical calculations for the chosen sizes for any individual developer.  That being said, one of the most popular mapping tools is “Tiled” (, which will allow a developer to create large hexagonal maps through a visual interface.

“Tiled” creates maps using the “TMX” format, which is actually code that describes a map to a graphics system.  Both “Monogame (with the Monogame.Extended plugin)” ( for C# and VB.NET developers and “libGDX” ( for Java developers support this file type allowing a developer to display his or her maps somewhat easier than if one were to do it on using just the graphics engine and their tiled images.

This article then will describe one way that a hexagonal map can be created and displayed at the lowest level; using the “Monogame” graphics engine only with individual tiled images.

Read more of this post

%d bloggers like this: