fetch(http… Developer Pain

Let’s face the fact – browser wars are still ON! I think it is on a different dimensional time/space coordinate these days – consumers really don’t care anymore, “My device [substitute: tablet, phone, thermostat, etc.] has an app that works; what’s wrong with your site/service?” they rant!  So who cares then?  Developers.

The point is, the consumer (developers seem to forget they too are consumers) does have an “app for that” and it most likely uses the underlying browser technology installed on their device.  So we developers are thus obliged to DWI.

We cannot control it.  We cannot change it. We can only barely influence a small segment of it.

In my opinion developers are worse than the general population when it comes to complaining about perceived incomplete features. I don’t know, but maybe we developers are just built that way.  We will call Microsoft by all sorts of names that really should not be used around children, when they release new “incremental” builds, leaving out the very thing, the very API that will solve all our immediate issues on our current punch list.

I don’t know Jake but he acknowledges the same sentiment:

Bit of a rant: it bothers me that as developers, we preach iterative development and release, but when we’re the customers of that approach the reaction is all too often “HOW DARE YOU PRESENT ME WITH SUCH INCOMPLETE IMPERFECTION”.

I found Jake’s comment while trying to DWI in the browser war.  I have reluctantly come to terms with HTML5/CSS/JavaScript (and all the variants), they are absolutely “facts of life” in the developer world.  My government customers are still building applications and technology as if they can control the user’s choices.  What they seem to forget is users are voters.  Sooner or later IT becomes a problem that cannot be ignored.  When it does voters do what they do – vote.  Government is yet to DWI!

Maybe DWI is a good plan for long-term business success. Yep, it is a business expense to DWI when DWI = change.  It is also a business expense to loose a customer.  Customers like voters will tolerate a problem for a while.  When tolerance runs out, its like Crosby Stills Nash and Young song title form way back, they’re: “Long Time Gone”.  Your customer could be “Long Time Gone” too, if you don’t DWI – timely.

fetch(… Browsers are mini-operating systems. More and more the browser is being integrated deeply into work-flows – at very low levels, just like an operating system call.  As this happens there will be no other choice in implementations.  The developer will suddenly find the choices have already been made.  While I wasn’t looking browsers changed.  I am “re-thinking” a lot of my current code development practices.  I am as Captain Picard (Star Trek TNG in Darmok episode) was in the closing scene: Darmok, His eyes wide open.

I understand.


CodeSolve: Complex Forms and Validation

I’ve been in business since 1981 (admittedly I was pretty much clueless back then) developing business skills and working with customers who helped me understand business.  That might seem strange but here is the truth – even if you are dead sure you have the correct solution for your customer and they disagree or show hesitancy, you better shut up and listen.  I often remark to people about how surprised I am, I ever got jobs when I was younger.  I think about it and one thing I did do, was listen to my customer.  My father taught me to listen (anybody who knows me, knows that was a hard job.)  I am also naturally curious, wanting to know more so that helps me stop and listen.

Forms and Validation

Nice setup for a discussion about “forms” and validation.  Why forms? People need information (data) to do an activity, business or otherwise.  Forms create a repeatable method for obtaining the needed information.  Validation is the activity of ensuring the necessary information is obtained AND it is correct for the purpose.  We are going to leave aside the “work-flow” right now and concentrate on just the form and validation.

Years and years ago we made forms on paper.  Believe it or not there are books and books written on the subject of form design.  Why all that concentration on form design?  To validate the data on the form.  Example, the IRS 1040, likely the most well known form in the US.  This form incorporates the design principals necessary to obtain the correct and accurate information to file your tax information.  I worked as a consultant for the Florida Department of Revenue on a system to process tax-payer form submissions and to deliver the data into computer databases.  Forms can be complex.  The more complex the form the higher chance for users to supply incorrect/inaccurate data.  Validation is critical.  In your life, how many times have you had to re-do a form because you could not understand how to fill it in.  Example, the IRS W-9 and W-2 employment forms are less than a single page and come with four pages of instructions.  Until you get it right you are not getting paid.

In computers program development form design is almost an afterthought.  I’ve seen some really bad forms.  I also have seen well designed, well conceived data capture systems.  After all these years I can say with assurance, the form where people enter information into a computer is just a fraction of the software.  My estimate is that for every entry, 2/3 of the code is somehow related to checking the entry rules ensuring good data is obtained.  This could be reduced if you think for a while about how people will interact with the form and maybe even read a little about best practices in form design.

The Point

Validation of form data should be constrained to the visible data.  That means that you should design forms is smaller blocks.  Yes, tabbed forms are cool and other gimmicks in code to “Wow” users are built by coders who, by the way, will never, ever use the form.  Remember the discussion up top about listening?  What you want is good data, not wow-factor.  In form design, simple forms will deliver better data, cost less, with less user aggravation.

We have had customers who designed nice paper forms.  Their computer designs followed the paper design pattern as you might imagine.  That is fine as long as the filer is in person with the person typing on the computer.  The Internet has broken that connection yet we still make forms the old way.  Have you ever been on a site (I’m thinking about several government sites) where I fill in the form and press the “Submit” and… It says there is an error in the form.  OK, which page, which field, what don’t you like about my answer???  Of course after screwing around with it for ten minutes the computer throws in the towel and announces that my form can’t be processed – call your administrator!  I HATE those things – you do too!

You want good data, useful data? You want it to cost less to build and maintain? You want happier customers and maybe even more customers?  Then invest time in form design.  Simple forms delivers better quality data.

Naturally in my parting shots I must plug CodeSolve and PowerLine.  We strive for simple design and we listen to customers.

Microsoft Access – Why Nobody Has a Converter

I, as many others likely have discovered after 25 years, Microsoft Access defies attempts to use automation to convert the application itself to a modern application.  Access is a Windows desktop app.  Therein lies the first part of the problem in using automation to convert the application to a modern app.  It is designed for the Windows operating system (pre-Windows 10).  Windows is an “event” driven system.  In an event driven system a user can “click” anywhere – in the app or somewhere outside the app. Because of this “click anywhere” capability developers had to handle an endless set of possibilities.  More than half the code we wrote back then was there just to handle the “operator”.  A modern web application can have events, true, but the container application is handling much of the event notifications that come to the working application. They are filtered down to those that apply to the task at hand.

So we now know that the underlying architecture is totally different, dependent on a browser and not on Windows even if it is running on a Windows machine.  This means that developers have a different set of parameters to contend with in a modern app must be “cross-platform” independent.  Cross-platform lets a modern app work on Windows, IOS, or Android in a multitude of browsers.

While the above is certainly a challenge to using automation to convert existing Access (or any other Windows desktop app) to modern form, it could be done if Windows architecture were the only set of issues.  Access is in a special class of desktop, applications being both an application for getting work done (user targeted) and an application “development” platform.  Once upon a time it was a benefit to “extend” an application by using the Visual Basic for Applications (VBA) extensions Microsoft made available to developers.  VBA as it was called was a subset of the Visual Basic (VB) development environment and allowed developers to include it in their own applications.  The idea was that a developer could extend any app by writing Visual Basic code that the application would then run. As you might imagine, the resulting application had two modes of operation, runtime and development.

The automation killer: A developer could use the Visual Basic to create any type of work-flow imaginable! Work-flows are almost always augmented by external systems or simply through human knowledge.  I call this “human-ware” where a person is effectively part of the logic and control of the application.  Human-ware cannot be converted to a new application using automation, because the connective information is not part of the code and cannot be deduced without the human who knows the special steps not part of the program’s code.

Here is a simple example: Suppose we have an Access application to record data about a person. Suppose these persons are visitors, customers, or associates.  We want to record information about them in our system and put them in categories so we can search for them later. I’m the developer and you tell me this is what you want to do. So I decide to create a screen that lets you record all the information on a single form. Naturally on that form you must specify the category the person is in.  Another developer is smarter than me deciding to use a menu with three buttons for that you press a button to indicate the person’s category. This ensures that it always matches on a search. A third developer is a VB jockey, decides to use your actions (events) to trigger code to run and uses an “interview” method of data collection for all the person data by presenting you questions to answer. All three of these get the same information but use very different approaches (work-flows) to arrive at the outcome.  In all three cases Access was the application.  In reality it is much more convoluted than this with a mix of all of the above and more.

It is not practical or cost effective to attempt to automate conversion of Access apps to a modern platform.  Intact had an Access decoder that dumps everything (forms, tables, modules, objects – everything) to flat text files. We use these with our CodeSolve robotics to re-innovate the application as an Azure Cloud application service.  With CodeSolve conversions generally take less than a week for fairly complex applications.

If you are interested in learning more visit our CodeSolve site.

Set-IT-and-Forget-IT: No IT Doesn’t Work that Way Anymore

Forever, (or at least since ’81 and the IBM PC) individuals and businesses have purchased (or acquired through other channels) their software to run on their PC’s and they expected it to run there for years and years.  And in most cases it did.  There was nothing to compel you to do differently.

Well in case you have been caught napping, the smart phone came along more than 10 years ago and as they say, “The world changed.” It truly has changed the face of computing and the notions of software that runs on computers (including all devices.)

What is the big deal? You ask… Well for most individuals the big deal is really not a big deal. When the device you have (PC, tablet, smart-phone, TV, whatever) is out of date you do what most people do, go to Amazon or Best Buy and come home with a new X Box, you get the picture – software is included. In other words, “No thinking required, No brainer, Not a problem.”

For businesses that is not the case. [Shakespearean Aside: My definition of a business in this post excludes those very small businesses that are virtually “one-man” operations who behave as individuals.]  Business owners follow time-honored and government regulated practices which immediately put the brakes on the, “lets just upgrade” mentality.  The non-business person who likely is employed by one, is even guilty of saying lets just get new software.  The problem with that thinking is simply this, the customer will be affected and that is a negative (unless you are Apple).

Fortunately for you I am not going into all that business hoopla; there are plenty of online articles and debate enough already for you to do your own research.

The Point of this Post:

Today, computers (including all devices) are effectively disposable equipment with an expected lifetime of approximately three (3) years.  With hardware refresh rates shorting even more.  Cars, for example, are on a one year refresh rate.  Yes, I know cars last more than a year but it is out of date in one year.  You practically have no choice now but to take it regularly back to the dealer for a software upgrade.  In the computer business this is a “patch” or “bug fix.”  So if high-ticket priced items are on a schedule, then it is reasonable to assume that devices follow the same type of curve.  They do.

Businesses must alter their purchasing practices of the software that drives/supports their line-of-business.  If you continue to think that your software is a fixture like your building, then you are going to be in a financial predicament in the near future.  Software is a service, hardware (infrastructure) is a lease.  Start recalculating your business plans.  If you need help, you need to contact someone like me to assist you.

(Note: All companies mentioned in this article are owners of their various trademarks and other intellectual property. I make no claim to any of their respective rights and have used them here as common well-known public companies for illustrative purposes. I am or have been a customer of each.)

Visual Studio 2017 and Windows 10 Fall Creator Update (.NET 4.7.1)

This just a short note on compatibility.  If you are having this weird compile time error in Visual Studio 2017 15.4.x similar to: “… missing assembly reference. You must add a reference to assembly (netstandard Version”, error then this might help.

The issue is the tooling in Visual Studio not knowing about .NET 4.7.1. These days Windows, Visual Studio, and .NET are not any longer released together so there are and will continue to be mismatches in OS’s, tools, and .NET releases.  You have a couple choices.  1- If you like the bleeding edge then DWI.  2- If your earning a living, use only versions that are listed on the .NET and Visual Studio sites as Latest Stable.

Now, I obviously am one of those in the DWI category.  To use .NET 4.7.1 you must have Visual Studio 2017 15.5 Preview 2 or you will get build errors.  Naturally you forked your code before targeting 4.7.1 and netstandard 2.0 together – right, you did this?

Good luck…

Big Announcement – Intact and AWS

Intact Partners is now an Amazon Web Services Consulting Partner.  I knew that at some point we would have to expand beyond Microsoft Azure to AWS but I didn’t expect it to come so soon.

About a month ago I got a call from a man that I have known for years.  We were together on public healthcare forum several years ago.  Since that time we have remained friends.  Michael Jackson is a person I respect.  When he called and asked if I would consider a special project with Amazon I told him that if it had been anyone other than he, I would have said, no.

So over the next few weeks we talked and I am now an AWS Consulting Partner.  AWS and Microsoft Azure to be sure are different systems.  But therein lies the power of my company’s products.  PowerLine does not “care” what the underlying cloud platform is or who provides it.  CodeSolve our development tooling creates code  agnostic to the platform infrastructure.  In the real world customers acquire services from multiple vendors, always have in the past and likely will in the future.  PowerLine was designed to take advantage of this reality.  Azure was our first choice because of our existing Microsoft experience.  From my point of view (and the code’s) the platforms are interchangeable.  Customers, government and business, will and do have cloud(s) and local workloads.  This will not change, cannot change.  Critical services must always maintain a certain locality of data and operations for those times when remote services are not available.

AWS is launching a new internal project in the next few weeks.  Intact is a premier consultant for AWS on this project.  I will post when AWS goes public with the project.

Quick Review – Windows 10 Fall Creator’s Update

Intact Partners Inc is a Tallahassee, Florida company that I work in.  It’s hard to separate the job and the personal life when you are a fully immersed code and software junkie.  So if you read stuff on this blog site, it is not the “official” company line; but hey, who cares if you get the facts and/or an opinion.

Alright, so I installed the Windows 10 Enterprise Creator’s Update.  Since my Surface Pro 3 is a company device I had to use the subscription download which took forever to locate on Microsoft’s site. I checked their site this morning and they have that fixed.  Just log into your MSDN (now called VisualStudio.com) and type “Window 10” in the search box then look for “Windows 10 (multi-edition) VL, Version 1709 (Updated Sept 2017)”.  OK, hopefully you have it installed.

So here is my “Quick Review“: It’s great, I love it!  Works like I hoped and didn’t wreck anything when it installed. (You can stop here if you only want the short version.)

If you want more, read on…  What I have noticed since installing Windows 10 are simple things, but important to me.

  1. It is faster.  No really, noticeably faster on app loading.  Performance overall is definitely improved.  I use Visual Studio Ultimate all the time, along with a 5 node Service Fabric virtual machine cluster, SQL Server 2016 instance and a bunch of other apps at the same time.  I also have my tunes – Pandora going.  That is a fair load on any machine.
  2. It starts up now in less than a second. NOW THAT IS WHAT I’M TALKIN’ ABOUT!  Before I would push the button and sit watching the word “Surface” and a bunch of spinning dots for a couple minutes while all my background apps started up. This is the single-most improved experience I see.
  3. Security,  I know all the stuff I’ve read about in the security area but here is the one thing sticking right out.  The DNS server routing has never worked right.  You could by-pass the company’s DNS servers or get nowhere if the company blocked you.  Now Windows 10 actually uses the company’s provided DNS even if you have specified different servers.  This is very good since I am always in different customers’ networks when working.  I also have parental protection on my home network router so I want it observed no matter what.
  4. There are subtle changes in menus and that seem to simplify things.  This is an Easter Egg hunt, go find things.
  5. Finally, while technically not a Windows 10 OS change, the Edge browser has major improvements in user experience.  But under the hood, Edge now fully supports the CSS 3 standard for CSS Grid Layout.  Chrome, Firefox, and others supported CSS Grid Layout for a while as the standard developed.  You can look here to check the support.  Why is this important? Developers can simplify code, increase speed, and offer more app-like features.  (I could go technical on you here, but I won’t. Go read for yourself.)

Parting words.  I’ve been using the latest update for several days with no issues.  I think Microsoft did it right.  The changes, for me at least, are fantastic (your mileage may vary.)

Reviewed on my Surface Pro 3, i7 – 8gig – 256gig SSD. I have subsequently installed on two home computers.  Surface Pro 3, i3 – 4gig – 64gig SSD. Installed with no issues, about one second start-up.  Apps load subjectively faster. Sony All-In-One, i5 – 4gig – 256 HDD.  Again no issues with install.  This is a major improvement in the start-up time for this machine. While it took about 15-20 seconds to start it did not peg the disk drive for literally 10 minutes like before which made the Sony almost unusable.  I believe the relatively “long” start compared to the Surface devices is due to the Sony’s HDD vs the SSD drives in the Surface devices.