Archive for May, 2013

6 MUST READS if you Want to be Successful

I’ve done quite a bit of reading in my life. When I was a kid, my dad had an agreement with me whereby he would buy me any book I wanted, provided that I would read it cover to cover. He kept his promise all the way up to my 18th birthday; though my mom hated making good on that promise since that meant taking me to the bookstore twice a week and trying to find a place to put the literally 10,000 pages/month that I would read. As I’ve gotten older, I’ve made special note of the books that have had a major impact on my success in life:

1. Raising Venture Capital for the Serious Entrepreneur – When I failed to raise the money I needed to grow Scaled Dynamics, this book taught me exactly why. From setting up a business plan to negotiating a term sheet, this book walks you through startup finance from inception to exit. I ultimately succeeded by bootstrapping, however if I ever do try to raise capital again, I’ll do so armed with the confidence to pull it off successfully and under favorable terms.

2. Founders At Work – Owning a business is no joke. It is full of great highs, a sense of accomplishment, a sense of well being by providing job opportunities, and if you do everything right and have a bit of luck, untold riches. But being a business owner has its lows too. The 18 hour days become grueling, the roller coaster that is startup finance will wear on your nerves, and having to be the center of hope for everyone who relies on you for product and paycheck will also take its toll. This book is what gets me through those difficult times. It’s the stories of people that I consider to be my mentors and role models, and it gives me hope.

3. How to Win Friends and Influence People – This is the quintessential human interaction handbook. 99% of this book is common sense, but it’s incredible how easily we often lose sight of the bigger picture when it comes to working with others. This book is a cure for that.

4. Ultimate Sales Machine – Based on the premise that your skills will only ever get better through “pigheaded discipline,” I’ve made it a point to read this book at least once a year since it was recommended to me. This book will teach you how to manage your time in an efficient manner and will walk you through a number of the intricacies of the sales process. With that said, the author, Chet Holmes is a perfectionist who is obsessed with discipline. This isn’t a “tips and tricks” book that will give you sales tactics, it’s a true game changer as long as you have the resolve and persistence to implement the Chet Holmes way.

5. When Genius Failed: The Rise and Fall of Long Term Capital Management – I’ve read this book twice. Once when I was 17 and again when I was 27. This book was my first introduction to capital markets, and I would say that it is an essential read for anyone who wants to understand how markets work. A decade later, I was struck by how former MF Global CEO Jon Corzine was deeply involved, and it gave significant color to another industry blowup.

6. Barbarians At The Gate: The Fall of RJR Nabisco – Anyone who wants to understand how private equity works should give this a thorough read. A number of the characters are shared between this and When Genius Failed, so I’d recommend reading this before When Genius Failed to get a sense of chronology.

How to Negotiate a Raise, The Follow up

I couldn’t believe the response that came from my raise post last Thursday. I got a number of emails and comments and I’d like to address a number of them. Depending on my resolve, this may or may not turn into a regular series where I walk you through how to interview, crafting the perfect resume, and how to build a career. In the meantime, I want to address some of the points that were brought up, and provide some clarity.

A close friend of mine, Jeff Young is a Talent Acquisition Consultant for the Chamberlain College of Nursing. When it comes to recruiting, the guy knows his stuff. He’s been recruiting talent for almost as long as I’ve been making trading software.

Jeff writes, “Honestly, I have to say I disagree with most of the article. All it encourages people to do is become cockier, less dedicated to the business they work in, and overall they will change jobs so frequently that they will in essence be unmarketable. Maybe you could pull something like this in a sales oriented position, but for any other “corporate” position this really doesn’t work. There’s budgets and thousands of other restraints that keep someone from just getting a raise because they think they deserve one. I know if someone on my team asked for a raise because they deserved it, they’d be told to go pound sand. Now if that same person was making significant contributions toward the company’s vision/goals, then we promote. But that’s the management’s call, not the employee’s. Summary: Loyalty > threats.”

First I’d like to say that from a disclosure standpoint I’ve spent the majority of my career in sales so my approach might be a bit too aggressive for other parts of an organization. With that said, I don’t think that raises are exclusive to those in profit-center roles and I’m sure that there are other cases where you might be able to get a raise. If your skills suddenly come in demand (as I pointed out for compliance people in the financial industry) and your current employer doesn’t see fit to pay for rising costs, it’s in your best interests to find another job that will pay you. If you’ve significantly improved your skillset from the time at which you were hired, you’re probably significantly more marketable and again, would be eligible for a raise.

Many employers (such as my firm, Scaled Dynamics) have annual reviews during which time it’s expected that compensation will be discussed. If your employer does not have a process for reviewing employees from time to time, then being proactive and asking for the raise is, in my opinion, far superior to waiting and hoping.

People tend to put an implicit valuation on themselves and say things like “Oh this company couldn’t survive without me,” and “I could get way more elsewhere.” My first step is to encourage people to go find that out for a fact rather than just state it. If you can actually PROVE that you’re worth a significant raise, and the market supports it, there’s no reason on god’s green earth why you SHOULDN’T have that raise!

To Jeff’s point about loyalty, I agree wholeheartedly! Whenever I look at a resume full of 6 month and 1 year positions, I think to myself “this guy is a mercenary and isn’t going to stick around. I’ll pass!” Timing is everything. You should spend at least 2 years with each employer and you should be getting a raise at least once a year. Always remember that it’s also ok to turn employers down when you’re interviewing. You want to make sure that wherever you end up, it’s good enough of a fit that you’ll stick around for awhile.

AWS: The Complete Guide to Setting up a Simple Webserver

In short, I got sick and tired of paying $700/month for a cabinet in a datacenter and hosting my own servers. The failover was never REALLY truly redundant and my firm is just too small to justify hosting its own infrastructure. I’ve never been a fan of hosting services because I’ve always found them too limiting. I consider myself to be a damn good systems administrator and not having access to router configs and having root access to the machines were nonstarters for me. I’m set in my ways.

While my experience so far has been excellent, there are a number of pitfalls that you need to be aware of, and I will be sure to address those towards the end. This guide is intended for non-technical people to do very technical things so expect a LOT of explanation.

Sign up for Amazon Cloud Services

First, go to aws.amazon.com and create an account. You’ll have to enter your billing info, but as long as you stay within the free tier, you won’t be charged anything.

Set up your virtual machine

Next, you’ll want to create an EC2 instance. AWS Free Tier gives you 750 hours per month of Linux or Windows EC2 Micro Instances. There’s roughly that many hours in a month, so as long as you only have one micro instance, you should be completely free. For 99% of small business websites, this is PLENTY, though Amazon does offer a variety of configurations!

1. Sign in to the AWS Management Console. It’s a link under the dropdown in the top right with the credentials you already created.
1
2. Click on EC2
2
3. Click the button marked “Launch Instance”.
3
4. Click “Classic Wizard” and continue.
5. Select a 64 bit Amazon Linux AMI type server. This is a CentOS based linux server for those who are curious.
6. Set the number of instances to 1 and make sure that you have Micro for the type. The availability zone shouldn’t make a huge difference unless you’re latency sensitive and you know where your users are concentrated. If this isn’t you, select “no preference” on the dropdown and continue. On the next page, all of the defaults are fine, so go ahead and hit continue again.
8. On the next page, you’ll have to give server a name. Give your server a name in value box next to name and hit continue.
9. In order to access the server from your local machine, you will need to create a key pair. This will become important later when we discuss how to connect to the server, but for now just enter a name under “Create a New Key Pair” and click “Create & Download your Key Pair”. This will download a .pem file. NOTE: THIS FILE IS IMPORTANT Put it somewhere secure and preferably backed up.
10. To set up the firewall of the server, we need to allow webserver and administrative related traffic in but block out anything that might be malicious. See the settings in the image below:
4
11. Click “Launch” and you’ll have to give it a few minutes while AWS runs off and builds your configuration.

While we’re waiting, I want to get one last step out of the way so that we’re on top of things for what’s next. If you go to the instances menu item on the left, you’ll bring up a list that contains your server. Clicking on the server instance will bring up some information about your server on the bottom. Scroll down to “Public DNS” and copy the value to the right of it. You’re going to be using this address quite a bit. If you have registered a domain that you want to point to this server, now would be the time to do it. Go to your domain registrant and paste the Public DNS value into wherever your forwarding to. I host through godaddy, so I went to my DNS manager and changed the “@” record to the copied value.

Now let me explain a bit about what you’ve done so far. Those with a technical background can skip to the next section.

A virtual machine is a piece of software that emulates a computer’s hardware. You can put any operating system on it and it will just run. Virtual Machines are great for things like creating software testing environments because you can very quickly set up a “brand new clean” virtual machine, perform whatever tests you need, then throw it out and start fresh. You can vary hardware configurations such as memory, processor architecture, and hard drive size relatively easy. Amazon EC2 instances are virtual machines with public IP addresses that can be accessed from the internet, so they are ideal for our purposes. So far you’ve created a virtual server and made note of its public address, possibly hooking it up to a domain if you have one.

Get Connected to your VM

I’m running a mac using parallels, so I can explain how to connect your server to both environments. In my windows environment, I use WinSCP for file transfers and Putty for shell access. So go ahead and download both of those programs first. Next, dig up that .pem file that I told you was super important. You’re going to have to do a bit of work to get that .pem file to work with putty because it can only really use its proprietary format (don’t ask me why).

1. Open PuTTYgen.
2. Find .pem file. Click Conversions -> Import key.
3. Open the PEM file. The Key pane should populate with a public key, private key fingerprint, comment, and passphrase.
4. Change the comment from “imported-openssh-key” to whatever you named your key pair in step 9 above.
5. Pick a passphrase and click “Save private key.”
6. You’re going to store your key in a timesaver called Pagent, so go ahead and open it. When you open Pagent you’ll just see a new icon in the systemtray.
7. Right click on the new icon in the systray and click “Add Key”
8. Open your PPK file that you created with PuTTYgen and enter the passphrase you created.
9. Close the window
10. Grab the address of the server. Open Putty and paste the public address you copied into the Host Name input.
5

For Winscp, you’re just going to click the “new” button, and enter all of your hostname and login credentials like you did for Putty. There’s a “Private Key File” option that you’ll use to specify that same .PPK file that you created for Putty. After you’ve done this, go ahead and try to connect to browse the filesystem of your server.

On the mac side, I use the terminal to issue commands on the server. There’s a bit of set up involved to make it easy.
1. Take the key pair file (this is the .PEM, not the .PPK) and copy it to “/[your user id]/.ssh/”
2. Start up the Terminal application. I just go to the search bar and type “Terminal”
3. type “ssh ec2-user@[your server's host address]“. The command will ultimately end up looking something like this: ssh ec2-user@ec2-00-00-00-00.compute-1.amazonaws.com

Get services running on the VM

Now that our server us up and running and we have access to it, it’s time to issue a bunch of linux commands. I’m going to tell you what they are, then explain.

1. Connect to your server either using putty or mac terminal. The default login is ec2-user
2. Type in (“run” for future reference) sudo su. This will switch users to the root user. The root user is allowed to do whatever it wants whereas when you logged in as ec2-user, you’re highly restricted. If you’re on a PC, you can just copy the command text from here, go into your putty window and right click.
3. yum update – yum is a package manager. It connects to a repository of all of the latest greatest software available for this installation of linux and installs whatever software pacakges you tell it to. Think of it as the equivalent of windows update on steroids.
4. yum install httpd mysql mysql-server php php-mysql php-xml php-pdo php-odbc php-soap php-common php-cli php-mbstring php-bcmath php-ldap php-imap php-gd nano sysstathttpd is also known as Apache. It’s a webserver that will ultimately serve up your html pages and php scripts. MySQL is a database server that will be required by our later installations of drupal and wordpress. PHP is a very powerful scripting language that is required by wordpress and drupal. It’s an interpreted language that outputs text (html, css, javascript, or whatever you tell it to really) to a browser. Nano is a text editor that we’ll use when we’re not editing files in winscp. Sysstat is used to get system monitor like information.
5. Fire up the webserver by running service httpd start
6. Fire up the database server by running service mysqld start
7. Let’s create a user ID and password for the mysql server and then restart the service mysqladmin -u root password [new password] and then run service mysqld restart
8. Test everything out to make sure that it worked. cd /var/www/html/
nano index.php type in <?php phpinfo(); ?> and then CTRL + O then CTRL + X. Now open a web browser and navigate to your hostname (if you’ve already forwarded your domain here, go ahead and give that a shot). The page should open with detailed information about your php settings.
9. [Optional] To make your life easy from a permission standpoint, it can’t hurt to make some folders easily accessible by ec2-user so that you can copy and run from your webserver. chown -R ec2-user /var/www

Install web software

In this section, our ultimate goal is to install a CMS such as wordpress or drupal, but first we’re going to make our lives easy from a database standpoint by installing phpMyAdmin.

1. Go ahead and download phpMyAdmin from the link above. Unzip into a folder and copy that folder to /var/www/html/ using winscp (or a copy command if you’re on a mac).
2. Change the name of the folder to something you can remember. “db_admin,” for example.
3. From a web browser, navigate to the folder you just installed. “www.example.com/db_admin,” for example.
4. PhpMyAdmin will allow you to create databases, which will be used by wordpress and/or drupal. You can create the databases now, but I would actually recommend waiting because web software will usually create the databases for you.
Screen Shot 2013-05-06 at 10.16.26 AM
5. Using the steps above, follow this exact procedure to copy wordpress and drupal to their own folders. The installations themselves are pretty self explanatory, but if you need help I might be talked into doing a step-by-step guide for each of those.

Optimize Machine

I had this really nasty issue of the virtual machine running out of memory and mysql blowing up and crashing. I made some changes to my my.cnf file that made the installation significantly more stable but I was still left feeling like I wasn’t leaving myself enough room for error, so I also created a swapfile just to put my mind at ease.

You’ll want to navigate to /etc/my.cnf and open in an editor. If you login as root (sudo su just like before) you can edit in nano, or you can use chown to allow you to edit the file in winscp as ec2-user. The changes I made to my my.cnf file are as follows:

# Set internal buffers, caches and stacks very low
key_buffer = 320K
table_cache = 10
sort_buffer_size = 320K
read_buffer_size = 320K
read_rnd_buffer_size = 24K
net_buffer_length = 24K
thread_stack = 320K

innodb_buffer_pool_size = 10M

To add a swapfile, issue the following commands in this exact order:


sudo dd if=/dev/zero of=/var/swapfile bs=1M count=2048
sudo chmod 600 /var/swapfile
sudo mkswap /var/swapfile
echo /var/swapfile none swap defaults 0 0 | sudo tee -a /etc/fstab
sudo swapon -a