North, North We Go

Since the weather here in Atlanta hasn’t been perfect, we are going to Ottawa, Canada for a week. I hear they have nice weather there this time of the year.

Do I have any Ottawan readers? Would anyone like to meet for coffee or something?

Also, is there anything to see in Ottawa? My only conditions are that it be interesting, indoors safe from the elements and friendly to my baby-toting self.

Assuming my hotel room has an Internet connection, blogging might pick up pace since I might have to stay in my room all week.

Brazilian Steakhouse

Last week, Amber and I went to Fogo de Chão for dinner. It is a Brazilian steakhouse tradition known as “Churrasco.” According to the restaurant website:

Churrasco (shoo – rás – ko) has been a culinary tradition for more than three centuries in Rio Grande do Sul (Southern Brazil). In the olden days, “Gaúchos” (Southern Brazilian cowboys) pierced large pieces of meat and slowly roasted them over open flamed pits, while talking about their adventures on the plains.

It is fun the way they serve you at these restaurants. Waiters go around carrying meat on skewers and stop to offer you some if you have the card on your table set to green (“go”). Then they’ll cut a slice of meat right there on the table. When you want a break, which you do since the waiters come very frequently, you flip the card to its red side.

Not only is the meat very good, the salad bar is great too. I have been to another Brazilian steakhouse before, but it was Amber’s first time and I had a feeling she would fill up on the salad. That is exactly what happened. I, on the other hand, had skipped lunch to gorge on the meat.

Atlanta is sort of becoming the capital for these Brazilian restaurants in recent years. There are at least 5 churrascarias here now that I know of.

Highly recommended, though expensive. Dinner alone costs $45 per person. Add drinks and dessert and it could be much higher.

ٹریک بیک اور یونیکوڈ

موویبل ٹائپ ‫Movable Type‎ میں ٹریک‌بیک Trackbacks‎ ایک عجب مسئلہ ہیں۔ کیونکہ ٹریک‌بیک یہ نہیں بتاتا کہ وہ کس زبان یا encoding میں ہے اس لئے اگر آپ مجھے پنگ کرتے ہیں اور آپ ISO-8859-1 استعمال کر رہے ہیں …‬

موویبل ٹائپ (Movable Type) میں ٹریک بیک (Trackbacks) ایک عجب مسئلہ ہیں۔ کیونکہ ٹریک بیک یہ نہیں بتاتا کہ وہ کس زبان یا encoding میں ہے اس لئے اگر آپ مجھے پنگ کرتے ہیں اور آپ ISO-8859-1 استعمال کر رہے ہیں جبکہ میرا بلاگ UTF-8 میں ہے تو آپ کا پنگ صحیح نہیں لگے گا اور میرے صفحے کو invalid کر دے گا۔

اس کے علاوہ موویبل ٹائپ یہ گڑبڑ کرتا ہے کہ ٹریک بیک کے خلاصے کو ۲۵۲ حرفوں پر محدود کرتا ہے۔ مگر ان کا یہ کرنے کا طریقہ غلط ہے۔ حرف کی بجائے وہ بائٹ (byte) استعمال کرتے ہیں۔ یونیکوڈ میں ایک حرف کئی بائٹس پر مشتمل ہو سکتا ہے۔

جیک ڈسٹلر (Jacques Distler) اس کا حل سوچ رہے ہیں۔ اس پوسٹ سے میں ان کا حل آزمانا چاہتا ہوں۔

Michelle at 6 Months

Time flies, Michelle gets older and bigger so fast. Or it stops when she can’t be consoled. The last six months have been very different from any other 6 months of my life.

I have established a great bond with Michelle. She spends most of the day with me and we have a great time. Yes, there are frustrations and problems, like the teething she is doing again after which she’ll have 3—4 teeth. There is also the feeding issue. Michelle is very moody about her feeding habits. It requires a lot of patience and effort to feed her. You can see that she is hungry but she’ll refuse the bottle or the breast if it is not offered at the exact time she wants.

Michelle is also very attentive and observant. She is not afraid of people or dogs. The only thing that startles her is loud noise, including loud and sudden laughter. She behaves well with lots of people at parties or at the doctor’s, turning around and observing everyone.

A few days ago, while walking in the apartment complex with Michelle in the Baby Bjorn carrier, two dogs came running to us and started sniffing my feet. I thought Michelle would get scared, but she was just looking interestedly at the dogs and their antics. Even when one dog tried to reach up, Michelle didn’t bat an eye.

Michelle is also interested in everything we are holding. It can be a Coke can, a book, our dinner plate, TV remote control or my laptop. She has her favorites which include the laptop and Coke can. She likes to use the mouse, use the keyboard and close the laptop.

She also likes new toys better than old ones. If she has started playing with a new toy and you offer her another new one, she forgets the one she was playing with and takes the one from you.

Michelle is aware of the camera and likes to pose for it nowadays. This can be a problem sometimes as we want to take more “natural” pictures of her. She also likes looking in the mirror a lot (which is why the changing station is one of her favorite places) and at photographs.

She can sit now but still not for too long. The maximum she has sat without support would probably be around 10 minutes or so. With a bit of support she can sit continuously. She likes to sit much more than lying down. While sitting when she tries to reach out to get a toy, she balances herself on one hand.

She can even stand when she wants to, though it is for seconds, not minutes and with a support. We haven’t been able to get good photographic evidence of that because of her camera awareness.

Solid food is progressing by fits and starts. Sometimes, Michelle takes more and at other times less. We have found something that she really hates. When I gave her lamb (Gerber’s baby food jar), she hated it so much she made barfing sounds and even threw up. So lamb is out for the present.

Neck control at 4 months
Lots of fun
Another Coke drinker in the family
High chair
Georgia Tech Baby
Enjoying the chair
So many things, only two hands
Very Cute
Look at her teeth
Michelle and me
I can hold my head high
I can sit
Pretending to read
 

Front-end and Back-end Changes

There have been a lot of changes here recently, most of them on the back-end. Most of this work was related to having a bilingual (English and Urdu) blog along with MathML equations. This required valid XHTML 1.1 and serving the site as application/xhtml+xml as described before.

One strange artifact of a good CSS/XHTML design is that something doesn’t show up correctly in Microsoft Internet Explorer. I got two problems.

  • One was the lack of the lang() pseudo-class selector in MSIE. Therefore, I had to style Urdu text using a class for MSIE.
  • Another bizarre effect was that the calendar on the right sidebar overflowed in MSIE. I have fixed that if you are using medium or smaller fonts.

I also changed the Reading list and movie list archive pages so that they show an excerpt from my review on the main blog instead of just showing the book or movie titles. I used the multiblog plugin for the purpose. I found two issues with the plugin:

  1. I couldn’t use MT tags as the entry ID argument in multiblog to specify which entry should be shown from my main blog. That was fixed with a couple of lines of code.
  2. Multiblog has a bug where it displays entries from the other blog regardless of whether they are draft or published. I didn’t know how to fix that in the plugin code, so I am using <MTIfEqual> from the Compare plugin along with the <MTEntryStatus> tag to filter out the unpublished entries.

My category pages were becoming huge. The photography archive was more than 1MB in size while a couple of other categories were more than 500KB. So instead of showing the whole entry text in the category archives, I am now showing only an excerpt.

I also wanted to change the category and monthly archives to dynamic. However, in Movable Type’s implementation, most of the plugins would not work and that was unacceptable. So they are going to stay static.

I patched lib/MT/Entry.pm so that I could send trackbacks to my own entries. This way, when I write a new entry about something that I have written about before, I won’t have to update the old entry with a link to the new one. Instead that would happen with the trackback.

Like a lot of recent changes, I got the weather forecast from Jacques Distler. I am showing the current weather and the 2-day forecast for Atlanta from the National Weather Service on the sidebar on the main page.

To enhance the reader experience, I have added small logos to posts containing Urdu or MathML. Clicking on these logos will open a window telling you how you can view MathML or Urdu content nicely. I stole this idea (and the MathML logo) from Jacques Distler.

I have also added instructions about how to comment in Urdu, write Math in the comments, or PGP sign your comment.

I am trying to increase the Urdu content and interface of the blog to make it truly bilingual. As a first step, the date headers and category names are bilingual. I had to add the month and week names in Urdu to lib/MT/Util.pm. For the categories, I am using the category description as the field for the Urdu version of the category title.

Along with the list of the number of entries, comments and pings, I added a counter showing how long this blog has been up in the blog statistics section on the right sidebar on the main page using the Countdown and MTSQL plugins.

As for valid XHTML, everything in the zackvision.com domain is XHTML 1.1 + MathML 2.0 valid and served as application/xhtml+xml. This includes cgi pages, which broke Typekey. Validating individual archive pages with the comments and trackbacks wasn’t as difficult as I thought it would be because I am using the textile plugin. Ampersands were the main problem in trackbacks.

Another issue with trackbacks is that Unicode Urdu (or Farsi) text in the trackback excerpt seems to generate invalid characters because the character count doesn’t work as expected. I don’t think it is a MT problem as it happened with trackbacks from WordPress as well as Typepad.

The only exception to the valid pages are the popup photos. The default uploaded image popup template is horribly invalid. I have managed to write my own template to fix that, but changing the code for all the photos I have put on the blog for more than 2 years is not that easy.

Another place that doesn’t generate valid XHTML 1.1 is the <MTCommentFields> code in lib/MT/Template/Context.pm, which I have modified as well.

Serving my pages as application/xhtml+xml had broken the Google ads on my individual entry pages. They work now thanks to Keystone Websites.

First, the MIME type broke the Typekey commenting because of the use of document.write in the commenting part of the individual entry archive. I fixed it with PHP-Typekey. But serving mt-comments.cgi as application/xhtml+xml broke it badly. So I have removed Typekey since almost no one uses it.

Since application/xhtml+xml requires the served page to be valid or it breaks badly showing an error message instead of the page, I am now requiring comments to be valid XHTML. I have installed MTValidate for the purpose. The plugin wasn’t able to find sgml-lib until I changed its path in the config file to an absolute path instead of a relative one, but it works beautifully now. Since MT-Textile 2 filter is the default for comments, most comments should validate easily.

The next step was to force commenters to preview the comment first (and after any changes.) I am doing that with MTHash. An added benefit of this plugin is that it should stop bot-submitted comment spam.

Another counter-measure for spam is Jacques’s version of MT-DSBL which blocks comments and trackbacks from open proxies. This should be especially useful against trackback spam which is a general weak point in the fight against spam.

I have also installed the Real Comment Throttle plugin and set OneHourMaxPings and OneDayMaxPings in mt.cfg as a defense against crap-flooding of comments and trackbacks.

The nofollow plugin seemed useful when it was released. I installed it at first but removed it when I realized that all comment links were getting rel="nofollow", even including comments by me.

Another enhancement to the commenting system is the OpenPGPComment plugin. Installing the Perl module Crypt::OpenPGP required for this plugin was a big hassle. CPAN shell with the LIB variable to mt/extlib did not work. Actually I couldn’t install it at all with the CPAN shell. So I downloaded all the required modules and installed them manually. During this process, I found out that Crypt::Random was throwing up errors. The patch in this bug thread fixed the problem and the rest was easy.

So how can you sign your comment? Here are some instructions. I use GPGshell with a back-end of GnuPG. I have set the options to word wrap off and UTF-8 character set. With GPGshell, I can clear-sign current window contents (like the comment textarea) as well as clipboard contents. However, GPGshell has Unicode issues, so you can’t clear-sign Urdu text.

A final enhancement is the ability to write itex (a dialect of LaTeX) code in comments. This allows you to write all sort of equations to explain your argument better. 🙂 This was made possible by the extensive work done by Jacques Distler to let every commenter switch the comment text filter.

North Georgia Pictures

A friend and I went hiking on Christmas day to the Woody Gap, just north of Suches, GA on Route 60. It is an enjoyable, easy-to-moderate hike. Fortunately I am not a seriously practicing Muslimah or hiking would not be for me.

Anyway, better late than never, here are some photographs.

Blood Mountain Wilderness
Is this ice?
Zack
A view of North Georgia mountains
Air bubbles frozen in ice
Frozen water on the ground
Frozen Waterfall
More Frozen Water
 

And here are two panoramic views from the trail. Both were generated from the same set of six photos taken at the same settings but without a tripod.

The first one was generated from the Photomerge feature of Adobe Photoshop Elements 2.0. In my experience, Photoshop Elements does not do a very good job as it does not have lens models and such.

Panoramic view of Georgia mountains using PSE

The second one was automatically generated by Photovista Panorama. I was disappointed by the quality of its output here. In some ways, it is better than the Photoshop one, but there are still too many artifacts.

Panoramic view of Georgia mountains using Photovista

Which one do you think is better?

What Kind of Elitist Are You?

Book and language snob

You speak eloquently and have seemingly read every book ever published. You are a fountain of endless (sometimes useless) knowledge, and never fail to impress at a party.
What people love: You can answer almost any question people ask, and have thus been nicknamed Jeeves.
What people hate: You constantly correct their grammar and insult their paperbacks.

What Kind of Elitist Are You?
brought to you by Quizilla

Via Foreign Dispatches.