Archive Your Git Repo

Every few weeks or so, I find myself needing to archive my git repo. Usually it's to send code to someone who has no reason to access the repo directly. They just need a snapshot of the code, with no history information, because they won't be contributing to it.

I also have to provide a snapshot of my code for every module in my Pluralsight courses, so being able to archive my git repo into a zip file is very handy.

For some reason, I can never remember how to do this, and find myself looking it up repeatedly. So I've finally decided to write about it here, in hopes that it will help someone other than just me.

If you want to backup a git repo, completely detaching it from git, use one of the following variations of the git archive command:

Zip File:
git archive --format zip --output /full/path/to/ master
git archive master | tar -x -C /somewhere/else
Tar / Bzip
git archive master | bzip2 >source-tree.tar.bz2
Note that the archive will not contain the .gi…

Windows 10/Server 2016 100% Disk on BootCamp and Parallels!

I've been wrestling with Windows on my 2014 Mac Mini for more than two years. Soon after I bought the Mac, I made a 200GB BootCamp partition and installed Windows 7. I also bought Parallels 10 Desktop and pointed it at the BootCamp partition. It was great. I had a convenient VM when I needed something quick. I also had BootCamp when I needed native performance. Not long after that, I upgraded it to 8.1. Then sometime later, Windows 10.

I don't remember exactly when it happened, but one day I fired up Parallels and my entire system ground to a halt. Shutting down the virtual machine caused everything to go back to normal, so I figured the problem was with Parallels. So I upgraded it. Same problem. I made sure Windows was up-to-date, thinking that maybe the Windows Update service was going nuts. Nothing changed. Whenever Windows was running in Parallels, the Task Manager showed the disk activity pegged at 100%.

I tried all sorts of online solutions, but none worked. On a whim, I…

Ionic vs. Bootstrap - for a Web App

Ionic 1.x vs Bootstrap 3.x for a Web AppI was recently asked at work to come up with a comparison between Ionic Framework and a more traditional Angular/Bootstrap combination to create a web app. The application will primarily be used in a desktop web browser (probably Chrome or IE). There are also some use cases where it will be accessed from Safari on an iPad. However, this is purely a web; there are no plans to install the app onto the iPad as a hybrid app. Thus, recommending Ionic to build the UI hadn't occurred to me until the request was made.

This is even more surprising in that I recently published a Pluralsight course on Ionic Framework 1. It should have been the first thing that crossed my mind.
One constraint is that currently only Angular 1.x and Bootstrap 3 are authorized web technologies. Ionic 1.3 was recently approved, but not Ionic 2, Angular 2, or TypeScript yet.
Given those constraints, herein is my attempt at coming up with reasons to use (or not to use) Ionic…

Ring Video Doorbell Pro - Review

Over the past few months I have been toying with the idea of upgrading my home security system. It isn't that I live in a high crime area or anything like that. We tend to get the occasional prankster youth who thinks it's funny to leave unwanted items on the front porch. Around the holidays things get a bit worse, with Amazon boxes being stolen in broad daylight. Most home security systems would do anything to prevent those types of things.

Then two unrelated things happened. Ring came out with the Ring Video Doorbell Pro, which they advertised as more reliable and more feature-packed. Shortly thereafter my doorbell died; not the entire mechanism - just the button. So off I went to Amazon and ordered one. The reviews were overwhelmingly positive, though some of the early adopters had issues with firmware. Most people said that when they did run into problems, Ring's customer service seemed ready and eager to solve the problem. I decided to give it a shot.
It took longer …

Sneak Peek at Ionic Framework Tools and Patterns

Easily Send Text Messages from a Mobile App with Ionic Framework
Note: This is a brief sample of my Pluralsight Course, Ionic Framework Tools and Patterns. The text below is a rough transcript of the video shown here.

Every mobile phone knows how to send a text message. We can leverage that ability in our Ionic app by using the sms plugin. In the last section, we created a menu item to send a message to a student’s parent, but all it did was show a popup saying the message was sent. We can complete that functionality by wiring that up to the plugin now.

First, let’s not forget to install the plugin:
gulp --cordova "plugin add cordova-sms-plugin --save"

Next we’ll update the Roster controller to let the user enter the message to be sent. We’ll repurpose the $ionicpopup, and just change the show function to prompt, like so...

    function sendMessageToParent(student) {
        title: 'Message Parent',

Record Video of Your Android Screen on a Mac with ADB

Background I've been working a lot lately on writing mobile apps using the Ionic Framework. My goal is to be able to release apps for both iPhone and Android at roughly the same time. So far, I've only released apps for Android, simply because I'm too cheap to pay Apple $99/year. But that's neither here nor there.

The Problem Today I wanted to record a demo video for one of my apps running on my Android test device, an older Samsung Galaxy S4. I had no idea how to do that. Camtasia 2 for the Mac supports iOS devices out of the box, but not Android. What to do?

After a bit of searching, I found instructions on a few different sites. None of them had all of the steps I needed. So rather than trying to remember where I found everything, I figured I'd put all of the instructions in one place on my own blog so I could find it again easily.
PrerequisitesAndroid Debugging Bridge or Android SDKUSB to Micro USB cable (preferably the one that came with the device). Record t…

How We Teach

Teaching EDGE This is the second post in a 4-part series about how we learn. In the first post, I specifically discussed the four steps that everyone goes through when learning something new. To recap, they are:

Unconscious incompetence: You don't know what you don't knowConscious incompetence: You understand what you don't know and want to learnConscious competence: You start to understand, with effortUnconscious competence: You internalize your understanding and no longer have to thing about it. You just "get it."
In this post, I am going to discuss how to teach students at each step of the process. The techniques used will vary, depending on where a given student is. Please note, you don't have to be a professional teacher to understand and use these techniques. Whether you are a teacher, a parent, a manager, or even a student yourself, understanding these techniques can make you better at what you do.

The Boy Scouts of America are widely known as an organ…