Home, out, and home again.

2:27am 17th May 2008

So, since I came back from the Pai CouchSurfing collective, quite a bit has happened. We installed a fingerprint lock on our front door in response to the total mess that was the Gassiep family key management procedure, and I am pleased to report that it has been a total success. I have enrolled two fingers of each family member into the lock, and nobody has been locked out since. Furthermore, there's no more rummaging for Mum who has a handbag like the Tardis, or trying five different keys for Dad who refuses to cull his keyring which must have at least 50 keys on it. The model we have is the FA6600 and I highly recommend these units. They're easy to use, solidly built compared to standard front door latches and seem to have very good fingerprint reading capabilities.

Since then I've been overseas again, I visited friends and family in South Africa as well as making a stop off in Thailand to do another unit of training in Scuba diving. I've just returned home today. While in South Africa I stayed at my Aunt's place in Johannesburg, which is always a pleasant holiday. I accompanied my mother there, and we took Zayd there to meet my cousin's kids. He had a great time, he doesn't get a whole lot of family contact here in Australia, as there just aren't that many kids here that he can relate to at his own level. It was also great seeing everyone there, I haven't been in about 18 months. I didn't stay there for very long, and didn't get to catch up with as many of the people there that I would have like to, sorry if you're one of them!

On my way back I met Gemmell in Thailand, where we completed the next level of PADI diver training, Emergency First Responder and Rescue Diver. These two units are the last ones we needed to do in order to go into professional diving, and the last one before Master Scuba Diver, which is the highest qualification outside of professional diving. In order to get the Master Diver qualification we need to be supervised for 5 specialties. We've already done the first dive for our chosen ones the last time we were in Thailand, we just need to get them logged, and then ensure that we have 50 logged dives in total. In other words, we just need to get some dives logged, and we're there.

So now I'm back at home. I have a few things that I'm working on, including Twerl. Oh well, back to the grindstone again until I find an excuse to flee the country again. I'm thinking of doing some winter dives here in Melbourne so I have an excuse to try out the dry suit that I bought from my first instructor in Thailand. I've never used it, as I've not done any diving in water cold enough to need it. I'll keep you all updated on how that goes, so watch this space! Naz out.

CSCT2k8: Pai, Thailand

2:55am 3rd March 2008

So it's been a while since I last updated my blog. Apologies to all. I will try to summarise the last month as best I can.

I arrived in Thailand on the 10th Feb to work with the admin/tech team of CouchSurfing.com. Having landed in Bangkok, I took a domestic flight up to Chiang Mai. As luck would have it, I arrived on a Sunday, just in time for the Sunday Night market. I decided to delay a night here to sample the sights and sounds of this town that I have never been to. Chiang Mai is an ancient city that used to be the capital of one of the northern Siamese kingdoms. Founded around 1296 by King Mengrai, it was originally named Nopphaburi Si Nakhonping Chiangmai. After being captured by the Burmese, it was finally incorporated into Thailand in 1774 when King Thaksin recaptured the area that is now Chiang Mai province. Since then Chaing Mai has become an important local economic hub in northern Thailand, where locals come to engage in trade and work. It is also an important destination in the Thai tourism industry. It is a fascinating city, and I highly recommend that any visitor to Thailand make the effort to visit it.

I arrived in Pai on the 10th Feb. Weston and John met me at the bus stop after a long, stomach churning minibus ride down a windy road driven by a maniacal driver. I immediaely hired a motorbike to get around town, as there are no taxis or other forms of public transport. I spent the first day exploring the area in and around Pai, and taking lots of photos. I haven't uploaded them yet, but if you check the gallery soon they'll be there, as soon as I get to a fast internet connection. It is an incredibly serene piece of countryside, lush with vegetation. I have taken many photos of this trip, all of which are available in my Twerl gallery.

There are many rural villages nearby where the tribes people live very traditional lives, more or less untouched by the dramatic social changes modernity brings. Pai, on the other hand, is a whole different story. It was clearly conquered long ago by armies of backpackers searching for authentic foreign experiences. While not westernised in the almost tasteless manner that Phuket or Koh Samui have been, Pai has been transformed by the many people travelling through it. All the foreigners there say how they prefer the authentic experience that Pai represents, which has taught me something fundamental about how societies interact; they cannot see reflections of themselves in others, they only see the differences. This may seem obvious, but in Pai, this property of human behaviour was demonstrated to me from the reverse angle; Instead of looking at another society and searching for something familiar as most people do, the travellers to Pai are looking for something different, they want the "authentic Thai experience". Over the years, Pai changed. Its society re-modelled itself to suit the backpackers flowing through it. The economy changed from selling farming tools and produce to selling handicrafts and souvenirs, the primary wealth generating activity changed from producing goods and trading them in nearby Chiang Mai to service based endeavours catering for their guests. The fact that the ex-pats living there did not recognise this and insisted that Pai represented "Thainess" as opposed to the regular tourist traps illustrates to me that they were unable to see those parts of themselves that were being imbibed by the locals, they only saw the differences that remained, which kept them believing that Pai was still truly authentically Thai. In my view, nothing could be further from the truth.

Don't get me wrong, this is not a bad thing, Pai has retained a very pleasant, highly social community spirit, with local townspeople, foreigners and nearby Lesu tribe members mixing together in as close to perfect harmony as one will see on 21st century Earth. I merely make the point that this demonstrates the truism that observation without intervention is impossible. Backpackers are famous for their low-impact travel nature, they strive to leave as few footprints as they can and assimilate into the places that they go as invisibly as possible. However, Pai is an example of the ultimate impossibility of this effort. It is a macroscopic societal manifestation of the Heisenberg Uncertainty Principle. The backpackers' money is the metaphorical photon to the the momentum of the local economy's particle, and I feel that this very interaction, this cross osmosis of human experience, ultimately enriches the lives of everybody it touches. Economically, fair trade always results in net gains to both sides. So too in societies; respectful trade in ideas, experiences and knowledge allows all who engage in it to gain from their expanded pool of wisdom.

The CouchSurfing collective was for me quite productive. While I did not get as much real coding done as I would have liked, interacting with the rest of the ream and meeting the other people who up until then I had only known by reputation or by email was great. The CouchSurfing team are great people, with a wonderful sense of common purpose and a genuine desire to have a positive impact upon the world. If only more groups could look past their implementational disagreements and concentrate on a shared vision, then there would be far more positive results from human interaction. Great work guys, I look forward to working with you in the future.

One story worth telling was the tale of The Nameless Cat. While on one of my exploration trips, I came across a cat starving and near death. Given its distance from any livable area and the fact that it was obviously highly domesticated, I could only conclude that it had been dumped as a nuisance cat by an annoyed ex-owner. Being the animal lover that I am, I bundled it up in my shirt and took it back into town. I must have looked a little odd, being topless with a half-dead cat wrapped up in the bike's basket. We got back to the Mango Tree (the main guest house where we all worked) and gave her some water. It seemed, however, that she was unable to drink. I went back into town to fetch some chloromycetin drops, syringes and latex gloves. John helped me wash her up, put some drops in her eyes which were caked over with dry sticky secretions and syringed some water down her throat. We attempted to feed her, but she wasn't interested. We decided to let her rest, and give her fluids every few hours until she got her strength back. She responded very well to handling, purring very strongly and seemed to welcome the syringed water. Unfortunately however, she just wouldn't eat. More disturbingly, maggots appeared at her nostrils and mouth. We spoke to a local vet, who suggested killing it with a shovel. I decided to get a second opinion. I took some photos and called an emergency centre in Australia who gave me some care advice. After assessing the photos, it was decided that the most likely result would unfortunately be euthanasia. I had neither the time nor the resources to give the cat the several weeks of intensive care that would be required to give it a chance, and even that would be a slim chance. The only other option was to put the cat back where I found it, which would only prolong her misery. We decided to wait and see what happened. 24 hours later, she was still unable or unwilling to eat, which, along with the ever-present maggots, was an indication that her condition was unlikely to improve. We euthanised her that day, using carbon monoxide asphyxiation, as it was the only non-violent means available to us. We buried her under a tree.

CouchSurfing was nice enough to pay for a collective outing to go bamboo rafting and elephant riding. It was great fun, we all got to float down the river on bamboo rafts, and then ride elephants. I really enjoyed the rafting, but the elephant riding was a bit boring. I enjoyed it for about 15 minutes, and then I realised just how slow the things moved, and just how hard their backbones were. I had a sore butt by the time we had to get off. Afterwards I sat in a hot spring that smelled of sulphur, which was great, as I was starting to get bad gas due to stomach problems.

Now I have not vomited since I was in primary school. However, during the course of the collective, I got such a bad bout of food poisoning that I vomited every hour one night. I was much better the morning after though, the whole episode lasted about 12 hours only, thankfully, with only minor belching issues for a few days thereafter.

After about 3 weeks I decided that it was time to leave the collective. I left with a friend of mine named Diamond from London, and headed down south for some sun and sand. We stayed in Koh Lanta for 3 days, which was absolutely stunning. The Thai south is beautiful, and I'm just sad I didn't spend a few more days there, as I didn't manage to get any scuba diving in. After that, I jumped on a plane for home, which brings us to the present. I hope you're not all too upset with me for keeping you in the dark, I'll do my best to update more often. Until the next time folks!

Lakes Entrance road trip and Optus Wireless Broadband

10:30am 26th January 2008

Well it's the time of year when road trips are the in thing, so some friends and I as well as my brother and his girlfriend jumped into a van and a car and headed over to Lakes Entrance. It's a 4 hour dive, but thanks to a bunch of unnecessary stops including one at an SES managed stop off for drowsy drivers where they serve free tea, coffee and Milo. We eventually arrived at 2am, and the owner of the flats where we are staying was waiting up for us.

I have access to the Internet via Optus Wireless Broadband. I've tried the service a few times already, but it proved to be too much of a hassle to be worth it. The new USB modems however make it a snap. The software and drivers are all on the USB device itself, which has a standard USB mass media storage device. It's literally plug in, wait a bit, connected.

Anyway, I'm hoping to be back in Melbourne on Tuesday. Hopefully tomorrow we'll catch some fish when we visit the local jetty, it'd be nice to have some lemon baked flathead that we caught ourselves. Here's to hoping!

Fun with internationalization, ISO 3166-1, ISO 639 and the CLDR

3:13pm 8th January 2008

So I came to a point in a software project that I am working on where it is time to consider how foreign users will be able to use the system. Yep, it's time for i18n and L10n. Initially, I thought that this would be as easy as simply setting up a translation matrix, and wrapping all static data in a function that performs a lookup on it and outputs the appropriate language.

This worked fine, I set up the matrix using a list of languages maintained in the database according to the ISO 639-1 standard. I wrote a simple yet effective tool for maintaining translation tables and began using online translation services to translate the most simple words and phrases, performing reverse translations on them to ensure they were not contextually mutated by the translator. Most words could be done this way, and in a very short period of time I was able to have substantial portions of the site in other languages including non-latin based languages such as Russian, Greek and Thai. All was well in the world.

Or so I thought. It all hit me at once. A single thought that brought all my cleverness crashing down, and threw up a whole new set of problems to overcome. It was like the opposite of an epiphany. Here's the situation: If I have a list of languages in the ISO 639 list, how do I handle the fact that the same language may actually need two translations? E.g., how would I deal with translating the word "colour" for the American spelling? The ISO code 'EN' does not allow for more than one English language. And then there's Portuguese; it has two regional variants, that spoken in Portugal and that spoken in Brazil. Finally, Chinese. ISO 639 only specified a single language, 'ZH', however there are two written forms, traditional and simplified, which are practically different languages.

It was clear that my solution was just not sufficient. Back to the drawing board.

After pondering this problem for some time, I decided that if I was going to do i18n at all, I was going to do it properly. After all, I've been uncompromising in my support for and awareness of time zone handling. Additionally, I had been careful from the word go about using UTF-8 aware functionality in the code, the database and all ancillary systems. It'd be silly to compromise on proper i18n at this point. That meant using appropriate date formats, spelling variants, weekday/weekend definitions, everything. But how? I had nowhere near the resources to engage in the collation and maintenance of that information. Nonetheless, I was determined that it be done right.

I was given salvation by another IRCer who is also working with this at the moment. He told me about the Common Locale Data Repository, or CLDR for short. It is a large, freely available repository of locale data stored and distributed in a widely used format, an XML DTD called LDML. This DTD is used in many projects for the exchange of locale data, including Microsoft's .NET framework. A relatively new project, having only started in 2003, the CLDR is already by far the most comprehensive repository of locale data that is freely available. It is maintained by the Unicode consortium, so one can be certain that things like format stability, backwards compatibility and data consistency are going to be given due attention.

Implementing full i18n/L10n in my project will be fairly involved, but not difficult. Locale identifiers are made up of ISO 639 codes and ISO 3166-1 alpha 2 codes, of which I already have authoritative sources. Mating them for valid locales is a trivial job, and now instead of my translation table being populated on one axis by language, it now has locale with a default "fallback" language, meaning very little change is required to the infrastructure already written to support language variants from trivial one or two word changes through to wholly different languages with different character sets. Furthermore, it does not seem that CLDR data even needs to be integrated into the DB before being used, the XML file can be stored locally and queried directly, meaning that future versions of the file become a drop-in replacement allowing virtually effortless expansion of locale awareness. The CLDR allows me to trivially do the following:

  • Translate basic data such as month names, day of the week names and names of countries into many languages.
  • Format dates and times according to local conventions.
  • Perform character repertoire tests to guarantee that the fonts used include the all necessary characters to render a language fully.
  • Because the CLDR uses the same time zone list as most posix systems, zone.tab which is part of the zoneinfo database, I can use it to translate time zone names into local languages
  • Determine local currency and its symbol.

In order to serve a user's needs, I will need to get as many of the following details from them in this order:

  1. Locale: As a basic minimum, this will allow the representation of content in their local language and formatting of dates in their expected format.
  2. Location: As users may use locales for places that are not where they are located physically, a user may want to specify their country so that they can be shown appropriate location based settings and defaults.
  3. Timezone: This cannot be reliably inferred from the above two pieces of information, although it can be reasonably accurately guessed. The user will however need the option of changing it, should they wish.

In order to allow full localization, those three pieces of information need to be determined about the user. Much of it can be inferred by using things like IP based geolocation data providers such as IP2Location and MaxMind. The ultimate goal is for a user to just hit the web site and immediately see their language, dates in their local format and times converted to their local time zone. Only time will tell how close I can get to that ideal.

On a side note, I would like to give special mention to PostgreSQL's support for time zone and date math. Being able to perform all date / time related functions at the database makes it trivial to implement zone aware time handling. PostgreSQL is, in my opinion, the RDBMS of choice for applications requiring non-trivial date and time handling or other i18n functionality.

So that's that. I now have all the tools necessary to ensure that this project will end up with a final product that is fully location aware, and allows users to select their locale and have all the relevant alterations to output tailored to their regional expectations. I intend that this project end up being a glowing example of i18n done right. If you have anything to add, or know of anything I may have overlooked, then I invite you to drop me a comment below.

Oh yea...

7:38am 6th December 2007
...the 4th December was my 28th birthday. Happy birthday to me, I guess.
Document Processing Times
Start of processing 0.00ms (0.00 ms total)
Begin Include Libs 0.08ms (0.08 ms total)
End Include Libs 26.97ms (27.05 ms total)
userdets() 4.09ms (31.14 ms total)
/userdets() 0.09ms (31.23 ms total)
sitedets() executed 2.75ms (33.98 ms total)
Start page display 811.59ms (845.56 ms total)
Call to get times 417.59ms (1,263.16 ms total)
Database Query Times
SET TIME ZONE 'GMT'; 0.12ms
SET TIME ZONE 'GMT'; 0.06ms
SELECT siteid FROM domains WHERE domain = 'www.mrnaz.com'; 2.36ms
SELECT sites.*, siteprefs.*, users.username FROM sites, siteprefs, users WHERE sites.siteid = siteprefs.siteid AND sites.owner = users.userid AND sites.siteid = 1; 2.99ms
SELECT mobile_numbers.id, mobile_numbers.number, mobile_numbers.ismain, mobile_numbers.authcode, mobile_numbers.authcode_issued, mobile_numbers.activated FROM mobile_numbers WHERE siteid = 1 AND ( (activated IS NOT NULL AND deactivated IS NULL) OR (authcode_issued > current_timestamp - '24 hours'::interval AND activated IS NULL) ) ORDER BY ismain DESC, authcode_issued; 1.91ms
SELECT * FROM imap_accounts WHERE siteid = 1 AND deleted IS NULL ORDER BY emailaddress; 0.82ms
SELECT users.*, COALESCE(shortname,username) AS displayname, users.name || ' ' || users.surname AS fullname, CASE WHEN users.dob IS NOT NULL THEN age(users.dob) ELSE NULL END AS age, to_char(users.dob, 'YYYY') AS dobyear, to_char(users.dob, 'FMMM') AS dobmonth, to_char(users.dob, 'FMDD') AS dobday, sites.siteid, sites.name AS sitename, countries.name AS countryname, subcountries.sccode AS sccode, subcountries.name AS subcountryname, lastlogins.logintime, lastlogins.ip_addr, lastlogins.ip_country, current_timestamp AS currentasof FROM sites, users LEFT OUTER JOIN files ON (users.photo = files.fileid AND files.deleted IS NULL) LEFT OUTER JOIN countries ON (users.ccode = countries.ccode) LEFT OUTER JOIN subcountries ON (users.ccode = subcountries.ccode AND users.sccode = subcountries.sccode) LEFT OUTER JOIN lastlogins ON (users.userid = lastlogins.userid) WHERE users.userid = 2 AND sites.owner = users.userid; 8.96ms
SELECT name, abbrev, utc_offset, is_dst FROM pg_timezone_names WHERE name NOT ILIKE 'africa/tripoli%' AND name NOT ILIKE 'america/argentina/comodrivadavia%' AND name NOT ILIKE 'america/buenos_aires%' AND name NOT ILIKE 'america/catamarca%' AND name NOT ILIKE 'america/cordoba%' AND name NOT ILIKE 'america/havana%' AND name NOT ILIKE 'america/indiana/indianapolis%' AND name NOT ILIKE 'america/jamaica%' AND name NOT ILIKE 'america/jujuy%' AND name NOT ILIKE 'america/knox_in%' AND name NOT ILIKE 'america/louisville%' AND name NOT ILIKE 'america/mendoza%' AND name NOT ILIKE 'america/mexico_city%' AND name NOT ILIKE 'america/north_dakota%' AND name NOT ILIKE 'america/santiago%' AND name NOT ILIKE 'asia/ashkhabad%' AND name NOT ILIKE 'asia/chungking%' AND name NOT ILIKE 'asia/dacca%' AND name NOT ILIKE 'asia/macao%' AND name NOT ILIKE 'asia/singapore%' AND name NOT ILIKE 'asia/tehran%' AND name NOT ILIKE 'asia/thimbu%' AND name NOT ILIKE 'asia/tokyo%' AND name NOT ILIKE 'asia/ulan_bator%' AND name NOT ILIKE 'australia/adelaide%' AND name NOT ILIKE 'australia/brisbane%' AND name NOT ILIKE 'australia/canberra%' AND name NOT ILIKE 'australia/darwin%' AND name NOT ILIKE 'australia/hobart%' AND name NOT ILIKE 'australia/lhi%' AND name NOT ILIKE 'australia/melbourne%' AND name NOT ILIKE 'australia/perth%' AND name NOT ILIKE 'australia/sydney%' AND name NOT ILIKE 'brazil/east%' AND name NOT ILIKE 'brazil/denoronha%' AND name NOT ILIKE 'canada/east-saskatchewan%' AND name NOT ILIKE 'cet%' AND name NOT ILIKE 'cst6cdt%' AND name NOT ILIKE 'eet%' AND name NOT ILIKE 'egypt%' AND name NOT ILIKE 'est%' AND name NOT ILIKE 'etc/%' AND name NOT ILIKE 'europe/guernsey%' AND name NOT ILIKE 'europe/isle_of_man%' AND name NOT ILIKE 'europe/jersey%' AND name NOT ILIKE 'europe/lisbon%' AND name NOT ILIKE 'europe/san_marino%' AND name NOT ILIKE 'europe/vatican%' AND name NOT ILIKE 'hst%' AND name NOT ILIKE 'gb%' AND name NOT ILIKE 'gmt+0%' AND name NOT ILIKE 'gmt-0%' AND name NOT ILIKE 'gmt0%' AND name NOT ILIKE 'greenwich%' AND name NOT ILIKE 'hongkong%' AND name NOT ILIKE 'israel%' AND name NOT ILIKE 'kwajalein%' AND name NOT ILIKE 'met%' AND name NOT ILIKE 'mideast/riyadh8%' AND name NOT ILIKE 'mst%' AND name NOT ILIKE 'nz%' AND name NOT ILIKE 'pacific/easter%' AND name NOT ILIKE 'pacific/honolulu%' AND name NOT ILIKE 'pacific/pago_pago%' AND name NOT ILIKE 'poland/%' AND name NOT ILIKE 'posix/%' AND name NOT ILIKE 'prc%' AND name NOT ILIKE 'pst8pdt%' AND name NOT ILIKE 'roc%' AND name NOT ILIKE 'rok%' AND name NOT ILIKE 'systemv/%' AND name NOT ILIKE 'turkey%' AND name NOT ILIKE 'uct%' AND name NOT ILIKE 'universal%' AND name NOT ILIKE 'us/pacific-new%' AND name NOT ILIKE 'us/pago_pago%' AND name NOT ILIKE 'us/samoa%' AND name NOT ILIKE 'utc%' AND name NOT ILIKE 'w-su%' AND name NOT ILIKE 'wet%' AND name NOT ILIKE 'zulu%' AND abbrev NOT ILIKE '%zzz%' ORDER BY utc_offset, name; 137.81ms
SELECT user_profilepics.id AS id, user_profilepics.ismain, user_profilepics.display420 AS file420id, f420.filename AS file420name, user_profilepics.display220 AS file220id, f220.filename AS file220name, user_profilepics.display110 AS file110id, f220.filename AS file110name, user_profilepics.display80 AS file80id, f80.filename AS file80name, ofiles.fileid AS origfileid, ofiles.filename AS origfilename, ofiles.md5 AS origmd5, ofiles.sha1 AS origsha1 FROM user_profilepics, files f420, files f220, files f110, files f80, files ofiles WHERE user_profilepics.display420 = f420.fileid AND user_profilepics.display220 = f220.fileid AND user_profilepics.display220 = f110.fileid AND user_profilepics.display80 = f80.fileid AND user_profilepics.orig = ofiles.fileid AND user_profilepics.userid = 2 AND removed IS NULL ORDER BY ismain IS FALSE, added DESC; 3.92ms
SELECT languages.iso639, languages.name, languages.nativename, user_languages.proficiency FROM languages, user_languages WHERE user_languages.iso639 = languages.iso639 AND userid = 2 ORDER BY name; 1.11ms
SELECT user_locations.id, user_locations.name, user_locations.address, user_locations.postcode, user_locations.ccode, countries.name AS countryname, user_locations.sccode, subcountries.name AS subcountryname, user_locations.city, user_locations.localtz FROM user_locations LEFT OUTER JOIN countries ON (user_locations.ccode = countries.ccode) LEFT OUTER JOIN subcountries ON (user_locations.ccode = subcountries.ccode AND user_locations.sccode = subcountries.sccode) WHERE user_locations.id = 13 ORDER BY user_locations.name; 1.36ms
SELECT ip, netblock, netname, country, descr, orgname, cidr FROM ip_cache WHERE ip = '38.103.63.17' AND cached > now() - interval '120 hours' ORDER BY cached DESC LIMIT 1; 1.11ms
INSERT INTO ip_cache (ip, netblock, netname, country, descr, orgname, cidr) VALUES ('38.103.63.17', '38.0.0.0 - 38.255.255.255', 'PSINETA', 'US', NULL, 'Performance Systems International Inc.', '38.0.0.0/8 '); 2.95ms
SELECT groupid, fpath, fpath AS sname, name, description, access, released FROM menugroups ORDER BY groupid; 0.98ms
SELECT groupid, itemid, title, fpath, display, access, released FROM menu ORDER BY groupid, itemid; 0.84ms
SELECT locales.code, locales.iso639, locales.iso15924, locales.ccode, locales.isalias, locales.translations, locales.complete, locales.approved, locales.resolution_path FROM locales ORDER BY code; 3.43ms
SELECT languages.iso639, languages.name, languages.nativename, COUNT(locales.iso639) AS localecount FROM languages LEFT OUTER JOIN locales ON (languages.iso639 = locales.iso639) GROUP BY languages.iso639, languages.name, languages.nativename ORDER BY languages.name; 2.47ms
SELECT ccode, name FROM countries ORDER BY name; 1.37ms
SELECT language_scripts.iso15924, language_scripts.name FROM language_scripts ORDER BY name; 0.89ms
SELECT textoutput.outputid, textoutput.english, textoutput.context, translations.transid, translations.translation FROM textoutput LEFT OUTER JOIN translations ON (translations.outputid = textoutput.outputid AND translations.locale = 'en_US' AND removedby IS NULL) ORDER BY english; 1.92ms
SELECT textoutput.outputid, textoutput.english, textoutput.context, translations.transid, translations.translation FROM textoutput LEFT OUTER JOIN translations ON (translations.outputid = textoutput.outputid AND translations.locale = 'en' AND removedby IS NULL) ORDER BY english; 0.40ms
SELECT textoutput.outputid, textoutput.english, textoutput.context, translations.transid, translations.translation FROM textoutput LEFT OUTER JOIN translations ON (translations.outputid = textoutput.outputid AND translations.locale = 'root' AND removedby IS NULL) ORDER BY english; 0.38ms
SELECT current_timestamp AT TIME ZONE 'Asia/Bangkok' AS ts; 0.47ms
SELECT blogs.entryid, blogs_sites.siteid, blogs.entrytime, blogs.synopsis, blogs.comments, blogs.showcomments, blogs.published, blogs.firstpublished, blogs.private, blogs.comments, blogs.commentlimit, blogs.commentlimit_user, blogs.showcase, blogs.title, blogs.body, COUNT(comments.commentid) AS commentcount, blogs.allowhtml FROM blogs_sites, blogs LEFT OUTER JOIN comments ON (blogs.entryid = comments.entryid AND comments.rootcomment IS FALSE) WHERE blogs.entryid = blogs_sites.entryid AND blogs_sites.siteid = 1 AND trashed IS NULL AND deleted IS NULL AND published IS TRUE GROUP BY blogs.entryid, blogs_sites.siteid, blogs.entrytime, blogs.title, blogs.body, blogs.synopsis, blogs.comments, blogs.showcomments, blogs.published, blogs.firstpublished, blogs.private, blogs.comments, blogs.commentlimit, blogs.commentlimit_user, blogs.showcase, blogs.allowhtml ORDER BY blogs.published IS TRUE, blogs.entrytime DESC LIMIT 5; 9.71ms
SELECT tags.tagid, tags.tag FROM tags, tags_blog_entries WHERE tags_blog_entries.tagid = tags.tagid AND tags_blog_entries.entryid = 185 ORDER BY tags.tag; 1.51ms
SELECT tags.tagid, tags.tag FROM tags, tags_blog_entries WHERE tags_blog_entries.tagid = tags.tagid AND tags_blog_entries.entryid = 177 ORDER BY tags.tag; 0.50ms
SELECT tags.tagid, tags.tag FROM tags, tags_blog_entries WHERE tags_blog_entries.tagid = tags.tagid AND tags_blog_entries.entryid = 174 ORDER BY tags.tag; 0.49ms
SELECT tags.tagid, tags.tag FROM tags, tags_blog_entries WHERE tags_blog_entries.tagid = tags.tagid AND tags_blog_entries.entryid = 173 ORDER BY tags.tag; 0.48ms
SELECT tags.tagid, tags.tag FROM tags, tags_blog_entries WHERE tags_blog_entries.tagid = tags.tagid AND tags_blog_entries.entryid = 170 ORDER BY tags.tag; 0.46ms
INSERT INTO security (remoteip, netblock, netname, country, descr, orgname, cidr, level, sid, siteid, userid, get, post, session, server, title, details) VALUES ('38.103.63.17', '38.0.0.0 - 38.255.255.255', 'PSINETA', 'US', NULL, 'Performance Systems International Inc.', '38.0.0.0/8 ', 1, 'eac22e569f6d8a657dae2805dfd46c14', 1, NULL, NULL, NULL, NULL, NULL, 'Homepage viewed', 'Homepage for siteid 1 viewed by an anonymous guest.'); 1.90ms
Total DB Exec time: 193.67ms
Total non-DB Exec time: 1,069.50ms
GET Variables
Array
(
)
POST Variables
Array
(
)
SESSION Variables
Array
(
    [sysconf] => Array
        (
            [dbname] => twerl
            [dbuser] => postgres
            [dbpass] => postgres
            [db_master] => localhost
            [db_locale] => localhost
            [db_translation] => localhost
            [whoisips] => yes
            [maindomain] => twerl.com
            [fileservers] => www.twerl.com
            [tmp] => /tmp/
            [gfr] => /data/gfr/mrnaz/
            [cldr] => ./i18n/cldr/core/
            [translations] => ./i18n/translations/
            [trans_mode] => db
            [trans_collect] => no
            [trans_collect_calls] => no
            [date_full] => l, jS F Y
            [date_long] => D, jS M y
            [date_medium] => jS F Y
            [date_short] => j M y
            [time_long] => g:ia
            [time_short] => g:ia
            [firstweekday] => Monday
            [blog_home] => 5
            [blog_full] => 10
            [blog_entrylist] => 20
            [blog_months] => 12
            [profilepic] => 220
            [profilepicqual] => 88
            [maxprofilepiccount] => 8
            [optsize] => 1024
            [optqual] => 90
            [thumbsize] => 130
            [thumbqual] => 85
            [exif_fields] => DateTime,Width,Height,ExposureTime,FocalLengthIn35mmFilm,FocalLength,FNumber,Flash,Make,Model
            [authcode_ttl] => 24
            [sms_default_from] => Twerl
            [smsglobal_user] => Currently hardcoded
            [smsglobal_pass] => Currently hardcoded
            [smsglobal_ips] => 203.89.193.162
            [61427016261] => input
            [location_view_min_age] => 18
            [imap_check_interval] => 600
            [imap_headers_per_page] => 20
        )

    [userdets] => Array
        (
            [shortname] => 
            [active] => t
            [isadmin] => f
            [siteid] => 
            [username] => 
            [current_location_info] => Array
                (
                    [name] => 
                    [address] => 
                    [postcode] => 
                    [country] => 
                    [city] => 
                    [localtz] => Array
                        (
                            [name] => GMT
                            [abbrev] => GMT
                            [utc_offset] => 00:00:00
                            [is_dst] => f
                            [offset] => GMT
                            [display_short] => GMT
                            [display_full] => GMT
                            [display_verbose] => GMT GMT (GMT)
                        )

                )

            [date_full] => l, jS F Y
            [date_long] => D, jS M y
            [date_medium] => jS F Y
            [date_short] => j M y
            [time_long] => g:ia
            [time_short] => g:ia
            [firstweekday] => Monday
            [locale] => 
        )

    [siteid] => 1
    [sitedets] => Array
        (
            [siteid] => 1
            [name] => MrNaz Online
            [description] => 
            [other] => 
            [owner] => 2
            [journal_allowhtml] => t
            [journal_private] => 1
            [journal_comments] => 1
            [journal_showcomments] => 1
            [journal_commentlimit] => 0
            [journal_commentlimit_user] => 0
            [journal_show_posting_permissions] => t
            [journal_default_text_mode] => plain
            [photos_private] => 1
            [photos_comments] => 1
            [photos_showcomments] => 1
            [photos_shownames] => 4
            [photos_commentlimit] => 0
            [photos_commentlimit_user] => 0
            [photos_show_posting_permissions] => t
            [scheduler_pastentrylifespan] => 0
            [contacts_default_country] => 
            [articles_comments] => 1
            [articles_showcomments] => 2
            [articles_commentlimit] => 0
            [articles_commentlimit_user] => 0
            [misc_qotd] => B
            [journal_tag_selectors] => 30
            [datetime_long] => FMDay, FMDDth FMMonth YYYY - FMHH12:MIpm
            [datetime_short] => FMDy, FMDD FMMon YYYY - FMHH12:MIpm
            [date_long] => FMDay, FMDDth FMMonth YYYY
            [date_short] => FMDy, FMDD FMMon YYYY
            [timeformat] => FMHH12:MIpm
            [scheduler_alarm_time] => 120
            [todo_advanced] => t
            [notes_file_uploads] => 1
            [todo_file_uploads] => 1
            [journal_index_type] => showcase
            [username] => naz
            [mobile_numbers] => Array
                (
                    [61400460662] => Array
                        (
                            [id] => 5
                            [number] => 61400460662
                            [ismain] => t
                            [authcode] => ARWWN5
                            [authcode_issued] => 2007-11-18 10:07:42.173097+00
                            [activated] => 2007-11-18 10:08:06.759627+00
                        )

                    [66844697835] => Array
                        (
                            [id] => 2
                            [number] => 66844697835
                            [ismain] => f
                            [authcode] => TR28UE
                            [authcode_issued] => 2007-11-13 07:12:00.026983+00
                            [activated] => 2007-11-13 08:03:31.84924+00
                        )

                )

            [imap_accounts] => Array
                (
                    [nazeergassiep@gmail.com] => Array
                        (
                            [id] => 2
                            [siteid] => 1
                            [emailaddress] => nazeergassiep@gmail.com
                            [replyto] => 
                            [signature] => 
                            [displayname] => Nazeer Gassiep
                            [imap_server] => imap.gmail.com
                            [port] => 993
                            [encryption] => SSL
                            [authenticate] => f
                            [username] => nazeergassiep
                            [passwd] => F3d3ral3
                            [deleted] => 
                        )

                )

        )

    [ownerdets] => Array
        (
            [userid] => 2
            [username] => naz
            [passwd] => F3d3ral3
            [membersince] => 2007-04-26 09:54:33.133259+00
            [title] => 
            [name] => Nazeer
            [surname] => Gassiep
            [fullname_view] => 1
            [shortname] => MrNaz
            [dob] => 1979-12-04
            [age_view] => 1
            [gender] => t
            [photo] => 10245
            [address] => 5 Picadilly Place.
Wheelers Hill
            [postcode] => 3150
            [ccode] => AU
            [address_view] => 4
            [homephone] => +61 3 9562 2919
            [workphone] => +61 3 9783 3011
            [mobilephone] => +61 400 460 662
            [phone_view] => 4
            [fax] => 
            [email] => naz@mira.net
            [email_view] => 4
            [icq] => 1885523
            [msn] => mrnaz@hotmail.com
            [aim] => 
            [yahoo] => mrnazdotcom
            [skype] => mr_naz
            [aboutme] => My Mum says I'm cool!
            [interests] => I'm pretty interesting!
            [hobbies] => I have hobbies!
            [favoritemovies] => I like movies!
            [favoritemusic] => MTV sucks!
            [favoritebooks] => I liek reeding!
            [favoritetvshows] => What's a tee vee?
            [active] => t
            [photo_view] => 1
            [hometz] => Australia/Victoria
            [date_long] => 
            [date_short] => 
            [im_view] => 1
            [city] => Melbourne
            [current_activity] => 
            [current_location_view] => 4
            [current_location] => 13
            [isadmin] => t
            [sccode] => VIC
            [firstweekday] => Monday
            [locale] => en_AU
            [require_auth] => t
            [date_full] => 
            [date_medium] => 
            [time_short] => g:ia
            [time_long] => g:ia
            [isadmin_forums] => t
            [profile_view] => 1
            [displayname] => MrNaz
            [fullname] => Nazeer Gassiep
            [age] => 28 years 5 mons 17 days
            [dobyear] => 1979
            [dobmonth] => 12
            [dobday] => 4
            [siteid] => 1
            [sitename] => MrNaz Online
            [countryname] => Australia
            [subcountryname] => Victoria
            [logintime] => 2008-05-21 15:20:50.688037+00
            [ip_addr] => 124.168.57.213
            [ip_country] => AU
            [currentasof] => 2008-05-21 23:18:17.261292+00
            [hometz_details] => Array
                (
                    [name] => Australia/Victoria
                    [abbrev] => EST
                    [utc_offset] => 10:00:00
                    [is_dst] => f
                    [offset] => GMT+10
                    [display_short] => GMT+10 (EST)
                    [display_full] => GMT+10 EST (Australia/Victoria)
                    [display_verbose] => GMT+10 EST (Australia/Victoria)
                )

            [profilepics] => Array
                (
                    [0] => Array
                        (
                            [id] => 17
                            [ismain] => t
                            [file420id] => 12915
                            [file420name] => pink_hat.jpg
                            [file220id] => 12916
                            [file220name] => pink_hat.jpg
                            [file110id] => 12917
                            [file110name] => pink_hat.jpg
                            [file80id] => 12918
                            [file80name] => pink_hat.jpg
                            [origfileid] => 12914
                            [origfilename] => pink_hat.jpg
                            [origmd5] => e5856e66aa0f1b940e110515a70ff44a
                            [origsha1] => cef40e9198b881e18a08a18261ba6a6c36fe23b0
                        )

                    [1] => Array
                        (
                            [id] => 19
                            [ismain] => f
                            [file420id] => 12925
                            [file420name] => scooter.JPG
                            [file220id] => 12926
                            [file220name] => scooter.JPG
                            [file110id] => 12927
                            [file110name] => scooter.JPG
                            [file80id] => 12928
                            [file80name] => scooter.JPG
                            [origfileid] => 12924
                            [origfilename] => scooter.JPG
                            [origmd5] => 9b9c14158439eaac959e0ef4b8ca1a33
                            [origsha1] => 247d9dc1ce555b82316daf37e8bdb9fff92caa8a
                        )

                    [2] => Array
                        (
                            [id] => 11
                            [ismain] => f
                            [file420id] => 10368
                            [file420name] => selaron.JPG
                            [file220id] => 10369
                            [file220name] => selaron.JPG
                            [file110id] => 10370
                            [file110name] => selaron.JPG
                            [file80id] => 10371
                            [file80name] => selaron.JPG
                            [origfileid] => 10367
                            [origfilename] => selaron.JPG
                            [origmd5] => 02055267a995a0f8be7d1d58e911b415
                            [origsha1] => 31e4b386b5f7f0991f5f7bcff4808476ad97a5b4
                        )

                    [3] => Array
                        (
                            [id] => 10
                            [ismain] => f
                            [file420id] => 10363
                            [file420name] => CIMG1036.JPG
                            [file220id] => 10364
                            [file220name] => CIMG1036.JPG
                            [file110id] => 10365
                            [file110name] => CIMG1036.JPG
                            [file80id] => 10366
                            [file80name] => CIMG1036.JPG
                            [origfileid] => 10362
                            [origfilename] => CIMG1036.JPG
                            [origmd5] => 159c337bce62b4743b394f81f568a1ae
                            [origsha1] => 3cda0fb4c2461537afc236ca89342666f02eafa2
                        )

                    [4] => Array
                        (
                            [id] => 4
                            [ismain] => f
                            [file420id] => 10332
                            [file420name] => CIMG2997.JPG
                            [file220id] => 10333
                            [file220name] => CIMG2997.JPG
                            [file110id] => 10334
                            [file110name] => CIMG2997.JPG
                            [file80id] => 10335
                            [file80name] => CIMG2997.JPG
                            [origfileid] => 10331
                            [origfilename] => CIMG2997.JPG
                            [origmd5] => 77281b64ead121ade8b000ed34b9e001
                            [origsha1] => 61d683c0dc8861f19185d55cae46d9a236805f74
                        )

                    [5] => Array
                        (
                            [id] => 3
                            [ismain] => f
                            [file420id] => 10327
                            [file420name] => bouncers.JPG
                            [file220id] => 10328
                            [file220name] => bouncers.JPG
                            [file110id] => 10329
                            [file110name] => bouncers.JPG
                            [file80id] => 10330
                            [file80name] => bouncers.JPG
                            [origfileid] => 10326
                            [origfilename] => bouncers.JPG
                            [origmd5] => 75ec8d791c15f79f488b8ad23f833acd
                            [origsha1] => 42a0b9efa59095861d76ea684c46b01d61162a78
                        )

                    [6] => Array
                        (
                            [id] => 2
                            [ismain] => f
                            [file420id] => 10322
                            [file420name] => CIMG2383.JPG
                            [file220id] => 10323
                            [file220name] => CIMG2383.JPG
                            [file110id] => 10324
                            [file110name] => CIMG2383.JPG
                            [file80id] => 10325
                            [file80name] => CIMG2383.JPG
                            [origfileid] => 10321
                            [origfilename] => CIMG2383.JPG
                            [origmd5] => 42908a1cbe633907ac592cf251bf7567
                            [origsha1] => f8338efee15d86036d6b1d216822310aadbc95cb
                        )

                    [7] => Array
                        (
                            [id] => 1
                            [ismain] => f
                            [file420id] => 10317
                            [file420name] => CIMG2389.JPG
                            [file220id] => 10318
                            [file220name] => CIMG2389.JPG
                            [file110id] => 10319
                            [file110name] => CIMG2389.JPG
                            [file80id] => 10320
                            [file80name] => CIMG2389.JPG
                            [origfileid] => 10316
                            [origfilename] => CIMG2389.JPG
                            [origmd5] => a620fd5f5680ad39e77d10b10af7ba50
                            [origsha1] => a33bd74eeaa9176fd20ab74ecd7f4903b82f358b
                        )

                )

            [languages] => Array
                (
                    [en] => Array
                        (
                            [iso639] => en
                            [name] => English
                            [nativename] => 
                            [proficiency] => F
                        )

                    [es] => Array
                        (
                            [iso639] => es
                            [name] => Spanish
                            [nativename] => EspaƱol
                            [proficiency] => I
                        )

                )

            [current_location_info] => Array
                (
                    [id] => 13
                    [name] => Krabi
                    [address] => 
                    [postcode] => 
                    [ccode] => TH
                    [countryname] => Thailand
                    [sccode] => 81
                    [subcountryname] => Krabi
                    [city] => Krabi
                    [localtz] => Array
                        (
                            [name] => Asia/Bangkok
                            [abbrev] => ICT
                            [utc_offset] => 07:00:00
                            [is_dst] => f
                            [offset] => GMT+7
                            [display_short] => GMT+7 (ICT)
                            [display_full] => GMT+7 ICT (Asia/Bangkok)
                            [display_verbose] => GMT+7 ICT (Asia/Bangkok)
                        )

                )

        )

    [locale] => en_US
    [accesslevel] => 1
)
COOKIE Variables
Array
(
)
SERVER Variables
Array
(
    [HTTP_HOST] => www.mrnaz.com
    [HTTP_USER_AGENT] => CCBot/1.0 (+http://www.commoncrawl.org/bot.html)
    [HTTP_ACCEPT] => Accept: application/xhtml+xml,text/html;q=0.9,text/plain;
    [HTTP_ACCEPT_LANGUAGE] => en-us,en;q=0.5
    [HTTP_ACCEPT_ENCODING] => gzip
    [HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.7
    [HTTP_CONNECTION] => close
    [HTTP_CACHE_CONTROL] => no-cache
    [HTTP_PRAGMA] => no-cache
    [PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11
    [SERVER_SIGNATURE] => <address>Apache/2.0.59 (Unix) mod_ssl/2.0.59 OpenSSL/0.9.7k Server at www.mrnaz.com Port 80</address>

    [SERVER_SOFTWARE] => Apache/2.0.59 (Unix) mod_ssl/2.0.59 OpenSSL/0.9.7k
    [SERVER_NAME] => www.mrnaz.com
    [SERVER_ADDR] => 211.27.224.180
    [SERVER_PORT] => 80
    [REMOTE_ADDR] => 38.103.63.17
    [DOCUMENT_ROOT] => /www/htdocs/mrnaz.com
    [SERVER_ADMIN] => mrnaz@hotmail.com
    [SCRIPT_FILENAME] => /www/htdocs/mrnaz.com/index.php
    [REMOTE_PORT] => 40991
    [GATEWAY_INTERFACE] => CGI/1.1
    [SERVER_PROTOCOL] => HTTP/1.1
    [REQUEST_METHOD] => GET
    [QUERY_STRING] => 
    [REQUEST_URI] => /
    [SCRIPT_NAME] => /index.php
    [PHP_SELF] => /index.php
    [REQUEST_TIME] => 1211411897
    [argv] => Array
        (
        )

    [argc] => 0
)
FILES Variables
Array
(
)
Filtered Timezone List