Feb 2014
April 2014

A Complete Software Robot Application:

Last month I completed an application "List Of" that made use of software robots. This month I have started an application that is 100% built using software robots "Software Robot Maker".

The application's code is 4 lines of JavaScript, with 0 lines of HTML (see below).   The application is the "what and where", and software robots are the "how". These 4 lines of code could be written to run in any environment, from DOS 1.0, Unix, Windows, Motif,  iOS, Android, Spring,... making the system of software robots, operating system/ hardware independent.

As I view the future I see all applications are mostly the same, a page divided into regions with a link to the content. As we build more software robots, then development of new applications will take only a few minutes to create. This is: accumulative software development, as each software robot is built the system become stronger and more complete and development time will approach zero.

Redesign of HTML:

I created the above application by designing a component that handles regions on the screen.  I tried for 3 days to design the page using native HMTL5 of the four regions to act in a certain way and was unsuccessful.  I came up with the "Frameset" component (see right) which solved my problem.  I am becoming more and more dissatisfied over having to use HTML as a development environment and I have a few thoughts on a redesign.

The Frameset component solved my form layout problem, an easy fix. For column layout in a text document a ruler component with tab positions is a simple fix of document editing of columns. 

One major redesign of HTML is getting rid of cascade style sheets (CSS).  I would like see placement, shape and text characteristics separated and placed into individual data-drive design tables. 

Text Characteristics:
   main:  12pt blue Arial
Shape Characteristics:
  tab: 3px top radius, background-color:red
Placement Characteristics:
  left: float:left

<div textclass=main shapeclass=tab placeClass=left>Hello</div>

For any given element I need to know where to change its characteristics. With the existing CSS it is impossible to tell. I would like to see a design with better user control.

We might also look at other classes such as an event class, one that associates events to an element.

By using only class names to determine characteristics, it would let us know which classes are used on a page making it easy to manage.

I believe a redesign of CSS would save hundreds of man hours per page of development time. CSS is not designed for human consumption.

The Unconscious Computer:

Is the unconscious mind smart, as science is beginning to believe? It might be that our unconscious is smarter than the conscious, which might be the way we get inspirations and how we make decisions.

This gave rise to my rethinking of software robots. Instead of thinking software robots are just tools to be picked up and used, we might think of them as the unconscious Adam, to be instructed by the conscious (us) but performing their actions independently. The unconscious Adam (software robots) could perform the task asked of them, but they could also learn by constantly scanning the environment, giving us feedback and by performing any action that will free us to do the thinking.  Just as we drive a car, most of the actions are unconsciously performed, yet controlled by the conscious.

It is this feedback and independent automation that makes me think that software development should be divided into the "Conscious Computer" (5%) the interface we control and the "Unconscious Computer" (95%) which does the work, scans the environment, remembers and makes suggestions.

In the building of an infinitely large software system we divide it into the part we control, and the part we do not. This will reduce our work by 95% in just running our applications, along with giving us a seemingly smarter Adam.

Reducing Software Development From Man Years to Man Seconds:

Building software robots is not intuitive, it requires some learning. Each time I write a new application the development time is reduced. Partly due to my learning the process and partly due to the accumulative effect of software development using software robots.

Each iteration of development reduces the next by an order-of-magnitude: from man-years to man- months, man-months to man-weeks,  down to a point that it should only take seconds to build applications that are customized to an individual's specific requirements.

"Pat-a-Cake, Pat-a-Cake..."

I got my grand-daughter to play pat-a-cake with me. She had a difficult time at first and complained that she was only 8.  I, of course, only went faster.... Within only a few minutes she was as fast as I was: 1.3 cps (claps per second)

Training the brain to perform reflex actions is something the unconscious mind learns very fast. This learning process is the same for vision, walking, talking, all of the actions our body perform with little or no direct connection with the thinking brain.

In Adam systems, many of our actions are repetitive and therefore might be learned and improved upon in a similar fashion. 

Software Robots:

Software that contains 100% of the code necessary to complete a task.  The concept here is to have a single entry point that accepts natural language commands. The appropriate software is dynamically loaded from anywhere in the world.

An example of a software robot would be "security" that manages all access of every application.  This would be the unconscious Adam ensuring that all roles and privileges are enforced. An action that is never exposed to the conscious Adam but is always performed.

Another example is a PDF software robot, one that generates a PDF document from some source instruction set. In my PDF robot this is any HTML source to produce a multi-paged PDF document.

The Frameset Component:

I liked the deprecated "<frameset>"  html tag, except that it required separate html pages for the content. I decided to write a component that would use in-line html content yet have the same capabilities of splitter bars, scrollable regions, resizable and each frame having separate content.

I wrote this component as my test program in one day.

I expanded the logic so that each frame is assigned an ID by the user. This unique ID is used to assign content. Each frame can be assigned more identifiers thereby permitting multiple pages. Each frame is a <DIV> with methods to open, close itself, with events to resize the content when required.

Do Not Reuse Code:

I will stress the need to quit thinking about reusing code. This  a strange statement coming from a programmer. I find this is the hardest concept for me to grasp, not to think about other uses for the code I am writing. 

We need to get away from the concept of function writing, were we write only part of a solution, such as when we create API's and function libraries.

Software robots are complete solutions and as such need to be easy to access. We want them used in the context that the developer designed them. We must create simple well defined code, that can be managed and understood by the developers, but more importantly useful to the users.

A software robot should have a single use, not to be complicated by using them for more than a single purpose.

Author: Clif Collins
Houston, Texas

March 2, 2014

email: c2@CollinsSoftware.com

Software Robot Maker.htm

<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Software Robot Maker</title>
<script src="Adam/Adam.js"></script>
//                                         init
function init()
var text  = '<frameset framespacing="0" rows="40,32,*" frameborder="0" noresize>' +
            '  <frame style="background-color:red">' +
            '    <div text-align: center;font-size:24pt"><b>Software Robot Maker</b></div>' +
            '  <frame id=myNavigationFrame">' +
            '  <frameset cols="20%,*" frameborder=1>' +
            '     <frame id=myFilesFrame">' +
            '     <frameset rows="24,*" frameborder=0>' +
            '        <frame id=myTabFrame>' +
            '        <frame id=myEditFrame>' +
            '      </frameset>' +
            '   </frameset>' +

Adam('web.frameset   open id=myFrameset',text);
Adam('web.editRobots open id=myRobotEditor tabFrame=myTabFrame editFrame=myEditFrame');
Adam('web.fileview   open id=myFileNavigator editor=myRobotEditor iconfolder="/small_icons/" ' +
                              'path="scratch/" filesFrame="myFilesFrame" navigationFrame=myNavigationFrame');
</head><body onload="init()"></body></html>