on the mad exodus from github.com

If you don’t code for a living, you probably didn’t hear about the US7.5B deal in which Microsoft is now purchasing github.com. For the rest of us, this is big news.

GitHub Inc. is a web-based hosting service for version control of software using git. They offer both private repositories and free accounts (which are commonly used to host open-source software projects). With its 28 million public repositories, it’s the largest host of source code in the world.

Github’s competitors are reporting record numbers of customers moving their repositories away from the now Microsoft-owned provider.

What Microsoft now controls

Presumably, Microsoft now controls both Atom and Electron, two extremely powerful platforms in the coding space. The former is a great code editor and the latter is the underlying executable program which allows others to code in JavaScript to create a very usable desktop/GUI application.

Microsoft also now control the revenue stream. Each private repository costs $7/month or $9/month, depending upon whether its personal- or business-related.

Microsoft now apparently has access to the code in those private repositories. Just imagine what their competitors must be thinking, now that Microsoft has a copy of their internal project code to include any secret ideas those competitors have been working on.


We’ve all been lulled by github’s ease-of-use, it’s free nature and such. We haven’t even considered alternatives before now, to be honest. The specter of this new playing field means that we must look at our options.

Gogs.io is an open-source option for hosting your own github-like service.


Over the last three days, I’ve now setup my own private, internal Gogs service called gitjs.io. Since I own the domain name I may later push this into the cloud but for now, it’s running on one of my computers here at home.

After the initial hurdles to get OSX to startup the Gogs service on a privileged port (http/80) and to automatically start upon bootup, I must say that I love it.

It’s a full-featured github-like experience throughout with all the screens you’d expect. You can create users, organizational levels and do the things you did over on github.

The command line git program interacts with the service as expected. The underlying code creates a global repository folder to stores everything much the same way that github might.

Screen Shot 2018-06-09 at 6.38.00 PM

The Future of Source Control

I don’t need a crystal ball to suggest that Microsoft’s purchase is going to be a game-changer for open source. The world of open source is the very antonym of what Microsoft stands for.

I would suggest that anyone and everyone with a github account highly consider the immediate need to move your code elsewhere. Microsoft has a long history of buying up competitive technologies only to starve them of air over time. In fact, internally Microsoft used the term “starve them of air” to describe how they would ruin a competitor’s advantage in the market.

It’s time to take your code and run.


beehive varroa barrier

This is a second post of two, hoping to address the needs of beekeepers in preventing the Varroa mite from entering the beehive’s brood chamber, devastating the pupae inside.


The mite jumps onto the adult bee’s back while it’s foraging for pollen and then rides back to the hive. Once inside, it lurks near the brood cells after the queen has laid a round of pupae. While those cells are being capped off by the bees, the mite jumps into one of the cells and feeds off the young.

This design involves a means of brushing off the mites as the bee enters the hive. Mylar door gates differentiate entrances from exits; the longer entrances incorporate the brushes which will remove the mites which fall through a mesh into a tray of oxalic acid where they may be counted.

Screen Shot 2018-05-22 at 10.00.21 AM


edit gcode externally

I’ve been making some updates to a command line interface (CLI) program lately. I wrote it in the Go language and it’s useful for editing 3D printer gcode files.

A GCODE file is a set of toolpath instructions for both 3D printers and CNC machines.


The program is called GcodeEdit and it can so far do the following:

  1. Update the hotend’s temperature, useful for changing the filament material you’d like to use for the part
  2. Show a variety of information from the file, like number of layers and the slicer software which was used to create it, for example
  3. Remove all heat-, fan- and extrusion-related commands so that you can watch the printer go through a “dry run” without wasting any plastic
  4. Repeat the indicated layer but without extruding any plastic, suitable for “ironing” out the last layer and useful during the first couple of layers, for example

I intend to keep adding options to this program and I use it myself, for what it’s worth.


recycle, reuse, reinvent

Someone had a dual-monitor desk stand for sale (something like $10) and I bought it without much in mind for it. I liked the sturdiness of it and it’s been in my foyer for several weeks.

Yesterday, I designed a VESA mount in PLA and printed it over the span of fourteen hours and it turned out to be perfect. It now accommodates the first of two filament spools for the 3D printer.




black pearl

Since I’ve had the 3D printer for nine months now, I thought it was time for a facelift. I decided to re-theme it completely on the software side of things. The first step was to change out the web interface (stripping away all of Robo’s theme and modifications) and now I’ve replaced the LCD menu as well, which now looks like this:



I created this design using Conky, a system monitor from the UNIX world. The theme was inspired by an earlier, larger desktop version of this by Ninquitassar but this was a total re-write.

I hope to now re-theme the web interface to match this styling and to then fork & recompile Conky itself to natively provide the details of the in-progress print job itself. It would be nice to have a feedback loop for the Amazon Echo Dot so that the voice controls will in some way alter the screen as an acknowledgement.


hot-crossed filament

The dirty little secret in the world of 3D printing is that things go wrong (a lot). This week’s problem to solve is the frequent cross-threading of the rolls of filament itself.  Filament manufacturers don’t seem to understand the requirements necessary for doing this right so it’s up to the rest of us to fix the problem ourselves.

Each time cross-threading occurs during a print job, you lose the entire print since the feeding of that filament just stops. In this photo, the printer has actually lifted the entire holder assembly off the workbench:


Spool Guide

To deal with this problem, I decided to re-invent the spool holder itself by changing the inner topology from a rectangular shape to parabolic. It now delivers filament in a straighter path to the filament sensor block on the printer, minimizing cross-threading.

The reusable spool guide design incorporates eight individual parts which attach together using standard aluminum hex head bolts.



add comments to a gcode file

I’ve just written a new command-line tool (CLI), this time in NodeJS/JavaScript but as usual, it’s open-source. The program will create a new version of your 3D printer’s GCODE file, adding comments along the way which describe what each command does.


I would suggest that it’s best to install it somewhere in your path and then you should be able to just invoke it easily in your working directory where the GCODE file(s) live:


$ gcode-comments file.gcode

;Generated with Cura_SteamEngine 2.3.1
M104 S205            ; Set extruder temperature
M109 S205            ; Set extruder temperature and wait (blocking)
M107                 ; Turn off fan
M205 X10             ; Adjust jerk speed
G1 F2400 E-1         ; Move and/or extrude to the indicated point

Input:  file.gcode
Output: file_commented.gcode


Since I’m now an instructor, I thought I would create a repository which demonstrates  code for the many languages out there which could produce a command line tool/interface (CLI).


Currently, there are nine languages represented but I may add more later. Note that everything here is decidedly OSX-specific. Each subsection includes the instructions for running and/or compiling each, noting that some are compiled languages and some are not.

talking at the speed of lightning

I give so-called “lightning talks” at San Diego JS, a four-times-per-month local group on Meetup.com. Each talk only lasts five minutes so there’s time for several speakers within the span of a single event.

The venue is typically packed. Here’s a photograph of a typical turnout—there were about 120 attendees this month alone.

I suppose you can communicate a lot in a mere five minutes. It is a bit challenging to try to distill down all the things you need to say into this timeframe. There’s really no room for story-telling, just tell the straight facts and details as you race through your slides and screenshots and nothing more. At best, you can hope that someone will ask a relevant question which may allow you to go into some detail you’d earlier hoped to have included.


Many of my projects involve more than one computer. Unfortunately, the security settings on most wi-fi routers at venues like this don’t want you to connect from one computer to the next. The router would actively prevent your demo from working. So I’ve learned to bring along my own networking, which is a hassle. This is especially difficult with IoT projects, for what it’s worth.

Another challenge is related to power. It seems like each of the speakers needs to setup prior to the event and so they all want to bring along their power adapters and plug in. This means that the venue would need to accommodate all those brick-style adapters and they usually forget this.

And I suppose, a recurring problem is that of screen resolution compromises that you have to put up with. You will have formatted all your screens for one resolution while creating your content, only to find that you’re now presenting in a smaller resolution. This then threatens to clip off content or the font size is now too small to be seen by those near the back.

Regardless, it’s a rewarding experience and I hope to give more talks in the months to come. I would encourage others to do the same. It’s a great opportunity to give back to the community of like-minded coders.

mobile app for the robo

I’ve written a new mobile app for the Robo C2 and Robo R2 set of printers by Robo 3D, a local San Diego—based company.



It’s written in the Adobe PhoneGap (Cordova) platform with Framework7 for the styling and scaffolding. It communicates to the underlying OctoPrint interface inside the printer itself. Rather than building several smartphone apps and being subject to the recurring annual developer fees by Apple/Google/Microsoft, I intend to serve it up in a more economical way: embed another single-board computer inside the printer.


This will fit nicely on a $10 Raspberry Pi Zero W computer, as shown. It’s then powered by the USB 5V supply inside the printer and would be powered on every cycle. I’d then use my iPhone’s or iPad’s browser to simply connect to the app.


The app is fully-functional for the Robo C2 printer and sports a slick-looking interface.



And here are some obligatory screenshots of the app.