Life is a game

white and blue wallpaper

Reflections as another round begins

It’s my birthday weekend, a fact which I exploited last night to tie one on. The girls and I watched half of the The Phantom Menace last night before we tried to put them to bed at their normal time before giving up. We’ve got them trained on melatonin gummies, and I don’t give them any on the weekends, so they wind up staying up an hour or more past their bedtime. So we wound up having a little party afterward. I put a song on the piano and Younger banged around on it, singing some silly song she was making up. It was too cute. We took the girls outside to see if we could watch the moon, but it was cloudy so we just sat out there for a while until Missus took Younger to bed.

I bought Factorio, on Tobi Lutke’s recommendation, and it is right up my alley. Building little systems to harvest resources, transport them, and build more and more things. I am going to spend too much time on that game if I’m not careful. It’s addictive.

Systems thinking is affecting my brain. Everything is a process now, threads of the machine we call life. I only have control over my attention, and I need to guard it carefully. I’ve spent most of my life with it scattered in dozens of different directions, focused on one project or another for a few months, then onto the next. Of course there have been themes around them, music and computers, mainly, but the threads within them have run deep in various directions. Mostly broad, rarely deep. Jack of all trades, master of none.

There has always been so much to do, that it’s been hard to focus on what I ought to do. Every decision made, another choice abandoned, and so paralysis ensued. Attentioned wandered to what was easy, not to what was complex. These days I’m forcing myself to delve into things, tracking them and holding myself to account to work on them.

I still make music these days, but I don’t write songs. My coding is getting better. My designs are still huge messes that I wouldn’t share with anyone, so I’ve started building test coverage around them so that I can make the changes I need without fear of breaking things, or of getting overwhelmed by my own construction and forgetting where I am in some abstraction. There’s always a purity about starting from scratch that is addictive also, new and promising, that threatens to pull me away. Burn it down and start from scratch. The grass is always greener.

It’s much harder to fix what’s broken when you’re flying by the seat of your pants. After an hour in Factorio, running my little toon from one resource pile to the other, I realized I could have the the coal extractor feed itself, and I could run extend the conveyor here to feed this other machine. I woke up this morning thinking about it. Instead of maintaining two separate lines of conveyors for different goods, why don’t I just create a loop with everything on it, so that the machines can just pull what they need? The game has already infected my mind.

There are tons of games on Steam that gamify things things that some people pay to learn at college or tech schools. Learn networking through HackNet or computer science through 7 Billion Humans. Then there’s Zachtronics, who makes games that teach you how to code assembly language. Truly insane.

Last night I stayed up too late, drank too much, and woke up this morning hungover. As I lay in bed, staring at the ceiling fan spinning round, I was thinking what I wanted to do with the day. I couldn’t decide, and I didn’t need to. I got up and did what I always do, (after popping an ibuprofen): put water in the microwave, do pushups, make tea, meditate. Write. The day will come to me, I just need to go along with it. Watch out for the traps, optimize this, tweak that.

My designs may look like much of my house, a mess, things strewn haphazardly in this room or that, piles of clutter here and there. As the days weeks and years go by, I’m becoming more aware of the way everything is threaded together, of how the cycles are repeating. Change this, move that. Optimize, optimize, optimize.

Another trip around the sun almost complete.

Businesses as operating systems

worm's eye-view photography of ceiling

How to automate, and eliminate, bottlenecks in your business operations

I’ve noticed a trend in tech lately, as more startups and firms begin adopting software development methodologies toward operations. It’s a useful paradigm, and one that I’m trying to implement personally and professionally in both my firm’s operations as well as those of our clients. There are some businesses that are more suited for this than others. Obviously software firms and startups trying to find traction are more likely to fit into this kind of approach, but traditional service and brick and mortar stores can see benefits from them as well, especially from a change management perspective.

Every business is a software business.

Watt’s S. Humphrey

If you haven’t realized it yet, all businesses are now software businesses. And if you haven’t, I guarantee one of your competitors has and is figuring out a way to do it. Customer’s want options, and if you’re not providing them with ways to reduce friction in their operations, then someone else is going to.

Make a decision once

In Principles, Ray Dalio writes about businesses as systems, and the importance of offloading the decision making process out of one’s heads, to series of standard operating algorithms that can be written down as a series of principles. These guides serve as a reference for future decisions, not just by yourself, but by the rest of your team, and can be invaluable for new hires. Of course this information can eventually be turned to an algorithm, and used to automate the decision-making process.

The challenge of course, is figuring out where to capture this information. If you’re not doing it personally, I recommend starting with pen and paper. Teams can use email, electronic documents, or whatever your current messaging platform, e.g. Teams, Slack, or even Discord. The important habit here is to make the decision criteria concrete, and to continually revisit these principles the next time a similar decision needs to be made. You may not be able to automate every decision in this way, but the process can serve as a filter for a majority of the decisions that come your way.

Writing down the decision making process also has another key benefit: defining your values and helping you focus on your market.

Agile Workflow

If your business is struggling to find it’s footing, either as a new venture or as a established firm that is dealing with a rapidly changing market, then you need to build, iterate, and refine, quickly. Whether that means refining your operations, or pivoting the product or service you deliver, you’ll need agility to survive.

Agile is the name given to a software management process first defined two decades ago. It uses the concepts of short sprints, usually a two to six week period, where a team focuses on delivering a particular feature, or refinement to an existing process. Agile is a contrast to the previous, waterfall style development process, which had long development times. By the time a usable prototype was delivered, the requirements might have changed considerably. Focusing on smaller chunks of time ensures that effort is not wasted on delivering services that don’t align with business objectives, and allows development teams to make sure their deliverables are in line with customer or internal requirements.

User stories

There’s another key component from Agile methodology that is extremely helpful for designing business processes and services: the user story.

One mistake often found in business is the solution in search of a problem. Tech people, myself included, have often seen a new product or tool and start trying to sell the product or process to internal or external client without having a clear idea off the use case around it. I have been particularly egregious about this in the past. During my conversations with clients, I find that while they may have a clear picture off the service that they would like or are trying to provide, they may have trouble providing a clear picture of what success looks like. They might know that they need new network infrastructure, or a web site, but their idea of what that means from a capabilities standpoint might be very different from the perspective of the team implementing it. This inevitably leads to friction, whether as scope creep, or service interruptions which impact the client.

The Agile approach to this, which I’ve begun implementing to business systems, is to focus on the user stories, and make sure that there is a clear sync between the business unit’s expectations and those of the technical team. In the case of a new project, this usually requires brainstorming to specifically flesh out the myriad ways that a deliverable will be used. For existing businesses, this may be as simple as shadowing workers to enumerate a list of their various activities through out the day. When I’m working with a client focusing on an external application, I usually ask them to start by describe the customer journey in as much detail as possible. This epic is then broken down into concrete, actionable user stories.

There are several criteria for a well-defined user story. It must focus on a specific type of user role, it must be discrete, and it must be testable. This last component is the most critical from a technical perspective. A lot of time, business goals might be defined in broad or vague language which lacks specific requirements for success. By writing your system goals down as individual, testable units, you define a way to test for success, while also providing your team with a target that can be accomplished within a short sprint time frame.

Give up the paper

Over the years, I’ve walked into too many businesses and looked with dismay on large stack of paper, whether they are service work orders, purchasing or other tracking materials. While there may be certain governmental regulatory environments that still require paper, for most commercial and consumer-based businesses, this is a sign of stagnation. It could be death knell. It’s 2020, and there is hardly a justifiable excuse for a business to generate huge volumes of paper documents as part of day to day operations. There are literally hundreds of app or software as a service (SAAS) vendors targeting most established business sectors.

The most common excuse that I hear as to why a firm hasn’t migrated their service operations or other processes to an electronic system is that it “doesn’t meet all of our needs”. This is usually used as justification to do nothing, continuing with labor-wasting inefficient duplication of work. Paper forms are scanned, copied and entered into another spreadsheet or accounting system, as employees keep up with the inefficient system. Instead of choosing a vendor that can meet a majority of their needs, they let one or two small use cases stop progress in its tracks.

Even if a business can’t find the perfect vendor or SAAS product to meet their needs, there’s no reason one can’t find ways to make smaller improvements. I find that most businesses aren’t even taking advantage of the software and vendors that they’re already using. One of the most common examples I find are Office365 Premium users who are just using it for desktop apps and email, and don’t even realize the services that they’re getting for free, like Teams, SharePoint, Planner. One of the things I’ve been focusing with my existing O365 clients is showing them how all these tools work together, and figuring out how to use Teams, Flow and PowerApps to eliminate phone and email traffic. Tools like Airtable are also fantastic, and I’m hoping to be able to build more services using the various text and voice tools available from Twilio.

Connect your services: APIs, APIs, APIs

If I had to guess, I’d say most firms currently have around a dozen different apps, vendors and services that they use on a regular basis, platforms for work and time tracking, accounting, inventory, communications, and so on. Ask yourself, how does data flow through these different systems? How is it generated? As with paper records, manual data entry from one system to another is usually cumbersome, inefficient, and most important of all, unnecessary. It can also lead to error.

selective focus photography of computer code monitor display

Enterprise firms have long relied on electronic data interchanges (EDI) to transfer structured data between partners. These days, most applications allow some soft of import/export functionality via CSV files, but a more modern approach to this is via an application programming interface, or API. The most common API protocol is called REST, and it allows you to perform create, read, update, and delete (CRUD) operations on your data. Having a full REST API available to your all of your various services not only allows them to talk to each other, but also allows you to automate the various processes that you might perform via an application’s web or graphical interface. This is one of the most powerful tools that an organization can deploy. I’ve personally been building Python modules to pull data from our various management systems, allowing me to perform status checks on systems that would otherwise require me to login to a web portal and sign in via two-factor authentication. I’ve also built a number of scripts that I use as templates for various tasks, that I do on a regular basis.

Having an API is so important these days, that it’s one of the first things that I look for when evaluating a new vendor or app for myself or a client. These days, it’s unacceptable for a vendor to lock customer data behind a walled garden, but this is still a problem with a lot of legacy applications, which may not allow the ability to perform CRUD operations on internal data.

One more thing that is worth noting is the concept of a webhook, which is the ability to send or receive a message from one system to another based on a trigger. They’re not as dynamic as REST interfaces, but they do allow a system to send a one-way message to another. A simple example of this is the ability of a shipping vendor to send a notification to a client’s chat messaging system when a delivery status has been updated.

Corporation as Artificial Intelligence

One might think of the corporation, or even small businesses, as a prototypical artificial intelligence. They both have inputs and outputs, and along the way decisions and processes are made which transform the former into the latter. The main difference between the two might be the speed and the way in which those transformations occur. The question that business leaders need to ask themselves is how that transformation is happening within their own organization. If your organization has bottlenecks due to the decision making process or manual data entry requirements, then you should start implementing some of the tactics we describe in order to automate and eliminate these barriers to growth.

If you’re not taking these steps today, then you will find your business falling further behind organizations that are. Soon, you’ll be losing your clients to them. Beyond just the internal benefits, you’ll find that your customers also want the option on how they communicate and interact with you. And if they don’t have the freedom to chose, if your business isn’t flexible enough to provide that freedom, then they’ll eventually move where they have it.


My focus as a technologist is to assess current trends in business and technology, and extrapolate out where things are headed in the next five to ten years. My goal as your outside technology officer is to make sure that you not only have the tools to succeed today, but help provide the long term vision to get to where you need to be tomorrow. If you’d like help assessing your current operations or would like to discuss things further, please drop me a line.

Phase transition from a zombie state

It’s a beautiful Saturday morning here. I’m bringing the girls over to their grandmothers later today, which will mean the first time the house has been free of the kids in six weeks. I don’t even know what my wife and I will do with ourselves.

I’ve got one more task to finish college, a how to guide for faculty and students on how to use GitLab for note sharing. Should take me a couple hours of writing, tops. Then I’m done. I already got my grade for the group project class, an A, and I turned in my assignments and exam for my numerical methods class last night. That project is definitely going on my resume/portfolio site, and will probably get a full write up at some point. The only problem with it is that it can’t compile in CodeBlocks, so I’ll probably get 50% on it. I may muck around later and see if I can get it to compile via GitLab. The professor is likely grading on a super steep curve, so I shouldn’t really worry about it. There’s no doubt that I’ll pass, the question is whether I get a C or an A. After all the work I did compiling class materials into the GitLab wiki, I’ll be disappointed with anything less than a A.

However it goes, I should wind up with at least a 3.5 GPA. Six years of classes, part time, while holding down a job, raising two kids, and running two political campaigns. I sure am proud of myself. Now if I could just bring myself to take one of these $80,000 year jobs that I see listed on LinkedIn. I’m going to finish updating my resume, put it up on the new CV site that I built, and start applying to anything with the salary disclosed. We’ll see who bites. Of course, there’s the $60,000 in student loans that I’ve got to deal with.

Ideally, I’d like to stay where I am, and use my spare time to work on open source and entrepreneurial projects. I want to get the GBTC Estimator upgraded to a GBTC trader, and see if there’s any income to be generated there. I’d like to complete the Safe.Trade integration into CCXT. I’ve got the medical transportation company that I want to build a Django app for, and I’ve got another opportunity with a new friend who is very entrepreneurial. Other than that, I just plan on crawling the boards on AngelList and other local startup boards to see where I can join on as technical adviser.

Of course, all that goes out the door if I lose my job. I’m not sure how bad the situation is at work, since my boss doesn’t share anything other than “we need money”, and we haven’t brought on a new client in close to a year. We had a discussion about taking on software development work, but all I got was push back. He tells the team to “go out and sell”, and we’re all like “mhmmm”, but that’s all it amounts to. I’d just rather he furlough us all at this point.

I’d rather not turn this post into an obit for the company, but it’s been a zombie for some time. It’s like we’ve got just enough clientele to keep things from sinking completely, but not enough to grow. Which means of course, that it’s going to die, probably as soon as I leave. I told my boss that I wouldn’t abandon him after graduation, but I’ve been trying to lead and direct the company to where we need to be, and have been ignored too many times.

We currently have a client in the service industry which relies a lot on manual paper processes and third party vendors to manage their work order and invoices. I consulted them nine months or so ago about migrating their workflows to Microsoft Forms, Flow, and SharePoint Online. There was a lot of excitement and head-nodding, but nothing has come from it. Instead, one of their employees has been learning Django and building a pricing calculator. I got mad respect for them, and have been shooting the breeze with him about, making recommendations and the like. Now, however, it’s getting to the point where they’re asking questions about how to deploy this app, and I’m at a limit as to what I can do in a non-professional capacity. We decided to table discussions till next week.

One of the problems that I’m running into is around making this phase transition from one career to another. The crux of the problem is related to the difference between understanding something from a theoretical standpoint to actually having done that thing. Past performance, if you will. I ran into a concrete example of this the other day. We, Zombie, Inc., that is, had an opportunity with a prospect that needed a website update. They were using WordPress, and we identified a potential vulnerability via a web scan. The site template was very rough, and needed to be brought up to a more current aesthetic. The problem was that while I have plenty of experience managing WP sites, I have no portfolio of sites that I’ve built. And Zombie has zero performance that they can point to. So of course, nothing has come from it.

It seems the cure for this problem is just to do stuff for free, and then try to recoup payment for it on the back end. I think Tim Ferriss has an example from his life, back in the 90’s, where he would find businesses without an online presence, build pages for them and then approach them afterward to try and sell it. There’s similar examples, but they all depend on having the time to do the work up front.

That’s basically where I find myself right now. The “clients” that I have right now are little more than experiments to see if I can make a decent side hustle doing site management and consulting work. Monday, after I have put the final nail in my undergraduate degree, I will contact Zombie’s client and craft some sort of consulting deal that will benefit all three of us.

Underpromise, but overdeliver

Yesterday we gave the final demo of our two-semester professional workforce development project. It did not go well. We had fifty minutes to present, but our demo only took about five. One of the professors, who had been receptive of our pitch last semester, was very disappointed. We basically failed to deliver. I was defensive, and tried not to make excuses cause she was totally correct.

During the last few weeks of this semester, we were more focused on what was right in front of us than on the big picture that we had promised last semester. And by that I mean technical issues. As system architect I was more focused on getting the architectural components up and running than I was on whatever particular use case this person was expecting to see. So in that sense, yes, we failed.

There were a number of roadblocks that we had to overcome. Our team was made up of six members, two of which were complete dead weight. Another member had issues with her local development machine and was unable to contribute directly to the source code. This was fine, as this was a writing intensive course and there were several written deliverables, including specifications and testing plans. So we basically split the work: I lead the technical development and contributed to the written work as needed, but pretty much left management of the final written work to others on the team.

We relied heavily on Cookiecutter Django for our base deployment. In the long run, this was probably the way to go versus using vanilla Django, or another framework like Flask, but it hurt us in the short term. No one on the team besides myself was familiar with it, although I don’t think we could have avoided that with another solution. We wound up spending an inordinate amount of time trying to get the others on the team up to speed on deploying it via Docker and managing that through various IDEs. I spent a lot of time mentoring the two teammates who were assisting with actual code commits. And it had been so long since I had worked on Django that I had to relearn its model-view-template architecture all over again.

And this is where using Cookiecutter really slowed us down. The package implements several best practices on top of Django: overriding the default user model, implementing updated authentication forms, even deploying a Traefik load balancer on top of the production web server. All of these slowed us down.

In all, we spent less than forty five days doing actual development work on the project. That was following more than thirty days trying to get the framework up and running between local and production environments. The semester was actually focused more on the written deliverables and put off actual development work till the last half of the semester. In retrospect, holding to this schedule was a mistake, and it was probably a bit of hubris on my part not to start work a bit earlier.

We got an email from our instructor this morning:

“From a development (i.e., architecture, tool, collaboration, and project) standpoint your team has met all the requirements for the course. While your demo was less “interface oriented” than the other groups the evaluators referenced, the foundation of your prototype is more substantial. It was clear to me that there was a bias during the evaluation based on discussions that occurred […] last semester. Keep in mind that I have been equally critical of groups in the past (albeit in a less heavy-handed fashion). Your group as a whole should not worry about failing the course.”

So maybe I’ve been a little hard on myself, but I think it more likely that they were as much invested in our project as we were. Obviously there’s some University politics at play there.

So the question is, what comes next? We had hoped to pursue a grant to continue working on this project on behalf of the university post-graduation, but given the tepid response from the skeptical evaluator, I don’t see that as forthcoming without many additional changes. I’ve broached the subject with my other teammates, and I’m not sure there’s any desire to continue forward with that. Maybe after the semester is over. I still have two more classes to complete, and others have a full case load. At least one of them has taken a job, so it may just come down to me and one other person.

All in all, I know the experience was a positive one for me. I know that learning GitLab, Docker and Django for app deployment will come in handy in future projects. And we’ll just have to see if any of the relationships with the team members will last past this semester. Any decision about the future of our project will be on hold for now.

WordPress moban.html hack

So I just finished cleaning up one of the WordPress sites that I manage from a hack. I was checking Google Analytics and noticed a few irregularities. The first was a number of hits from China, and then noticed some URLs in the site description that didn’t belong there.

I checked the first URL and yep, we have a hack. I logged into the WP dashboard and immediately found two admin users. I did not find the urls in posts or pages, which was odd, so I started scrubbing the site. I found that I was locked out of several administrator functions, such as updating WordPress or installing new plugins. Thankfully, I was able to deploy them through Infinite WordPress. I ran several scans to check for modifications to the wp-admin directories, and even deleted them and uploaded them from a fresh download of WordPress over FTP.

I found several directories that were out of place: developerl, openbayl, and webstruct. The latter was filled with XML documents, some sort of sitemap:

<?xml version="1.0" encoding="UTF-8" ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
     <url>
			 <loc>http://<my_hacked_site></loc> 
			 <lastmod>2020-04-07T10:13:06-05:00</lastmod> 
			 <changefreq>always</changefreq> 
			 <priority>1.0</priority> 
			 </url>
		     <url>
					 <loc>http://<my_hacked_site>/46/Auto-34cm-2-Meter-Kabel-C16620-Aerzetix-Radio/</loc> 
					 <lastmod>2020-04-07T10:13:06-05:00</lastmod>   
					 <changefreq>daily</changefreq> 
					 <priority>0.9</priority> 
					 </url>
				     <url>
					 <loc>http://<my_hacked_site>/141/35-mm-KlinkenStecker-und-Adapter-Handy-25-mm-Stecker-iPad-MP3Player/</loc> 
					 <lastmod>2020-04-07T10:13:06-05:00</lastmod>   
					 <changefreq>daily</changefreq> 
					 <priority>0.9</priority> 
					 </url>
				     <url>

The openbayl directory contained a moban.html file that contained some sort of HTML template, and the developerl directory seems to have the core part of the hack. It includes another moban.html file that contains a bastardized copy of the sites WordPress headers and footers, and some mangled content that appears to be scraped from the site as well. There was some sort of encoded key in a logs.txt file, and a map.log file pointing to the webstruct xml files. I’ve uploaded this file as a gist.

I downloaded a copy of these files, then deleted them from the site. After running security scans and looking for any additional files that didn’t belong, I was still locked out of installing plugins. I started pouring through the SQL data, looking for what happened. I checked the .htaccess file for any shenanigans, and disabled all plugins. My user appeared to have admin access in the database, and I verified that the administrator role had the install_plugin role in the wp_options wp_user_roles row. But when I added a PHP check in the site files, I didn’t have the role.

I had spent almost two hours digging through this. I had identified the time of the hack, and thankfully, I had a backup from the night before. I restored it, and functionality was back to normal.

I’m troubled that I don’t know how the hack occured. Everything was reasonably up to date. We were behind on a WordPress update, 5.3.x to 5.4, but I’m not aware of any vulnerabilities that would have allowed us to be hacked. Regardless, I took additional steps after restoring the site, including installing Sucuri Security and NinjaScanner. I’m also going to be deploying them on all sites under management.

GBTC Estimator Update

I spent some time this weekend working on my GBTC price predictor. The original idea behind this tool is to take the price action of BTC while the market is closed and use it to predict what will happen to the price of GBTC after the market opens. The original implementation uses the last close price of GBTC, and the price of BTC at the same time, then calculates the premium. It then retrieves the current price of BTC, then uses the calculated premium to determine what the current price of GBTC should be. It’s rather rudimentary, but serves as a quick and dirty calculator.

My hunch is that there are huge arbitrage opportunities to be found within the price action, especially when there are big moves in BTC’s price action. The big unknown, however, is the GBTC premium. The actual underlying value of a GBTC share is 0.009BTC, but the actual trading price fluctuates around 0.0012, so there’s some possibility to take advantage of this spread. We’re talking about the possibility of potential dollars in share price.

GBTC premium. NAV is <0.0009.

For example this morning, our calculation, based on the price of BTC at $7157, is that GBTC should be at $7.98-8.01 range. Here’s the current premarket spread.

The 7.82 bid order was quantity 800 about half an hour before open. Here’s the chart about five minutes after open.

The difficulty that we’re facing right now is matching the price action between the equity, GBTC, and the underlying crypto, BTC. For our inital purposes, it was enough to use the daily OHLCV data for the equity, and hourly data for the crypto. We only needed to track the crypto price at market close to get our initial premium value. But to do a proper arbitrage bot, we’ll need minute-by-minute data. This presents problems, since all of our work through the TDAmeritrade API has been via the REST API, and this work will involve streaming data via websockets, and likely some async programming.

It would be nice to be able to see the intraday price action of the GBTC premium. Right now our free-tier TradingView account only gives us the daily interval, so being able to chart this ourselves is one of our priority. From there we can calculate some sort of moving average and standard deviation to determine when a price is out of band, and represents an arbitrage opportunity. It might be possible to configure something similar with TradingView, but since they don’t support TDA brokerages, we would be subject to a fifteen minute delay on the GBTC data. There’s also the cost factor. As an OTC listing, GBTC trades still have fees associated with them, so any arbitrage situations will have to be large enough to offset the trade.

I’ve got lots of changes that I need to make to the code; right now I’m running into some testing issues related to monkeypatching out the API calls. I’m planning on doing some real time charting using the Bokeh library, and this will have it’s own set of issues, I’m sure.

Alienware m15 slow resume fix with TLP

I’m happy to report that I finally got my new Alienware m15 properly configured. I got it through work via the Dell Outlet, and immediately wiped Windows off of it and installed Ubuntu. There were some issues. The unit shipped with a 256GB M2 drive and a 1TB hybrid. The 1TB was set as the primary drive, so I had to mess with UEFI/Secure boot to get it installed. However the main problem I had was with the power and sleep/hibernation functions.

The main annoyance was that opening the lid to resume the unit from sleep took upwards of half a minute to do anything. I tried a multitude of APCI settings in grub, poured through logs and updated to Ubunutu 19 with no fix, and had finally resigned to the issue.

This was especially frustrating since the unit this machine was obstensibly replacing, a seven year old Dell Latitude, had almost identical hardware and had no problems with the power — although it did have lockup issues related to running Windows in VMM….

This Alienware is quite the power hog, as the battery would only last about an hour on max charge. Again, quite frustrating given that my Latitude can easily get three hours or more. In installed prime-select to disable the GPU, but it didn’t seem to help. Then a few days ago as I was typing with it on my lap, I decided to do something about the intense heat coming from the metal heat grate on the bottom that had been toasting my legs. So installed the tlp advanced power management package. I saw a dramatic decrease in heat and fan activity, and was pleasantly surprised the next time I opened the unit and saw the lock screen almost immediately. Problem solved!

It’s only moderately improved the battery life though, maxing out around an hour and a half. I may experiment and pull the hybrid drive out to see if that is the culprit. I figure the 9th gen i7 should be more efficient that my older one, and with the same screen size there isn’t any other component that could be sucking the battery down like this.

Ultimately the issue is Dell’s lack of support for Linux. If I was going to recommend a laptop for a *nix user I would probably shy away from recommending Dell. They have dabbled with Ubuntu support in the past, and still may do so for their enterprise server lines, but you’re pretty much on your own if you’re using a desktop or laptop. That said, I haven’t run into many problems with the few deployments I’ve done. My old, old Latitude that I’ve given to my oldest works great, but I would probably go with a brand that is dedicated to supporting Linux if I was going to buy something out of my own pocket.

Hopefully this post will help someone experiencing similar problems. If so, please drop a line in the comments to let me know. Thanks!

Software craftsmanship

My latest commit on a Python TDAmeritrade API wrapper.

That purple MERGED button gives me one of the most satisfying feelings imaginable. As someone who’s been playing with code for well over three decades, seeing my contributions made part of a project that others and myself use brings me a lot of joy.

I’ve always enjoyed learning how to make computers do things, from the time I was four or five and playing video games on my dad’s IBM PC/2. When I was in fourth grade we did some computer labs with BASIC, and just something like creating an infinite PRINT loop was a great source of amusement. The advent of the web brought HTML, CSS and Javascript skills, tinkering with WordPress, Wikis, and other open source projects taught me PHP. There was a problem though.

All of my dabbling was just playing upon the surface of a giant pond. The more I experimented, the more I realized that I was missing something, conceptually. I started getting stuck. My projects would eventually get too big to work, to complex for me to refactor. I became discouraged, and kept to support roles, helping end users and building and deploying business networks.

Twenty plus years of being “the computer guy” will take a toll on anyone. I suffered from the symptoms of burnout without recognizing the cause. I began to feel a sort of contempt for the people who I was supposed to be helping. It became harder for me to exercise the type of patience needed to deal with older people, unaccustomed as someone my age or younger is to technology. And it became harder for me to maintain the demeanor needed for someone in that role. So I started checking out, and saying no.

It was frustration that drove me back to school. The realization that my self-paced learning had hit a wall, and that I needed some help to get to the next level if my skills were ever to match my ambitions. The other part was seeing job applications with degree requirements, and being unable to get callbacks for the jobs that I wanted. Now, I realize that a lot of it was the lack of challenge. Looking back, I think I had probably grown a bit complacent, arrogant even, unhappy with the direction my career was going, and unchallenged in the ways that I needed.

So the past few years of school has been very fulfilling. The curriculum wasn’t quite what I expected, or as comprehensive as what I think is needed in today’s IT world, but I’ve managed to run with it. Despite starting numerous projects over the past few years, I still haven’t delivered anything that I would consider finished, but the programs I’m building now are a step up from the things I was making a few years ago.

Programming is ultimately a creative art. Having abandoned my musical aspirations several years ago in favor of job stability, perhaps I’ve been craving that outlet in a way that hasn’t been fulfilled. And building software systems, or as in the case above, contributing to an existing project, making it a little bit better, commit by commit, gives me the same sense of craftsmanship that songwriting did.

Automated IT support system

Pulling together a franchise system

I’ve been reading The 10% Entrepreneur, and The Future is Faster Than You Think in bed the past few nights, hoping that it’ll prime my brain to come up with ideas for me to take in the next step in my career. I’m not going to share the crazy dreams I had last night, but I will share this idea, mostly for me to mull on and come back to in a few months.

This idea is for a IT support communications app utilizing voice and chat, with a little bit of AI thrown in for speech recognition.

The problem: I work for an MSP, and over time a number of customers have gotten ahold of my personal cell phone. This is bad. We have several endpoints, if you will, for clients to contact us: an official office number, which is routed to an answering service, a support email, which goes to our ticketing system; and a support desk number, which goes to our helpdesk partner. We have no texting capability.

The catalyst: During a client network outage, I called their ISP, and the hold message said that I could text an agent at a certain shortcode. I quickly hung up and texted the number, then proceeded to deal with the issue, asynchronously. I thought that it would be a powerful tool for us to use if we had similar agent capabilites.

I’ve done a bit of tinkering with Twilio’s platform, having used it experimentally during a few political campaigns. Their Flex platform is geared toward call centers and support agents, and all of their services have APIs, allowing it to be connected to other systems. (This interview with their CEO is enlightening.)

Solution: Build out a phone/text response tree and use it to replace our answering service with speech to text message relay, and also provide text messaging capabilities for clients as well. There are a number of ways to integrate this with our legacy ticketing system API for ticket creation, or, for ticketing creation and status changes in the other direction.


There’s another opportunity here as well. The firm I work for is a franchise, and there is so much redundancy built into the business model. Every independent franchisee has their own instance of our ticketing system, and has to hire or train their own resources to work with all of our different vendors: our RMM, PSA partners, cloud services (e.g. O365 various services), disaster recovery/business continuity, and so on. I don’t even want to try and count the number of vendors that I have to deal with. Personally, I’m well suited to this type of jack-of-all-trades position, but I’m at the point now where I brisk at having to learn or deal with some new system that doesn’t have APIs or programmatical interfaces. And through my interactions with other franchisees and techs in our Slack, I can tell that some of them are less than capable of handling some of these projects.

The onboarding process for our location was very difficult. We were pretty much handed some tools and left to figure them out for ourselves. There’s been some improvements in how this is handled more recently, but one of our vendor onboarding documents was near fifty pages of step-by-step instructions and screenshots.

I’ve tried to set up some automations internally, and tried to get traction among the other franchisees, but the appetite just doesn’t seem to be there. I just don’t think the owner community is really thinking along the same lines as me, and this is one of the main reasons why I don’t think the firm is a good fit for me any longer. I approached one of the home office leaders about using some of the API work I’m doing to do some cross-franchise data mining, and got dismissed out of hand.

I think there’s a huge opportunity to consolidate some of these roles and operations across the franchise system. In fact, I think that it’s the only way that some of the smaller franchises are going to survive. That said, I think the way the business model works, and the way the franchise system has been sold to the franchisees will allow these improvements to be made.

The system I’ve described above should allow multiple franchise locations to share the same dispatching and messaging contacts, and allow messages to be routed to the proper client owner. I will share this idea within the global group, to see if anyone is interested funding development of such a system.

Will Open Source Save The World?

The technocratic response to the global pandemic

The West Coast was one of the first areas hit by COVID-19, and the response from the tech world, accustomed to exponential growth and network effects, quickly understood the ramifications of the disease. And while the CDC, decimated by Trump’s cuts and sycophantic staffing decisions, was unable and unwilling to prepare American’s for the reality of what was to come, the tech world acted quickly, cancelling conferences and gatherings to help slow the spread. Now, a week after President Trump has been forced to acknowledge the threat, as colleges, public schools, and states have begun shutting down operations, the tech world has come together to fill the role that the Federal government is unable to do.

Telework/Distance Learning

As soon as conferences were cancelled they began moving online, and many companies immediately began stepping up to offer services. Discord upped the caps on their new video streaming services from ten user to fifty. LogMeIn offered free licenses to education and non-profits. And many flocked to Zoom, which was able to stay up and running despite the rush of traffic to it.

Class Dojo and Khans Academy have been waiting for this moment for some time. My daughter’s public school system is using Class Dojo for their lesson planning, and while I’ve used Khans Academy both for myself and my oldest, their kids app, geared toward two to five year-old children, really shines. Both are free.

One college administrator noted that well over a dozen remote education companies reached out to him for assistance transitioning their curriculum over to the internet. While he noted that this showed that capitalism was “alive and well”, I couldn’t help but note that it smacked of opportunism. No doubt many vendors are falling all over themselves right now, trying to position themselves as the trusted partner for these schools for whatever comes after the pandemic.

EndCoronavirus.com

Information coming from medical professionals in hard-hit countries like Italy are exposing the unpreparedness of facilities over there. American experts are likewise looking at our capacity and warning that hospitals will be overrun unless we take steps to distance ourselves and slow the spread of the disease. Besides the lack of ICU beds available, the one piece of equipment most needed to save lives are ventilators.

Bruce Fenton put the call a few days ago for engineers and other medical professionals to come together with the goal of designing a ventilator that can be created from off the shelf or 3D printed parts. The goal here being to build a design that can be ramped up and quickly deployed outside the existing supply chain. It got my attention, and I joined their Slack last night. I was amazed at what I saw.

At EndCoronaVirus.org, over eighteen hundred volunteers have joined and are quickly ramping up projects to help with dozens of projects to help with the COVID-19 response. There are number of infection trackers and best practice information sites being spun up, with web developers, cloud infrastructure and network security engineers coordinating. They’re having daily stand up calls across continents to for communications. Social media teams are springing up to help spread the word. There are outreach channels for certain regions, and fundraising efforts. It is quickly becoming a valuable source for information during this crisis, and watching the conversation going on there happen in real time is fascinating.

Helpful-Engineers

This group predates the pandemic, and has quickly pivoted to help with the response. There’s ventilator work happening here through Project Open Air, and there’s already some coordination between this group and the EndCoronavirus teams. There’s over seven thousand people in their Slack. This Github repo has a list of project proposals they’re trying to get off the ground if you would like to get involved.

The technocratic solution to governmental failure

Now I am the last person that would parrot the line that private enterprise, or markets, are best handled to respond to any societal need. That said, I do think that our government bureaucracy is ill suited to dealing with the challenges that we face as a global society. The American legislative system, which is in dire need of an update from its eighteenth-century origins, has proven inadequate for twenty-first-century problems. Some state legislatures are even worse. As someone who is intimately familiar with the inability of laws to keep pace with technology, I have long wondered whether to give up on the political process altogether and focus on tech and entrepreneurial efforts to enact change.

As someone whose livelihood depends on tech, and keeping ahead of trends in the market, I keep a close eye on what technologists and futurists predict. I’m currently reading The Future is Faster Than You Think from Singularity University co-founder Peter Diamandis and Steven Kotler. Several of the industries that they look at in the book include the education and healthcare systems, and the role of remote work and telepresence weighs is a prominent one in these changes. The Coronavirus has accelerated this process, and is forcing organizations to deploy this technology, quickly.

The type of rapid organizational response being deployed by the EndCoronaVirus team right now, however, showcases the type of rapid response that tech can deploy, that government can only dream about. This deployment of engineers and other professionals from across the globe, coming together to help fight this global health crisis, is inspiring, and I encourage anyone who has even the slightest interest in getting involved to join them and figure out how you can get involved.

It’s too early to tell whether EndCoronaVirus will save the world, but they’re already proving that the tech world is ready to help.