Close

Simple CSS Button Styles Tutorial and Code

Here’s how to create some simple CSS button styles:

Here’s the code I used in the video:

<!DOCTYPE html>
<html>
<head>
<title>CSS Buttons</title>
<style>
.btn {
display: inline-block;
border: none;
padding: 6px 12px;
margin-bottom: 0;
font-size: 14px;
font-weight: normal;
text-align: center;
cursor: pointer;
border-radius: 4px;
}

.btn-lg {
padding: 10px 16px;
font-size: 18px;
border-radius: 6px;
}

.btn-sm {
padding: 5px 10px;
font-size: 12px;
border-radius: 3px;
}

.btn-success {
color: #fff;
background-color: #5cb85c;
border-color: #4cae4c;
}

.btn-success:hover,
.btn-success:focus,
.btn-success:active {
color: #fff;
background-color: #449d44;
border-color: #398439;
}
</style>
</head>
<body>
<p><button>Submit</button></p>
<p><button class="btn">Submit</button></p>
<p><button class="btn btn-sm">Submit</button></p>
<p><button class="btn btn-lg">Submit</button></p>
<p><button class="btn btn-success">Submit</button></p>
<p><button class="btn btn-success btn-sm">Submit</button></p>
<p><button class="btn btn-success btn-lg">Submit</button></p>
</body>
</html>

If you get value from this code snippet, please consider sharing it with another developer or group who could benefit from it.

June 4, 2015

PHP Try Catch Error Handling

How do you PHP try catch blocks to efficiently handle errors? Here’s the answer:

Here’s the code I used in the video:

<pre>
<?php
try {
echo "Try to do something here.<br />";
throw new Exception("Yikes. Something went funky.<br />", 234);
} catch (Exception $e) {
//print_r($e);
echo $e->getMessage();
} finally {
echo "This will always run in our try block.<br />";
}

// try {
// // connect (create a new MySQLi object)
// $mysqli = new MySQLi('localhost', 'root', 'root', 'snippet');

// if (mysqli_connect_error()) {
// throw new Exception(mysqli_connect_error());
// }

// $sql = "SELECT * FROM search LIMIT 10";
// $result = $mysqli->query($sql);

// if (!$result) {
// throw new Exception($mysqli->error);
// }

// while($row = $result->fetch_object()) {
// $results[] = $row;
// }
// }
// catch (Exception $e)
// {
// echo 'We are having issues. Here is how to get help.';
// }

// print_r($results);
?>
</pre>

If you get value from this code snippet, please consider sharing it with another developer or group who could benefit from it.

May 28, 2015

How to Create a PHP 301 Header Redirect Script

How do you implement a 301 header redirect in PHP? Here’s the answer and how to do it:

Here’s the code I used in the video:

<?php
/**
* PHP Redirect Script
*
* @author https://johnmorrisonline.com
*/

// Map IDs to URLs
$accepted_ids = array(
'goog' => 'http://www.google.com',
);

// Die on no ID
if ( !isset( $_GET['id'] ) ) {
die('Oops. Need an ID');
}

// Set ID
$id = $_GET['id'];

// Die on ID not supported
if ( ! in_array( $id, array_keys( $accepted_ids ) ) ) {
die('Oops. That ID is not supported.');
}

// Get campaign if set
if ( isset( $_GET['utm_campaign'] ) ) {
$campaign = $_GET['utm_campaign'];
}

// Create redirect
$redirect = sprintf('%s?q=%s', $accepted_ids[$id], $campaign);

// Run the redirect
//echo $redirect;
header("HTTP/1.1 301 Moved Permanently");
header("Location: {$redirect}");

// Exit
exit;

If you get value from this code snippet, please consider sharing it with another developer or group who could benefit from it.

May 21, 2015

MD5, SHA-1 or BCRYPT For Hashing and Storing Passwords in PHP?

Should you use MD5, SHA-1 or BCRYPT when hashing and storing passwords using PHP? Here’s the answer and how to do it:

Here’s the code I used in the video:

<?php
/**
* Performs password hashing
*
* This class is used to perform common password hashing routines
*
* @version 1.0
* @author John Morris <support@johnmorrisonline.com>
*/
class Hash_Password {
/**
* Hashing algorithm
* @access private
* $var int
*/
private $algorithm = PASSWORD_DEFAULT;

/**
* Hashing options
* @access private
* $var array
*/
private $options;

/**
* Constructor
*
* Sets up class options
*/
public function __construct() {
$this->options = array(
// Add SALT and cost options here if desired
);
}

/**
* Hash and store password
*
* Hashes the password then stores it in the database
*
* @param string $password The password to hash and store
*
* @return boolen true/false True if hash and store is successful. False if not
*/
public function hash_and_store($password) {
// Hash the password
$hash = $this->hash( $password );

// Check for successful hashing
if ( ! $hash ) {
return false;
}

// Store password in database
// Check if storing was successful. Return false if not

return true;
}

/**
* Verify password
*
* Gets the hash from the database and verifies user-submitted password
*
* @param string $password The password to check
*
* @return boolean true/false True if password matches. False if not
*/
public function get_and_verify($password) {
// Get hash from database
$hash = '12lkjrelkjelkjrekjel';

// Check if user-submitted password matches hash
if ( $this->verify( $password, $hash ) ) {

// Check if password needs rehashed
if ( $this->needs_rehash( $hash ) ) {

// Rehash and store new hash
if ( ! $this->hash_and_store( $password ) ) {
return false;
}

}

return true;
}

return false;
}

/**
* Hashing method
*
* Hashes a password
*
* @param string $password The password to hash
*
* @return $string $hash The hashed password
*/
public function hash($password) {
return password_hash( $password, $this->algorithm, $this->options );
}

/**
* Verify method
*
* Verifies a password matches the hash
*
* @param string $password The plain text password to check
* @param string $hash The hash to check against
*
* @return boolean true/false True if it matches. False if not
*/
public function verify($password, $hash) {
return password_verify( $password, $hash );
}

/**
* Needs rehash method
*
* Checks if a hash needs rehashed. For new algorithms/options
*
* @param string $hash The hash to check for rehashing
*
* @return boolean true/false True if needs rehashing. False if not
*/
public function needs_rehash($hash) {
return password_needs_rehash($hash, $this->algorithm, $this->options );
}

/**
* Get hash info
*
* Gets the hashing algorithm and options used while hashing
*
* @param string $hash The hash to get info from
*
* @return array $info An associate array containing the hashing info
*/
public function get_info($hash) {
return password_get_info($hash);
}

/**
* Find cost
*
* This code will benchmark your server to determine how high of a cost you can
* afford. You want to set the highest cost that you can without slowing down
* you server too much. 8-10 is a good baseline, and more is good if your servers
* are fast enough. The code below aims for ≤ 50 milliseconds stretching time,
* which is a good baseline for systems handling interactive logins.
*
* @param int $baseline Baseline cost to start testing from
*
* @return int $cost Cost to use for server
*/
public function find_cost($baseline = 8) {
// Target time. 50 milliseconds is a good baseline
$time_target = 0.05;
$cost = $baseline;

// Run test
do {
$cost++;
$start = microtime( true );
password_hash( 'test', $this->algorithm, array( 'cost' => $cost ) );
$end = microtime( true );
} while( ( $end - $start ) < $time_target );

return $cost;
}
}

<?php
// Require password hashing class
require_once('/class-hash-password.php');

// Example password
$password = '1234567qwerty';

// Instantiate new instance of class
$hash_password = new Hash_Password();

// Hash a password
$hash = $hash_password->hash($password);

echo $hash;

// Spacer
echo '<br />';

// Verify a password
echo $hash_password->verify($password, $hash);

// Spacer
echo '<br />';

// Get hash info
print_r($hash_password->get_info($hash));

// Spacer
echo '<br />';

// Find appropriate cost
echo $hash_password->find_cost();

If you get value from this code snippet, please consider sharing it with another developer or group who could benefit from it.

May 12, 2015

Coupon Code for the Complete Web Developer Course on Udemy

The Complete Web Developer Course on Udemy is as the name says a comprehensive web development course for new to intermediate developers. The course covers these topics:

  • HTML
  • CSS
  • Javascript
  • jQuery
  • Twitter Bootstrap
  • WordPress
  • PHP
  • MySQL
  • APIs
  • Mobile Apps

You can check out my full review of the Complete Web Developer Course here if you still have questions. Otherwise, you can use the special link below for an 25% off coupon to the course:

Click here for the 25% off coupon code

That is an affiliate link and I will earn a small commission (at NO cost to you) when you purchase the course through that link.

icon

May 6, 2015

How to Insert Form Data Into a MySQL Database Using PHP

Why won’t my form data insert properly into my MySQL database? Here’s the most common reasons why:

Get the updated source code for this video here.

The two most common issues I see developers having are:

  1. Not connecting to MySQL properly
  2. Not matching form fields to database columns properly

Issues Connecting to MySQL

When you run into connection issues, you’ll usually see an error that will say there was a problem connecting to the database.

More often than not, it’s simply a typo in your database name, username, or password.

Make sure to triple-check that information. Also, keep in mind if you’re using source code I’ve provide you’ll need to change those values to whatever they are for YOUR database.

Issues Matching Form Fields to Database Columns

Almost always, this is caused by a mis-match between your form field names and your database column names.

In your SQL statement, you do the matching directly. Here’s a quick example:

INSERT INTO table_name (database_column_1, database_column_2) VALUES (form_field_1, form_field_2)

So you need to match the form field value to the database column.

I go much more in-depth with this in the video, so be sure to watch it if you’re having this problem.

If you enjoyed this tutorial and want to keep learning PHP, you can start taking my full course for free on my free tutorial site here: https://johnsfreetuts.com/php/

April 29, 2015

How to Validate an Email Address (By Domain) Using PHP

How can I validate an email address (by domain) using PHP? Here’s how:

Here’s the class that does all the heavy lifting and an example page for including and using the class:

<?php
/**
* Validates email addresses
*
* This class is used to validate email addresses using several different criteria.
*
* @version 1.0
* @author John Morris <support@johnmorrisonline.com>
*/
class validate_email {
/**
* Accepted domains
* @access private
* @var array
*/
private $accepted_domains;

/**
* The class constructor
*
* This sets up the class
*/
public function __construct() {
// Set the accepted domains property
$this->accepted_domains = array(
'unl.edu', 'uni.edu'
);
}

/**
* Validate email address by domain
*
* Checks if the email address belongs to an accepted domain
*/
public function validate_by_domain($email_address) {
// Get the domain from the email address
$domain = $this->get_domain( trim( $email_address ) );

// Check if domain is accepted. Return return if so
if ( in_array( $domain, $this->accepted_domains ) ) {
return true;
}

return false;
}

/**
* Get the domain
*
* Gets the domain from an email address
*/
private function get_domain($email_address) {
// Check if a valid email address was submitted
if ( ! $this->is_email( $email_address ) ) {
return false;
}

// Split the email address at the @ symbol
$email_parts = explode( '@', $email_address );

// Pop off everything after the @ symbol
$domain = array_pop( $email_parts );

return $domain;
}

/**
* Check email address
*
* Checks if the submitted value is a valid email address
*/
private function is_email($email_address) {
// Filter submitted value to see if it's a proper email address
if ( filter_var ( $email_address, FILTER_VALIDATE_EMAIL ) ) {
return true;
}

return false;
}
}

<?php
require_once( dirname( __FILE__ ) . '/class-validate-email.php' );

$validate_email = new validate_email;

// Valid
if ( $validate_email->validate_by_domain('justin@unl.edu ') ) {
echo '<p>This is valid!</p>';
} else {
echo '<p>This is NOT valid!</p>';
}

// Valid
if ( $validate_email->validate_by_domain('jason@uni.edu') ) {
echo '<p>This is valid!</p>';
} else {
echo '<p>This is NOT valid!</p>';
}

// Not valid
if ( $validate_email->validate_by_domain('ramone@ui.edu') ) {
echo '<p>This is valid!</p>';
} else {
echo '<p>This is NOT valid!</p>';
}

These are the exact steps for using this:

  1. Include/require class-validate-email.php into your application or web page.
  2. Instantiate a new instance of the validate_email class.
  3. Pass the email address to the validate_email::validate_by_domain() method.

If you get value from this code snippet, please consider sharing it with another developer or group who could benefit from it.

April 28, 2015

How Important Are the oDesk Skills Tests?

Do the oDesk skills tests really matter when you consider the answers are available everywhere on the web?

Thing is, the upside of getting high scores on these tests is very limited; however, the downside of NOT having them is enormous.

Here’s what I mean:

Do the Tests Matter?

They matter in the sense that if they’re not there clients will wonder why.

Imagine a client looking at 10 different freelancer profiles. Nine of them have a PHP test with a score in the top 1% and one of them doesn’t have it at all.

That will stick out to them and could be enough for them to pass on your profile.

So, the prevalence of the tests on freelancer profiles makes them important have.

However…

Click here for my full list of web developer resources including my top recommended courses and tools.

You Won’t Instantly Get Clients Hiring You in Droves Because You Pass the PHP Test

The upside is very limited. Clients will see it, like that it’s there but it won’t do a ton to convince them to hire you.

Think of it as a hedge.

The tests are about eliminating a negative not generating a positive.

Especially, since a lot of clients know the answers are available all over the web. They don’t put a ton of stock in it.

But…

This Brings Up a Larger Issue

The truth is… there’s not ANY one thing on your profile that will suddenly make clients trust you enough to hire you.

It’s about ALL the things.

It’s about:

  1. Specializing and make a very specific offer on your profile
  2. Creating congruence among all the items ON your profile

Meaning, everything on your profile should be relevant to the specific offer you’re making.

Your headline, service description, photo, tests, certifications, job history, portfolio, testimonials… all of it.

I purposefully keep things I’ve done off my profile and website because it’s not perfectly relevant to what I’m offering.

Makes sense, but here’s the thing…

To Know and NOT Do Is Really Not To Know

I’ve mentioned a lot of this stuff before. Some of it I even harp on in almost every podcast I do.

The problem is, I see so few people still doing it… and it’s so fundamental to having success as a freelancer.

So, I challenge you to put this into action:

  1. Identify your niche. What specific offer can you make to clients?
  2. Upgrade your profile. What changes do you need to make so everything is relevant?
  3. Bid on RELEVANT jobs. What relevant jobs exist NOW that you can bid on?

Start doing these things and you should see more success.

April 22, 2015

What Are the Best Sources of Potential Freelance Jobs?

What are the best places to find quality, high-paying freelance jobs? A lot of freelancers struggle with this and frankly make mistakes in their approach.

But, making a simple switch in how you go about looking for freelance jobs you can open you up to a greater array of clients…

So you can get as much freelance work as you want. Here’s how:

Finding Freelance Jobs

I find a lot of freelancers believe in an “all-in” approach to freelancing.

  • They either go “all-in” with freelance sites or “all-in” with getting clients from their website.
  • They go “all-in” with oDesk or “all-in” with Freelancer.com (or whatever other network).
  • They go “all-in” with ABC strategy for getting clients or XYZ strategy.

The idea is to keep things simple. They already hate selling themselves so they’re going to do as little of it as possible.

It’s a losing approach.

Elance-oDesk had 2.8 million jobs posted to its sites in 2014. Freelancer.com has 7.5 million freelance jobs posted to its site.

In the United States, freelancers earned $715 billion in revenue.

Why cut yourself off from any of it?

The right approach is to leverage every aspect of the market in order to get jobs.

Be on Elance. Be on oDesk. Be on Freelancer.

Get work from your own website.

Diversify and put yourself where the jobs are and increase the opportunity for a client to come across your profile and hire you.

Still need to upgrade your web design skills? Here’s my top web developer resources to get you there.

It’s not that much more complex. You can use the same information on one site as the others.

And, if a client wants to give you money… do you really care that you have to login into Freelancer instead of oDesk?

(Hint: you shouldn’t)

So, snap out of it! Don’t worry so much about the “best” site… find the top 3-5 and be on ALL of them. The jobs are there.

Now, that you have the right approach…

What Are the Best Places to Find Potential Freelance Jobs?

First, you ultimately want to get the majority of your clients from your own website.

Freelance sites are designed to make you compete so you’ll always make less and work more when you get jobs from them.

So, #1 on the list is: yourdomain.com

From there, you have two distinct types of freelancing sites:

  1. Open networks
  2. Curated networks

Open networks like Elance, oDesk and Freelancer.com are easy to get approved on and have a high number of jobs available.

But, they also have millions of freelancers and the competition is fierce.

Plus, you will often find yourself competing on price and getting undercut by developers charging $5 or $10/hour.

There ARE ways around it… but it’s still annoying.

Curated sites like Crew, TopTal and Ziptask have a more rigorous application process… but once you’re approved they’re in the business of keeping you employed.

There’s a lot less competition and you’ll generally get paid more for what you do.

Which Freelance Site Should You Choose?

Again, the ultimate goal is get most of your work from your own website.

But, if you’re just starting out you’ll likely have to go with a site like Elance, oDesk or Freelancer.com, gain experience and build up your portfolio.

Once you’ve established yourself you can then move toward the curated sites and work on getting accepted there.

Eventually, you’ll build enough of a reputation where clients will seek you out and you’ll get most of your work from your own website.

So, the freelance site you choose depends where you’re at in the above process:

  • If you’re brand new, go with an open network
  • If you’re fairly established go with a curated site
  • If you’re a pro you can likely use your own website

Here’s how to get started with all this..

  1. Determine where you’re at with your career.
  2. List 3-5 freelance sites to target based on your position.
  3. Write up your bio/application and apply to those sites.

Here’s resource list to help you with the links…

Open networks:

Curated networks:

Now, hopefully that helped you out. Please, if you know a freelancer who could benefit from this please help me out and send them this way. 🙂

April 21, 2015

How to Eradicate Annoying Scope Creep

How do you eliminate scope creep without coming across rude? I find a lot of web developers deal with this and are terrified to set boundaries with their clients.

But, you can do it in a way that will actually make your clients like you MORE… not hate you forever. Here’s how:

Tips for Eradicating Scope Creep

I find a lot of web developers, especially newer ones, are terrified of setting boundaries with their clients because they believe no matter how they do it they’ll come across rude.

Your client will get pissed, fire you and tell everyone they know what a jerk you are.

Nope.

It’s actually the opposite if you approach it right. Setting boundaries creates respect. Clients will see you as more of an expert because you aren’t a “yes man”.

You know when to say no and aren’t afraid to say what you think… and you can do it tactfully.

What that means is setting boundaries and squashing scope creep before it gets started isn’t a “necessary evil”.

In fact, it’s a way to increase your client’s affinity for you and something you should do enthusiastically.

So, here’s how to do it the “right way”:

1. Be a Specialist

Specialists make more. They work less. And, they deal with fewer annoying problems like scope creep.

When you specialize, clients see you as a hired gun brought into accomplish a very specific task. In that context, they rarely even think of increasing the scope of what you’re doing.

When you generalize, the very value you’re offering is the fact that you can do a bunch of different things. That’s what you’re selling!

So, is it any wonder a client tries to add items to your scope of work? It just seems natural.

Think about it from the client’s perspective. How many web developer websites or bios have you seen where the developer lists about 10 different things they’re good at.

Then, has a sales page dedicated to selling you on why they’re so great at each one of those things.

They’re selling themselves as someone who can “do it all”.

Guess what the client then wants?

Someone (YOU) to do it ALL.

Don’t do that.

Specialize. Make more money. Work less hours. Deal with less annoying problems.

2. Manage Expectations

I often say that I spend more time telling clients what I won’t do that what I will do. You HAVE to. It has to be clear from the start what your boundaries are.

When it’s not, clients will always try to push for one more thing. That’s why #1 above is so important. It sets the context.

Click here for the web developer resources I use to learn fast and run my business.

Then, you specifically state the things you won’t do. You likely already know all the common things clients try to get you to do that you don’t want to do.

TELL them that from the start. Make it clear.

Then, even if they do ask… they’ll already know the answer and the “NO” is easy for you.

3. Be Transparent

I’d imagine you already have a handful of horror stories related to scope creep. That’s WHY you’re even interested in knowing how to stop it.

Don’t be afraid to tell those stories and open up about WHY you’re so concerned about it.

The last thing clients want is for their project to be ruined. And, you KNOW it very well could end up that way if you let the scope get out of control.

So, tell them about your experience and open up about your concerns. The more transparent you are, the more they’ll understand you’re reasoning.

Your Challenge

So, good information on eradicating scope creep… but let’s put some teeth to it. Here’s my challenge to you to put this baby into action:

  1. List 5 ways clients try to increase the scope on you.
  2. List 5 experiences where scope creep killed a project.
  3. Write a script for each scenario outlining your “no” answer and the story that goes with it.

When you do this don’t get too caught up in the details of it. The point isn’t to have a copy/paste script. It’s to think it through so you have a framework for your answer.

Then you can adapt your answers to each client and scenario you encounter.

April 20, 2015

What Makes a Great Web Developer?

What makes a web developer great? I think most people think about this the wrong way and get too focused on technical skills. Here’s my reasoning:

What Most Web Developers Get Wrong

The standard advice is that a great web developer is defined by how technically skilled he is. Ask most seasoned developers this question and you’ll get responses like:

  • “Deep knowledge of HTML and CSS”
  • “Excellent debugger”
  • “Knows PHP like the back of his hand”

And, so on.

But, to me, those things aren’t what make a great web developer.

Certainly, your technical skill is important… but that is a pre-requisite. Technical skill isn’t what makes you great… it’s what makes you a developer.

What makes you great are your “soft skills”.

  • Are you focused?
  • Are you driven?
  • Are you detail-oriented?
  • Are you reliable?
  • Do you communicate well?
  • Are you easy to work with?
  • Do you learn new things quickly?

These are the questions whose answers define greatness.

Michael Jordan is known as one of, if not THE greatest, basketball players of all time. On the court, all of us marveled at his athleticism and his ability to deliver in crunch time.

But talk to his teammates or his coaches…

And, they’ll tell you it was Michael’s competitiveness and work ethic that made him special.

Teammates routinely talk of how fiercely competitive he was even in practice. That he was the first to arrive and last to leave.

How he would spend hours practicing at his house before going to the gym for his regular practices with the Bulls.

It wasn’t the mechanics of Michael’s jump shot or drive to the lane that made him great… it was the work ethic and competitiveness behind it…

  • That made the jump shot great…
  • That made the drive to the lane unstoppable…
  • That made him devastating in crunch time…

It’s the same with web developers. Your technical skill isn’t what makes you great. No. Your technical skill is a by-product of your greatness.

WHO you are is what matters.

So, how do you cultivate greatness in yourself?

Recognition is a start… but it also requires commitment.

  • Are you willing to spend hours obsessing over a line of code to make it perfect?
  • Are you willing to embrace the “buck stops here” responsibility your clients will expect from you?
  • Are you willing to learn whatever is necessary in order to deliver like you said you would?

From there, it’s focus.

  • Can you block out all the external distractions and get to work delivering quickly and “in flow”?
  • Can you temper the internal distractions that would stop you?
  • Do you know who you are and the art you want to give to others?

Finally, it’s work ethic.

  • Are you willing to push your limits?
  • Are you willing to be the first to arrive and the last to leave?
  • Are you willing to put in whatever hours are necessary in order to deliver?

Commitment, focus and work ethic.

Those are the things great developers… no… great PEOPLE are made of.

My challenge to you from all this is to take a moment and think about the commitment questions. Be honest with yourself and figure out if you’re really truly committed.

Because when you ARE committed at a deep level, finding the will power to be focused and work hard comes naturally.

April 17, 2015

How to Learn HTML, CSS and jQuery Fast

What’s the fastest way to learn HTML, CSS and jQuery? This video gives you some simple instructions for self-learning, in general… AND a step-by-step resource list for learning HTML, CSS and jQuery specifically:

Tips for Learning ANYTHING Faster

First, a few tips for self-learning, in general, to speed up the process:

1. Build REAL Things

If you just take courses or tutorials and don’t build anything with them, you’ll lose a lot of what you’re learning, you’ll have to go back and re-learn things and it’ll take you longer.

When you build real applications as you learn… the learning sticks, you remember more of it and learn faster.

Pick 5-10 “things” you can build as you learn and build them as you go through your training.

2. Take Courses

It seems to be a foregone conclusion in the development world that you have to learn everything on your own and you’re somehow less smart or less of a developer if you take courses.

Nothing could be more wrong.

Taking courses (even paid ones) is the smartest thing you could do because those instructors have taken the time to structure your learning for you so you don’t waste time wondering WHAT you should learn. Plus, they can teach you things you might never have thought of.

Don’t be afraid to take professional courses and spend money on them if you have to.

3. Find a Mentor

I was resistant as anyone to getting help from a mentor. I resisted it for years because I thought it would be an insult to my intelligence if I needed a mentor.

Wrong again.

I ended up in a situation where I was forced to have a mentor and it was the best thing that ever happened to me. I learned faster than I ever had with him because things that were so difficult and frustrating to me were simple and easy to him… and he could explain them to me in minutes.

Resources For Learning HTML, CSS and jQuery

April 16, 2015

STOP Pointing Out All Your Flaws!

If you’re selling yourself this way to potential clients or employers… THIS is why you’re having problems. Watch this clip, then check the full episode on YouTube.

STOP Pointing Out All Your Flaws

If you're selling yourself this way to potential clients or employers… THIS is why you're having problems. Watch this clip, then check out the whole episode in the comments. #freelance #webdesign #webdev

Posted by John Morris on Wednesday, April 15, 2015

April 15, 2015

What WordPress Theme Should Developers Use?

I used the wrong WordPress theme for about 3 years and it made my life miserable. Finally, I switched it up and have never looked back. Here’s what I learned. Watch this, then check the full episode on YouTube.

What WordPress Theme Should Developers Use?

I used the wrong WordPress theme for about 3 years and it made my life miserable. Finally, I switched it up and have never looked back. Here's what I learned. Watch this, then check the full episode in the comments. #wordpress

Posted by John Morris on Tuesday, April 14, 2015

April 14, 2015

What Elance and oDesk Won’t Tell You About Freelancing on Their Sites

Have you experienced this too? I know the company line, but this seems to be more of the reality they don’t want to talk about. Watch this video then check out the whole episode on YouTube.

What Elance and oDesk Won't Tell You About Freelancing on Thei…

Have you experienced this too? I know the company line, but this seems to be more of the reality they don't want to talk about. Link to the whole episode in the comments:

Posted by John Morris on Monday, April 13, 2015

April 14, 2015

Need help with MySQL?

I’ll keep this short this week because my wife is out of town again so it’s just me and this guy hanging out all weekend:

Plus I’m recording a bunch of new tutorials for you.

 Do you need a little help with MySQL?

If so, check out this new course I just uploaded. It won’t cost you anything and it covers all the key concepts:

  • Prepared statements
  • MySQLi
  • PDO
  • Data modeling
  • Object modeling
  • Creating a database class
  • ezSQL

And a few other things. I’ve received a lot of great feedback on it so far… so it’s worth checking out if you need a MySQL assist.

(more…)

April 11, 2015

Do You Have the Geek Gene?

Do you have the “geek gene”? Find out in this video, then check out the full episode for my step-by-step process for becoming a front-end web developer.

Do you have the geek gene?

Do you have the "geek gene"? Find out in this video, then check out the full episode for my step-by-step process for becoming a front-end web developer. I'll link it up in the comments.

Posted by John Morris on Friday, April 10, 2015

April 10, 2015

I’d never heard anyone talk like that before – This Week on JMO.com

The guy obviously knew what he was talking about… I’d just never heard anything like it before. And, as I listened I never would have imagined what he was saying would cause me to change everything I was doing.

But, before I get into the story here’s the tutorials I posted this week in case you missed any:

How to Build and Grow Your Web Presence:
https://www.youtube.com/watch?v=73OOPbTo_jY

5 Tips For Developing Better Work-Life Balance:
https://www.youtube.com/watch?v=TH9tyghhvq4

Watch This Whenever You Need Some Self Motivation and Self Confidence:
https://www.youtube.com/watch?v=EB_vYbeVOjA

5 Time Management Tips for Freelancers:
https://www.youtube.com/watch?v=TH9tyghhvq4

What Are the Biggest Obstacles for Freelancers to Get Clients:
https://www.youtube.com/watch?v=SFx83qZU1yo

Back to the story…

(more…)

April 4, 2015

The Truth About the Complete Web Developer Course 2.0 by Rob Percival

This is my review of Rob Percival’s Complete Web Developer Course 2.0 on Udemy. I’m writing this review because I had, for awhile, planned on creating a course like this myself but after going through Rob’s course, it felt redundant.

Here’s my review of the course:

Overview

The Complete Web Developer Course is meant as a one-stop shop to learn all the essential skills a web developer needs:

  • HTML
  • CSS
  • Javascript
  • jQuery
  • Bootstrap
  • WordPress
  • PHP
  • MySQL
  • APIs
  • Mobile Apps

A comprehensive list to say the least. With that massive list of topics, the course boasts 235 lessons and 28.5 hours of content. You also build 14 websites as a part of the course.

Teacher

The course is taught by Rob Percival. Rob has a degree in Mathematics from Cambridge University and spend the first part of his career as a math teacher.

After building websites in his spare time for friends and family, he realized he enjoyed web development and it was a lucrative career so he gave up teaching to become a web developer full-time.

Here’s what I like about Rob’s teaching style:

  • He’s well-spoken and clear in his communication
  • As a former teacher, he can communicate complex concepts in easy-to-understand terms
  • He’s very knowledgeable regarding web development
  • He’s active in the course chat and answers questions promptly
  • He’s to the point and doesn’t drone on and on

Here’s some things I wish were better:

  • I think he speaks a bit too closely to the microphone and there are some “pops” in the audio
  • You catch some of the background mouse clicks, etc.

The audio is crisp and clear and there’s no concern about hearing what he’s saying… but after 28.5 hours you start to notice the few minor audio hiccups.

Who Is the Course For?

I believe this course is a great fit for developers who fall into the following categories:

  • You’re brand new to web development and want the fastest learning path
  • You’ve learned a handful of languages but want to round out your skill set
  • You’re an intermediate developer and want to double-check all your learning to make sure you’re on track
  • You’re self-taught and looking for clear outline of what you need to learn
  • You’re just out of college and feel like you’re missing some of the in-demand skills

Who Is the Course NOT For?

I believe the course won’t be useful to developers in the following categories:

  • You’re an advanced developer looking for very advanced topics
  • You’re dabbling with code and not yet sure if web development is something you’re interested in
  • You prefer written tutorials over video tutorials

Pros and Cons of the Course

Here’s a list of the pros:

  • It really is complete covering all the essential topics
  • Rob is a talented teacher who explains things well
  • The course is laid out intelligently
  • The video quality is excellent
  • You build 14 real websites during the course
  • Rob is active in the chat and answers questions
  • It has a large student base (88,000+) so you have lots of other developers to learn with

Here’s a list of the cons:

  • The small audio issues I mentioned
  • I’d learn the topics in a bit different order than what they’re presented in

How Do You Get the Course?

The Complete Web Developer Course is available on Udemy for a fee of $200. The good news is that I’ve worked out a deal with Rob for my online audience and he’s agreed to offer you a 75% discount on the course.

If you purchase his course through my affiliate link, you’ll get the 75% discount:

Click here for the 75% discount

Full disclosure: I will earn a small commission if you purchase the course through that link. I wouldn’t recommend the course if I didn’t believe it would truly help you. The small commission is just a side benefit.

Special Bonus

I believe strongly enough that this course will really help most up and coming web developers that I wanted to eliminate as many of the cons as I could. While I can’t do anything about the audio, I was able to convince Rob to give the 75% discount I mentioned above.

On top of that, if you purchase the course through my affiliate link I will send you my revised Web Developer Learning Guide where I outline the order in which I would learn the various skills necessary for a web developer.

This fixes the con I mentioned about how I’d learn the topics in a bit different order. To get the bonus, follow these steps:

1. Purchase the course through my affiliate link 75% off

2. Forward your Udemy invoice to cwdc at johnmorrisonline dot com and I’ll email you the Web Developer Learning Guide PDF.

icon

March 31, 2015