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 (ld.gold) 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 ld.gold linker:

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

A year of math

I wrapped up my year-long course sequence in communications system theory at NCSU. Previously all of my graduate level courses have been in circuit design, and while there has been some math, it was all very manageable. This year, however, in order to build a solid foundation for my studies in RF and wireless communications, I decided to take communications system theory, and its prerequisite, random variables and random processes. What a year it has been!

The Pros:

I definitely feel like I have a solid grasp of the fundamentals of communications systems, and I hope it will serve me well in future courses. I think I am in a good place for course in the fall on the topic of wireless communications systems, and I think I will be ready for advanced subjects like MIMO signal processing. I have no doubt the random variables and processes background will help with any technical subject where one must model randomness, and I have even been able to apply some of it to some projects at work. I also picked up some much needed Matlab skills this year too, and I feel very comfortable with Matlab simulation and analysis.

The Cons:

In the 10+ years since I finished my undergraduate degree, I had not realized how many math skills I had lost. The course material all made sense this year, but the homework problems were intense and painful at times. I am sure that if I was fresh off of a three-sequence course in Calculus and a linear algebra course that I would have been in better shape. In addition to a table of derivatives/integrals, a table of trigonometric identities, and a table of Euler’s identities ought to be in any electrical engineering graduate student’s immediate reach. On the modeling side, I did not gain any skills with Simulink, which is unfortunate as I had hoped we could have utilized it as a learning tool in the communications theory class. I suppose it will be something that I will need to pick up on my own, perhaps over the summer.


It has been a rough academic year, but probably a necessary year, and I hope that I will be better prepared for future graduate work. This summer I need to make some decisions about the future (Ph.D. studies?)…

Homebrew versus Consumer Routers

Arstechnica has an interesting article on typical consumer home routers versus a pfsense configuration running on a mini-computer. The article is very interesting to me as I have been thinking about doing something similar such as having a router/firewall on wired device and setting up separate access points with different hardware. The comments are also very interesting, making mention of SOHO networking equipment from Ubiquiti Networks or MikroTik. I love the idea of putting up Ubiquiti UniFi APs on each floor of my house, and having them feed into a router with PoE. However, I would need to figure out how to run Ethernet cable up three floors in this townhouse. I suppose I could try to run it up behind the drywall in the staircase, and install one AP between the first and second floor, and the other AP in the basement. However, I don’t know that there would be an easy way to run the Ethernet cable. I would probably have to drill through some 2x4s. It would be a fun and interesting project too…one to put on the TODO list I guess!

Decisions: Buying a new laptop

I am snowed in with 60cm surrounding the home, so after some shoveling and fun in the snow, I took advantage of the slow day to do some cleanup. I cleaned up my old Macbook I purchased back in 2007.  I have not used it in over a year now.  It still works, though it is incredibly slow. Frankly I believe the real issue is that the HDD is slowly dying. I made sure I grabbed all of the data off of it so that I can be ready to retire it. It sure had a good run, it was worth the money I paid for it. I also took care of my wife’s last two notebook computers and pulled out the HDD and memory modules for separate destruction. Call in paranoia I guess.  I was also very thrilled at how easy it was to remove the HDDs and memory, there were compartments for each for easy access.

I am currently using an Asus X401A that I bought refurbished. I bought this machine for US $200 in 2013 when my MacBook started to really slow down and the OS was obsoleted. I got the machine as a travel computer that I could use for my graduate school work while on the road. It has been good for that, but lately it is showing that its ready to go soon. The keyboard is squeaking and the fan on the side rattles at random times. I think I am ready to get a new machine…

I am now trying to decide between getting a MacBook Air or a Dell XPS 13 Developer Edition. I have the XPS 13 which I use at work and it is a great machine.  The size and weight are perfect for all of the travel I have to do, and the Linux support is superb. The only downside to this machine is that the web came is below the screen rather than above it. For my work computer, that is fine because I don’t use the web camera. But for a home computer that is troublesome though, as I use Skype to talk with family and friends. The MacBook Air is portable and light weight as well though, and the camera is in a much better position.

The other issue is that Linux would be my primary desktop. That is fine for most things, after all an Android tablet is good enough for most day to day things. However, for video editing I do like iMovie, and my school still uses Silverlight and it is a pain to get working on Linux these days.  However, I prefer writing C++ code on Linux, but I suppose I can always just have Linux in a virtual machine that I can fire up when I get the C++ itch. There isn’t much of a difference in the hardware either:

Category MacBook Air 13″ Dell XPS 13
CPU 1.6GHz dual-core Intel Core i5 processor Intel Core i5-5200U Processor
Graphics Intel HD Graphics 6000 Intel HD Graphics 5500
RAM 8GB 1600MHz LPDDR3 SDRAM 8GB Dual Channel DDR3L-RS 1600Mhz
HDD 256GB PCIe-based Flash Storage 256GB Solid State Drive
Cost US $1299 US $1199

My gut tells me to just go with the MacBook and there will be no regrets. But the Dell XPS is such a slick machine…

Struggle with Java EE

I am trying to get my head around Web Services at the moment for a new project. I really struggle with the Java community though, or perhaps I just have not found the right information yet. I suppose it may have to do with the complexities of Java EE actually, and my lack of understanding about what Java EE truly represents. Unlike Java SE, you cannot just download an SDK and start compiling with javac. Java EE from Oracle is an application server called Glassfish.  In order to use Java EE features like web services, you have to get to know the application server too.

So many of the examples programs require a lot of third party tools, like Maven or Spring.  The SOAP example app in the Oracle tutorial on Web Services uses either NetBeans or Maven. Why happened to keeping examples simple, using the javac/java to build the examples, so that the learner can focus on the Java SOAP technology and not everything else? I would even settle for just an Ant build script!  Perhaps it is just because I am a curmudgeon C++ programmer who likes to keep things simple and at a low-level…but I am just frustrated by all that is required to try out a simple Java app!

I stumbled onto RedHat’s OpenShift, a PaaS-provider for hosting web-based applications. I created a JBoss cartridge and with the hope that I won’t have to worry too much about installing and configuring a Java EE platform. JBoss is a Java EE application server like Glassfish, but developed by RedHat.

If all else fails, I guess I will just go for Apache Tomcat, it has been almost a decade, but I remember that tool being very easy to setup and understand.

Regardless, I have much to wrap my head about in the world of Java. Hopefully I will get smart enough, as I would love to get back to my aging QuickfixJ tutorials.