DOH switching vendors after flawed food safety inspection system?

Check out this procurement listing the State of Hawaii has to rebuild their failed Restaurant Inspection system.

Just looking at the “requirements”, the State’s restaurant inspection project was a Death March from the start.

Technical requirements: Microsoft OS throughout; ‘App written in ColdFusion or .NET; on-demand data sync to a Cloud Server using MS SQL Server as the “database”? Good luck finding capable talent willing to downgrade their tooling to work on THAT gig.

Nevermind the BS requirements that the vendor have done EXACTLY the use-case the State needs (Food Inspection app in a Gov’t Jurisdiction, 50 end-users, 10K restaurants).

Y’know those bogus job listings that NOBODY can qualify for because it’s so ridiculously specific — because the business actually intends to hire an H1-B employee? This kind of laundry-list of requirements smacks of similar mentality.

If the State REALLY wants a successful project at best possible prices, those Candidate qualifications should be relaxed to statemerely “Web Development Team” with a documented history of successful MobileApp-to-Internet Server solutions; and no Technical requirements on how it’s crafted “internally”. C’mon, the requirements say the vendor has to maintain the system going forward, so who cares “how” the black box is built?

Furthermore, if the State really needs to have the data in MS SQL Server, just require a regularly-scheduled data-dump from the App’s Database (however implemented) to an accessible MS SQL Server.

The use cases for Food Inspection, Public-Facing Portal, Reports, Dashboards, and Billing/Receivables are a minor detail for the Web Shop’s existing code base to be adapted to.

I’m calling you out on this, Governor Ige. If you want me to truly believe the State’s committed to growing “High Tech” in Hawaii, the State can start by making it easier for the Elite of the Local Tech talent pool to compete on low-hanging-fruit projects like these — while using the bleeding-edge technologies they use daily to remain competitively Agile in the private sector.

I could do the job for pennies-on-the-dollar (and weeks versus months) if allowed to build the Mobile app on Android/Cordova; and the back end (at least the data-collection API) with Rails. Doing it in .NET, uhm, no… not interested the gig under those conditions. :-p

Strongly-Typed JavaScript? AtScript, FTW!

*FINALLY* there’s a strongly-typed JavaScript dialect we can use!

Being a computer language geek, I can’t help but be overjoyed about Google’s AtScript. ‘Took a few days of R&D to roll it into my automated build environment, but it’s gonna pay off in the end.

This opens up all kinds of testable type-mismatch issues to be caught upfront at coding time, at compile time, and during continuous integration testing. Best of all, AtScript code can be boiled down to plain ol’ JavaScript on final deploy.

Google’s AtScript Primer

More to come, I’m sure.

Happy New Year 2015

It’s a new year, and I’m starting almost everything with a clean slate — freshly installed Linux upgrade (Fedora 21 w/ MATE Desktop), and dropping support for more legacy stuff I’ve built and maintained since 2008.

Now that my main workstation is squeaky-clean, it’s time to take a fresh look at everything I use to see if superior alternatives exist. First thing to re-evaluate is anything Subscription-Based like Linode, Clear 4G, GotoAssist, LogMeIn, Freshbooks, Dropbox, Pingdom, and Lastpass. I’m content with most of the lot, but if there’s a better alternative, now’s the time to move.

Beyond the subscriptions, and cloud services, I’m also taking a new look at programming languages. While I can sling C, C# and Ruby as well as the next coder, my personal momentum has been shifting more toward PHP-based products (WordPress, Drupal, OpenERP). Did I mention I’m not fond of writing PHP? SMH.

In other words, my fondness for Ruby (especially Rails) has been waning for several years now; and perhaps 2015 is finally the year I bid farewell to the platform that promised so much, but failed miserably to deliver. It’s been real, guys, and I’ve met lots of brilliant folks along the way, but FUCKING A, I wish Rails and associated Gems were developed more like Linux distributions — with a “Long-Term Stable” track and an “Edge” track. There’s nothing more vexing than updating an aging Rails Gem (for security or other reasons), playing the cascade-dependency-update game, and then hoping the regression tests are suitable enough to assure stability as you deploy to the server farm. Bundler was a huge improvement to handle Dependency Hell, but the process is still a huge time sink, especially when something DOES break along the way — which if that happens, you’re now looking at a handful of updated Gems as culprits, additional time spent hunting the issue down, and (worst case) possibly writing a monkey-patch to make it all work again “just this one last time”.

Time to take a new look at the PHP, Python, and maybe NodeJS frameworks for something fresh. Writing a simple Web-App shouldn’t be a huge freaking Orchestration of little bitty fragile parts as it has become with Rails since it evolved beyond its 1.x days.

Beyond that, I’m hoping to make a big move into the CNC, 3D Printing, and electronics market this year, with a couple of designs I’ve had brewing for the past few years. More on that as progress is made. Happy New Year, everyone!

Observations on the OpenBuilds Ox at 1500×1500

More of my notes and observations for anyone considering extending the OpenBuilds Ox design to larger dimensions. I’ve cut a few parts out of plywood and acrylic and seem to have most of the settings I need dialed in.

First up, there is overall weakness in the Stepper Motor’s torque on X-Axis, especially when compared to the torque on the Y-Axis. This is understandable, but still a disappointment as it is the Weak Link when determining the limits of the machine’s feed/speed ratio. I’m able to do 1/4″ depth cuts into plywood at 30ips, and could probably go higher if I replace the X-Axis stepper with a beefier replacement. Another option is to redesign the X-Axis plate to accept two stepper motors to make the X-Axis “Dual-Motor” as well. If I took things in that direction, though, I’d need a new controller, as a TinyG controller board can only drive 4 concurrent steppers.

Next, the original design’s solution to hold belt tension in the belt — the screw into an “upside-down” T-Nut — just doesn’t scale up well. You can hold tension, sure, but at those lengths, the risk of distortion through stretching is something to be wary of. As I’m cutting large pieces out of plywood, though, a 1/16″ margin of error isn’t going to trip me up too much. When I scale up to 3000×1500, though, I’ll probably run “double belt” across each span — with the belts’ teeth facing each other — to reduce the effect of stretching. I’m also going to ditch the Screw-and-T-Nut fastener and see if I can rework it into a tension-spring or coil type of arrangement at one end. The friction of the belts’ rubber helps here, so you don’t need much to hold the belt ends in place.

Another thing I had to change out was the Stepper Motor for the Z-Axis. The original design called for a NEMA-17 stepper, which is barely sufficient. I opted to swap that out for a NEMA-23 stepper replacement, and I’m glad I did so. Unpowered, the installed router (Hitachi M12VC) is heavy enough to allow gravity to walk the Z-Axis down its leadscrew until the router touches bottom. ‘Had to really bear down and tighten up the Z-Axis hardware to prevent that from happening; and for good measure, I also set the TinyG to ensure it’s always applying power to the Z-Axis motor.

Finally, while tweaking the machine for Homing Switches, I had to come up with a way to quickly shift the “Home” end of the machine to the left or to the right in order to make it “Square”. It’s easy enough to tell it’s out of square when one of the two Y-Axis motors hits the limit switch, while the other one has about 1/4″ more to go. As a quick and dirty method, I leave the far end of the machine fixed to the table, and make adjustments on the “Homing” (Zero) end of the machine. While powered off, I can pull the gantry all the way to the end, and shift left and right until both sides of the gantry (Y-Axis steppers) hit the limit switches simultaneously; at that point I can secure that end to the table and be confident the machine will stay “true” to that orientation.

Finally! Hitachi M12VC Installed.

Finally had a day to myself to get this bad boy installed! Woo-Hoo! Nevermind the hate on the ugly wires — this is a completely new Z-Axis built to replace the old one, as I wanted to use 20×60 V-Slot instead of the 20×40 on the original Z-Axis. I’ll tidy up the wires before running it on real projects.

Now recalibrating the maximum travel speeds and dialing in the pots to ensure there’s enough power to handle the extra weight. Hope to cut a few boards of MDF soon for a quick project before getting pulled into Christmas season. It’s all software and CAD/CAM/Controller stack tuning from here ’til I get around to extending the Y-Axis to 3000mm. The way this project’s been going, I don’t expect to get there ’til early 2015. Still, 1500×1500 is enough to cut 4’x4′ sheets of MDF — just enough for a quicki project I’ve been dying to tear into. :-)


. . .

CNC Ox Build Update

Just a brief status update to cover the past few weeks. To be honest, not much progress has been made as I’ve had a surprising bump in my consulting business. (No complaints there — having good IT and Software projects lined up as an independent coder based in Hawaii is always an interesting challenge).

Overcoming TinyG v6 Shortcomings
On the Synthetos TinyG v6 – I’m really starting to hate this controller again. If I were superstitious, I’d say the thing is cursed. Aside from blowing a driver chip, I’m now experiencing problems with the Home and Limit Switches. The underlying problem here is that the TinyG’s inputs are 3.3 Volts, which is quite retarded (IMNSHO). Instead of making things easier on the builder and using 5 or 12 volts for these lines — which would make it a cinch to passively run Normally-Closed switches over a few meters of length without fear of the voltage drop — the wretched thing drives and accepts 3.3 Volts, with specific warnings of destroying the Atmel CPU if you send more than 3.3V on those lines. Ugh!

The way I see it, the only reliable way to work with the TinyG’s 3.3V home/limit switch arrangement is to add extra circuitry to manage the switches on 5 or 12 volts (which I have ready access to from the power supply), and convert that to a 3.3V signal for the TinyG’s benefit.

Selecting and Purchasing Router/Spindle and Accessories
‘Finally ordered a REAL router head for the Ox. I settled on the Hitachi M12VC for two reasons:

  1. There are a handful of reviews about the Hitachi being quieter than most of the other popular routers; and
  2. has a variety of collet sizes available for this particular router (well, some Bosch Routers use the same kit). I went with their combo kit  for the most flexibility for this setup.

Aside from ordering a mounting bracket for the Hitachi and a starter set of bits, I’m calling this upgrade done. Next upgrade is to extend the table length (Y-Axis) to the full 3000mm I’m looking for, so I can cut parts from entire plywood sheets. At this rate, I expect to be able to do that in mid-October. Right now, I can work on half-sheets of plywood (4′ x 4′) with the Dremel Clone — when the home/limit switches aren’t glitching up on me. :-p

Repairing the TinyG v6

As luck would have it, once I had my 1500×1500 CNC router fully assembled and tested properly, Hurricane Iselle comes into the islands and sets my progress back by a few weeks. Not only did I need to disassemble the frame and put both the frame and gantry into a safe place during the storm, and then reassemble the whole works a week later, but darn it, one of the TinyG controller board’s chips decided to crap out, too! That’s a bummer, especially since those driver chips are soldered directly to the main board.

The TinyG v6 is no cheap Chinese knock-off 3D printer board with expendable daughter boards, this is an all-in-one unit requiring surface-mount repair tools to get the job done.

I should’ve looked into the next-generation driver chips that the TinyG v7 and later use, and see if those chips are pin-compatible with the chips used in these earlier models. Chances are good I’ll be keeping this machine around for a long time, so it may have been a good time to just upgrade all of the driver chips while I had my soldering equipment out. Oh well. Below are photos of the actual repair, done using a hot air workstation set at 280 Celsius, on a fairly low airflow setting.

Now that this distraction is complete, and my frame is reassembled once more, it’s time to remount the little Dremel Clone onto this CNC and start working on some of the smaller pieces I need to have made. In another month or so, I’ll double the length of the frame (to make the machine a 1500x3000mm beast), and I’ll be adding a beefier router at that time to cut entire sheets of plywood. Finally.

  • 20140830_122438a
  • 20140830_123700a
  • 20140830_133025a

Portable USB DVD RW

Overall Impression:  These devices are sorely UNDER-rated.

After a few days of testing, I’ve found that these devices perform remarkably well — provided your PC is recent enough to have sufficiently powered USB ports — in particular, USB3 ports. For the geeky-curious, the actual drive inside the USB enclosure that I received reads out under Linux as “MATSHITA BD-CMB UJ-120“.

If your experience finds that these units won’t read discs, or they seem slow at reading discs, I can almost guarantee your USB ports aren’t providing enough power, period. The power required to read Blu-Ray discs, for example, is a lot higher than what’s needed to read DVDs.

Other troubleshooting tips and hints:

If you have a watchful eye, look at the amber “drive status” light — if it seems like it dims out while reading, you’ve got a power problem.

To use these on an older PC or notebook, I recommend adding a cheap 5-Volt wall-wart (power supply) for the power needs. 1.5 Amps minimum, but 2 or more is better.

In a pinch, you can also use the power-plug portion of most recent Android tablet devices with a standard USB “A/B” cable, instead of the Micro- or Mini- USB cable your tablet would use.

OpenBuilds Solid V Xtreme Wheel

Check out these new Solid V Wheels that OpenBuilds is now producing! Woo-Hoo. They’re made from hard polycarbonate material, which is more resistant to compression than the standard V Wheels.

‘Will be keeping an eye on the reviews of these wheels, and (if all looks good) we look forward to maintaining a supply of these wheels as an upgrade option for more demanding CNC Milling needs.

If you’re a local Hawaii maker (Sorry, my offer is limited to Hawaii makers) and would like to try them out, let me know and I’ll give you a good price on your first set of these wheels in exchange for an honest review of them installed in your machine. :-)

1500×1500 CNC Machine

20140709_221421aSo, I’ve been collecting and assembling parts for a large CNC build I’ve wanted to do for years. My ultimate goal is to be able to cut parts out of entire 4’x8′ sheets of plywood, but for now, a simple 5’x5′ (well, 1500mm x 1500mm) machine will suffice.

Most of the parts put into this build are either components I’ve had laying around collecting dust, or they came out of the Gadget Shop’s OpenBuilds inventory. The only real “third-party” purchase was a set of aluminum plates, which are conveniently available on Ebay. I have to admit, those $150 plates are beautifully done, and I’m confident they’ll stand up to anything I plan to do with this machine.

The Controller is an old TinyG v6 that I once used in a ShapeOko v1 — an entry level CNC machine that has since been modified to operate as a 3D printer. I am running a heavily modified version of the TinyG firmware, and a heavily modified version of Repetier Host to exchange G-Code.

Why Repetier Host? Long story. At the time when I was using the TinyG on the ShapeOko, I noticed it would fail miserably due to all kinds of “seemingly-random” serial port data errors.

In other words, I had a bad case of line noise on that setup, and it was almost impossible to get a “clean” plain-text transmission over that serial connection without reducing the serial port’s speed ridiculously low. Synthetos (TinyG’s makers) seemed content with leaving the TinyG to use this “plain text” method of exchanging G-Code, thus I rolled up my sleeves and looked into options that would implement error-correction.

Since I was leaning toward converting the ShapeOko into a 3D printer anyway, I came across Repetier Host. What cinched the decision for me was the fact that Fedora Linux was adding support for Repetier Host. Looking under the hood, I found the source code to be a reasonably well-written solution — understandable and hackable enough for me to build up what I needed to cobble something together on my own.

As for this build, it’s about 90% complete — I’m waiting on a few more hardware components to arrive so I can button down the frame for good (mostly waiting on the cast 90-degree gussets for the gantry). Free time permitting, I hope to be calibrating the motion and making the first test cuts with a Dremel-like router by the weekend.

Yes, I know that dinky Dremel clone is under-powered. Remember – this is still being built from stuff I have laying around as a proof-of-concept. If I can cut simple parts out of plywood repeatably and accurately, I’m good. :-)

Future plans for this machine are to convert it to a 3000mm x 1500mm frame (doubling and reinforcing the frame along its length); and maybe mount a real spindle on there -vs- an off-the-shelf router. The TinyG is more than capable of doing PWM (Pulse width modulation) to control spindle speed.