Net Neutrality

Many are very unhappy with the notion of repealing Net Neutrality. Shouldn’t the internet be free of corporate interests? Shouldn’t we be able to have access to whatever we want without infringement on our rights by our ISP? But what about the rights of the ISP? Do they not have rights too? In our nation, the first amendment freedoms we enjoy apply to all – business and individual alike. As such, isn’t Net Neutrality an unconstitutional infringement on the rights of the ISP?

Let’s look at some other big issues over the past few years that share similarities with Net Neutrality. First, the case of the baker who did not want to bake a cake for a gay couple. The bakery argued that their religious convictions prevented them from supporting a gay couple in that way but the courts disagreed. This greatly upset Christian groups and other conservatives across the nation. They argued that the business’s first amendment rights were violated by that decision.  How about the revelation that Facebook was curating the news to push down conservative views and increase visibility of liberal views. Of course, liberals thought this was ok – after all, Facebook has a first amendment right under the constitution to engage politically. The arguments for birth control under Obamacare, and Twitter’s removal of conservative voices are more examples where many argued that it was unconstitutional to limit the free speech of businesses on both sides of the political aisle.

So, both the left and the right has agreed in the past that businesses should have first amendment rights. Now, with Net Neutrality, the American people are unhappy that those rights will be extended to internet service providers. But we can’t have it both ways – whether our political views are liberal or conservative – we need to find a consistent voice in determining what (if any) limits exist in the first amendment rights of corporations.

While I personally want my internet to be free from manipulation by my ISP, as a supporter of the first amendment I struggle how to say such a law is constitutional.

Clean Drive

Clean

In the early 2000’s, I purchased several Sun Microsystems computers for putting together a home network of Unix machines. Nothing particularly exciting, I had an IPX, an LX, a Sparc5, and a few others. This was my testbed for tinkering around with Unix system administration. These computers were all purchased from eBay. The IPX and LX were both purchased from the same seller. Typically, when you buy computers on eBay you will find that they do not include hard drives. This is to protect any data that may be on those drives from prying eyes. However, the IPX and LX still had their drives in them. I had assumed they were wiped clean, but that was not the case. Both were fully ready production systems complete with the entire company directory and password file intact! Since I did not have the root password, I removed the drive and placed it in my Sparc5. Then, I updated the password file to use my root password. Finally, I removed the drive and put it back in the original machine. Now, I could run the machine with the new admin password. When it was booted back up, I found all kinds of company data – and this was a fortune 500 company too! This was the stuff that could have been sold on the black market for a substantial sum of money. I took the password file and ran it through Jack the Ripper – a common password cracking program – and before long knew the passwords for all the employees on this system. That same procedure was done on both the IPX and the LX. Lesson learned? Protect your hard drives. Absolutely destroy them before you get rid of them. The cost to company that originally owned these machines could have been enormous – they lucked because all I did was tinker with the machine as a curiosity and then wipe the hard drive clean. You may not fare so lucky when you dispose of your hard drive insecurely.

Cryptocurrencies and Blockchain 

With the price of a bitcoin surpassing $10,000 and the recent craze around cryptocurrencies, developing an understanding of what the technology behind these cryptocurrencies actually does, as well as what can become of these technologies going forward seems worthwhile.  Before we can begin to truly understand what cryptocurrencies like Bitcoin and Ethereum are, we need to look at how blockchain technologies work and why these technologies hold immense value for people around the globe.

The technology behind the blockchain is fairly simple conceptually speaking, though incredibly innovative nonetheless.  The fundamental issue that prevented digital currency from taking off for so long was the ability for any person to make duplicate transactions.  For instance, when a person sends an email, they are never actually sending the original message but rather a copy, so if two people claimed to own the same digital currency, there would be no way to prove the actual owner without having a fine-tuned system in place.  A blockchain solves this problem by validating transactions through solving cryptographic riddles and maintaining a universal record of all transactions, an ongoing process carried out by a decentralized network of computers around the world.  These miners are rewarded for their work through miner fees and their ability to unlock and release new cryptocurrency into existence.

In the United States, we believe in the value of the dollar.  Millions of Americans work hard at their jobs inputting their time, energy, and resources on a regular basis.  This results in them earning a paycheck, often directly to their bank accounts.  With this money, people make transactions based on trust:  trust that their debit or credit cards will work, trust that they can access and spend their money, and trust that this money will not be tampered with at any point between sending and receiving payment.  But this trust-based service comes at a cost, around 3% of our transaction fees to be exact.  The blockchain reduces the need for a middle man and enables direct peer-to-peer transactions, minimizing the potential for tampering and corruption along the way at a lower cost, roughly 0.1% or so, which pays the miner fees and gives people an incentive to keep the decentralized network active and growing.

Looking specifically at a cryptocurrency, Bitcoin began back in 2009, and its blockchain has been recording and validating transactions ever since.  Unlike the US dollar, there is a finite supply of bitcoins that can ever be created, capping out around 21 million.  Currently, less than 17 million of these exist, and as time passes each bitcoin becomes more difficult to mine.  This element of scarcity is appealing from an investment standpoint, because as demand increases the price does as well.  Investing in cryptocurrency today does not come without considerable risk though, considering the market is very volatile.  In the grand scheme of things, these cryptocurrencies are still very young, meaning that people base much of the value on the integrity of the system, also considering what the future of these cryptocurrencies might hold.

React Native

Most of my mobile development is in creating native Android solutions. However, I sometimes need to create iOS apps as well. I have done native iOS development, but if I need to have a cross platform solution, it obviously requires twice the effort (and cost) to create native apps for both versions. And, when you’re done, you have to maintain two different apps as well as deal with bugs on two different versions. Throughout the years, a variety of solutions have been made available – and with the continued growth in the mobile market, I expect to see more tools available in the future.

During the past week, a colleague recommended that I look at React Native for creating cross-platform apps. Then, yesterday, a customer asked me to create a mobile app for them on both iOS and Android. So, I decided to investigate React Native.  The website for React Native talks about how you can use JavaScript to create native apps – not hybrid web apps, but real native apps. That sounded very exciting! I installed their framework without much trouble and began tinkering around. While I am not a fan of JavaScript for larger projects, I realize that it has become the language of choice for a growing number of tools because of it’s widespread acceptance. I used Visual Studio Code as my IDE, connected my demo app to a REST service, and had a trivial mobile application running in minutes. The most awesome part of React Native development is that the test app on your phone is always in sync with the changes you make on your development computer – without a USB cable – so long as you are on the same WiFi network. Now, the next step – create an actual Android APK to push to HockeyApp for distribution to my software testers. Wait… there is no easy way to do this. I have to ‘eject’ my project from React Native – a process which I am warned is not reversible – and then use native tools to build the APK. So, I can start the project in React Native, but then have to export the project to a native form to actually deploy. This was a show stopper to me – I don’t want to have to export to native tools as that invalidates the entire purpose of a cross-platform project to me. I dug through the documentation trying to see if I was missing something, and others had asked the same question. As I dug further, I saw numerous users complaining about how out-of-date the documentation was. That concerns me – if I want to learn the framework, I need to be able to rely on the documentation. Having found no way to easily create an APK, I gave up.

In the end, for this project, I think I will stick with Cordova. It may not be as exciting as React Native, but I can chose whatever frameworks I want to use – be it a high-tech Angular app or a simple HTML5/JavaScript application. The tools work well, and – maybe one of the most important things to me – the project can be maintained by anyone who knows HTML5.

 

 

Tech Toys

I play around with a lot of technologies. I think it’s important for anyone in the technology field to explore new technologies. In order to provide the best solutions, I have to know what tools are available. Some good technologies don’t receive much buzz, others don’t receive enough. So, what technologies am I playing with right now? Recently, I started looking at Processing and OpenCV. This technology has been around for awhile, but I’ve never had the pleasure of playing with it. Processing uses Java, but programs almost like Unity or Arduino with a call to set everything up and a loop function to execute the code. what makes processing so great is how much it simplifies graphical programming. Another exciting technology is Johnny-Five. This framework, named after the famous robot from Short Circuit, is intended to create a unified framework for programming a variety of hardware boards for robotics. It uses JavaScript, and an event-driven model which greatly simplifies robotics for those unskilled in C++. What’s also awesome about Johnny-Five is that it runs on your computer instead of directly on the hardware. While this could be viewed as a con – since you need a computer to run project – it also means you can integrate functionality from the computer into the project. Your hardware project can now function as an I/O device for something much larger. And, with huge number of small computers available now (such as the Raspberry Pi), you can still create small portable projects. The next technology on my list right now is .NET Core 2.0. As a Mac/Linux user, I avoid Microsoft-only technologies. But .NET Core 2.0 now runs cross platform. And, even more exciting, it’s actually pretty good. I have been very excited with the ease that i can develop web applications with their MVC framework and even happier about how easy their Entity Framework is for interacting with databases. Lastly, I’ve been tinkering with Angular. I’ve avoided most of the JavaScript frameworks over the years. I typically use JSF with the occasional jQuery when needed. But, the buzz around Angular is too great, too many jobs want this skill. So, I’ve started tinkering around with it. Looks great for some applications, but I’d rather stick to Java for larger applications. There are lots of other technologies out there I’d like to explore – if only there were more hours in the day.

Multi-Factor Authentication

Yesterday, after writing about the pain of added security when dealing with baking websites, I upgraded my Mac to High Sierra. When the upgrade was finished, my Mac asked me to enter the authentication code sent to another Mac machine I own. Fortunately, I had my another machine nearby, so I entered the code. Then, it asked me what the password was to unlock the other machine. That sounded strange to me, but my Apple keychain would have that password. Then, the final hurdle was to change my password since it was the same as my iCould password – and Apple doesn’t allow that anymore. Wow. Apple must think I’m storing nuclear launch codes on my laptop. Then, I went downstairs to run some updates on my wife’s Mac. Not an upgrade to High Sierra, but just updating Safari, iTunes, etc. When I clicked the install button, it asked for my iTunes credentials, then asked for a code sent to another machine. This time, I didn’t have another machine nearby. The other option was to send a code to my phone – which I also did not have near me. So, that upgrade did not happen. It is frustrating to me that I increasingly need my phone to log into a website or perform other online functions. Even more frustrating, is it really necessary for me to jump through so many security hoops just to upgrade my computer?

Accounting Woes

Since the dawn of banking, people have needed to balance their checkbooks. Business or personal, the need is the same. Then, with the advent of personal computers, accounting software like Quicken, QuickBooks, Microsoft Money, and various others simplified the process. No need to do math, just enter your receipts and verify with your bank statement at the end of the month. Then, during the last decade we saw the emergence of online tools such as Mint and QuickBooks Online for accounting. No longer do you need to manually enter any accounting data – just provide your bank account information and allow the website to sync your data. No need to balance your checkbook or do anything at all. Just sit back and take an autopilot approach to much of the accounting work. Now, during this past year, I have seen a huge surge in problems with this kind of software. Banking sites are increasing security, updating technology, and – in general – breaking compatibility with these services. What was previously a 30 second process to update your account now takes minutes, if it completes at all. Some accounts demand that you enter an access code sent to your phone. Even more annoying, some accounts ask you to identify all the street signs or cars or stores in a picture. In short, the solution is now becoming more painful than the problem it is intended to alleviate. I hope this trend soon reverses, I love the simplicity that integrating my accounting software with my bank offers, but I am getting tired of wondering if it will work today

Now on WordPress!

Today, I have upgraded my blog to use WordPress. Woohoo! Up till this point, I had been using the built-in blog plugin for RapidWeaver. It works nice, but WordPress will help me take my blogging to the next level. Most importantly, I can now blog from anywhere instead of just my home machine. The bad news? Links I have tweeted or posted on my LinkedIn page are now broken. So, I’ll be working to fix that and to make the style between my main site and my blog look more… well… consistent.

Social Media?

Friends

This past week, I vacationed with my family in Disney World. It’s a favorite vacation spot for my family. While I was there, I constantly saw people looking at Facebook, Instagram, and other social media forums. The problem? They were completely ignoring the very people they were vacationing with. I assume most people go on vacation with their family or friends because they enjoy spending time with them. Sadly, that was not demonstrated by the people I saw. In one example, I saw a couple both looking at Facebook while their young children pleaded to be lifted up so they could ring the bell that was just overhead. Their parents never heard them. The children tried lifting each other up to no avail. Then, the line moved forward and the opportunity was lost. Over and over again, while at dinner or in line for a ride, I saw entire families too interested in what people they barely know were doing to pay attention to the people they love. I once heard it said that social media should be renamed anti-social media. Sadly, I agree. All to often our social media habits actually prevent us from engaging in real social behavior and instead we focus on a virtual world – a highly curated reality where everyone’s life is picture perfect and utterly fake. We take selfies to show everyone our life is awesome too. Yet, the reality is, it’s all hollow and meaningless. While we’re trying to impress someone we knew in high school, the people we actually love are sitting on the sidelines of our life. Shut off the phone — spend actual time with the people that matter instead of wasting your watching what everyone else is doing.

The micro:bit

MicroBit

Yesterday, I had the pleasure of playing around with a piece of technology called the micro:bit. The micro:bit is a small hardware platform intended primarily for introducing young people to programming and tinkering. It’s a small device, not quite 2 inches square, but it is amazing. In fact, I’d say it’s probably one of the coolest pieces of technology I’ve played with in a while. What makes it so awesome? First, it runs Python. While I’m not primarily a python programmer, I do recognize that it has become one of the most widely used languages — not only for tinkerers, but also for professional development. This makes the micro:bit far more accessible to young people than C++ used by the Arduino controller (NOTE: I love Arduino, but the micro:bit is certainly more ‘kid-friendly’) The second thing I love about the micro:bit is that I had to install exactly nothing on my computer to get it working — no IDE, no flashing utility, nothing at all. The IDE is online, so you can type in your favorite browser and download the .hex file when you’re done. Flashing the device could not possibly be easier. When you plug the device in via a standard USB phone cable, it’s recognized as a USB thumb drive. Simply copy the .hex file to this virtual drive and within moments your device is flashed and you can see the results of your work. If the above weren’t already enough to give the micro:bit 5 stars, there’s more. The micro:bit includes an impressive hardware selection and associated API. There are 2 buttons, a 5×5 LED grid, accelerometer, magnetometer, and bluetooth. The form factor includes pads big enough to use alligator clips for interfacing with external hardware too — so you don’t even have to solder anything. While I’ve only tinkered with this device for a short time, it is definitely one of the more impressive hackable hardware pieces I’ve seen in quite some time. This needs to be in the hands of every elementary and middle school student interested in programming or hardware. The micro:bit is, in my opinion, a real game-changer.