Jason Firth

And we're back!

I'm Jason Firth.


For the past most of a year, this site sat in limbo. The question was, "What do I do with this place?"

After several years, my web hosting was about to expire, and I didn't know if I wanted to pay to keep things running.

Bottom line is, yes I am, but along the way I learned a lot about behind the scenes stuff, and I'm more in control of my website.

At first, I was looking at hosting the site myself. I downloaded a copy of Ubuntu server 18.04 and threw it onto a spare machine. Ubuntu server is pretty straightforward to get running. I set up apache, mariadb, and PHP. This all came from different write-ups I found online.

Apache is a web server that's been around forever. It's open source and has a modular architecture that allows a lot of different technologies to be used by just loading a command line. One thing I learned this time around is that one apache Apache server can be configured to serve a lot of different websites. For example, jasonfirth.ca can be configured to point at /var/www/JasonFirth.ca/ but my fake outrage site canceljasonfirth.ca can be configured to run off the same server at the same IP address and configured to point at /var/www/canceljasonfirth.ca/

Apache is smart, it knows how you access the site. If you reach the server from the url https://jasonfirth.ca or something else.

Mariadb seems like a fork of MySQL. There's some stuff to unpack here. Open source projects allow any person to create a new project based on their source code. You could take the source code of Firefox and make all the icons green and rename it luckycharmsfox and as long as general Mills is ok with you using the lucky charms trademark and you follow the Mozilla license. 

MySQL is a database server that's free and open source, but it also has a paid version. The paid version is called "enterprise" and has additional features. Mariadb appears to be a fork of MySQL that brings many of those enterprise features to MySQL.


PHP is a scripting language also called "post hypertext processor". Essentially, it's a programming language that lets a website you're watching make decisions on the server and make modifications to the page before it is sent to you. One way i used PHP on a previous version of this website is I had a script to add a navigation menu from one file to all the pages without having to maintain the menus on all the different pages, but php can do many things. The entire page is now a PHP based content management system. 

So why did I go with these particular packages? Well, once I set up the server in my home, I was sitting there with a server whose only job was to serve webpages and who had a huge hard disk. I decided to play around with a software package called nextcloud. Nextcloud is a really neat package. It basically lets you run your own cloud services -- it starts with something like Google Drive and contacts, but there are hundreds of plugins that let you add new features -- calendars, task lists, budgets, chat systems including video chat, webmail, and much more. Obviously these services already exist, but in this way you own them and control them on your own server or your own web hosting, and that's liberating.

I made the joke about cancel culture before, but it's true regardless -- Google in particular is looking to pare down the number of people using their services on YouTube to "commercially viable" ones, and we have been seeing the freedom we previously enjoyed slowly but surely being reduced. By being the one paying for your hosting, by being the one controlling your cloud services, You take that freedom back.

Let's think about a completely different application. Some companies have air gapped control networks, but your team still needs to communicate. Imagine setting up your own cloud services within an air gapped network, so your workers get isolated chat, file storage, file sharing, video chat, web email, calendar management, and task management. You could end up with a team with all the tools of the cloud, working in an air gapped island. 

It's good to be back, now that I know what I'm doing I expect to post more.


Thanks for reading!

Happy new year, and some thoughts on AI

I'm Jason Firth.

A lot has been said about AI of late, the idea that AI could "evolve" and become a true intelligence.

With respect to any system I've seen so far, that sounds plausible, except that it isn't. Much like a stuffed doll will never evolve into a human because the fundamental stuff that makes up both are completely different, "Artificial Intelligence" and actual intelligence are made up of things that are absolutely different.

Take the blinker on your car. Is there a chance it will ever become truly self-aware? The answer is clearly "no". It is a switch and a timer circuit and a couple light bulbs, designed by a human being to do one and exactly one thing. How about if you replace the switch with a voice activation? It's still a switch and a timer and a couple light bulbs. How about if you have a wave file play saying "Activating turn Signal" when you turn it on? You've made the interface more human compatible, but the fundamental stuff that makes it up is the same. It's still a timer circuit at its root. The logic behind these three "Artificial intelligences" are very similar.
Every single AI I've ever seen is a more complicated version of the exact same concept as the turn signal. It's a purpose built machine made for excelling at one task. Deep Blue can beat Garry Kasparov a thousand times at Chess, but it will never beat him at Mario Kart unless a human intervenes and effectively creates a new device for beating Mario Kart. It will never beat him at writing a song unless a human intervenes and creates a new device for writing songs. It will never beat him at writing poems unless a human intervenes and creates a new device for writing poems.
By contrast, the human mind invented chess, and Mario Kart, and songs and poetry, then determined what was a good state and a bad state, and then determined methods to get to the good state. The human mind wired itself to do this, along with a thousand other things that were required to get there. No human ever opened up someone's brain to wire up a chess player or a mario kart player or a musician or a poet.
As long as that distinction exists, artificial intelligence will always actually be a mere tool created by a human intelligence. Such intelligence "evolves" by the humans getting smarter and applying different algorithms to different problems successfully, not by solving problems itself.
The day that an AI identifies and quantifies a problem then comes up with a solution on its own, that's the day I'd be concerned about a true intelligence developing. Until then, it's purely science fiction.
Thanks for reading!

The government's response to my letter

Dear Mr. Firth:


I am responding to your email of April 26, 2018, concerning the Government of Canada’s approach to supporting apprenticeship and the skilled trades. I appreciate your sharing your experiences and views on the Government’s measures aimed at increasing entry into apprenticeship.


I especially noted your view that making more apprenticeship opportunities available to young Canadians could be a more effective way to support the development of skilled tradespeople than direct incentives for apprentices.


Many of the Government of Canada’s investments in apprenticeship are aimed at providing support and incentives to ensure there is an appropriate supply of skilled, mobile and certified tradespeople to meet labour market needs. As the average age of entry to apprenticeship in Canada is 28, it is important to address the barriers that prevent youth from fully participating in the Canadian labour market, including the skilled trades.


Measures such as the Apprenticeship Grant help to support apprentices with the challenges they face. Evaluations of programs such as these are conducted every five years in order to monitor performance and results. The latest evaluation of the Apprenticeship Grant indicated that it is a means of offsetting costs for apprentices. Findings from performance measurement exercises help to shape government policy decisions. For example, the introduction in Budget 2018 of the new Apprenticeship Incentive Grant for Women was based on findings pointing to barriers faced by women in participating and succeeding in apprenticeship and the skilled trades.


The Government of Canada also recognizes that employers play a fundamental role in apprenticeship, overseeing 80 to 90 percent of training at the workplace. However, a range of barriers prevent some employers from participating in apprenticeship training, and these barriers can be more difficult for some small businesses. Therefore, in addition to offering a range of individual supports for apprentices, the Government of Canada encourages employers to hire apprentices through the federal Apprenticeship Job Creation Tax Credit.


As you may know, the Government collaborates with the provinces and territories through various fora to address labour market issues. For example, the Canadian Council of Directors of Apprenticeship, which has managed and delivered the Red Seal Program since the 1950s, is a long-standing and successful partnership between the federal government and provinces and territories. In addition, our government is working with provinces and territories through the Forum of Labour Market Ministers to meet its commitment to improve employer engagement in apprenticeship. I would note, as well, that many of our provincial and territorial partners offer complementary supports and incentives to employers to hire apprentices.


The Government of Canada will take your views into account as we continue to work to improve the apprenticeship supports available to help support a skilled, mobile and certified skilled trades workforce.


Thank you for taking the time to write.


Yours sincerely,






The Honourable Patty Hajdu, P.C., M.P.

Minister of Employment, Workforce Development and Labour

Open Letter to Patty Hadju regarding apprenticeships



I'm a skilled trades supervisor covering instrumentation, fire systems/sprinkler systems, gas fitters, and liquid petroleum distribution systems for a senior gold producer. I live a few blocks away from your Red River Road office in Thunder Bay.


I'm writing concerning the approach the government seems to be taking regarding apprenticeships and skilled trades. A common approach I've seen relating to skilled trades is making apprenticeships more attractive to young people. It might surprise you to learn that I'm disgusted by the idea of additional government incentives to get into the skilled trades. It makes me literally screaming mad!


Every one of my younger techs illustrate the problem. Every young skilled tradesperson or apprentice I know got their position by first paying for school and going through college. All of us would have loved to be getting paid to learn our trade, but that was a fantasy unavailable to anyone but the intensely lucky or well-connected. Ultimately, some paid to go through school and got an apprenticeship afterwards.


In my case, I paid for room and board in an unfamiliar city for years going to college, in addition to paying for tuition and books. After finishing college, I took the first job I could, at a paper mill in The Pas, Manitoba. The Pas is about 8 hours north of Winnipeg and I didn't have any family anywhere near there. I eventually successfully got my Certified Engineering Technologist certification, and became a red seal Journeyman Instrumentation and Controls Technician through the Trade Qualifier process.


For many voluntary trades, the Trade Qualifier process creates nearly as many new Journeypersons each year as the apprenticeship path. Every trade qualifier is an individual who paid their way through college, found a job on their own, worked under a journeyman, and challenged the trade exam. That's a person who wanted an apprenticeship, but couldn't get one and got their certification outside the apprenticeship system. All those people valued the certification so much they paid their own way through, in spite of being ineligible for any of the grants or other rewards provided to apprentices.


Among myself and my millennial colleagues, most of us ended up with student debt and at the end of the day some of us still ended up going through the reduced wages of a 4 year apprenticeship.


You don't need to gild a golden ticket! We all would have taken apprenticeships if they were available. Lacking opportunities, we all had to make our own.


There's a lot of talk out there blaming millennials and the generation after them for the lack of young people in the trades. Obviously young people can't take opportunities that don't exist. That's why the idea of making apprenticeships more enticing for young people is so offensive: These people already won the lottery by getting a rare and precious opportunity. Every apprenticeship will be filled, without question.


Some people look at the non completion rate of apprenticeships and see that as a problem. In reality, it's a feature, not a bug. A typical engineering technician, engineering technology, or engineering program will have a high attrition rate because some people discover they aren't cut out for the field they chose. The same is true of apprenticeships; The process needs to allow lots of hiring and lots of attrition until, after 4 years, the tradespeople who are left are the best and brightest.


What we need is a 'shotgun approach'. Encourage companies to hire lots of apprentices early on in all trades and keep the cream of the crop. Make sure the opportunities are there, and there will be young people in the trades. If there's no obvious way into the trades for young people, companies are going to continue to see the negative consequences as the workforce ages and retires. Companies are fighting over a shrinking supply of 50 and 60 year old tradespeople. Many of those tradespeople got into the trades through real apprenticeships where companies took a chance on young men and women.


Instead of trying to make applying for apprenticeships more appealing for young people, we need to make taking a chance on young apprentices more appealing to companies. Spend whatever we would have on incentives for apprentices on incentives for creating more apprenticeship positions! Until we start creating the next generation of Journeypersons, Canadian industry will continue to struggle to attract the talent they need.


Thank you,



Jason Firth

New software

I'm Jason Firth.


I've migrated to newer blog software, and as a result some of my posts have been removed or scrambled.


I'm manually uploading the old posts, the photos might be lost.


Update: The old posts are back online, but 99% of the photos are still missing.


Thanks for reading!

Connecting my new DuetWifi to my new Tevo Tornado

I'm Jason Firth.


I've long believed in Open Source as a concept. I like the idea of a common knowledge we can contribute and help to grow. I can't contribute a lot nowadays since most of what I work on is proprietary, but occasionally I still get a chance in my off time. I spent a lot of time trying to figure out how to connect my DuetWifi to my new Tevo Tornado. The documentation is straightforward, but there were a few things that caught me off-guard, so I figured I'd share.



Standard disclaimers apply here. Don't do this. It'll probably kill your printer. It'll probably cause your grandfather to come back from the dead and stalk your dreams. This isn't a product, it's just a description of what I did, and maybe this might help you if you're doing what I did. Seriously though, there's 120vac in this thing. If you don't know what you're doing, then you probably shouldn't be poking around until you read more.


Here's a nicely printable Wiring Diagram(pdf),Wiring Diagram(dxf)  and the Full configuration files for the Duet's reprap firmware


Below is a object I designed to bolt into the Tornado's metal cabinet so you can bolt the duetwifi onto it. Full disclosure, it didn't print great for me on my delta, it likely needs some tweaking. Thanks to some creative drilling, it worked well enough that I was able to safely secure my board inside the enclosure, but you might want to double check before you start printing it off.


Now, a few things I noticed along the way that are important, and only some of them are included in the drawing for reasons that may become apparent.


First, the wiring I took apart was really bizzare. The case fan was connected to the nozzle heater. The part cooling fan was connected to the e1 heater output. I took all 3 fans and attached them to pin connectors so I could plug them directly onto the board's fan controller.

I set the part fan as a controllable fan, and the heat sink fan and case fan run thermostatically -- if either the nozzle or the bed exceed 50C, then the fans activate at full blast. That seemed the most intuitive to me.

Note that the input for the switches is looking for a 0vdc connection, so while you can (if you don't mind it looking a bit ugly) use the existing 3-pin connector, you'll have to move the second wire from the middle pin to the end to connect the input to gnd.

The fans will not work at all until a jumper is placed either from the fan voltage input selector pin to +5VDC or VIN. I show the jumper between the fan voltage selector pin and VIN.

Besides that, once I figured everything out, it was pleasantly simple to troubleshoot the configuration. Because I was doing things this way, I tried to do all the configuration in the reprap configurator utility so anyone else (including myself) can import the included JSON file to make changes using eh same utility. I didn't do anything manually in the file. I suspect there are further interesting tweaks as you get deeper, but this was entirely meant to be a basic "getting started" info dump.





Thanks for reading!


EDIT: Hey! Listen! Before you take off, there's something you need to know!


Ultimaker Cura's default Tevo Tornado profile adds 3 lines to the gcode at the beginning of every single print:

M104 S[extruder0_temperature] 

M109 S[extruder0_temperature] 

M109 R[extruder0_temperature]

You need to head into the printer configuration in cura and completely remove these lines from the pre print section, or your heater will stop the moment the nozzle clean ends and it'll be really annoying!



Copyright © 2018

Lingonberry by Anders Noren — Proudly Powered by BluditUp ↑