Hatched

elioWay was hatched on 2018-02-18. That's just a fact. What follows is a true story. Some elements of the story have been exaggerated to little effect.

I'm Tim Bushell, leader in the elioWay. I've been working on this project, between paying gigs, for 5 years.

"Everyone has this backstory!" "That's why you should tell it" Tim Bushell

Backstory (optional)

I started creating "database driven web sites" at the turn of the century. And I was late... ish.

I bought an Amstrad 6128 in 1983. I was 16. From then computers were central to my whole life - but it wasn't until ten years later that I started to code.

So if you were one of me, starting to code "database driven web sites" in the 1990s, first you had find and install a special "data adapter" in your programming lanaguage (my first was classic ASP with VBScript) and for your database (my first was Access). There were websites (before Stack) with lists of correctly formatted "connection stings" between Java, python, .NET and all the DBA.

Then you'd write a "data layer" to handle all the data calls and executions, between the server side script (tasked with generating the HTML) and the DB.

Often you'd take your version of that data layer with you between projects, but you'd still have to write all the custom SQL queries for the new project each time.

This is an old old problem we solve from scratch for each project. Easy but tiresome.

In ASP.NET, at ModuleSolutions in 2004, I conceive and helped build a "data layer code generator". That came with me to CourseMonster in 2007 - and I used it until 2013.

So I've been doing this stuff a lot, in one way or another, for a long time - but less time than some. And frankly... this occupation is in a bit of mess.

State of non-elation

south park more crap otherworldly

A lot has changed since the early days. Web frameworks now feature a lot of boilerplate stuff out of the box. I moved onto libraries like Django and Ember. Much easier. Write the names of your data tables; a list of fields; their datatypes; describe the relationships and... done. Then...

{% for peeps in mydata.people %}
  <!--
    write out an amazing contact list
    with all the data right where you
    need it for hardly any effort.
  -->
  ...

...in a script - that simple line - you'll have what it took an entire module of code to do in the olden days. Nice. I'm going to keep using tools like that, the elioWay.

But there is a flip side: Much is the same as before.

Some examples:

{% for peeps in mydata.people %}
  <!--
    write out an amazing contact list
    with all the data right where you
    need it for hardly any effort.
  -->
  ...

... still has to be written. It's a crappy, tedious chore. "But it does have to be written!", you declare. Correct. Every time. Why can't we change that?

onSubmit(theform=>crudify(theform))

And where you probably write:

<form class="form">
<table class="table">
<menu class="menu">

(if you're using Bootstrap). I kid you not. Not this time.

Do we say firstName or first_name or forename? Is it surname or lastName. Surely it's lastName if you have firstName. Where do we put middleNames? What about the Pacific nation of Microfarfromus? Their people don't even have first names!

"Hmmm... That's hardly complicated, Tim", you say.

Right. But do you enjoy doing it?

That's just deciding on the field names of people - just wait until you're writing an app for a "molecule engineering startup" or some weird edge case exports company - which requires modeling complicated, mysterious objects.

crud noun
A coating or an incrustation of filth or refuse. Something loathsome, despicable, or worthless. One who is contemptible or disgusting.

OMG, the forms.

OYG, the forms!

All the gods, WTF!

Laying them out. Adding the "onSubmit" handler. Tackling the validation. It's just CRUD. The acronym isn't called CRUD for nothing. At the elioWay we call them all TURDs (takeup update read destroy). Neither are good acronyms. Sure: There is create, read, update and delete - but there is also "create with relationship to this", which is, for sure, just a special type of create (create-create or create-update) but special enough an operation you write so often you probably have a special function for it!


I want the elioWay to take us over the line and stop that all this CRAP (create read alter purge).

I love my job creating web applications - still - after 20 years: love the opportunity of putting the power of computing to trivial use for people daily with an unparrelled immediacy. For a olde gentlemen programmer like me, whose first Microsoft installation came on 10 or more floppy disks - and you had to sit there and feed the computer (like giving treats to dog) - the age of streaming is still a wonder.

But I don't want to write another form. I don't want to have to write "form.onSubmit" again. I don't want to have to say

peep = new Model(
  "Person",
  {
    "lastName": "string",
    "foreName": string,
    "dateOfBirth": "date"
  }
)

again. Can you imagine! Having to explain to a computer what a Person is?! These are our future rulers and they don't know what Person is yet?!

In 2022 we should not still need to write this:

<div class="container">
  <div="container-shell">
    <div="container-cushion">
      <div="centered green interesting">
        <p="but also nochalent">
          <span="shoot-me-now">
            { pageSubHeading }
          </span>
        </p>
      </div>
    </div>
  </div>
</div>

In 1981 (or whatever) I watched Blake ask a glass box to "plot a safe course to the Andromeda system". So why, in 2023, does the computer need my description of an Address, or for me to add a deliveryDate field to a Delivery object and explain how it needs to be a Date type?

In 2023, I, can't just say this:

person = new Model("Person")

...but in 1981 it can plot a course across the Milky Way avoiding asteroid fields and rogue gravity wells?!!!... fictionally of course... but... really??!!! And is there a pitch restriction to my outraged inner voice - because if there is... I haven't reached it yet!!!!!!

Or...

We could do it the elioWay.

Put better still: I'm going to do it the elioWay. It will be worth it just for me.

south-park more crap squeezing one out

The CRUD.vAll the TURDs... I/We're going to do them one. last. time. Squeeze out a bunch of world record, Randy Marsh sized CRAPs. Do them well. Take that with us between projects, like those 200 lines of code in that data layer I wrote in VBScript waaaaaaay back in 1998 (or whatever). The data layer. The modelling. The HTML. The forms. The lot... 95% of it taken care of by the elioWay.

Let's aim to have this... at least, this:

import { elioApp, ElioThing } from "theElioWay"
import thing from "./thing.json"
import bones from "./bones.js"
import flesh from "./flesh.json"

let PromotionsThing = ElioThing("Event", { list: ["Product", "Place"] })
let BusinessThing = ElioThing("Business", {
  list: ["Person", "Product", PromotionsThing],
})

let app = elioApp(BusinessThing, thing, bones, flesh)
app.run("localhost", 5000)

Combined (maybe) with an app another developer has written called AdventCalendar...

import { elioApp, ElioThing } from "theElioWay"
import thing from "./thing.json"
import flesh from "./flesh.json"
import { AdventCalendar, bones } from "@eliofaithful/thisCouldBeYou"
AdventCalendar(thing, bones, flesh).run("localhost", 5000)

Which is really not intended to be pseudo code but an example of something which might be the whole app - made up by stacking lots of little apps with simple, data transforming endpoint you can predict... and if you help me write it we really could spin up working, targetted microapps with just a few lines of code and imports. Anyone could.

I want to spend less time writing CRUD and more time writing compelling and time saving features in simple micro applications for simple jobs without breaking the banks of small businesses, startups, hobbyists, charities and NGOs.

I'd love it if you help.