Windows Programming

I usually use Java when developing desktop software, but I recently had need to develop code that provided both a Windows GUI and also supported low-level interface with hardware connected to the PC. Java is great for developing GUIs and I still like the ancient Matisse GUI builder for Netbeans/Java Swing – I can knock out GUIs really fast with it…however, Java apps can be big and slow and interfacing Java with custom hardware is I looked into developing Windows native GUI apps in C to give really fast and small code that can interface easily to hardware…and have been pleasantly surprised.

Two things helped:

The Pelles tool is slick, fast, and provides wizards for anything you’d want to build for a Windows target. The tutorial provides loads of compact runnable examples showing how to use each widget and feature of the WinAPI. There are other good WinAPI tutorials as well such as The Forger’s tutorial.

Next: find a GUI builder like Matisse for WinAPI. Pelles includes a resource editor but not a full GUI builder.

Mustool == Junk?

This is my second post about disappointing Mustool products (there won’t be a third).

I use stereo optical microscopes when doing surface-mount electronics (SMT) assembly and inspection. They work well, but are large and heavy. I decided to try one of the inexpensive “digital microscopes” that was reviewed well and looked like it had a large relief distance (the distance between the lens of the microscope and the item being viewed) which is important so you have room to work.  I ordered the Mustool G600 from Banggood.

Mustool G600

The good: the aluminum stand was easy to assemble and they even included the required Allen key.  The stand works well, adjusting the microscope height is smooth, and the relief is indeed quite good.  When I first turned it on, the buttons were a little unresponsive and it presented a menu that I couldn’t navigate, but after turning it off and back on, and adjusting the smooth focus knob, the microscope gave a clear, sharp picture.

Small bad: I didn’t realize how beneficial stereo is to SMT work.  With a mono image, even though it was sharp, I didn’t have any depth perception which made it hard to tell how high above the board my soldering iron and solder were.  It’s possible I’d get used to this but I’ll never know because…

Big bad: I played with the microscope for 5-10 minutes and then turned it off.  When I tried to turn it back on…nada: just a black screen.  I tried charging it, resetting it, pressing every button combo I could think of and it just remains unresponsive.  So it’s dead.

The worst: I received the package during the week and didn’t have time to play with it until the weekend which was past the Banggood 3-day warranty period – yes, you read that correctly: 3 days.  So any money I saved by purchasing on bangood is now easily offset by the $42 wasted on this piece of junk – not to mention the time and aggravation.

This is my second extremely disappointing mustool purchase; the first was their MT8205 scopemeter – which was also a complete waste and you can read about it in my blog. I will not purchase anything made by Mustool again; fool me twice…shame on me.

Until now, I’ve been a big advocate of banggood; they refunded my purchase price for the MT8205 – which reinforced my faith in them as a seller.  It’s a shame they are now carrying such junky products and chasing them with a ridiculous warranty.  I’m going to have to re-think purchasing from Banggood since the same products are usually available on amazon with reasonable warranty and return policies.

eBay crooks: flyxy2015, 3c_topstore

I buy a lot of gear on eBay and the overwhelming majority of sellers are excellent, but every now and then you meet the crooked ones.  This post is to help others avoid getting scammed by two bad sellers: flyxy2015 and 3c_topstore:

1) Seller flyxy2015 sold me a 10MHz OCXO distribution amplifier.  However, the OCXO I received was far off frequency and not within the correctable range.  The seller offered to ship a replacement for the internal Dapu OCXO; I took him up on this and of course what he really did was wait out the eBay return period without ever sending the replacement part.  Scam artists like fly-xy are part of why people are reluctant to use eBay.

2) Another seller (3c_topstore) sold me a scam graphics card.  The card had been altered to appear to be a more expensive card so it sort of worked, but it crashed whenever the driver tried to use the more advanced features or full memory of the card.  It was tricky to figure out what was wrong so by the time I understood the problem, the eBay return period had expired.  Fortunately, PayPal has a longer return period, but they require shipping the card back which would have cost 3c both the shipping and the original price in order for him to get his useless card back.  I thought I’d be a nice guy and offered instead just to split the loss with him…and sure enough, after I’d declined the PayPal return, he went silent and left me stuck with the card.

So in short, a popular eBay scam appears to be to sell you bad product that is either not obviously bad (so it takes you a while to discover it) or to otherwise stall until the return period expires.  eBay needs to do something about this because it is a growing problem that will ultimately hurt their reputation.  Until they figure it out, if you want to avoid crooks, stay away from eBay sellers flyxy and 3c_topstore.

Caveat emptor.

MT8205 review – piece of junk

I’m always looking for bargain test equipment, and sometimes I get burnt; hopefully this review saves you from wasting some time and money.

I bought the Mustool MT8205 from Banggood who advertise it as a “2 in 1 Digital Intelligent Handheld Storage Oscilloscope Multimeter AC/DC Current Voltage Resistance Frequency Diode Tester”; it sells for just under $50 shipped.  I love Banggood and have had lots of good experiences with them, but buyer beware: this product is a waste of money at any price.  (Update: Although this product is something to avoid, Banggood is wonderful and I highly recommend them.  They took this product back at their cost just because I was unhappy with it…now that’s great customer service!)

Mustool MT8205

While it looks good, feels solid, and comes with nice probes and case, it simply isn’t useful for making measurements as my tests below will show.

Let’s start with how it works as an oscilloscope since that’s the interesting feature of this device.  When I ordered it, the ad said 200ksps which would suggest it is useful to look at signals up to at least 20kHz…not great, but at good enough for looking at audio and PWM waveforms.  However, as the ad now says, the analog bandwidth is limited to 10kHz.  A 15kHz signal is severely distorted and it won’t even try 20kHz.  A 10kHz ramp looks just like a 10kHz sinewave.  See the pictures below where I feed it a 15kHz sinewave and a 20kHz sinewave from a Rigol signal generator showing that the bandwidth is indeed limited to 10kHz (i.e. useless).  There are other issues too: there is no trigger control, the signal is always AC-coupled (so you can’t measure anything DC), there are none of the controls you’d expect to find on an oscilloscope and it’s too slow for virtually anything these days.  The scope feature is a complete bust.

To add insult to injury, the multimeter functionality is useless too!  The readout is only 3 digits and even those aren’t accurate!  I hooked the meter up to a lab voltage standard and checked the output with a calibrated 7-digit HP bench meter.  The 10.0000V standard was dead on with the HP meter, but read 9.95v on the Mustool.  What’s worse, when I used it to measure 2.5v and then used it to measure 10v again, it took several (I’m talking 4-5) seconds for the readout to gradually climb to 9.95.  Useless.


  • Large/heavy/manual-ranging multimeter
  • Only 3 digits, only 2 of which are accurate (see 10vdc lab standard)
  • Incredibly slow: takes several seconds for voltage to read properly
  • Limited to 10kHz analog bandwidth
  • AC coupled only
  • Oscilloscope has no controls so not even useful as a teaching tool

10VDC from Lab Standard

15kHz sinewave

20kHz sinewave


I’ve been looking for a relatively lightweight cross-platform embedded development environment for some time.  I target mainly STM32, ESP8266, and ESP32 platforms and use both Linux and Windows development machines.  For various reasons I’m not satisfied with the existing solutions:

  • Arduino – too primitive
  • EmBitz – very nice but no linux and no version control integration
  • VisualStudio+VisualMicro – nice but no linux support
  • Eclipse/NetBeans – too heavyweight and poor embedded integration

So I tried the Atom editor with the PlatformIO-IDE plugin on Windows workstations and on a low-end linux laptop and it works nicely!  I’ve since switched to the VSCode editor which I prefer over Atom.  The install, initial test build using the Arduino Core, and download/run worked well for an ESP8266 target.  I have since used it for Java projects as well.  VSCode is cross platform (Windows/Linux/Mac), and lightweight/fast.

I consider several features essential for an IDE:

  • code completion
  • source-level debugger integration with svn
  • version control integration
  • serial upload/monitor integration (especially for EspressIf platforms)

The community (free) version supports code completion, version control integration, and a rich set of plugins although it clearly prefers git; the subversion plugin doesn’t work very well (see below).  The debugger is not available in the free version and requires the Basic paid version ($10/mo).

The version control integration is spartan and on Windows relies on TortoiseSVN (which is good to install anyway).  Tortoise really needs PuTTY installed too if you use an svn+ssh server.  The right way to do it is to generate a signed certificate and install it on your servers so ssh access is seamless as described here or you can do it in cygwin:

  • ssh-keygen -b 4096 -t rsa -N ”
    (creates private & public certs: id_rsa and in ~/.ssh)
  • ssh-copy-id
    (install your public certificate on server

Once your certificate is installed (puts public cert into ~/.ssh/authorized_keys on your server), logins no longer require password authentication.  Note that if you use cygwin or linux you’ll need to convert your key to be PuTTY compatible…see here.

The serial monitor isn’t as friendly as I’d liked, but is actually quite effective using hotkeys.  See the bottom of this page.

A good video on installing for ESP8266 is here and another on installing external libraries here. Information on managing the Arduino Core is here.

A video on STM32 support is here.


Home Automation

Several  years ago, we had a water leak in an upstairs bathroom that did a surprising amount of damage overnight.  We had it all repaired, but I resolved to put some automation in place so I would know much earlier if something was going wrong in the future.  I wanted a way to monitor my home remotely using my cell phone and to receive push notifications and an audible alert (even when I am home) if something’s going wrong.

I had experimented with home automation years ago using X-10 which was neat, but their current-carrier and wireless technologies weren’t quite mature enough and the system was problematic.  Technology has come a long way since then so I decided to try home automation again.

I didn’t want WiFi devices for a host of reasons including security, wireless range, and battery life, so I chose Z-Wave for the wireless technology and deployed a Staples Connect hub (made by D-Link).  That worked well for several years until Staples discontinued support; they handed support off to another company, but they are gone too and DLink won’t support it so the Connect Hub is now a $99 brick.  My lesson: don’t buy Staples branded products…and shame on DLink for allowing Staples to use their brand; I bought it because I trusted the DLink brand.

Fortunately, since Z-Wave is a standard, I only needed to replace the hub, not all of the sensors and controls.  I replaced it with a Wink Hub which is also multi-protocol (Z-Wave, Zigbee, WiFi, Lutron, Kidde,…). It was incredibly inexpensive ($34 on Amazon Prime), but I had some challenges getting it going (see below); it’s saving grace is that Wink tech support is the best I’ve ever encountered.  More than once during the first week of ownership, I was ready to ship it back to amazon, but each time, a call to support quickly solved my problem and left me enthusiastic about Wink; they answer the phone right away and their techs are patient, knowledgeable, and get the problem solved quickly; I’m impressed.  If it continues to work well, I’ll buy their newer Hub2.

I installed water leak sensors in the bathrooms and in the basement by the hot water heater and then added motion and door switches, light controls, door locks, etc..  The Z-wave devices work well, with long battery life, excellent wireless range, and very low latency.  So far I have the Wink hub working with:

As mentioned above, the Wink Hub has had some foibles too:

  • Initial Firmware Update was a bear; although my hub was brand new with a blue dot on the box, it needed to update its firmware and couldn’t do so using my access point.  Even though it was connected to the WiFi network (solid yellow light), it couldn’t reach the Wink servers (which would yield a solid blue light).  I eventually succeeded and it worked fine after that, but here’s what I had to do:
    1. turn off my wifi access point to force the hub to disconnect (blinking purple light)
    2. set up a cell-phone hotspot configured for 2.4GHz
    3. Run the wink app on another cell-phone and use it to configure the hub to connect to my hotspot and through it to their server (blink yellow->solid yellow->blink blue->solid blue)
    4. Allow the hub to download its new firmware (blinks all sorts of colors as it updates…when finished, it returns to solid blue).
    5. Turn off the hotspot to force the hub to disconnect (blinking purple)
    6. turn my wifi access point back on
    7. Use the wink-app to reconfigure the hub to use my access point wifi (blinks yellow->solid yellow->blink blue->solid blue)
  • Adding Devices: Initial paring of new sensors/devices can also be finicky; once a sensor is paired, it seems to stay paired and work well; the magic formula seems to be:
    1. use the wink app to put the hub in exclusion mode (blinking blue light)
    2. press the z-wave button on the new sensor once every second or two until the hub light turns green
    3. use the wink app to put the hub in incusion mode (blinking blue light)
    4. press the z-wave button on the new sensor once every second or two until the hub light turns green
    5. If the above doesn’t work, try power-cycling the hub and then trying again.
  • The Wink App: seems to stop working once in a while and I have to shut it down via Android and start it again.

Frequency Counters

Although less exotic than the SA and VNA tools I use during development, I find I make use of basic frequency counters pretty often (mainly to calibrate equipment).

A frequency counter does only one thing: measures the frequency of an RF signal.  What’s important for a good counter is frequency range, timebase accuracy, speed of measurement, and of course cost.  I try to only purchase counters with an OCXO frequency standard although a good TCXO is often sufficient.  An external reference input is very useful when you need very high precision so you can slave the counter to a higher accuracy lab frequency standard (OCXO, GPSDO, or Rubidium).

Having had quite a few counters, I’ve concluded that older HP/Agilent counters offer the best value, especially if you’re willing to spend $200-250 on eBay for one with their excellent OCXO timebase option (4).  If that price is too high, you can find lower priced counters, but I think it’s a mistake to buy one without at least a good TCXO and/or external reference input.

I have a couple of HP5385A counters that work to 1GHz; one has the TCXO timebase and is quite accurate; the other has the superior OCXO timebase.  I also have an HP 5386A with OCXO that is good to 3GHz.  For higher frequency measurements, I have an HP 5347A that integrates a power meter and frequency counter up to 20GHz, its maximum frequency resolution is 1Hz (plenty for higher frequency measurements); it only has a TCXO timebase so I almost always use it with an OCXO or rubidium lab standard; it is larger/heavier than the other counters, but it’s hard to get an affordable counter with that much bandwidth.

For counters that are no longer officially in calibration (per certificate), I use a Trimble Thunderbolt GPS-disciplined oscillator (GPSDO) to calibrate them annually.

Pocket Multimeter

During robotics season, I carry a multimeter in my backpack and as much as I love the UNI-T meters, weight and size start to matter when you carry something all the time so I wanted a smaller, lighter multimeter that still offered full functionality.  In my car, I keep an old Triplett 2030-C which has served me well over many years; the Aneng AN8203 is a knock-off that can be had for under $10 on AliExpress; both have frequency and duty cycle measurement (important for looking at PWM signals in robotics) along with the standard voltage/resistance/continuity and capacitance…but the Aneng has no current measurement where the Triplett does (however the scale isn’t useful for robotics).

Cheap Ultrabooks

I’m not a big fan of expensive laptops.  Computer equipment depreciates at a terrific rate and portable computers are subject to loss, theft, and damage so I want the least expensive machine that will do the job.  That said, I also want it to be compact, light, fast, and last all day on a charge (i.e. an ultrabook).  This may seem like a tall order, but I have found three solutions that I’m happy with.  All involve hacks:

Toshiba Chromebook 2

For MS Windows: The Toshiba Chromebook 2 Model CB35-C3350 has a Core i3-5015U with 4GB DDR3 and a 13.3″ 1920×1080 IPS display.  It’s meant as a Chromebook, but you can replace the internal SSD with a larger one (necessary for it to be useful and I had a spare 64GB M.2 drive on hand) and thanks to, you can install Windows, turning it into an excellent Windows ultrabook.  The main downsides are limited battery life (4-6 hours) and as I’ve gotten older, I find that 13.3″ screen is a little too small.  However, it is extremely portable, fast, sleek, and can regularly be found on eBay for $250-300.

Acer Cloudbook 14

Ultra-cheap-book: Ubuntu Linux: The Acer One Cloudbook 14 has only 2GB of RAM, a slow 1.6GHz Celeron N3050 processor, 14″ 1366×768 display, 64GB SSD, and 10 (real) hour battery life.  So other than the battery life, this is low-spec.  It’s woefully under-powered for running Windows and slows to a crawl as soon as you start doing anything with it.  Fortunately, it is better spec’d for Linux and once I loaded Ubuntu, it was surprisingly snappy and effective.  My old eyes appreciate the larger screen and the very long battery life makes it a great knock-around machine.  You can’t use it for for much software development: the big IDEs like NetBeans and Eclipse are too much for it, but most other apps run just fine.  It can often be found on eBay for $50-$100 and it’s tough to beat that for a thin, light, all-day laptop that’s practically disposable.

Gallium (Ubuntu) Linux: Last but not least is the Acer CB3-431 which is a 14″ Chromebook with a full HD screen (1920×1080), 4GB of RAM, 32GB eMMC storage and a quad-core Celeron N3160 1.6GHz processor; the case is aluminum and looks pretty snappy – an apple knockoff. This is my current carry machine.

Acer Chromebook 14

You can follow these instructions which use Mr. Chromebox to replace the BIOS and install Gallium OS (a great Ubuntu variant designed for Chromebooks) and turn it into a real linux laptop while keeping ChromeOS as a bootable option.  Because linux is relatively lightweight, even with LibreOffice, Slack, Thunderbird, Wine, EmBitz, Eagle, Oracle Java, NetBeans, Tomcat, Arduino, and a full gnu cortex cross development environment installed, I still have used only 50% of the Gallium root partition and it runs fast.  Battery life appears to be > 8 hrs.  Dual-boot has come in handy (it let me recover when a grub update prevented linux from booting) so I recommend it as well as setting the GBB flags as described in the instructions.

Note: if you update grub, it will ask you which partition to use: select the one that covers the entire disk (mmcblk0 I think), not just linux partition (mmcblk0p7).  If you select the wrong one (or both), it will not boot linux.  If you’ve dual-booted, you can reboot to chromeOS (ctrl D at startup screen) and recover.

If you are OK with (or prefer) linux on a light, inexpensive laptop, the Acer CB3-431 is a nice choice and is now the laptop I regularly carry.  It is commonly available “recertified” from vendors like NewEgg for $180 making it not quite disposable, but still very inexpensive. The main downsides are the non-expandable storage (32GB) and the lightweight processor, however I’ve found it extremely usable, all of my apps fit nicely and run at acceptable speeds.  Unfortunately, 1920×1080 is proving tough on my over-50 eyes, even on a 14″ screen.

So I’ve ended up with a Chromebook running Linux, another running Windows, and a Cloudbook running Linux…none of them running what they were intended for…weird!

What I’m still looking for is a thin laptop, less-than 4lb, 15.6″ screen with full HD, Core i5 processor, 8GB of RAM, 128GB+ of SSD, and 8hr+ battery life…for around $300.  Suggestions are welcome!


LG Ultrawide Monitor

There is no such thing as too much monitor…although I think I’ve come close this time.

I bought an LG 34UM69G 34″ ultra-wide monitor for the office from amazon for $215 on Cyber Monday. It has 2560×1080 resolution and is indeed very very wide (21:9 aspect ratio). It’s taking the place of another high-def (QHD) monitor with a more traditional aspect ratio.

When I first saw the box, I worried that it might not fit on my fairly large desk, but I was pleasantly surprised; the ultra-wide monitor fits nicely and looks great. The panel itself had no dead pixels and is very thin with almost no bezel so it looks and feels smaller than the 28″ monitor it is replacing. The base is elegantly designed, feels solid, installs with no tools, and has good adjustments for height and tilt. The internal speakers are good enough that I’ll get the external speakers off my desk; the width helps with the stereo effect.

The full resolution is obtained using the included (but somewhat short) HDMI 1.4 cable and it even works with my ancient Zotac GeForce 210 video card (something that needs to be upgraded soon). Overall, this monitor is a winner and provides a lot of screen real estate without making the text so small that my over-50 eyes have trouble. I don’t think I’d want anything wider or higher resolution (as that would cause text to become too small). Recommended!