The Levinux Way Is Born

by Mike Levin SEO & Datamaster, 08/15/2013

Note: Get ready for the geekiest of geeky thinking out loud. On the whole, this is about how I used to do frameworks, and am now in pursuit of the anti-framework framework of the short stack. If that’s not gibberish to you, read on… maybe.

It’s time to update the top of this file (the journal text file in my Tiger code repository from which this WordPress daily journal entry was extracted) where I keep my plans, roadmap, and overarching principles that drive (or at least are supposed to) my daily actions.

The Levinux Way

Interesting! I will in effect, have TWO Tiger publishing channels. THIS ONE, which is my WordPress blog, which is extractions from the journal text file, which is in the Mercurial (hg) distributed version control system (dvcs) that keeps the Tiger project. But I’ve also started in with a parallel project called Tyger, which is maintained on github, which is open sourced as it is born, and wihich is actually just another parallel publishing channel for me. It is my job now to cross-link them! Look here.

Given the nature of distributed version control systems, and this journal, and this Tiger project, there’s going to be a lot of stuff captured here idea-wise in my head. It’s like the first Tiger project is where I worked through a bunch of ideas, fresh from my switch over from comfy-cozy/ship-going-down Active Server Page + SQL Server world. I was on the Microsoft version of LAMP from circa 2000. This is was after the ASP explosion but before .NET.

It was a time when newcomers could flock onto the Microsoft IIS stack just as easily or even more-so than they could the LAMP stack. Things were rough even on the LAMP stack back in those days, and they were pretty friggin’ good in M$-land. The VBScript language was written for emboldened amateurs. Websites that connected to databases and did things could be banged out rather easily. In fact, you could back-end the database with the copy of MS Access you had on your own desk. ODBC-connections were ODBC-connections, and there were only a few SQL dialect things to keep straight if you ever had the opportunity to switch over to SQL Server… or even SQL Server personal. These were all the primordial “keep-them-off-LAMP” for webservers maneuvers being carried out by Microsoft in these days.

Soooo… I made a whole big Ruby on Rails-like system based on VBScript. I called it “The Generalized System”. It is still in use today - 10 years later (not including the 5 years it was already in use). It was rather amazing, able to interrogate relationships in tables sitting near each other, infer their relationship based on their indexes and foreign keys, and automatically build a usable user interface around it. Such user interfaces were suitable for anything with nested relationships, such as bill-of-materials systems and order-management and shipping-logs. So, it went into use for all of the above.

I had actually made 3 versions of the generalized system: 1 which was IDC/HTX file-based - a web templating system for Microsoft IIS/SQL Server that predates both VBScript and the idea of Active Server Pages. I did my first ROR-like system when Microsoft had no web language to speak of. Then I did a second version at (then) Prophet 21, where I created double-quoting array config file hell - but some really awesome systems including an employee photo directory that became affectionately known as the dating game. I did a lot of social good at Prophet 21 (now, Activant). But when I went back to Scala, I had convention-over-config files on my brain, and I made the framework basically just “spring a UI into existence” by being pointed to the parent table of interrelated tables with just one line. It was something like db = “orders”. All the global stuff was taken care of by a file called global.asa, including db connection strings and login credentials. Very convenient, but very short-lived as a stop-gap in nature. And so Active Server Page gradually died, and with it any of my chance of becoming the David Heinemeier Hansson of VBScript.

Somewhere along the line, I was trying to convert Generalized System 3 (the joyful config files, but fully ASP) over to Generalized System 4, using the latest wiz-bang Ajax technology of the time. But this was 2006, and times were very very different than today and the days of WebSocket. I found something called the OpenRico system, which was built on something called prototype.js from WAYYYYY back in the days of early Ajax. Generalized System 4 was to be an awesome update of 3… but all it ever ended up being was HitTail - which was pretty cool too. GS4 it turned out was REALLY good at paging through massive amounts of data in such a way (thanks, Gerard Bucas) that it took no more resources than quick little queries. In effect, I re-discovered the benefits of an Indexed Sequential Access Method (ISAM) data structure in a world where that kind of data access is much more used than complex set-theory joins. In other words, when the tables were simple, SQL is overkill and actually slows down both you and the app. But by structuring your data just-so, and building your app just-so, you could page through billions of rows of data like is was no big thing. There’s no amount of data in which “next 10” sounds that hard. It’s not. It’s the “previous 10” request that’ll get’cha for reasons that are beyond the scope of this daily journal entry. But I cleverly dealt with it, and was able to do what nobody - not Google - not any of the competitor start-ups like 103Bees could do: show you in real-time when someone hit your site on a particular search. It used Ajax and time pooling (usually set to 10 seconds) to re-query for new data on a highly optimized, always executing query that smart design and optimized execution-plan always made quick and low-demand on the server and its hard drives. Know your hardware. Build your app right up to the edge of the capabilities of the hardware. Then be able to replicate that hardware. All you have to do is have some communication between these “islands” of processing power and local storage (or “nodes” by more official terminology) able to communicate with each other and you can share login-table data, or at worst, authenticate against a foreign server and send jobs back and forth for processing (rare IF EVER done by me - but I planned for it in 2006).

So, this is a classic case of: “If you’re so smart, then why aren’t YOU rich?” And I have no valid answer for that but: I lacked guts. I never tried to do it on my own or for myself, or for my people who would pay me directly. In effect, I always chose to work for one boss instead of many. I am now thinking about the shift to many bosses, but there is a very difficult interview process for that - and YET AGAIN, I want to forge my own way and not be under the direct control of the often-wrong gurus of our time. But the real gurus are out there. And therefore, one of the basic tenants of The Levinux Way is to know what critical concepts are expressed in what scifi books, and to make sure that a recommended reading-list and schedule exists that collectively will indoctrinate you to The Levinux Way without hurdling having to read a wit of this super-dry daily journal stuff from me to get its full benefit.

-——————————————————————————- Wed Aug 14 10:41:18 EDT 2013 Well here I am at Indian Road Cafe again today, assuring myself that I am capable of working focused when working from home. I have a lot of interesting and important things to finish this morning.

-——————————————————————————- Tue Aug 13 16:09:01 EDT 2013 Okay, it’s 4:05 and I have the ID column incorporated. Now, break it up into separate files. But do it YOUR WAY. Don’t be predisposed by Faisal’s approach.