Hey, I wanted to step away from the specifics for a moment and talk to you about how I work.
I Turn Off the Internet
I only keep the Internet physically plugged in for a few hours a day and only when I absolutely need it. To go even further; I have not had an Internet connection at home for the last month or so.
I buy Ebooks, download the official manuals or go to the library (where I am now) for reference books. I can’t stress enough the importance of actually reading entire books instead of searching for code snippets every twenty minutes when I can’t remember something.
I have played the Google-as-you go learning style. IT IS A TRAP. Don’t do it, you will waste a huge amount of time. While i was Googling-as-i-went i was training my brain for short term understanding of the subject. Now that I have to really understand what I am reading and not just cut and paste my brain is TRAINED to pay attention and remember long term. This is huge. I am a way better coder now.
I am FORCED to automate to high heaven and to get code to work right the first time instead of a bunch of guess and check and google.
I am Working or I am Not
When I am working I try to stay glued to my work. Work is what I am doing. I create a block of time and I get done what i am supposed to get done or I don’t. If the deadline passes, i might sudo rm -rf project. No looking back, get it done, or don’t.
I spend as much time on the important, but not urgent things, as possible. This ties back in with turning off the Internet. The Internet tricks you into working on urgent matters, weather they are important or not.
I don’t beat myself up. I just stay happy and moving forward. Without endorphins i wouldn’t get anything done.
When I am not working I am playing, I am getting some fresh air, hanging out with people, I exercise, I listen to music, go for walks, I travel and move a lot.
I Screw Up
Sometimes I don’t work or play as hard as i should. Sometimes i don’t work up to my ideal. Sometimes for reasons I can’t fully understand, i just don’t do what i should be doing and i waste time.
Sometimes i swear i actively sabotage my success.
Although it sucks to have to admit it, sometimes i find my own internal drama life affirming.
If everything is going too smoothly then i am just not striving for something worthy enough. Looking at my over educated history, you can see this measurably in my report cards. I consistently got the best grades in the hardest or easiest classes, the stuff in the middle just wasn’t worth the mild effort.
I Secretly Want to Have A Partner or Two to Work With
Although I normally work very much alone* I dream of having people to work with, who work nearly as hard as me, but on complimentary skills. People who are great at outsourcing, like writing, like doing the maintenance, and have a few stellar ideas they want really bad to implement but have not.
I can come off as a jerk and hard headed to work with for reason that will become apparent in the next section.
* Over the last year or so I did work with someone as a partner. That person did not work well, did not have great ideas (had really, really great products) and i lost A LOT of money just for the honor of learning from a lot of business mistakes i will never ever make again. I am still digging to get out of the hole this made.
My Ego is Unaffected by Anyones Unvalidated Opinion of My Work
Putting it another way: I am in whatever business my clients want me to be in and anything i create, write, or work for is for them and only them.
Obviously i don’t work in niches that don’t have interesting people or interesting products, so don’t take me the wrong way and think i would start selling lead weights to fish as long as the margin was big enough.
That being said, I don’t care if your neighbor’s dog’s cousin’s mother thinks the color of your websites are too plain or that there is too much text, or that the navigation says what it means instead of some stupid made up language you want me to use.
If you can’t show me MEASURABLY how your ideas will lead to either happier customers (who refer) or ones that buy more stuff than frankly you can STFU.
Its not my problem if you were picked last in gym class and now you have to show those kids how “fashionable” or “cool” or “chic” or “novel” your storefront is.
The only measure of success is if you are getting cool, happy customers who are putting money into your pocket.
I Respect Superiority
It doesn’t matter how great we think we are, just about any other person we meet will know how to do, at least, one thing considerably better than us.
When i meet someone who has more experience, more training, more ability to accomplish something useful, i STFU and do what they say, no questions asked.
Even if I think i could do a better job then the person i am working with/for, unless i actually have verifiable PROOF that there is a better way to do things, i just STFU. I make sure i am the right hand man, getting done whatever i am tasked to get done.
Nobody cares how smart and knowledgeable i am, they just care about results.
Nobody Cares How Hard I Work
Nobody does or should care how hard I work. Not once in my entire life have i walked to the bank, handed over a check to cash and had the teller ask me “How hard did you work to get this money, because if it was really hard i might just add a couple extra zeros to it for you.”
Things I Need To Improve
- I don’t hold myself hard enough to the rule of “Always be working on the thing which has the most leverage.” In other words, there is almost always one thing i could be doing which would be making me the most money or saving me the most time, but i am not always doing it.
- I do not spend enough time networking with successful people.
- I do not spend enough time finding people who could be really successful if they had a little more guidance.
- I love coding and marketing so much that sometimes i get caught up in the thrill of building things to be “perfect” instead of just getting it out there and cashing the checks.
Over all i think i do a pretty darn good job and am happy with my work. My projects generally make money and my ideas generally turn out to be either correct or wrong in such a way that lessons can be learned from them.
This blog is going to live in conjunction with my biggest project yet, i am going to take on a huge, established, difficult niche which is full of suspicious and finicky prospects.
Seeing as this is going to be build from the ground up, i will be able to replay the drama here in abstraction.
Enjoy the ride, subscribe to the rss and keep in touch.
In the next post i will suggest some FOSS applications i think everyone who is into automation and replication should use.
Tools for Creating, Automating And Replicating (CAAR)
Ok, as promised, here is a break down of the desktop tools I use daily.
The underlying theme is that these tools are great for Creating, Automating And Replicating (CAAR).
Ubuntu
My OS of choice for desktop is Ubuntu. I use it because it is the best supported FOSS software, its the easiest OS to install and it is very very stable and no less powerful than Fbsd which was OS for about 4-5 years.
I strongly feel that if you are going to work with Linux servers for hosting your websites you should also be using a linux distro as your desktop. You will be greatly more productive.
If you are running windows, buy another hard drive, and install Ubuntu on it, you will be creating and replicating in no time.
If you are still not willing to do that install cygwin.
At any rate you need a Apache, MySQL and PHP on your home box anyways, and linux makes that trivial to install.
zsh
Zsh is my shell of choice, oddly enough its both the most user friendly and powerful of all the commonly available shells.
Its ability to cycle through tab completes is my favorite function.
Emacs
Not only a text editor, it is also a religion. Emacs has my day planner. I use it to read mail via gnus. And basically emacs is always open when my computer is on.
I can use it to edit any kind of source code, php-mode, sql-mode, all my custom PHP coding hacks. I just couldn’t live without emacs.
It has tramp mode, which means i can edit files on other servers just like they were on my box, minimizing bandwidth usage and having to keep uploading and downloading the file.
The syntax to open the remote file is trivial to /victory@dfhu.org:~/www/blog/index.php. It is seamless.
I also know basic vim and use it for really quick edits, but it doesn't compare to the power of emacs.
Subversion
My version control system of choice is SVN, its quick and easy and keeps my source code well organized.
I am even starting to use
svn propset svn:keywords 'Date Revision'now to keep the date/version in the individual files. The boiler plate is inserted via a emacs customization.scp
I only get hosts which allow ssh access, this is almost all hosts so it is not much of a restriction. I don't know why people are still using FTP(S) when life is so much easier with scp. scp is a copy command using the SSH protocol.
I have all my SSH accounts wired up set up to use public key authentication (PGP). This is more secure and doesn't require me to have to key in password every time. You can do this manually from the commandline but ubuntu comes with Seahorse which can set up the keys in three easy steps (choose secure key, put in host, put in password).
rsync
rsync is king among men when it comes to replication. It uses ssh and some powerful magic i don't quite understand to remotely copy files to servers, but only sending the data that is really needed, it does all the permissions, stuff, it has an easy syntax for what not to replicate.
It makes replicating a one command deal, not screwing around with ftp. Please use rsync, if you are not already, you are hurting. I will write a post on rsync later.
screen
Gnu screen is a way to keep your shell scripts running on remote servers even when you are not logged in. So basically i can login to any one of my servers, run `screen whatever-script` and then detach it.
When i logout my script is still running. I can then reattach it later when i need it.
Please use screen if you are not already, it will save you plenty of time.
Xvfb
Xvfb is a tool to run a virtual X display. I use it when i need to run a program which requires a GUI window, but on a headless server.
Its not a huge tool, but i don't see that many people in IM talking about it so i thought i would mention it.
PHP5.2
I try to keep up to date with my programming language/OS's but not be on the latest or experimental branch. I am shamless about not coding for PHP4, its been dead for over a year. Who among you would code in PHP4 and bitch that your users are using IE6?
I would rather use Python (pylons) to code my websites, but pylons sites are not as easy to replicate and you need better webhosting.
PHP does have some really ugly bits. The two that annoy me the most are nasty looking named parameters and prior to PHP5, insanely ugly lamda functions.
My database of Choice: SQLite3
I love SQLite, its so much easier to replicate (just copy a file) than MySQL. MySQL which requires a deamon and setting up usernames and passwords and such.
You can have one sqlite file/db which you replicate globally (like bad words, good domains, spider ips, etc...) and then have a local database for each install of your website, which changes on a local basis. You rsync all your global databases to all the sites in your campaign and you are good to good (a one word one line command).
Similarly you can download all your sqlite databases and merg them together for one global piece of uber awesome data. It is trivial, with scp/rsync.
If you know MySQL it will only take a day or two to learn SQLite3. They are just different dialects of SQL, with many of the same features.
Note that in PHP Sqlite3 is the default of the
PDOclass,sqlite_*is SQLite2 which I don't like.Firefox uses SQLite.
My database by Necessity is MySQL
Most of the time MySQL is huge over kill and often doesn't actually introduce any appreciable performance enhancements. Most problems with databases are with sloppy database design, not a the database software.
I learned MySQL before SQLite, because it _was_ more widely supported, now that
PDOcomes bundled standard with PHP binary builds, SQLite3 is extremely common and most webhosts are very cool about installing it with minutes if you ask.Because everyone else uses it, i learned it, but i won't use it if i can use SQLite3.
Don't get me wrong MySQL is great, but you can't replicate sites that use it with the ease that you can with SQLite3.
jQuery Javascript
Javascript is a wonderful language if you learn to discipline yourself enough to use good coding style.
jQuery, I bow down the developers of jQuery who are able to find, nurture and grow the beauty of Javascript.
If you are coding javascript and not using jQuery, i don't really know what your argument is, other than not wanting to spend the five hours needed to learn jQuery.
The plugin system is great too.
Python
Python is such a beautiful and powerful language that is always a pleasure to code in it. If i need to really rip out some serious scrapping or random website/css design python is the boy. The NLTK has the key to doing super powerful article spinning which gets the most human readable content possible.
BeatifulSoup is super handy for scraping.
The downside of Python is that it doesn't run super fast, but i feel that my time is much more important than CPU time.
The other language type things i Use
Tools that i use that come to mind right now, there are probably more.
- sed
- awk
- lynx -dump (i.e the poor mans scraper)
- grep
- matlab/octave
- LaTeX
- eLisp
- C++
- find
- The Actual Bricks and Mortar Library
Summary
If you are using linux servers, go out and buy another hard drive (screw messing around with duel boot) and install Ubuntu.
Now that you have Ubuntu, install Apache, PHP5, MySQL, Emacs, rsync, sqlite3, screen, zsh, scp and learn these tools.
It will take a little time, for sure, but once you got it, your competition (who is still messing around with the alternatives) wont be able to touch you.
Are you in this game for only a year or two until you go back to pumping gas or sucking recycled air in a cubical or are you in this game for the long run? If you are in it for the long term, use the big boy tools.
Get to the library, get out the BOOKS (again don't try to google-as-you-go learn, IT IS A TRAP).
I am willing to take suggestions on topics in the comments, but until then, I am currently working on a release of my PHP script to dynamically optimize titles over time, which I think you will really like. Think PolyPageTitle (but not just for Wordpress) and Eli's blue hat technique number 19 (keyword spinning)