Aug 2018
October 2018 Issue
Collins Software's Newsletter
Nov 2018
"index" is not an "index":

So for 40 years, what I thought was an index, is really an offset. This concept of an index "1" or "0" is not a fair battle if the fundamental concept of "index" is wrong.

The "C" programming language made so many false paths for lemmings to follow, that the dust from the herd has blinded us to the true nature of the direction that I was following. The concept of an "Index" is just one of the many false trails that we all follow.

What has been misused by software developers as an "index" of an array, is really an offset from the first value in the array, and since most initial uses of an array was for a byte array (the character representation) offset became synonymous with index just because it had similar uses in this byte context at the assembler level. So is index an offset? no, and therefore is far better served starting at "one".

The assemblers and "C" language should not dictate the conventions of software development when they no longer apply. With new concepts in compilers, this concept of "offset" is wrong and hinders and slows down software development. I will change the JavaScript compiler to have an Array index of "one" with more python like list loops which perform self indexing looping capabilities.

As a developer the last thing I want to do is change anything. Change just means more crap...  but in this case I will risk it. I don't want to see the next hundred years of billions of man-hours wasted on "is it an index or is it an offset"?, when it should always be clear the the "first element" has an index of 1 and an offset of "0". This should give you a clear understanding just from the word "first": it is not "0" but "1". The words "Index" and "offset" are not synonymous and therefore the computer language should made a clear distinction and not have the human alter his vocabulary to injected false concepts.

"It is not that I'm so smart. But I stay with the questions much longer." ― Albert Einstein

"We learn from failure, not from success!" -- Dracula

"Spoon feeding in the long run teaches us nothing but the shape of the spoon." ― E. M. Forster

"In youth we learn; in age we understand." -- Marie von Ebner-Eschenbach

"Judge a man by his questions rather than his answers." -- Voltaire

"I alone cannot change the world, but I can cast a stone across the waters to create many ripples." -- Mother Teresa


New Compilers

There is not much to say on this subject. I looked at the Visual Studio 2017 C# enhancements and was not impressed. A catch-up to Object-C and JavaScript but no real changes. It took thirty years to decide to make some basic changes to technology without changing anything. Change for change sake is not an improvement.

PowerShell, I am not sure... new syntax and really-really complex changes to the basic command level access to dos command with even more strange syntax into the win32 & .Net worlds of software development.

A "Jane" Personal Server:

I have created what I have always needed, was an always available active personal server that I can call upon to perform computer tasks.

I can take advantage of the browser technology to display stuff... and use the Jane personal server to store and retrieve any of my personal information on my local machine. Turning the web browser into a desk-top application with complete access with full security to my information. Then installing a local area network Jane server to securely share internal resources, and finally a www Jane server to securely share what I deem as public.

The Jane compiler that runs on the browser and as either a local emulated program on the Jane Personal Server, or as a windows stand-alone executable. The compiler will have complete access to the hardware, operating system and application dependent data structures.

The local area network is expanded into a private knowledgeable web of information that can be accessed and shared of every local computer and device with absolute security.

When a user logs in to windows/unix/... a service will attach a personal assistant that is added to the task-bar similar to the "volume control". She can be called from the browser to store and retrieve information as if the information is resident to the browser's application.  "a = jane.environment.path" the information is load on demand.

So database access, file i/o device access, fonts, screen resources, a view of the world accessible as a single executable language, that requires no documentation for the development of new applications.

Information is always available to every application by a single namespace from anywhere in the world. All information is always available and changeable. Hardware terms: such as devices, cpu registers, memory,... Operating System terms: system parameters, current User, processes, windows, files, databases, fonts,... Application that used to take thousands of lines of code, can now be done is a few chanracters. 

Layers upon layers:

The concept of software development has been on the wrong path since its conception. Each path taken in the early days of computing are still clearly visible and well traveled.

 The beginning... hardware instructions: This path is a concept of one "one instruction" to "one hardware implementation".  A simple solution that was the obvious choice for the first computer. We have followed this path at a cost to software development. As hardware changes and improves the same path has been followed, "lets just add another instructions to the already bad set of instructions".  Fixing the instruction set would change the foundation of software development.

Then... Numbers: The really bad concept of numbers. The path of fixed bit size numbers has devastated software development like no other single choice in hardware implementation.  

Then... characters: A whole maze of paths that all lead to a bottomless pit of destruction. Basically there is no concept of "characters" at the hardware level, so nothing really works. The non-concept of characters cause wasted time in every software development effort.

I could continue for every path taken, but I will stop here. With every slight change to concepts at the hardware level would make vast improvements to the concept of software development.  

Jane LAN server:

A duplicate of the Jane Personal Server that provides local area access that permits sharing of information among all of the Personal Servers in a local area network. I have 10 to 20 computers just in my house that I can securely access as a single machine, independent of hardware operating system or purpose.

Jane Web Server

Providing public information to the world wide web securely. Receive information filtered and securely.



Author: Clif Collins
Houston, Texas
October 1, 2018