Never Fly American Airlines… if you can help it

It is unfair to judge a company completely on a sole experience, great or sour.  However, I do believe that a bad experience can be judged in it’s own class, within bad experiences asking one simple question: how bad does it get? I had a terrible experience with American Airlines and many decent experiences. Unfortunately, the bad gets very bad and the decent isn’t enough to rave about. Here is my story of that bad experience:

Friday, June 18th, 2010 at 7 AM JST

The beginning of my journey starts at Itami Airport in Osaka, Japan. My flight was scheduled to depart at 8:25 am. I arrived in line around 7 but had to wait in the check-in line until about 8:10 ish as there were many people scheduled to take a connecting flight from Tokyo to abroad. When I finally got through check-in, I had to rush to my flight and wait for the JAL agent that checked me in to provide me an excess baggage receipt. They held the plane for me thankfully.

Friday, June 18th, 2010 at ~9:40 AM JST (Total Duration: 2hr 40min)

The Osaka to Tokyo flight went fairly unhitched. It left relatively on-time and arrived at around the time they said (this is what most people expect from airlines and is not true for my experience with AA). At this point I went through customs and told them I might come back to Japan so I held onto my residency card and filed a disembarkment card.

Friday, June 18th, 2010 at ~11:40 AM JST (Total Duration: 4hr 40 min)

The flight from Tokyo to Chicago also went fairly well. It left on-time and arrived at around the correct time as well. I met some interesting people on the plane and had a very pleasant conversation on the voyage. I have truly come to appreciate JAL and their level of service.

Friday, June 18th, 2010 at approx 9:35 AM CST
Friday, June 18th, 2010 at approx 11:35 PM JST (Total Duration: 16hr 35 min)

We arrived in Chicago on-time as expected. My scheduled departure towards Ottawa was schedule for 2:55 PM CST so I had a 5 hour wait ahead of me. Luckily, the U.S. was playing Slovenia where I watched the controversial game at an airport bar and grill.

Ok so here is where it starts to turn sour…

Friday, June 18th, 2010 prior to our 2:30 PM CST departure…

So, I and the other passengers are waiting outside the gate and the weather seems to be as good as it needs to be to fly. At this point, the snobby and irritable flight agent said that the flight was being delayed by 30 minutes due to the flight attendant not being on the ground. My grievance with this is why couldn’t they find someone who was on ground and route him/her to our flight? Is she the only one who can do this job? In situations like this, they could reroute a flight attendant and get someone else on board. Flight attendants are used to travelling and routing another flight attendant would have been the best solution here. Regardless, it was still the air carrier’s responsibility to have a working flight and flight attendant by the time we were scheduled to leave and both of which they failed to uphold (more on the “working flight” part later).

So when the flight attendant finally arrived, she arrived with an attitude you could measure in her tone. The time was close to 4-4:30 pm so obviously my fellow riders were irritated at how much she delayed our flight (and how many “it will be just a moment”s our failed agent uttered). Shortly after boarding the flight, one of the riders needed to go to the washroom and quickly returned complaining of the filth. I remember him saying “turbulence could not have done that”. The flight attendant went inside to check and she was also appalled and phoned in maintenance to come clean it up. Thirty minutes later: the maintenance crew showed up and finally cleaned up it. At this point we were ready to fly.

So it was about 5 pm… We were scheduled to leave at 2:30 but the air carrier let us down by not providing us a suitable air craft (no one checks the aircraft before we board?) or a flight attendant (no provisions to re route someone if the delay is… 2 hours long?)? Anyways, I am sure I will never take American Airlines at this point and will gladly pay first class airfare to never experience this again but unfortunately, it gets much worse.

So, just before we are about to embark, someone behind me says “I hate to say it but take a look out the window. We aren’t going anywhere.” I took a peek and saw a fog engulf the airport. Rain came quickly after with an onslaught of lighting and thunder. Soon after, an agent came in from the still-open exit to the gate saying we needed to disembark the aircraft as all flights were grounded. After waiting inside the aircraft for about an hour, this was painful to say the least.

So around 6 pm the storm subsides and planes start getting cleared to fly again. I see several gates with tickers saying “Scheduled: 5:40 pm, Departs: 6:45 PM”. For some ridiculous reason, our flight said “Scheduled: 2:45 pm, Departs: 8:30 PM”. The reason our obnoxious and irritable flight agent provided us was “the flight is undergoing maintenance”. It is American Airlines responsibility to have a flight ready for us by the time we are schedule to fly. It is now past 6 pm and we don’t have a plane that can fly? What is this? Certainly not good service.

So when 8:30 comes by, our flight gets delayed to 9:10 PM. We were able to board starting around 8:50 PM, which was a pleasant surprise at this point. Everyone got seated, we had our snappy flight attendant and obnoxious agent see us through to the point of disembarkation. This time, thankfully, we actually disembarked!  I was expecting that they would pull another fast one on us but they didn’t.  At this point, after spending hours in travel from Japan, I took a nap expecting us to be in the air by the time I wake up. The pilot said there was about a 45 min wait of planes ready to take off so we would be on the runway for a bit.

I wake up around 10:20 PM and we are still on the ground. Again, I see more lightning and showers and no planes taking off. We are on the runway. The pilot says we are getting re-routed and that we don’t have enough fuel to follow the intended route. So, we have to go back to the airport. Sighs echo throughout the aircraft. We get close to the airport and we are not allowed to disembark until a crew can get out and usher out those large ports/gates. We wait for 30-45 minutes in the aircraft in front of the airport until the crews can come out. The obnoxious and even more irritated agent from before comes inside and says the flight is now cancelled and that we would have to make bookings with an agent and that the flight is cancelled… get this… wait for it… wait for it… “due to weather”. I quickly reworded that to “cancelled due to a lack of a flight attendant, lack of a flyable aircraft, lack of service, lack of an ability to check weather forecasts, and finally a lack of competence”. Obviously, our obnoxious agent wouldn’t admit to any of those ;) .

So, we were all expected to get out and make rebookings. No, they would not schedule this same plane full of ready-and-able passengers for the first takeoff in the morning. Instead, you have to go and schedule another flight with an agent. Unfortunately, there are only so many seats available and I was sitting near the front of the plane while my backpack was closer to the back (I gave up my seat so that a father, mother, and two children could sit together). Perhaps if I was with my backpack in my assigned seat, I could have got off the flight and get to an agent in time to schedule a flight the next morning. Too bad though, since by the time I got off the flight, the only flight from Chicago to Ottawa the next day as already full! Oh everyone, sing with me, “I hate American Airlines… I hate American Airlines…”.

So my choices were: take a flight on Sunday at ~8:30 AM CST (remember my first flight was on Thursday at 5 PM CST) or take a flight from Chicago to Toronto at ~11 AM and then find my own way of getting from Toronto to Ottawa. I would have liked this choice if it wasn’t 1 AM CST in the morning and I could call a few people in Toronto for a favour. But it was quite late and I was unable to make any international calls (I tried using the pay phones three times and all times they stole my money and said “we are unable to complete the call”. So, I decided on the flight on Sunday.

The agents were giving out hotel and taxi vouchers. But since the flight was cancelled due to weather and not any of the multitude of other acceptable answers, the vouchers were not 100%. The taxi voucher was 1-way (the hotel was 20 minutes away $30 USD one-way) and the hotel was $85 /day. Oh and even though I was staying for two nights in Chicago seemingly against my will, I would have to COME BACK to the airport to get another voucher as it was “the policy that we cannot print out vouchers for more than one night at a time”. This one agent had no soul.

The first night I was thinking of sleeping in the airport. They had cots in the K section of the airport. All the agents told you to go there and when you went to check and find there were no cots left, the agents had already left so you couldn’t ask them for a blanket and a pillow! Oh and all the blankets and pillows were gone too. I saw people sleeping on the cold floor, on hard benches, on 1 person-seats with arm rests on both sides (which looked terribly uncomfortable). Anyways, it was a dreadful sight and pathetic how little respect American Airlines has for it’s customers. I will tell this story to everyone with 100% confidence those who hear it will never fly them if given a choice.

After finding out that there were no cots left and no pillows or blankets, I went to the closest agent (and certainly not that obnoxious one from before). I asked him if there were any pillows or blankets left. Simple answer: no. I then asked him if he could give me a voucher for two-nights instead of one. He started typing something and printed something out. He gave it to me and said here are three new vouchers. 1 voucher was for 2 nights in a hotel all paid for. The other two vouchers were for taxi cab fare there and back. I had found the only reasonable and nice agent in the building. He made the other agent look even more obnoxious as his “policies” came under question. I left the secured section of the airport promptly and found even more people sleeping downstairs on the luggage tracks behind the check-in counters.

So it’s about 1:30 AM at this point… about 27 hours after starting my voyage in Japan.

After leaving the airport, I got in line for a cab. There were about 100 people in line waiting for cabs. I eventually got a cab that accepted the vouchers (very few of them did and I waited an additional 30 minutes after getting to the front of the line!) and made it the the hotel safely. Another interesting side point is that the bellstaff was all Japanese and they had a famous Japanese channel NHK on TV. I watched that for awhile to feel more relaxed.

Anyways, the hotel was awesome. If I had a change of clothes and some company, I would have enjoyed it more. There was a mall close by that I went to but was pretty much bored for my 1 unenjoyable day in Chicago. Guests are expected to pay for the Internet but when I called the front desk to ask about it they just gave me the password for free so that was nice too. I promptly emailed my family and skyped Chiaki letting them know where I was and what happened. Oh and another thing that annoyed me was the concierge at the hotel. He told me I should leave the hotel at 4:30 AM on Sunday to get to the airport for 6:30 AM for my flight at 8:30 AM. He said there was a lot of traffic at that time! I was like no f*ing way and asked the two hotel front-desks who told me my original estimate of 6:00 AM was fine. I hate bad advice and when people have such conviction in that advice.

When Sunday rolled around, the flight was delayed once again. This time, only by about 45 minutes to 9:15 AM. I was a little distraught and worried it would happen again as the city was suffering from isolated thunderstorms. However, I believe it was because of the strong winds that shut us down that Friday afternoon. Anyways, the Sunday flight took off like Friday had never happened and well like I said, I think it’s fair to judge a company by how bad the bad times get, and this was certainly one of the worst experiences of my life. Glad I can associate it with a brand and just tell others to never fly AA again. It’s like if you buy insurance for your car or home to protect you from certain terrible experiences. The only insurance in this case is to simply not fly them again.

Total Duration: 75 Hrs

Useful Word Building Tool: AyanRay.com Dictionary

Sometimes, when I can’t find something that fits my needs, I build tools for myself to use to fit those needs. Lately, I’ve been trying to build my usable, day-to-day vocabulary. I’ve been reading a lot lately and write down words that are beyond my comprehension. Words like circumspect, scant, and vehement are all words I don’t often use but can describe a particular circumstance quite accurately. And that, the ability to increase my/your vocabulary, is the goal of this tool.

Tool: Dictionary


What is it?

The AyanRay.com Dictionary is a free comprehensive dictionary tool used to help build your vocabulary on a regular and repetitive basis. It offers easy-to-use tools to add any term or word to your dictionary with the ability to have it email you these words regularly for you to review and study. Over a period of time, these words will become second nature to you and will hopefully help build your vocabulary.

Features:

  • Register/Delete your account
  • Add words to your dictionary using an HTML editor (TinyMCE for those interested)
  • Edit/Delete words from your dictionary
  • Alphabetically sorted dictionary page listing all words in your dictionary
  • Categories for organizing and grouping your words into mini-dictionaries (I.e. if you read a new book, you can create a category for words you learn from that book)
  • Category to Word Management – a word can have as many categories as you wish
  • Auto-parse Google “define: word” definitions for easy adding of words to the dictionary
  • Daily, Every other day, Weekly, and Monthly Emails with any number of words from your dictionary randomly emailed to you
  • Comprehensive settings page allowing you to customize email frequency, whether you receive emails at all, and more
  • It’s free :)
  • Coming soon: functionality making it easier to add words :p. I cannot auto-query Google or they will ban my server :( , sorry.

Anyways, this post was more for an introduction to the application. If you find it helpful, have any suggestions, or find any bugs/errors in the application, please let me know. If you need help with it, please post a comment here and I will do my best to answer your questions.

Link: http://www.ayanray.com/tools/dictionary

Custom PHP Install on Dreamhost Shared Hosting

I like to share what takes some agitation to figure out and doing a custom PHP install on Dreamhost was my most recent tiring endeavor. It’s hardly difficult, but only if you know what you are doing. There’s a plethora of resources out there and unfortunately they all seem outdated (and some are, because I tried them). The ones that are not promise ease and quickness but fail to deliver when it comes down to actually getting it to work or providing the pivotal last hoorah that will accomplish that task.

The PHP Custom Install Script that Works

Source: http://www.bernawebdesign.ch/byteblog/2010/02/17/custom-php-5-3-1-with-apc-and-xdebug-on-dreamhost-shared-hosting/

Note: This script works and the others didn’t for me. I post it up here again for my peers who use Dreamhost in case they need it too. If you require help, you are welcome to post here or post on the original author’s blog.

Note #2: In order for this script and the .htaccess file to work accordingly, you must use a UNIX friendly text editor and save it in UNIX text mode. I use a tool called metapad and you can get it free here: http://liquidninja.com/metapad/. Otherwise, you might get 500 Internal Server Errors and those can sometimes be solved simply with this advice.

#!/bin/sh

# update 16.2.2010
# @author Marco Bernasocchi
# – Added OPENSSL LIBMCRYPT LIBTOOL and a promt for installing XDEBUG
# (still uses XDEBUG 2.05, which has basic PHP 5.3.1 support. 2.1.0 is on its way)
# – removed unsupported php configure switches
# – disabled –with-xsl, if you want to use it you’ll probably need to install
# libxslt (http://xmlsoft.org/XSLT/) version 1.1.0 or greater.
# – sets the ini files into the install directory instead than on cgi-bin
# – to add more domains just copy the cgi binary to the new domain
# cp “$PHP_BIN_DIR/php-cgi” “$NEW_CGI_BIN_DIR/php.cgi” and modifiy the .htaccess

#Script for a minimal PHP 5.3.x install with APC
#
#- Prompts for the domain to build for
#- PHP configure line contains only valid PHP5 options
#- Displays colourful status messages
#- Many build messages, which aren’t helpful to most people, are now suppressed
#- Procedurised, making it cleaner and easier to follow
#
#The only things you may want to change in here are marked with “@todo”s
#
#Derived form the original PHP 5.3 install script at
#http://wiki.dreamhost.com/Installing_PHP5
#
#@author Dan Bettles

#Exit on error
set -e

clear

echo -n “Enter the domain for which you want to build PHP and press [ENTER]: ”
read DOMAIN

echo -n “Enable XDEBUG (y|n): ”
read ENABLEXDEBUG

#==================================================================

#@todo Update versions, if necessary
M4=”m4-1.4.13″
AUTOCONF=”autoconf-2.65″
OPENSSL=”openssl-0.9.8l”
CURL=”curl-7.20.0″
LIBMCRYPT=”libmcrypt-2.5.8″
LIBTOOL=”libtool-2.2.6b”
PHP=”php-5.3.1″
APC=”APC-3.1.3p1″
XDEBUG=”xdebug-2.0.5″

#@todo Update install paths, if necessary
WEB_ROOT=”$HOME/$DOMAIN/web”
CGI_BIN_DIR=”$WEB_ROOT/cgi-bin”
HTACCESS=”$WEB_ROOT/.htaccess”

INSTALL_DIR=”$HOME/mycompiles”
BUILD_DIR=”$INSTALL_DIR/build”
DOWNLOADS_DIR=”$INSTALL_DIR/downloads”
PHP_BASE_DIR=”$INSTALL_DIR/$PHP”
PHP_BIN_DIR=”$PHP_BASE_DIR/bin”
PHP_EXTENSIONS_DIR=”$PHP_BASE_DIR/extensions”
PHP_CONFIG_DIR=”$PHP_BASE_DIR/etc/php5/config”
PHP_INI=”$PHP_CONFIG_DIR/php.ini”

#@todo Alter features, if necessary
PHP_FEATURES=”–prefix=$PHP_BASE_DIR \
–with-config-file-path=$PHP_CONFIG_DIR \
–with-config-file-scan-dir=$PHP_CONFIG_DIR \
–bindir=$PHP_BIN_DIR \
–enable-zip \
–with-xmlrpc \
–with-freetype-dir=/usr \
–with-zlib-dir=/usr \
–with-jpeg-dir=/usr \
–with-png-dir=/usr \
–with-curl=$PHP_BASE_DIR \
–with-gd \
–enable-gd-native-ttf \
–enable-ftp \
–enable-exif \
–enable-sockets \
–enable-wddx \
–enable-sqlite-utf8 \
–enable-calendar \
–enable-mbstring \
–enable-mbregex \
–enable-bcmath \
–with-mysql=/usr \
–with-mysqli \
–without-pear \
–with-gettext \
–with-pdo-mysql \
–with-openssl=$PHP_BASE_DIR \
#–with-xsl=$=$PHP_BASE_DIR \
–with-mcrypt=$PHP_BASE_DIR”

#==================================================================

#@param string $1 Message
function echoL1 () {
echo -e “\n\033[1;37;44m$1\033[0;0;0m\n"
}

#@param string $1 Message
function echoL2 () {
echo -e "\n\033[0;37;44m$1\033[0;0;0m\n"
}

#@param string $1 URL
#@param string $2 Output directory
function downloadTo () {
wget -c $1 --directory-prefix=$2
}

#@param string $1 TAR filename
#@param string $2 Output directory
function untarTo () {
cd $2
tar -xzf $1
cd -
}

#@param string $1 Source directory
#@param string $2 Output directory
#@param string $3 configure arguments
function configureAndMake () {
cd $1
COMMAND="./configure --quiet --prefix=$2 $3"
if [ $1 = "$BUILD_DIR/$OPENSSL" ];then
#special command for OPEN SSL
COMMAND=”./config –prefix=$2 $3″
fi
echo “$COMMAND”
eval $COMMAND
make –quiet
cd -
}

#@param string $1 Source directory
#@param string $2 Output directory
#@param string $3 configure arguments
function makeAndInstall () {
configureAndMake $1 $2 “$3″
cd $1
make install –quiet
cd -
}

#@param string $1 Directory
function mkdirClean () {
rm -rf $1
mkdir -p $1
}

#@param string $1 Message
function echoWarning () {
echo -e “\n\033[1;37;41m$1\033[0;0;0m\n"
}

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

export PATH="$PATH:$PHP_BIN_DIR"

echoL1 "-> DOWNLOADING..."

mkdirClean $BUILD_DIR

echoL2 "--> Downloading $M4..."
downloadTo "http://ftp.gnu.org/gnu/m4/$M4.tar.gz" $DOWNLOADS_DIR
untarTo "$DOWNLOADS_DIR/$M4.tar.gz" $BUILD_DIR

echoL2 "--> Downloading $AUTOCONF..."
downloadTo "http://ftp.gnu.org/gnu/autoconf/$AUTOCONF.tar.gz" $DOWNLOADS_DIR
untarTo "$DOWNLOADS_DIR/$AUTOCONF.tar.gz" $BUILD_DIR

echoL2 "--> Downloading $OPENSSL..."
downloadTo "http://www.openssl.org/source/$OPENSSL.tar.gz" $DOWNLOADS_DIR
untarTo "$DOWNLOADS_DIR/$OPENSSL.tar.gz" $BUILD_DIR

echoL2 "--> Downloading $CURL..."
downloadTo "http://curl.haxx.se/download/$CURL.tar.gz" $DOWNLOADS_DIR
untarTo "$DOWNLOADS_DIR/$CURL.tar.gz" $BUILD_DIR

echoL2 "--> Downloading $LIBMCRYPT..."
downloadTo "http://easynews.dl.sourceforge.net/sourceforge/mcrypt/$LIBMCRYPT.tar.gz" $DOWNLOADS_DIR
untarTo "$DOWNLOADS_DIR/$LIBMCRYPT.tar.gz" $BUILD_DIR

echoL2 "--> Downloading $LIBTOOL..."
downloadTo "http://ftp.gnu.org/gnu/libtool/$LIBTOOL.tar.gz" $DOWNLOADS_DIR
untarTo "$DOWNLOADS_DIR/$LIBTOOL.tar.gz" $BUILD_DIR

echoL2 "--> Downloading $PHP..."
downloadTo "http://www.php.net/get/$PHP.tar.gz/from/this/mirror" $DOWNLOADS_DIR
untarTo "$DOWNLOADS_DIR/$PHP.tar.gz" $BUILD_DIR

echoL2 "--> Downloading $APC..."
downloadTo "http://pecl.php.net/get/$APC.tgz" $DOWNLOADS_DIR
untarTo "$DOWNLOADS_DIR/$APC.tgz" $BUILD_DIR

if [ $ENABLEXDEBUG = "y" ]; then
echoL2 “–> Downloading $XDEBUG…”
downloadTo “http://xdebug.org/files/$XDEBUG.tgz” $DOWNLOADS_DIR
untarTo “$DOWNLOADS_DIR/$XDEBUG.tgz” $BUILD_DIR
fi

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

echoL1 “-> BUILDING…”

mkdir -p $PHP_BASE_DIR

echoL2 “–> Building $M4…”
makeAndInstall “$BUILD_DIR/$M4″ $PHP_BASE_DIR

echoL2 “–> Building $AUTOCONF…”
makeAndInstall “$BUILD_DIR/$AUTOCONF” $PHP_BASE_DIR

echoL2 “–> Building $OPENSSL…”
makeAndInstall “$BUILD_DIR/$OPENSSL” $PHP_BASE_DIR

echoL2 “–> Building $CURL…”
makeAndInstall “$BUILD_DIR/$CURL” $PHP_BASE_DIR “–enable-ipv6 –enable-cookies\
–enable-crypto-auth –with-ssl”

echoL2 “–> Building $LIBMCRYPT…”
makeAndInstall “$BUILD_DIR/$LIBMCRYPT” $PHP_BASE_DIR “–disable-posix-threads”

echoL2 “–> Building $LIBTOOL…”
makeAndInstall “$BUILD_DIR/$LIBTOOL” $PHP_BASE_DIR

echoL2 “–> Building $PHP…”
#Fixes compile error
export EXTRA_LIBS=”-lresolv”
makeAndInstall “$BUILD_DIR/$PHP” $PHP_BASE_DIR “$PHP_FEATURES”

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

echoL1 “-> INSTALLING PHP…”

mkdir -p -m 0755 $CGI_BIN_DIR
mkdir -p -m 0755 $PHP_CONFIG_DIR
cp “$PHP_BIN_DIR/php-cgi” “$CGI_BIN_DIR/php.cgi”
cp “$BUILD_DIR/$PHP/php.ini-production” $PHP_INI

mkdir -p $PHP_EXTENSIONS_DIR

echoL2 “–> Building $APC…”
APC_SOURCE_DIR=”$BUILD_DIR/$APC”
cd $APC_SOURCE_DIR
$PHP_BIN_DIR/phpize
configureAndMake $APC_SOURCE_DIR $PHP_BASE_DIR “–enable-apc –enable-apc-mmap\
–with-php-config=$PHP_BIN_DIR/php-config”
cp modules/apc.so $PHP_EXTENSIONS_DIR
echo “extension=$PHP_EXTENSIONS_DIR/apc.so” > $PHP_CONFIG_DIR/apc.ini
cd -

if [ $ENABLEXDEBUG = "y" ]; then
echoL2 “–> Building $XDEBUG…”
XDEBUG_SOURCE_DIR=”$BUILD_DIR/$XDEBUG”
cd $XDEBUG_SOURCE_DIR
$PHP_BIN_DIR/phpize
configureAndMake $XDEBUG_SOURCE_DIR $PHP_BASE_DIR “–enable-xdebug\
–with-php-config=$PHP_BIN_DIR/php-config”
cp modules/xdebug.so $PHP_EXTENSIONS_DIR
echo “zend_extension=$PHP_EXTENSIONS_DIR/xdebug.so” > $PHP_CONFIG_DIR/xdebug.ini
cd -
fi
#——————————————————————————-

if [ -f $HTACCESS ]; then
HTACCESS_NEW=”$HTACCESS.old”
cp $HTACCESS $HTACCESS_NEW
echoWarning “–> Copied $HTACCESS to $HTACCESS_NEW”
fi

#The backslash prevents a newline being inserted at the start
HTACCESS_CONTENT=”\
Options +ExecCGI
AddHandler php-cgi .php
Action php-cgi /cgi-bin/php.cgi

#Deny access to the PHP CGI executable and config files

Order Deny,Allow
Deny from All
Allow from env=REDIRECT_STATUS

#Preserve newlines in the content by quoting the variable name
echo “#######ADDED BY installPHP script” >> $HTACCESS
echo “$HTACCESS_CONTENT” >> $HTACCESS

echoL2 “–> Created $PHP_INI”

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

rm -rf $BUILD_DIR

echo -n “Delete the downloads directory? (y/n): ”
read DELETE_DOWNLOADS_DIR

if [ $DELETE_DOWNLOADS_DIR = "y" ]; then
rm -rf $DOWNLOADS_DIR
fi

echoL1 “DONE”

exit 0

After running this script, it creates a folder in your domain called ‘web’ and within that another folder called ‘cgi-bin’.  I wasn’t able to get anything working within this folder at first so I am guessing it is meant to be off limits? Anyways, I was able to get PHP 5.3 working ultimately with the following within your .htaccess file in the root of the your.com folder. This information came from the Dreamhost Custom PHP Install Wiki itself.

AddHandler phpFive .php
Action phpFive /web/cgi-bin/php.cgi

After getting your custom PHP build installed correctly, you should create a php file with phpinfo(); and check that the PHP version is 5.3 or whatever you might have altered the script to. At that point, you are free to edit your php.ini file located at /home/user/mycompiles/php-5.3 (or whatever it might be)/etc/php5/config/php.ini for further modifications.

Phew, well that took me a few hours to figure out and I hope it saves you some time :p. Trying scripts left and right can really eat up time. Some literally just “stopped” or as Dreamhost might say was “killed”. Others just produced errors during the php build of the operation with no indication of why it failed. Helpful? Not at the very least.

The Best Way to Render Wireframe in Maya

A quick google for render wireframe in Maya will get you some sound results. Unfortunately, I tried them and they didn’t consistently produce the results I needed. So here is the most consistent, and thus in my opinion best way to do wireframe in Maya.

Method 1: “The Best Way” – Mental Ray Contours

Why is it the best?

It does not tessellate your objects. It can be applied to multiple objects without having to do new UV Snapshots. It can render in smooth shaded. It is quick and easy. And it uses the power of mental ray, and can look sweet if you do it right.

Process

  1. Assuming you have something to render, create a new material (can be anything that has a shader group – lambert, blinn, phong, etc.). In this example, I will be creating a lambert.
  2. Call the new material WireFrameMTRL and the shading group WireFrameSG. Who doesn’t like being a little organized ;) ?
    Note: If you clicked somewhere else and can’t get to the shading group easily, you can just go to the Hypershade and find the tab Shading Groups to find it.
  3. Go to the newly created lambert’s shading group WireFrameSG.
  4. Open the mental ray -> Contours tab.
    Note: If it isn’t there, you need to enable mental ray in your plug-ins Manager. Mental ray is called “Mayatomr.dll” so find it and load it.
  5. Click Enable Contour Rendering.
  6. Set the color to something you’d like. I like white.
  7. Set the width to something like 0.2 – 1.0. This setting is the absolute width of the wire frame lines. You can comeback and play with this later.
  8. Apply the material to the object.
  9. Open Render Settings
  10. Select render using Mental Ray (if it’s not there, go see the note for #4).
  11. Find the Contours Tab (it is under the features tab in 2009)
  12. Select Enable Contour Rendering
  13. Open the Draw By Property Difference Tab
  14. Select Around All Poly Faces
  15. Render!

And that is the easiest and most consistent way to get wireframe without the flaws of the other methods.

Here’s a shot of the result from one of my recent projects (with render settings fine tuned):

Rendering Wireframe with Mental Ray

The Worse Ways

For full disclosure, here are some other not so good ways to render wireframe.

Method 2: UV Snapshot

I don’t feel like doing the process for this one. It is somewhat of a pain to explain without pictures and frankly I don’t want to take them since it isn’t a method I’d advise. So here is a pretty decent video that does: http://www.youtube.com/watch?v=ZUFAtkVJdpg&NR=1

Method 3: Maya Vector

Rendering in Maya Vector is fairly painless to test. Unfortunately, Maya needs to tessellate all quads whose vertices do not fall on the same plane.  There is a way to find these planes if you have a few but in my case, almost all my quads are non-planar so there was no point trying to fix them.  So here we go on the process:

Process

  1. Assuming you have objects to render, open up your render settings dialog.
  2. Render using Maya Vector.
  3. Go to the Maya Vector settings.
  4. You can select Fill objects if you’d like. It will fill the object with a color you can select through the settings or leave it fill-less. For the example below, I unchecked fill objects.
  5. Un-check show back faces.
  6. Select Include Edges in the Edge Options Tab
  7. Choose an edge weight. I chose 0.5 for the example below.
  8. Choose Entire Mesh for Edge Style.
    Note: Outlines gives you a pretty cool effect. So try that too :)
  9. Render!

Wireframe render using Maya Vector. Oh boy look at the tessellation.

Method 4: Hardware Buffer

Hardware buffer is another painless way to render out in wire frame. Unfortunately, it doesn’t look nearly as cool as the previous two images. Anyways, here’s the process:

Process

  1. Open up the Hardware Rendering Buffer from Window > Rendering Editors.
  2. In the Hardware Rendering Buffer, open Render > Attributes.
  3. In the Attribute Editor, change the Rendering Mode > Draw Style to Wireframe.
  4. Render!

This one looked terrible so I didn’t capture an image of it. I couldn’t figure out how to do back-face culling so this quickly became the worst of the techniques.

Method 5: Toon Shader

The second best method to render wireframes in maya is to use the toon shader. I personally like the mental ray method better for the control and power of mental ray but this one seems just as good for simplicity’s sake.

http://www.artbycrunk.com/blog/2008/09/rendering-wireframe-using-toonshader/

Japanese Visemes and Phonemes

I’m currently working on an interesting project that involves Japanese speech lip-syncing of a 3D character. Since it was difficult to find resources on this from an English speaker, I decided to write on it.

Firstly, visemes are the unique facial positions required to produce phonemes, which are basic sounds from a particular language. Each language has multiple phonemes and visemes and each viseme can have multiple phonemes. In the English language, there are about 10 basic phonemes (a-i, e, o, u, c-d-g-k-n-r-s-y-z, f-v,th,l,m-b-p,w-oo-q) with one viseme each totaling 10 visemes.

When I first began looking into Japanese visemes and had luck finding resources, I decided to try to develop my own solution with my understanding of the language. In my view, the Japanese language is composed of some very basic sounds that are construed to make more sounds. Although the phonemes begin to add up, the actual visemes are almost exact. Combinations like じゃ(jya) can be formed accurately by combining their similar visemes  い (i) and あ (a). The following diagram depicts the 5 visemes:

Yours truly making visemes for animation

Again, I believe that with these 5 basic visemes, it will allow you to construct every mouth pose required for Japanese speech. Unfortunately, the character I am using lip-syncing for will most likely never have a tongue. This is important because, in Japanese speech,  the tongue is used more often than other languages (I’m thinking of English, but similar Latin-based languages fall in that category) and requires less movement of the lips to make the language’s basic phonemes.

Finally, near the end of my researching for this particular topic, I found this webpage that explains everything I just did and more: http://www.ordix.com/pfolio/research/

I don’t particular like the visemes for the first two sounds as the character’s teeth stick out far too much for my liking. It is entirely possible that the character is making the correct sound, but when I try the phoneme in her pose, it feels quite strange.

Japan: New Years Celebrations

It’s been awhile since I’ve written on Japan. This has been because of mostly the fact I’ve been here before for an extended period of time and simply ran out of things to write about. There are some things that have crossed my mind that could be interesting topics, but I’ll save those for later. This post however is on a new topic that I never got to experience the first time I was here. This time I truly got to experience Japanese life in regards to Christmas and New Years.

Christmas

Christmas isn’t much different in Japan than the North American version. You still get presents for your friends and family and they still get presents for you (or else would it really be Christmas?). Unfortunately for us, and I still don’t know if this is common, we didn’t have a Christmas tree. Instead, we used some makeshift plant as a tree and put presents around it. Hooray. The stores were their usual self playing Christmas music with Christmas decorations galore. It was interesting to see the local KFC with their statue of Colonel Sanders dressed up in a Santa outfit and to see at the local mall not Santa but guess who? Ultraman. Who needs jolly old saint Nick anyway? Why not a super hero sent from space to defend Earth from aliens? Way cooler.

Ultraman @ AEON mall


New Years

The most interesting Japanese holiday traditions involve New Years. I was kind of surprised at how important it is here in Japan after experiencing how similar Christmas was. Firstly, Japanese people support the Chinese astrology and subsequently the animals of the Chinese Zodiac. The new year brings the tiger to replace the cow so likewise, you see images of tigers and stuffed fluffy tigers everywhere. Secondly, New Years brings the most fun and interesting concept to shops: fukubukoro! Fukubukoro is a Japanese New Years tradition at shops where shops include random goods into a sealed container and sell it for one flat price. They tempt you with what could be in the boxes like for example some electronic stores package $500 worth of stuff into a $250 fukubukoro and hide it randomly among other lower valued fukubukoro. I did end up buying one as I’ve looked forward to this all year long. I got a Police fukubukoro for $50 that contained a necklace, bracelet, and a hat. If you know Police, you know that’s a steal. Thank god more people don’t know Police here or that price would go through the roof.

Among other things, Japanese people tend to have a very specific diet on New Years. They generally start eating a prepared meal of raw fish and traditional Japanese foods in the morning. From there, I think it’s up to the family. Specifically, we had sushi for lunch and sukiyaki for dinner, which are both still very traditional Japanese meals. Also during this time, older people are expected to give money to younger people in the amount of generally more than $100. No it’s not an early birthday gift or late Christmas gift; it’s extra.

Another interesting tradition for New Years is one I took part in early New Year’s morning. Not all Japanese do this but many have done it at least once in their lifetime. The tradition is to climb the local highest mountain, visit the mountain’s temple before sunrise, and then view the sunrise with everyone on the summit. As it can be very cold during January and at 5 – 7 am, it’s understandable people don’t do this every year. However, it is a thrilling experience when you climb a mountain in the dark and see the sun break from the clouds in the freezing cold.

Peaceful sunrise on New Years Day

Getting Things Done: The Personal Wiki

One application of David Allen’s Getting Things Done principles is the personal wiki (google Monkey GTD). Although the book is on my reading list and I have yet to touch it, there’s no reason to start ‘working on it’ early, eh? Well, I’ve been using a personal wiki for a few weeks now and let me tell you it is the best think since peanut butter. A personal wiki allows you to share knowledge with the most important person in your life — you! No, it’s not egotistical, it’s brain centric. Humans are notorious for forgetting things. If we stop, we forget. If we forget, we might lose information or skills that are necessary down the road. A personal wiki is beyond that. It is exactly like any wiki — it is searchable, indexes items, and can be used from any computer and certain mobile devices. If you know you are going to forget something, or want to write something down that could be important or interesting, why not save it in your own wiki? I don’t advocate being dependent on a machine to look up content you forgot or writing everything you read down; I’d rather you remember. However, as it’s impossible to remember everything, it could be a good source of knowledge kept just forgotten. Here’s an example of how I use it. Currently, I use it for is for writing book reviews to myself — at least for now. I remember a lot of details from books I read and yet I still forget a lot of the good stuff. The great stuff sticks, but it’s those one-liners and unique examples that might be peripheral to the solution but could really interest me down the road and allow me to remember complicated discussions and some of the reasons to support theories. Too bad I forget those the most. So, lately, I’ve been writing book reviews and keeping track of valuable information chapter by chapter — in my own words. I write a post to myself, indicating the main points of chapters and in a language I’m comfortable with. I don’t edit it as much as I edit assignments or work projects; it’s for my eyes only so that I can revisit it without having to read the whole book again. I also use it for jargon, definitions within my problem domain, that would otherwise be forgotten in a few hours if not minutes after look up. It’s a useful tool that maybe won’t pay off immediately, but in the long run for sure.

As for recommended personal wikis, I use TiddlyWiki. It is a 1 file HTML page that can be stored locally, on a jump drive, or on a server. It needs write permissions on the local drive to run but that’s certainly worth it considering how valuable it is. There are a ton of plugins for it if you know where to look. Goto this page to find them. All you need to do is download the index.html file and load it up in your personal wiki and it automatically detects the plugins and transfers it over. Neat eh? I was impressed on how powerful that one file is. I would hate to be working on it with a team of developers, but I can’t complain because it fits my needs perfectly. Anyways, I can’t express how useful this will be if you start using it. It might take some time getting used to but it can be like your own private journal — except this has a search function you might need 2 years down the road.

Productivity and Motivational Tip: Time Cost Table

I’m not sure if this is a standard tool, but I created it for myself to start seeing where my time was going and thought it could be valuable to others. Your personal time is valuable. And like anything valuable, you need to know what’s happening on a regular basis. It may not seem sensible at first, but I suggest creating what I call a time cost table. At the heart of it is knowledge — knowledge of where your valuable time is going. It is flexible in that you can use it in a relaxed or a strict way and still receive the benefits of using it.

So here’s what it looks like:

Start Time End Time Duration Item
7:02 pm 8:15 pm 1 hr 13 min Studied for GMAT – quantitative section
8:16 pm 8:45 pm 30 min Ate Dinner
8:46 pm 10:32 pm 1 hr 46 min Studied again for GMAT
- - - Total for the day:  2 hr 59 min GMAT // 30 min break

To use it, simply create your own in a word processing suite etc.  using the full page and the column headers in the example and start writing down start time and end times for work and break blocks. If you are working on homework, write it down. If you are watching TV, write it down. I try to imagine that I’m being paid for work or a goal for a certain day, say studying for GMAT for example, and that I have to work 7 hours for example on a free Saturday. By writing down the time, I can see where I take breaks, how long I take it, when I wake up, how long I actually study and subsequently how much I should be ‘paid’ for my time. Lawyers and other professionals use the concept of billable hours and a plan like this makes it easy to see how many hours are you billing per day. Imagine billing 9 hours per day for a goal, can you do it? What about 13? Now that’s hard.

Hopefully this helps make you more productive, procrastinate less, and reach and plan your goals accordingly.

Self-Service: Subservient Video AS3 Flex 3

As my first self-service application, the Subservient Video AS3 application allows users to build a fun, creative, and interesting interface for their website guests. This application is an upgrade to the popular AS2 subservient chicken open source application I released a few years ago. Since it was time for a revamp, I created this self-service counter and home for a new AS3 version – powered by Adobe Flex. If you aren’t familiar with my AS2 subservient application, check it out here.

What is Subservient Video?

Subservient video is a powerful video application that allows you, in a sense, to have a conversation with a video. While using the application, a user would enter in text in the form of sentences, keywords, or the like, and the video application will respond to these queries by playing pre-configured videos that match with the words being searched. All of this is fronted by a powerful Adobe Flex layout using skins, allowing the site owner to easily modify the look and feel of the application.

Sample showing subservient video teleport action

Sample showing subservient video teleport action

Try the demo online now

Licensing

The application is sold by the license. Please purchase the one you need. If you need assistance, please email me at ayan [at] ayanray.com.

Buy Now

With the power of PayPal, you can purchase a license now and receive the software and appropriate license via email/YouSendIt with instructions after payment.

License #1 $200 USD Single Character License for 1 site Includes manual, getting started guide, application files, two skins, sample application, and 30 day support (limited)
License #2 $400 USD Single Character License for 1 site no credit link Includes manual, getting started guide, application files, two skins, sample application, and 30 day support (limited)
License #3 $500 USD Site wide license for 1 site unlimited characters Includes manual, getting started guide, application files, two skins, sample application, and 30 day support (limited)
License #4 $900 USD Site wide license for 1 site unlimited characters no credit link Includes manual, getting started guide, application files, two skins, sample application, and 90 day support (extended)
Extras $200 USD + any license Source code included with any license Purchase a license and have the option of purchasing the source code for an extra fee

Note: There are different pricing available for NGOs and NPOs and for bulk license purchasing. Please contact me at ayan [at] ayanray.com for more information. Custom tuning is also available by request.

Definitions
Limited Support – Questions only.
Extended Support – I will help setup your application and answer questions. I won’t implement it but I will help configure it.


Feature Requests/Road Map:

None planned yet.

What is Subservient Video?

Coming Soon – SWFWindow AS3 Framework

They are a dime a dozen – a framework for Flash/Flex and AS3. It’s really quite simple making your own framework. You come up with what you want to accomplish and you develop general classes to accomplish that. It is very much like building a product. SWFWindow was my first attempt at building a framework that I designed and I used on a couple of well-known websites (global leaders in their industries). Now, I am finally planning on releasing it so people can pick at it and enjoy it while it’s still applicable. I won’t be supporting this framework as much as I have supported AssetLoader but I will nonetheless provide the documentation, example code, and code base required to get up and running in SWFWindow projects.

More on this later :)

Ayan

Return top

About the Author

My name is Ayan Ray and I'm a new media specialist from Ottawa, Canada with a Bachelors in Information Technology. My expertise is in creating unique user experiences using computer science and design principles to develop intuitive applications that people can use effortlessly. I also have experience with 3D modeling, texturing, and animation for short animated clips and game design. I have completed projects for some of the world's top companies such as Adobe Systems, Salomon Sports, Wilson, Suunto, and Yokohama Tires. I've also read some of the most influential books in investing and computer science and share some of the lessons they teach throughout this blog.