Installing Apache on Snow Leopard (OS X 10.6)

The Apache web server comes with the OS X is a bit out dated. So I decided to install a new one. After I tried installing it using mac port, it kept giving error.

Finally, I built the Apache from source, and it worked!

Grep Apache from here.

Download the file, where the link should look something like:

Unix Source: httpd-2.2.14.tar.gz

Run the following command in terminal:

tar -zxvf httpd-2.2.14.tar.gz

cd httpd-2.2.14

./configure

make

sudo make install

That’s it! Now, let’s test the webserver.

First, let’s disable the Apache that shipped with the OS X (Not the one you just install!). You can simply do it by going to:

System Preferences -> Sharing -> Web Sharing

Go back to Terminal. Make sure the default web server is not running:

sudo apachectl stop

Now, let’s verify the installations:

/usr/local/apache2/bin/apachectl -v

You should see something like this:

Server version: Apache/2.2.14 (Unix)
Server built:   Oct 24 2009 20:53:45

Now, let’s start the web server:

sudo /usr/local/apache2/bin/apachectl start

Open your browsers and access to http://localhost/.
You should see something like:

It works!

Have fun!

–Derrick

Our sponsors:

IE is “fxxking”, but it is not an excuse to leave bug in the codes

Today, my co-worker found that the web-application he developed worked only in Firefox, and it didn’t work in Internet Explorer(IE). He immediately asked me if we should ignore the IE users or not.

I know that he was working on JQuery(Javascript). It is not surprised that IE does not support the standard JQuery. However, it doesn’t mean that we can simply remove our support to IE users. In fact, IE still have more than 55% of market share today, while Firefox have around 30% only.(See here for more information) It’s too early(and not responsible) to ignore such a large user group.

So, after he complained about how fxxking the IE was for an hour, I tried to find out that the problem. I found that the problem came from his code rather than from IE. He had an extra tag in his code. Firefox was so smart to catch the error and ignore it. That’s why it only worked in Firefox, but not in IE.

So, here are what I’ve learned today:

  • The error catching function introduced in Firefox is so good. But at the same time, it makes some developers lazier by not verifying the quality of their works. They will think it is your problem if you are using IE.
  • IE sucks, but it is not an excuse of leaving the IE users behind.
  • Complaining has nothing to do to improve the problem. Talk is cheap, do it.

Next time before you complain to your manager about how fxxking the IE is, think twice.

Our sponsors:

It’s a pain to use Godaddy.com’s coupon!

Godaddy.com was running a sale today: $1.99 a domain name (Coupon Code: GEO199, no other purchase is necessary) for the first year. This is a very good deal so I decide to grab four domains from them. The pain began:

1. I couldn’t use the coupon code for four domains in the same order…

» Fine. I split the order into four. I didn’t have any problem on my first order.

2. I couldn’t use the coupon code on the same user account…

» Fine. I registered a new user account and tried again.

3. I couldn’t use the coupon code on the same browser…

» Fine. I cleaned up the cache and tried again.

4. I couldn’t use the coupon code from the same IP…

» Fine. I tried using a different IP…

5. I couldn’t use the coupon code with the same credit card…

» Fine. I tried using a different credit card…

6. Finally, I got four domains for $7.96. It’s a good deal but it already spent me half an hour.

Our sponsors:

Can’t send mail from Fedora Linux … Solved!

I was having problem today to send out an email from my Fedora 11 Linux box. By default, the mail server software, Sendmail, comes with the standard installation and no configuration is required. I didn’t understand why the Sendmail didn’t work.

After a very detail investigation, I finally found out why. Here are the steps I went through to solve the problem.

1. Make sure the Sendmail is running.

netstats -na | grep LISTEN

You should see something is running on port 25.

2. Make sure the stupid SELinux Firewall is disabled.

3. Make sure the Linux Firewall allows port 25.

4. Try to connect to the port 25.

telnet localhost 25

If you have trouble to connect to the port, that means something is not work.

5. Make sure you are not blocking port 25 at the system level:
In /etc/hosts.allow

sendmail: localhost: allow

That should work!

Our sponsors:

The Flying Saucer Balloon at Colorado

Why no one thought about taking a picture of the flying balloon using infra-red camera? The Raytheon one should do the work.

Click here to read the ridiculous story.

Our sponsors:

Area-Proportional Venn Diagram Tools

I was looking for tools to draw area-proportional Venn Diagram, but most of them either do not work in some cases or very difficult to use. Finally, I found a very very good one!

A very very nice tool to draw Area-Proportional Venn Diagram:
Area-Proportional Venn Diagram

http://bioinforx.com/free/bxarrays/venndiagram.php

I can also edit the Venn Diagram including labels, size and positions:
VennDiagram-02

So far this is the best I found on the web.

Our sponsors:

UPS Mail Innovations – Next generation logistics operated by elephants or snails.

Why it took 2 days(48 hours) to transport a package from point A to point B by UPS Mail Innovations, which is only a 30 minutes drive, or a 6 hours walk?

Apparently, this next generation and innovative logistics service is either operated by elephants or snails.

UPS Mail Innovations - Next generation logistics operated by elephants or snails.

Our sponsors:

Interviewing a software engineer / developer / programmer

I am going to have a face-to-face interview with a candidate of a PHP programmer position this afternoon. I was told to prepare some technical questions for the interview.

If a candidate earns an face-to-face interview opportunity, that means his resume should have a very good match to the position requirement. However, people can put anything on their resumes, there is no way to tell whether the information on the resume is true or not (and referencees guarantee will give you good feedback on the candidates). That’s why a face-to-face interview is really important.

I will have around 30 minutes to 1 hour to interview a candidate, how can I get the most information from him to help myself making this decision?

After googling on the web, I found tons of information about how to interviewing a programmer, but most of them are related to really technical questions, such as “How do you solve this math puzzle?”, or “What’s the meaning of double-dollar variable in PHP?” etc. I think these questions are not efficient and effective enough to judge the skill of the candidates. Personally, I don’t like these types of questions at all because I think it does not help to judge a realistic performance of a person. I prefer some more realistic questions.

So, I end up designing a test by myself. It is nothing more than a simple html form (e.g., a form to update users’ contact information). The candidate will be asked to implement the functions to update the records. I think this is pretty closed to what I do in my work, i.e., Create, View, Update and Delete record.

Well, this question sounds pretty simple, and I think there are plenty of hidden traps. Here are what I expect in the codes:

  • Core function, i.e., Updating the record – 40%
  • Validating the inputs(e.g., don’t store a negative number into age column, make sure the ID exists etc) – 10%
  • Performance (e.g., Update the record only if the records have been changed by the users.) – 10%
  • Handling simultaneous update (e.g., lock the record before update) – 10%
  • Security (e.g., storing the configuration out of the web server scope, prevent online attack etc) – 10%
  • Development time(e.g., spending 2 hours ends up with very few features is not acceptable) – 10%
  • Think outside the box(e.g., Suggesting to use Ruby on Rails to shorten the development time, using jQuery for client-side validations etc.) – 10%

I believe that if a person can do great in a simple task, he will do great in a complex task. Unfortunately, it is not easy to look for a good programmer.

Updates (August 31, 2009):

The answers I received from the candidates are pretty interesting and filled with tons of surprise. Some of the answers go beyond my imaginations. Here are few examples:

  • One candidate sent me a package with all of the source codes. Unfortunately, none of the codes works. Apparently, he forgot the golden rule of software development: A software must work.
  • Another candidate sent me a package with tons of files. After I read the codes, I found that the codes were copied from other projects with very minor modifications. This kind of candidates should be avoided because cleaning up the code is a basic responsibility of a programmer.
  • A candidate has spent a lot of efforts on defining the variables (More than 20 variables were defined in the configuration sections), but he only put one line of comment (and no code implementations) inside the validation function, i.e.,
    //Validation goes here...

    He would impress me if he included at least one validation example.

  • One of the submitted answers is even more interesting (and ridiculous). It was created via some PHP-MySQL wizard websites. Although the result works fine (of course!), he does not receive any credit because his programming skills could not be proven.

So far, the best answer scores 60%. I don’t think this is an exciting result. If you found this useful, please let me know, thanks!

–Derrick

Our sponsors:

Does the most popular imply the best?

Today, I had a discussion with my co-worker on the best languages for web applications. While I argued that Perl, and Ruby performs better than PHP, my co-worker had an opposite opinion. He believed that PHP is the best language overall because it is widely used. It brings me to think of a question, does the most popular imply the best?

Let’s answer this question by examples:

Category Most Popular The Best Why The Best?
OS (Desktop) Windows OS X User friendly, secure, stability, and performance.
OS (Server) Linux, Windows Server FreeBSD Fast, stable, secure, simple design, and centralize management.
Browsers Internet Explorer, Firefox Safari Fast, secure, stable
Programming languages (Desktop/GUI) C#, Java C, C++ Fast, secure
Programming languages (Web/Server) PHP, ASP Ruby, Python, Perl Fast, fewer lines of code.
Database MySQL, Oracle Berkeley DB, Tokyo Cabinet Fast I/O, simple design, smaller size of the database file.
Software company to work for Microsoft Start-up Rewards, opportunity to grow

I think there are several reasons why the most popular things are not the best.

1. Most popular thing is always backed by the best marketing strategies. Marketing strategies is simply a way to let people know about the product and convince them to use it. It has nothing to do with the quality of the product at all.

Example: The ads of Internet Explorer 8 look very attractive. Is it the most secure browser ever?

2. Most people are followers. They are not good in selecting good products from bad products(i.e., filtering the noise). They believe that the choice form most people (most popular) should be the best one. This is similar to election. The choice of most people is more likely to be better.

Example: Is MySQL really the best database?

3. Different people have different preferences. So a popular product must have the general taste. For example, an extremely hot and spicy food may be better to the body, but it is not as popular as a mild one, because the number of people that can take extremely hot and spicy food is smaller.

Example: Linux is very easy to configure comparing to FreeBSD (GUI vs command line) from the end-user perspective, but it is less powerful and stable overall.

Conclusions:

Think twice before your move.

Our sponsors:

Example PHP code to convert a number to an Excel column letter

I was looking for a good way to convert a number to the Excel column letter, for example:

1 -> A
26 -> Z
27 -> AA
28 -> AB
800 -> ADT

etc.

After searching on Google, I could not find any algorithm I want. (The closest one can handle up to two letters, i.e., ZZ. It will crash if the number is too large.). So I ended up creating my own.

Basically, you can think of this problem as a 26 based number conversion. Here is the php version. It should be pretty simple to convert it to a different language. Let me know if you have any problem.

function columnLetter($c){

    $c = intval($c);
    if ($c < = 0) return '';

    $letter = '';
             
    while($c != 0){
       $p = ($c - 1) % 26;
       $c = intval(($c - $p) / 26);
       $letter = chr(65 + $p) . $letter;
    }
    
    return $letter;
        
}


Usage:
columnLetter(1303618093);    //DERRICK

Note that if you prefer lower cases rather than upper cases, you can simply replace 65 by 96 in the code.

Enjoy~!

–Derrick

Our sponsors: