What Notionovus Is All About

There are times when people choose a noble goal over a profit motive. These times often follow an occasion of hardship or an epiphany related to lifestyle choices.

To be socially responsible always seems to require us to take it on the chin, to leave some money on the table. So often a social good is pitted in a life or death struggle against maintaining profitability.

I feel that socially responsible causes that fail to embrace, or at least acknowledge the need of business to financially survive score only ephemeral victories. To truly help a cause, the most significant achievement is to link its success to the success of the businesses affected.

Before I left Caterpillar, I took an inventory of my best and worst days. I cataloged the days where I was at the pinnacle of employee engagement and the days where I was wallowing in the trough of worker’s despair. In an effort to determine “What I love to do” I looked for similarities and differences between the categories. And I found it in the field of software integration.

Whenever I felt elation, it was always as a result of getting two or more software systems to integrate in a seamless manner. Sorrow was always keenest when I was forced to watch the inexorable, slow-motion train wreck that was “traditional” (traditional meaning I was prevented from having anything to do with it) integration development as it presided over a facility transformation.

I am a software integrator. A language translator for computer programs. I get my biggest charge out of successfully connecting two or more autonomous entities. For me, the true challenge is to develop apps in the asocial media space. This is the space where no human eyeball ventures, no human eardrum listens. This is the virtuality where computer programs talk with one another. It is the landscape of Tron.

If you are not familiar with the franchise, I don’t recommend viewing the movies or TV series. The entire premise is fatally flawed. Computer programs do not speak English. To go further in my critique, they don’t agree on any language. In reality, using the Tron analogy, the ears and vocal cords would always be the last body parts added to most characters. And in most cases, these features would be dropped completely from version 1.0.

I feel that my mission is to give computer programs their voices and hearing. I am like hundreds of thousands of software developers in that regard. The software industry is split pretty evenly. Half of the money seems to be spent building and maintaining computer programs, the other half is spent trying to connect them together.

Unlike the hundreds of thousands of other software developers working in the integration space, however, there is something rare about me. I am not alone, but I am definitely in the minority.

I am not satisfied with the status quo. In my opinion, the first thing that must be addressed when a program is developed is its external integration strategy. How will it talk to other programs? I believe this strategy is what determines how efficient the development effort will be. I believe this one approach can contribute to the elimination of waste, which accounts for nearly 50% of the cost of most enterprise level software transformation efforts.

This is my noble goal. I want to see 90% of the cost of software integration vanish through identification of waste. I want to develop a solution for standardizing the language that computer applications use to talk to one another. I want to make it so easy to consider external integration first, that most software developers insist on it in their frameworks.

I believe that the software integration industry is expensive, opaque, lethargic and fragmented. I want to assist in developing the standards that will drastically increase integration solutions’ speed, security, robustness and reduce its cost, all by a factor of 10.

What I’ve Been Up To…

Well, it has certainly been a long time since my last update. I’ve been busy, but I keep forgetting to tell my fan(s) about my adventures. In March, I received my M3D 3D printer but didn’t get it in time for Pi day, where I went with my wife to a Raspberry Pi Jam in Columbia, Mo. She was nice enough to snap a picture of me on 3/14/15 9:26:53 holding my Raspberry Pi Projects for the Evil Genius book. I am the new geek overlord.

BPA on Pi Day

By April I had managed to unpack and get to printing and was ready to present at the April 2015 Web Professional and Adobe User Group meeting.

Handsome Fellow - WPaAUG April Meeting

I brought the printer with my laptop and printed a jig for my Raspberry Pi. My jigs look like the white “X-mark” attached to the bottom of the Pi shown below:

Combined Shot

After printing the Jigs for the 3 Pis, the Switch and the Power Board, I have a completed prototype. I’ll get a picture out a little bit later. That leads us up through April, and I don’t want to start talking about the major things in May yet, so I’ll leave you for now. Thanks for tuning in.

 

IT Professionals, Meet Admiral Stockdale

Admiral James Stockdale

Admiral James Stockdale

This is a repost of an article I wrote and published on LinkedIn.

We’ve all used the terms train wreck, doom, tailspin, and death march to describe runaway software projects. While those involved might feel that a world of responsibility is crushing them, I think that might be a little melodramatic. Let’s face it: as IT professionals, we wouldn’t last a half hour on a real death march.

In a recent post Dennis K. Berman added quite a bit of furor to the debate over whether IT departments should control access to technology. As a participant on both sides of that debate throughout my career, I’d like to weigh in with my thoughts on how this debate should end.

That is why I invoke Admiral James Stockdale. Admiral Stockdale was one of the highest ranking POWs in the Vietnam era. When asked by Jim Collins, author of Good to Great, what differentiated the POWs that made it through from the ones who did not, Admiral Stockdale replied the ones who made it faced the brutal facts of their existence, but had an unwavering confidence in the end game.

This life lesson, called the Stockdale Paradox, has an application in this debate that rages between IT professionals and people who feel frustrated by IT. Here’s how I break it down.

Face the Brutal Facts

The first order of business is the brutal fact of the matter. Information technology will find a way into your perimeter.

Whether it is your factory worker bringing a tablet in to help calculate heat treat durations, or the marketing guy who knows some outside people that can help him develop a killer sales app, we can take lessons from the whole BYOD phenomenon. There is a constant onslaught from outside your organization, and there is a constant pull from inside.

I’ve seen this movie before. Disruptive technology and the drive to use it gets the girl. So, let’s face that brutal fact. While we may resist by putting up fences and writing memoranda, inevitably we are faced with integrating that pesky new technology into our system landscape. We are frustrated because we are reacting to it. Once we are forced to adopt it and take it under our wing, we have to take our valuable, limited time to learn the particular new risks and disadvantages.

Have Unwavering Confidence in the End Game

There is a common goal between IT professionals and their adversaries in this matter. Everyone wants to see the customer win.

We stand on the verge of societal transformation more significant than the invention of the mechanisms that transport us and labor for us. Information technology is augmenting our senses and our cognitive abilities. Computational power enables us to extend our reach to places mere engines cannot go. It is a most exciting time, and as IT professionals, we are in the most exciting profession.

It is not biologists that are sequencing the human genome. They cannot do that on their own. They need computers. Many very fast computers. It is not astrophysicists that are discovering life outside Earth’s atmosphere and outside our solar system. They cannot do that on their own. They need programmers. Many sharp programmers.

Possibly more mundane than the technological heroes listed above, your customers have their own windmills and it is your duty to help them tilt away. Whether it is building social media applications or helping a company do more with less, it is our role to bring technology to bear on society’s difficult problems and advance the cause of our employers.

You and that irritating guy from the sales department who keeps trying to post his spreadsheet on the internet are both working for the same cause. The end game is that you will help him achieve his goals by helping him use the right technology. People who try to thwart IT professionals are not doing it to be mean or spiteful. They have a job to do and they see technology as an enabler. As IT professionals we need to shift focus from always saying “No” to saying “Okay, but….”

We need to help the layman understand the risks involved and help them navigate an admittedly complex task. We cannot continue to stymie, stupefy and stifle. New technology will find a way to help our customers. It will be best if we are there to assist the transformation.

Status Update

Just a quick note to let everyone (both of you?) know that I am once again working out of my home office. The David street location was more space than I needed at this time and the anticipated growth of my company was premature.

Also, I am beginning to revamp my website in earnest now and you will be seeing many more changes in the coming weeks.

Status Update

The Kickstarter campaign is going so strongly that I think I’m changing its name to the Bramble Box project. I failed to raise the requisite funding in Kickstarter, but I have invested enough money and time into the creation of the equipment that it doesn’t make sense to stop when all that remains is the creation of a repeatable process to create and sell the kits.

Notionovus has moved into office space at:

Address

Street Address of New Office

The address is spoofed because I don’t want web crawlers picking it up and sending me catalogs for “realistic” designer handbags, business print mail marketing brochures, or whatever else passes for spam in the snail mail universe.

I have found a new favorite toy. SketchUp is 3-D modeling software for people on a budget (like yours truly). I think I’ll be using it to quickly generate graphics for blog posts, so you may see some of my artwork adorning the notionovus weblog.

Less than 60 Seconds using  SketchUp.

Less than 60 Seconds using SketchUp.

I believe in communication. You might say that I’m down right religious about it. Which doesn’t mean I’m good at it. What I mean to say is that I treat communication like a religion. I have the ultimate faith that it is the most important thing in the world, I think about it regularly, and I talk about it to anyone who will listen. However, I just don’t practice it as often and well as I should.

Take this web log for instance. I am dusting off the cobwebs here to make room for new content, but it has been neglected for over four months. I am ashamed. I need to do a much better job. I know better than to let my content get away from me like that. Now, please excuse me while I atone for my transgressions.

Until next time, thanks for tuning in.

Starting My Ce’web’rity Status

On Wednesday, March 5th, I presented my business model before a crowd of about 30 people at the 1 Million Cups gathering in Peoria. It’s a weekly gathering that happens every Wednesday morning at 9:00am at Sugar in Peoria’s warehouse district. I spilled my guts on my plans to conquer the world. Overall, people were mostly receptive.

You can watch the presentation on YouTube. I was worried that I might have done my usual grasping for high-brow jargon and techno-babble, but I think I kept it interesting and easy to follow along, at least until the questions started.

Until next time, thanks for tuning in.

Notionovus’ Logo Official

logo5Notionovus has just recently been granted the logo mark you see above and at the top of the page by the U.S. Patent and Trademark Office. The logo above is a 3D stylized version of the registered logo, but keeps in the theme of two arrowheads forming the shape of the capital letter ‘N’. This means that beyond copyright, use of the logo is restricted to Notionovus’ software and weblogs.

Something Secret Going On…

I apologize to anyone finding this site neglected. I have been working on a project that I will be discussing at length. I just can’t talk about it right now. I can give you a hint. It has to do with my real passion. If someone is surprised that barcodes isn’t it, well, I’ll quote that old sage Bugs Bunny, “He don’t know me very well, do he?” My goal is to be back up and running by the end of February (2014, for all you people out there that know how software people think) at the latest.

Code 39 – Barcode Biscuits

Teething BiscuitsCode 39 takes me way back to sinking my teeth into my first real barcode programming experience. Code 39 is a very simple and straightforward code set consisting of 43 unique representable characters and one start and stop character: the asterisk “*”. If you’ve never done any work with barcodes before, this is a no-brainer selection for an introductory symbology. As such, we can make this lesson a very simple one. I will explain how you can, using the code from the September 19th, 2013 post, generate real, scannable codes in minutes.

There are two setup arrays, and only one line of the four lines of JavaScript code is non-trivial. Here we go…

The Code 39 Setup

// Symbology-specific arrays
var arrayCode39Bin = new Array (
'1010001110111010', '1110100010101110', '1011100010101110', '1110111000101010', // 0, 1, 2, 3
'1010001110101110', '1110100011101010', '1011100011101010', '1010001011101110', // 4, 5, 6, 7
'1110100010111010', '1011100010111010', '1110101000101110', '1011101000101110', // 8, 9, A, B
'1110111010001010', '1010111000101110', '1110101110001010', '1011101110001010', // C, D, E, F
'1010100011101110', '1110101000111010', '1011101000111010', '1010111000111010', // G, H, I, J
'1110101010001110', '1011101010001110', '1110111010100010', '1010111010001110', // K, L, M, N
'1110101110100010', '1011101110100010', '1010101110001110', '1110101011100010', // O, P, Q, R
'1011101011100010', '1010111011100010', '1110001010101110', '1000111010101110', // S, T, U, V
'1110001110101010', '1000101110101110', '1110001011101010', '1000111011101010', // W, X, Y, Z
'1000101011101110', '1110001010111010', '1000111010111010', '1000100010001010', // -, ., (space), $
'1000100010100010', '1000101000100010', '1010001000100010', '1000101110111010'); // /, +, %, *

var strCode39 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*";

Take these lines of code and add them to the bottom of the Setup portion of the file given out in the September 19th article.

The first array (arrayCode39Bin) is the set of raw sequences of ones and zeroes that will direct our rendering engine to generate the proper sequence of bars, lines and spaces corresponding to each of the 44 characters that the Code 39 symbology can represent. The second array (strCode39) is really that string of 44 characters in the numerical order which ties them to the previous array.

The JavaScript

<body>
<div id="result"></div>
<script type="text/javascript">
 var strText = "*123TEST890*";
 var strRaw = "";
 for (var i = 0; i < strText.length; i++)
  strRaw += arrayCode39Bin[strCode39.indexOf(strText.charAt(i))];
 document.getElementById("result").innerHTML = genBarcode(strRaw,6,40);
</script>
</body>

The JavaScript for actually rendering the Code 39 bars consists of the initialization of the two string variables (strText, strRaw) and a single step for loop that starts at the beginning of the string given and loops until the end of it, placing in the raw string the ones and zeroes from the Code 39 binary array. Finally, genBarcode() is called and the resulting HTML <img> entities are placed into the <div> we’ve identified as the result.

Replace the <body> element in the sample code from the previous article with the element provided in this article.

Here is the essence of what gets output to the browser document:

Blog Bar for Barcode Biscuits

This generates a scannable barcode in the browser. If you print this page and scan it, the scanner will dump 123TEST890 as output. The code string has an asterisk embedded before and after the data, but those are required and necessary for scanning a Code 39 code. The asterisk (“*”) is not a valid data character.

We will run some more complex symbologies in future installments, including Code 128, Interleaved 2 of 5 and ultimately QR Code before we finally reach the application area and we get to shipping label and shop floor routing software. Until next time, thanks for tuning in.

Code Review or Root Canal? Hmmm…

I don’t particularly care for line-by-line code reviews. I don’t think they convey much meaning, even to people who think like computers. But you have to understand the inner workings of the software published earlier before I turn you loose on society. Thankfully, there are only about ten lines of code in the software and three major areas, so covering them should be a breeze for both you and me. So, copy the source code from the last article into your favorite text editor and follow along. Trust me, this won’t hurt a bit.

The three major sections are the setup data, the chunkifier and the rendering engine.

The Setup
The setup data consists of the necessary string literals to enable the rendering engine to draw the images using base-64 converted PNG files. This front matter takes up almost 1800 bytes and consists of the declaration for the JavaScript arrays array5bit_A, array5bit_B, stringStart, stringMid and stringEnd. Once these arrays are defined any barcode symbology can use them. So they are pretty important and well worth the space they take up.

The Chunkifier
Sounds like a subtitle for a good slasher movie, eh? The chunkifier is the four lines of code starting with the initialization of the intRawmod variable and ending with the for loop that populates the arraySeq array. In short, what the chunkifier does is break down a long string of ones and zeroes into a sequence of 5-bit integers.

The Rendering Engine
The rendering engine takes the sequence of 5-bit integers created by the chunkifier and builds the <img> elements necessary to render the array. This is a very simple loop and uses the integers found in the sequence to look up the unique text found in array5bit_A and array5bit_B and patch it together with the start, middle and end string constants so we have an <img> element that parses and scales to display a series of bars and spaces.

The Output
What you would see, if you used the rendering engine to output to a text file from the demonstration at the end of the last article is:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAACCAQAAADLaIVbAAAANUlEQVQIHQEqANX/AQD/AAAAAAAA/wAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAASTUCAqHeHtMAAAAASUVORK5CYII=" width="10" height="40"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAACCAQAAADLaIVbAAAANUlEQVQIHQEqANX/AQD/AAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAKFYBA46vJCAAAAAASUVORK5CYII=" width="10" height="40"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAACCAQAAADLaIVbAAAANUlEQVQIHQEqANX/Af//AAAAAAAAAAAAAAAAAAABAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAUUYCA7QBErsAAAAASUVORK5CYII=" width="10" height="40"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAACCAQAAADLaIVbAAAANUlEQVQIHQEqANX/AQD/AAAAAAAA/wAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAASTUCAqHeHtMAAAAASUVORK5CYII=" width="10" height="40"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAACCAQAAADLaIVbAAAANUlEQVQIHQEqANX/AQD/AAAAAAAA/wAAAAAAAAABAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAASU4CA+16cNAAAAAASUVORK5CYII=" width="10" height="40"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAACCAQAAADLaIVbAAAANUlEQVQIHQEqANX/Af//AAABAAAAAAAAAP8AAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAbjUDAlvFFR8AAAAASUVORK5CYII=" width="10" height="40">

There are no line feeds or carriage returns embedded in the output text for a very good reason covered earlier. The text consists only of HTML entities. So, it takes six HTML images to render that very simple pseudo-barcode we saw last time (near the anti-climactic “ta-da!”). Next time we are going to demonstrate doing something non-trivial with the rendering engine by hooking it up to some code that actually generates valid barcodes. Until next time, thanks for tuning in.