There have been a number of issues I’ve encountered recently that make me want to create this new category: That’s just wrong.

The big one I want to write is about Google, CDNs, and lazy Web Developers.

But for now – NVidia.

I went to their website to use the GeForce Experience which is supposed to make it easy to detect and get the latest drivers for your video card. But what do I see?



You’ll notice, everything is grayed out. You can’t do anything in this helpful app until you fork over some money personal information.

Thankfully, I’m not the only person who has noticed this and complained:

geforce complaints


One of my favorite comedians, Mitch Hedberg comes to mind:

I bought a doughnut and they gave me a receipt for the doughtnut… I don’t need a receipt for the doughnut. I give you money and you give me the doughnut, end of transaction. We don’t need to bring ink and paper into this

I recently made a silly mistake and forgot my private key to my Backblaze backups. Stupid me. The annoying thing is that the password is still saved on my computer, because my computer is still able to back up the files.

If you know the basics of public & private key cryptography, it becomes obvious that Backblaze must store the password locally somehow if it is able to perform a differential backup. Otherwise it would only be able to send full backups each time with the public key.

So, I asked Backblaze to help me find the cached private key (probably in some sort of hashed state) so that I could just transfer this to another computer to continue my backups. Backblaze insisted this was impossible and that there was no key stored on my computer. This means one of two things:

  • Backblaze is lying and they do store your private password somewhere

  • Backblaze is not willing to help in a case where I can prove that I am the owner of the files and simply forgot the password

Again, it would be impossible for them to actually give my password (unless they did something REALLY silly and stored it in plain text), but it should be possible for them to help me locate my hashed private key and then let me use this to continue accessing my backups.

Out of annoyance, I did a brief test in a sandboxed Windows environment and found out that the Backblaze job runner is in-fact passing a hashed private key to the server in order to perform the differential backup. Where is it storing this? I’m not quite sure. They are using some interesting tricks to store it because I could not detect any registry changes or file changes on the disk. This leads me to believe that the job runner alters a file on the computer once you enter your private key and then pulls it from there to pass to the server. I stopped trying to dig further once I proved the point.

So, now I get the joy of wiping all of my files from Backblaze and re-uploading. I very nearly cancelled the service altogether due to their lack of helpfulness. The only reason I’m staying is that it is still a good value, and it will save me time in the long run.


Tech companies need to stop using technology as a scape-goat for them not wanting to do something. I am so tired of hearing “it’s not possible” when they really mean “we don’t want to.”

Knowledge is like bricks: We collect them so we can build something.

Some people collect bricks in a few areas and can build a bridge between two bodies of knowledge.


Some people collect a lot of bricks in a single area and can reach new heights.



Some people collect a random assortment of bricks, and just use them to build a protective shield to keep others out. They might occasionally hurl a brick at others to insult or attempt to impress them.



Think about the bricks you’re collecting, and what you plan to build with them.

The Nexus 5X is a sub-par phone

I wasn’t sure I wanted to write this review, but now I’m quite certain. In the middle of writing this review I saw something I wanted to take a picture of, and of course – the Nexus 5X choked. I found myself saying “Would you work just ONE TIME!”

I’ve never been so disappointed with any phone I’ve owned before. There is (almost) no reason to upgrade from the Nexus 5 (a decent phone) to the Nexus 5X (a big disappointment).


The lesson: The Google Play Store is no guarantee that you will get a solid phone.

You are better off just going to the store and giving your desired phone a test drive. I think brand means very little these days. I believe I would have been much happier with a Xiaomi, OnePlus, Redmi, or even a Moto X.

There are too many manufacturers making phones that are too underpowered.

Below is the review I started to write for the phone, but these days I just get sick to my stomach thinking about the money I spent on this phone. Maybe these notes will be helpful to someone.

The Good:

  • Fingerprint Sensor
  • Camera is above average (when it works quickly and doesn’t freeze)
  • Good selection of Radio Bands (This phone works on certain carriers in Hong Kong, China, Israel, and Europe).
  • Volume / Power buttons are on the same side.
    I didn’t realize how great this was until I used it. My Nexus 5 had problems at the gym. Whenever I would set it on its side on the treadmill at the gym either the volume would keep getting bumped up or down.
  • Latest version of android
  • Price
    If you don’t have an already working phone, it’s not bad. But I would recommend Xiaomi, Redmi, OnePlus, or Moto X as a better value.
  • The Feel
    • It does have a nice slim feeling in the hand without a case, but you can’t use this device without one. It has the soft finish that really makes it comfortable to hold. But again, you won’t get to feel it when it’s in the case.
    • It’s Plastic instead of Metal


The Bad:

  • Battery life is pretty terrible
    Maybe it’s the latest version of Android doing this too? I’m not sure, but I can’t make it a full day unless I leave my phone in my pocket all day and never use it.
  • Slow to detect new cell networks and WiFi networks
  • Slow performance
  • SIM Card Tray finicky
  • Camera’s low-light performance is very lacking
  • Hangouts App performs worse on the 5X than on the 5 (Constantly scrolls to half-way back in the history of a conversation)
  • Very weak plastic
    I have only dropped it one time without a rubber case, and it significantly misshaped the plastic on the corner. It has sustained a few other drops within the semi-rubber case. Even with this, the plastic managed to get scratched through the case.The 5X has the nice soft plastic feel, but it is quite gooey plastic, and not very robust.
    The 6P had that shiny metal feel, but it bent in about a week through normal pocket-stress
    In general, this generation of Nexus phones doesn’t seem very good.

The Ugly:

  • The camera software stalls, and can’t be launched about 5-10% of the time
    • You will have to force-close the app or perhaps restart your phone to fix it. Say goodbye to those awesome photo opportunities!
  • Even when the camera does work, I noticed that it loses pictures if you press the power button to sleep the phone too soon after taking a picture.
  • IT IS SLOOOOOW sometimes. I really can’t believe LG would sell an “updated version” of the Nexus 5 and stick it with the same amount of RAM. 2 GB just isn’t enough RAM for a high-performance Android phone.

nexus 5x (8) nexus 5x (7)nexus 5x (6) nexus 5x (5)

nexus 5x (1) nexus 5x (2) nexus 5x (3) nexus 5x (4)


It isn’t until recently that I have learned the value of words. I found myself frequently disregarding many words because I thought they were of little value to me.

Specific names to problems, laws, programming design patterns, etc. are all just “Words, words, words” to me. I don’t care what they’re called; I want to understand the idea behind them. I want to know what polymorphism is – and I don’t care what you call it. Discarding this type of information can save brain-space, but it has a fatal flaw:

It’s not all about you!

I read an article once (the name of which I have ironically discarded) that said the age of the individual invention is over. Gone are the days that a single person will stumble across a new element, or invent a new fuel source. These days, inventions are not the product of a eureka moment – but the product of teams of scientists and/or engineers spending countless hours trying to solve a problem.

What does this have to words? Communication.

The more words you use, the less value each one has.

It doesn’t matter how much you know if you cannot, intelligently, communicate with others. I would sound insane if I described things without using any sort of vocabulary.

With vocabulary: Have you considered iterating through the items?

Without vocabulary: You know that thing that lets you do the same thing many times to many of the same thing? Have you tried using that thing?

Vocabulary is a wonderful thing. Vocabulary is the difference between having to implement a sort function in C and using MyArray.Sort(); in C#.

Take the time to learn the vocabulary with the subject matter. It will make it easier for you to communicate with others, and for them to communicate with you.

P.S. – Don’t use big words just to sound smart.

P.P.S – Don’t belittle people who don’t know the words.

P.P.P.S – Remember, it is possible to understand something without knowing what it is called.

As usual, I’ve had a lot of thoughts swirling in my head recently. It is interesting in this age of technology how many of the constraints are man-made.

Betamax vs VHS

Betamax vs VHS

There was a time when market forces dictated which products would win or lose.

The need to remain competitive created independent research & development contributed efforts which then created many competing technologies. These technologies were different at a physical level out of necessity. For example, a Ford engine and a Chevrolet engine.

In the technology and information age, it seems that many of these difference are imposed by the developers to prevent cross-compatibility. Why?

I think the basic thought process is “Why compete in the same market with your competitors when you can create your own market?”

By creating a very closed-off market, under the guise of high-performance and compatibility (Apple, Betamax, et. al), you can create an artificial barrier to entry (and exit). The key to this strategy is convincing consumers that you have something special that is worth the extra cost, and loss of control.

Another way to protect these fabricated markets is DRM. When you cannot block it physically, you can block it at the software level.

The latest example of this is Phillips implementing DRM on Lightbulbs. As usual, I’m sure this is under the guise of “ensuring a high performance system”. Also as usual, the end-users are not stupid and see it for what it is.

In my opinion, companies who do not have something truly of value to offer will protect what they are selling to try to maintain their hold on the market they have created.

The companies that listen to their consumers,  or offer true advantages, will do far better than those who try to create their own markets and strengthen their walls in an effort to keep their customers (and profits) in.

I can’t help but feel like I have been inadvertently getting prepared for what happened this weekend.

As I gear up for travel, I was running through my checklist of things to take care of. One of these things was my laptop that likes to immediately shutdown when the battery hits 40%. Yes, it is quite annoying to have your computer tell you “You have two hours left” and then go black. This simply will not do for travel. I was hoping I could just send the battery back, but GIGABYTE insisted I send the entire laptop and AC adapter.

Thankfully, I’ve just finished setting up my NUC.  It’s a good thing I decided to go with a desktop version of Linux, because it’s my main system now. So, over this weekend I’ve had to back up my data, image a laptop, convert it into a virtual machine – all of which I’ve written blog posts about. Last but not least, I also had to get my current time-waster (Path of Exile) to run on this machine.

In a few words: I am impressed. This mighty little NUC has been able to run my P2V’d laptop (Windows 7 64 bit) as well as play Path of Exile (thanks to wine, winetricks, PlayOnLinux, and some helpful forum posts).

Is it perfect? No, but it’s also not permanent. It is a pleasant surprise to see how far things have come in the last few years, from virtualization, to small computers, and even the impressive community of gamers that is still growing within the Linux realm.

I needed another linux server …

I needed to test some new hardware to stay up to date …

I wanted to play with a new toy and I may be traveling soon, so it has to be compact. I decided on the Intel® NUC Kit D54250WYKH and ordered the parts off Newegg (instead of Amazon because Newegg was $50 less due to taxes).

First off, Kudos to Intel on the unboxing experience:

Now I have a compact, i5 based machine with an SSD and 16 GB of RAM. I’ve used VirtualBox in the past and recently I’ve been playing with clouds like Azure and EC2. So, why not make my own little cloud with this shiny new box? This way I don’t have to worry about shutting down my virtualized servers when I want to run to a coffee shop with my laptop.

I wanted to expand my knowledge on the topic, so I looked into some more heavy-duty Hypervisors like: Xen, ESXi, and Hyper-V. It was a long weekend with lots of pain, tweaking, and it resulted in some realizations.

The two criteria that ultimately made the decision were: I need to be mobile and may have to rely on wireless, and I’d also like to use this box as an HTPC to play the occasional movie on my TV.


I’ve left this purposely vague, because it requires a bit of explanation. In short, Xen is still going through some changes involving Citrix’s proprietary version (XenServer), XenServer.Org, XenProject, and XAPI. The short of it is that Citrix’s XenServer has a great GUI management tool (XenCenter). I was really hoping for a GUI since this is just for my home lab.

Here’s the problem: I need to be mobile and may need to rely on wireless. The version of Linux used by Citrix’s XenServer uses a kernel that is too old to support my wireless card. I was able to install the XenProject’s version of XenServer on a newer Linux distro, but this doesn’t have a GUI management interface by default. On top of this, there is currently some shifting going on between the tool stacks used to admin Xen through the command line.

This only covers the wireless part, now what about connecting to a TV? Xen actually seems to have good support for this type of pass-through, but I wasn’t able to get this far. Long story short, Xen left me feeling like I was in a store that was doing some serious remodeling.


I started out with Hyper-V Server which is a stripped down version of Windows Server running only Hyper-V. The issue with Hyper-V is that it doesn’t come with a GUI to administer it on the server itself; you have to connect remotely. What’s more, it doesn’t have any wireless capabilities built in. I can attest that installing drivers and the wireless services in the Server Core environment is no picnic, but it is doable. Next, it turns out that remotely controlling Hyper-V (pretty much) requires a Domain to be set up. Again, this is getting beyond the complexity of what I want for an initial home lab. I tried Windows Server 2012 + Hyper-V and the results were about the same

Though, I am happy to report that Hyper-V Server took under 500 MB of RAM and had little CPU overhead. The Windows Server 2012 + Hyper-V had similar requirements, which I was pleasantly surprised by.

The Choice

The weekend was nearing the end, and even though I knew after Xen that I would probably not be able to use any of the enterprise-grade Hypervisors for my home lab. On the bright side, I was able to play with an unused box to get a taste for them.

My ultimate decision was that if I wanted to be able to do HTPC and Virtualization with WiFi support, I’d probably be stuck with VMware Workstation or VirtualBox on a Linux host machine. A bit of research showed that both of these products seem to have closed the performance gap when compared to the Type 1 (bare metal) Hypervisors. Furthermore, VirtualBox seems to have closed some of the performance gap with VMware – one article I read showed only a ~10% difference in a few benchmarks.

So, I decided to use VirtualBox for now – and if I really need some extra features and performance I can pay to switch to VMware later.

Remember I said I wanted a nice GUI? Enter phpVirtualBox. This gets me closer to running a headless virtualization server because it’s SUCH a nice web interface.

End Result:

Here’s a screenshot of phpVirtualBox on my NUC with Xubuntu as the host OS, a Windows Server 2012 VM with IIS and an Ubuntu 14 LAMP server. All of that packed into this tiny box, and using less than 4GB of RAM!

NUC Picture



I think I’ll be giving Xen another try someday.

Like e-mails, blog posts should not be written while angry. Because my career isn’t on the line here, I’ll go ahead and break that rule.

It all started when I began working with two developers (Mike and Tiffany) on some projects.


The problem?

They use Git, I use Mercurial.

After doing a lot of research comparing Git and Mercurial, I decided to just go with Git.

In total, I’ve spent about 20-30 minutes of my life learning and figuring out issues with Mercurial.

In the last few weeks, I’ve spent at least 2-3 hours with Git because it has been a hassle each time I need to pull updated from the origin, or push my changes.

These were all simply annoying until the fateful evening of 9/16/2014.


The horror

I had done a few hours of work over a few nights trying to work out some bugs, and I finally went to commit because the bugs were gone. I committed, and went to bed.

(Note: Some people will argue that you should commit every hour or two, it’s a VERSION control system, I don’t believe in saving half-working code because I’m going on a lunch break)

Tonight, I launched my solution file in Visual Studio only to find out that my projects weren’t loading. “That’s strange”, I thought. Then I proceeded to look inside the project directory and gaze upon the bareness in shock. It was gone, all gone. Somehow, only a few of the publishing directories and my SLN file were left intact.


The real lesson

Now, I’m sure at this point the Git afficianados reading this are on the edge of their seats screaming “YOU PROBABLY RAN … COMMAND! IT’S YOUR FAULT!”

Ok, I’ll take the blame. I could learn more about Git. I could also spend time doing a lot of things instead of writing code like I want to. Refer to my figures before – I’ve spent about 20-30 minutes reading Mercurial documentation and have not had a single catastrophic failure like this in 2 years. I’ve spent far more time than that on Git, and in less than a month I’ve had a catastrophic failure.

The lesson? Use what works for you! Maybe I’m just not wired in a way for Git to make sense, that’s OK, because Mercurial does.

So, don’t worry about what the “cool kids” say is the best Version Control System – just make sure you’re managing your code in a way that works for you.

The moment this happened, I couldn’t help but remember one of the posts I read while researching this. Here is an excerpt from a Stack Overflow answer to the question “Is there any harmful commands  using Git and HG” :

In short:

  • Mercurial is safe by default, but adding chainsaws can completely break it.
  • Git is built out of chainsaws from the ground up, increasing apparent danger, but there are safeties.


The solution

Some of you may be wondering what I did to solve this issue. I spent a bit of time trying to figure out what I would do as well. Then it hit me. I think I’ve written a blog post about this before…

I have my Backblaze set to automatically back up my files. I just had to log into the website, go back to last night at 11 PM and download a copy of the project folder. I got my 200 MB backup of the folder in less than 20 minutes. This service just paid for itself for the next year!



Quick note here – hopefully this will show up in someone’s Google search.

I was having issues getting my VPN service to connect. I was about to contact support when I decided I should check the log. I’m glad I did, as the error was quite obvious.

Fri Jul 25 17:18:32 2014 CreateFile failed on TAP device: \\.\Global\{…}.tap

Fri Jul 25 17:18:32 2014 All TAP-Win32 adapters on this system are currently in use.

Fri Jul 25 17:18:32 2014 Exiting

No free tap driver: all TAP-Win32 adapters on this system are currently in use

The symptoms of this problem were that the progress bar for connecting to the VPN would get to about 50%, progress to 60%, drop back to 50%, and then claim a failed connection.

The solution to the problem: Enable the TAP-Win32 Adapter under Network Connections.

I wish all issues were this easy to solve.