Password Protect (Basic Authentication) with Nginx

This code allows me to password protect a site and only allow it to be accessed either by supplying the correct password defined in your.pwd OR if it is called by PayPal. that’s the code I had to use for on the staging environment on one of my products (MiniAds).

location / {
satisfy any;
# PayPal servers ; 2014-10-21
deny  all;
auth_basic  "Restricted";
auth_basic_user_file  /var/www/pwd/your.pwd;
index  index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args;

nginx -t

Rreload configuration
nginx -s reload



How to Delete a WordPress User Using PHP

From time to time when you’re developing plugins/themes you may need to delete some test user accounts. Here is a way to do it.

You can either create an MU Plugin (by creating a file in mu-plugins/some-code.php) or adding it in functions.php in your current (child) theme.

Then go to the admin area. I was receiving errors (function doesn’t exist) when I wasn’t in the admin area.

You have to be careful with this code.

add_action('admin_init', 'abc_quick_del', 10);
// !!!
function abc_quick_del() {
$user = get_user_by( 'login', 'some_username');
if (!empty($user->ID)) {
echo "Deleting user ID: " . $user->ID . "<br/>\n";
wp_delete_user( $user->ID );
} else {
echo "Account not found.";



How to Properly Redirect to a New Site using .htaccess

From time to we need to redirect an old site to redirect to a new site.

The good thing about the redirect snippet below is that that it will also append the parameters sent to the old site to the new one.
That is very important especially if you’re running ads or have links that have tracking parameters e.g.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^$
RewriteRule ^/?(.+)$1 [R=301,QSA,L]


How to Configure php Mail’s Function on Windows with Mandrill

Normally, php mail’s function doesn’t *work* on Windows because there is no sendmail server running by default.

Some people got it working using Fake Sendmail and Stunnel  & an external service such as Gmail/Yahoo, and others using msmtp.

I didn’t want my gmail or other credentials saved on the computer or a too complicated solution that may be hard to troubleshoot so I decided to use the Mandrill service to send emails from my development machine.

So the steps are the following

  1. Download Fake Sendmail
  2. Extract the archive contents in c:\usr\lib
    Important Note: if you’re running Windows 7 or 8 (not sure for Vista) you need to set XP Compatibility Mode. To do that right click on Sendmail.exe and click on properties and then enable XP compatibility mode (shown below).
  3. Edit php.ini (shown below)
  4. Signup for Mandril
  5. Create an API key (which will be your password) by going to Settings
  6. Configure Fake Sendmail (shown below)
  7. Restart Web Server or restart computer if that’s easier.

Enable XP Compatibility Mode on Fake Sendmail

Enable XP Compatibility Mode on Fake Sendmail

php.ini configuration (partial)

Fake Sendmail Configuration (Windows)
Make sure you edit the following.

  • default_domain=YOUR_DOMAIN_GOES_HERE

Note: if you’re configuring your own copy of the config file make sure you don’t use encryption i.e. smtp_ssl=none (as shown in the snippet). I’ve had no problems using the command line scripts, however, the php script would hang if Fake Sendmail used encryption.




How to Make an Ajax Request When Twitter Bootstrap Alert is Dismissed

How to Make an Ajax Request when Twitter Bootstrap Alert is Dismissed

Twitter Bootstrap is an awesome CSS framework which speeds the UI development a lot.

I worked on one of my products ( this weekend. I wanted to notify the user that their account has been upgraded. I wanted the message to be shown in the control panel. That’s in addition to the email confirmation.

I save the user specific message in a folder and if that file exist it is shown to the user.
The message will expire within 24hours but I wanted if the user dismissed the message so it is deleted.
That way the user won’t be bother with the message again.

The project uses Twitter Bootstrap 3.x so I used the dismissible alert which when clicked makes an ajax request to remove the message.

Here is a link to a working demo:





How to Map an Associative Array to HTML Element (Data) Attributes?

If you’re a developer (you are reading this so you are) you’ve used jQuery to access different elements from a page.

It is super convenient to set data attributes to given HTML elements.
For example:

You can use jQuery to loop through all of the containers with ‘app_container’ class but how are you going to
tell which one you’re currently processing? yes, you can use element’s ID for that but if we want to put more data into that element we can achieve id using data attributes which can be accessed like so:

var id = $(‘app_container’).prop(‘id’);
var type = $(‘app_container’).data(‘type’);

Here is a PHP class that allows you to create HTML attributes from a php array.
If you pass the second parameter the key will be prefixed with ‘data-‘ prefix so they can be access via jQuery later.

Here is a link to the gist:

This version of Evernote Web Clipper is no longer compatible with Evernote Service

Today I opened my chrome browser and was greeted by an annoying alert box from Evernote’s Web Clipper Google Chrome Extension.

this version of evernote web clipper is no longer compatible with evernote service

I’ve tried clicking OK and also ticking the “Prevent this page from creating additional dialogs” checkbox but still no success.

I had to simultaneously be pressing ESC key and right clicking on the Web Cliper’s icon.

I created a video how to remove Evernote’s Web Clipper from Chrome while seeing error: “This version of Evernote Web Clipper is no longer compatible with Evernote Service


How to Change Your Email and Password

In may be hard to find on the link to edit your email and password.
Normally, you’d expect the edit link on to do that but you have to go to a different location.

  1. Make sure you are logged in.
  2. Then visit link:

Video tutorial


7 Things You Should Always do When Starting a New Project

Starting on a new project is an exciting thing.  Since, I am in the web/mobile development field this article is more applicable to those in the IT industry.

I’ve compiled a list of good practices that are very important. I’ve done some of them and forgotten about others and the results were less than optimal.

These the things that I should always be part of every freelancer’s (or business) processes.

Here are 7 Things You Should Always do When Starting a New Project:

  • Request an initial deposit before doing any kind of work
  • Start with a clearly defined project scope
  • Sign a contract & tell the client what to expect
  • Block time to work on the project at least 3-5 hours each day
  • Provide weekly update
  • Setup a test staging / site (on your own server)
  • Track your time


Request an initial deposit before doing any kind of work

This one is my favourite ( Canadian spelling, not a typo ;) ). By requesting an initial deposit you save yourself a lot of trouble. This has so many benefits. This is a great test to see if the client is ready to buy/hire you or if they are just shopping around.
When a client pays you the inital deposit you know that that person has some business background and/or will respect your processes.
You want to work with people who respect you and your processes.
Let your competitors have the bad clients.

Start with a clearly defined project scope

This one is very very very important. Ask as many details as possible when you interview client for the project details. Then create a nice itemized list of deliverable so both parties are 100% clear on what to expect at the end of the project.

Related: Checkout this WordCamp presentation by Lisa Sabin-Wilson on Scoping Projects To Reduce Stress, Headaches and Angry Mobs

Sign a contract & tell the client what to expect

Having all the expectations in writing is a great way to have both parties on the same page.
This will reduce the chance of having either party having some assumptions.
Also that way you protect yourself from Scope Creep which almost always shows its ugly head.

Block time to work on the project at least 3-5 hours each day

I noticed that when working on project I would stop and 2-3 days later resume working on.
Sometimes I would look at it in a week.
I was telling myself that I try to avoid being bored e.g. when I solve the hardest piece of the project in most of the time I’d loose some interest.
This turned out to be a very unproductive way to approach projects.
After some time I end up with partially done projects and if you’re goal oriented that consumes energy because those tasks are not finished.
David Allen (@gtdguy) calls these tasks open loops.

So go goal is to aim for any daily progress that way the task will stay fresh in your mind and you don’t have to put so much effort to try to remember where you left off.

Provide weekly update

Clients don’t need to wonder where you at with the project. You have to let them know.
I like to pick Thursdays/Fridays for a status updates because sometimes always comes up in the middle of the week. If you can do it twice a week that’s even better.

Nowadays, anybody can respond to emails quickly because we’re so connected. It is insulting to ignore a client for more than 24 hours. If you are super busy let them know that you will get back to them but don’t ignore them. Later or the next day answer their questions.

If it’s a complicated status update consider using a scree recording software such as Camtasia to walk the client through the update.

This is very important especially for programmers because the majority of the work is done under the surface. The client may see one button but he/she must know exactly how much work is happening behind that button.

Setup a test staging / site (on your own server)

Some clients will request that you work from their server so they can see progress.
Don’t do it.
Use your own servers. Hosting is so affordable nowadays (Linode, DigitalOcean, WP Engine), 1and1 – contact me for a quote if you need help with this).

The reason is that you know your hosting’s specs and have more control over.
That way you can have new software installed a lot quicker than having your client forward your requests to their hosting provider.

If you have to totally put your source code on client’s server consider encrypting/obfuscating it (e.g. using ioncube (they have an online version as well) or a different kind of obfuscator).
I admin that the obfuscation approach sounds very untrusting but I have about 10,000 ($) reasons to do it.

Note: if you need to setup a free test/staging WordPress site check (my product). It allows you to setup a test site in less than 2 seconds. It’s free to install plugins and themes from

Track your time

I have resisted this for a long time. Now, I log my gym time, email replies, calls, facebook, linkedin etc. I use toggl to track my time.
Almost everything you track & measure can be improved.
I primarily do it for myself so I can compare how long a task took vs the estimate.
This also helps me stay focused on one task otherwise it takes me some effort to go and pause the timer and enter a new task. I am able to catch myself within 0.5-2 minutes when I deviating from a given task.
This also helps when you estimate X number of hours and then the client requests more work even though sometimes the you’re over the estimated hours.
This also helps you track your actual hourly rate.
You may charge $X but when factor in little questions, meetings, research it adds up.

In conclusion nothing is perfect and sometimes we will forget one or more of these ideas.
I recommend after each project that you take some time to evaluate your decisions to see what you did right and what you should do differently in the future.

Did I miss anything? Please, share your ideas!