Saturday, September 28, 2019

Artificial Intelligence

Watching that guy from China and Elon Musk talk about AI and I'm just pissed off. Consider that robots in manufacturing (AI or not) are taking a certain classification of job. Repetitive, dangerous, limited workforce. Now consider where god AI's could be located. I think customer service including sales is where it's at. The problem is that while an AI might answer the phone the rules that a CSR follows are getting more and more ridged. Gone are the days of real customer service. I say the future is bleak.

I've deployed CoreOS

I installed CoreOS. I did it when containers (see docker, containerd, rkt) were gaining momentum. At the time I was not happy with the normal devops cycle of managing OS installation and having to check packages, installation stuff. It was and still is a nightmare.

I have been running th beta channel in development and stable in production. The systems are updated when they need it. The problem today is that my dev machine has been rebooting about every 2 hours. Now that I rely on that machine for a lot of adhoc reporting and very quick turnaround I need a more stable machine... so I'm going to switch channels and hope that what I'm not experiencing is a bad SSD or other similar issue. (I had an ASUS ChromeBox with a similar problem last year).

What is great about CoreOS is that I edited the file in /etc/coreos/update.conf. Changed the GROUP to stable, restarted the update daemon, and tailed the log while the daemon did the rest. Now in this case the beta channel is ahead of the stable channel so that can be a challenge but there are batteries for that. I could choose to change partitions to the previous partition/release in my channel or I can switch channels entirely.

Of course there are always risks and I'm a little concerned at the moment but giving it a try.

And I am on the stable branch now.

WARNING - CoreOS did not succeed as a business. While they made some good technical choices they were not embraced by the community at large. While CoreOS was an early adopter of docker, which netted them some market share, they started down the excellent path of rkt. That project was essentially DOA but might have a second life in the coming years. So then they adopted k8s and started to build out some services like etcd and quay. Finally being acquired by Red Hat. At this point it's future is unclear as RH has it's own ideas and something called OpenShift.

CoreOS BETA has been very good to me over the years so I cannot complain all that much. In recent months I have had even more success with RancherOS but that's a topic for another day.

Friday, September 27, 2019

when things go wrong with flutter

First of all... flutter sucks. I'm not sure what the developers and designers were thinking but the layers of crap you have to be knowledgable about and the near total lack of support means that even though the language is limited to the essential elements you still have to know a lot more than they admit to.

So my complaining aside.

At some point you installed flutter. Chances are that you already know what to do... but things go wrong... In my case flutter is not recognizing my iphone and after some diagnosis I determined it's because flutter installed some tools and they never worked. It seems that flutter was trying to use it's path to the tools before defaulting back to the user's path.

So when in doubt reinstall flutter. I'm not going through the entire process... just the notable ones.

- delete or rename the original flutter folder
- go to (previously and download the zip file
- extract the contents of the zip file and move it to where you want the tools to reside
- run the flutter doctor -v command and validate the results.

Everything should be the best as you expected

In my latest case I was having trouble with the cached artifacts. Specially the ones that talk to the iPhone. I did a flutter --bug-report only to determine that there were versions of my tools like idevice_id in the flutter project. When I tried to run flutter's version I got some strange errors that explained why I could not properly function. Also flutter upgrade does not really upgrade and flutter does not know when things go wrong.

Thursday, September 26, 2019

Essential Systems

I think I have been saying this for a while...

I'm just not sure that darklang that "does it for you" makes up for the 440 things you need to know. If those 440 tools are in the stack then they are there and may fail.

UPDATE I'm still watching the CEO talk about the language/platform and I've watch the co-founder demo. It's interesting ONLY if this sort of system is on-prem. I do not know anyone who would want to leave it up to a vendor. Furthermore while the simple signin is an interesting demo and feature flags are build into the system.... [a] all of those 440 systems of complexity are still there, just hidden from the programmer. [b] it's an optimistic view of the business... I write tons of reports and many are exported as PDF or XLS files... While dark could integrate these features it simply glosses over the many edge cases that are a reality.

However, I do applaud them. The system looks pretty cool. It's something I wish I had implemented.

UPDATE I'm frustrated with flutter. It makes some of the same basic promises or at least the idea of not having to know the complexity between iOS and Android... but that does not mean you do not need to know things.  Darklang may prevent you from needing to know how the tools work but they have not eliminated the tools.

Tuesday, September 24, 2019

Nim, Nim, Nim...

I tried Nim a few years ago when it was a baby and could barely walk. Some time today or maybe in the last few days they released 1.0. Back in the day we used to say that 1.0 was not good until it was 1.0.1.  Well, I cannot say one way or the other. I have no real world experience with the language but the home page is easy to read.
"The Nim compiler can generate executables for distribution on Windows, Linux, BSD and macOS systems. It also compiles to C, C++ and JavaScript. "
That in itself makes it awesome. Granted the full set of moving parts are still not clear. translation may be simple but where is the actual compiler.

Monday, September 23, 2019

too thin

WTF am I thinking?  My Macbook Air 2019 is too thin.

Because the laptop is so thin the USB-C sockets are that much closer to the desktop. That means either you break the USB socket, the USB cable or you have to lift the laptop to remove the cable. I think I could make a case for pitting the socket on the display side of the clamshell. After all it is precedented... In fact it would give apple a way to share hardware and manufacturing costs between the PRO series iPad and Air devices.

Facelift for non-Apple users on Apple hardware

I am still tweaking my Macbook Air.... It's a pain because if I were going from one ChromeOS device to another I would not have to make any changes at all.

Frankly, The title of this article should be OSX desktop for ChromsOS Users.

There is no doubt that I am a frustrated user/developer. Making these changes to be productive is not productive.  Just a stupid distraction. If I'm making these changes then I'm not writing code that generates revenue.

Moving on...

android on a feature phone

I do not know what they mean by feature phone but back in the day that might be considered something like the ubiquitous Nokia or Moto Razr oor flip. Between then and now there were some models like the Sony Xperia slide phone... just a basic phone that had some additional user input but nothing that looked like a modern day tablet or laptop in a smaller form.

I'm not a fan of the verge but they are running an article talking about a leaked photo of Android running on a feature phone... only to say that google was removing the code. (when leaked does not mean the same thing any more)

But here's the thing... I only need my phone for a few basic things. Phone, Music, Text, Email, basic web, maps. I do not collect apps or play games. When I was working in Sweden the company I worked for did not offer developers desk phones. They gave us simple cell phones. All I needed was a dial tone and a map to get around the unfamiliar city.

Shiny New Macook Air

My customer just purchased a new Macbook Air for me and over the weekend I managed to get my entire development environment working on it and feeling pretty good about it. But I have to say that I still like my current ChromeOS desktop and laptop with Intel Nuc for testing. The current problem with the mac experience is that it requires so much crap and 3rd party junk that [a] puts your dev machine at risk, customer machines at risk [b] and frankly puts your product at risk as there are so many dependencies that you cannot possibly know it all.

That same customer has been talking about moving some projects to rust-lang. I tried rust when it wa initially released and when I was a firefox fanboy. I don't remember exactly which browser failures caused me to abandon firefox entirely but they have come a long way since. One of the rust killer features is the output to web assembly. That's kinda interesting but so what? I build reports and business apps. I do not need 60fps video games or VR. I'd argue I need a simpler javascript.  BTW just looking at some sample code for hello-world and I know it's not for me. (but it does depend on who is paying the bills)

In that same period of time golang has come some way too. The best part is that I have not noticed it. The authors have managed to keep "the stupid" to a minimum even though the java paper dragons are trying to poison the waters. Frankly there is no place for object oriented code in microservices or system programming. But as much as I like golang it also need a light scripting language. I have tried to use otto, a javascript engine, and it works ok but javascript is just bad form. My bias is tcl and Lua. They work well and I can make that work easy enough.

So what do I think the future should be.... We would see a lot more innovation from the trenches if there was a new turbo pascal with some embedded scripting based on some simple language syntax so that it was possible to understand it all. And maybe extend it.

Productivity is money in the bank.

Friday, September 20, 2019

Flutter on MAC

Step one.... buy a new and latest Apple Mac. If you cannot afford that then refurbish your own previously owned Mac.... but make sure you have 16GB ram.

2) download(takes 45 minutes or more) and install XCode... you should have a dev user license and everything that goes with that. install your development account.

#3) download the Android studio

d) download the flutter SDK. extract the flutter folder from the zip file and move it to some place safe.... I use HOME/dev/flutter.  Then update the bashrc or bash_profile and add the flutter/bin to the path.

it's not enough to install these tools you need to launch them so they complete the installation and download of dependent tools....

v) launch/install android studio, install the flutter and dependent plugins then restart the IDE

SIX) flutter doctor -v and then flutter doctor -v --android-licenses

7] install the cocoapods(takes 20 - 30 minutes):  sudo gem install cocoapods && pod setup

(VIII) I installed VSCode because there are too many cool people out there... just another stupid system to manage... just hoping that it's better than android studio... need a turbo pascal for android.

9. in the terminal window 'cd' to the project folder and 'flutter pub get'

io. try a build/run   "flutter run".  AHA no devices.... could be a sim or the real thing. In this case I brought the wrong cable with me and so I need to try the sim.  Since this is a Mac the sim has to be driven by XCode. Once the sim is running then try the command again.

... this is the place where thins went bad last time.  'flutter run' does some crazy compile functions... and for one the cocoapods/swift_version was not specified. And then there was a missing platform selection.

ElEvEn - clone your code repo and then try to run it.... maybe create a new flutter project and see if it'll run

12) update the ios/Podfile add the swift_version and uncomment out the platform number... then  'cd ios && pod update' and then 'flutter run'

Friday the 13th) change the deployment to something that makes sense

Love ya) check the deployment version.. (ios deployment version). This kinda sucks because in any flutter program it appears that there are between 20 and 30 pods...

3x5) after all that I'm back to a similar error... "'device_id/device_id-Swift.h' file not found" There are no helpful tip in the goog. The closest was "flutter clean" && "pod install" in the ios folder. then a build. but that did not work. Unfortunately the flutter clean reverted all of the pod overrides I performed in (14).


-  running flutter on a MBA with an android device means you need a USB-A cable... so that the right controller and drivers connect to the phone. Flutter does not know how to identify a USB-C device. (android) of course.

- I have yet to find any documentation but all of the docs so far talk about android and so all the ios stuff is second class. As yet I have not been able to locate docs that explain how to generate/deploy flutter for ios. The best I have seen suggests that once the project is working (sim or real android) then you have to massage the code in XCode. But still trying...

<16> I thought I installed the xcoce cli tools... but there was a hint: 'xcode-select --install' (I cannot imagine why a small app would take 15 minutes to install)


a) download and install docker desktop... may require free credentials

b) download and install fossil...

c) install VPN certs and tunnelblick

Wednesday, September 18, 2019

Nothing is for FREE pay for the class

In most technical endeavors there are the occasional savants, however, they are a rare find. Most times you find someone with an advanced aptitude. In the last few days I find myself hard pressed to understand what the developers were thinking when they decided to use cocoapods as part of Flutter and why gitlab's config file had to be that complicated. I'm still trying to clean up the disk consumption in Docker and why some virtual machines at AWS timeout and some work just great. And why rancher decided to build k3os on ubuntu and not rancheros.
for the price of the class you get all your questions answered.
It seems to me that you just gotta pay to play. It's the open source economy...

an eye on simple version control

This is part 2 of my version control rant. And without starting at the beginning let's just start. I want a simple version control system with a web UI, runs in docker, simple to deploy, operate and backup. So let's go thru the list... (as I was wring this post I found a great reference)

RCS requires a checkout/lock to prevent others from making changes while this person is working. That works for small teams but it's too easy to forget to lock a file. It's a GNU project and it's last change was in 2015 so not sure it'll work on windows or mac although there may be some 3rd party versions. It;s also LOCAL only.

CVS I thought this was also a GNU project but it's not. Apparently It's last changes were in 2008. This project is mostly dead. As I recall there was a time when CTOs were converting to Subversion like it was xmas day. CVS is just a little better than RCS in that I think there is conflict resolution/merge built in. (checkin/checkout)
as a sidenote I find it interesting that CoreOS only installed git as its default version control interface. Any of thse others might have been a reasonable bootstrap.
Subversion (SVN) has been forked a billion times and it's a data big. It creates huge amounts of data and requires a librarian with skills to manage projects. There are a number of different  UIs but most suck.

GIT and it's many derivatives and addons... [a] does not include a UI except the ones that do. [b] if you make a mistake it's going to cost you [c] it's meant for huge projects.

Mercurial... see GIT. Bitbucket was originally built on Mg but then supported both Mg and Git eventually dropping Mg.

Darcs is written in haskall which in itself is not too bad except that over time you have to be a haskall expert.

Fossil is probably one of my favorites, however, the UI is seriously incomplete and installing it in a container is painful and there are no packages for CoreOS as the developer machine so there is a ton of work to get it to work.

Perforce feels like an enterprise VCS. Too much admin required.

AWS Code commit - not on prem.

MS Team Foundation Server - requires an admin.

Gitless - still requires git.

Visual Sourcesafe  - Windows only.

PVCS - it's been a while since I used that one but it's not free.

Bazaar could have been a contender except it does not have a web ui and it looks like it's tired.

SCCS - I skipped this one.

Never heard of GNU Arch.

Star team skipped it.

Others like Google Docs and DropBox... that's just a misuse of tools.

Helix Core from Perforce... just pissing me off because they appear in ever google search results and they do not fit the bill.

BitKeeper - the reason git exists. And because there are a number of commercial only I'll just skip them.

Now that I've done the work it seems that the only answer is git unless I can get fossil to work in docker.

version control

First of all let's call it like it is. git was never meant for average users; it was one man's solution for one very large problem. and as it stands right now most projects are simply not that complicated and do not need that sort of tool. I reference some coworkers who are still using RCS and CVS. I'll reference Fossil which I like a lot because it's simple not to mention that the individual project repositories is a SQLite DB.

So why on earth would I want something the size and complexity of git for version control? Right now I struggle with gitlab because the best free on-prem version of git with a CI/CD engine. Also it's double duty as a runner and it's integration with docker also make it it a gem... but then when you run out of disk space you are cooked. As I was.

Let me restate this in plain English. Most projects are small. Even if you think you have a large project it's probably small. Also you do not need git to snapshot your code. Just something simple. What frustrates me is that git is integrated into golang. And for no apparent reason.

Well, I have to laugh. I was writing this post and having my thoughts when I got distracted trying to deploy a fossil instance in my docker swarm cluster, and failing, when I found an article in the fossil website. (link)

Tuesday, September 17, 2019

against VMware

One significant con is finite resources.

My on-prem gitlab server ran out of disk space and my world nearly came crashing down. The Intel NUC is an i5 with 32GB RAM and 500GB SSD running CoreOS. There are several containers running in the docker config that include gitlab, gitlab-runner, haproxy, and mattermost. Each of those containers share all available RAM and SSD. So if one goes crazy then they all lose.

And that's what happened to me. gitlab-runner does not really clean up after itself so this time it mashed the whole system. Also gitlab stores all of the container registries and backup archives. Right now a single collection of my registries if about 200GB. I have about that amount in backups too even though the source is only about 75M.

Following the documentation I managed to orphan all of my source code. One slight miscalculation and I could have lost years of work.

But I'm looking at my on-prem hardware and there simply is never enough.

Saturday, September 14, 2019

Flutter lang versus the world

The flutter language and ecosystem is interesting and is actually built on many generation of giants. However from my position it seems more like lazy rather than pragmatic. "We" are in a very different world right now and flutter is not really going to fix it.

For years managers have been wanting a unified programming language so that [a] client interface programmers and [b] server and service programmers; could be interchangeable. Sure there were some minor successes when nodejs was released and made it mainstream. In fact there are still a number of meaningful applications but that's another story.

Where we are is management has nothing but contempt for the rockstar programmer and the wanna-be rockstar programmers. Management sees us as simple labor. Of course management is not alone as there are many other pressures. Take a look at any org chart and the rank and file programmer is typically at the bottom. From time to time a company has a technical track however these individuals never have the same influence that program managers, designers, and worse yet professional staff that are invested in Six Sigma or Agile.

So I'm a little off track here so lets get redirected...

If you ever used Turbo Pascal then you know what a pragmatic language and toolkit looks like. Turbo Pascal was a subset of the official pascal; it was nicely integrated with DOS, super fast to compile, the executables it produced were also speedy. Back in the days of DOS these programs could be desktop applications or TSRs. Later TP became a Windows development environment by incorporating the Windows API which Microsoft eventually polluted. The takeaway is that the tools worked and we got work done.

Flutter builds on a sidecar promise of java. While it is possible to build/cross compile for different processors it actually adds on the model by supporting iOS, Android and Web. And with that we inherit a complicated IDE and build system. After years of IDEs like Visual Studio and IntelliJ have we not learned anything? Heck, just look at the auto tools for building gcc apps on Linux. For that mater look at the latest build tools for golang. This does not have to be so f*cking complicated.

Languages -

  • java has just become stupid hard. OO programming is not the exception but @override is the rule.
  • Javascript was always buggy and it never properly supported concurrency and promises make the code difficult to read and write.
  • golang is still pretty good. The only problem is that java programmers are moving over in droves and want their favorite features included making it more java like. Go back to java please.
  • C and C++.. does not require much of a mention but the build process is no fun even though it is well understood.
  • perl and php are showing their age. Perl 6, based on parrot,... it generally forked the base and has not improved. CPAN is awesome but it's also showing it's age.
  • Python was rated a top language in 2019 but this tab vs space thing is still making it a bad choice. Copy/paste between windows/terminal sessions can have unexpected results. The language team are just a little too opinionated in that they seem to protect their pet projects rather than the language.
Embedding Lua and tcl make more sense.

Friday, September 13, 2019

enterprise database at scale

I just finished writing a post about Star Trek LCARS and the user interface. Then some google headline presented an article about enterprise databases at scale. And that just pissed me off. I look at some of my customers and I get stressed when they want to customize everything. Those damn reports can represent anything as the business team makes wholesale slaughter of the other side of the business... the reports start to lose meaning.

Data scientists seem to get lost in the idea of data normalization when the real issue is standardization. For example, if you want to build a successful business and then take that success to a second business then you probably need your tools to come along. But if the systems that feed those tools are faulty or represent something different then you've failed.
One of my clients has revamped their systems multiple times over the years and the problem is that there are no measurements to see if the changes had their desired effect. And that measurement is impossible now; while we are dealing with apples and oranges there is no way to make juice; which could be compared.
And the real challenge is that at scale a single record might be as small as a grain of sand on a very large beach and yet doing something with that data and giving it the attention that it needs is complicated at scale.

It's that reason why I do not want to be a google size company.

next generation reporting

The title of this article is a double entendre. If you have watched Star Trek the next generation then you know that LCARS is the Enterprise computer's visual interface.

What is amazing about this interface is that it presents compact and actionable information. What you never see is pages and pages of endless scrolling rows and columns of data that the operator would need to scan thru to find the thing they needed. Also, when you think about the operators and in many cases the engineers like Wesley Crusher they used many of the same screens to "program" the computer.

Many years ago I was trying to get my company's executive to accept the fact that Linux and BSD were good operating systems and in many cases better alternatives to Microsoft Windows. (at the time Oracle purchased or was about to purchase Sun Microsystems which had been on the decline for years and while Windows was increasing market share it was not ready for the enterprise or the internet. Remember that SQL Server bug of the default admin password and the number of machines that were pawned) Since the CIO was a big Star Trek fan I designed the system console after the LCARS designs.

Everything fit on a page. Red was bad, Green was good, Yellow and Orange were caution... and so on. And even though there was access to raw logfiles you could not get there until you exhausted the everyday path.

Now... over the last 5 years I have been knee deep in financial reporting systems. I designed a flow based programming DSL for generating reports quickly and in those 5 years I've created nearly 2000 to 3000 unique reports. Some are scheduled, some are exploratory, some were the equivalent to hello world.

But what I am finding is that after all that reporting and data warehousing and raw computing. What can we do to simplify reporting so that everything a CEO needs is on a single page and everything that a CSR or business manager needs is on a single page? And how can they manipulate that page to get the same work done. How can we get rid of the keyboard?

Thursday, September 12, 2019

all in one cluster tech or the other

A recent blog post suggested that kubernetes was the winner when docker signaled that it was going to support it. The author went on to say that swarm might become a shim layer to kubernetes. In a way that might be a good idea. Here's why.

I have a docker swarm with traefik for ingress. This is working out really well but I see that I have to commit to the one cluster tech - docker swarm. This is because traefik binds itself to the swarm but does not span multiple swarms. Of course there are some advantages to paying for and having the EE version as it supports a few other features that might include spanning networks.

One thing for sure is that having a k8s and a separate swarm each with their own traefik installation means that the system has to be partitioned accordingly. Migrating projects from one cluster to another along with name resolution... all bad. Keep in mind that many businesses start off committed to one tech and then migrate over time. It's a bag of marbles.

It's a genuine challenge supporting multiple clusters.

how to pick a docker stack name?

I'm working on a very small project that is meant to demonstrate a small web application (not a service) so I can get all the moving parts together and at some point I might be able to script project scaffolding creation. But one thing I have been facing is that the target URLs lose meaning/context; there is still plenty of manual cleanup; while I liked the k8s mode of using the uuid or branch name to deploy a dev instance there is a bunch of leftover topic.

This is a docker swarm installation. There are analogs with k8s but the swarm is easier to deploy regardless of the fact that k8s is integrated. That's simply for another day. So now there are a bunch of things that need names:

  • domain
  • stack
  • service(s)
  • url

A quick search to review the docker docs did not turn up anything interesting. My definition of a docker stack is analogous to docker-compose because they use similar config files. The purpose of a docker compose is to link and name a set of services. For example an application server and a database server for storing it's data. The docker-compose file describes the services with the outside world and with each other. A comic book inventory application might be connected to a comic book database but not connected to a newspaper database. The composition file provides some ephemeral connectivity.
production requests stay in production and staging requests stay in staging.
Given the 4 names above it's also important to note that there are multiple states to consider... dev, branch, staging, production... and maybe a few more. When you create the cross product from the two lists the number of names explodes and frankly requires some care. Especially when you might only have one domain or if you have multiple projects... in fact this is one of the shortcomings of traefik and micro services.

One nice thing about the gitlab+k8s design is that it simply uses a uuid and the rest is up to the user and the subsequent compose file. But then what about the other names?

But then it falls apart again...

to upgrade or not

From the new lessons learned bucket the question is how much time and money should you spend keeping your projects up to date?

I've been managing a project for about 10 years or so and treating it like an appliance. As in toaster. Plug it in, put in the bread, flip the switch and wait for the ding. The problem is that even the most mundane devices wear out. In this case I moved one component to a server behind an SSL wall and some haproxy bits that require some sort of SNI capability from the client. Unfortunately the existing wget and curl do not support SNI and so I need to upgrade. However the base OS has been EOL for years and so the various repos have been shut down.

Now that's EOL.

So I tried to build the projects from source. hahaha. Either the source was also behind an SNI firewall or I was missing other elements that simply would not install. At this point upgrading the systems could be a major undertaking... But before you go crazy about service contracts and the like... the customer is nearly 4-5 years behind in payments.

Wednesday, September 11, 2019

forking code repos

This is a short opinion piece. Stop forking projects unless you know you need long term support or you are concerned that there may be some sneaky code injections... The reality is that after 35 years of programming there is nothing worth keeping except for the code that is keeping the lights on. And whether you are a business owner or  CTO of a fortune 1 company the cost of maintaining old code is too high... better to hire a librarian and catalog the code. Forget the rest. If you are a SOHO then just delete it. You'll either get paid to write it again, probably better or smaller, or just include a library where someone has done a better job than you.

go or gb

"turtles on top of turtles". The challenge for a programming language has always been it's documentation and tools. Back in the day updates were so infrequent that producers actually copied disks and printed documentation. We also got used to the idea that we have to make it work and sometimes we'd have to buy or build tools to round out the project.

In modern times publishers just throw crap over the fence to see what sort of market share they can capture and many time rely on 3rd parties to fill in the gaps. (see android development kit). One of the weaknesses that became very opinionated in the golang world was the implementation of vendoring. It's a sticky bit but ultimately important because golang depends on 3rd party libraries to smooth out the bottom rung of the ladder.

Enter Dave Cheney and gb. It's opinionated, buggy, needs a steward, ...

but frankly I can live without it.

One thing I like about building a DSL is that I can detatch the project from the code and dependencies.

functional programming

Just a few minutes ago an acquaintance and former co-worker messaged me asking for a book recommendation on functional programming. I hope he does not mind that I'm referencing that conversation but I thought the question was interesting enough to write about it.

It bears repeating that with 35-plus years as a programmer I learn languages as they are presented. Recently it's been dart and flutter; sure the lines between language, API, environment and framework get blinded all the time... but functional programming is a beast of a different variety.

The scientists and language experts in the audience will know that functional programming has some interesting out of the box capabilities. See any erlang overview. And so there are some good reasons for the complexity. But then there is the ugly side of functional programming. You have to be a good or great journeyman programmer. button monkeys need not apply. The cost of functional programmer is higher than a regular programmer. The tools are weaker and tend to be more complex and so the cost of building out a proper environment is higher. Functional programming can gave the peril of the perl read only outcome. Training is harder for some people because it's a different way of thinking.

The worst part of functional programming is that it has not actually been adopted as part of the mainstream. While it might offer what looks like job security it' a fine way to kill a company too.

Tuesday, September 10, 2019

docker for IoT

WTF is really going on here? Docker is interesting and some fun. Orchestration like swarm is interesting and fun. K3s is a pain in the ass because k8s is bloated and fat orchestration... but it's fun because of it's promise to strip it all down to the essentials.

The problem is that the tool-chain has baseline requirements and by the time you work out production level design the baseline just grows.

My sample universe is made of four Intel NUC devices with 32GB ram and it's just not enough to build a real cluster. It's a toy cluster and has little to no monitoring. While I like VMware parceling one host into docker nodes does not really do the hardware justice.

Let's not exaggerate on the one hand it's nice to have VMware as the admin/control in order to install one large worker... or if you have more than just 32GB ram it's possible to partition them differently. One other thing is storage. As containers move around they need access to shared or network storage. That gets crazy too.

Anyway, moving on.

Friday, September 6, 2019

How do you REALLY use your computer?

How do you REALLY use your computer? Most people surf the web, type emails, word processing or other office functions, watch movies and unless a smartphone is close by listen to music, do your taxes. Some even write software, draft schematics, mix multi-track music and so on... but what does the average person use it for?

It's my belief that MOST people need only a browser and a cloud account for email and other office functions. On occasion I'll print and sometimes I'll even scan. But the thing of it is I'm a professional programmer. I need speed, memory, and screens. Gotta have lots of screens.

In the past I have had PCs running windows. I upgraded to various linux installations running on fanless/silent PCs. When the first iPods hit the market I was all about the Mac. I've had 4-6 variations of the macmini and macbook. My employers have provided me with Macs and Dells running windows and linux.

However, I'm in love with my ChromeOS machines. My kids have an ASUS ChromeBox which I only reboot from time to time to get updates. My in-laws have the same machine and aside the random reboot I merely delete the occasional 3rd party toolbar. My ASUS ChromeBox drives two 34 inch monitors and I write code, devops, business docs etc all day long.

The best part is that I can reach over, grab my my ChromeBook (laptop/tablet) hit the road and everything I was working on it right there in the cloud.

Now granted I'm going all of this on ChromeOS and using gmail, however, I could do all of this with an iPad or a Samsung Galaxy Tab (DEX?) and there is a cloud version of office365 as well as some apple functionality in iCloud.

Here's what I know and why I know this is the way to go. First of all while Chrome devices do have a wide range of prices you can get a lot more done. That $1000 Mac or PC costs about $350 on the ChromeOS scale. I can attach external monitors, keyboards, mice, trackpads, cameras. While I'm not going to edit or produce the next Beyonce album or video on a Chrome device editing a home movie is not unreasonable.

Talking to people about their phones or computers can be as partisan as who should win the next election. UGH! But here's the thing... My WHITE macbook has not expired but it is end of life (EOL). We have over 500GB of video and pictures and while it's all securely backed up we have had one serious failure in the last 8 years and it took 6 months to restore from backups. (Apples iPhoto sync just could not get the job done) All that media has a "cloud" premium to pay too. iCloud is not free... Neither is Backblaze. My MacBook Air failed about 4 years ago and would not boot. I decided to shelve it and only recently decided to repair it.

Repair rundown...
1) macbook is just getting slower and slower. There are no upgrades. It is EOL.

2) Macbook Air - I purchased an OWC 1TB replacement SSD and after several reboots, network installations, iTunes upgrade and payment verification circle jerk I finally got Mojave to install and that was about 45 minutes ago. This machine is limited to 4GB and the 11in screen, while initially fun, is a waste of time. Many apps still do not like the 11in screen size.

3) My daughters' ASUS ChomeBox is an early i3 or celeron. I have never installed virus protection (an extra cost), It just works. There was one time my ChromeBox failed and while I was waiting for a replacement I used theirs and did not miss a minute of work. Just the other day I rebooted her machine and there was a message from Google... this machine is nearing EOL and you may not get updates. 

While I might have spent my savings... it's time to save again and refresh their hardware.

Sunday, September 1, 2019

Keto Crackers

The Recipe: Keto Sesame and Flax Seed Crackers Yield: 6-7 servings of 8 crackers Total Time: 30 minutes Active: 10 minutes, Passive: 50 minutes Ingredients: • 1 cup almond flour • 1.5 TBS whole flax seeds • 3 TBS sesame seeds (use roasted for a more intense flavor) • ¼ tsp salt • Freshly ground pepper to taste (I like 10-12 grinds from a pepper mill) • ¼ tsp baking soda • 1 large egg, beaten • Cooking spray The Tools: • Mixing bowl • Spatula • Rolling pin • Pizza cutter or knife • Cookie sheet • Silicone baking mat (link to purchase below) • Cooling rack The Prep: 1. Preheat your oven to 350F. 2. In a medium mixing bowl, thoroughly combine all of the dry ingredients. Add the egg and mix with a spatula until the dough forms a solid mass and nothing clings to the side of the bowl. 3. Place the dough on a silicone baking mat, cover with parchment, and roll out into a rectangle approximately 10”x14”. Gently peel back the parchment paper and use your finger to tidy up the edges. Using a knife or pizza cutter, score the dough into squares that are roughly 1.5” being careful not to cut into your silicone mat. I find I get around 50 crackers, give or take. 4. Slide the silicone mat onto a cookie sheet and place it in the oven on the middle rack. 5. After 10 minutes, remove the crackers and lightly spritz them with cooking spray. You may also sprinkle extra salt at this point if you’d like. Rotate the tray 180 degrees and return to the oven for another 10 minutes. 6. Remove the crackers from the oven and allow them to cool for a couple of minutes before transferring them to a wire rack. It’s okay of some of them break along the score marks you made. 7. Allow to cool for at least 30 minutes, then break into individual crackers. The Serve: Serve as you would any cracker: eat them straight up, top them with nut butter, cheese, meats or the keto friendly dip of your choosing. Nutritional Info: 134 calories, 5 g protein, 11 fat, 2g net carbs Giving credit where credit is due, the inspiration for this recipe was lowcarbmaven.

Fire OS and Android

The relationship between Amazon's FireOS and Google's Android OS is probably very complicated. And while there is probably some very...