Modern Basics of Being Safe Online

I’m going to provide a short list of know how’s on how to use a computer for today. What do I mean by “for today”? Today there’s still people on the internet or using a computer who are missing out on some of the basics.

This is geared towards individuals who have very little experience or technical knowledge. If you were to describe yourself on the computer, you’d say “I know nothing about computers.” To me this means you are susceptible to attack. It means you are vulnerable. You are a target for the coming generations of hackers.

As we continue to move away from paper trails and companies with no brick and mortar, people who rarely use computers will start coming online for the first time. This is a simple attempt to prepare you.


Rule 1: If it’s too good to be true, it’s too good to be true. 

Firstly, there is no substitute for having a good head on your shoulders. There’s no difference between when someone is trying to scam you on the street than via e-mail. You cannot make a $1,000 a day working from your home computer in an instant. There’s no one e-mailing you for help transferring their small fortune to the United States. It’s just not going to happen.

Rule 2: No, Microsoft/Google/Apple is not calling you.

You will get calls all the time from scammers along the lines of, “Hello, I am Gabe from Microsoft. We see you may have a virus…” – Look, just hang up. It’s not real. Ever.
Companies like Microsoft, Google, Apple, Adobe, you name it, they’re not going to call you to fix your problems. That costs them money. If you have a problem you have to surface it to them. Which leads to…

Rule 3: Everything costs something, nothing is free, not even free

There are some very limited exceptions to this, but here’s the deal: either you’re paying for a goods or service or you are the goods. Companies value your data. The data they collect on you helps generate revenue for them. Keep that in mind, especially when you’re asked for personal information.

Rule 4: No website can tell you what’s wrong with your computer.

If you ever end up on a page, or see an alert, that tells you something is drastically wrong with your computer, and the only way to fix it is by clicking to download something. Stop. It’s not real. The data that travels over the hyper text protocols is very limited, and it’s almost always one day: to you. This is how a browser works, it’s built to receive and display mark up. No website is going to fix your computer.

Rule 5: When installing something, always choose the advanced option

Most software you download is “free” (see rule #3), but they’ll often bundle it with malware or spyware to make money. When you install software always choose the “Advanced” option (it’s not advanced, I promise). You’ll have an opportunity to see what exactly it’s installing, where, and the option to UnCheck software you don’t want installed

Rule 6: Have at least three different passwords

Have at least three types of passwords: A password you use for your bank that is never re-used for anything else. A password for your day to day apps you don’t want to share (like Amazon, Skype, etc.) A password for your apps that you’re willing to share if needed (like Netflix). Also, be aware of what makes a good password vs a bad password.

Rule 7: If you’re not sure, just Google it.

If you’re not sure who’s emailing you, or if a website is legitimate, just Google search them. Within a few search results you’ll have a pretty good idea of who you’re dealing with. Can’t find anything good or bad on some company that is supposed to be reputable? Ignore them and move on.

Rule 8: Use a major provider for e-mail, like Google or Yahoo.

Chances are you’re doing this already, but GMail is pretty good at what it does. They have lots of built in features that prevent Spam, Phishing and other attacks.


Has experience made me more likable?

A few months ago I ran into a post: Psychologists Have Uncovered a Troubling Feature of People Who Seem Nice All the Time. And even EARLIER in the year I read the Business Insider article, Why So Many Tech Founders Who Are Jerks Become Insanely Rich and Successful.

Which got my brain thinking about what does it actually mean to be a successful likable person, and if it’s bad to have opinion that goes against the grain. I think back to my earlier years of my career when I was learning as I went – I sure had an opinion on everything. “Oh this is crap code” would fly off the tip of my tongue. And I believed it. When I go back now and look at what I used to say was “the best code you can buy” I cringe. It’s crap. Why did I think I knew what I was doing?

I was arrogant. Reportedly that most sought after trait of an entrepreneur was just the thing I was giving off so readily. This worked for a couple years until I started running into developers who were actually better than me. Suddenly my arrogance was met with science and experience and my world was rocked. I dedicated the next several years of my life to having a students mind. Everything I did I tried to learn from, take my learnings, apply them elsewhere. I kept my confidence and grew my knowledge.

But something happened along the way. I started to learn how much I didn’t know. Through being a constant student I not only gained knowledge but I gained understanding as well. I started to understand that maybe “Crap code” didn’t always start out that way. Maybe that crap code served a very specific purpose and I shouldn’t mess with it. And does it really matter? At the end of the day most software only serves one purpose: make money.

Does pretty code make more money than ugly code? You can argue either way… better code is easier to maintain, it’s better tested, easily shared with other developers. But what if you business isn’t burdened with long test cycles? Or there’s no future developers in sight? Maintenance, while unpleasant, is not hampered by how ugly the code is? Then investing the cost of making the code pretty may not make business sense.

Now don’t get me wrong – I think those things are important. Especially at an enterprise level. But part of me started to understand that not every project will be the picture perfect case study for Unit Tests. That my job wasn’t to make this set of classes look pretty, uniformed and optimized their structure. My job was to fix a bug, commit and get it to prod. So you see I started to understand that “crap code” is crap only when it stops working.

Back to my original point though. Has this made me too timid? Too agreeable? Perhaps. But when I look back now, years removed, I know that I can leverage these learnings for the better. I believe we have to make choices as leaders to either be confident in our decisions and know why, but also be bold and strike out when we have our gut feeling tells us to. We need to know when it’s correct to be agreeable, and when it’s correct to stand out against the social norm.

Grilled Beer Can Chicken

Cooking has been a growing passion of mine. I’ve been going through recipes to try out w/ my wife. Last night we tried grilled beer can chicken (which she’s a great fan of). It turned out extremely tasty! Easily the juiciest chicken I’ve ever experienced.

Well that was exciting…

Today I decided to bite the bullet and migrate hosts to a private server. Happy to finally be back up and running after some rather slow and painful DNS migrations but the site is back and I’ll be hammering out bugs as time goes on. Stay tuned!

Apache and Node.js on the same Ubuntu box

First encounter.

I’ve been pretty excited to pick up Node.js for awhile now and I sat down today to get the ball rolling. I’ve installed node before and ran the basic ‘hello world’ example at work so I wanted to get right into it. Since I was anxious to at least get something out there on hour zero so I jumped straight into Heroku and created an app. While the process worked great and I got something up I was so excited about node that I committed to picking it up and putting it on my home server.

And that’s the first blocker. Sure – I want to put it on my home server… but I run a lot of other things on my home box. One of those things is a preexisting LAMP stack that hosts some tools that it would be tough to replace or go without. So that’s when my googling started.

I knew going into this that I was going to need to either need a second IP address or use a proxy. It may go without saying, but since I wasn’t about to call my ISP and order a second address, wait for the upgrade to take effect, and then pay the extra fees, I decided that the proxy was the path of least resistance ;)

Not surprisingly there are a lot of tough to follow brain dumps out there on the subject. Everyone has a stackoverflow question or forum post on how to tackle this problem and even a few “is this even ok?” questions.

So without delay, here’s my solution:

Install node and npm

Thankfully this one is pretty straight forward. Follow these steps and you’ll be set.
My only one add here is that I actually needed to add the local bin folder /Users/dschreck/local/bin to my ~/.bash_profile on MacOSX. I did not have this problem when installing on my Ubuntu box though.

Edit local server, /etc/hosts and open ports

I knew I was about to start redirecting from localhost to localhost, so I wanted to ensure that my Ubuntu server knew that was the same as to prevent any type of 503’s. Along this line I also went ahead and opened the 5000 port on my home network. You can choose any por of your own, anything in that range should work.

Edit Apache

And now for the important stuff… the Proxy!

 sudo a2enmod proxy
 sudo a2enmod proxy_http

This will install the Apache2 mod_proxy to /etc/apache2/mods-available/ and /etc/apache2/mods-enabled/

Then, I needed to edit my default conf:

ProxyRequests Off
<Proxy *>
 Order deny,allow
 Allow from all
 <Location /node>

Then kick it all off with:
sudo service apache2 restart

Spawn a node instance & Hello World!

Next I went ahead and created two files: web.js and package.json


var express = require("express");
var app = express();

app.get('/', function(request, response) {
    response.send('Hello World!');

app.get('/test', function(request, response) {
    response.send('This was only a test');

app.use(function(err, req, res, next){
  res.send(500, 'Something broke!');

var port = process.env.PORT || 8080;
app.listen(port, function() {
    console.log("Listening on " + port);


  "name": "node-example",
  "version": "0.0.1",
  "dependencies": {
    "express": "3.1.x"
  "engines": {
    "node": "0.10.x",
    "npm": "1.2.x"

After this we can then run npm install from our node app directory, then:

sudo node web.js

Point our browsers to… and… success. :)

Hope this helps others!

Relearning the Web

Over the last few years the web has continued to mature, which is very exciting for the generation that grew up during the 90’s. Yet at the same time I can see my favorite go-to web technologies becoming old and washed up, for example, I’ve been using PHP for over 13 years now. While PHP continues to be one of the most popular languages on the web it’s still one of the most disliked.

What’s so dated? LAMP.

First, don’t get me wrong, I love LAMP. Lots. I’ve scaled up LAMP to serve millions of unique players for our games at Zynga. Doing so was exciting and it was tough. I was lucky to have great mentors and colleagues helping along the way. But even before I joined Zynga I was tipped off to nginx, one of the few servers written to handle the C10K problem.

So, why didn’t I pick up nginx? It was fresh and new and while working in LAMP at a constant crunch … well, it’s tough to stick your head up to look around. The same goes for other additions to the “go to” web… CouchDB and other NoSQL databases have taken the web by storm over the last 5 years. Node.js is one of the fastest languages out there powering the web, yet I haven’t started using it.

In conclusion I guess the only thing we can do as web developers is continue to be students of the Web. To learn about, and get excited about, these new projects just as we did our firsts. So here’s to relearning the web.

The Future of my Blogging

While this goes without saying, I haven’t actually updated this blog in a very long time. I believe it’s a combination of a few things:

  1. It’s tough to think of, and then work to completion, the level of complexity I’d like to provide in my tutorials.
  2. I really want to make my own blog instead of this clunky WordPress
  3. I find myself using other medians (like Facebook or Twitter) to write on in lieu of a full blog.

Number one is my own fault, really, and I have a plan on how to tackle this one. Number two is what’s actually gotten me to write this post. I’ve been working on my own personal blog system off and on over the last couple months, putting maybe a total of three to four dev days into it. While it’s coming along nicely and I find it enjoyable I’ve ultimately decided that I shouldn’t use it as an excuse to not write. Lastly I believe using Facebook and Twitter are really just an easy shortcut for me, so I’d like to try and commit to something with more depth to it.

So, there you have it. Over the next month I plan on rolling out a series of changes to hopefully get my blog life back in running order.

Learning Python the Disappointing Way

So, earlier today I decided that I was finally going to get down to it, and really dedicate some time to Python. A few years ago I took the dive at and never finished the job. But today, after some googling, I decided to try out Learn Python the Hard Way – and man was I disappoint.

I don’t want to blast the author (Zed Shaw) – I think he’s fighting the good fight. And I agree, I may not have been the targeted audience for his book. But at a certain point I realized that the book had some fundamental flaws in it.

1. I’ve never used print ” ” so many times in my life.

So here’s a thought: If by chapter/example 25 you’re still going over the basics of chapter 5, we have a problem. I get it, it’s CLI and there’s not a whole lot else to do. But when I feel the lesson has more text being output via print than actual meaningful lesson it’s pointless. Halfway through the book it felt like the examples were only so meaty because they had such extremely verbose outputs. An extra credit task for an early chapter was even “Fix your typos” – like… comon… really?…. really?

2. Moar meat.

There is literally an exercise dedicated to “go google python.” I get it, you want to get Novice Programmer interested in the language they’re learning, and to be exposed to other projects. But there’s better ways to do that. How about instead of telling me to go search through thousands of open source projects you dissect one of your favorites in the book?

3. We didn’t even get to the good stuff.

By the final 4 or 5 examples we started to get into meaningful content. Things that started to reflect “Real World” examples of programming in Python. By it just ends, and tells you to go off and have a great time with life. I blazed through the first 50 examples in hopes to get to something interesting, and when you finally had my attention – you stopped. Why? I’m a nice guy, people like me, why would you do something so mean to your readers?

All in all, I like where his heart’s at. I just wish a book that had such awesome referrals  would give me an awesome time.

RockMelt Browser – Future of Browsers?

I recently have installed the RockMelt browser and I have to be honest, I’m somewhat impressed. It’s based off of the webkit engine, same look and feel as Google chrome browser, but with integrated social networking.

To be honest, this feels like the future of everything, right? Our phones are like this, our desktop widgets, the websites we go to all have ‘Like This’ or ‘Tweet This’ – so why not our browser?

What I think is done well, is the little side widget aka ‘App Edge’ – that allows me to quickly see the latest Facebook news updates, and then another one that is for notifications.

Not to mention the App Edge allows for easy (and I mean EASY) RSS subscriptions, allowing for even more ease to keep up to date. Add in the the left side ‘friend edge’ – where I can “star” my favorite friends on Facebook and easily chat or post to their wall. Or I can browse through all of my friends, see if they’re online, etc.

But it’s not all sunshine and rainbows…

RockMelt, while impressive, in its current state feels like it could be easily replaced by an addon to Google Chrome. I have yet to see anything that truly makes it impossible to clone without some trickery of an addon package. If Google could allow for Chrome addons, they could easily kill RockMelt, as they already have a huge acceptance. I could imagine though, that Google would want to reserve this tactic if they ever were to release a social network.

All in all, I’ll be using RockMelt, and hope for some more major addon releases.