Management and supervision Trades

Labor is not a fungible commodity

I’m Jason Firth.

There’s a statement that I’ve said on a large number of occasions, basically that labor is not a fungible commodity.

To understand what I mean by this, first we need to go to the definition of a fungible commodity. A commodity that is fungible is a commodity that is basically interchangeable. If you buy a block of gold, you don’t really care if it was Canadian gold or us gold or Chinese gold, the gold is gold. As long as the quality is what it says it is, you’re good. There are a lot of quantities that are fungible like this. Generally speaking, oil of a certain grade is going to be fungible. Wheat could be fungible. Canola oil could be fungible. There might be specific boutique applications where you absolutely want to have a certain country or a certain companies product, but in the overwhelming majority of cases, as long as you have the product you have the product and it doesn’t really matter where it came from.

Now let’s take a look at labor. You could get 100 people, and every one of them is going to be different. Most of them probably aren’t even going to be good at the thing that you want them to be good at, but let’s pretend for a minute that of those 100 people you have 100 instrument techs. Let’s even go so far as to say that they are 100 very good instrument techs. You’re going to have 100 completely different skill sets. In a broad sense, perhaps you’re going to have some people who are better at construction, perhaps you’re going to have some people that are better at maintenance, perhaps you’re going to have some people that are better at the programming side of things, perhaps you’re going to have some people that are better at the design side of things, instrumentation and process control are such broad categories that even if you take 100 really good people you’re going to end up with 100 completely different skill sets.

This is very important for a number of reasons, but one of the biggest reasons is that you cannot plan as if labor is a fungible quantity. If you simply think that you will throw hours of work at a problem I’m afraid you’re in for a rude awakening. If for example, you give a programming job to somebody who’s an old school instrument tech, it’s very likely that that old school instrument tech is used to turning a screwdriver and pulling on a wrench and rebuilding control valves, and they might be very very good, and they are going to struggle a lot on a programming job. If by contrast, you take one of the new breed of very technical high technology instrument techs and give them a sea can full of control valves to rebuild, there’s a good chance that they’re going to struggle with that.

Besides that, the level of planning that you need for an individual may be different. There are some people where in order to properly plan a job you need to go through every step, provide every drawing, provide every data sheet, kit every single tool. On the other hand, there are other people where for the same job you can give them very little and they’re going to be more successful than if you had tried to micromanage them. Having an idea of who’s going to be doing the job when you’re planning a job is quite important.

If you are dealing with a team that you intend to be working for a long time with, there is a little bit of wiggle room. Just because your old school instrument Tech would prefer working on control valves doesn’t mean that he can’t be trained, and just because your new school technologist would prefer to be working on a computer doesn’t mean that he can’t be trained to rebuild control valves. In fact, I would argue that over a long-term this is an ideal strategy.

Regardless, it’s quite important to realize that labor is not a fungible commodity, that you can’t just throw hours at a problem and expect to have the job done the same way, that not all skill sets are the same, that planning requirements are going to be different, and that long-term training can help people who aren’t good at one thing become much better at that thing so that you can end up with a better balance team. These are all things to keep in mind.

Thanks for reading!

Site News

Another new back-end software product

I’m Jason Firth.

Well, 2021 is coming to an end, and while I haven’t updated the blog with much other than a few technical projects I’ve been working on. Part of the reason for this is that being in supervision there’s a lot of work and a lot of stuff I can’t really share, but the other major thing is just that the aging blogging software I keep using is holding me back.

In 2021, I wrote a book, got it published, created a social media network, a video hosting service, a search engine, and much more, and it really made me realize how important modern tools are. So I’ve moved to a newer platform on a highly upgraded server, and I’m hoping to get the ActivityPub plugin working.

ActivityPub is a protocol for sharing messages between websites. In my opinion, it’s our only option right now for getting away from big tech and towards a Free Internet. That’s why I’ve started to go through the pain period of making the new site and getting it all working.

Most of the old articles are on here, and in some cases I was even able to add corrupted elements that didn’t work on the old site. Obviously one problem is that they all think they were posted today, but I’m willing to take what I can get.

Looking forward to more productive writing in 2022, and now that my book is completed, I’m hoping I can focus a bit more on producing content for this blog.

Thanks for reading!

Industrial IT

A short one — Getting the Nvidia Geforce GT 720M graphics chip on a Dell Latitude E5440 running under Ubuntu Linux 21.04

I’m Jason Firth.

Sometimes it’s a real struggle going through and trying to find out how to do something, and when you find a simple answer you just wish someone else had written it down.

I have a Dell Latitude E5440 I got off of eBay. Great little machine. It has a decent screen for the era, 8GB of DDR3 memory, I put a 512GB SATA SSD into it, I really like this little thing! I initially installed Windows 10 on it, but I wasn’t happy with how it ran. It just didn’t quite seem like the machine it was, so I kept moving.

I eventually decided to put Ubuntu Linux 21.04 onto it, since that more or less met my use case.

The problem I had is that the Geforce GT 720M is a really strange model. Even trying to get drivers for Windows 10 was challenging, and that’s rarely a problem!

Normally in Ubuntu, you’ll just go to the driver manager, and then go to “additional drivers”, and any proprietary devices will be shown. Unfortunately, the Geforce GT 720M was not shown on this window.

I tried a few different things, including the bumblebee optimus program, but I didn’t want to run certain programs using the Geforce, I wanted to run all my programs including compositing using the Geforce.

Finally, I found the solution!

First, I had to get rid of the nouveau open source video driver

sudo apt-get purge xserver-xorg-video-nouveau

Second, I ran an autoremove just to clean things up.

apt autoremove

Finally, I had to install the 390 series driver. This particular version is important because the 720M is actually a 600 series card.

install nvidia-driver-390

After a quick reboot, I didn’t immediately see a difference, but there was now an nvidia X Server settings item in my menu. Going into it, I was able to select “performance mode (nvidia)” which ensures the discrete GPU is always doing the heavy lifting when displaying graphics.

I don’t think a lot of people have Dell Latitude E5440s running a Geforce GT 720M discrete graphics chip, so there weren’t a lot of clues about where to start. Hopefully from now on people searching for the solution to this problem can find the solution in this post.

Thanks for reading!

Site News

Workmanship matters

As I’ve documented previously, I moved this website from a third party host to hosting it from my own ‘datacenter’. For a while, said ‘datacenter’ consisted of a bunch of computers sitting in my spare room on the floor, but I wanted to clean things up and make it a bit more permanent, since I intend to just let them sit and run for a very long time, hence getting fanless PCs (and two of the machines don’t have a single moving part)

I would have preferred to use slotted tray such as the kind available from panduit, but I was limited to what I could find from home depot, so I used stickybacks and ty-wraps and hid the complexity with an extra little board. I’m very happy with the results, and it’s something that doesn’t look bad on the wall. Even better, these computers really are meant to be mounted vertically, so I immediately got a 10+ degree celsius temperature drop.

In the field, neat installations are very important. A neat installation is more likely to stand the test of time, and the extra thought you put into workmanship will translate to a more robust final product most times. This home installation took a bit more time and money to complete, but it’s working better than ever and there’s a lot fewer ways it can be damaged than if I let everything be loose.

Thanks for reading!

Industrial IT

Installing ubuntu on a chromebook c201p

how to get ubuntu running on an asus chromebook c201p

I’m Jason Firth.

My dad is starting to enjoy chromebooks, he’s been playing with them for a couple years, and so he had an Asus Chromebook C201p kicking around. He said to me “Play around with it, maybe you can get full blown linux installed on it!”

I was able to get libreboot installed fairly easily following the instructions I found here. Once that was done, I spent a long time fidlding around trying to get everything working, and it wasn’t easy.

The problem I’ve been having is that the most commonly available install is based on a totally free kernel that doesn’t support wifi. the only other image I could find supported wifi with an older kernel with non-free elements, but I couldn’t get the software I wanted running. I think I’ve found a decent compromise for now, so I wanted to share the compromise with everyone.

So to start with, you’ll want to set up libreboot using the above. The scariest part of that is opening up the case to remove the write protect screw.

Once you’ve got that, you can now boot off of a USB memory stick by pressing CTRL-U at bootup.

To create the memory stick, you’ll need the following:

Win32 disk imager utility

The USB memory stick image

You use the imager utility to write the USB memory stick image.

You might want to make a backup of everything on the device before you continue. I think you can use the dd utility to do that, but frankly I made the mistake of not doing that step so I can’t tell you how to do it.

Once you have your backup, boot up onto the USB memory stick you created. It’s going to keep showing different boot messages after it shows the login prompt so you might not recognise it. you can just enter the username and password regardless.

the username is root the password is toor 

This copy of ubuntu is 18.04, which is supported for several years after the writing of this article. I tried later versions but it started to mess up.

This seemed to give me the ability to run X11, as well as wifi you could control from x11, and overall a decent experience. I wasn’t able to get sound working, but I believe that the drivers do work and there’s just a volume thing to fix. At least this will bring your system up to a point that you can work on the system from the system.

To install to the internal mmc, I did the following:

  1. I ran fdisk on /dev/mmcblk0 and erased all the partitions, then created a 32MB partition at the beginning of the drive and a second partition making up the rest of the drive. The first partition needs the partition type of 65 to be the chrome boot partition.
  2. I ran:
dd if=/dev/sda1 of=if/dev/mmcblk0p1

to copy the boot partition from the USB stick to the chromebook.

3. I ran the following commands to create a filesystem, mount it, and copy the contents of the system running on the USB stick to the mmc:

mkfs -t ext4 /dev/mmcblk0p2

mount /dev/mmcblk0p2 /mnt

rsync -aAXv / --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /mnt

You can now reboot and should boot into the linux system now installed on your internal mmc.

once you’re logged in, you’ll probably want to set up some basic wifi.


wpa_passphrase [SSID name] [SSID Passcode] > ./wpa_supplicant.conf

wpa_supplicant -B -c ./wpa_supplicant.conf -i wlan0

dhclient wlan0

You can run apt update to make sure you’re working with the latest files, then you can do a few things to help make your setup more secure.

  1. passwd to set the root password
  2. adduser [username] to create a user
  3. nano /etc/sudoers to add your new user to the sudoers file

Now when you log in next time you can log in as a normal user and elevate privileges if neccessary.

Now it’s time to install a full desktop environment.

you can run apt install lubuntu-desktop to install an lxde based desktop, kubuntu-desktop to install a kde based desktop, xubuntu-desktop to install an xfde based desktop, or ubuntu-desktop for a gnome based desktop.

Once the install is complete, run reboot to reboot. You should now see a graphical login, and the system should operate like a normal ubuntu desktop, albeit one without 3d acceleration.

I hope this helps for anyone who was like me and looking for some help setting up an asus c201p chromebook to run a full powered version of linux while using the internal wifi and being able to run most standard software. I’m lucky there were a lot of people doing good work elsewhere to help me get to this point. If I manage to get a more up to date version of linux installed, and especially if I manage to compile a fully featured kernel that’s newer than the ancient 3.14 version included in this image, I’ll make another post.

I don’t want to misrepresent, this seems to be functional at this point but all it takes is one wrong update to blow things out of the water, and it’s still missing some key features that should be functional.

thanks for reading!

3d printing

Tevo Tornado – updated configuration for Duet firmware v3 series

I’m Jason Firth.

One of the most popular pages of all time on this site is where I connected my Tevo Tornado to a DuetWifi. I’ve been using that 3d printer routinely for years since I put it together, and it’s been rock solid.

That being said, one thing I believe strongly in is running the latest version of software. You never know when you’re going to run into a bug that has been solved years ago, or you’ll need to solve a problem and nobody else can help with your ancient copy of the program.

This year, the duet firmware had a major upgrade from the version 2 series to version 3. The new version has some major changes. Where Version 2 used input and output numbers, version 3 uses specific i/o names. It’s just slightly different.

As a result, you can’t just move to the new version of the firmware and expect it to work, the configuration needs to be modified to deal with the changes to the i/o addressing.

After waiting way too long, I finally got around to making the modifications and testing them. I was able to get the printer back up and running!

When you’re upgrading the firmware from here you will need to do the upgrade in 2 steps: First, you need to install the 3.0 revision to bring your machine to the latest. Next, you need to install the latest 3.x series firmware.

Here is the config.json you can load into the reprapfirmware configurator.I recommend using this with the reprapfirmware configurator to configure anything specific to your unit.

Here’s the final configuration. You’ll probably want to change the wifi parameters before uploading it to your printer if you drop it in directly!

Thanks for reading!

Site News

Fanless PCs, the latest rings in this tree

I’m Jason Firth.

I’m never a fan of when the website is down in spite of the fairly small number of readers (hi everyone!), but I have wanted to make a change for quite some time.

In a previous entry, I talked about migrating from from my previous hosting provider. Godaddy was a decent host, but they made some changes that stopped this blog from operating properly, so eventually I switched. I didn’t really want to go with a third party host, but after fighting with trying to get a port opened to the outside world, I decided it was safest to do so. At the same time I started playing with Nextcloud, a service that’s sort of like a self-service google cloud. I really like nextcloud, and every few months I see it get better and better.

Unfortunately, nextcloud isn’t a small or simple program, and eventually the hosting company got upset with me for using to much resources on their servers. They offered me to pay a large sum for their top plan, but I wasn’t really feeling warm and fuzzy about third party hosting — who was to say they wouldn’t take the money and still be upset with me for using too many resources? Besides that, there were things I wanted to do that I’d want direct control to accomplish, so I decided to run my own server. In my experience, fans are the #1 most likely cause of failure on a PC, so I decided my websites would run on a fanless PC. I found a fantastic deal on an NDIS 163 fanless sign PC. The specifications of the PC are right on track with what I was looking for: a Core 2 Duo low energy CPU, and a SATA hard drive. It came with a Crucial MX500 SSD, but I wanted to use a spinning hard drive for this server because in my experience spinning hard disks are still the most reliable choice for long-term storage.

I looked inside at the box, and found some standard DDR-3 memory slots, a couple mini pci-e card slots for wifi or wlan, and a replacable CPU block. The heat sink for the CPU and chipset connected to the top of the machine with some thermal pads. Overall a simple, boring design which is exactly what I wanted.

The power connector turned out to be the biggest issue. The power connector is KPPX-4P 4-pin male connector. I determined by looking at the circuit board that the top to pins were positive, and the bottom two pins were negative. Miracle of miracles I actually happened to have such a connector in my house, so I quickly built a power supply.

It’s surreal turning on a PC like this. Most PCs announce that they’re running with a loud whirr, this one doesn’t have anything like that. Even the mechanical hard drive is so quiet that all other ambient noise in the room overwhelms it. You don’t hear a thing.

If anyone is coming here hoping to find out if you can use an NDiS-163 as a daily driver PC, I strongly recommend against it. I ran pcbenchmark in Windows 10 and what I found is that it was relatively fast for the components within, but really very slow compared to anything you’d use on a regular basis. Mobile versions of CPUs tend to be de-rated to reduce the energy consumption, so even as a core 2 duo, it is already slower than usual, and the video is just a standard intel integrated graphics which don’t like Windows 10 very much at all. Based on the temperatures this ran during setup (The core temperatures were below 40C) I expect this machine to run for decades without issues, which is what I wanted. Worst case scenario the hard drive fails and I install another one.

To be honest, for the sake of a good story I wish I could tell you there was a bunch of excitement and interesting problems setting up the computer, but there wasn’t. The machine is a pretty straightforward intel-based machine, and ubuntu server installed without any problems. This document contained all the basic steps for installing nextcloud, and the only big change is I switched from php 7.2 to php 7.4 since I saw that the next version of nextcloud won’t support 7.2 any longer. 

I’ve wanted to use nextcloud talk between my wife and I, so I used This document to set up a TURN server. Such a server acts as a go-between if two machines are both behind NAT and thus cannot talk to each other directly. This meant that video conferencing functioned — which is fantastic. Imagine, you get full video conferencing without a middle-man. Everything involved is your own hardware!

I used this tutorial to set up encryption, so everything is https. Google pushed for https to be default on the Internet quite a few years ago. Frankly, it’s sort of a waste for 99% of what you’d do. Did you really need to encrypt this article to read it? It’s free for all to see, you know… Regardless, playing ball with Google is a pretty much a given in 2020, so I went ahead and did as they asked.

One of the problems I faced last time is that I couldn’t get a port 80 or port 443 to the outside world. Thankfully, I resolved the issue by taking control on my own — replacing the phone company’s router with one of my own. Now I face a problem of dynamic IP addressing. Someone made a great article here that shows how to automatically update your dns records within 15 minutes of an IP address change. I followed that and now all my sites resolve to their domain names.

And that’s about it! Like the rings in a tree, I can go back and see the signs of the different eras of my websites, and I love the process of learning how to set it all up.

Thanks for reading!

Industrial IT

Keep your nose to the grindstone, that’s how you win.

I’m Jason Firth.

Sometimes you have problems that seem insurmountable, and all it takes to solve them is keeping your nose to the grindstone long enough.

I recently decided I wanted to have Network Attached Storage. Lately cloud services like Google have been getting sort of strange, and I just felt more comfortable having my data stored locally on my own hardware. I also wanted to have the data mirrored. This would mean that I have the data on two separate hard disks, so if one drive had problems, I would have a copy available. I purchased a pair of used hard drives and a used NAS. Unfortunately, the NAS shipped with a 50V power supply instead of a 12V supply so it immediately blew to smithereens, and I feared it may have damaged the drives at the same time. I purchased a new NAS and inserted the drives, only to have problems immediately.

The drives were Western Digital Red 3TB drives. They are both fairly old, but I figure this should be adequete to get me started and I can replace the drives at a later time.

To troubleshoot the drives I hauled out my ancient PCI got all sorts of Input/Output errors on the drives. I assumed it may be a problem caused by a faulty NAS, but something didn’t smell right — the drive appeared to be functioning properly. My intuition was telling me that the drives should be functional or not — the idea that the electronics would appear to be functioning perfectly while we see massive failures on the magnetic media or read/write heads didn’t really pass the sniff test, so I decided to dig deeper.

Here’s what Western Digital has to say about error 220:

My daily driver PC is a laptop, so I couldn’t just plug in the computer and expect success. I would have to do everything I could from USB memory sticks.

Next up, I downloaded and ran a Western Digital diagnostic utility for MS-DOS. That’s where I got the clue I needed. According to the utility, it couldn’t run a bunch of benchmarks because the hard drive had a Code 220 or Code 0220 “Drive is Locked”. That was my clue that something I could fix was going on.

The utility I finally succeeded with was called HDAT2. With it, I was able to unlock the drive.

The following is a fairly raw recounting of the steps I used to fix the drives:

  1. Download Rufus from
  2. Downloaded HDAT2
  3. Created a freedos boot USB using rufus and copied the hdat2 executable files to the stick
  4. Opened HDAT2
    1. cd hdat2
    2. hdpmi32
    3. hdat2
  5. Selected the drive
  6. Hit Enter to open the menu
  7. Selected the security menu
  8. Hit enter on the Unlock feature
  9. hit I to select the master identity
  10. Pressed K to select a known password, there were a number available. The one I ultimately needed was “WDCWDCWDCWDCWDCWDCWDCWDCWDCWDCW “
  11. Pressed S to set. It will ask if you’re sure. Press Y. If it is correct then it will say it’s succeeded. If it isn’t correct then it will say aborted. You can try the other known passwords.
  12. Next select disable password from the menu.
  13. Select the master identity by pressing I once and press S to set. Press Y to confirm.
  14. If it worked correctly then it will say it succeeded. If it failed then it will say aborted.
  15. Security on the drive is now shown as disabled!
  16. Before I took these steps, the drive could not be accessed successfully in any way. After I took these steps, I was able to immediately install Windows 7 on the drive, proving that it worked.

Thanks for reading!

3d printing

A small practical print I wanted to share

I’m Jason Firth.

3d printing is an amazing tool for a variety of reasons, but one of the big reasons is that you can create something you needed much more quickly than if you couldn’t just 3d print a thing.

I’ve had this YI Home PTZ camera for some time, but the problem is where do you mount it? Every object talking about mounting a YI Home PTZ camera left out a really important piece: the part where you actually mount the camera! They had all these really fancy arms and the like, but that was totally meaningless without the piece to connect to the camera!

A few minutes with a micrometer later, and now I have a nice sturdy mount for the camera. I used a pair of drywall screws to connect it to a surface. Since I wish I was able to find one earlier, I’ve made it available here.

Here’s a link to the STL file

Thanks for reading!

Industrial IT

Tiny download, hugely important tool

I’m Jason Firth.

Industrial systems are unbelievably static compared to other systems. While the rest of the world struggles upgrading to Windows 10 from Windows 7, some industrial process control systems are still on Windows XP. In fact, there are even some still plugging away on Windows 98. These devices often aren’t treated as computers, but as appliances.

This happens more than you think. Many internet connected devices out there today run Linux as a bottom layer, and there isn’t even a mechanism to get into the device, let alone upgrade it.

For front-line technicians, this can be a bother. There are twin concerns: On one hand, you want to have the latest OS for the latest software, but on the other hand you have issues leaving behind old software.

Recently, Windows 64-bit OSes have become standard. Microsoft finally decided, after 25 years of supporting it, to drop Windows 16-bit and MS-DOS support. This makes sense for them from a business standpoint, but makes things complicated where you want to run that software.

Windows has maintained support for old OSes long after their end. Windows 3.1 applications functioned properly under Windows 95,98,ME,NT4,2000,XP, and 7 32-bit. They function by running a special program that allows the 16-bit applications to run on 32-bit OSes. In the 64-bit OSes, they have removed that functionality.

This causes a problem for us when software that won’t get any updates but is mandatory for your operation is a win16 program. Instrument configuration programs, old PLC programming software, cross-reference software, and more might be stuck on win16, putting you in a bad position.

I found a piece of software called winvdm that appears to solve this issue. To install it, you download the software, place it onto some folder, modify the included registry file to point to the folder you’ve created, and run the registry file. After that, windows 16-bit programs will open natively with no additonal work.

Thanks for reading!