Browsing all articles in Technology

Let’s get this out of the way first – like many grown adults, I don’t use TikTok. I’m obviously pretty much “aged out” of the appeal for it – but that’s besides the point. If you don’t care about what I’m about to say because it doesn’t affect you – you’re missing the big picture. That’s like saying you don’t care about racism because you’re not black.

You need to care if government decides to ban any software, whatever its origin.

TikTok, made in China, by Chinese Engineers, is indeed a sneaky app. And that’s why I installed it on a sandboxed, isolated phone, something few people would ever do. TikTok is indeed full of surreptitious motives and questionable data gathering. This post last week by Richie Koch of Proton Technologies outlines exactly why this is so and is a very informative read.

This isn’t about what software you should or shouldn’t run. It’s about government telling you what software you can or cannot run. As a computer scientist, I recommend you do not run TikTok for the reasons stated in Koch’s analysis. That’s a recommendation – not a government edict issued by a want-to-be dictator. The difference is not subtle.

The only reason this app is under scrutiny is because it’s become wildly popular. Apps and desktop software have had spyware, malware, and other nefarious methods embedded in them for decades. This is nothing new. The onus has been on Apple, Google, Microsoft and other companies to try and educate, warn, and in some cases block apps or services that they choose to – but they’re not government. It has been and it should remain that each of us, as sovereign individuals be able to freely choose what we do or do not do on our own computers and phones. We do not need or want the government telling us what we can or cannot run.

When Americans visit China, Iran, and many other countries they find they cannot use Facebook, Google, YouTube, and more. Why not? Because authoritarian governments prohibit it. That’s not OK there and it’s not OK here, in the “land of the free”. How is the U.S. banning TikTok any different?

I’ve said it before – uncensored Internet is a human right. And that means we can run whatever software we please – spyware or not. The onus is on ourselves and industry to stay informed and make decisions. Some people don’t run Amazon Echo in their home because they don’t trust Amazon. That’s their choice. I don’t think people would be too pleased if our government decided to “ban” the Amazon Echo from existing.

It’s up to individuals to understand what’s happening on their phones and computers. It’s also up to operating system vendors – Google, Apple, Microsoft, etc. to provide warnings – which they already do. They, along with anti-virus / anti-malware vendors have been doing it for decades. We need to pay attention and understand – we are trusting the operating system and application developers every time we install a piece of software we cannot analyze ourselves. I’m not saying that’s always a good idea, I’m saying that’s our choice, our risk, our privacy threshold for us to decide – not government.

Reading lengthy terms-of-service agreements and understanding data and networks is not practical for most people. And it shouldn’t have to be. Computers and phones and the complexities behind them are becoming more and more invisible as they become easier to use, and that’s a good thing. But that’s why we trust independent security auditors to look at software and make recommendations, and we can quickly check app ratings and reviews and make our own decisions. Well you say, how does that stop my teenager from installing TikTok? Well – it doesn’t. Guess what – it also doesn’t stop your teenager from installing Snapchat, from a U.S. company. When you choose to provide location data and submit any user generated content (UGC) you are already giving up privacy with every post. Privacy is only as good as what you’re willing to NOT put on the Internet – whatever the vehicle is. TikTok is no different – other than it’s from China.

In TikTok’s case, the primary concern is that the Chinese government can compel the parent company ByteDance to provide unrestricted access to data. Well, in the U.S. it’s a bit harder, but is it really? The U.S. Government is constantly, on a daily basis, submitting requests for data from every technology company with more than a few thousand users, and companies usually provide it out of fear of authority.

As of this writing, President Trump suggested that he will “ban” TikTok by Executive Order. Whether he succeeds with that or via an act of Congress is to be determined. There’s also some well substantiated rumors floating that Microsoft will acquire TikTok. I imagine their first move would be to isolate all the U.S. based accounts into Microsoft Azure data centers, where they have control over it, and the U.S. Government will suddenly have jurisdiction to all of that juicy UGC, instead of China. I actually hope this happens because I think Microsoft would be a great place to help TikTok thrive and grow as the entertaining juggernaut it has quickly become. It would be incredibly strong brand building block for Microsoft too, because other than XBox, Microsoft doesn’t have the brand awareness that a massively popular mobile-based product or service Facebook (Instagram, WhatsApp), Google (Android), Apple (iPhone) does. Acquiring TikTok and branding it “Microsoft TikTok” will change that instantly, establishing the Microsoft brand in the minds of the younger generation.

Back to basics of government overreach – succeeding in “banning” a popular app makes our government no different than that of the other countries mentioned earlier, and compromises our individual liberties. It also puts a burden on Internet Service Providers (ISPs) and App Repositories (Apple App Store, Google Play) to suddenly have to comply with various “orders” from Government on what apps and traffic is permitted. How is this different from the Chinese Firewall?

This opens a Pandora’s Box to government claws, and I hope our Constitution and our court system are able to fight this challenge to our societal liberties. If not, the U.S. government will be no different than those of authoritarian, anti-democracies that exist on our planet, and there will be a big price to pay for all of us as that happens. I won’t like it, and you won’t like it.

This is a story about love. It’s about love for driving. It’s about love for adventure. It’s about love for family and each other.  It’s a story about love for the environment and a sustainable future.  This is a story about love for the freedom to move between points A and B and appreciate the journey.

** NOTE: I know that I’m very fortunate to have had this experience and be able to afford these vehicles.  I share it because I think it’s meaningful to understand just how much electric vehicles can impact our everyday life.

Today marks the 5 year anniversary of taking delivery of my first Tesla vehicle. It’s been 5 years and more than 100,000 miles of smiles. My last post about Tesla was the beginning of this journey and ended with a feeling of anticipation and excitement, knowing that I’ll never own a fuel-powered vehicle again. There was no turning back then; now with resolve, more than ever, I know that EVs are our only future for transportation.

So join me down the road of my love story with the Tesla Experience.

I knew that this would be the last time I used a gas pump for my primary vehicle, and wanted to mark the occasion. My son Jack turned 9 on that day, so we had 2 reasons to celebrate!

My wife Sima and I flew into Oakland airport and took a taxi to the Fremont factory to get a tour and pick up my first Tesla, a black Model S 85.

The Tesla staff treated us so well. They really appreciate and value their customers. They did back in 2013, and they continue with a culture of outstanding customer service still today.

Right after taking delivery, I took it to a nearby tinting shop to have the windows tinted.  While we were waiting, we went to lunch at a nearby place in a super busy intersection of Fremont. It was multiple lanes wide in all directions, it was noisy and smelly. As we sat there talking about the delivery experience and being overwhelmed by the sounds and smells of the intersection I said to Sima:

Imagine this… Imagine if every one of these vehicles were electric. It would be so quiet and clean. It will be incredible because it WILL happen. It’s not a matter of “if”; it’s a matter of “when”.

It’s just a matter of time.

I used to wear my Tesla hat so much I wore it out. Here it is still looking reasonably fresh.

My first of many pictures where my Tesla has posed so well for me.

In September 2013, we attended the first and only Los Angeles Tesla Rally, where over 100 Model S owners started at the Tesla Design Studio in Hawthorne, caravaned through a police escorted ride through the city and ended the ride at the Petersen Automotive Museum.

A few months later, I decided to “upgrade” the wheels to chrome, to give my Model S a more distinctive look. In hindsight I probably wouldn’t do it again – but at the time I really liked it!

Sima stepping out of the Model S is ALWAYS worth watching.  You never know what might happen!

Tucked away in the garage charging via the Tesla High Powered Wall Connector. I plug in every night, just like we do with our phones.

I somehow convinced the electric company to provision me a separate EV charging meter!  I’m able to get 80 amps at home, which outputs about 45 mph, so I can go from drained to 90% full in about 5 hours.

We like to charge at destination chargers when we can, and more and more are showing up all around the United States and the rest of the world. Because I’m able to charge easily at home, usually when we’re out and about in Los Angeles I don’t do it, and free it up for others. When I first got the car it was a bit more exciting to do it than it is now!  It’s become just normal to charge at home – the way it should be.

In California, we’re obligated to display a front license plate.  Most Tesla owners don’t like to and pretty much ignore that law. I created a technique to be able to quickly mount / dismount your plate via magnets and posted the procedure on the Tesla Motors Club forums, so when you park somewhere where they enforce the violation, like in a city public parking lot or street, you just open the frunk, pop it on, and you’re good. You can drive with it, too.

We’ve traveled all over the Western U.S., from Los Angeles to as far north as Portland (twice), countless trips to the Bay Area, and quite a few throughout Arizona.  I’ve visited 46 Super Chargers in 5 years (yes, I keep a list). I’ve cut it close a few times – and fortunately have never suffered running out and being stranded.

A Supercharging stop is always an excuse to take some photos of what’s around you – or the obligatory Sima Selfie.

Split screen Nav + NFL = All you need on the giant touch screen.

One birthday, my family made me a cake with some of my interests and passions. Among them Bitcoin, the Philadelphia Flyers, the C# programming language, and top-center, Tesla!

In October 2014 I headed to the big event in Hawthorne where Elon decided to “unveil the D” – and after seeing the autopilot demo, I was sold.

I ordered my second Model S that night. This time in Grey.

I traded in my Black Model S and in December 2014, took delivery of one of the very first P85D configurations!

My first “Insane Mode” launch was INCREDIBLE!

The next week, I upgraded the wheels to the aftermarket TSportline edition.  I love how they match so well with the grey body and they look like factory quality stock – understated.

The Model S is a truly beautiful, timeless design.  People often ask me what my favorite feature is, and I say – besides the zero emissions, linear torque, head snapping acceleration, giant and intuitive touch screen – my favorite feature has to be that there is no on/off (start/stop) button. The absence of a user interface is the best user interface – and Tesla recognized this early and made that brilliant decision to not put something in the vehicle that isn’t inherently necessary.  Less is more.

Now – Sima’s turn to be a Tesla owner.  Enter the Model X!

In September 2015, Tesla had a big event in Fremont to show the final production Model X. We had reserved a “Signature” (first 1000) and we’re super excited to attend.

Sima ended up making it into the LA Times and the San Jose Mercury News on a feature covering the event!

In January 2016, we received a phone call from the Tesla Centinela service center, letting us know that her Model X was ready for delivery – one of the first – and a rare “triple white” configuration.

Shortly after, I had the wheels plasti-dipped to black. I wouldn’t recommend it, though. I think it’s better to powder coat or purchase wheels already the color you like.  Either way – I think black wheels look orders of magnitude better than the stock silver.

ABG = Always Be Goofin’.

We really could talk about Tesla all day – and I often do.  This was during a ride up the Pacific Coast Highway.

I added front and rear dashcams to both cars in 2016, and really recommend them.  I caught a valet driver banging my right rear fender into a post. I noticed the dent the next day, and I confronted the valet company manager.  He denied it – saying that the valet claim ticket had a drawing on it already showing damage. When I showed him the evidence, he profusely apologized and his insurance handled the repairs.

I wrote this dashcam program to help people download the footage from their dashcam without having to eject the card or touch it in any way.

My colleague kept forgetting to plug his car in when he arrived at the office, and he would have to go running out mid-day to plug in.  So I also wrote a program for him that would text him if he was within a certain geo-fence, unplugged, with his remaining battery level below a specified threshold. This saved him lots of time!

Here’s a mobile service technician replacing the 12v battery.  Tesla Service has been absolutely fantastic. They’ve handled everything, however minor, and have always provided a Tesla loaner. I’ve been extremely pleased with the customer experience.  They really back up their product and support it. They are way more than just talk. They back up their words with actions and I could not be happier with the service I’ve received.  They’ve set a tone for excellence early in their history and I expect that they will maintain it as they grow.

Earlier this year, I decided to give my Model S a fresh look, and had it wrapped with 3M satin space grey and a chrome delete, where they wrapped all the chrome in black.  It’s like a new skin for the car and it’s really easy to clean. I like that it makes it more unique, distinctive, and really sleek.

I recently added a Reviver Auto RPlate digital license plate.  It’s hard wired to the battery, and the company says will be able to display the HoV (carpool) designator as a small icon in the future.  You can choose a message from a pre-set list to display at the bottom.  I chose “I Love You” because – why not?  The world needs more love.

Imagine again… an alternate universe.  Imagine if every car were electric now, our roads clean and quiet, and our air clean and fresh.  Then imagine if someone introduced a car into which you must pour a smelly, flammable, toxic fluid, burn it, and pump the noxious fumes and smoke out the rear for everyone to have to breathe.  Who would want such a car?  The answer is obvious.  Electric vehicles are indeed our future for sustainable transportation. You can either get on board now and be part of the change, or wait around and be part of the mass adoption.  Either way is OK. Tesla will be there and be ready when you are.  The Model 3 is the cornerstone of Tesla’s secret master plan and it’s ramping up fast.  Autopilot improves every few months and before you know it, Tesla will be the first to offer a truly autonomous vehicle.

Driving in Los Angeles and many other places can often be a grind and a chore.  I choose to enjoy every moment driving – and make the best of it. With these cars, it’s easy. It makes life that much better.  Road trips and daily trips have all become a joy, an appreciation of the journey with every electric mile, and every fuel station passed by.

If you liked this story, please share it, and when you do decide to purchase a Tesla, please use this referral link and gain credits for both of us.  Thanks! #ZeroEmissions #DriveFree

Raspberry Pi - Palm of your Hand

The Lightning Network is Bitcoin’s biggest step in achieving global performance and scalability. To truly achieve scale in the billions of transactions per day, you need what’s called “off-chain” transactions, and the Lightning Protocol lays out exactly how it’s done.

This guide walks you through the steps in running a full Bitcoin Lightning Network node on a Raspberry Pi. When you’re finished, you’ll have a full-featured, decentralized international bank in the palm of your hand contributing to world commerce! How cool is that?



There’s 4 steps to getting this done:

1. Setting up your Raspberry Pi
2. Compiling and configuring a Bitcoin full node, syncing the blockchain, and adding your node to the Internet
3. Compiling and configuring a Lightning Node, and broadcasting its existence to the Internet
4. Funding your wallet

Plow through these steps, and you’ll soon be up, running and doing your part in making Bitcoin and the Lightning Network bigger and stronger!

1. Raspberry Pi Setup

Raspbery Pi SetupFirst, you need a Raspberry Pi and an External USB drive with at least 250GB (as of the time of this post) capacity. I found an old, slow 250GB USB 2.0 drive lying around. It doesn’t have to be super fast – it’s more about storage than speed.

Install Raspian and enable SSH. Follow this guide for detailed instructions.

Once you’re up and running, it’s always a good idea to update to latest packages:

pi@raspberrypi:~$ sudo apt-get update
pi@raspberrypi:~$ sudo apt-get upgrade
pi@raspberrypi:~$ sudo apt-get dist-upgrade
pi@raspberrypi:~$ sudo apt-get autoremove

Next, you need to mount your USB drive. The MicroSD card should be used for the operating system and programs only, not for the large and growing Bitcoin blockchain. I recommend formatting the drive as NTFS, but you can also use native Linux EXT4. One of the main reasons you may want to use NTFS, is that if you want to download the blockchain faster, you could download it via a Windows full node, and then use the drive for the Raspberry Pi. For details on other options, here’s a detailed guide. For this example below, it assumes you’ve formatted the drive as NTFS. Plug your drive into your Raspberry Pi. Now you’ll install NFTS on Raspberry Pi and mount it.

pi@raspberrypi:~$ sudo apt-get install ntfs-3g

Confirm that the drive is recognized:

pi@raspberrypi:~$ sudo fdisk -l

At the bottom of the partion list, you should see something like this:

Device Start End Sectors Size Type
/dev/sda1 2048 625072127 625070080 298.1G Microsoft basic data

‘/dev/sda1’ is your mount point. Create a mount point and mount the disk:

pi@raspberrypi:~$ mkdir data
pi@raspberrypi:~$ sudo mount /dev/sda1 /home/pi/data

To ensure it’s mounted each time you reboot, edit /etc/fstab:

pi@raspberrypi:~$ sudo vi /etc/fstab

and add this line:

/dev/sda1 /home/pi/data ntfs-3g rw,default 0 0

Now you will be able to see the contents of the drive:

pi@raspberrypi:~$ ls data
drwxrwxrwx 1 root root 0 Mar 18 22:44 $RECYCLE.BIN
drwxrwxrwx 1 root root 0 Mar 18 20:47 System Volume Information

Great! Now our Raspberry Pi is setup, we’ve got the latest-and-greatest updates, and enough disk space to host a full node. On to Step 2.

2. Compile, configure, sync, and broadcast a full Bitcoin node

First, install the pre-requisites needed to compile and run Bitcoin.

pi@raspberrypi:~$ sudo apt-get install git build-essential autoconf libssl-dev libboost-dev libboost-chrono-dev libboost-filesystem-dev libboost-program-options-dev libboost-system-dev libboost-test-dev libboost-thread-dev libtool libzmq3-dev libevent-dev libtool libssl-dev libboost-all-dev libminiupnpc-dev qt4-dev-tools libprotobuf-dev protobuf-compiler libqrencode-dev db4.8-util -y

There’s more… Download, compile, and install Berkeley DB:

pi@raspberrypi:~$ wget
pi@raspberrypi:~$ unzip
pi@raspberrypi:~$ cd db-4.8.30
pi@raspberrypi:~/db-4.8.30$ cd build_unix
pi@raspberrypi:~db-4.8.30/build_unix$ ../dist/configure --prefix=/usr/local --enable-cxx
pi@raspberrypi:~db-4.8.30/build_unix$ make
pi@raspberrypi:~db-4.8.30/build_unix$ sudo make install
pi@raspberrypi:~db-4.8.30/build_unix$ cd ~

Let’s update all packages again just to ensure we have latest and greatest.

pi@raspberrypi:~$ sudo apt-get update
pi@raspberrypi:~$ sudo apt-get upgrade
pi@raspberrypi:~$ sudo apt-get dist-upgrade
pi@raspberrypi:~$ sudo apt-get autoremove

OK, let’s download Bitcoin and build it. As of this post, Bitcoin is on version 0.16. Change the branch name (-b) below to the latest version.

pi@raspberrypi:~$ git clone -b 0.16
pi@raspberrypi:~$ cd bitcoin/
pi@raspberrypi:~bitcoin$ ./
pi@raspberrypi:~bitcoin$ ./configure
pi@raspberrypi:~bitcoin$ make
pi@raspberrypi:~bitcoin$ sudo make install

Be prepared to wait. This may take at least 2 hours!

Now that you’ve got Bitcoin downloaded, compiled, and installed, the next step is to RUN it. First, cd into your USB drive and let’s make a bitcoin.conf file:

pi@raspberrypi:~$ cd data
pi@raspberrypi:~/data$ mkdir BitcoinData
pi@raspberrypi:~/data$ cd BitcoinData
pi@raspberrypi:~/data/BitcoinData$ vi bitcoin.conf

Add these lines (change the rpc password, this is just an example):


Add a symbolic link for ~/.bitcoin. This makes it easy to run bitcoin-cli commands without having to specify a specific -datadir each time.

pi@raspberrypi:~/data/BitcoinData$ cd ~
pi@raspberrypi:~$ ln -s /home/pi/data/BitcoinData/ ~/.bitcoin

Start the Bitcoind daemon to run the node:

pi@raspberrypi~$ bitcoind -daemon

Nice! We’re off and running. Let’s check the progress of the node as it downloads the blockchain. It’s gonna take a while. Depending on your bandwidth, it could take a few days – if not more. Eat. Sleep. Code. Repeat. Wait this out…

Patience, you must have

While you’re waiting, you can check progress by looking at the ‘progress’ output. Once it hits 1.0, you’re synced!:

pi@raspberrypi~$ tail -n 1 ~/.bitcoin/debug.log
pi@raspberrypi~$ bitcoin-cli getblockchaininfo

Allow the pi user to run tasks at startup:

pi@raspberrypi~$ sudo vi /etc/cron.allow

Add this line:


Create a bash file to start the Bitcoin Daemon on reboot:

pi@raspberrypi~$ vi

With this:

sleep 10
/home/pi/bitcoin/src/bitcoind -daemon

Add it as a cron job on boot:

pi@raspberrypi~$ chmod +x
pi@raspberrypi~$ crontab -u pi -e

Add this line to the bottom:

@reboot /home/pi/

So now when you reboot, bitcoind will startup.

Once the blockchain is synced – WHEW – that’s a lot of steps, but hey, if it was easy everyone would be doing it.  We’re still in the early phases here.

It’s a good idea to now make your node available to the outside world. This helps improve the security of the Bitcoin network, and you’ll be rewarded with good mojo and karma to spare. Take the time to open your heart / port to the outside world.  See how analogous technology and physics is to philosophy? 🙂

Be sure to open and forward both port 8333 (Bitcoin) and port 9735 (Lightning) on your router.

Onward to lightning.

3. Lightning strikes now

The lnd Lightning implementation was developed using Golang. Learn about why Go is great!

pi@raspberrypi~$ wget
pi@raspberrypi~$ sudo tar -C /usr/local -xzf go1.10.linux-armv6l.tar.gz

Setup go properly by editing .bashrc:

pi@raspberrypi~$ mkdir gocode
pi@raspberrypi~$ vi .bashrc

Add these lines:

export GOPATH=~/gocode
export PATH=$PATH:$GOPATH/bin

Run your .bashrc

pi@raspberrypi~$ source .bashrc

Get one more LN dependency:

pi@raspberrypi~$ go get -u

Now we’ll install LND – the reference client, the “Lightning Daemon“:

pi@raspberrypi~$ git clone $GOPATH/src/
pi@raspberrypi~$ cd $GOPATH/src/
pi@raspberrypi:~/gocode/src/$ dep ensure
pi@raspberrypi:~/gocode/src/$ go install . ./cmd/...

Again, always good to run “latest-and-greatest”, so when you want to update LND, run these commands:

pi@raspberrypi~$ cd $GOPATH/src/
pi@raspberrypi:~/gocode/src/$ git pull && dep ensure
pi@raspberrypi:~/gocode/src/$ go install . ./cmd/...

Test your LND installation:

pi@raspberrypi:~/gocode/src/$ go install; go test -v -p 1 $(go list ./... | grep -v '/vendor/')

Similar to how we setup bitcoin.conf, let’s setup lnd.conf. Replace X.X.X.X below with your public IP address. This will broadcast that you have a Lightning Node to other nodes, and auto-connect to available channels:

pi@raspberrypi:~$ cd data
pi@raspberrypi:~/data$ mkdir LightningData
pi@raspberrypi:~/data$ cd LightningData
pi@raspberrypi:~/data/LightningData$ vi lnd.conf

Add these lines:

[Application Options]



Add a symbolic link for ~/.lnd:

pi@raspberrypi:~/data/LightningData$ cd ~
pi@raspberrypi:~$ ln -s /home/pi/data/LightningData/ ~/.lnd

Create a bash file to start it up:

pi@raspberrypi~:~$ vi

With these lines:

sleep 20

OK, the Lightning Node software is installed and configured. Now it’s time to set it up to run at boot time:

pi@raspberrypi:~$ chmod +x
pi@raspberrypi:~$ crontab -u pi -e

Add this line to the bottom, under the line:

@reboot /home/pi/

You can reboot your Raspberry Pi now, and both bitcoind and lnd will start up. For now, let’s just start it manually:

pi@raspberrypi:~$ ./ &

4. Bolt it together

At this point, both Bitcoin and Lightning are running and serving the world! There’s an incredible amount of detail for both the Bitcoin and Lightning protocols and commands, too much to cover in this post.  That said, here’s a few to get started:

Create a new wallet:

pi@raspberrypi:~$ lncli create

Get a new receiving address:

pi@raspberrypi:~$ lncli newaddress p2wkh

Send a small amount of Bitcoin to your Lightning Node. As of this post, LND is still beta! Be careful, and just send a small amount of BTC.

Run these to see some diagnostic info:

pi@raspberrypi:~$ lncli getinfo
pi@raspberrypi:~$ lncli listpeers
pi@raspberrypi:~$ lncli listchannels
pi@raspberrypi:~$ lncli listpayments

Looking back, that was quite a few steps, right? I know that this can be simplified using Docker, and I may do this at some point. This is my predecessor guide to packing this up as Docker container that as a future iteration.

You made it! There’s obviously a lot to Lightning, and this is just the beginning. These are the very early days. Soon, Lightning will live on your phone and desktop machines and you won’t even realize you’re using it. It will be as seamless as mobile location services are today. For now, plowing through these steps helps you understand how it all works, and you can sleep well knowing that your little $35 computer is helping grow and secure the network for Bitcoin – the world’s future currency.

Now that you’re up and running with a full Bitcoin Lightning Network node, what happens to it if there’s a problem? I’ll tackle maintenance, monitoring, and health in my next post!

.NET Open Sourced

Anyone that knows me knows that I have been a supporter and adopter of Microsoft technologies for decades.  I prefer not to use the word “fan”, because I’m an active participant, not a passive onlooker.  I’ve attended almost every Microsoft developer conference since 1993, back when it was called PDC.  I’ve built small and large software on Microsoft technologies my entire career.  I built a framework on top of Microsoft VBA.  I started a company with a former Microsoft employee.  I’ve contributed to Open Source Microsoft projects.  I’ve built an e-commerce platform on .NET and IIS that has transacted over $1B and has endured the tests of time.  My license plate used to be CEESHRP!  My ties to Microsoft have been a big part of my career path.  I understand how Microsoft works, and I understand what .NET is and what it’s not.  I’ve heard from countless Microsoft naysayers, and defended Microsoft for decades.  It’s been a tireless fight – and I’m not ready to give it up.

.NET is often misunderstood.  It’s doesn’t only run with “expensive Windows licensing” and it is definitely not a big and slow monolith.  It is a mature framework that runs on the big 3 (Windows, OS X, Linux) operating systems and is behind the fantastic cross-platform mobile app product, Xamarin.  .NET has been cross-platorm for a while, and with the efforts of Mono, even runs on iOS and Android.  .NET is indeed portable.

And recently, Microsoft did something really bold – they decided to open source .NET.  From its mature and reliable lineage, .NET Core was born.  Finally, the .NET Framework will be truly native, truly open source.  The community can contribute to it and make it even better than it already is.  This was a big move, a big announcement, and part of the “new Microsoft” that new CEO Satya Nadella has been building.  The Microsoft developer community was buzzing with excitement over this.  The rest of the developer community – a bit skeptical.  After decades of closed source, these transitions take time.  They don’t happen overnight.  This was the beginning of something really, really right.

Flash forward from the announcement to today, about 18 months later.  .NET Core is turning out to be AWESOME.  I ported a few of my projects to RC2 easily, and one of the best parts about the experience was this very simple, project.json file that is at the root directory of every project.  This file basically tells .NET Core which dependencies to include and how to output the result of a compile.  It’s simple, it’s easy to read, and it’s aligned with the way many, many open source projects work.  Open Source developers are used to this – a product, and a config file.  Config, run, modify config, run again.  Get it right, tweak, tune, rinse, test, push, deploy – REPEAT.  This is the way we work.

Microsoft built this cool command line interface for the .NET Core Framework – the CLI.  It’s what makes .NET Core as simple as:

$ dotnet new
$ dotnet restore
$ dotnet run

These commands use the project.json file and figure out what to do with code. What to do with all the C# and F# files that make up your project.  Simple, elegant, and easy to understand and read.  Everyone working with .NET Core has gotten used to it.  It’s part of what makes .NET Core the “new Microsoft”.  I was planning on blogging and extolling the virtues of .NET Core and how fun it was.  But then something disappointing happened…

This week, I saw a tweet announcing a new blog post from the .NET Team, and was excited to see what’s new.

I thought, “Uh, what’s this…?”. In reading this post, I had to consider for a second if this was April 1st and they were joking.  I wish it was.  So now, instead of doing a deep-dive on .NET Core goodness, I ask Microsoft…

Dear Microsoft,

This is it.  This is your chance to go head-to-head with Node.js and all the developers using Javascript and cobbling together libraries.  This is your chance to grow .NET into an amazing cross-platform, open ecosystem.  This is the opportunity, right now, with .NET Core to build something the community will get behind.  This is your chance for a new generation of programmers to be exposed to all the amazing ideas and methodologies you’ve spent decades building.  It’s this.  It’s this simple, little thing, this ONE file, this root of the beginnings of an idea that often starts with “Hello” and ends with “World”.  It’s the thing that keeps it simple – like Go, which doesn’t even require a project file at all.

This decision you announced this week will be perceived as going back to unreadable XML .csproj throws the simplicity out the proverbial window, and will ruin all that you have built with the tooling around .NET Core.  It won’t kill it, but it will severely limit it.  It will turn people off and they will miss out.  Tooling matters – a lot.  I imagine that you felt the need to do this because to support complicated projects, the project.json structure would handcuff you.  Maybe that’s true, or maybe it’s not, but either way, I see 4 solutions:

Option 1: Keep project.json, work around the complex projects, and make it work.  Simple, or complex, depending on the size of the project.  One file.

Option 2: Support BOTH project.json and myproject.csproj, and if both exist for the same project, display warnings or errors, and/or have different output assembly root targets for each project type.

Option 3: Stick to this decision to abandon project.json, and watch .NET Core grow slowwwwwly, and watch new frameworks rise up and pass you.

Option 4: Get Forked.  The community outside Microsoft decides that this issue is forkworthy, forks the CLI, and preserves what has been built so far for project.json while keeping up with the rest of the runtime changes.

Option 3 is the beginning of the end.  You may not see it now, but it will hurt you long-term.  It will absolutely fuel the flames of the bad stigma Microsoft has in the open source community.
Option 4 is a question of Why?  Why have two factions with different goals?  That didn’t work out for io.js and Node.js, and it won’t work here either.  It will spark mistrust, resentment, and the product will suffer.  I really hope this doesn’t happen.

I hope you decide to do the right thing and re-think this.  Your long-term respect, adoption, and company growth are at stake.  It may seem like a small decision now, but it’s these small decisions that have large impact.  Look back on your own incredible history.  Look within and you’ll find the answer right in front of you.



This tweet should not exist.  I hope they make it right.


The Complete Golf Handicapper for Windows was developed as an independent study project at the University of Arizona in 1991. It was my last semester in Computer Science, and I needed 1 more unit to complete my degree.

At the time in an academic setting, Windows was a very unknown, mysterious, and dismissed Operating System. I knew that Microsoft was on to something with Windows, and I knew it would be popular, so I taught myself how to develop for Windows with Charles Petzold‘s seminal book Programming Windows as my bible.

I hard-pitched my Computer Science Professor, Robert Drabek the idea of a native Windows GUI program where you could enter in your actual per-hole golf scores, compare them to the course certified par, and it would compute your handicap for that round, and keep history for all your rounds. It took some convincing – he wanted me to do it in Unix/X11, but I eventually talked him into letting me write it for Windows 3.0.

The only language back then to write Windows programs in was C.  I used Microsoft’s C 6.0 Compiler, which was like $600, so I “borrowed” a copy from a friend and coded away.

Original 3.5" Floppy Containing Source Code

I found this 3.5″ floppy disk in my garage the other day and thought it would be fun to see it, so I ordered a USB Floppy Drive from Amazon, and much to my pleasant surprise – 24 years later, the disk was still readable, and the code all there.

I post it to Github for historical significance under the “public domain” spirit, being how old it is. :blush:

It’s interesting to look at how low-level I had to write to get the simplest things done. Programming Languages and Application Frameworks have come a long way since 1991!



GolangI’ve heard it’s never too late to learn a new language.  For spoken languages I’m not sure I agree, but for programming languages – of course!  The Go programming language started at Google in 2009, so I figured it’s about time I dug in with the Gopher.  Go is “almost” systems level, but it does have garbage collection, so language purists may dismiss it as a systems level language just based on that.  But with today’s processors, there’s a strong argument that Go can be a very successful all-purpose language.  I guess I was feeling retrospective after meeting Charles Petzold recently and thinking about how much C programming I did in the 90s.  His seminal, Programming Windows, was my daily bible study.  So, I thought, well I’m not going back to C after over a decade with C#, but let’s give Go a try!

I checked out the documentation, took an online course, and I was go for Go.  One of my colleagues, Darren Warner, had a recent devops task to connect to BitBucket’s API, iterate through the repos, and return status and information on any open Pull Requests.  He wrote it Python – and it was a perfect porting candidate for diving into Go.

Visual Studio Code running Go

I broke out Visual Studio Code (AKA Visual Studio Ultralight), and coded away.  My goal was for it to be as pure-native Go as possible, so I only used built-in Go standard library packages – no 3rd party add-ons.  I found the HTTP package to be great, works as it should – light, nice and async.  The JSON handling via maps are a bit verbose, and I’m sure I could re-factor some of that using any of the 3rd party JSON marshalling packages available, but again, I wanted to keep it as native and fast as possible.  I used proper error handling and create new err on every possible fail condition.

To run, simply:

> go run pullrequests.go --ownername="bitbucket-repo-owner-username" --username="my-bitbucket-username" --password="my-bitbucket-password"

Check out the complete code on GitHub or BitBucket!



Graphic Credit: cybrbeast

Money plays a very substantial role in our lives – duh.  It is the fabric of almost everything we do and how we do it.  Where we live, what we drive, where we work, how we travel, what we eat, what we do in our spare time – it all revolves around money in some way.  We’re born knowing nothing about it – yet some are born into it.  It certainly isn’t something we instinctively know – yet it’s easily understood.  Every society and culture has some sort of currency as a means of exchange.  Since the beginnings of civilization, humans have invented methods to represent value via currency.  Whether it be sea shells, diamonds, gold, stocks, the number in a computer at your bank, or the paper dollars in your pocket.  Why are diamonds “worth” more than a handful of sand?  Because diamonds are more scarce.  Money means something because we as a collective society have decided it does.

I’ve been quietly studying Bitcoin for years, and today is the first day I’ve ever discussed it publicly.  Today is a milestone day in the history of Bitcoin, after the mysterious inventor of Bitcoin, Satoshi Nakamoto, was “apparently” finally found, hiding in plain sight, living just an hour away from me.  Well, maybe not.  It seems that maybe Newsweek was wrong.  Either way, today is the day I’ve decided share my thoughts.  I first discovered Bitcoin in November 2011, when I read the seminal The Rise and Fall of Bitcoin in Wired Magazine.  I was fascinated by it, but like the title implies, I thought it was dead, and that Bitcoin was over.  About 6 months later, I started seeing that Bitcoin was alive and kicking, and I began again with a renewed interest.  I studied the code, I read and re-read Nakamoto’s paper, and I immersed myself reading pretty much everything there is to read about Bitcoin.  I read books about money, the history of money, how money is physically manufactured, how inflation works, the role of the Fed, the history of the gold standard, and more.  All in an effort to wrap my head around something so complicated, yet so simple.  As some of my friends will tell you – it’s a common topic when hanging out with me – Bitcoin and of course, Tesla.  It sparked something in me that I hadn’t felt since my good friend and colleague, Paul Melmon, showed me a Web Browser (Netscape), for the first time in 1994.  I knew that Bitcoin was something incredible.

Bitcoin is quite simply, “The Internet of Money”.  As Bitcoin expert Andreas Antonopoulos has said, “Bitcoin is an invention, and it cannot be uninvented“.  Bitcoin is here and it’s here to stay.  I often get asked, “Well, what if they shut it down?”.  My answer is usually something like, by “they”, I’m assuming you’re talking about the United States Government, and yes, governments can make it difficult or illegal to transact in Bitcoin in their country’s jurisdictions, but they cannot shut it down across the globe.  No one can.  It’s out there. It’s on the Internet and it will live in some form forever and it cannot be shut down.  Last December, Bitcoin got national media attention as the exchange rate against the US dollar rose to over $1100 / 1 BTC.  I knew in that moment then that it was the end of Bitcoin’s quiet growth among techies – everyone will now hear of it.  When it hit the mainstream, I imagined all the pump-and-dump Wolves of Wall street scheming on how to best profit from it.  And profit they will.

The way I see it, as of this post, the Bitcoin market cap in USD is about $8 Billion.  That is an absolutely small number when you think about the value of all the currencies combined in the world.  It will only grow as Bitcoin becomes more popular and is adopted and accepted in more places both on-line and off-line.  Since the Internet, borders matter less and less, and the world needs a global currency.  A currency where its value is unregulated (aka un-mismanaged), anti-inflationary, and scarce.  Bitcoin is that – a currency that is built on cryptography and math and cannot be manipulated or forged.

News around Bitcoin emerges daily – some good, some bad.  Companies are being formed each week around Bitcoin and merchants are adding Bitcoin as a payment option at a fast clip.  If you have questions about Bitcoin there are numerous resources that can explain it better than me.  Here’s a few:, bitcoin on reddit, bitcoin on Google, a top VCs thoughts – just look around, but look smartly.  Bitcoin is still VERY misunderstood.  Like news about Tesla, try and filter the real news, the real truth from the fear, uncertainty, and doubt the way news organizations present information.  They’re often flat-out wrong.  Validate what you hear and learn for yourself.  Find the truth.  Question everything.

I often get asked, “How do I get started?”.  I usually send people to Coinbase if they’re ready to buy Bitcoin for USD.  It’s pretty easy to sign up.  I’ve challenged a few of my friends over IM with frantic instructions to “Quick.  Go here:, paste the wallet address in the IM.  Do it in < 3 minutes I will send you some Bitcoin.  Ask no questions.  GOOOOO”.  NONE of them have failed.

To the skeptics of Bitcoin – we’ve heard you before.  You’re the same people that thought the government should “ban” or “regulate” the Internet.  You’re the same people that think Tesla Motors is a bad idea.  You’re the Telcos that wish you could ban VOIP.  We know who you are and we see through you.  We see the politician, Joe Manchin, and we question your motives and the banks behind your corruptness.  Bitcoin will succeed because it fills a need – and over time will clear the obstacles thrown at it.  Those that fear it, don’t understand it.

Bitcoin is better than the Dollar.  Bitcoin is better than your credit card and your bank account.  But Bitcoin is a baby – a very small baby.  It’s in its infancy, just like the Internet was before it exploded around 1994.  It will take a few years, but it will happen.  Bitcoin is your world currency.  It’s your open source technology.  Get used to it.  Now go get some Bitcoin!

Tesla LogoI’ve seen the future and it’s all around me in Santa Monica, California.  I’m talking about Tesla, and the Tesla Model S.  This future will soon be all around you – wherever you are in the world.  I had the experience of driving a friend’s Model S last month and was completely blown away.  I immediately got on the phone with my friend’s Tesla contact and placed an order for one.  No hesitation, no regret, just a knowing that this is the beginning of something very, very special.

I was interested in fuel car alternates once before, in 2006, when I felt that it was important to at least try and be a little more environmentally sensitive and bought a Prius.  In less than a year, I had enough and sold it.  I completely cooked the front tires after 6 months and just couldn’t drive it anymore.  Around corners it felt like it was tipping over, and at highway speeds, it felt like being in a noisy piece of cheap tin.  My mind was in the right place on buying that car, but it was far from being the right car.

Fast forward to now.  This time it’s much, much different.  I have a feeling and an instinct that I haven’t felt since Steve Jobs first revealed the iPhone in January 2007.  The Tesla Model S is going to change the way we travel forever.  It is a completely different experience to driving a conventional internal combustion engine (ICE) car.  It has pure, smooth, linear torque and acceleration.  You press the accelerator, power is delivered, and the wheels spin.  It’s that simple.  There’s no pumping fuel from a tank, through a filter, into a complicated engine where sparks are fired, explosions are detonated, pistons ascend and descend, rods turn (and I’m sure I’m missing some more gross inefficiencies) as the power makes its way to the wheels.  This all ends with the expulsion of carbon monoxide forced through the muffler, the exhaust, and then out in the atmosphere to damage mammal lungs, the environment, and lots other nasty effects.

To think we’ve gone this long without Tesla is shameful.  Others have tried and failed. The film, Who Killed the Electric Car? shows just how corrupt, political, and greedy some people are.  People, not corporations or government, thwarted progress and stopped the electric car from happening sooner.  Individuals make up corporations – individuals make up government.  Greed, and lack of vision of individuals were the enemy.  The misguided need to coddle foreign governments, wage wars, kill innocents – all around the economy of oil is going to end.  We as citizens of the United States and the rest of the planet are going to reduce the need for oil dramatically – very, very shortly.  We will still need it for airplanes, rockets, large trucks and other specialty vehicles for some time, but for passenger vehicles, the electric car is now.

It’s here now thanks to one person.  One individual decided that he was going to make this happen.  Elon Musk did something where others failed to, and decided by his own sheer force and his determination that it was not acceptable to NOT have a viable electric car.  His vision is now reality, and the second car from Tesla is one word: PHENOMENAL.  It is an absolute brilliant piece of engineering, design, and utility.  I’m completely convinced that ICE vehicles are done.  It’s not IF, it’s WHEN.  There is NO CHANCE they have a future.  The only future ICE vehicles have is their soon-to-be place in museums as relics of history.  They will be joining other obsolete objects such the dumb mobile phone, typewritersvinyl records & 8-tracks, film, and DVDs – all objects that have been supplanted by better versions with NO DOWNSIDE.

This future is soon going to be everywhere.  This future is growing, and there’s no stopping it.  This future is obvious to anyone that thinks rationally.  The other automakers KNOW IT.  And they’re NOT competing well at all with Tesla.  They’re failing to build a comparable product to the Model S.  So for now, some of them, and the dealerships, have been using their substantial political muscle to try and make it difficult for Tesla to grow as the market allows them to.  They’re trying to block sales of Tesla in certain states. These are dirty, nasty, and desperate tactics.  And they won’t work this time.  The world is too transparent now.  We see through these tactics with great clarity.  They may win a dirty fight or two against Tesla in the short term, but there’s no stopping the unstoppable market forces in a capitalistic society.

BMW, to their credit, has recently tried to build their own electric alternative.  I’ve owned 7 BMWs over the years.  BMW has always been a company that makes beautiful, quality products.  But, I look at their first electric vehicle, the BMW i3, and it’s completely underwhelming.  The range, the power, the styling, the price, are all pretty mediocre to put it nicely.  That said, BMW and the rest of them WILL eventually come out with great cars.  All of them will.  They will all be copying Tesla, they will pay Tesla patent license fees, and they will be able to compete.  The future will have EV versions of  beautiful luxury, affordable compacts, SUVs, trucks, motorcycles – all of them.  It will happen.  But right now, at least for the next 3-5 years, Tesla is going to DOMINATE this market.  Again, it reminds me of the iPhone.  There was nothing like it for a few years after it launched in June 2007.  Today, there are many comparable smart phones.  But Apple sure did get a head start and their stock price and company growth exploded during those first few years of absolute dominance.  The same thing is happening with Tesla.

It is a modern lesson and example to us all that one individual can make such a difference .  When one individual’s vision is clear and backed by relentless determination, something wonderful can happen.

I take delivery of my Black Model S at the Tesla Factory in Fremont, California, USA later this month.  The future of vehicles is here now, and in MY very near future, I see myself smoothly driving out of the Tesla factory – smiling ear to ear.  I can’t wait…

UPDATE: To order your Tesla, be sure and click here for referral credit for both of us!


Dear Mr. Drabek,

I first met you during my sophomore year as a Computer Science student at the University of Arizona in 1988, where I had my first class with you.  I’m writing you to let you know how much of a positive impact you had on me.  I’ve taken what you’ve taught me and built a career on the lessons I learned from you.

You were very strict, very serious, and I respected your skill, your style, and your knowledge.  I remember focusing on what you had to say more than any professor I had.  I didn’t want to miss a word.

I remember anticipating your class more than any other, eagerly wanting to learn all the cool things you knew.  I learned a lot from you and it’s stayed with me – always.

One way you influence me every day is simply – coding style.  You were very careful about teaching the “right” way to code and pointing out the wrong way to code.  Your style still influences every line of code I write.  I now use a code analysis tool, ReSharper, to validate my work and every time I look up at the indicator in the editor and see what it needs to fix, I’m always happy when I see it’s only one or two improvements.  I feel like you made my brain ReSharp code as I develop it.

I came to you my senior year with an Independent Study project to write a Golf Handicapping Program on Microsoft Windows 3.0.  The first thing you said to me was – “Everyone here thinks Windows is a toy and will never go anywhere”.  I replied back, “Well sir, it’s not, I think it’s going to grow really fast”.  Too bad I didn’t have any money to buy Microsoft stock back then, but you agreed with me and you let me do it.  I remember showing you an early version of my work and the code behind Windows events and you nodding how clever it was.  I remember seeking your approval so much so I was so nervous delivering the final version of the software, and after taking you through it, I finally got a smile from you.  Moments like that could have gone either way, and who knows where chaos theory would have taken me had you not believed in what I was doing.

My success in that project motivated me in such a way, that 2 years after I graduated, after I moved to Silicon Valley, I convinced my company to port all the software from Motif to Windows, and I led the way.

In 1998, I started my first company,, a photo sharing web site co-founded with fellow UofA CS alum Carlos Blanco.  Once I got the company funded, I bought us an awesome new 8U server from Dell, and when giving it a hostname, of course, I chose to name it after you: DRABEK.  Throughout the company’s life, all server requests flowed through a machine with your moniker proudly labeled in our data center.

Thanks for the impression you made on me.  Thank you for the teachings you gave me.  I really appreciate it and will never forget it.  You’re a great man, sir.


Brett Morrison, Class of 1991, University of Arizona

Back in September, I made the decision that I was done with iPhone – at least for a while.  Last week, I was fortunate enough to start my new experience a little early, as Microsoft & Nokia gifted all developers attending Build 2012 a free Surface RT tablet and a free Nokia Lumia 920.  My official #switchtolumia is complete.

When I opened the box back at the hotel Tuesday night, I was surprised to see how spartan the contents were.  This was truly a “developer” addition.  It came with a tool for opening the SIM door, a Micro USB cable, and that’s it.  Fine with me though – I don’t need or want any of the other frills.

I’m not a professional tech reviewer.  So, if you’re looking for some reviews, here’s one, and another, and another – I’ll just talk about my experience.

Because the phone I received is not linked to AT&T, I had to do some setup.  The commercial versions of the phone purchased from the carrier will likely be locked and setup for that carrier.  For me, it was slightly trickier.  Once pulling the SIM out of my iPhone 4s and placing in the Lumia, I selected one of the AT&T profiles and I was making & receiving calls & texts.  But, I wasn’t seeing 4G (LTE).  The next day I visited the Nokia booth at Microsoft, where they suggested I try the AT&T Store at the Microsoft Commons.  A quick walk over there, and a helpful rep provisioned my account for 4G, and after power cycling the phone, I was good to go with 4G.  I ran some speed tests on it and saw after about 5 tests, 15-18mb downstream 7-10mb upstream – WOW!

I downloaded the Windows Phone for Mac software, configured my email accounts, and voila, I was in business.

But, all my contacts were in Apple iCloud, what to do?  Well, Google now has CardDAV support in addition to CalDAV.  So, I decided to move my Contacts and Calendars to Google.  Now that they’re stored in my Google account, all my devices and software (OS X, Windows 8, iPad, Windows Phone 8) all point to one place and when I make a change on one, they all get synced – SMOOTH.

Podcasts, music, and photos all sync pretty effortlessly – actually MUCH faster than syncing an iOS device with iTunes.

My impression so far – Windows Phone 8 is GREAT.  It’s fast, smooth, and feels very intuitive.  Everyone I’ve talked to about it always asks me about apps.  As of this writing, 46 of the top 50 mobile apps are available on Windows Phone 8, and there’s over 100K+ total apps.  Of course iOS and Android have more apps, but I have yet to have a situation where I can’t do something I was previously able to do.  You find a way.  And most of the apps I use have mobile web sites that work fine in Internet Explorer 10.

The best feature of Windows Phone 8 is the Live Tiles.  It’s something the other mobile platforms don’t have and it’s aesthetically designed so elegantly.  The (formerly named Metro) design language is beautiful and inspiring – the true meaning of “less is more”.

The Lumia 920 is a large device.  It definitely takes some time getting used to.  It took me a few days to feel like I wasn’t going to drop it, holding it in one hand.  It definitely feels heavy when holding to your ear.  The voice quality is clear and crisp and the fidelity of the sound is loud and vibrant.   I’m also pulling in a much better signal at my house than I was with the iPhone 4s and haven’t had any degradation in call quality.  The glass and the display quality are better than iPhone and other Android devices I’ve tried.  The speakers – loud.  The camera – sharp.

My biggest complaint so far is the battery life.  It seems unless I’m ABC (Always Be Charging), I run out of juice by late afternoon when using data on the phone.  That’s a problem.  It should last all day.  I’ve turned the 4G off and set the phone to 3G and we’ll see if that helps.  I can always enable 4G when I need it.  There are other nuances not worth mentioning, not significantly annoying – maybe they’ll be fixed in future updates.

The switch is done and I’m happy about it.

11/16/2012 UPDATE: Battery life is actually GREAT.  After a few charging cycles discharge / charge – repeat, I have a strong battery.  Others have had similar success.

Brett Morrison – Official Site

The official web site of Brett Morrison, Self-Made Technology Entrepreneur.


No feed found with the ID 1. Go to the All Feeds page and select an ID from an existing feed.