Leave a reply Quick Tip: DESTROY the VBS Virus that Creates Folder Shortcuts and Hides Files


When I was working at a winter camp this year, my computer contracted a virus that creates folder shortcuts and hides every file. It makes using the USB impossible, and if you try to delete the .vbs file that does it, it will just come back again anyway. (Here’s a detailed post from Security on Steroids that describes the virus and removal procedure.)

The following are steps I took to fix my USB after contracting the virus:

1. Show Hidden Files

  1. Open the Start menu.
  2. Type “cmd” in the Run (or Search) area to open the command line.
  3. Type “ATTRIB -H -R -S /S /D G:\*.*” without quotes and substitute the letter of your drive for G.

This page from Technology Next has a good overview (with images) about how to do that.

2. Perform a Full Virus Scan

Make sure you have an up-to-date Anti-virus program on your computer and to a full scan of the infected drive and computer. Try to get rid of as much garbage as possible from both.

One good option I’ve used previously is Trend Micro Housecall – but you need an Internet connection to do it.

3. More tools to Clean up and Protect your USB

Sometimes a virus scan doesn’t fully take care of the problem, so here are some more references to the steps I took to clean it up.



4. Quick Tip: Set up your computer to vaccinate ALL USBs

Definitely remember to install Panda USB Vaccine on all your computers. You can set it up to automatically vaccinate any USB that is inserted. This should hopefully help prevent the further spread of viruses. (I did so at the high school I work at – on all 23 of their 2 labs of computers.)

BONUS: Here is a list of 10 more tools to help protect USBs.

Further Protection: Disable Writing on your USB

You could further protect your USB by disabling the computer’s ability to write to it. The main reason that USBs get infected is because a virus on your computer waits until a USB is inserted and then immediately tries to Save itself to the USB. If you disable USB writing, the virus can’t Save itself on there, and you won’t get infected. (Of course, this also means that you can’t Save your own files on the USB until you allow writing again…)

I haven’t personally looked into this much, but here is a link to get you started:

  1. HowToGeek: Download simple programs to instantly modify your registry

Leave a reply Quick Tip: Avoid spreading “shocking” blog posts


This is an article that one of my friends recently shared on Facebook titled:

There Is No Hell Fire; Adam & Eve Not Real – Pope Francis Exposes

This is an article that shows it’s a hoax:

Don’t fall for this Pope Francis hoax: 5 things to know and share

And this is my advice in this kind of situation:

Whenever I see a “shocking” story that seems absolutely out of character or contrary to a certain person’s beliefs, I always:

  1. Read the entire context of the article, looking for errors.
  2. Double-check the article for REFERENCE links that point to the original quote.
  3. Read the blog’s “About” page to see if it is satirical (MANY sites these days are doing this – just to draw in traffic and therefore revenue).
  4. Scan the headlines of most of the rest of the blog (many of these read like tabloid magazines in the grocery store).
  5. Google it.
  6. Check Snopes.

I’ve done that with everything suspicious in recent years, since Obama’s first election campaign (that just shows how long hoaxes like this have been around for).

Sharing these kinds of articles (without truth-checking them) merely drives up that site’s traffic and revenue while simultaneously spreading rumors and falsities.

Quick Tip: Quickly truth-check blog posts before passing them on.

Leave a reply 2014 GPA Computer Lab Updates

Work Yet to Do

2.18.2014 (All Windows Updates)

  • Completed ALL Windows updates (300+)
  • Installed: ALL Nvidia Drivers for graphics card
  • Installed: Windows Live Essentials on Computers 1-4
  • Reinstalled: Alice3 on Computer 4
  • Set up Family Filter on Computers 1-4
  • Reset “Run…”
  • Downstairs Lab: Reset ALL admin passwords to the office preference


  • Started Windows Updates after the reformat (300+)
  • Installed: new Nvidia Drivers for Computers 4-12
  • Then found a NEW Nvidia Driver at the last minute – updating again tomorrow…
  • Installed: Alice3 (2,3,5-12)
  • Installed: Java
  • Installed: iTunes
  • Installed: MuseScore
  • Installed: Notepad++
  • Installed: Lightshot
  • Installed: Spybot : Vaccinated against 110,000 items
  • Installed: USB Vaccine
  • Installed: Windows Live Essentials (5-12)
  • Created Admin passwords
  • Created new Users for student use
  • Set up Parental Filtering for student accounts
  • Blocked Facebook and Comic sites with HOSTS
  • Disabled Recycle Bin to prevent “Recycling” of HOSTS
  • Set student accounts to auto-login upon Restart
  • Downstairs Lab: Installed: USB Vaccine
  • Downstairs Lab: Installed: Spybot (8-11) : Vaccinated against 140,000 items
  • Downstairs Lab: Installed: Chrome (8-11)
  • Downstairs Lab: Installed: Windows Live Essentials (8-11)
  • Downstairs Lab: Set up Parental filtering (8-11)
  • Downstairs Lab: Set up a Blank screensaver and no login required when students come back


  • Downstairs: Created admin passwords for all computers
  • Downstairs: Created Student accounts for all computers
  • Downstairs: Blocked Facebook and Comics sites with HOSTS
  • Downstairs: Disabled the Recycle bin to prevent “Recycling” of HOSTS
  • Downstairs: Set student accounts to auto-login on restart
  • Upstairs: Disabled the Recycle bin to prevent “Recycling” of HOSTS


Leave a reply 2014 Blogging Calendar


Every year, I like to get a head-start on the New Year by looking forward and penciling in the majority of the major events that I can expect. This includes national holidays, paydays, birthdays, US holidays (since I live in Korea), family vacations, and my own vision planning days.

Last year, I also learned the great value of regular blogging to grow a blog’s regular audience. By posting something new everyday, I took my wife’s Korean teaching website and grew the audience from 300 per month to over 8,000 per month in the span of just 6 months (April – September).

With the birth of our daughter, I’ve tapered off the new posting for the past few months, but come January, I’m looking forward to getting back on a regular schedule of blog posts – as well as grow a few other projects I’m working on with at least weekly posts there.

So, in order to (1) better facilitate my blog planning; (2) maintain a visible record of blog growth; and (3) give myself a little bit of accountability with my blogging, I’ve designed this Special 2014 Blogging Calendar. You can download it as a PDF if you’d like.


What makes it Special?

Recently I was reading Dan Miller’s 48 Days to the Work You Love and found something interesting in chapter 4 called a “Wheel of Life.” In it, Miller lays out a new paradigm for a successful life. Most people focus on only ONE area of this wheel, but he says that success in ALL areas is necessary in order to live a fulfilling life.

  1. Career
  2. Financial
  3. Social
  4. Family
  5. Physical
  6. Personal Development
  7. Spiritual

It’s truly unfortunate when you see massive success in ONE area of life at the expense of all the others, or even just at the expense of ONE of the others. There was a time in my life where I focused so much on Personal Development (getting my Master’s degree) that my Family suffered greatly as a result.

This calendar is designed with the “Wheel of Life” in mind. Each page contains a section for the 7 areas of life development.

  1. On the “Month View” pages, there is a left sidebar with space for written and trackable GOALS in each area.
  2. On the “Blog List View” pages, there is a checkbox section to the right of the list. This is a good way to keep track of either (1) the days that you work on that particular area of your life, or (2) the blog posts you write that focus on one (or more) of those life areas.

Additionally, the “Blog List View” page (pictured above) takes into account some of the other important things that bloggers like to stay on top of, including:

  1. A sidebar to the left where you can check off the social media you used to promote your blog that day.
  2. A checkbox after the Post Title for “Scheduled” posts.
  3. A box at the bottom to keep track of your “Top Posts” for the month.

Click to download the PDF

This PDF is designed:

  1. With Korean national holidays (red days) boxed in (since I live in Korea).
  2. With U.S. holidays “penciled in” (since I’m American).
  3. On A4-size paper (Korean paper), but should still look good if you “Print to Fit” on US Letter size paper.

I may later update the design to be “strictly US” (on US Letter paper, without Korean holidays), but for now, this suits my needs.

I hope you also can find some good use from this PDF! Merry Christmas~

Leave a reply JavaScript Dragon Slayer


This is a slightly more advanced Dragon Slayer JavaScript game than the one you build on Codecademy.com. It’s not quite as advanced as the first one I was working on (quite complicated), but I think it’s long and difficult enough (yet also easy enough) for my students to be able to replicate.

I’ve added:

  • Hit points (HP) for you and the dragon. (Let’s make this a real fight!)
  • Dragon HP are double your HP.
  • Your attack power is double the dragon attack power.
  • A variable for round numbers to count the rounds and declare them.
  • Intro text.
  • Printing your HP and the dragon HP after each round.
  • An output of how much damage each person does each round.
  • A “GAME OVER” message whether you win or lose or quit.
  • A confirm button that lets you continue playing or quit the game early.

The code:

var slaying = true;
var youHit = Math.floor(Math.random() * 2);
var damageThisRound = Math.floor(Math.random() * 5 + 1);
var totalDamage = 0;

var yourHP = 25;
var yourDamage = 0;
var dragonHP = 50;

var roundNumber = 1;
console.log("Welcome to Dragon Slayer the Game!\n**********************************");
console.log("\nYour HP: " + (yourHP-yourDamage) + "\tDragon HP: " + (dragonHP-totalDamage) + "\n>>>>> Round " + roundNumber + " *** FIGHT! ***\n");
while (slaying) {
    var attack = confirm("Strike the dragon.");
    if (attack) {
    if (youHit) {
        console.log("Congrats! You hit the dragon! You did " + (damageThisRound * 2) + "HP of damage this round!"); 
        totalDamage += (damageThisRound * 2);
        if (totalDamage >= dragonHP) {
            console.log("You slew the dragon! Hero!");
            console.log(">>>>> GAME OVER <<<<<");             slaying = false;         } else {             youHit = Math.floor(Math.random() * 2);             damageThisRound = Math.floor(Math.random() * 5 + 1);             console.log("\nYour HP: " + (yourHP-yourDamage) + "\tDragon HP: " + (dragonHP-totalDamage) + "\n>>>>> Round " + roundNumber + " *** FIGHT! ***\n");
    } else {
        console.log("The dragon counter-strikes! Ouch! He did " + damageThisRound + "HP of damage this round!");
        yourDamage += damageThisRound;
        if (yourDamage >= yourHP) {
            console.log("You have been crushed and burned, trampled and boiled and eaten alive. Sucks...");
            console.log(">>>>> GAME OVER <<<<<");             slaying = false;         } else {             youHit = Math.floor(Math.random() * 2);                damageThisRound = Math.floor(Math.random() * 5 + 1);             console.log("\nYour HP: " + (yourHP-yourDamage) + "\tDragon HP: " + (dragonHP-totalDamage) + "\n>>>>> Round " + roundNumber + " *** FIGHT! ***\n");
    } else {
        console.log("Chicken. Quitter.");
        console.log(">>>>> GAME OVER <<<<<");

Leave a reply JavaScript Searching Text


Here’s another program I worked up on Codecademy that searches a given text string for my name. It also confirms that it IS actually my name before pushing the String array values into the new String called “hits.”

UPDATE 12.2:

When going through this exercise with my students, I made some modifications. There’s actually no need for the second for loop after getting a substr() starting with the first letter of my name and comparing it with the original. It’s simpler to just push the substr() onto the “hits” array.

/*jshint multistr:true */
var text = "Lorem Ipsum is simply Aaron dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a Aaron galley of type and scrambled it to make a type specimen Aaron book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised Aaron in the 1960s with the release of Letraset sheets Aaron containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.";
var myName = "Aaron"; 
var hits = [];
var counter = 0;

for (var i=0; i<text.length; i++) {
    if (text[i] === myName[0]) {
        var temp = text.substr(i, myName.length); // substr(start, length)
        if (temp === myName) {

if (hits === []) {
    console.log("Your name wasn't found!");
} else {
    console.log("Your name was found " + counter + " times. See?\n" + hits);   


/*jshint multistr:true */

var text = "Hello my name is \
    Aaron Snowberger \
    please ignore all these \
    backslashes. Aaron. Apostrophe. Apple.";

var myName = "Aaron";
var hits = [];

for (var i = 0; i<text.length; i++) {
    if (text[i] === "A") {
        var temp = text.substr(i,myName.length);
        if (temp === myName) {
            for (var j = i; j<i+myName.length; j++) {
if (hits === 0) {
    console.log("Your name wasn't found!");    
} else {

What do you think?

Leave a reply JavaScript Rock, Scissors, Paper!


This is a fancy JavaScript Rock, Scissors, Paper game I worked on at Codecademy with a few additions. The basic functionality of the game goes like this:

  1. Prompt the user for a rock, scissors, paper choice.
  2. Check the user’s choice to be sure it is an accepted value.
  3. Double-check they chose the value they wanted to.
  4. Get the computer’s choice randomly.
  5. Compare answers and declare a winner.

The additional features of this game include:

  1. The addition of “rope” as a choice.
  2. Giving the user the ability to “Cancel” and quit the game.
  3. Gives the user the ability to re-choose if they want.
  4. Allows the user to play the game continuously if they choose.
/* ---------- User Choice Function ---------- */
// Prompt for the User Choice
var getUserChoice = function() {
    var userChoice = prompt("Do you choose rock, paper or scissors? Or possibly...rope?");

    // Check the Choice
    var finalChoice = checkUserChoice(userChoice);
    return finalChoice;

/* ---------- Check the User choice Function ---------- */
// Check the User's choice. Make sure it's a value we'll accept.
var checkUserChoice = function(choice) {

    // Is this a legitimate value?
    if (choice === "rock" || choice === "paper" || choice === "scissors" || choice === "rope") {       
        var check = confirm("You chose " + choice + ", right?");
        // Confirm the choice
        if (check === true) {
            return choice;    
        // Or allow him to change it    
        } else {
            var check2 = confirm("I'm sorry, I must have misunderstood you. Would you care to try again?");
            if (check2 === true) {
                // Get a new choice from the user
            } else {
                // Or quit the program
                choice = "quit";
                return choice;

    // If it's not a good choice...
    } else {
        var check3 = confirm("Sorry, we only accept the values 'rock', 'paper', 'scissors', or sometimes 'rope.' Please choose again.");
        // Get a new choice
        if (check3 === true) {
        // Or quit the program
        } else {
            choice = "quit";
            return choice;

/* ---------- Computer Choice Function ---------- */
// Get the Computer Choice
var getComputerChoice = function() {
    var computerChoice = Math.random();

    // Assign values based on the randomly chosen number.
    if (computerChoice <= 0.25) {
        computerChoice = "rock";
    } else if(computerChoice <= 0.5) {
        computerChoice = "paper";
    } else if(computerChoice <= 0.75) {
        computerChoice = "scissors";
    } else {
        computerChoice = "rope";
    return computerChoice;

/* ---------- The Battle Function ---------- */
// Take in the User's choice and the Computer's choice and compare them.
var compare = function(choice1, choice2) {
   if (choice1 === "quit") {
        return "Game Over.";   
   if (choice1 === choice2) {
      return "The result is a tie!";    
   if (choice1 === "rock") {
        if (choice2 === "scissors") {
            return "The User wins with rock.";
        } else if (choice2 === "paper") {
            return "The Computer wins with paper.";
        } else {
            return "The Computer ties its rope around your rock, swings it over its head 10 times, and hurls it off into the distance. Computer wins.";   
    } else if (choice1 === "paper") {
        if (choice2 === "rock") {
            return "The User wins with paper.";
        } else if (choice2 === "scissors") {
            return "The Computer wins with scissors.";
        } else {
            return "The Computer drops its rope on top of your paper, squashing it. Then, it jumps up and down on top of it, leaving boot marks all over it. Computer wins.";
    } else if (choice1 === "scissors") {
        if (choice2 === "rock") {
            return "The Computer wins with rock.";
       } else if (choice2 === "paper") {
            return "The User wins with scissors.";
       } else {
            return "You take your scissors and snip that annoying rope right in half! Stupid Computer! He loses.";
    } else if (choice1 === "rope") {
        if (choice2 === "rock") {
            return "Take that puny rock and fling it into the distance with your amazing rope! You win!";   
        } else if (choice2 === "paper") {
            return "Haha! Squish his little paper with your amazing rope! Then dance on its grave with muddy shoes! You win!";
        } else {
            return "What?! His scissors can cut through your rope? Those must be magic scissors. You lose.";
    } else {
        return "You quit mid-game.";

/* ---------- Game Play Function ---------- */
var play = function() {
    // Compare the results and print them.
    var result = compare(getUserChoice(), getComputerChoice());

    // Ask to play again.
    var again = confirm("Play again?");
    if (again === true) {
    } else {
        console.log("Game Over.");

// Play the Game here

What do you think?