How to Enable Social Icons in the WordPress Theme Customizer

I figure I might as well write about this before I deprecate it in my upcoming Theme. Social Nav Menus are much better.

A week or two ago as I was getting deep into developing a new WordPress Theme, I stumbled upon some pretty good looking code that would allow me to add Social Media Icons to the Theme Customizer like so:


At the time, it was a superb idea. I was just learning about all the possibilities the Theme Customizer affords developers and it was fun to implement the code and watch it work so smoothly.

However, after watching Morten Rand-Hendriksen’s Building Themes from Scratch Using Underscores and reading Justin Tadlock’s post on building Social Nav menus, I think I will scratch this bit of code in favor of Tadlock’s solution.

It just makes sense to not want to have to re-enter your Social Media links in every new Theme you install. Why not just leave all the Social links you want in a nav menu and use your Theme to style and output it specifically as a Social menu?

TwentyFifteen also does just that. (See #3 in this post.)

Nevertheless, I felt that the code itself was worth my time to invest in learning, so I’m reproducing it here for reference. This code is modified slightly from the example I found – I’ve included email as an option. It should be pretty easy to see how it’s done:

add_section(), add_setting(), add_control()

 * Social site icons for Quick Menu bar
 * @link:
 $wp_customize->add_section( 'social_settings', array(
     'title' => __( 'Social Media Icons', 'theme_slug' ),
     'priority' => 100,
 $social_sites = theme_slug_get_social_sites();
 $priority = 5;
 foreach( $social_sites as $social_site ) {
     $wp_customize->add_setting( "$social_site", array(
         'type' => 'theme_mod',
         'capability' => 'edit_theme_options',
         'sanitize_callback' => 'esc_url_raw',
     $wp_customize->add_control( $social_site, array(
         'label' => ucwords( __( "$social_site URL:", 'social_icon' ) ),
         'section' => 'social_settings',
         'type' => 'text',
         'priority' => $priority,
     $priority += 5;

function theme_slug_get_social_sites()

 * Social Media icon helper functions
 * @return array
 * @link:
function theme_slug_get_social_sites() {
     // Store social site names in array
     $social_sites = array(
 return $social_sites;

function theme_slug_show_social_icons()

// Get user input from the Customizer and output the linked social media icons
function theme_slug_show_social_icons() {
     $social_sites = theme_slug_get_social_sites();
     // Any inputs that aren't empty are stored in $active_sites array
     foreach( $social_sites as $social_site ) {
         if ( strlen( get_theme_mod( $social_site ) ) > 0 ) {
             $active_sites[] = $social_site;
     // For each active social site, add it as a list item
     if ( !empty( $active_sites ) ) {
         echo "<ul class='social-media-icons'>";
         foreach ( $active_sites as $active_site ) { ?>

             <a href="<?php echo get_theme_mod( $active_site ); ?>">
             <?php if( $active_site == 'vimeo' ) { ?>
                 <i class="fa fa-<?php echo $active_site; ?>-square"></i> <?php
             } else if( $active_site == 'email' ) { ?>
                 <i class="fa fa-envelope"></i> <?php
             } else { ?>
                 <i class="fa fa-<?php echo $active_site; ?>"></i> <?php
             } ?>
             </li> <?php
         echo "</ul>";

Oh, and obviously you’ll need to remember to enqueue FontAwesome in your WordPress Theme in order to make this all function properly. Then, the CSS styling is totally up to you.

6 Choices for a localhost Web Development Environment

For web development, the bare minimum you need access to is AMP:

  1. Apache server
  2. MySQL database
  3. PHP programming language

You can install these as a collection on your computer locally using various OS-specific installations:

  1. Windows: WAMP
  2. Mac: MAMP
  3. Linux: LAMP
  4. Cross-platform: XAMPP

Or, if you prefer an auto-installerBitnami is an excellent option. (And Softaculous also looks promising.)

Wikipedia also lists plenty of other Apache, MySQL, and PHP bundles if you’re interested in checking out any of the other ones, but in this post, I’ve taken screenshots of each major offering for you to compare:

#1. WAMP

WAMP homepage and server window
WAMP Server Homepage

#2. MAMP

MAMP homepage and server window
MAMP Server Homepage

#3. LAMP

LAMP Wikipedia and install
LAMP Software Bundle on Wikipedia

As the above picture indicates, if you want a straight up LAMP installation, you’ll likely be doing it all piece-by-piece – or through your Linux distribution’s get or yum installers. But if you’re a Linux user, you’re probably already comfortable with that kind of thing. Here are instructions for installing LAMP on various Linux distributions (source: Wikipedia):


XAMPP homepage and server window
XAMPP Server Homepage


AMPPS homepage and server window
AMPPS Homepage

#6. Bitnami

Bitnami homepage and server window
Bitnami Homepage

I’ve personally used WAMP, MAMP, and XAMPP and none has really been disappointing.

  • XAMPP is slightly more complicated and has more features (but that’s to be expected because it’s a Linux program as well).
  • WAMP is a good and simple option for Windows – I’ve used it with my high school students.
  • MAMP is a clean and simple option for Mac and I’ve used it exclusively on Mac before.
  • MAMP PRO is also a good option if you’re willing to pay a little bit because it allows multiple WordPress installations on the same localhost.

However, recently, I’ve been using Bitnami quite a bit on the recommendation of Morten Rand-Hendriksen, from, and I’ve quite enjoyed it. It’s very easy to download and install and the Server Manager program is very clean and well designed. It’s a simple one-click START or STOP for your servers and a one-click ACCESS SITE to go to your localhost install right from the Manager.

Which installation do you prefer? Leave me a comment with your thoughts.

This post has been modified slightly from my original post on

Default WordPress Theme Customizer Controls

I’ve recently been messing around with the WP Theme Customizer a bunch and have been looking for the names of all the default settings, sections, and controls. I found them in a file in the wp-includes folder:


The various default section names, setting names, and 'priority' are listed below.This is mostly useful if you’re trying to simply rearrange the position ('priority' => 20) of some options, or want to rename some of them like so:

$wp_customize->get_section( 'nav' )->title = __( 'Menus', 'theme_slug' );
$wp_customize->get_control( 'blogname' )->priority = 10;
$wp_customize->get_setting( 'background_color' )->default = '#169A70';
  1. Site Title & Tagline ('title_tagline'), 20
    1. 'blogname'
    2. 'blogdescription'
    3. 'display_header_text'
  2. Colors ('colors'), 40
    1. 'header_textcolor'
    2. 'background_color'
  3. Header Image ('header_image'), 60
    1. 'header_image'
    2. 'header_image_data'
  4. Background Image ('background_image'), 80
    1. 'background_image_thumb'
    2. 'background_repeat'
    3. 'background_position_x'
    4. 'background_attachment'
  5. Navigation ('nav'), 100
    1. "nav_menu_locations[{$location}]"
  6. Widgets ('widgets'), 110
  7. Static Front Page ('static_front_page'), 120
    1. 'show_on_front'
    2. 'page_on_front'
    3. 'page_for_posts'

The code specifically for 'widgets' is located in:


The full code for the default Theme Customizer settings is here:

 * Register some default controls.
 * @since 3.4.0
 public function register_controls() {

 /* Control Types (custom control classes) */
 $this->register_control_type( 'WP_Customize_Color_Control' );
 $this->register_control_type( 'WP_Customize_Upload_Control' );
 $this->register_control_type( 'WP_Customize_Image_Control' );
 $this->register_control_type( 'WP_Customize_Background_Image_Control' );

 /* Site Title & Tagline */

 $this->add_section( 'title_tagline', array(
 'title' => __( 'Site Title & Tagline' ),
 'priority' => 20,
 ) );

 $this->add_setting( 'blogname', array(
 'default' => get_option( 'blogname' ),
 'type' => 'option',
 'capability' => 'manage_options',
 ) );

 $this->add_control( 'blogname', array(
 'label' => __( 'Site Title' ),
 'section' => 'title_tagline',
 ) );

 $this->add_setting( 'blogdescription', array(
 'default' => get_option( 'blogdescription' ),
 'type' => 'option',
 'capability' => 'manage_options',
 ) );

 $this->add_control( 'blogdescription', array(
 'label' => __( 'Tagline' ),
 'section' => 'title_tagline',
 ) );

 /* Colors */

 $this->add_section( 'colors', array(
 'title' => __( 'Colors' ),
 'priority' => 40,
 ) );

 $this->add_setting( 'header_textcolor', array(
 'theme_supports' => array( 'custom-header', 'header-text' ),
 'default' => get_theme_support( 'custom-header', 'default-text-color' ),

 'sanitize_callback' => array( $this, '_sanitize_header_textcolor' ),
 'sanitize_js_callback' => 'maybe_hash_hex_color',
 ) );

 // Input type: checkbox
 // With custom value
 $this->add_control( 'display_header_text', array(
 'settings' => 'header_textcolor',
 'label' => __( 'Display Header Text' ),
 'section' => 'title_tagline',
 'type' => 'checkbox',
 ) );

 $this->add_control( new WP_Customize_Color_Control( $this, 'header_textcolor', array(
 'label' => __( 'Header Text Color' ),
 'section' => 'colors',
 ) ) );

 // Input type: Color
 // With sanitize_callback
 $this->add_setting( 'background_color', array(
 'default' => get_theme_support( 'custom-background', 'default-color' ),
 'theme_supports' => 'custom-background',

 'sanitize_callback' => 'sanitize_hex_color_no_hash',
 'sanitize_js_callback' => 'maybe_hash_hex_color',
 ) );

 $this->add_control( new WP_Customize_Color_Control( $this, 'background_color', array(
 'label' => __( 'Background Color' ),
 'section' => 'colors',
 ) ) );

 /* Custom Header */

 $this->add_section( 'header_image', array(
 'title' => __( 'Header Image' ),
 'theme_supports' => 'custom-header',
 'priority' => 60,
 ) );

 $this->add_setting( new WP_Customize_Filter_Setting( $this, 'header_image', array(
 'default' => get_theme_support( 'custom-header', 'default-image' ),
 'theme_supports' => 'custom-header',
 ) ) );

 $this->add_setting( new WP_Customize_Header_Image_Setting( $this, 'header_image_data', array(
 // 'default' => get_theme_support( 'custom-header', 'default-image' ),
 'theme_supports' => 'custom-header',
 ) ) );

 $this->add_control( new WP_Customize_Header_Image_Control( $this ) );

 /* Custom Background */

 $this->add_section( 'background_image', array(
 'title' => __( 'Background Image' ),
 'theme_supports' => 'custom-background',
 'priority' => 80,
 ) );

 $this->add_setting( 'background_image', array(
 'default' => get_theme_support( 'custom-background', 'default-image' ),
 'theme_supports' => 'custom-background',
 ) );

 $this->add_setting( new WP_Customize_Background_Image_Setting( $this, 'background_image_thumb', array(
 'theme_supports' => 'custom-background',
 ) ) );

 $this->add_control( new WP_Customize_Background_Image_Control( $this ) );

 $this->add_setting( 'background_repeat', array(
 'default' => get_theme_support( 'custom-background', 'default-repeat' ),
 'theme_supports' => 'custom-background',
 ) );

 $this->add_control( 'background_repeat', array(
 'label' => __( 'Background Repeat' ),
 'section' => 'background_image',
 'type' => 'radio',
 'choices' => array(
 'no-repeat' => __('No Repeat'),
 'repeat' => __('Tile'),
 'repeat-x' => __('Tile Horizontally'),
 'repeat-y' => __('Tile Vertically'),
 ) );

 $this->add_setting( 'background_position_x', array(
 'default' => get_theme_support( 'custom-background', 'default-position-x' ),
 'theme_supports' => 'custom-background',
 ) );

 $this->add_control( 'background_position_x', array(
 'label' => __( 'Background Position' ),
 'section' => 'background_image',
 'type' => 'radio',
 'choices' => array(
 'left' => __('Left'),
 'center' => __('Center'),
 'right' => __('Right'),
 ) );

 $this->add_setting( 'background_attachment', array(
 'default' => get_theme_support( 'custom-background', 'default-attachment' ),
 'theme_supports' => 'custom-background',
 ) );

 $this->add_control( 'background_attachment', array(
 'label' => __( 'Background Attachment' ),
 'section' => 'background_image',
 'type' => 'radio',
 'choices' => array(
 'scroll' => __('Scroll'),
 'fixed' => __('Fixed'),
 ) );

 // If the theme is using the default background callback, we can update
 // the background CSS using postMessage.
 if ( get_theme_support( 'custom-background', 'wp-head-callback' ) === '_custom_background_cb' ) {
 foreach ( array( 'color', 'image', 'position_x', 'repeat', 'attachment' ) as $prop ) {
 $this->get_setting( 'background_' . $prop )->transport = 'postMessage';

 /* Nav Menus */

 $locations = get_registered_nav_menus();
 $menus = wp_get_nav_menus();
 $num_locations = count( array_keys( $locations ) );

 $this->add_section( 'nav', array(
 'title' => __( 'Navigation' ),
 'theme_supports' => 'menus',
 'priority' => 100,
 'description' => sprintf( _n('Your theme supports %s menu. Select which menu you would like to use.', 'Your theme supports %s menus. Select which menu appears in each location.', $num_locations ), number_format_i18n( $num_locations ) ) . "\n\n" . __('You can edit your menu content on the Menus screen in the Appearance section.'),
 ) );

 if ( $menus ) {
 $choices = array( 0 => __( '&mdash; Select &mdash;' ) );
 foreach ( $menus as $menu ) {
 $choices[ $menu->term_id ] = wp_html_excerpt( $menu->name, 40, '&hellip;' );

 foreach ( $locations as $location => $description ) {
 $menu_setting_id = "nav_menu_locations[{$location}]";

 $this->add_setting( $menu_setting_id, array(
 'sanitize_callback' => 'absint',
 'theme_supports' => 'menus',
 ) );

 $this->add_control( $menu_setting_id, array(
 'label' => $description,
 'section' => 'nav',
 'type' => 'select',
 'choices' => $choices,
 ) );

 /* Static Front Page */
 // #WP19627

 $this->add_section( 'static_front_page', array(
 'title' => __( 'Static Front Page' ),
 // 'theme_supports' => 'static-front-page',
 'priority' => 120,
 'description' => __( 'Your theme supports a static front page.' ),
 ) );

 $this->add_setting( 'show_on_front', array(
 'default' => get_option( 'show_on_front' ),
 'capability' => 'manage_options',
 'type' => 'option',
 // 'theme_supports' => 'static-front-page',
 ) );

 $this->add_control( 'show_on_front', array(
 'label' => __( 'Front page displays' ),
 'section' => 'static_front_page',
 'type' => 'radio',
 'choices' => array(
 'posts' => __( 'Your latest posts' ),
 'page' => __( 'A static page' ),
 ) );

 $this->add_setting( 'page_on_front', array(
 'type' => 'option',
 'capability' => 'manage_options',
 // 'theme_supports' => 'static-front-page',
 ) );

 $this->add_control( 'page_on_front', array(
 'label' => __( 'Front page' ),
 'section' => 'static_front_page',
 'type' => 'dropdown-pages',
 ) );

 $this->add_setting( 'page_for_posts', array(
 'type' => 'option',
 'capability' => 'manage_options',
 // 'theme_supports' => 'static-front-page',
 ) );

 $this->add_control( 'page_for_posts', array(
 'label' => __( 'Posts page' ),
 'section' => 'static_front_page',
 'type' => 'dropdown-pages',
 ) );

Quick Tip: You have reached a domain that is pending ICANN verification

Just tried to log into one of my client’s websites this morning and was met with the lovely notification you see here. I’ve never encountered this before on any of the other sites I’ve built.

So, why am I seeing this now? Apparently, the domain owner’s name and email address were never verified via the follow-up email they sent out after the domain was registered.

Here’s what Ryan Your Tech Guy says:

The domain has to be verified. You will have to verify the domain with the email sent to the whois contact email. Once you have verified the domain, ICANN will un-suspend the domain.

So, if you find yourself facing a similar message one day when trying to visit or work on your site (or any other site for that matter), do yourself a favor and (1) check your email, then (2) verify your contact info (or be helpful and “resend verification email” to the site owner – hopefully with an Inbox full of those emails, they’ll remember to click on one to verify their info).

Here’s some additional info:

  1. Dreamhost’s Official Verification Policy
  2. Ryan Your Tech Guy’s Write-up
  3. TechRepublic’s News Article

(Actually, I’m a bit surprised to be seeing this now. I’ve worked on and built up the site since July 2014. Why suspend it after 6 months of production? Why not earlier?)

Quick Tip: Problems After Upgrading WordPress? Try Some of These Suggestions

If you get stuck in a redirect loop, or get any number of HTTP errors (404, 500, 302, etc), then it probably has something to do with your .htaccess file.

  1. WordPress htaccess Rules
  2. Extended Instructions for Upgrading WordPress
  3. phpMyAdmin Fix

Quick Tip: WordPress Site Hacked? Follow These Links

One KEY thing to keep in mind BEFORE a hack:

Always have a backup.

BackWPup is a great (free) plugin that’s super-easy to use and setup automatic backups to Dropbox and other Cloud storage services. I use it on all my sites and highly recommend it (Multi-site compatible as well).

The following was originally posted by a Volunteer moderator on the forums, but they are great links worth keeping a copy of for later reference:

You need to start working your way through these resources:

Additional Resources:

Quick Tip: Use Chrome’s Emulator Tool for Better Development

Google Chrome has a pretty nifty emulator tool that enables better website development by emulating the different devices that you would want to test your websites on.

A few keys points about the emulator that makes it unique and much better for development than merely stretching your browser window to various sizes:

  1. Chrome’s minimum browser width (400px) is still wider than the smallest device size (320px iPhone 3/4)
  2. Using the emulator tool also changes the user agent variable in Chrome so that it thinks and acts as if it were the actual device it is emulating
  3. The emulator shows a grid and rulers with pixel dimensions behind the device window

How to use the Chrome Emulator?

  1. Open the Element Inspector (right-click “Inspect Element”)
  2. Click on the mobile device icon in the upper-left corner of the Element Inspector (see screenshot)
  3. Select the device you wish to emulate from the dropdown menu at the top (see screenshot)
  4. Tip: Refresh the page for proper user agent spoofing and viewport rendering
1. Open the Element Inspector and click the mobile device icon
2. Select the device you wish to emulate from the dropdown menu


Quick Tip: Learn the basics of SEO and non-coding WordPress Customization

WordPress currently powers over 23% of ALL the world’s websites. It powers sites such as CNN, Jay-Z, and Mashable.

So, you want a highly customizable site without coding?

Divi WordPress Drag and Drop Theme
Divi WordPress Drag and Drop Theme

Find a drag-and-drop Theme like Divi or Enfold for something easier to build (no code – EXTREMELY customizable). You’ll need to go self-hosted (no more

You want easy SEO?

WordPress plugin SEO by Yoast
WordPress plugin SEO by Yoast

For SEO, sign up for Google Analytics to start tracking your site and learning which keywords attract visitors. Also, get a good couple of good WP plugins like SEO by Yoast (which is the highest ranked and most downloaded SEO plugin for WP in history). Also get Google Analytics by Yoast for better tracking.

Here’s the Definitive Guide to WordPress SEO by Yoast.

You want to learn the basics of SEO tactics?

Jon Duckett's HTML & CSS book
Jon Duckett’s HTML & CSS book

I recently read through HTML & CSS by Jon Duckett and it has a simple (though comprehensive) 2-page walkthrough on SEO. The basic things you should know are:

  1. On-site SEO tactics and
  2. Off-site SEO tactics

On-site SEO tactics include:

Having your targeting keywords appear in every:

  1. Page <title>
  2. URL
  3. Headings <h1>
  4. Body text 2-3 times each
  5. Hyperlinks  (make them descriptive, not just “click here”)
  6. Image <alt> attributes
  7. Page <meta> description

(The Yoast SEO plugin takes care of ALL of this for you on a page-by-page basis).

Off-site SEO tactics include:

Getting links IN to your site from other (relevant) sites. You can do this through:

  1. Social Media sharing (and enabling social sharing buttons with other plugins)
  2. Commenting (and ADDING VALUE) on other blogs in your industry with a link back to your site (no spam and no “Nice post” stuff either)
  3. Guest posting on other blogs with a link back to your site.

Hope this helps you build a better website!~

From Delinquent to Star Student

When I was in university, I was a lackluster student. But when I went to grad school (and afterward), I became a high achiever – even so far as receiving the top award in my graduating class (like “valedictorian”). So what changed between then and now? This presentation breaks down my own journey from boredom to motivation – and focuses on how to apply those things to second language learning.

My Journey Toward Second-Language Learning Motivation


How do you teach students English? What if you didn’t have to teach them? What if they were motivated to learn on their own? This presentation will consider the psychology of motivation as it relates to second language learning. There are many elements that combine to give us (or our students) success in second language learning. We will look at:

  1. The difference between Intrinsic and Extrinsic Motivation
  2. Breaking out of your Comfort Zone and finding your Passion
  3. Neurological Cravings, Habit Loops, and Behavior Reinforcing Rewards
  4. The difference between Progress and Perfection
  5. How to stick to your Schedule by reducing your Scope
  6. How to be a better Teacher by being Taught

I hope to be able to give much good food for thought as well as some practical tips and suggestions to put into practice TODAY. Some of these suggestions may appear to be quite radical, but other suggestions will give very actionable steps for creating Habits, increasing Passion, and sticking to a Schedule.


I hope this talk will be helpful for 3 areas of your life:

  1. Your teaching
  2. Your professional life
  3. Your personal life

Personally, I’m incredibly interested in the following, and have incorporated much of what I’ve learned into this talk.

  1. Intrinsic vs. Extrinsic Motivation
  2. Your Comfort Zone vs. your Passion
  3. Neurological Cravings & Habit Loops
  4. Progress over Perfection
  5. Schedule over Scope
  6. The fact that Good Teachers are Good Learners

I’ll go over 3 things:

  1. My story
  2. How I got here
  3. What you can do

My Story

In 2012, I created a Korean language learning blog with two motivations:

  1. (External motivation) To supplement my wife’s Korean tutoring classes
  2. (Internal motivation) To motivate myself to become fluent in Korean

For the first year, there was no growth at all. But in Year Two, I changed my habits and began writing a new Post every single day (now over 400 Posts). After that point, the site saw steady growth, and has been viewed more than 100,000 total times.

But let me now paint you a different picture.

University of Wyoming

As an undergrad at the University of Wyoming, I was a lackluster student at best, earning less than a 2.5 GPA and losing my scholarship in my second semester. I went from a 4.0 in high school, to a 2.3 my second semester, back up to a 3.186 by the end of my university life. I had 3 Fs (retakes) and 1 D in a major class.

Full Sail University

But when I went to grad school at Full Sail, 4 years after my lackluster undergrad career, things were very different. 

  • Change of Motivation =
  • Change of Attitude = 
  • Change of Behavior

I was newly married, with a baby on the way, and suddenly had to provide for more than just myself. That proved to be a real kick in the pants for me – and I worked hard enough to take home the Top Achiever award (valedictorian) in my graduating class.

How I Got Here

I’ve found that Success = Motivation + Habits – like two sides of the same coin – and without both, you don’t get the prize.

On Motivation

Daniel Pink’s book Drive dives deeply into motivation:

  1. Motivation 1.0 = primal / survival instincts
  2. Motivation 2.0 = carrots (rewards) & sticks (punishments)
  3. Motivation 3.0 = intrinsic vs. extrinsic (and this is the one we’re interested in)

Intrinsic Motivation examples

  • Learning an instrument
  • Open source software
  • Online forums
  • Entrepreneurship
  • Learning a language (for joy, for yourself)

Extrinsic Motivation examples

  • A “day job”
  • Bonuses & Commissions
  • $$$
  • Standardized testing
  • Learning a language (being forced to)

Difference in motivation

  • Extrinsic motivation focuses on:
    • Reward 
    • Punishment
  • Intrinsic motivation provides:
    • Autonomy
    • Mastery
    • Purpose

Here are some good books that discuss each:

  1. Autonomy
    1. Results Only Work Environment – focusing on the Task, Time, Team, and Technique is more important than just coming in to the office every day and “putting in the hours”
  2. Mastery
    1. Outliers hits on many examples
    2. Flow details the state of mind high-performers get in when “mastering” something, or performing at their highest level
  3. Purpose
    1. The Purpose Economy – one quote states ““What brings meaning to a job is not the job itself, but what we bring to it.

Personally, I never really started changing my attitude until I “read” Josh Kaufman’s Personal MBA. In it, he discusses a getting out of your Comfort Zone:

  • Reference Levels (getting out of our Comfort Zones)
    • What’s your “acceptable range”?
    • What’s your “minimum set point”?
    • What’s your “maximum set / pain point”?
    • Are you experiencing any Errors in your mind?
    • If so, “something has to change.”

On Habits

We are what we repeatedly do. Excellence, then, is not an act, but a habit.

Will Durant

The Power of Habit by Charles Duhigg covers the three (4) steps in habit loops and formation and how to break a bad habit:

  1. Trigger (cue)
  2. Routine (behavior)
  3. Reward (satisfaction)
  4. Craving (underlying motivation)

Remake a habit:

  1. Determine your Craving
  2. Identify your Trigger
  3. Change the Routine
  4. Maintain the Reward

Form a new habit:

  1. Determine your Passion (Start with Why)
  2. Create a Trigger
  3. Decide upon a Routine
  4. Reward yourself

In creating new habits or breaking old ones, we should remember the following:

  1. Strive for Progress not Perfection
  2. Reduce Scope in favor of Schedule (don’t break the chain)
  3. Habits compound

“The truth about success is as simple as this:
Not 5,000 things
A half-dozen things done 5,000 times.”

Darren Hardy in The Compound Effect

What you can do

Motivation in the classroom

9 ideas from Dan Pink’s Drive:

  1. Apply the 3-Part Type-I Test
    1. Am I offering students AUTONOMY over the when and how of this work?
    2. Does this task promote MASTERY by offering something novel and engaging (as opposed to rote reformulation)?
    3. Do my students understand the PURPOSE? The “Big Picture” of this assignment in the class?
  2. Have a “FedEx Day” – overnight delivery
  3. Try DIY Report Cards
    1. Students write down learning goals at the beginning of the semester
    2. Students write their own report cards and a 1-2 paragraph assessment of their progress at the end
    3. Then, show the teacher’s report card and discuss how they are doing on their path toward MASTERY
  4. Stop offering “If-Then” Rewards – make them “Now-That”
  5. Offer Praise…The Right Way
    1. Praise effort and strategy, not intelligence
    2. Make praise specific (no generalities)
    3. Praise in private (no award ceremonies)
    4. Offer praise only when there’s good reason (be sincere)
  6. Help the see the “Big Picture”
    1. Kids think: Why am I learning this? How is it relevant to my world?
      1. Reading
      2. Writing
      3. Arithmetic
      4. Relevance
  7. Investigate Type-I Schools
    1. Big Picture Learning
    2. Sudbury Valley School
    3. The Tinkering School
    4. Puget Sound Community School
    5. Montessori Schools
      (Children have natural curiosity & innate desire to learn)
  8. Learn from the “Unschoolers”
    1. They promote autonomy by allowing youngsters to decide what they learn and how they learn it. They encourage mastery by allowing children to spend as long as they’d like and to go as deep as they desire on the topics that interest them.
  9. Turn Students into Teachers – that’s what I’ve done with Key to Korean (Want to learn something? Teach it!)

Habits in the classroom

  1. The truth about Grading
    1. Let students know that their Habits are a big determiner in their Final grades.
    2. “I never saw a student on a smartphone get an A in my class.”
  2. Help Them Create Good Study Habits
  3. Teach them the Power of:
    1. Daily Habits
    2. Consistency
    3. Momentum
    4. The Compound Effect

Educate yourself

I’ve presented numerous resources throughout this talk. And I’ve asserted that the best teachers are good learners. Here are some tips for you to become better learners yourselves:

  1. Want to read more?
    1. Listen to podcasts
    2. “Read” books with
  2. Learn some Korean
    1. Empathize with your students
    2. Understand WHY students continually make the same kinds of mistakes
    3. Anticipate student mistakes before them make them (and address them)
    4. Being a student makes you a better teacher
    5. Check student understanding of vocab & grammar
    6. It will increase their interest in YOUR language

Thank you!

Resources mentioned in this talk

The links out to books I mentioned in this talk are Amazon affiliate links, so I will get a small commission if you click them and purchase something. That being said, here is everything I mentioned above:


Aaron Snowberger is an English professor at Jeonju University and the creator of, a Korean language learning blog that focuses primarily on Motivation. He has lived and worked in Korea since 2006, and has taught TOEFL, Debate, Computer Literacy, and Website Programming along with the usual blend of Conversational English classes.

Aaron earned a Bachelor of Science in Computer Science from the University of Wyoming (USA) in 2006, and a Master of Fine Arts in Media Design from Full Sail University (USA) in 2011. His primary interests include web programming, Internet business and marketing, branding, print design, leadership, psychology, and the Korean language.

Technology Upgrade: Build a Customized Grade Book

Practically, enhanced teaching begins when teachers themselves are comfortable using technology and applying it to real-world problems. Before there can be a “technology upgrade” in the classroom, teachers must understand the benefits and uses of a particular piece of technology so they can share those with their students. And what better place for teachers to begin getting comfortable with technology than with their own personal productivity?

Technology in schools is no “passing fad.” But neither is every new tech initiative a “silver bullet” to solve every problem faced by teachers and students. Too often, technology and related skills are either taken for granted or overlooked. Schools invest money in technology and expect teachers to use it to educate and empower 21st century students. But before we can have empowered students, a solid foundation must be built on reliable infrastructure, effective administration, extensive resources, and enhanced teaching.

The first half of this presentation will focus on the first three points:

  1. Reliable infrastructure
  2. Effective administration
  3. Extensive resources

The second half will focus primarily on enhanced teaching.

Practically, enhanced teaching begins when teachers themselves are comfortable using technology and applying it to real-world problems. Before there can be a “technology upgrade” in the classroom, teachers must understand the benefits and uses of a particular piece of technology so they can share those with their students. And what better place for teachers to begin getting comfortable with technology than with their own personal productivity?

Therefore, the conclusion of this presentation will give suggestions for enhanced personal productivity as well as lay out the basic steps for the creation of a very versatile class grade book in Microsoft Excel.

KOTESOL Grade book Presentation Notes

Chameleons and camouflage: Do you stand out? Or do you blend in (and hide)?

My self intro: I’ve taught 6 years in Korea, 3 at Avalon Academy, 3 at Jeonju University. I have a BS in Computer Science and MFA in Media Design – earned completely online. I’ve taught Teacher Training classes in Technology at JJU for 2 semesters, summer 2011 and spring 2012 (now).

I’ve worked with educational websites throughout my entire career, including Avalon’s online writing and speaking platform, the MOODLE CMS for my own JJU classes, and my own experience taking a year of online class for my Master’s degree from Full Sail University in Florida. So, I have a pretty good idea what good teaching with technology looks like.

Additionally, when I teach about making grade books in Excel, it consistently is ranked as the best and most popular skill I teach other teachers. So, I’ll talk about that in this presentation.

The book I’m currently teaching is “The Classroom Teacher’s Technology Survival Guide” by Doug Johnson, an English teacher, librarian, and district technology manager in his state in the US. It’s a great book, and many of my ideas have come from it.

Part One

Let me start with an observation – Technology Revolution. It’s revolutionized every field in the world…except maybe, education. In fact, ONLY education has not changed so much that a teacher from 1900 would not know what to do in today’s classrooms.

And when it comes to tech changes, we are creatures of habit – we like the old stuff even if its outdated. For example, new interfaces from Gmail and Facebook (Timeline) and the tons of resistance those received from (some) users. Sir Ken Robinson in a TED talk mentioned kids and wristwatches.

For kids under the age of 20, they see no need to wear a wristwatch, because technology tells the time all around them. But for the older generation (teachers), most of us wear wristwatches because we are creatures of habit, and its how we grew up. For our generation, a wristwatch was the best (only?) way to tell time, and even though it isn’t the most effective means of telling time nowadays, we still wear them.

Tech in schools is no “passing fad.” Neither is tech in schools a “silver bullet” (to solve every single problem with a single technology – though many administrators may come back from conferences with that kind of notion).

So then, WHY do we want tech in schools?


Tech in general really has 2 main functions:

  1. Automate – take standard operations and make them faster, more accurate, and less labor intensive.
  2. Informate (coined by Shoshana Zuboff in her book “In the Age of the Smart Machine” (1988)) – translating descriptions and measurements of activities, events, and objects into information.

The real power is in “informate.”


  • Grade book: Automate (calculate grades), Informate (make available to students, inform teachers of trends, inform parents)
  • Website tutorials: Automate (lessons), Informate (learn new skills at my own pace)
  • Student Devices: Automate (homework), Informate (learn from anywhere)

So how can we go from 1906 to 2012? “Attitude is everything.”

Look at the “Survival Skills for your Own Tech Use.” We’ll look at #5 in the following section.


  • Maslow’s Hierarchy of Needs
  • Johnson’s Hierarchy of Educational Technology Needs
  • Johnson’s Hierarchy of Student Technology Use

We will look at “Personally Productive, Enhanced Teaching” with the grade book.

Part 2

There are probably 3 kinds of (Excel) people watching my talk today:

  1. Those who don’t really know Excel (a blank spreadsheet)
  2. Those who know the basics (a basic grade book)
  3. Power-users (like me) who want advanced techniques

This look at Excel with be fairly basic, but even Power-users can benefit from some of the specialization I will talk about, AND the fact that we are all forgetful. This will be a good reminder to those who already know how, and a good beginning for those who wish to learn more.

Creating the Grade book

The grade book has spaces for:

  1. Student names and numbers
  2. Test and Assignment grades
  3. Participation and Attendance grades
  4. Final grade percentages
  5. Final letter grades
  6. A schedule of classes and topics
  7. A place for Bonus Points
  8. A place for calculating a grading curve

The grade book needs to have the following requirements met:

  1. Use the =SUM(...) function
  2. Use the =IF(...) function
  3. Use 2 more functions of your choice:
  4. Fill out the info (including grades) for 10 students
  5. Make it “pretty” with good formatting and design

Example Gradebooks

  1. Simple Elementary Grade book
  2. Aaron’s Grade book Example

Example formulas:

=RANK(A1, A$1:A$10, 0)
Means RANK(“what student?”, “Whole class”, Descending order)

=IF(A1>=0.9, “A”, IF(A1>=0.8, “B”, IF(A1>=0.7, “C”, IF(A1>=0.6, “D”, “F”))))
Please remember to change the CELL numbers.


  • FIX the view: 보기 – 틀고정
  • Data Validation: 데이터 유효성

Some notes:

  • ISBLANK(CELL) only works on cells that are truly blank (no formula)
  • Need to be sure that “Automatic Calculations” (not Manual) is selected in the Excel Options.
  • Do you want to use points or percentages?
  • You CAN find out how many Absences they have using COUNTIF – but that only works on a continuous range of cells, not multiple selections
  • You CAN assign an “F/A” grade if the student has 9 or more absences – but that must be the FIRST argument in the cell.
  • Need to use the test “>=” to test grades, if using only “>” (for example, > 90) then it will evaluate wrongly. 90 would be “B” but “91” would be “A”
  • Therefore, separating Attendance and Participation VERTICALLY, rather than horizontally would probably work better.