Edoceo's Blog | Entrepreneurship, Engineering

Windows 10 Hates Dual Boot

The title basically says it all. Windows 10 (and 8 and 7) all really don’t play nice with Dual Boot – despite what Microsoft claims.

First, the failure of Windows 7 to handle dual-boot nicely caused some (many) Windows 7 updates to fail on my Lenovo Y480. I kept getting the error where the updates would try to apply, then fail, then roll back and (after a few reboots) Windows 7 would finally start. This in-turn caused the my Windows 7 system to never receive the Windows 10 update notification – which was actually a bit of a blessing.

But finally, in June 2016 I wanted Windows 10. And the Upgrade wouldn’t work; and it would fail if I tried from USB. The installer indicated I would have to start over and would wipe the disk! I even took this computer to the Microsoft Store – where I was promised a free laptop if they couldn’t complete the upgrade in one day (I whined about it on HN). Well, the of course the Microsoft Store couldn’t figure it out – and weaselled out of the free laptop deal.

After I discovered the Windows failure to handle dual boot issue I was able to get my Windows 7 updated. Then I was able to complete the Windows 10 upgrade as well. But, Windows 10 updates still fail – unless one makes special accommodations for Microsoft’s Developer Arrogance.

Dual Boot Fails

What Microsoft understands as “dual boot” means Windows is the Active Partition and nothing else can claim this. A problem for me; see I use syslinux as my bootloader, /dev/sda1 is the bootable partition and it’s formatted with ext2 (yes 2). Windows 7 (and 10) have updates that, for some reason, need to Windows on the bootable partition. Not all updates; only some. On Windows 7 the blocker was some patch to SHA2 and I’m not sure about what causes the issues on Windows 10 – probably all of them.

How to Get Updates to Work

First, at your boot prompt choose Windows. Then in Windows open the Disk Manager and set the Windows partition (/dev/sda3) to be the bootable one (aka: Active Partition). Then reboot, Windows should automatically start. Then wait for the updates and the requisite reboot. Now your Windows 10 is updated! To switch back to your desired bootloader you must boot from some external media, then configure your preferred bootable partition – Windows cannot change the Active Partition back to /dev/sda1 because the Disk Manager is a broken pile of garbage. This was a frustrating path.

Magic MBR from Syslinux

The above process sucks. If you are missing your bootable USB tool then you’ll not be able to switch partitions until you can boot from something smarter than Windows. There is a chain loader in Syslinux but I’ve not been able to get that to work – and trick Windows.

Windows as VM Only

But, if you use a toolkit like VirtualBox or KVM to boot Windows from it’s own partition then everything is great. However, now you cannot go back to booting Windows direct anymore – because Windows is hyper-sensitive to hardware changes.


Windows does not play well with others – NEWS! The work-around is basically allocating dedicated time & resources to running a simple update – or run Windows in a VM – or figure out some bootload trick.

I’m Done with Google – Takeout

After building the huge list of Apps and Services you have connected with your Google Accounts (https://www.google.com/settings/dashboard) you then have to download whatever is left using the https://takeout.google.com/ Takeout tool.

Once you have this download and have reviewed everything on the Dashboard it’s time to delete the designated account from your Google Apps Domain.

Repeat as necessary. For us we had three or four idle accounts in our Google Apps before cleaning this up. For the ones that are necessary you can move the Data to another account that you can control – within the domain. I’m not sure how to move data to an account outside the domain.

I’m Done with Google – Cloud Print

One of the easiest, and most frustrating, “services” Google offers is Cloud Print. It’s basically junk. The Internet is full of dreaded printer offline issues and forum posts about it random loss of functionality.

I enjoyed the promise of Cloud Print but it never delivered. I wanted to print to my office or home printers from anywhere. But Cloud Print would drop connections randomly; printers would be offline and require some magic incantation of un-install, reboot, purge Chrome cache, manage devices – across Mac and Linux systems. This was actually one of the easier services to drop.

Like many folks in the “tech” space I’ve got a VPN method into my Home and my Office. This VPN is powered by a Raspberry Pi running OpenVPN. So, simply adding CUPS to this machine and plugging printers in via USB got that part sorted.

It was actually one of the easier Google Services to drop. My frustrations caused by random things breaking has been greatly reduced. Simple and easy.

I’m Done with Google (Part 2)

A long while ago I wrote about being Done with Google. They have simply taken over too much for my taste. Frankly however, I went “all in” on Google around 2006 or so. I moved many domains into the Google Apps and enjoyed all the services they offered. But, as they grew these services suffered; my most critical issue then was that inbound messages were getting dropped (because of how Groups had changed for Businesses over time) – it negatively impacts my customer service. So I started the migration out.

First let me say that you cannot escape Google 100%; just not possible. If you want to have a business presence on the Internet you must engage with Google and other large players (Twitter, Facebook, etc). So, we still have to maintain a Google Account – but we are moving towards one, based on a Gmail address.

As I mentioned before I have/had a number of domain accounts with Google using Mail and, as it turns out, many other services. Some I could just drop and had so little content I didn’t care but for the Edoceo brand I had loads of stuff – from Blogger (migrated to WP); Apps on the Play Store, YouTube, Google+ Pages and all that jazz.

Using a single “unified” Google Account (already existing) I started with a spreadsheet tracking all domains I had moved into Google (>5, <10) and then all the Services in there; then all the Accounts.

Last entry on this topic was over a year ago. It’s taken that long to audit and build this list. It was quite shocking to see how much interaction/integration with Google one human (or one company) has.

Stay tuned for the longer stories of migration of various accounts & services.

CyberCoders Shameful Recruit Solicitation

I’ve got a role as a CTO (among other things). In this role one of my duties is finding and acquiring talent for our engineering team. Functionally this duty involves posting job applications, reviewing resumes and candidates. Additionally it involves fielding emails from recruiters from companies such as CyberCoders, TopTal, various boot-camps and others.

Finding talent is hard, there is a good book about the problem: Smart & Gets Things Done I find myself agreeing with Joel more often than not. These “flashy” recruiting firms don’t make it any easier – quite the opposite in fact.

I don’t respect the work of CyberCoders. It’s not recruiters that bother me. In reality, good recruiters are totally worth the money they earn – which is true of anything: Quality has Value. Durrrr. The problem with CyberCoders specifically is this email footer.

The candidate identified in this email is a recruited candidate of CyberCoders, Inc. If the candidate is hired for any position whether part time or full time, as “Contract”, “Direct Hire”, or in any other capacity by your organization or any affiliate within 12 months from the date of this submission, your organization will owe a fee in accordance with CyberCoders’ standard Fee Agreement. If you have any questions about our standard Fee Agreement, please check our web site www.cybercoders.com or contact 949-885-5151.

Look at that. Read it again. CyberCoders has now injected themselves into any financial transactions I may have with this candidate for the next 12 months. “Oh, but they need to get paid for their services” I hear you saying. People should be paid for services rendered. However, we’ve never engaged CyberCoders. We’ve requested many times for them to stop sending us this spam. We have rejected their solicitations multiple times.

Shit got real today. Yet another spam from CyberCoders identified a candidate for us. This candidate is a person I’ve known since 2012! We are directly connected on LinkedIn. Now they are blocked. It was embarrassing to tell them that I couldn’t consider them for any position for at least the next 12 months. At this point any candidate who arrives via CyberCoders has to be immediately rejected – and blocked for the next 12 months. We’ve had to start keeping a spreadsheet.

It also makes me wonder if CyberCoders is just surfing my LinkedIn and sending me links to folks I already know, maybe with some algo to identify specific connections. I mean, I could write this code, so I’m sure they could too.

for C in djb.connections:
    if is_viable_candiate(C):

Issues Migrating to CloudFlare

I’ve been working to migrate one of my systems over to CloudFlare which on it’s face appears to be a pretty good service. I created an account, entered my payment information and began evaluating their services. I was not impressed with help pages that had images fail to load (due to 404s). Pressing buttons that generated some vague error message (request failed #1053) and froze up pages were also a bit of a turn off. Then the real pain started.

Switching NS

The first thing that CloudFlare is forcing me to do is flip over to using their NS. It’s handy that they’ve crawled my existing DNS and imported a bunch of the necessary records. That is a good thing. However, I don’t want to migrate NS until I’m sure this is the right path. Switching NS takes about 24 hours, so if there is an issue I’ll have to wait another 24 hours to roll-back the changes. I’m not willing to risk my site availability for 48 hours.

Blocked on SSL

Even without switching the NS records we can see what IPs CloudFlare would resolve my host to (using dig $hostname @ns.cloudflare.com). I then tweaked my /etc/hosts file to reflect that and attempted some connections. CloudFlare assures me that SSL will work. However, CloudFlare SSL doesn’t work until the NS has been switched. And I cannot switch the NS until I’ve verified that SSL works – and I don’t like to wait 24-48 hours to determine if I just broke a web-application that generates revenue.

Support Fails

I asked for clarity on the situation from their support team and explained my risk-averse position. They basically told me just to flip the NS. I don’t think the understood the request.

Sales Support

I contact their sales team. I’ve signed up for a paid product; the marketing materials said that things would be possible – things that are not working. The sales guy reported that with CloudFlare the SSL and NS are tightly integrated – only after NS is switched and verified can the SSL be issued. It was not a joke. First switch NS and hope it works; after NS has been moved (and traffic is routed via CloudFlare) can the SSL be issued. This whole thing runs on SSL. So switching means that I’m exposed to risk that my NS/DNS stuff gets messed up and that while that is happening the SSL will be broken too.


CloudFlare is a reasonably good product and the protections they offer are good and priced well (at $200/mo). This onboarding process sucks however. It’s not even possible to evaluate the outcome of the work you will be attempting – to ensure that things will go smoothly. If there was a mistake it would cost me more than I pay CloudFlare in a year.

To actually evaluate this process I’ve had to start off with a new, throw away, domain; get it configured similar to my primary, purchase (and wait) for it’s SSL certificates then flip to the CloudFlare NS, wait to see what happens – all while monitoring for breakages on this test domain.

The lesson for other technology firms is: Don’t make the risk of switching cost more than the services provided; Allow customers to get a full evaluation rather than forcing them to take high-risk first steps – just on on-board with your product.

Getting Fucked by Stripe

At Edoceo we’ve been using Stripe for a very long time (2, maybe 3 years) without issue. Part of that may have been because our volume of CC payments was so very low. For our little spin-off projects we’ve mostly used PayPal and using Stripe for consulting invoicing was dumb – most clients there paid via wire.

A few months ago we started using Stripe as they payment gateway for our marijuana regulatory compliance software: WeedTraQR – which is sold as a SaaS model.  They have just kicked us off are giving us five days. You’ve seen this warning, Stripe has threatened other Start-Ups.  So we were sort of prepared.  Here is the message we got – it’s the same copy they send to everyone.

Hi David,

Thanks for signing up with Stripe!

Unfortunately, we will need to stop offering service for edoceo.com/. Stripe can only support users with a low risk of customer disputes–after reviewing your submitted information and website, it does seem like your site presents a higher level of risk than we can currently support.

That said, we understand that there may be some work involved with moving your business away from Stripe, and we’re happy to help out with this process by giving you 5 days to switch to a new provider. After that, you won’t be able to accept additional charges on your account, but we will continue making transfers to your bank account until you receive all of your funds[1].

We’re sorry that we can’t offer ongoing service, and we wish you the best of luck with your business.


[1] https://dashboard.stripe.com/transfers/overview

Why were were booted from Stripe?  Is it because we are in the marijuana industry?  We don’t sell pot, we sell software. They made no mention of this. We have zero customer disputes over our entire history.  In point of fact this is not even a customer dispute!  We were only trying a partial refund.

We moved a customer from one subscription plan to a less expensive plan.  Internally Stripe handles all this magic, crediting the customers account and pro-rating the next subscription.  This doesn’t issue an actual refund to the customer – it’s just an accounting trick inside of Stripe – they keep the money the whole time.  Neither Edoceo (or WeedTraQR) not the Customer has access to these funds (about $600) until the next subscription cycle.  I had simply inquired about how to issue and ACTUAL REFUND for the difference rather than leave the funds un-allocated in Stripes pocket.

It’s pretty clear to me, if you use Stripe and then have ANY normal business issues they get ready to boot you.  If you want to issue an actual refund for the difference between two subscription plans and not use their pro-rated magic it’s also a red flag.  Even when it’s not a customer dispute.  Maybe Stripe makes money on the arbitrage and actually REFUNDING will threaten their business model.

Anyway, fuck Stripe.  They can shove the five day window up their ass; we’ll be moving on to providers. I’ll be encouraging the other start-ups I advise to make a contengency plan and/or begin migration process right now.