Classic Mustard Potato Salad

Classic Mustard Potato Salad
Serves 12
Write a review
  1. 3 lbs. boiled potatoes, peeled and cubed
  2. 6 hard boiled eggs, diced
  3. 4 dill pickles, diced (or use dill relish to taste)
  4. 1 C mayonnaise
  5. 1/2 C yellow mustard
  6. 1/4 tsp salt
  1. Combine all ingredients and mix until combined. Serve cold.

Pixar Story Basics

#1: You admire a character for trying more than for their successes.

#2: You gotta keep in mind what’s interesting to you as an audience, not what’s fun to do as a writer. They can be v. different.

#3: Trying for theme is important, but you won’t see what the story is actually about til you’re at the end of it. Now rewrite.

#4: Once upon a time there was ___. Every day, ___. One day ___. Because of that, ___. Because of that, ___. Until finally ___.

#5: Simplify. Focus. Combine characters. Hop over detours. You’ll feel like you’re losing valuable stuff but it sets you free.

#6: What is your character good at, comfortable with? Throw the polar opposite at them. Challenge them. How do they deal?

#7: Come up with your ending before you figure out your middle. Seriously. Endings are hard, get yours working up front.

#8: Finish your story, let go even if it’s not perfect. In an ideal world you have both, but move on. Do better next time.

#9: When you’re stuck, make a list of what WOULDN’T happen next. Lots of times the material to get you unstuck will show up.

#10: Pull apart the stories you like. What you like in them is a part of you; you’ve got to recognize it before you can use it.

#11: Putting it on paper lets you start fixing it. If it stays in your head, a perfect idea, you’ll never share it with anyone.

#12: Discount the 1st thing that comes to mind. And the 2nd, 3rd, 4th, 5th – get the obvious out of the way. Surprise yourself.

#13: Give your characters opinions. Passive/malleable might seem likable to you as you write, but it’s poison to the audience.

#14: Why must you tell THIS story? What’s the belief burning within you that your story feeds off of? That’s the heart of it.

#15: If you were your character, in this situation, how would you feel? Honesty lends credibility to unbelievable situations.

#16: What are the stakes? Give us reason to root for the character. What happens if they don’t succeed? Stack the odds against.

#17: No work is ever wasted. If it’s not working, let go and move on - it’ll come back around to be useful later.

#18: You have to know yourself: the difference between doing your best & fussing. Story is testing, not refining.

#19: Coincidences to get characters into trouble are great; coincidences to get them out of it are cheating.

#20: Exercise: take the building blocks of a movie you dislike. How d’you rearrange them into what you DO like?

#21: You gotta identify with your situation/characters, can’t just write ‘cool’. What would make YOU act that way?

#22: What’s the essence of your story? Most economical telling of it? If you know that, you can build out from there.

(Source: Emma Coats, @lawnrocket on Twitter)

Using WP-CLI to Install WordPress

My web server is running Ubuntu 15.10, so these instructions apply to this version of Linux. YMMV.

WP-CLI is a sweet, command-line tool for managing WordPress installations. First things first, we need to install it. Best thing to do is follow the instructions on the site I just linked.

Next step is to get an empty MySQL or MariaDB database ready, preferably with a unique, restricted user attached to it. See the bottom of this post if you're not sure how to do that.

Next, create a directory for WordPress to be installed in. How you set up your files is up to you. Once it's ready, open a terminal and navigate to the directory you created.

Download the latest stable version of WordPress into the working directory:

wp core download

Next, create your wp-config.php file (replace the items in angle brackets as applicable):

wp core config --dbname=<DATABASE_NAME> --dbuser=<USER_NAME> --dbpass=<PASSWORD>

Finally, install WordPress and set up the admin user:

wp core install --url=http://<YOUR_URL> --title='<SITE TITLE>' --admin_user=<ADMIN_USER_NAME> --admin_email=<ADMIN_USER_EMAIL> --admin_password=<ADMIN_PASSWORD>

That's it! Browse to your URL and (assuming your server is correctly configured), you should see your brand new WordPress installation.

Also, just in case command-line MySQL scares you, here are the commands to create a new database with its own user:

mysql -u root -p

Compiling nginx with ngx_cache_purge on Ubuntu 15.10

There's a PPA for 15.04 and earlier versions, but I needed nginx with the cache purge module on 15.10. Here are the steps I took:

Install nginx from the Ubuntu repository, then immediately stop the service:

sudo apt-get install nginx
sudo systemctl stop nginx

Download the latest sources for nginx and the ngx_cache_purge module and untar:

for filename in *.tar.gz; do tar zxf $filename; done

Install required libraries (these are the ones I needed to install; YMMV).

sudo apt-get install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev libssl1.0.0 libxml2 libxml2-dev libxslt1.1 libxslt1-dev libgd-dev libgeoip1 libgeoip-dev

Build nginx. The options listed here are essentially the same as what are listed in the repository build. The only differences are the addition of the ngx_cache_purge module and the removal of the --with-http_spdy_module (which doesn't work for whatever reason).

cd nginx-1.9.12
./configure --add-module=../ngx_cache_purge-2.3 --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/ --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_sub_module --with-http_xslt_module --with-mail --with-mail_ssl_module
sudo make install

You'll need to replace the Ubuntu repository version of nginx with the one you just compiled. The make install command drops it in /usr/share/nginx/sbin, but it needs to be in /usr/sbin. We'll take care of that now. Then, assuming everything went well, you can restart the nginx service.

sudo mv /usr/sbin/nginx /usr/sbin/nginx.ubuntu
sudo cp /usr/share/nginx/sbin/nginx /usr/sbin/.
sudo systemctl start nginx

You may want to prevent apt from updating nginx (so that you can do it manually). If so, the following commands are useful:

sudo apt-mark hold nginx
sudo apt-mark unhold nginx

Setting up a Minecraft Server using systemd under Ubuntu 15.10

My daughter loves Minecraft and she loves playing it with someone (usually me) even more. I decided I wanted to set up a server that would allow her to connect and play in her world whenever she wanted, and also allow for multiplayer fun. We couldn't do that on her laptop, because it just isn't powerful enough to handle serving up Minecraft, as well as playing it. Thus, after much research, I figured out how to get a Minecraft server (or several) up and running using systemd on Ubuntu 15.10, which is what my desktop runs.

NOTE: This how-to only covers how to get a basic server up and running as a service under systemd. Many related topics (such as configuring your firewall, port forwarding, Minecraft server setup, server security, etc.) are outside of the scope of this discussion. This how-to assumes that your server will only be available to your LAN. YMMV.

Here are the steps in a nutshell:

Create a minecraft user, with a home directory at /opt/minecraft.

sudo groupadd -r minecraft
sudo useradd -r -g minecraft -d "/opt/minecraft" -s "/bin/bash" minecraft
sudo mkdir /opt/minecraft
sudo chown minecraft.minecraft /opt/minecraft

Next, switch to the minecraft user to set up the server(s).

sudo su minecraft
cd ~

The last command is just to make sure that we're where we think we are (it should be /opt/minecraft).

Create at least one directory to store a Minecraft server instance. You can actually create more than one, and I will include details about that later. For now, just create one. We'll start with a creative mode server. We'll also download the Minecraft server jar.

mkdir creative
cd creative

You may need to update that last line to grab the latest server version.

Now, run the server for the first time. This will generate a few files and exit because we haven't accepted the EULA.

java -Xms1G -Xmx1G -jar minecraft_server.1.9.jar nogui

Edit the eula.txt file to accept the EULA. Change eula=false to eula=true. You can use whatever text editor you like. Save and close the file, then relaunch the server (using the same command as above).

Now is a good time to make sure the server is running correctly. Jump into Minecraft and try to connect. Walk around a bit and make sure everything is working as it should be. (How to do this is beyond the scope of this how-to).

Go ahead and stop the server (just type stop and press <ENTER> in the terminal that you launched the server in). Next we're going to create a symbolic link to make updating this easier down the line. It also has the advantage of allowing us to run multiple versions of Minecraft server without creating new unit files. All of this will make sense in a minute.

ln -s minecraft_server.1.9.jar minecraft_server.jar

You can test the server again, if you like, just to make sure you got it right. Just run the same command as before, but use minecraft_server.jar instead of minecraft_server.1.9.jar.

Before we set up the systemd configuration, we have one other thing to do. We need to set up rcon to allow for remote administration. Open the file and change rcon.enable=false to rcon.enable=true. Save and close the file, then fire up the server again.

If you did this right, everything should still work, but you'll get an error in the console about not having an rcon password. Stop the server and open the file again. You'll notice a few lines have been added. Make note of the port number from the line rcon.port=25575 (25575 is the default port number). Also, add a password to the rcon.password= line. Make it something good, because anyone who has this will have access to your Minecraft server!

This is a good time to get your hands on a client that will let you connect to your server. Since I have an Android phone, I use (and really like) MConsole. There are a lot of other options, though, so you don't have to take my advice. Once you have the client in hand, go ahead and test it out by entering your server's IP, rcon port and rcon password. If it works, you're golden!

Finally, we'll set up the systemd unit file. Create a new text file under the /opt/minecraft parent directory called minecraft@.service. The @ sign is very important. Paste the following into this file:

Description=Minecraft Server %i


ExecStart=/usr/bin/screen -DmS mc-%i /usr/bin/java -Xmx2048M -jar minecraft_server.jar nogui

ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say SERVER SHUTTING DOWN. Saving map..."15'
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "save-all"15'
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "stop"15'
ExecStop=/bin/sleep 2


What everything does here is beyond the scope of this how-to, but you may need to adjust some of this for your particular system. Using Oracle Java 8 on Ubuntu 15.10, though, this worked for me. You'll notice the reference to minecraft_server.jar. Using the symbolic link keeps us from having to update the unit file when Mojang releases a new version. Instead, we can just stop the server(s), replace the file and symbolic link, and restart the server(s). It also facilitates running multiple servers with a single unit file. As long as every server has a similar symbolic link, there's no need to reinvent the wheel for each instance.

To start the server service, we just need to create a symbolic link and start it. First, though, we'll switch back to our own user.

sudo ln -s /opt/minecraft/minecraft@.service /etc/systemd/system/minecraft@.service
sudo systemctl start minecraft@creative.service

Notice that the directory name we chose for our server in the beginning, creative, appears here after the @ sign. This is important and is what allows us to use a single unit file and have multiple servers running simultaneously.

You can check on the status of your server by using the following command:

systemctl status minecraft@creative.service

Assuming everything is up and running, you can now connect to your server via rcon or jump in and start playing. Enjoy!

By the way, in order to have multiple servers going at once, all you have to do is set up your second (third, fourth, etc.) with a different port. Make sure your rcon port is also different. All of your servers should then be visible.

One final thing: to have your server start automatically when your computer starts up, copy the minecraft@.service to /lib/systemd/system/ and then enable the server as follows:

sudo cp /opt/minecraft/minecraft@.service /lib/systemd/system/.
sudo systemctl enable minecraft@creative.service

Your server should start up automatically upon reboot.

Garlic Roasted Potatoes and Carrots

Garlic Roasted Potatoes and Carrots
Write a review
  1. 1 1/2 lbs baby red potatoes
  2. 1 1/2 lbs baby carrots
  3. 4-6 cloves garlic, minced
  4. kosher salt to taste (probably at least a tablespoon)
  5. rosemary to taste (a couple teaspoons)
  6. olive oil (enough to coat, maybe 4-5 tablespoons)
  1. Wash and cut potatoes into 1 to 1 1/2 in pieces. Dry thoroughly.
  2. Dry baby carrots thoroughly. Drying the vegetables is very important.
  3. Combine vegetables and add garlic, salt, and rosemary. Add olive oil and mix to coat.
  4. Roast in a single layer on a well-grease baking sheet at 400° for 30-40 minutes. Vegetables are done when potatoes are fork tender and have begun to take on a golden color.

Slow Cooker Beef Pot Roast

Slow Cooker Beef Pot Roast
Serves 4
Write a review
  1. 3-4 lb chuck roast (the better the meat, the better the result)
  2. 3-4 C high quality beef broth
  3. 1/2 medium or 1 small onion, chopped
  4. 3-4 Tbsp olive oil
  5. 4 cloves garlic, minced
  6. 2 Tbsp Worcestershire sauce
  7. 1 tsp rosemary (or to taste)
  8. 1 tsp thyme (or to taste)
  9. bay leaf
  10. kosher salt
  11. freshly ground black pepper
  1. Cut the chuck roast into generous portion-sized pieces. Dust with salt and pepper to taste. Add olive oil to a pan. When the oil is very hot, sear on each side for 1-2 minutes. You will probably need to do this in batches to prevent the temperature from dropping too much. Add prepared meat to slow cooker.
  2. In the same oil, sautée the onion. When done, evenly distribute among meat in slow cooker.
  3. Add broth to slow cooker until meat is mostly covered, but not completely submerged. Add garlic, rosemary, thyme, and bay leaf evenly over mixture.
  4. Cook on high 5-6 hours, until meat is tender and all connective tissues have dissolved. Any remaining fat deposits should be soft.
  5. You can make gravy from the roasting liquid, if desired.

Laws, Theorems, Principles, etc.

Betteridge's Law of Headlines
Any headline which ends in a question mark can be answered by the word 'no'.
Brooks' Law
Adding manpower to a late software project makes it later.
Clarke's Third Law
Any sufficiently advanced technology is indistinguishable from magic.
Cunningham's Law
The best way to get the right answer on the Internet is not to ask a question, it’s to post the wrong answer.
Doctorow's Law
Anytime someone puts a lock on something you own, against your wishes, and doesn't give you the key, they're not doing it for your benefit.
Finagle's Law (related to Murphy's Law)
Anything that can go wrong, will – at the worst possible time.
Gall's Law
A complex system that works is invariably found to have evolved from a simple system that worked.
Godwin's Law
As an online discussion grows longer, the probability of a comparison involving Nazis or Hitler approaches one.
Hanlon's Razor
Never attribute to malice that which can be adequately explained by stupidity.
Herblock's Law
If it's good, they'll stop making it.
Hofstadter's Law
It always takes longer than you expect, even when you take into account Hofstadter's Law.
Murphy's Law
Anything that can go wrong will go wrong.
Occam's Razor
Entia non sunt multiplicanda praeter necessitatem. (Explanations should never multiply causes without necessity.) When two or more explanations are offered for a phenomenon, the simplest full explanation is preferable.
Pareto Principle
For many phenomena 80% of consequences stem from 20% of the causes.
Parkinson's Law
Work expands to fill the time available for its completion.
Parkinson's Law of Triviality
The time spent on any agenda item will be in inverse proportion to the sum of money involved.
Peter Principle
Managers rise to their level of incompetence.
Shirky Principle
Institutions will try to preserve the problem to which they are the solution.
Streisand Effect
The phenomenon whereby an attempt to hide, remove, or censor a piece of information has the unintended consequence of publicizing the information more widely, usually facilitated by the Internet.
Sturgeon's Law (Sturgeon's Revelation)
Ninety percent of everything is crap.
Zawinski's Law
Every program attempts to expand until it can read mail. Those programs which cannot expand are replaced by ones which can.

Installing the MEAN Stack on Cloud9

Create a new Node.js workspace, then enter the following in the shell:

rm -rf *
nvm install stable
echo "export NODE_PATH=$NODE_PATH:/home/ubuntu/.nvm/versions/node/v0.12.7/lib/node_modules" >> ~/.bashrc
source ~/.bashrc
npm install -g npm
npm install -g yo
npm install -g grunt
npm install -g grunt-cli
npm install -g bower
npm install -g generator-angular-fullstack

Make sure that you use the updated Node.js version when you update NODE_PATH.

You can then deploy the Angular.js scaffold:

yo angular-fullstack

Answer the questions thusly:

Javascript, Yes (ES6), HTML, CSS, ngRoute, Yes (Bootstrap), Yes (UI Bootstrap), Yes (Mongoose), Yes (authentication), Twitter, No (

Yeoman will then attempt to run bower and npm to install dependencies. If it fails, run these two commands:

bower install
npm install

Next, we'll set up MongoDB:

mkdir data
echo 'mongod --bind_ip=$IP --dbpath=data --nojournal --rest "$@"' > mongod
chmod a+x mongod

Open a new terminal window (since the once you were just working in is now busy with MongoDB), and start the server:

grunt serve

Due to the small amount of memory available on a micro instance, I had to delete the node_modules directory and run 'npm cache clean', then 'npm install' again to resolve an error I was getting when trying to start the server.

Remote Editing Using Atom

Atom has quickly become my favorite code editor. Since I've successfully deployed the MEAN stack to my Digital Ocean droplet, I now want to be able to edit files on the server from the comfort of my own Windows box. This one got a little dicey, but I was able to figure it out. Here goes:

A few prerequisites that are not included in this guide:

  1. You'll need a remote server with SSH working
  2. You'll need to install Atom on your Windows box
  3. You'll need to install PuTTY on your Windows box

Now to the good stuff:

Open up Atom and install the 'remote-adam' package

On your remote server, install 'rmate'

curl -o /usr/local/bin/rmate
sudo chmod +x /usr/local/bin/rmate

I renamed 'rmate' to 'ratom'.

sudo mv /usr/local/bin/rmate /usr/local/bin/ratom

Set up PuTTY

  1. Set up your SSH session the way you normally would
  2. Navigate to Connection -> SSH -> Tunnels
  3. Under 'Add new forwarded port', enter 52698 for the source port, localhost:52698 for the destination, and choose the 'Remote' radio button
  4. Go back to the main screen and save what you've done so you don't have to do it again

Connect to your remote server using PuTTY and the settings you just created.

In Atom, click 'Packages' and then 'Remote Atom' -> 'Start Server'.

Finally, on your remote server, type

ratom path_to_file/filename

and you will magically be editing that file on your local machine!

Every time  you save, remote-atom will upload the document back to the remote server.

To finish, close the last file in Atom, then click 'Packages' and 'Remote Atom' -> 'Stop Server'. You can then close your SSH connection.