In my personal life I write software for the manufacturing industry. Professionally, I am an engineer, and write code for computer-operated equipment (lathes and mills, commonly known as CNC machines.)
For a sense of scale, let me say that most CNC programs are under 250 lines of code. In addition to controlling the cutting tools, the programs will check for operator input mistakes: Tools can only be adjusted within a narrow range, anything outside that range and the machine won't run. Did the operator slow it down to check something and forget to turn it back to 100%? Machine won't run. And so on. Idiot-proofing, dimensional checks and feedback, torque monitoring, etc.
Before we even let the customer see their new machine, we have already run the machine for 8 hours of hands-off auto cycling of the program. We have also run each cutting tool through enough parts to ensure the cutting conditions are optimal. Then for the customer we run an additional hands-off production run of 8 hours or 35 pieces (whichever is greater) and then do a 100% inspection of every feature out to 5 decimal places, followed by some statistical analysis to measure capability. Once the customer is happy, we ship the machine and repeat this on their floor. Then we spend a few days going over the statistical analysis, then a week of training for their operators. Only then is it ready for producing parts that make sure your car door latches with 18lbs of force rather than 19lbs.
Oh, yeah... we provide the computer code to the customer as well, every line commented for clarity.
Doesn't it seem like voting software, which likely is thousands of lines of code, should be made open-source and go through some sort of approval process before being used for real? Isn't this software vetted or tested or examined at all?
-+Edit+- I should clarify... I am not claiming that voting software and CNC programs are similar in architecture, language, layout, complexity, or structure. My point is, if a fairly simple g-code program and its performance is vetted so thoroughly by the end user, at multiple points in its development and prove out, then why in the hell isn't the software that determines how my vote is recorded given the same level of scrutiny? I didn't realize my example was too convoluted for so many snowflakes.
view the rest of the comments →
[–] screamingrubberband [S] 0 points 1 point 1 point (+1|-0) ago
You are correct.
And that is a problem.
Why? Why does a machine that is counting things need to be networked to a different machine that is counting different things? The counts should be isolated from each other. That guy's vote went into that machine, my vote went into this machine. Why do the machines need to talk to each other?
Again, why? Why does the computer in the gymnasium/church/office building that counts things, need to talk to anything 'outside the loop?' It is demonstrably insecure regardless of the communication protocols used. Print the results, print a hash of the results database, deliver the machine and the printout to the BOE.
Why let them exist at all?
Then obviously that is a problem that should nullify that piece of equipment.
[–] AngelofDeath 0 points 1 point 1 point (+1|-0) ago
I still amazed at your 250 lines of code for CNC. I would love to see it. What language?
I'm old and haven't done any coding for decades, but used to do Assembly Level, Pascal, Fortran, Cobol, a little C and C+. Some of the coding I wrote was many thousands of lines.
[–] screamingrubberband [S] 0 points 1 point 1 point (+1|-0) ago
I should clarify... CNC machines run off of a language called 'G code.' it is a combination of letter/number 'commands' that control the machine... Each letter has a specific meaning... X, Y, Z are axis locations to move a tool to (there are more letters for this, but I'm trying to simplify!) M is generally used for machine-specific functions. M8 turns on a coolant pump to keep the cutter lubricated and cool, M9 turns it off. M3 makes the tool or part spin forward, M4 spins in reverse, M5 makes it stop. G is mostly all about 'how do I move to x/y/z" G0 is rapid (as fast as the machine can move) G1 is 'move in a straight line at a rate determined by another letter' G2 is 'move in a clockwise arc to xyz' G3 is ccw.
Modern-day G-code makes use of variables, if/then/goto statements, subroutines, internal machine condition monitoring... it is a long way from where it was, and the people I work with are all excited to see what comes next... A recent job is currently letting the guy at the machine 'program' his machine with a bar code scanner. It reads in six or eight numbers, saves them in variables that the machine can read, then the program cuts a part that matches the dimensions the operator scanned. That's one of a few programs I've written that is able to make parts I have never imagined!
I'm going to post a few things on /v/machinists later on today, I will post a few code examples.