Worksation PC Build

I currently have a refurbished notebook computer from 2012 and a refurbished HP desktop computer I bought for $200 back in 2013. The main reason was so that I would have a host to run some software I needed for graduate school (Matlab, LTSpice, JMP, MS Office, etc.)  I am coming to the end of my graduate school studies in May, and while both machines have served me well, both are showing their age. I will also not really need most of those software packages any longer.

I want to start getting more hands-on with virtualization, containers, and CUDA development. My desktop PC does not have a CPU or motherboard that supports Intel Virtualization Technology, so I cannot truly run KVM or Xen properly. Furthermore, it does not have a video card that supports CUDA. I do not want to spend a fortune on a computer either. I was looking at some Xeon builds, but the motherboards and ECC RAM are more expensive. So, I am going to set the following requirements for the workstation build:

  • Keep costs under $900 (USD)
  • nVidia GPU for CUDA development
  • Intel VT support
  • at least four cores, and Hyperthreading is a nice-to-have

I plan to either install Red Hat Enterprise Linux 7 Developer Edition or CentOS 7 as the main OS, and then run FreeBSD and CentOS VMs on demand. Eventually, maybe I will retire the Desktop Windows PC and replace it with a VM on the new machine too.

There is a Microcenter in my area, so I’m going to buy some parts and put together my own PC. I am sure I can find something that meets those requirements pre-built, but it is more fun to build it myself!

Looking back on my PC investments

I am looking at updating my computing resources these days, and was thinking back to my previous PCs…I really haven’t had that many, and I have really squeezed a lot of value out of them all.


  • College PC – Windows NT4/2000 + FreeBSD dual boot, Pentium III processor


  • MacBook with PowerPC G4 CPU, OS X 10.4


  • MacBook with Intel Core Duo CPU, OS X 10.6.8


  • Asus X401A – Windows 7 at first; now with Fedora Linux
  • Refurbished HP Desktop PC with Wndows 8; now Windows 10.

I still have the old College PC and the second MacBook!  With that old PC, I just don’t use it or even turn it on because it is so much noisier than anything else. Amazingly, the Iomega Zip drive in it still works.  I remember having that drive was critical when I was in college. I used to carry a few Zip disks around in my bag so that I could take work from my own PC into the engineering labs at school. I had a disk for my FPGA development work and Windows application development. I also had a disk with all of my reports and term papers as well. These days one doesn’t even need a DVD-drive, $10 USB key drives do it all.

Things have really changed with computing though. I really liked both of my MacBooks, but especially with the first, I remember there were things that only worked on Windows. It got better when Apple moved to Intel processors, but there was still stuff I found I could not do with OS X. Funny now how I cannot even remember what those things were…it must not have been important.  I guess it had more to do with that I was living in Japan, and back then everyone in Japan used Windows only–Mac OS X was very rare and only used by artists and designers.  Today I am sure it is very different, on Japanese TV news programs I see lots of Apple equipment in various offices. I believe that because everything is now web-based, we all can really care less about much of the application software out there. I think the only ones that I really care to use are Microsoft Excel, Turbo Tax, and Apple’s iMovie. I could drop Excel for LibreOffice or even Google Sheets, and haven’t used iMovie since I lost all of my free time to graduate school.

I am thinking I will build a workstation PC from parts for my general technical self-education going forward. I would also like to update my notebook computing situation too.  I am not a big fan of tablets, so I do want a real notebook computer. I would go back to Apple in a heartbeat if it were not for the fact that all of the current offerings have very old hardware yet really high price tags. I cannot justify spending that type of money on such aging hardware. Instead, I am looking at a Dell XPS 13 Developer’s edition which comes in under $1000. That would really be something–Linux on the workstation and laptop. Maybe it is time, though? I really don’t have a need for Windows other than TurboTax, and I could run that in a virtual machine. For Mac OS X, I miss iMovie, but then again the ancient hardware they sell!  Does it make more sense to get a Mac Mini for $499 and just use that for iMovie and general stuff at home?

I am going to move ahead and purchase the workstation for now, build it up, and have fun with that. I’m going to ponder some more on the notebook situation…perhaps give it a few more months unless my current laptop dies before I can make up my mind.


Windows IoT Impressions

I am impressed with the ability to run Windows on the ARM and with how easy it is to use out of the box. But developing and deploying applications? Not such a pretty picture–Microsoft has a LONG way to go still. A RPi device with RaspianOS and python is a much better option at this point in time for my purposes: electronics interfacing and sensors. For reference, I have the following platform: Raspberry Pi 3 with Windows IoT 10.0.14376.0, and a Windows 10 desktop with Visual Studio 2015 Update 2.

The Pros

Being able to ssh into my device…excellent! Powershell is no replacement for Bash, but it is good enough and get the job done. Being able to mount my device’s C:\ and drag and drop files to the device…awesome! Networking functioning straight out of the box after plugging it into my Ethernet switch…check! Web-based control panel for monitoring the device, updating Windows, power-cycling…check! Headless capability…check!

The platform looks good overall, the only thing I am yearning for is Bash, but that is because I’m a Bash power user. For someone familiar with Powershell, I’m sure this is just perfect.

The Cons

My biggest disappointment is that Visual Studio remote debugging and remote deployment of apps does not appear to work. Based on my research, Microsoft removed the binary msvsmon.exe from their Windows IoT distribution, expecting it to be installed on a device by Visual Studio. That would make sense conceptually, but if Visual Studio cannot connect to the device, how do I get started?  I can ping the device, SSH into it, mount its c:\ on my desktop…so this is clearly not a connectivity issue. The issue must be with Visual Studio and Windows 10 IoT not playing nice together.


Sorry, Microsoft. None of the settings in that menu are helping with this issue. Further research reveals that this was a problem with Windows IoT 10586 and Visual Studio 2015 Update 1.  Other workarounds provided, such as universal encryption disablement, do not appear to even be an option in VS 2015 Update 2.  Visual Studio has changed yet again from November 2015 when this problem first appeared, and so far I have been unable to figure out exactly what will fix the issue.

My guess is that a fix will be coming down the pipeline at some point, but frankly this platform is still to immature for serious development. I thought of downgrading to an older version of Windows IoT, but Microsoft is not allowing me to download it, I am only able to get the latest version (which I currently have). And after how long it took to get Visual Studio installed…and then updated…snowball’s chance in hell I’m going back to an older version of Visual Studio.

Closing Thoughts

For now I have to build a C++ application on my desktop and then copy the binary over to my Windows IoT device. That will work for now as I am still getting my feet wet, but hopefully that will be addressed in the next Windows IoT build, or next Visual Studio update. Once I start doing more complex things I will definitely want to be able to debug remotely.

I have started to browse some of the C++ samples and I am getting nervous, the code looks atrocious and appears to depend on some Windows RT libraries, COM objects, etc. Hopefully it will just be a small learning curve and be boiler plate code. I am sure it is easier with C#, but I don’t care to learn C# just for this device. Waste of my time. Perhaps if the C++ is too immature then there is hope for python? To be seen…

Trying out Windows IoT

To be brutally honest, Windows as a system is rather boring for a guy who is interested in embedded systems. Don’t take me for a zealot, though I prefer Linux for most things, Windows has its place for sure. Microsoft Excel is the killer application in my book, and there are great CAD tools like Altium and SolidWorks that make it an excellent platform for getting real work done. But for embedded systems??? Sure there was Windows CE, but that was really overkill. PalmOS was much more slick in its time! And iOS and Android are rightly putting Windows Phone in the grave. When I first read about Windows IoT, I did not bother to read any further. It sounded like another half-assed Microsoft attempt at trying to be relevant outside of desktop computing.

Yet I found I was reading an article about I2C/SPI interfaces and the Windows Driver Kit, and that sparked an interest. I can use Windows to control I2C, SPI, and GPIO devices? Please tell me more! Microsoft has created a stripped down version of Windows 10, known as Windows 10 IoT, that is capable of running on x86 and ARM processors. You can develop C++, C#, or Python apps with Microsoft Visual Studio, and then remotely debug and deploy apps to an embedded host. Now that sounded interesting! And there is more! You can download the community edition of Visual Studio for free and obtain Windows 10 IoT for free as well (permitted if you have Windows 10 Desktop). Sign me up.

So I ordered a Raspberry Pi 3 (64-bit ARM) that supposedly came with an SD card loaded with NOOBS directly from the Microsoft Store. I opened the box, pulled the microSD card out of the SD card holder, plugged it into the Pi unit, and then powered it all up. According to Microsoft, I would have the option to install Windows IoT once I booted the device via NOOBS. Imagine my surprise when I boosted the system and I found I was in Raspian! So it looks like NOOBS was *NOT* on the SD card! Annoying…

I downloaded NOOBS from the Raspberry Pi website and reformatted the SD card and decided to try again. This time the NOOBS system came up asking which system to install. I selected Windows IoT, and a browser eventually opened up asking me to login with a Microsoft account. It turns out I could not proceed since my user account was not in the Windows Insider program. I returned to my desktop computer and registered my account in the program–luckily it is free, unlike MSDN! I was now greeted as an Insider by Microsoft Insider’s website.

Unfortunately things got worse:

  • I returned to NOOBS, tried to login on the Pi, but Microsoft informed me I was not an Insider
  • I confirmed on my desktop that my account is indeed part of the Insider program
  • A few more times and I gave up for the night, tired of the circular process and run-around
  • 24 hours later, on the Pi, Microsoft was still telling me I was not an Insider…yet in my inbox I had a welcome message to the program…
  • On my desktop, I managed to get through, and downloaded the Windows IoT ISO image; I got busy so that was it for the day…annoying
  • 48 hours later, on the Pi, Microsoft was still telling me I was not an Insider

I gave up and decided to just do a manual install. Luckily that was not so bad: download the ISO, install it on your Desktop (which extracts a disk image), and install the Windows IoT Core tool and manually flash the image to the SD card.

After that things went smoothly, the Raspberry Pi booted in Windows and grabbed an IP address off of my network switch (as it should) via DHCP with no hitches. I was even able to SSH into the device via my Linux computer. It was a pain in the ass to get this far, but it all looks interesting and I am willing to let bygones be bygones. Hopefully the hard part is over, and it will be a breeze with Visual Studio and loading software onto the Raspberry Pi.

I have to say Microsoft has a lot of work ahead of it. Instead of wasting everyone’s time with their stupid developer’s program accounts and registrations, it would be great if they just put the ISO out there for their target platforms and require tools–we want to get to work, not wait 24 hours for account registrations to be propagated within Microsoft. Also:

  1. Don’t market and sell Raspberry Pi 3’s without clearly stating you don’t yet support it!
  2. Fix the stupid Windows Insider program mess…it was ridiculous…and there was no email to send a help request to either…the guidance was to ask the community for help!
  3. Go for more spartan websites, it is tiring clicking through all of the links

More to come on Windows IoT soon I hope…from the C++ application side and Windows driver side of course!

Homebrew Router at Arstechnica

As a follow-on to the earlier article I linked to comparing homebrew versus consumer routers, ArsTechnica has published an article with instructions on building a homebrew router.

I must admit I am very interested in such a project. I am looking at upgrading the home network, which includes obtaining more bandwidth from Verizon. I would like to have my Optical Network Terminal (ONT) switched from coaxial output to the Ethernet output. With such a configuration, I could install my own router rather than depending on the router+wifi combo that Verizon provided. Why? Just so I can have more control over my network, and I won’t have Verizon always telling me that I have too many devices and need to buy even more bandwidth. I don’t like how they can inspect all of the devices in my home network.

I am trying to decide the route to go, however. Part of me says I just need to find a consumer router and throw OpenWRT on that. I am tempted, but it can be hassle to buy a router with 802.11 AC that will work 100% guaranteed. The other option I am considering is getting a plan old router with no wireless, such as a Mikrotek, and use it out of the box. Or maybe even a plain old router with just OpenWRT? Then I could get a wireless access point and have it hook up directly to the dedicated Ethernet switch I acquired. I like the idea of having multiple devices, each handling a specific job. The downside though is that if something goes down while I’m at work or traveling for work, then I’d have to walk my wife through the troubleshooting rather than having her go flip a switch on the Verizon router.


GNU C++ and Gold Linker

The Gold linker ( is a ELF linker developed at Google and added to the binutils toolset that can be used in place of standard linker (ld) from binutils.  The Gold linker offers faster object linking times for C++ programs, which is particularly attractive to large C++ code bases. Please follow this link (Linux Foundation) for an interesting read on how it works.

Most Linux platforms will default to using the standard linker, so below are a few options for overriding and using the linker:

  1.  Use the -fuse flag on gcc/g++:  g++ -fuse-ld=gold test.cpp
  2. Setting “export” so that the $LD environment variable uses rather than ld (this is useful for projects using makefiles)
  3. As the supper user, running binutils-config –linker to change the default

Home network upgrade: Storage Acquisition

For as long as I can remember I have been dealing with storing files in the following manner: floppy disks, zip drive disks, and now USB hard drives. When I had a Mac computer I actually was very good about regularly backing up my files via ChronoSync and then finally Time Machine. For the past three years I have been without a Mac and just have an old Laptop with Linux and an old desktop with Windows. For these machines, I have been backing up simply by copying files to a USB hard drive. My wife has been using the USB hard drive as well with her Windows laptop  However, over the years we have compiled and saved a lot of photos and videos. The USB hard drives are difficult to organize and manage well among the two of us, and a large volume USB drive is still quite pricey, so we entered the market for a networked storage system where we can save and share files from a central location.

I ruled out Dropbox, Google Drive, and other cloud based solutions as primary storage source. Why? Because I frankly haven’t bought into the cloud yet. For sharing files with people at large, sharing code for school projects, etc., I find such services great. I utilize my Google Drive extensively for school work. However, I’m not quite ready to put tax returns, photos and private data on the cloud yet. For off-site back-up, it is on my to-do list for research and evaluation, but I prefer to keep my primary back-up in my control for the time being. Perhaps when I get a better grip on encryption…

The initial thought was to go for a step-up from a USB hard drive like my Western Digital My Passport and use a Personal Cloud device. Seems simple enough, right? Network connectivity? Check. File sharing? Check. However, last summer at the lab at work a manager came to me with a problem: three HDDs failed in the RAID5 solution purchased from Dell almost a decade ago. I found myself reading more about network storage solutions, which also got me thinking about my home situation. While a personal cloud solves the immediate problem of having a network-based storage, what if it fails? I need RAID!

I then went crazy and dived into the deep end, looking at a FreeNAS build with RAID Z3, SSDs, SAS disks, Xeon CPUs, 64 GB of memory…it started to get expensive quickly, and then I started thinking about the noise of server fans…stop!  I looked at scalding down to RAID Z1, and even just RAID1, but I would still need to build a PC and deal with the configuration and performance tuning. I decided that since I am working full-time, going to graduate school at night, and raising two small kids, that I probably should settle for a canned solution such as a storage appliance rather than something I would need to tune and pay close attention to. When I done with school and have more free time, I still like the idea of building my own FreeNAS system–what a project!

I started looking at Western Digital, Buffalo, Seagate, Drobo, Synology, QNAS, and many others. I narrowed down the decision to the QNAP TS-251 or Synology DS216+ based on reading many reviews, web forum posts, etc. Both units are priced competitively, and in the end I selected the Synology DS216+. With roughly the same technica specifications, it came down to look to the unit and the OS on the device. I would have went with the QNAP if we were to use the NAS for streaming video (the HDMI output is nice), but in reality this storage solution will be used solely for file storage.

I consider this an entry-level purchase since it is a two-drive bay enclosure, and I will configure it for RAID1 with two 3TB Western Digital Red NAS disks. The hope is that it will last me approximately five years, with the plan to upgrade the capacity in three years when the cost of larger hard disks has come down. The DS216+ is powered by a dual-core Intel Celeron rather than a Marvell or ARM solution, so hopefully that will help it keep up with our storage demands. After five years I will take a look at our storage need and consider a higher capacity solution such as 4-drive bay enclosures.

Now that we have a storage solution, I need to figure out the home network connectivity once and for all. We currently access and connect to everything through the Verizon FIOS provided wireless router/AP combo…