My friend Johnny is a very talented web designer. He’s recently released a portfolio WordPress theme at ThemeForest which is very classy and cutting-edge in styles.

SimpleKey

Be sure to also check out some of his other work at the ThemeForest page and his design studio ThemeVan.

{ Comments on this entry are closed }

I’m just so happy

by Yang Yang on January 2, 2013

I don’t know why but I’m just so happy. I just returned from a hiking in the Qin Mountains. It’s gently snowing while we climb one of the mountains to an altitude of about 1000 meters above sea level. It’s been terrific in the outdoors! We have a good company of many friends and strange but friendly people yet it’s so quite in the woods. The air is refreshing and the sunlight is winterly warm.

Wish everyone a happy new year! 🙂

{ Comments on this entry are closed }

It’s better to style the /wp-admin of WordPress from your theme because it’s portable and upgrade-proof. Keeping all customizations  in ONE place is always a good idea in web development.

How to style WordPress admin backend /wp-admin from your theme?

  1. Add this hook to the functions.php of your theme:
    function customAdmin() {
        ?><link rel="stylesheet" type="text/css" href="<?php bloginfo('stylesheet_directory'); ?>/wp-admin.css" /><?php
    }
    add_action('admin_head', 'customAdmin');

    Which effectively adds a stylesheet to the header of every /wp-admin page.

  2. Create a text file named wp-admin.css in your theme directory.
  3. Write the customization styles in wp-admin.css.

That’s it. Now you can freely customize the look and appearance of the WordPress admin backend from within wp-admin.css in your theme directory.

{ Comments on this entry are closed }

Some of my sites such as ConvertHub has grown out of the 512MB box I have had for over 2 years at Linode. It’s been great but as I’m fed up with managing the server myself (I’ll come to that later), I went ahead looking for a solid VPS plan with WHM / cPanel that’s managed for me. After searching for a few weeks, I finally landed my deal with A Small Orange.

See their cloud VPS planner at here: http://asmallorange.com/hosting/cloud/

A Small Orange Double RAM Cloud VPS Sale

What I did was:

  1. Select 1 Core + 1024MB RAM + 15GB Drive (It’s SSD!) + 500GB Bandwidth for $30 / month.
  2. Opt to pay annually so I can get 2 months free. Not that you will get 2 months free, but you will be paying $25 / month instead of $30 / month if you pay annually, working out to be $60 discount over a year from $360 / year to just $300 / year.
  3. Click and use the 15% coupon code:
    ASO15PERCENTOFF
    Click To Open/Copy
    to claim an additional 15% discount off the annual price from $300 to just $255.

That’s it. You get all these awesome stuff for just $255 / year, that’s just $21.25 / month:

  1. 1 Core – Intel(R) Xeon(R) CPU E5-2640 0 @ 2.50GHz
  2. 1024MB RAM
  3. 15GB SSD (Solid-State Drive)
  4. 500GB monthly transfer
  5. WHM / cPanel
  6. 2 Dedicated IPs that are far from each other – NOT in the same C-class! This is a huge benefit for SEO reasons. Another proof that A Small Orange thinks in the customers’ shoes.
  7. Fully managed
  8. Almost instant response to support tickets – I have only been with them for a few days and the support response is well within 30 minutes each time I submit a ticket.
  9. It’s A Small Orange, an established business and brand since 2003. Just search for their reviews.

I challenge you to find a better VPS deal than this cause’ it’s mission impossible. The only downside is that the disk storage will have only about 8GB available for your websites / applications after the system takes 7GB. However, I doubt your websites would need that much unless they have millions of image files or tens of millions of records in the database.

{ Comments on this entry are closed }

Make WordPress Hooked Function to Run Only Once

by Yang Yang on December 12, 2012

Consider this hook to add something before your WordPress blog’s sidebar:

function before_siderbar() {
?>
<!-- Something goes here, such as an AdSense links unit -->
<?php
}
add_action( 'get_sidebar', 'before_siderbar' );

It’s usual to add an AdSense links unit there but the problem with some themes is that they run get_sidebar more than once, such as on the sidebar AND in the footer. Consequently, you would end up with multiple AdSense links unit here and there, whereas you only wanted it on the sidebar once.

This could create a TOS problem towards AdSense because unconsciously, you would very probably end up adding more than 3 links unit per page.

To prevent this and only make the hooked WordPress function to run once (even it is called multiple times), use the PHP static variable in functions.

function before_siderbar() {
	static $called = false;
	if (isset($called) && $called) {
		return false;
	}
?>
<!-- Something goes here, such as an AdSense links unit -->
<?php
	$called = true;
}
add_action( 'get_sidebar', 'before_siderbar' );

In the above snippet, the variable $called is kept alive across multiple calls to the before_siderbar() function. After the first successful run of the function, $called would have a value of true and it’s kept so inside the function every time it’s called afterwards. In the 2nd and every call afterwards, $called will always be true and the function returns before outputting the AdSense code.

There you go. Now no matter how many times the before_sidebar() is called, only the first run would output the stuff you put in it.

{ Comments on this entry are closed }

PHP mail() is a great function to easily send emails from your website server. If you have ever used it before in action, or are currently using mail() to send out emails from your website or application, chances are you would find Gmail to be very persistent in attaching a ‘via’ field to the from address of your messages to the recipient. If you are on a shared host or have multiple websites on a VPS, the ‘via’ field would be the domain of a whole different website from that of the sending domain, which makes you very uncomfortable.

So how to make the ‘via’ field disappear in Gmail messages sent from your PHP mail() function? How to make the ‘mailed-by‘ field and the ‘signed-by‘ field to be the email-sending domain rather than the server hostname?

How to make Gmail trust your messages sent from the mail() function?

Get rid of Gmail ‘via’ field for PHP mail() messages and make your domain show up in ‘mailed-by’ and ‘signed-by’

Here are what you need to do to make Gmail completely trusts your domain and your PHP mail() messages sent from it.

1. SPF and DKIM

Firstly, you would need to set an SPF record for the domain you are sending emails from and enable DKIM as well. These are primarily for identifying your messages against spam.

2. "From: anything@yourdomain.com"

Secondly, make sure you are setting the “From: ” header to be an email address on the domain you are sending messages from. Don’t pretend to be someone else. Use “From: someone@abc.com” if you are sending the messages from abc.com, rather than anything else, such as blah@def.com, or yours@gmail.com, or whatever. If you want the recipient to reply to your Gmail email instead of your domain email, use the “Reply-To: ” header. “From: ” must always be the domain email that you are sending the email from.

3. "Return-Path: return@yourdomain.com"

Thirdly and most importantly, set the “Return-Path: ” header to be the same domain as that of the “From: ” header. Use the 5th parameter of the mail() function for this:

mail('recipient@example.com', 'Subject', "Message Body", $headers, '-freturn@yourdomain.com')

So the Return-Path of this message would be “return@yourdomain.com” (the email address immediately following the -f switch). The $headers parameter should contain all the necessary message headers. Make sure “From: ” is something@yourdomain.com.

Now Gmail trusts all emails from yourdomain.com

After these steps and measures, Gmail should now completely trust your messages from yourdomain.com. The ‘via‘ field of your messages should be gone and the ‘mailed-by‘ field as well as the ‘signed-by‘ field should be correctly showing up as yourdomain.com.

Uploaded below is the screenshot of a message sent to my Gmail email from one of my websites (*ses.com) using the mail() function:

make Gmail trust your email

Both ‘mailed-by‘ and ‘signed-by‘ fields are correctly populated with the sending domain even though it is not the primary site nor hostname of the server that sends the email. The ‘via‘ field is also gone.

This site doesn’t have any SSL certificates installed.

Gmail is by far the best spam catcher of all email services so if they trust you, your emails sent by PHP mail() from yourdomain.com should look good in all other email inboxes. Our forum has also got a thread to cover this.

Thanks to Michael Gorven and Laura for the help.

{ Comments on this entry are closed }

It became a total mess when I selected the entire root directory of my project and accidentally clicked Source > Format in Zend Eclipse PDT. All the files were instantly re-formatted and saved in a manner I wasn’t comfortable with and there didn’t seem any easy way to undo these changes that had been applied across nearly a hundred files in different folders.

They definitely should have prompted up a dialog box asking the developer’s confirmation. They probably will in future but for now, I need to do something to prevent this from happening again.

Disable Source > Format

First we will disable / hide this menu item or we will probably accidentally click on it again. Without any prompt nor confirmation, PDT simply goes on formatting the selected items silently. When you are in a single file that would be fine cause’ you just use Ctrl + Z to undo the change, however if you are selecting an entire directory or the entire project, this command would go ahead and format ALL the files under it and automatically SAVE THEM all onto the hard drive. The next thing you find yourself doing is opening and reverting each and every one of the files one by one.

Enough talk. To disable this menu item:

Window > Customize Perspective > Menu Visibility > “Source” > “Format” (disable this) > OK

Disable Ctrl + Shift + F

We should also disable this short cut keys combination which can also be inadvertently treaded on. Go to:

Window > Preferences > General > Keys > Select all “Format” entries and click “Unbind Command”

Done. Now the only way to format a page or a selected portion or a resource / item in PHP Explorer is to right click on the target and select Source > Format.

{ Comments on this entry are closed }

When you copy and paste code into Zend Eclipse PDT they will probably be automatically indented and not in the original manner. It may be annoying sometimes. To disable this behavior:

Window > Preferences > PHP > Editor > Typing > When pasting “Adjust indentation”

Just disable the option.

{ Comments on this entry are closed }

The common practice of rounding, namely the round() function in PHP, is to round to the nearest decimal point, that is, 1.0, 2.0, 3.0, etc. or, 10, 20, 30, etc. For example,

echo round(4.25, 0);		// 4
echo round(3.1415926, 2);	// 3.14
echo round(299792, -3);		// 300000

When I’m trying to aggregate all the customer ratings for a specific provider in one of my web hosting reviews community, I want to round the average rating to the nearest 0.5 (half the decimal) so that a half star would be correctly displayed.

This is more of a mathematical problem than a PHP one. After some thinking and testing, I came up with a slightly more sophisticated solution than but the round() function:

echo round(1.7 * 2) / 2;		// 1.5
echo round(2.74 * 2) / 2;		// 2.5
echo round(2.75 * 2) / 2;		// 3.0
echo round(3.1 * 2) / 2;		// 3.0

Just as easy as that.

{ Comments on this entry are closed }

<Files *.php>
    Order Deny,Allow
    Deny from all
    #Allow from 127.0.0.1
</Files>

<Files index.php>
    Order Allow,Deny
    Allow from all
</Files>

The 2 <Files> directives must be in the exact same order as above.

{ Comments on this entry are closed }