<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8879200</id><updated>2011-11-28T06:01:48.106+05:30</updated><category term='mobile'/><category term='Andoid'/><category term='javascript safari mac'/><category term='javascript'/><category term='xmpp'/><category term='debugging'/><category term='core'/><category term='pmap'/><category term='ipad'/><category term='voip'/><category term='gtalk'/><category term='privacy'/><category term='advertising'/><category term='dbx'/><category term='http'/><category term='chrome'/><category term='urdu'/><category term='behavioral'/><category term='bluetooth'/><category term='iphone'/><category term='ibooks'/><category term='python'/><category term='unix'/><category term='Linux'/><category term='mac'/><category term='GPS'/><category term='zen'/><category term='doubleclick'/><category term='unix rsync ssh mac'/><category term='fail'/><category term='Android'/><category term='solaris'/><category term='dtrace'/><category term='IM'/><category term='google'/><title type='text'>thruput</title><subtitle type='html'>Garbage In - Garbage Out</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>55</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8879200.post-2061117847874813230</id><published>2011-10-16T10:10:00.003+05:30</published><updated>2011-10-16T10:12:50.154+05:30</updated><title type='text'>moving to github</title><content type='html'>After experimenting for a few weeks with github, have decided to make a switch. This blog moves to &lt;a href="http://qzaidi.github.com"&gt;qzaidi.github.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You will see fewer posts here, and more of them on qzaidi.github.com.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-2061117847874813230?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/2061117847874813230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=2061117847874813230' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/2061117847874813230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/2061117847874813230'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2011/10/moving-to-github.html' title='moving to github'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-3049361447113421314</id><published>2011-04-07T16:54:00.005+05:30</published><updated>2011-04-07T17:21:32.631+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='http'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='privacy'/><title type='text'>Google Encrypted - killing the competition, one step at a time</title><content type='html'>Today, when I opened google search, it redirected me to a new URL&lt;br /&gt;&lt;br /&gt;https://encrypted.google.com/&lt;br /&gt;&lt;br /&gt;At the face of it, its an innocuous attempt by google, seemingly a very well intentioned one that provides end to end privacy for search users. But Google no longer looks like a company whose motto is 'Do No Evil' (Ref: Wifi Gate, Google Buzz), so I take this with a pinch of salt. &lt;br /&gt;&lt;br /&gt;I think the real intent here is to make sure that Referrer data is not passed along when you click on a search result. For the technically challenged, the REFERER header is an HTTP header sent to the server when requesting a resource, that tells who referred this client. When you click on a search result and go to foobar.com, foobar.com will get a REFERER header that would be google. With the move to SSL, this would not happen anymore, so foobar.com can't tell how many users landed when searching on google. Why would that happen? Because the protocol doesn't allows secure pages to pass REFERER information to insecure pages, and most pages on any search result page would be insecure.&lt;br /&gt;&lt;br /&gt;This is not the first time Google has tried to prevent information flow via the REFERER header. Why is this important? When you search on google and then click on a site, that site gets access to the REFERER header, which lets them know you are coming from google, and also provides information on which search terms brought you to their site. The content publisher then knows what percentage of organic search traffic they are getting, and what keywords are important. There are a host of site analytics tools that use REFERER for this reason. But that's not all. Any scripts running on the publisher page will also have this information, and ad networks can use this to build visitor profiles, do keyword targeting for search engine users, and what not. &lt;br /&gt;&lt;br /&gt;Bottom line - a lot of third parties benefiting from the presence of the REFERER header stand to lose, and lose a lot. The last time google did something like this (they removed search terms from the REFERER), it generated such a hue and cry and they had to rollback. This time, they will be doing it quitely, and they will get away in the name of Privacy. &lt;br /&gt;&lt;br /&gt;I am not arguing in the favor of Behavioral ad networks using that data in the name of relevance and targeting, but a case can be made for site owners and site analytics companies such as omniture. If google itself was not a player in the online advertising industry, I would still have taken them at their word. This change, however, ensures that only Google has access to the search terms, only Google Ads can use this data for targeting, and only Google AdSense can do search analytics. I wouldn't be surprised if SSL search becomes the default pretty soon. Do you think otherwise?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-3049361447113421314?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/3049361447113421314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=3049361447113421314' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/3049361447113421314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/3049361447113421314'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2011/04/google-encrypted-killing-competition.html' title='Google Encrypted - killing the competition, one step at a time'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-1923616113546715664</id><published>2010-12-26T18:03:00.002+05:30</published><updated>2010-12-26T18:07:26.659+05:30</updated><title type='text'>Google Fail</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dp61-rSKrQo/TRc22-TrvWI/AAAAAAAAAM0/Yxci-GwaBZg/s1600/Screen%2Bshot%2B2010-12-26%2Bat%2B5.54.36%2BPM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 391px; height: 59px;" src="http://4.bp.blogspot.com/_dp61-rSKrQo/TRc22-TrvWI/AAAAAAAAAM0/Yxci-GwaBZg/s400/Screen%2Bshot%2B2010-12-26%2Bat%2B5.54.36%2BPM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5554968983451188578" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-1923616113546715664?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/1923616113546715664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=1923616113546715664' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/1923616113546715664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/1923616113546715664'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2010/12/google-fail.html' title='Google Fail'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_dp61-rSKrQo/TRc22-TrvWI/AAAAAAAAAM0/Yxci-GwaBZg/s72-c/Screen%2Bshot%2B2010-12-26%2Bat%2B5.54.36%2BPM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-2131557427896604523</id><published>2010-12-09T00:22:00.009+05:30</published><updated>2010-12-09T02:05:14.597+05:30</updated><title type='text'>Iran Trip</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dp61-rSKrQo/TP_n88U-EVI/AAAAAAAAAMY/ZDMqMojnHHU/s1600/IMG_2080.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 300px; height: 400px;" src="http://3.bp.blogspot.com/_dp61-rSKrQo/TP_n88U-EVI/AAAAAAAAAMY/ZDMqMojnHHU/s400/IMG_2080.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5548408300115988818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I recently undertook a trip to Iran, and it was a great experience. It would be some time before I could write up my experience and advice in a travelogue (for those who are looking to take the road less traveled), but here are some of the pics from that trip. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dp61-rSKrQo/TP_WDgZYFcI/AAAAAAAAAMI/Pa8jHcFBF0w/s1600/IMG_2045.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_dp61-rSKrQo/TP_WDgZYFcI/AAAAAAAAAMI/Pa8jHcFBF0w/s400/IMG_2045.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5548388621668062658" /&gt;&lt;/a&gt; &lt;center&gt; Isfahan is the jewel of Iran, but its as bad as Tehran when it comes to not following traffic rules. &lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dp61-rSKrQo/TP_W_daOb9I/AAAAAAAAAMQ/f_1Ge3V_Xpg/s1600/IMG_2046.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 394px; height: 400px;" src="http://1.bp.blogspot.com/_dp61-rSKrQo/TP_W_daOb9I/AAAAAAAAAMQ/f_1Ge3V_Xpg/s400/IMG_2046.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5548389651658469330" /&gt;&lt;/a&gt; &lt;br/&gt;&lt;br/&gt;&lt;p&gt;The entrance of the Grand Mosque in Isfahan, overlooking the Imam Square (Meidun-e-Imam), undoubtedly the best square I have ever seen. For the record, it is the second largest square in the world, beaten only by the Tiananmen Square in China.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Its also known as Naghse Jahan Square (Image of the World), and its not hard to imagine here that you have gone back in time by a century. Very peaceful, very well maintained.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dp61-rSKrQo/TP_oQvGV1-I/AAAAAAAAAMg/PuDV22Ndk8A/s1600/STC_2086.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_dp61-rSKrQo/TP_oQvGV1-I/AAAAAAAAAMg/PuDV22Ndk8A/s400/STC_2086.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5548408640162355170" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And finally, I leave you with the magnificent Sio-se-pol (the 33 pillar Bridge). More if I manage to write a travelogue ...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dp61-rSKrQo/TP_pHZWOseI/AAAAAAAAAMo/qS_07OOMU3Q/s1600/IMG_2099.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_dp61-rSKrQo/TP_pHZWOseI/AAAAAAAAAMo/qS_07OOMU3Q/s400/IMG_2099.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5548409579216220642" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-2131557427896604523?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/2131557427896604523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=2131557427896604523' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/2131557427896604523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/2131557427896604523'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2010/12/iran-trip.html' title='Iran Trip'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dp61-rSKrQo/TP_n88U-EVI/AAAAAAAAAMY/ZDMqMojnHHU/s72-c/IMG_2080.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-2072667820685529174</id><published>2010-10-17T17:23:00.004+05:30</published><updated>2010-12-09T10:07:10.591+05:30</updated><title type='text'>In The Land Of The Ayatollahs Tupac Shakur Is King</title><content type='html'>&lt;table&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://www.flipkart.com/land-ayatollahs-tupac-shakur-king-book-0955235928?affid=qasimzaidi"&gt;&lt;br /&gt;&lt;img src="http://img3.fkcdn.com/img/924/9780955235924.jpg" alt="Buy In The Land Of The Ayatollahs Tupac Shakur Is King: Reflections From Iran And The Arab World, Shahzad Aziz, 0955235928" title="In The Land Of The Ayatollahs Tupac Shakur Is King: Reflections From Iran And The Arab World, Shahzad Aziz, 0955235928" /&gt;  &lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;I found the title of this book intriguing enough to &lt;a href="http://www.flipkart.com/land-ayatollahs-tupac-shakur-king-book-0955235928?affid=qasimzaidi"&gt; buy it&lt;/a&gt;. Its recommended by Lonely Planet, and I hope it would be a good read as I am planning to travel to Iran next month.&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;[update] I am half way through this book, and its indeed a great read. Beyond a travelogue, it offers a rare insight into the Middle East Nations (Besides Iran, it covers Syria, Jordan, Lebanon and others.)&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;&lt;br /&gt;Another related book in the same category is Nicholas Hagger's &lt;a href="http://www.flipkart.com/last-tourist-iran-nicholas-hagger-book-8179929604?affid=qasimzaidi"&gt;The Last Tourist In Iran&lt;/a&gt;. I almost ordered it for the low price, till I read the less than flattering review from Outlook Traveller.&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://www.flipkart.com/last-tourist-iran-nicholas-hagger-book-8179929604?affid=qasimzaidi"&gt;&lt;br /&gt;&lt;img src="http://img4.fkcdn.com/img/605/9788179929605.jpg" alt="Buy The Last Tourist In Iran, Nicholas Hagger, 8179929604" title="The Last Tourist In Iran, Nicholas Hagger, 8179929604"  height=80% align="right"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;I only wish there were ebook versions that are cheaper than the price of a paperback. Right now, they are as expensive, if not more. And for all its flashy experience, nothing beats the paperback. So until we start seeing 99 cents ebooks, I will continue to buy paperbacks.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-2072667820685529174?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/2072667820685529174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=2072667820685529174' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/2072667820685529174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/2072667820685529174'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2010/10/in-land-of-ayatollahs-tupac-shakur-is.html' title='In The Land Of The Ayatollahs Tupac Shakur Is King'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-2666905904021647240</id><published>2010-09-27T05:43:00.005+05:30</published><updated>2010-09-27T06:06:13.488+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='urdu'/><category scheme='http://www.blogger.com/atom/ns#' term='ibooks'/><category scheme='http://www.blogger.com/atom/ns#' term='ipad'/><title type='text'>iBooks Local Language support</title><content type='html'>Why is it that all the eBook  bookstores only have English books, and how long before we would see books in local languages? There is quite an opportunity there, for local language publishers. &lt;div&gt;&lt;br /&gt;&lt;div&gt;Well, the good thing is that the epub format used on an iPad has good support for utf-8, so its quite possible to create books in Hindi/Urdu, and read them on iPad. However, the rendering of an Urdu book I created as a Proof of Concept was too slow to be of any use, and while the ePub format supports RTL (Right to Left languages), iBooks doesn't.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Without RTL support, Arabic/Urdu/Hebrew books are ruled out on iPad. Hopefully iOS4.0 would change this. As far as the rendering goes, I had all the content in a single file, so I suppose breaking it down into multiple files might have helped.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If anyone is interested, I used an online service to generate the epub from an html (although Calibre will work equally well). Then I expanded the generated epub file using zip, and edited a few things (including the RTL styling for text, so pages are turned from left to right), and compressed it back to ePub. It didn't work, but at the end of the day, its good to know ePub is only a zip file compressed with a few special options. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-2666905904021647240?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/2666905904021647240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=2666905904021647240' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/2666905904021647240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/2666905904021647240'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2010/09/ibooks-local-language-support.html' title='iBooks Local Language support'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-1317711473640099568</id><published>2010-09-25T23:39:00.006+05:30</published><updated>2010-09-26T00:01:27.389+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Andoid'/><category scheme='http://www.blogger.com/atom/ns#' term='bluetooth'/><category scheme='http://www.blogger.com/atom/ns#' term='GPS'/><title type='text'>What the phone companies don't want you to know</title><content type='html'>Every few years, what was once an augmented product would become a commodity. And then, manufactures must look for the next new feature, that could help them sell.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Take the case of cell phones. When mobility was no longer novel, they were being sold on grayscale displays and slimness. Then came color, camera, mp3 playback, video recording, touch screens, not necessarily in that order.  Guess what - all of that has been commoditized. (Except for the touch screen, where more can still be done, not on hardware, but on interface).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So one thing that phone's are still being sold on and one feature that has not yet been milked to its full potential is positioning (or GPS). You could argue that GPS has been around for quite some time now, but I would counter argue that the phone GPS is yet to become a tom-tom replacement, in ways that most phone's have mp3 players that could replace iPods. More so in India. Location bases services are still in infancy, and except for one or two cases, turn by turn directions are still not available. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So even as cell phone companies try to extract their piece of flesh from early adopters of GPS, and the iPad version with GPS sells for an extra $129,  the fact that you can add a bluetooth GPS to your phone(s), iPad(s) and other devices with only $25 in hardware cost is hidden in obscurity.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With a $25 Bluetooth GPS receiver, you get better positioning,  because external GPS works better than the internal ones, which have to be cramped to fit in a phone, and which must be made to work on low power. You get improved battery life. You can use them for multiple devices, as the need may be.  And you don't lose on Mobility, because they are small enough, and you are anyway going to put them in your car. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But wait a second, not so easily. Phone companies would do everything to prevent you from doing this. So Google would go to the extent of removing bluetooth support from their Maps software, as if it was never there, and Apple would cripple its own bluetooth profile to stop you from using a bluetooth GPS. Same with Android.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But there is hope. You can jailbreak the Apple iPad/iPhone, and run a $5 app from Cydia (BT-GPS). You can run Bluetooth Mouse on Android. And you can revert from the latest version of Google Maps to version 3.2, the last version with Bluetooth GPS support. And in doing so, save yourself a lot of cash. Trust me - I have learnt this after paying a lot of premium for being an early adopter.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We need Free Software for our phones and tablets, not cripple ware. Is FSF listening?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-1317711473640099568?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/1317711473640099568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=1317711473640099568' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/1317711473640099568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/1317711473640099568'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2010/09/what-phone-companies-dont-want-you-to.html' title='What the phone companies don&apos;t want you to know'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-4911353223756101973</id><published>2010-07-31T20:31:00.004+05:30</published><updated>2010-07-31T20:49:22.859+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='ipad'/><title type='text'>Hello Droid!</title><content type='html'>I recently bought an android based internet tablet. Its really cheap, and inferior to iPad in all aspects (slower processor, less ram, capacitative touch screen, less memory, smaller real estate to list a few). Yet, it is considerably more open than iPad.&lt;br /&gt;&lt;br /&gt;Apple has never been known for openness, but the extent to which they have locked down iPad is frustrating. It was frustrating with iPhone, yet iPhone’s frame of reference was other phones, and they are not open either. On the other hand, I compare my iPad to a netbook, and not being able do anything beyond apple's imagination of what people should do with there iPads is very disheartening.&lt;br /&gt;&lt;br /&gt;Maybe the lock down is a great idea - my parents love the device for its simplicity. But for the rest of us who feel a little bit less intimidated with computers, not so. So if you have not jailbroken your iPad, &lt;a href="http://techcrunch.com/2010/07/17/why-i%E2%80%99m-craigslisting-my-ipads"&gt;craiglisting would not be a surprise to me&lt;/a&gt;. There's an app for everything, but there is only so much you can do.&lt;br /&gt;&lt;br /&gt;Back to my new tablet. Its a 7 inch SmartQ v7, running a 600 MHz processor. Its capable of triple booting, and comes pre-installed with Windows CE, Linux and Android. Android looks very promising - I am still awaiting my SD card to ship, but looks like there are a lot of things I can do with it. Things like installing a 3G modem, connecting it to other USB devices, and so on. Because it runs Ubuntu too - the possibilities are endless, although by far, android is the most usable system on it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-4911353223756101973?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/4911353223756101973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=4911353223756101973' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/4911353223756101973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/4911353223756101973'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2010/07/hello-droid.html' title='Hello Droid!'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-2746088736639028802</id><published>2010-07-03T22:40:00.005+05:30</published><updated>2010-07-03T22:50:35.079+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='ipad'/><title type='text'>A wallpaper a day on iPad</title><content type='html'>Guardian Eyewitness is such a great app on iPad, and I wish it had a feature allowing you to set the images as a wallpaper for that day. Being able to rotate wallpapers would be even better. Unfortunately, it won't let us do that, at least not in the current version.&lt;br /&gt;&lt;br /&gt;However, if you have a jailbroken iPad, it should be easy to do this. First, you need to know the location of the wallpaper, which is &lt;br /&gt;&lt;br /&gt;/User/Library/HomeBackground.jpg&lt;br /&gt;&lt;br /&gt;Then, you need to find out the location where Eyewitness app stores the Photos. For my ipad, it is &lt;br /&gt;&lt;br /&gt;/User/Applications/7C322A28-737A-48DC-8535-08878D6001ED/Library/Application\ Support/Eyewitness/Photos/&lt;br /&gt;&lt;br /&gt;I don't know how the cryptic names like 7C322A28-737A-48DC-8535-08878D6001ED are derived, and I found it out using trial and error, but I believe tools like iFile have a setting in their plist that allow you to see both the encoded name and the actual app name.&lt;br /&gt;&lt;br /&gt;For now, I just overwrote HomeBackground.jpg with one of the photos in this app, and respringed. It should be possible to write a script that runs once in a while in background, and automatically rotates between available pictures. Let's see when I have a relatively free weekend to try this out - back to work for now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-2746088736639028802?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/2746088736639028802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=2746088736639028802' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/2746088736639028802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/2746088736639028802'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2010/07/wallpaper-day-on-ipad.html' title='A wallpaper a day on iPad'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-509260998523416364</id><published>2010-06-07T09:23:00.002+05:30</published><updated>2010-06-12T23:35:18.594+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='dtrace'/><category scheme='http://www.blogger.com/atom/ns#' term='solaris'/><title type='text'>dtrace - malloc profiling</title><content type='html'>Dtrace has been around for long, but due to some restrictions on our solaris zones, I was able to try it out only recently. And what's the verdict? I have been using a lot of debuggers, memory leak analyzers and a few profilers too - and have considerable experience with them. And I have to admit, dtrace turns out to be more impressive than I would have imaginged, and this is just the tip of an iceberg.&lt;br /&gt;&lt;br /&gt;For a start - this is what I use to look at all the different paths calling malloc. When you have optimized your program for everything else, you may find malloc to be a big bottleneck, because it uses global locks and can slow down multi-threaded programs considerably. And you would never know of all the paths within your code or in the libraries that you use which may be making malloc calls and holding you back from unleashing the true potential. While mtmalloc can be a solution (its a multithreaded malloc library that offers decent speedup at the cost of extra memory - in one of my tests it decreased startup time from 30 seconds to 20 with a 4GB increase in used memory (from 12G to 16G), which is not bad. &lt;br /&gt;&lt;br /&gt;However, premature optimization is the root of all evil. So before you make that call to switch to mtmalloc, just look up the paths that are frequently invoking malloc. The following dtrace one liner will print a trace listing stack dumps and their frequencies for all the calls to malloc.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;dtrace -n 'pid$target:libc:malloc:return { @[ustack()] = count(); }' -p `pgrep -n program`&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Make sure to replace program above with whatever program you are debugging.&lt;br /&gt;&lt;br /&gt;Not just this, with a simple dtrace script, you could also look at all the malloc and free calls and then do some kind of memory leak analysis on the logs. I used this script to identify some leaks, and some inefficient memory management in my program.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;#!/usr/sbin/dtrace -s &lt;br /&gt;pid$target:libc:malloc:entry&lt;br /&gt;{&lt;br /&gt;ustack();&lt;br /&gt;}&lt;br /&gt;pid$target:libc:malloc:return&lt;br /&gt;{&lt;br /&gt;printf("%s: %x\n", probefunc, arg1);&lt;br /&gt;}&lt;br /&gt;pid$target:libc:free:entry&lt;br /&gt;{&lt;br /&gt;printf("%s: %x\n", probefunc, arg0);&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Run it as &lt;br /&gt;dtrace -s malloc.d -p `pgrep program` and make sure you redirect stdout.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-509260998523416364?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/509260998523416364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=509260998523416364' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/509260998523416364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/509260998523416364'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2010/06/dtrace-malloc-profiling.html' title='dtrace - malloc profiling'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-6483524360129173328</id><published>2010-05-30T23:57:00.003+05:30</published><updated>2010-07-03T22:51:18.700+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='voip'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='ipad'/><title type='text'>google ipad call</title><content type='html'>Using the truphone app on ipad, you can make and receive voice calls, even with the wifi version, which is what I have. The call rates are reasonably cheap, and voice quality is excellent. However, it gets better than this. You can use Google voice + Gizmo + Truphone to make free phone calls to anyone in the US, right from the iPad. Of course you need a wifi connection, but  isn't this cool?&lt;br /&gt;&lt;br /&gt;Here is how to do it&lt;br /&gt;&lt;br /&gt;1. Sign for a truphone account, and install their iPad app.&lt;br /&gt;2. Sign up for gizmo and set it up to forward it to truphone sip account (username@truphone.com). The glitch here is that since google's acquisition of gizmo, new signups have been disabled. I was lucky to have an old account lying around.&lt;br /&gt;3. Signup/ signin to google voice  and set it up to forward it to gizmo number&lt;br /&gt;4. Go to google voice page in browser. From the bottom link, select the desktop version, as there is an issue with the mobile version which opens up automatically.&lt;br /&gt;4. Make that call, choosing to let google voice connect you using the gizmo number.&lt;br /&gt;&lt;br /&gt;That was how you make outgoing calls. Here's how to make incoming calls.&lt;br /&gt;&lt;br /&gt;Now while truphone app is good enough, it is still not supporting push, which means you get your calls from google voice only if truphone is running in the foreground. If you have jail broken your phone using spirit, you can install backgrounder and run the truphone app in the background, which would enable you to get the calls all the time, as long as your wifi connection Is up ( or if you are on 3G already)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-6483524360129173328?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/6483524360129173328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=6483524360129173328' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/6483524360129173328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/6483524360129173328'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2010/05/google-ipad-call.html' title='google ipad call'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-2803302437464139117</id><published>2010-05-08T12:07:00.006+05:30</published><updated>2010-05-08T12:45:44.299+05:30</updated><title type='text'>IDN's are here</title><content type='html'>The English language has 26 letters, which when combined, produce an awful lot of words, and an even greater variety of phrases.Yet, we are running of cool domain names. Forget english words and phrases, even invented words that are catchy and easy to pronounce are in short supply.&lt;br /&gt;&lt;br /&gt;Having missed on the first gold rush, I thought the IDNs may be an opportunity to get the kind of domain names I have always wished for. Short for Internationalized Domain names, IDN's are essentially non latin domain names. The first fully IDN domain names made their debut yesterday. This is several months after an article in one of the mainstream Indian dailies recently about &lt;a href="http://timesofindia.indiatimes.com/world/us/Icann-says-ji-haan-to-Hindi-domain-names/articleshow/5182233.cms"&gt;Hindi domain names finally making their debut&lt;/a&gt;. And yes, Hindi has lost out because of proedural delays, so the first ones are in Arabic.&lt;br /&gt;&lt;br /&gt;However, it was quite a surprise for me to know that the non english domain names have really been available since 2001. What is really new is the approval of non english extensions (so you could have the localized version of .com, .net, .tv), but sites like &lt;a href="http://xn--e2bjfca8ac5f6bdn0g5bya.com/"&gt;हिन्दीडोमेननाम.com&lt;/a&gt; have been around for quite sometime. A lot of issues need to be sorted. For example- how to make sure you get your email with a domain name that looks like line noise to legacy email servers? Nevertheless, I find it pretty surprising that the browsers can handle Hindi and Arabic domain names.&lt;br /&gt;&lt;br /&gt;So here is a link to the first among equals  &lt;a href="http://موقع.وزارة-الأتصالات.مصر/"&gt;http://موقع.وزارة-الأتصالات.مصر/&lt;/a&gt;. From my broken reading of Arabic, this is the website for Ministry of Communications &amp;amp; Information Technology, Egypt. (At first look, I translated this as Ministry of Publications and Technical Information).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-2803302437464139117?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/2803302437464139117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=2803302437464139117' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/2803302437464139117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/2803302437464139117'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2010/05/idns-are-here.html' title='IDN&apos;s are here'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-8773835909421025605</id><published>2010-04-16T00:31:00.005+05:30</published><updated>2010-04-19T19:18:38.773+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='chrome'/><title type='text'>Crossdomain is not Crossbrowser ...</title><content type='html'>While Safari and Chrome are pretty modern browsers that don't usually disappoint, in web programming, you can never be sure. I am talking about the way cross-domains is implemented.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In javascript, as a security feature, access to some objects is restricted based on document origin. If that was cryptic, here is a concrete example. A frame in a page can't read the location of the parent using window.top.location.href property , if the frame came from a different webserver than the parent.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; That is, if you do something like this inside the iframe&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  color: rgb(77, 82, 140); -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:12px;"&gt;location = window.top.location.href&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"    style="font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:100%;color:#4D528C;"&gt;&lt;span class="Apple-style-span"  style=" -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;font-size:12px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;you would get an exception in Firefox, and IE (at least the more recent versions)&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  color: rgb(77, 82, 140); -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:12px;"&gt;Error: uncaught exception: Permission denied to get property&lt;br /&gt;Location.href&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"    style="font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:100%;color:#4D528C;"&gt;&lt;span class="Apple-style-span"  style=" -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;font-size:12px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;I guess that is what the RFC may have prescribed. However, the behavior in Chrome and Safari is different. (And chrome and safari both are based on Webkit, so its essentially webkit). They will not throw an exception, but instead merely return undefined.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now this initially seems counter intuitive, but to think of it, I believe there is a reason why webkit behaves so. Let's say you have the following code&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  color: rgb(77, 82, 140); -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:12px;"&gt;location = window.top.location.href&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"    style="font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:100%;color:#4D528C;"&gt;&lt;span class="Apple-style-span"  style=" -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;font-size:12px;"&gt;// do something&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"    style="font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:100%;color:#4D528C;"&gt;&lt;span class="Apple-style-span"  style=" -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;font-size:12px;"&gt;doSomething()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"    style="font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:100%;color:#4D528C;"&gt;&lt;span class="Apple-style-span"  style=" -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;font-size:12px;"&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"    style="font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:100%;color:#4D528C;"&gt;&lt;span class="Apple-style-span"  style=" -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;font-size:12px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"    style="font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:100%;color:#4D528C;"&gt;&lt;span class="Apple-style-span"  style=" -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;font-size:12px;"&gt;&lt;span class="Apple-style-span"   style="color: rgb(0, 0, 0);   -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-family:Georgia, serif;font-size:16px;"&gt;In firefox, the code that follows will never execute, because an exception was thrown when we accessed window.top.location.href. This will not be intuitive to a lame javascript programmer. Or so thought the makers of Webkit, who decided that it is smarter not to throw an exception and just set location to undefined, so that doSomething gets called. Which means any 'not so lame programmer' who writes this&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  color: rgb(77, 82, 140); -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:12px;"&gt;try {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  color: rgb(77, 82, 140); -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:12px;"&gt;  location = window.top.location.href&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"    style="font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:100%;color:#4D528C;"&gt;&lt;span class="Apple-style-span"  style=" -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;font-size:12px;"&gt;  doSomething();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"    style="font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:100%;color:#4D528C;"&gt;&lt;span class="Apple-style-span"  style=" -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;font-size:12px;"&gt;} catch {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"    style="font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:100%;color:#4D528C;"&gt;&lt;span class="Apple-style-span"  style=" -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;font-size:12px;"&gt;  doSomethingElse();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"    style="font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:100%;color:#4D528C;"&gt;&lt;span class="Apple-style-span"  style=" -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;font-size:12px;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;will find that their code wouldn't work as expected on Safari and Chrome.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Which is why it is important to adhere to the specs, in letter and spirit.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"    style="font-family:verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:100%;color:#4D528C;"&gt;&lt;span class="Apple-style-span"  style=" -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;font-size:12px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-8773835909421025605?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/8773835909421025605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=8773835909421025605' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/8773835909421025605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/8773835909421025605'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2010/04/crossdomain-is-not-crossbrowser.html' title='Crossdomain is not Crossbrowser ...'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-3673204002158361853</id><published>2010-04-03T22:07:00.004+05:30</published><updated>2010-04-04T00:46:58.168+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='xmpp'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='gtalk'/><category scheme='http://www.blogger.com/atom/ns#' term='IM'/><title type='text'>Chat bot</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i.imgur.com/BznmM.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 571px; height: 692px;" src="http://i.imgur.com/BznmM.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;For long, I have been toying with the idea of writing a chat bot for google and yahoo. I finally got around to doing that last weekend, and it proved to be much simpler than I had estimated. I&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I connected the bot to Eliza (an AI program that simulates a therapist), and had it login as me on gtalk and talk to my friends and acquaintances in the contact list. The AI was pretty basic, but the conversations made for a very interesting reading. Not as good as the one at the top of this post though.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To all the unsuspecting victims in my contact list - I apologize. I was planning to use this as a Fools day prank, and then post the conversations here, but the novelty wore of much before the 1st of April, during the testing stage, and I dropped the idea. In any case, most of my Fools day prank have a reputation of being taken too seriously, creating unintended consequences. Most people I know in real life don't quite appreciate the kind of humor I like.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In any case, when I ever get the impulse to finish this project, I am going to modify it so that it could be used for logging in on Yahoo/MSN, and then create an AI  that has a personality more like mine (and less like a therapist). &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;TODO: I am going to expand this post with a brief tutorial on how I did it for gtalk. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-3673204002158361853?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/3673204002158361853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=3673204002158361853' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/3673204002158361853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/3673204002158361853'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2010/04/chat-bot.html' title='Chat bot'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-3076881198053846621</id><published>2010-02-27T20:33:00.005+05:30</published><updated>2010-02-27T20:42:29.668+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='fail'/><title type='text'>Forget District 9 ...</title><content type='html'>&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dp61-rSKrQo/S4k1jKAFRaI/AAAAAAAAAHg/ozMB4t6j1NM/s1600-h/Picture+3.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 108px; height: 400px;" src="http://1.bp.blogspot.com/_dp61-rSKrQo/S4k1jKAFRaI/AAAAAAAAAHg/ozMB4t6j1NM/s400/Picture+3.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5442940502750348706" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Aliens are here, and they have a colony in Hyderabad, instead of South Africa.&lt;br /&gt;&lt;br /&gt;Some stupid real estate developer felt that now that all branding concepts for what is essentially a commodity product now are exhausted, selling alien space station homes would be a good idea. We already had eco homes, close to nature homes, golf course homes, so why not have alien space station homes?&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's the screenshot of an ad they are running on yahoo mail.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;http://aliensgroup.in/micro/html/SS1.php&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-3076881198053846621?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/3076881198053846621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=3076881198053846621' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/3076881198053846621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/3076881198053846621'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2010/02/forget-district-9.html' title='Forget District 9 ...'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dp61-rSKrQo/S4k1jKAFRaI/AAAAAAAAAHg/ozMB4t6j1NM/s72-c/Picture+3.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-3934311161968903905</id><published>2010-02-19T00:13:00.006+05:30</published><updated>2010-02-19T00:20:34.407+05:30</updated><title type='text'>Shady URL</title><content type='html'>Dear Visitor,&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you are coming from buzz/twitter, and the URL link I posted made you click here, try www.shadyurl.com. It makes your URL looks so shady, people can't resist clicking. Your visit itself may be a testimony to it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;For others, this is what I posted on buzz&lt;br /&gt;&lt;a href="http://5z8.info/mercenary_z9u8_IE-exploiter"&gt;http://5z8.info/mercenary_z9u8_IE-exploiter&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Even my shameless streak of self promotion didn't allow me to post the other one,&lt;/div&gt;&lt;div&gt;but I believe it would have got much more traffic had I posted it&lt;/div&gt;&lt;br /&gt;&lt;a href="http://5z8.info/stalin_s6c2_friendster-of-sex"&gt;http://5z8.info/stalin_s6c2_friendster-of-sex&lt;br /&gt;&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Go ahead, try shadyurl.com for yourself&lt;a href="http://5z8.info/mercenary_z9u8_IE-exploiter"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:Georgia, 'Times New Roman', Times, serif;font-size:180%;"&gt;&lt;span class="Apple-style-span"  style="font-size:17px;"&gt;&lt;span class="Apple-style-span"   style="font-family:Georgia, serif;font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="font-size:16px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-3934311161968903905?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/3934311161968903905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=3934311161968903905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/3934311161968903905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/3934311161968903905'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2010/02/shady-url.html' title='Shady URL'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-1144776084733048796</id><published>2010-02-13T14:43:00.005+05:30</published><updated>2010-04-16T01:25:15.016+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='pmap'/><category scheme='http://www.blogger.com/atom/ns#' term='core'/><category scheme='http://www.blogger.com/atom/ns#' term='debugging'/><title type='text'>What is in the heap?</title><content type='html'>How to find out what is there in a process heap? Here is some Solaris fu that I found handy from a usenet post from Jonathan Adams (netbsd archives)&lt;div&gt;&lt;br /&gt;&lt;div&gt;Let's say you have a core dump already. If you don't have it, you can always get one using gcore.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Run pmap on the core file. Look at the segment of interest. It would show you the a lot of information, starting with address, permissions, heap/stack or the name of the file that is mapped (in case of dynamically loaded libraries, for example). Once you have identified the segment of interest (which was  a segment whose size was too big, in my case), use it address and get the program header using elfdump.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;elfdump -p core | ggrep -iB1 -A4 FFFFFFFF7DA00000&lt;/div&gt;&lt;div&gt;&lt;div&gt;Program Header[6]:&lt;/div&gt;&lt;div&gt;    p_vaddr:      0xffffffff7da00000  p_flags:    [ PF_W  PF_R ]&lt;/div&gt;&lt;div&gt;    p_paddr:      0               p_type:     [ PT_LOAD ]&lt;/div&gt;&lt;div&gt;    p_filesz:     0x10000         p_memsz:    0x10000&lt;/div&gt;&lt;div&gt;    p_offset:     0x1840c8        p_align:    0&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now that  you know the offset at which your segment is (p_offset), and the size, copy it using dd&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;dd if=core of=/tmp/data ibs=1 size=65536 seek=1589448&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At this point, you could run strings on the segment to get some idea of what is contained in there.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-1144776084733048796?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/1144776084733048796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=1144776084733048796' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/1144776084733048796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/1144776084733048796'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2010/02/what-is-in-heap.html' title='What is in the heap?'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-89724842054484682</id><published>2010-02-13T00:08:00.004+05:30</published><updated>2010-02-13T00:24:08.372+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='doubleclick'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='behavioral'/><title type='text'>Google is a sharp cookie</title><content type='html'>Google is now willing to tell you what they know about you. Visit the &lt;a href="http://www.google.com/ads/preferences/view"&gt;ad services preferences&lt;/a&gt; to find out what they know about you.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The cookie is in doubleclick.net domain, by the name id. It has a unix timestamp in it, which should show you how old your cookie is. They expire it after 1 year.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is a good initiative on the part of Google, but here is the bit that's scary.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My cookie expires Jan 16, 2012, which means its barely a month old. In this period, they have been able to figure out that I am interested in Advertising and Marketing, Computer &amp;amp; Electronics-&gt;Programming, Software &amp;amp; Computer Security. Of course - their score is not 100%, but based on what I did during last month, thinking that I am interested in movies (I purchased a ticket for Avatar from AMC Entertainment) and Watches (I bought a few), they are close. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Too close for comfort. Would I opt out? No. But the average user might.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-89724842054484682?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/89724842054484682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=89724842054484682' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/89724842054484682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/89724842054484682'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2010/02/google-is-sharp-cookie.html' title='Google is a sharp cookie'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-5844817296368177688</id><published>2010-01-30T23:07:00.009+05:30</published><updated>2010-01-31T00:30:05.473+05:30</updated><title type='text'>Privacy and Relevance</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span"   style="  font-weight: bold; font-family:arial, sans-serif;font-size:72px;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;There's a poll on linkedin that asks an interesting question&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="color: rgb(51, 51, 51); font-family:arial, sans-serif;font-size:14px;"&gt;&lt;h2 class="question"   style="position: relative; padding-bottom: 0px; border-bottom-style: none; border-bottom-color: rgb(221, 221, 221); margin-top: 0px; color: rgb(0, 0, 0); border-top-style: none; border-right-style: none; border-left-style: none; border-width: initial; padding-right: 0px; padding-left: 0px; margin-right: 0px; margin-bottom: 3px; margin-left: 0px; font-size:21px;color:initial;"&gt;&lt;div id="_T_template_35"  style="font-family:arial, sans-serif;"&gt;&lt;span jsvalues="id:'poll-question-'+($_ir($_ir($_ir($context, '$top'), 'poll'), 'id'))" jscontent="($_ir($_ir($_ir($context, '$top'), 'poll'), 'question'))" jstcache="33" id="poll-question-74928"  style="font-family:arial, sans-serif;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;The best advertising I’ve seen online is:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div id="_T_template_35"  style="font-family:arial, sans-serif;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div id="_T_template_35"  style="font-family:arial, sans-serif;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;* Popups that open up all over the place, opening new windows when I try to close them&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;* Ads that tell me I have won a million dollars by the virtue of being visitor number XXXXXX, or the ones that mimic a Windows alert dialog telling me my infected computer needs to be purged of its virii&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;* In text links that popup a window when the mouse moves over them even by mistake (or video ads that start playing for the same reason)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div id="_T_template_35"  style="font-family:arial, sans-serif;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;* All of the above&lt;/span&gt;&lt;/div&gt;&lt;div id="_T_template_35"  style="font-family:arial, sans-serif;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Georgia, serif;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;No points for guessing that I am kidding. Never would anyone ask a question that honest. They asked this instead.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia, serif;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:Georgia, serif;font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="font-weight: normal; font-size:16px;"&gt;&lt;span class="Apple-style-span"   style="color: rgb(51, 51, 51); font-family:arial, sans-serif;font-size:14px;"&gt;&lt;h2 class="question"   style="position: relative; padding-bottom: 0px; border-bottom-style: none; margin-top: 0px; color: rgb(0, 0, 0); border-top-style: none; border-right-style: none; border-left-style: none; border-width: initial; padding-right: 0px; padding-left: 0px; margin-right: 0px; margin-bottom: 3px; margin-left: 0px; font-size:21px;color:initial;"&gt;&lt;div id="_T_template_35"  style="font-family:arial, sans-serif;"&gt;&lt;span jsvalues="id:'poll-question-'+($_ir($_ir($_ir($context, '$top'), 'poll'), 'id'))" jscontent="($_ir($_ir($_ir($context, '$top'), 'poll'), 'question'))" jstcache="33" id="poll-question-74928"  style="font-family:arial, sans-serif;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;The best advertising I’ve seen online :&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div id="_T_template_35"  style="font-family:arial, sans-serif;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div id="_T_template_35"  style="font-family:arial, sans-serif;"&gt;&lt;span jsvalues="id:'poll-question-'+($_ir($_ir($_ir($context, '$top'), 'poll'), 'id'))" jscontent="($_ir($_ir($_ir($context, '$top'), 'poll'), 'question'))" jstcache="33" id="poll-question-74928"  style="font-family:arial, sans-serif;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;* Provides useful information and content&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div id="_T_template_35"  style="font-family:arial, sans-serif;"&gt;&lt;span jsvalues="id:'poll-question-'+($_ir($_ir($_ir($context, '$top'), 'poll'), 'id'))" jscontent="($_ir($_ir($_ir($context, '$top'), 'poll'), 'question'))" jstcache="33" id="poll-question-74928"  style="font-family:arial, sans-serif;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;* entertains me with video and sound&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div id="_T_template_35"  style="font-family:arial, sans-serif;"&gt;&lt;span jsvalues="id:'poll-question-'+($_ir($_ir($_ir($context, '$top'), 'poll'), 'id'))" jscontent="($_ir($_ir($_ir($context, '$top'), 'poll'), 'question'))" jstcache="33" id="poll-question-74928"  style="font-family:arial, sans-serif;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;* appears before a page loads&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div id="_T_template_35"  style="font-family:arial, sans-serif;"&gt;&lt;span jsvalues="id:'poll-question-'+($_ir($_ir($_ir($context, '$top'), 'poll'), 'id'))" jscontent="($_ir($_ir($_ir($context, '$top'), 'poll'), 'question'))" jstcache="33" id="poll-question-74928"  style="font-family:arial, sans-serif;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;* allows me to interact with the ad&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div id="_T_template_35"  style="font-family:arial, sans-serif;"&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia, serif;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;As a self proclaimed online advertising expert, I went ahead and choose the third option (appears before a page loads). But the 118 people who had chosen to answer begged to differ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia, serif;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/h2&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/h2&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dp61-rSKrQo/S2RyucYoXgI/AAAAAAAAAHY/w6RxTU6lbv0/s1600-h/Picture+8.png"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 211px;" src="http://4.bp.blogspot.com/_dp61-rSKrQo/S2RyucYoXgI/AAAAAAAAAHY/w6RxTU6lbv0/s400/Picture+8.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5432593192734711298" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Now what good I would be as an expert if my opinion was the same as the masses? Jokes apart, the results of this poll reflect our infatuation with metrics, and one unfortunate tradeoff. Surely, "You can't manage what you can't measure" makes for a great quote, and the ability to measure performance is one of the USP's of our industry, but this obsession has done us a great deal of harm. First, because going by the metrics that we commonly employ - all the tactics I presented as the options for the non existent linkedin poll at the start of this post,  and which would make the most even the greatest fanboys of online advertising turn in their graves (there are no fanboys of online advertising - hence the grave example), will be counted among the best performing advertising seen online. They all enjoy a very high click through rate, appear to be more engaging than anything else for the advertiser, and generate more revenue for the publishers who run them. But more importantly, everyone seems to miss the tradeoff between privacy and relevance. In order that we target you better than we currently do, we need to know more about you, and that does require you giving up some of your privacy. We need to know what is 'useful information' - because one man's useful information can be another man's ... Okay, okay - no more cliches for you now.&lt;/span&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;So the unfortunate trade off between privacy and relevance is what we have to live with now. The better we become at being relevant, the more spooky it is going to appear to the average netizen, and the more concerned she is going to be about online advertising. And that is why I feel, with 95% confidence, that 61% of linkedin is mistaken. And that the best advertising after all is advertising that doesn't takes up our limited bandwidth, advertising that loads fast, and not the flashturbation we sometimes see. After all, we have found static gif banners performing better than flash and this could be the only rational explanation, however improbable, because that is the only explanation left after eliminating the impossible. But I would keep this for another post. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-5844817296368177688?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/5844817296368177688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=5844817296368177688' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/5844817296368177688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/5844817296368177688'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2010/01/privacy-and-relevance.html' title='Privacy and Relevance'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_dp61-rSKrQo/S2RyucYoXgI/AAAAAAAAAHY/w6RxTU6lbv0/s72-c/Picture+8.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-7829084834646819981</id><published>2010-01-26T23:59:00.003+05:30</published><updated>2010-01-27T00:11:00.221+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='advertising'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>iPhone and advertising</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;iPhone has been a discontinuity in the mobile world, and one way it has changed the status quo is by making advertising on the iPhone a real possibility. There already have been acquisitions in this space (Admob, Quattro), and given's Apple interest in this segment, one would expect things would change.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Right now, Safari is the most difficult browser to work with when it comes to online advertising, simply because it turns third party cookie tracking off by default. Most advertising, as we know it is HTTP Cookie based, although there are several work arounds for Safari (Flash Cookie, Local Storage etc). This is even worse on iPhone, because the UIWebView component that allows applications to render html (via webkit), runs in a sandbox environment - meaning that cookies can't be shared between browsers and applications (and not even within applications). I believe this would change - although anyone enterprising enough should be able to work around this as well. I have a work around in mind - which will only be a thought experiment till the time I am able to test it out, but I believe if it works, it would present excellent opportunities. I wonder if the companies already in this space have figured this out  - it seems like they haven't, at least from this dated&lt;/span&gt;&lt;/span&gt;&lt;a href="http://userfirstweb.com/482/admob-iphone-download-tracking-update/"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; blog post on User First Web&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;!--StartFragment--&gt;&lt;span style="color:#333333;"&gt;&lt;span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; wrote recently about the new AdMob service that can &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;i&gt;&lt;span style="color:#3E4967;"&gt;&lt;u&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;tie advertising to iPhone App Store downloads&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;span style="color:#333333;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;. I was curious whether this feature was limited to ads in applications only or would apply to ads viewed in Mobile Safari.&lt;br /&gt;&lt;br /&gt;AdMob clarified this via email recently saying, “as our iPhone app download tracking relies on unique user information, it only functions for ads shown within applications.”&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;!--EndFragment--&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#333333;"&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;If you happen to bump on this post, and have anything interesting to say in this matter - I would be interested.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-7829084834646819981?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/7829084834646819981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=7829084834646819981' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/7829084834646819981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/7829084834646819981'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2010/01/iphone-and-advertising.html' title='iPhone and advertising'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-3932335667130227252</id><published>2010-01-13T12:12:00.010+05:30</published><updated>2010-04-16T00:23:14.041+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript safari mac'/><title type='text'>Inspect Element</title><content type='html'>&lt;p&gt;I work in the online ad industry, and while you may hate even looking at the banner ads,  I am often tasked with finding out who is running that banner ad. With aggregators, meta-aggregator, networks and exchanges, it is increasingly difficult to tell who is running on which site, and you need to check. &lt;/p&gt;&lt;p&gt;You can always hover/click on the ad and hope to be able to be fast enough to notice the redirect, but this would often not work with flash content/javascript based clicks. Or you can run a monitoring tool like Firebug or HttpWatch and look at the http request/response for that page, it is too clumsy - Firebug is painfully slow to have it running all the time, so running it means one has to refresh the page after the ad has been loaded. I usually find the 'Inspect Element' option (shown when you right click) very handy. It lets you inspect the page source (not the static source but the generated one, in all its glory, and takes you right away to the element of interest, under the hood. Like all good things, it is a Firefox only option, and one of the things that ensured I couldn't really switch from Firefox to Camino or Safari even when I want to. &lt;/p&gt;&lt;p&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 71px;" src="http://3.bp.blogspot.com/_dp61-rSKrQo/S01xp5x8dLI/AAAAAAAAAHQ/jY9aSYr9IiQ/s400/Picture+3.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5426118090750194866" /&gt;&lt;br /&gt;The good news is, this option is available on Safari too, although it is hidden. To enable it, fire up a terminal window and issue this command&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;defaults write com.apple.Safari WebKitDeveloperExtras -bool true &lt;/pre&gt;&lt;br /&gt;That's it. When you restart Safari next, you would see the Inspect Element option when your right click anywhere on page, and should you exercise that option, you would be greeted with a pane like the one below&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img style="cursor:pointer; cursor:hand;width: 640px; height: 108px;" src="http://3.bp.blogspot.com/_dp61-rSKrQo/S01vMd0ew7I/AAAAAAAAAHI/C17gSiAwJlI/s320/Picture+1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5426115386005177266" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-3932335667130227252?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/3932335667130227252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=3932335667130227252' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/3932335667130227252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/3932335667130227252'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2010/01/inspect-element.html' title='Inspect Element'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dp61-rSKrQo/S01xp5x8dLI/AAAAAAAAAHQ/jY9aSYr9IiQ/s72-c/Picture+3.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-6417324907763346628</id><published>2009-06-22T16:42:00.004+05:30</published><updated>2009-06-22T16:47:05.718+05:30</updated><title type='text'>Convocation</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dp61-rSKrQo/Sj9oBMbM4QI/AAAAAAAAAGE/YDFimWfUhDU/s1600-h/m2.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_dp61-rSKrQo/Sj9oBMbM4QI/AAAAAAAAAGE/YDFimWfUhDU/s320/m2.jpg" alt="" id="BLOGGER_PHOTO_ID_5350109252063912194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dp61-rSKrQo/Sj9nUkxPjUI/AAAAAAAAAF0/3uE0Z_5qaV4/s1600-h/convo.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 325px; height: 272px;" src="http://3.bp.blogspot.com/_dp61-rSKrQo/Sj9nUkxPjUI/AAAAAAAAAF0/3uE0Z_5qaV4/s320/convo.jpg" alt="" id="BLOGGER_PHOTO_ID_5350108485504699714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dp61-rSKrQo/Sj9nxFkbnBI/AAAAAAAAAF8/d57lNqb0Kec/s1600-h/medal.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_dp61-rSKrQo/Sj9nxFkbnBI/AAAAAAAAAF8/d57lNqb0Kec/s320/medal.jpg" alt="" id="BLOGGER_PHOTO_ID_5350108975345671186" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-6417324907763346628?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/6417324907763346628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=6417324907763346628' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/6417324907763346628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/6417324907763346628'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2009/06/convocation.html' title='Convocation'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_dp61-rSKrQo/Sj9oBMbM4QI/AAAAAAAAAGE/YDFimWfUhDU/s72-c/m2.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-4626161369250745022</id><published>2009-05-23T22:28:00.004+05:30</published><updated>2009-05-23T22:54:09.222+05:30</updated><title type='text'>Overriding a system call in AIX</title><content type='html'>At some point, I used to write code for AIX kernel. (I have written modules for the Solaris and HPUX kernels too, but these day's I am purely a user-space developer). Still, I sometimes get questions/comments related to AIX on email. Here is a recent one&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;I went through your blogs..quite nice..&lt;br /&gt;I need some help with the aix kernel.I m currently implement a system call.&lt;br /&gt;What I need to do is basically intercept a system call on aix 5.3.&lt;br /&gt;How can I do this.?.&lt;br /&gt;On linux I have the system call table , which i can replace the current system calls with my own using the NR offset into the sys_call_table.&lt;br /&gt;How do i do the same in aix kernel?&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;AIX is a different beast altogether, unlike a lot of other Unixes, because its BSD heritage is not as strong and a bit under the hood. So a lot of things work very differently in AIX, and over-riding a system call is one of them.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;For the impatient, here is a short answer. &lt;/span&gt;&lt;br /&gt;Write a function with the same signature as the system call and load it as a kernel extension. Any application started after this new module has been loaded will see your symbol as a system call, instead of the original one, due to the way AIX loader works.&lt;br /&gt;&lt;br /&gt;For most of the time - you are interested in intercepting a system call, rather than overriding it. Let's say you want to intercept getpid(). Now you could write your own version of getpid with an exactly same signature, do whatever you wanted to do, and then transfer control to the original getpid(). IBM has an example here on &lt;a href="http://www.ibm.com/developerworks/aix/library/au-kernelext.html"&gt;how could you add a new syscall to AIX&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Follow it, but name your syscall getpid() (or whatever you want to override).&lt;br /&gt;&lt;br /&gt;Herein lies the catch. There is no way you can call the original getpid(), because just having overridden that symbol, you can no longer access the original. Any attempts to call getpid() from with getpid() will result in ...&lt;br /&gt;&lt;br /&gt;Well, what else, but recursion.&lt;br /&gt;&lt;br /&gt;So to work around this problem, over-riding a system call means writing two kernel modules. The first one would merely re-export the original system call with a different name. The second, will actually override the syscall by redefining it, and then call the original one as exported by the first module. To make it cleaner, you can automate the loading of the first module from within the second module, so to the user, it is only one module that they load.&lt;br /&gt;&lt;br /&gt;Usually you would do this fairly early on in the boot process, because your intercept will not apply to applications started before the interceptor module was loaded.&lt;br /&gt;&lt;br /&gt;I will update this post sometime in the future with the long answer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-4626161369250745022?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/4626161369250745022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=4626161369250745022' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/4626161369250745022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/4626161369250745022'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2009/05/overriding-system-call-in-aix.html' title='Overriding a system call in AIX'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-7940466294871056042</id><published>2009-02-03T00:40:00.004+05:30</published><updated>2009-05-23T23:30:31.079+05:30</updated><title type='text'>Null Pointer on AIX</title><content type='html'>Have a look at this code.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt; #include &lt;stdio.h&gt; &lt;stdio.h&gt;&lt;/stdio.h&gt;&lt;/stdio.h&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt; int main() {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;         int *a = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;         int b = *a;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;         printf("hello world\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;         return 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt; What will the output be. Will it ever get to say hello ? In most worlds other than IBM's, it won't.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt; But AIX has its own idiosyncracies. So the qualified answer is, "it depends"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt; Here is what a very old text I found had to say (This was from AIX 3.2 times)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;   9.1.  Derefencing NULL Pointers&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The word at memory location zero contains a  zero.&lt;br /&gt;&lt;br /&gt;That  means  that  code which has been incorrectly&lt;br /&gt;&lt;br /&gt;written to use a NULL pointer to represent a  null&lt;br /&gt;&lt;br /&gt;string  will work, but will not be portable to all&lt;br /&gt;&lt;br /&gt;UNIX operating systems, and may not work on future&lt;br /&gt;&lt;br /&gt;AIX systems.&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt; So that explains it. On AIX, at least till version 5.3, you can&lt;br /&gt;dereference a null pointer, and get away with it :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is the link to the original document , for more such trivia. Would post more of these later, need to get back to work.&lt;br /&gt;&lt;br /&gt;http://www.rootunix.org/AIX/325bsdpo.txt&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Fine Print: This is a repost. I have now decided to use thruput as my only blog, giving up on http://360.yahoo.com/mqzaidi/blog. You would see some old content resurrected from that blog here. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-7940466294871056042?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/7940466294871056042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=7940466294871056042' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/7940466294871056042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/7940466294871056042'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2009/02/google-fail.html' title='Null Pointer on AIX'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-492194151033431107</id><published>2007-09-27T06:32:00.000+05:30</published><updated>2007-09-27T06:40:39.997+05:30</updated><title type='text'></title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_dp61-rSKrQo/RvsBbW3J01I/AAAAAAAAAAs/260OxwZNKNM/s1600-h/locked.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp3.blogger.com/_dp61-rSKrQo/RvsBbW3J01I/AAAAAAAAAAs/260OxwZNKNM/s320/locked.png" alt="" id="BLOGGER_PHOTO_ID_5114683371314336594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_dp61-rSKrQo/RvsBmW3J02I/AAAAAAAAAA0/jhonlINW0O0/s1600-h/springer.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp3.blogger.com/_dp61-rSKrQo/RvsBmW3J02I/AAAAAAAAAA0/jhonlINW0O0/s320/springer.png" alt="" id="BLOGGER_PHOTO_ID_5114683560292897634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_dp61-rSKrQo/RvsBzG3J03I/AAAAAAAAAA8/Kv1Mdbd4FM0/s1600-h/maps.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp2.blogger.com/_dp61-rSKrQo/RvsBzG3J03I/AAAAAAAAAA8/Kv1Mdbd4FM0/s320/maps.png" alt="" id="BLOGGER_PHOTO_ID_5114683779336229746" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_dp61-rSKrQo/RvsCl23J04I/AAAAAAAAABE/5A-aYSLONGs/s1600-h/notes.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_dp61-rSKrQo/RvsCl23J04I/AAAAAAAAABE/5A-aYSLONGs/s320/notes.png" alt="" id="BLOGGER_PHOTO_ID_5114684651214590850" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_dp61-rSKrQo/RvsC0W3J05I/AAAAAAAAABM/t9Y2rhg8GV8/s1600-h/settings.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp3.blogger.com/_dp61-rSKrQo/RvsC0W3J05I/AAAAAAAAABM/t9Y2rhg8GV8/s320/settings.png" alt="" id="BLOGGER_PHOTO_ID_5114684900322694034" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_dp61-rSKrQo/RvsC-23J06I/AAAAAAAAABU/0UGnz3ixsuI/s1600-h/sms.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_dp61-rSKrQo/RvsC-23J06I/AAAAAAAAABU/0UGnz3ixsuI/s320/sms.png" alt="" id="BLOGGER_PHOTO_ID_5114685080711320482" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-492194151033431107?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/492194151033431107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=492194151033431107' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/492194151033431107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/492194151033431107'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2007/09/blog-post.html' title=''/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_dp61-rSKrQo/RvsBbW3J01I/AAAAAAAAAAs/260OxwZNKNM/s72-c/locked.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-1223042377504824341</id><published>2007-08-29T18:11:00.000+05:30</published><updated>2007-08-29T18:14:23.894+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='unix rsync ssh mac'/><title type='text'>Set Term Title</title><content type='html'>On MacOSX, the bundled Terminal app won't change the window title as you ssh/telnet, which becomes an issue if you are telnetting to several servers. Of course you could use the prompt to differentiate the connections, but I generally prefer smaller prompts.&lt;br /&gt;&lt;br /&gt;To work around, add this to your remote .bashrc&lt;br /&gt;&lt;br /&gt;if [ -n "$PS1" ]; then&lt;br /&gt;  echo -n -e "\033]0;`hostname`\007"&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;The PS1 check is just to ensure that in non-interactive sessions (such as the one started by rsync), the echo doesn't corrupts the stream.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-1223042377504824341?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/1223042377504824341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=1223042377504824341' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/1223042377504824341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/1223042377504824341'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2007/08/set-term-title.html' title='Set Term Title'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-8055855649936415316</id><published>2007-04-11T11:32:00.000+05:30</published><updated>2007-05-03T10:41:32.995+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='dbx'/><category scheme='http://www.blogger.com/atom/ns#' term='debugging'/><category scheme='http://www.blogger.com/atom/ns#' term='solaris'/><title type='text'>dbx for gdb users</title><content type='html'>As an old time gdb fan, I keep getting lost with all the different debuggers i have to deal with for userspace/kernelspace debugging (adb, kdb, kwdb, mdb, dbx). So I thought I would put some working tips for my own reference in this blog post about using dbx&lt;br /&gt;&lt;br /&gt;dbx has a gdb mode. It supports most gdb commands. To turn it on, at the dbx prompt, type this&lt;br /&gt;&lt;br /&gt;(dbx) gdb on&lt;br /&gt;&lt;br /&gt;And as usual, this can be automated by creating a .dbxrc and putting 'gdb on' there.&lt;br /&gt;&lt;br /&gt;Now all the gdb commands such as c, b, i can be used.&lt;br /&gt;&lt;br /&gt;If you want to step over a few lines of code without recompiling, use cont at&lt;br /&gt;&lt;br /&gt;(dbx) cont at 221&lt;br /&gt;&lt;br /&gt;will continue the program at line 221, skipping all the code between current line and 221.&lt;br /&gt;&lt;br /&gt;r doesn't works for run though, and thats because its already set as an alias to something else.&lt;br /&gt;&lt;br /&gt;(dbx) alias&lt;br /&gt;[='\['&lt;br /&gt;alias='kalias'&lt;br /&gt;commands='paged-commands'&lt;br /&gt;echo='kprint'&lt;br /&gt;functions='typeset -f'&lt;br /&gt;help='paged-help'&lt;br /&gt;integer='typeset -i'&lt;br /&gt;lo='loadobject'&lt;br /&gt;nohup='nohup '&lt;br /&gt;pp='prettyprint'&lt;br /&gt;pwd='kprint -r "$PWD"'&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;r='fc -e -'&lt;/span&gt;&lt;br /&gt;sh='sh-cmd'&lt;br /&gt;suspend='kill -STOP $$'&lt;br /&gt;type='whence -v'&lt;br /&gt;&lt;br /&gt;But if you wish, you can redefine it to run&lt;br /&gt;&lt;br /&gt;(dbx) alias r run&lt;br /&gt;&lt;br /&gt;(And to make this permanent, put it in .dbxinit)&lt;br /&gt;&lt;br /&gt;dbx also supports histories, accessed as usual using history and !!.&lt;br /&gt;&lt;br /&gt;Conditional breakpoints are also supported. To set one, first set a normal breakpoint, e.g.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(dbx) b code.c:2197&lt;br /&gt;(dbx) i b&lt;br /&gt; [1] stop at "code.c":2197&lt;br /&gt;and then make it conditional&lt;br /&gt;(dbx) cond 1 'codePtr-&gt;id==12'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;(dbx) cond&lt;br /&gt;That's it, for this post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-8055855649936415316?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/8055855649936415316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=8055855649936415316' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/8055855649936415316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/8055855649936415316'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2007/04/dbx-for-gdb-users.html' title='dbx for gdb users'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-5904706644167922363</id><published>2007-01-17T15:50:00.000+05:30</published><updated>2007-01-17T17:23:01.839+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='zen'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>Zen and the art of iCal sync</title><content type='html'>It appears that the creative zen vision supports the ics format for storing events and tasks, which is version 2.0 of the vCalendar format. This is good news, since I can now sync my google and iCal calendars to the player, without the need to boot into Windows. All that is needed is&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Export the ics file from the application (iCal, Mozilla or Google Calendar)&lt;/li&gt;&lt;li&gt;Send the ics to the zen using mtp-sendfile&lt;br /&gt;$mtp-sendfile ~/Home.ics Home.ics (The second argument is destination filename)&lt;/li&gt;&lt;/ol&gt;Thats it. Events and tasks would appear in Zen. I even wrote an appleScript to automate this, which i would soon be posting here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-5904706644167922363?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/5904706644167922363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=5904706644167922363' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/5904706644167922363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/5904706644167922363'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2007/01/zen-and-art-of-ical-sync.html' title='Zen and the art of iCal sync'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-2953477298962062574</id><published>2007-01-14T18:53:00.000+05:30</published><updated>2007-01-14T19:17:39.983+05:30</updated><title type='text'>Creative Zen Vision on Mac (Darwin)</title><content type='html'>Unfortunately for us, inspite of  Zen Vision M being a great device, it doesn't appears as a USB   Mass Storage Device. If it would have, we could have simply accessed it as a USB hard-disk in just about any OS without any pain. But then, Creative choose to use MTP instead, maybe because of their special relationship with Microsoft (and then got stabbed in the back when MS released Zune).&lt;br /&gt;&lt;br /&gt;Here is some interesting news on MTP from wikipedia, though&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Media Transfer Protocol&lt;/b&gt; is a set of custom extensions to the &lt;a href="http://en.wikipedia.org/wiki/Picture_Transfer_Protocol" title="Picture Transfer Protocol"&gt;Picture Transfer Protocol&lt;/a&gt; (PTP) devised by &lt;a href="http://en.wikipedia.org/wiki/Microsoft" title="Microsoft"&gt;Microsoft&lt;/a&gt;, to allow the protocol to be used for devices other than &lt;a href="http://en.wikipedia.org/wiki/Digital_camera" title="Digital camera"&gt;digital cameras&lt;/a&gt;, for example &lt;a href="http://en.wikipedia.org/wiki/Digital_audio_player" title="Digital audio player"&gt;digital audio players&lt;/a&gt; such as &lt;a href="http://en.wikipedia.org/wiki/MP3" title="MP3"&gt;MP3&lt;/a&gt; players, and other portable media devices, for example portable video players.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://en.wikipedia.org/wiki/USB_Implementers_Forum" title="USB Implementers Forum"&gt;USB Implementers Forum&lt;/a&gt; device working group is presently working on standardizing MTP as a fully fledged &lt;a href="http://en.wikipedia.org/wiki/Universal_Serial_Bus" title="Universal Serial Bus"&gt;Universal Serial Bus&lt;/a&gt; (USB) device class. When that process is complete, MTP will be a USB device class peer to USB mass storage device class, USB Video Class, and so on.&lt;br /&gt;&lt;br /&gt;Since that standardisation would take some time, and I suddenly had some free time on hand on fine sunday morning, I decided to try and see what we can still get to work on darwin.&lt;br /&gt;&lt;br /&gt;To begin with, I downloaded the libmtp library from sourceforge, which fortunately enough supports mac already and didn't needed any porting, except for an iconv issue. The problem with libiconv is (which is , btw, a library for converting from one charecter set encoding to the other) that there are simply too many versions floating around. So while libmtp compiles and installs fine, any of the example programs won't run, failing with missing symbols.&lt;br /&gt;&lt;br /&gt;That was easily fixed though, by adding -liconv to the Makefile in the examples directory in the  libmtp sources. (Search for LIBS = -lusb and append -liconv). With this change, running mtp-detect (which installs in /usr/local/bin) gives this output&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Autodetected device "Creative Zen Vision:M" (VID=041e,PID=413e) is known.&lt;br /&gt;Connected to MTP device.&lt;br /&gt;USB low-level info:&lt;br /&gt;   bcdUSB: 512&lt;br /&gt;   bDeviceClass: 255&lt;br /&gt;   bDeviceSubClass: 0&lt;br /&gt;   bDeviceProtocol: 0&lt;br /&gt;   idVendor: 041e&lt;br /&gt;   idProduct: 413e&lt;br /&gt;   IN endpoint maxpacket: 512 bytes&lt;br /&gt;   OUT endpoint maxpacket: 512 bytes&lt;br /&gt;   Device flags: 0x00000000&lt;br /&gt;Device info:&lt;br /&gt;   Manufacturer: Creative Technology Ltd&lt;br /&gt;   Model: Creative Zen Vision:M&lt;br /&gt;   Device version: 1.30.02_0.00.16&lt;br /&gt;   Serial number: 00023C02FB1FE532E960B05763D234C3&lt;br /&gt;   Vendor extension ID: 0x00000006&lt;br /&gt;   Vendor extension description: microsoft.com: 1.0;microsoft.com/WMPPD: 10.0;mi&lt;br /&gt;crosoft.com/WMDRMPD: 10.1;&lt;br /&gt;Supported operations:&lt;br /&gt;   1001: get device info&lt;br /&gt;   1002: Open session&lt;br /&gt;   1003: Close session&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Quite a lot of it actually, but here is the more relevant part&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  3009: MP3&lt;br /&gt;      de99: AudioWAVECodec&lt;br /&gt;      de9a: AudioBitRate&lt;br /&gt;      dc46: Artist&lt;br /&gt;      dc89: Duration&lt;br /&gt;      dc8b: Track&lt;br /&gt;      dc8c: Genre&lt;br /&gt;      dc99: OriginalReleaseDate&lt;br /&gt;      dc9a: AlbumName&lt;br /&gt;      de93: SampleRate&lt;br /&gt;      de94: NumberOfChannels&lt;br /&gt;      de95: AudioBitDepth&lt;br /&gt;      dc91: UseCount&lt;br /&gt;      dc8a: Rating&lt;br /&gt;      d901: BuyFlag&lt;br /&gt;      dc01: StorageID&lt;br /&gt;      dc0b: ParentObject&lt;br /&gt;      dc02: ObjectFormat&lt;br /&gt;      dc04: ObjectSize&lt;br /&gt;      dc07: ObjectFileName&lt;br /&gt;      dc41: PersistantUniqueObjectIdentifier&lt;br /&gt;      dc4f: NonConsumable&lt;br /&gt;      dc44: Name&lt;br /&gt;   b901: WMA&lt;br /&gt;...&lt;br /&gt;   3008: MS Wave&lt;br /&gt;   ba05: Abstract Audio Video Playlist&lt;br /&gt;   ba01: Abstract Multimedia Album&lt;br /&gt;   ba03: Abstract Audio Album&lt;br /&gt;   3801: JPEG&lt;br /&gt;   300a: MS AVI&lt;br /&gt;   300c: ASF&lt;br /&gt;   b982: MP4&lt;br /&gt;   300b: MPEG&lt;br /&gt;   b981: WMV&lt;br /&gt;   bb83: vCard3&lt;br /&gt;   be03: vCalendar2&lt;br /&gt;   3000: Undefined Type&lt;br /&gt;   3001: Association/Directory&lt;br /&gt;   b802: Firmware&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Quite a few formats there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-2953477298962062574?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/2953477298962062574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=2953477298962062574' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/2953477298962062574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/2953477298962062574'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2007/01/creative-zen-vision-on-mac-darwin.html' title='Creative Zen Vision on Mac (Darwin)'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-3061121497906207357</id><published>2007-01-14T12:26:00.000+05:30</published><updated>2007-01-14T12:36:16.217+05:30</updated><title type='text'>Unix 101 - Tip</title><content type='html'>Here's the first post for the new year.&lt;br /&gt;&lt;br /&gt;You have a program that creates a file, writes to it and deletes it later. You want to read that file before its deleted. How do you do that? I have been through such situations in the past, and my crude solution often involved writing a shell script that would keep polling for the existence of the file and then copy it, if it exists. Now here is the Unix way of doing this (I found this in imake faq)&lt;br /&gt;&lt;br /&gt;Lets say the name of the transient file is xyz.  This is what you do&lt;br /&gt;&lt;br /&gt;$ touch fake&lt;br /&gt;$ ln fake xyz&lt;br /&gt;&lt;br /&gt;Now run the program that creates xyz. When it tries to remove it, since a hard link exists, it wouldn't be able to do so, and you can access the file afterwards !!&lt;br /&gt;&lt;br /&gt;Reminds me of the dead.letter and sendmail exploit. Hard links are fun :))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-3061121497906207357?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/3061121497906207357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=3061121497906207357' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/3061121497906207357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/3061121497906207357'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2007/01/unix-101-tip.html' title='Unix 101 - Tip'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-114732637410380469</id><published>2006-05-11T11:03:00.000+05:30</published><updated>2006-05-11T11:30:56.246+05:30</updated><title type='text'>AIX Kernel Debug - II</title><content type='html'>After a not so brief hiatus, I am back. Exams got over recently, and now I have a bit of free time to update the kernel debugging notes. So this one is about viewing kernel data using kdb.&lt;br /&gt;&lt;br /&gt;The AIX kdb pages [link] list three different ways in which you can view kernel data from userspace. If its global data, and has been duly exported with a .exp file at link time, then its as simple as using the variable name. However, since global data is not usually exported this way, and we do not want to recompile a module just to debug, we would look at the other options.&lt;br /&gt;&lt;br /&gt;Both the other methods require using a mapfile. A mapfile is a list of symbols in the kernel module, and their addresses (only relative), that can be generated while linking the module ( using the &lt;code&gt; -bloadmap:{mapfile}&lt;/code&gt; option.)&lt;br /&gt;&lt;br /&gt;Once that is done, this is how a mapfile looks like&lt;br /&gt;&lt;code&gt;&lt;br /&gt;*IE ADDRESS  LENGTH AL CL TY Sym#  NAME                      SOURCE-FILE(OBJECT) or IMPORT-FILE{SHARED-OBJECT}&lt;br /&gt;--- -------- ------ -- -- -- ----- ------------------------- -------------------------------------------------&lt;br /&gt;I                        ER S1    getgidx                   /lib/syscalls.exp{/unix}&lt;br /&gt;I                        ER S2    getuidx                   /lib/syscalls.exp{/unix}&lt;br /&gt;I                        ER S3    _system_configuration     /lib/syscalls.exp{/unix}&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;000007A4           PR LD S58   &lt;.qlog_write&gt;&lt;br /&gt;000007E4           PR LD S59   .qlog_disable_console_logging&lt;br /&gt;00000824           PR LD S60   .qlog_enable_console_logging&lt;br /&gt;00000864           PR LD S61   .qlog_get_log_types&lt;br /&gt;...&lt;br /&gt;... 000033DC 000004  2 TC SD S506  &lt;&gt; 000033E0 0001EC  3 RW CM S507  g_qlog_cntl                qlog.c(qlib.lib) 000035CC 000004  2 RW CM S508  kern_config              kernel_config.c(kconf.lib) 000035D0 00002C  3 RW CM S509  &lt;_$static_bss&gt;           sc_dnlc.c(dnlc.lib)&lt;br /&gt;000035FC 000004  2 RW CM S510  workflow_id              kernel_config.c(kconf.lib)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Understandably, there are several classes of symbols in this file, indicating program code, glues, readonly and readwrite data. The PR LD or the GL LD class indicates program code or glue code, and is the text segment. The offsets that appear here are relative to the offset of the program entry point, which you specified as -binit:{ entrypoint } while linking.&lt;br /&gt;&lt;br /&gt;So if you know the load address of the entry point, you can calculate the addresses for each function. And the lke command lets you do that, in kdb&lt;br /&gt;&lt;code&gt;&lt;br /&gt;(0)&gt; lke&lt;br /&gt;ADDRESS  FILE     FILESIZE FLAGS    MODULE NAME&lt;br /&gt;&lt;br /&gt;1 024F8000 02A1C000 0000F6E0 00000242 /usr/local/solidcore/s3/modules/scdrv&lt;br /&gt;2 024F8F00 029D6000 00009348 00000252 random32/usr/lib/drivers/random&lt;br /&gt;3 0219DF00 029B6000 000009AC 00100248 /unix&lt;br /&gt;4 024F8E00 0286A000 001229D0 00000252 nfs.ext32/usr/lib/drivers/nfs.ext&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;So to find out where scdrv loads, Use the number that appears in the first coloum&lt;br /&gt;&lt;code&gt;&lt;br /&gt;(0)&gt; lke 1&lt;br /&gt;  ADDRESS  FILE     FILESIZE FLAGS    MODULE NAME&lt;br /&gt;&lt;br /&gt;1 024F8000 02A1C000 0000F6E0 00000242 /usr/local/solidcore/s3/modules/scdrv&lt;br /&gt;le_flags....... TEXT DATA DATAEXISTS&lt;br /&gt;le_next........ 024F8F00   le_lex......... 00000000&lt;br /&gt;le_fp.......... 00000000   le_fh.......... 00000000&lt;br /&gt;le_file........ 02A1C000   le_filesize.... 0000F6E0&lt;br /&gt;le_data........ 02A280D8   le_datasize.... 00003608&lt;br /&gt;le_ldr......... 02A2C000   le_ldr_size.... 0x1141 (4417)&lt;br /&gt;le_exports..... 00000000   le_entrypoint.. 02A2B268&lt;br /&gt;le_usecount....        1   le_loadcount...        1&lt;br /&gt;le_ndepend.....        1   le_maxdepend...        1&lt;br /&gt;le_filename.... 024F8060   le_depend.... @ 024F805C&lt;br /&gt;TOC@........... 02A2B34C&lt;br /&gt;                process trace backs&lt;br /&gt;                    .scdrv &lt;span style="font-weight: bold;"&gt;02A1C160&lt;/span&gt;                  .scdrv_fini 02A1C2A0&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;This address, when added to the relative addresses in the map file, gives us the  load location of the functions.&lt;br /&gt;&lt;br /&gt;&lt;to&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-114732637410380469?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/114732637410380469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=114732637410380469' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/114732637410380469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/114732637410380469'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2006/05/aix-kernel-debug-ii.html' title='AIX Kernel Debug - II'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-114287423992085753</id><published>2006-03-20T22:27:00.000+05:30</published><updated>2006-03-20T22:47:03.040+05:30</updated><title type='text'>Relinking binaries</title><content type='html'>AIX never ceases to amaze. During the course of brushing up for a &lt;a href="http://qasimzaidi.googlepages.com/aix-intro.pdf"&gt;presentation on AIX&lt;/a&gt;, this turned up in the ld man page.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The ld command can relink a program without requiring that you list all input object files again. For example, if one object file from a large program has changed, you can relink the program by listing the new object file and the old program on the command line, along with any shared libraries required by the program.&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;br /&gt;AIX is &lt;span style="font-style: italic;"&gt;THE only Unix&lt;/span&gt; that can do that. Doesn't that means limitless possibilities ? It turns the whole idea of binary editing upside down. As an example, let us say we have a "test" program consisting of 2 different functions main and testfn, contained in main.c and testfn.c.&lt;br /&gt;&lt;br /&gt;I want to override testfn. I can do that so easily, by writing testfn in a new file, say newfn.c and relinking the binary.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ xlc -o test newfn.c test&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Can we use this to extract code from binaries ? Don't know, lets figure out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-114287423992085753?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/114287423992085753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=114287423992085753' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/114287423992085753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/114287423992085753'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2006/03/relinking-binaries.html' title='Relinking binaries'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-113758732024490542</id><published>2006-01-18T17:55:00.000+05:30</published><updated>2006-01-18T17:58:40.260+05:30</updated><title type='text'>AIX Crash dumps - II</title><content type='html'>Once you have a crash dump, there are several things you might like to do. If you are fiddling with filesystems, for example, you would like to be able to print vnodes and gnodes.&lt;br /&gt;&lt;br /&gt;In kdb, you first need to tell kdb the header that defines your structure. In case of struct vnode, its sys/vnode.h. So we invoke kdb as&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#  kdb -i /usr/include/sys/vnode.h&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and issue the print command&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;0&gt;print vnode address&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Which should print something like&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;struct vnode {&lt;br /&gt;    ushort v_flag       = 0x0000;&lt;br /&gt;    ushort v_flag2      = 0x0000;&lt;br /&gt;    ulong32int64_t v_count      = 0x00000000;&lt;br /&gt;    int v_vfsgen        = 0x00000000;&lt;br /&gt;    union Simple_lock {&lt;br /&gt;        simple_lock_data _slock = 0x00000000;&lt;br /&gt;        struct lock_data_instrumented *_slockp  = 0x00000000;&lt;br /&gt;    } v_lock;&lt;br /&gt;    struct vfs *v_vfsp  = 0x31349808;&lt;br /&gt;    struct vfs *v_mvfsp = 0x00000000;&lt;br /&gt;    struct gnode *v_gnode       = 0x13C823E0;&lt;br /&gt;    struct vnode *v_next        = 0x00000000;&lt;br /&gt;    struct vnode *v_vfsnext     = 0x13987F38;&lt;br /&gt;    struct vnode *v_vfsprev     = 0x13D1AAE8;&lt;br /&gt;    union v_data {&lt;br /&gt;        void *_v_socket = 0x00000000;&lt;br /&gt;        struct vnode *_v_pfsvnode       = 0x00000000;&lt;br /&gt;    } _v_data;&lt;br /&gt;    char *v_audit       = 0x00000000;&lt;br /&gt;} foo[0];&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-113758732024490542?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/113758732024490542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=113758732024490542' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/113758732024490542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/113758732024490542'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2006/01/aix-crash-dumps-ii.html' title='AIX Crash dumps - II'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-113756180503673068</id><published>2006-01-18T10:44:00.000+05:30</published><updated>2006-05-11T12:35:32.960+05:30</updated><title type='text'>AIX crash dumps</title><content type='html'>These are supposed to be my working notes on Crash dump analysis on AIX.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1:&lt;/span&gt;&lt;br /&gt;OK, so when the system panics, you will hear the periodic beeps typical of the RS/6000 (if you are sitting close by). The beeps would go on as the machine dumps core, and if you do not want a core and have a slow machine, you could better restart by pressing the system reset button on the machine&lt;br /&gt;&lt;br /&gt;[ &lt;span style="font-style: italic;"&gt;There is a Step 0: where you make the system panic, but the details are left as an excercise to the reader :). See sysdumpstart(1) for more details.&lt;/span&gt; ]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2: &lt;/span&gt;&lt;br /&gt;When the system now boots, it may prompt you about saving the core dump before going into normal boot process. If you have a place to save ( a spare partition) , do save the dump here, or else press 99 to continue.&lt;br /&gt;&lt;br /&gt;[ &lt;span style="font-style: italic;"&gt;All of this depends on your configuration. Running sysdumpdev will allow you to examine and alter your dump settings. The Primary dump device is /dev/hd6 by default, which is also the AIX paging volume. Other settings include compression and ... (well, RTFM)&lt;/span&gt; ]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3:&lt;/span&gt; (If you pressed 99 in last step, or else skip)&lt;br /&gt;Now when the system is up, you use savecore -f /directory_path to save the core in a specific place. This would leave you a compressed .Z file, and a kernel image.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4: &lt;/span&gt;&lt;br /&gt;Uncompress the core using gunzip.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 5: &lt;/span&gt;&lt;br /&gt;Run kdb as&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# kdb vmcore.1 vmunix.1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And you would get something like this from kdb in return&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;19)  mirdd [5 entries]&lt;br /&gt;20)  kbddd            [2 entries]&lt;br /&gt;21)  mousedd          [2 entries]&lt;br /&gt;Component Dump Table has 913 entries&lt;br /&gt;         START              END &lt;name&gt;&lt;br /&gt;0000000000001000 0000000002147040 start+000FD8&lt;br /&gt;000000002FF3B400 000000002FF80A98 __ublock+000000&lt;br /&gt;000000002FF22FF4 000000002FF22FF8 environ+000000&lt;br /&gt;000000002FF22FF8 000000002FF22FFC errno+000000&lt;br /&gt;00000000E0000000 00000000F0000000 sys_resource+000000&lt;br /&gt;PFT:&lt;br /&gt;id....................0004&lt;br /&gt;raddr.....0000000000C00000 eaddr.....0000000000C00000&lt;br /&gt;size..............00000000 align.............00000000&lt;br /&gt;valid..1 ros....0 fixlmb.1 seg....1 wimg...2&lt;br /&gt;&lt;br /&gt;PVT:&lt;br /&gt;id....................0002&lt;br /&gt;raddr.....0000000001000000 eaddr.....0000000001000000&lt;br /&gt;size..............00000000 align.............00000000&lt;br /&gt;valid..1 ros....0 fixlmb.1 seg....1 wimg...2&lt;br /&gt;Dump analysis on POWER_PC POWER_604 machine with 1 available CPU(s)  (32-bit registers)&lt;br /&gt;Processing symbol table...&lt;br /&gt;.......................done&lt;br /&gt;&lt;/name&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 6:&lt;/span&gt;&lt;br /&gt;Now we would see what really caused the panic. Run stat, and you will get some info on the machine and the core&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;(0)&gt; stat&lt;br /&gt;SYSTEM_CONFIGURATION:&lt;br /&gt;POWER_PC POWER_604 machine with 1 available CPU(s)  (32-bit registers)&lt;br /&gt;&lt;br /&gt;SYSTEM STATUS:&lt;br /&gt;sysname... AIX&lt;br /&gt;nodename.. fundu&lt;br /&gt;release... 3&lt;br /&gt;version... 5&lt;br /&gt;build date Apr 10 2005&lt;br /&gt;build time 21:52:04&lt;br /&gt;label..... yes&lt;br /&gt;machine... 00081AAA4C00&lt;br /&gt;nid....... 081AAA4C&lt;br /&gt;time of crash: Wed Jan 18 04:29:05 2006&lt;br /&gt;age of system: 15 hr., 52 min., 38 sec.&lt;br /&gt;xmalloc debug: disabled&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And the real thing, a backtrace of the function call&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;CRASH INFORMATION:&lt;br /&gt;CPU 0 CSA 2FF3B400 at time of crash, error code for LEDs: 30000000&lt;br /&gt;pvthread+004D80 STACK:&lt;br /&gt;[0000A5E0].test_and_set+000020 ()&lt;br /&gt;[00215020]slock_ppc+000320 (??, ??)&lt;br /&gt;[00009554].simple_lock+000054 ()&lt;br /&gt;[001F52A4]j2_rename+000140 (??, ??, ??, ??, ??, ??, ??)&lt;br /&gt;[029CC17C]sc_vop_rename+000088 (??, ??, ??, ??, ??, ??, ??)&lt;br /&gt;[002F8D54]vnop_rename+0000DC (??, ??, ??, ??, ??, ??, ??)&lt;br /&gt;[0033C4C4]rename+00035C (2FF22DD3, 2FF22DE2)&lt;br /&gt;[00003AD8].sys_call+000000 ()&lt;br /&gt;[kdb_get_memory] no real storage @ 2FF226C8&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;There are more steps, which would be added after I am done with the debugging of the core at hand.&lt;br /&gt;&lt;br /&gt;[ As a sidenote: The stat command is also the AIX equivalent of dmesg, which you would certainly miss, if you have used other unixes, such as Linux and HP-UX. It would show you the last few kernel printfs, still in memory, and that includes messages generated using bsdlog ]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-113756180503673068?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/113756180503673068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=113756180503673068' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/113756180503673068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/113756180503673068'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2006/01/aix-crash-dumps.html' title='AIX crash dumps'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-113099638339661132</id><published>2005-11-03T11:04:00.000+05:30</published><updated>2005-11-03T11:09:43.406+05:30</updated><title type='text'>mdb</title><content type='html'>mdb is a very powerful debugger. Unfortunately for those with a gdb background, its a bit too powerful. (gdb cripples the mind, being so simple to use.). And when you have to keep switching between mdb and kdb and kwdb and q4, it futher complicates stuff.&lt;br /&gt;&lt;br /&gt;So I have decided that I would keep adding mdb tips, links and everything else, for ready reference in this post. Sun's Modular Debugger Guide, after all, is no good for someone looking for 'mdb by Example' kind of a book. This &lt;a href="http://blogs.sun.com/roller/page/jwadams?entry=an_mdb_1_cheat_sheet"&gt;post from Jonathan Adams weblog&lt;/a&gt;, however is a good one.&lt;br /&gt;&lt;br /&gt;Here are other good links. ....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-113099638339661132?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/113099638339661132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=113099638339661132' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/113099638339661132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/113099638339661132'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2005/11/mdb.html' title='mdb'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-112481764609199685</id><published>2005-08-23T22:45:00.000+05:30</published><updated>2005-08-23T22:50:46.100+05:30</updated><title type='text'>gdbm</title><content type='html'>If you are looking for a &lt;span style="font-style:italic;"&gt;fairly simple, embeddable in memory database&lt;/span&gt; ( actually a hash), &lt;a href="http://www.gnu.org/software/gdbm/gdbm.html"&gt;gdbm&lt;/a&gt; is just what you need. Based on the Unix dbm, it has a simple API and an LGPL license. Of course, there is nothing like SQL queries, Encrypted Relational DBs, transaction support and all that, but then, if you need that, there are bigger and more complex databases available out there. ( There was one recently out, from IBM, but it was all java).&lt;br /&gt;&lt;br /&gt;Here is what GDBM's man page says&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;GNU dbm is a set of database routines that use extensible hashing. It works similar to the standard UNIX dbm routines.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-112481764609199685?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/112481764609199685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=112481764609199685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/112481764609199685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/112481764609199685'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2005/08/gdbm.html' title='gdbm'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-112417477619104289</id><published>2005-08-16T12:01:00.000+05:30</published><updated>2005-08-16T12:16:16.200+05:30</updated><title type='text'>Make</title><content type='html'>Adrian Reau has a &lt;a href="http://freshmeat.net/articles/view/1702/"&gt;good article on freshmeat&lt;/a&gt;, discussing the shortcomings of venerable make program.&lt;br /&gt;Anyone who has ever tried to make a portable build system for more than a couple of platforms would agree that make is just not enough. There are so many heavily used, Gnu Make features that are not there on other unixes.&lt;br /&gt;&lt;br /&gt;Unfortunately, the portability problem isn't solved by the use of &lt;a href="http://freshmeat.net/articles/view/1715/"&gt;Make replacements&lt;/a&gt; he has suggested. But for other problems , like &lt;a href="http://http://www.canb.auug.org.au/~millerp/rmch/recu-make-cons-harm.html"&gt;recursive make&lt;/a&gt;, these (esp. cook) seem to be decent replacements. Unfortunately, the build chain never gets the importance it should (becuase our focus is to fix customer issues, and build problems are essentially developer issues).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-112417477619104289?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/112417477619104289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=112417477619104289' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/112417477619104289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/112417477619104289'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2005/08/make.html' title='Make'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-111816483176812626</id><published>2005-06-07T22:50:00.000+05:30</published><updated>2005-08-16T12:17:31.743+05:30</updated><title type='text'>Future</title><content type='html'>&lt;p&gt;What is the primary focus of Linux development. Performance was undoubtedly what Torvalds had in mind. Guided by the dreams of 'World domination', becoming an easy to use desktop operating system with windows like GUI / Ease of Use/ Hardware Autodection etc. top the wishlist today.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Which makes me wonder, whether there is going to be a time, when Windows itself would be history, &amp; linux would be the de facto standard. That would be the time when we would see FreeBSD/NetBSD/OpenBSD emerging as alternatives, and people arguing why the *BSD's are superior to Linux, in terms of security. Others who are not so paranoid about security may be arguing why Linux isn't as free as the Hurd. And of course the dedicated band of followers of Apple's Macs would still be around, arguing why Mac still beats them all.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-111816483176812626?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/111816483176812626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=111816483176812626' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/111816483176812626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/111816483176812626'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2005/06/future.html' title='Future'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-111806948637373031</id><published>2005-06-06T20:21:00.000+05:30</published><updated>2005-06-06T20:21:26.380+05:30</updated><title type='text'>Never Again</title><content type='html'>&lt;p class="mobile-post"&gt;Today I spent around 3 hours in a worthless meeting discussing how to &lt;br /&gt;make builds.&lt;br /&gt;At the end of it I have little to show for.&lt;/p&gt;&lt;p class="mobile-post"&gt;This is the worst way to waste your time, and I swear to myself that I &lt;br /&gt;am never going to do such a meeting ever again.&lt;br /&gt;I am going to pull out halfway, if I happen to be in such a meeting, &lt;br /&gt;however impolite it may seem.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-111806948637373031?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/111806948637373031/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=111806948637373031' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/111806948637373031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/111806948637373031'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2005/06/never-again.html' title='Never Again'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-111787116432526482</id><published>2005-06-04T12:55:00.000+05:30</published><updated>2005-06-04T13:16:04.333+05:30</updated><title type='text'>Performance Woes</title><content type='html'>I was happily using my laptop all along, and then, all of a sudden, It seemed as if I had a hardware downgrade.&lt;br /&gt;&lt;br /&gt;The first thing I noticed was problems with screen refresh. My primary laptop app is firefox, and it seemed to be give me a hard time. The display wouldn't refresh properly, and just a couple of minimize maximise events would result in X server becoming unresponsive for quite a few seconds.&lt;br /&gt;&lt;br /&gt;I had just upgraded to the high performance jk series kernel 2.6.11, and with such a poor performance I suspected the kernel itself. Reverting to 2.6.7 didn't helped. The X server didn't had any memory issues, top didn't showed any anamolies, and vmstat statistics were just fine. Swap was unused, and there was enough free memory. I even suspected firefox , and later X, so upgraded both of them, to no avail. Considered upgrading to xorg, but didn't had the time or the courage to go through all that.&lt;br /&gt;&lt;br /&gt;I had almost decided to ditch my half mepis - half debian distro, and load a hoary hedgehog quickly.Ubuntu is what I use at work on the desktop most of the time, but that meant wasting a lot of customization effort , and countless hours installing arcane softwares only I need on my laptop.&lt;br /&gt;&lt;br /&gt;Feeling somewhat bored today, and with nothing worthwhile on my hands , I thought of the joystick issue I had faced sometime back with tuxkart a long time back. I thought I would fix the game so that the joystick can be used with an otherwise nice game, and fired tuxkart.&lt;br /&gt;&lt;br /&gt;And finally tuxkart proved to be my saviour, as it cribbed about DRI being disabled. The performance was terrible too, so I was damn sure DRI works with my Intel Extreme Graphics card (Intel 855 .../ I810 driver).&lt;br /&gt;A grep on XFree86 logs showed direct rendering was indeed disabled. A couple of google searches and several changes in XFree86 config file later, I ended up with DRI still being disabled. The only thing that improved was the X resolution, I switched that to 1280x768 on my WXGA screen.&lt;br /&gt;&lt;br /&gt;Now XFree86 logs are really big and I finally chanced upon a line saying DRI disabled because 4kB of additional memory required was not available. Googling this didn't helped much but then, I found the root cause , still higher up in the logs, a complaint about /dev/agpgart being unavailable. I quickly did a modload  agpgart, Ctrl Alt Backspace, and there it was, my X server with DRI enabled, Tuxkart running happily, and glxinfo showing that DRI is indeed enabled.&lt;br /&gt;&lt;br /&gt;So I quickly edited /etc/modules, added agpgart at the end, and proceeded to blog what I might require again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-111787116432526482?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/111787116432526482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=111787116432526482' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/111787116432526482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/111787116432526482'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2005/06/performance-woes.html' title='Performance Woes'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-111531692188022098</id><published>2005-05-05T23:45:00.000+05:30</published><updated>2005-05-05T23:45:21.906+05:30</updated><title type='text'></title><content type='html'>1 2 3 testing ...&lt;br /&gt;&lt;p&gt;Now this entry is just to test if the gnome blogspot entry really works. Seems like it does. &lt;strong&gt;Formatting&lt;/strong&gt; options are limited, but this is still very &lt;em&gt;convenient&lt;/em&gt;. If only blogger will export an API to publish pictures, I would have posted an screenshot.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;To test the add link button here is a link to my &lt;a href="http://www.geocities.com/mqzaidi/resume.html"&gt;resume&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-111531692188022098?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/111531692188022098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=111531692188022098' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/111531692188022098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/111531692188022098'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2005/05/1-2-3-testing.html' title=''/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-111510204365004256</id><published>2005-05-03T12:03:00.000+05:30</published><updated>2005-05-05T13:31:04.700+05:30</updated><title type='text'>Automatic Proxy Configuration</title><content type='html'>I connect to two different networks while at home and office, and one of them uses an http proxy, while the other one doesn't.&lt;br /&gt;&lt;br /&gt;The solution is to have an autoproxy.pac file, accessible from the localhost ( I am anyway running apache on my laptop, but the same thing should work using file://somedir/autoproxy.pac.&lt;br /&gt;&lt;br /&gt;You configure the proxy script in Edit-&gt;Preferences-&gt;Connection Settings-&gt;Automatic proxy configuration url&lt;br /&gt;&lt;br /&gt;So here is the one I found from the net, and the ideal version of autoproxy.pac (that didn't work)&lt;br /&gt;&lt;br /&gt;function FindProxyForURL(url, host)&lt;br /&gt; {&lt;br /&gt;  if (isInNet(myIpAddress(),"192.168.82.0","255.255.255.0"))&lt;br /&gt;   return "PROXY 192.168.82.56:3128";&lt;br /&gt;  else&lt;br /&gt;   return "DIRECT";&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;It doesn't works becausemyIpAddress() returns 127.0.0.1, which has something to do with interface metrics. So this is my modified version, that works&lt;br /&gt;&lt;br /&gt;function FindProxyForURL(url, host)&lt;br /&gt;{&lt;br /&gt; if (isResolvable("server.delhi.solidcore.com"))&lt;br /&gt;  return "PROXY 192.168.82.56:3128";&lt;br /&gt; else&lt;br /&gt;  return "DIRECT";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;This would put some load on the DNS, in that server will be resolved, and it would take slightly more time, but this works, esp. in a DHCP environment.&lt;br /&gt;&lt;br /&gt;My home network consists of a Fedora Linux router that connects to 24online cable network. Sometimes I don't want to put the router on to just access internet from my laptop, so I use this script (run as root)&lt;br /&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;# Set environment for cable access&lt;br /&gt;ifconfig eth1 172.16.6.1&lt;br /&gt;route add -net 0 gw 172.16.1.1&lt;br /&gt;echo 'nameserver 172.16.1.1' &gt; /etc/resolv.conf&lt;br /&gt;linc start&lt;br /&gt;&lt;br /&gt;where 172.16.6.1 is the static IP assigned to me by my cablewalah , and 172.16.1.1 is the 24online gateway. linc is a daemon that allows you to log-in to a 24online network (you can use crclient instead, but thats closed source and buggy). Actually just saying closed source would have been enough :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-111510204365004256?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/111510204365004256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=111510204365004256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/111510204365004256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/111510204365004256'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2005/05/automatic-proxy-configuration.html' title='Automatic Proxy Configuration'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-111487272201770873</id><published>2005-04-30T20:01:00.000+05:30</published><updated>2005-04-30T20:22:02.020+05:30</updated><title type='text'>Code Reviews</title><content type='html'>Do code reviews help. Are they some sort of magic cure, a panacea for all evils that affect us ?&lt;br /&gt;Some would like us to believe so.  What do I think. Having worked in a SEI CMM Level 5 company, I couldn't agree more with Taran,&lt;br /&gt;&lt;br /&gt;&lt;i&gt;I'd like to think that code reviews have value simply because I&lt;br /&gt;have personally wasted a lot of valuable time in them, worrying about&lt;br /&gt;alphabetizing variables and so on. But that doesn't make it so, and&lt;br /&gt;nobody really can prove whether they are worthwhile are not.&lt;br /&gt;&lt;br /&gt;&lt;/i&gt;&lt;i&gt;Code Reviews tend to be silly things in corporate settings. They&lt;br /&gt;argue about code formatting, how many spaces equate to a tab, and so&lt;br /&gt;on. My personal favourite was getting trashed for not alphabetizing my&lt;br /&gt;#define variables by NAME instead of what I had done - alphabetizing by&lt;br /&gt;variable type, then name. Yes, these things are really done in&lt;br /&gt;professional shops. Also, if nobody else in the room is familiar with&lt;br /&gt;the history of the code and the function of the code - not to mention&lt;br /&gt;the dependencies, and so on - is it really a code review? How can you&lt;br /&gt;analyze 12 lines of code in one class when you're dealing with a&lt;br /&gt;complex software system with high interaction? Not unless the people in&lt;br /&gt;the room *know* the code - all of it. Unlikely.&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;Read it all here&lt;i&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt; &lt;a href="http://www.knowprose.com/node/82"&gt;http://www.knowprose.com/node/82&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;Do I review others code ? I do, but that is when it starts failing.&lt;br /&gt;(I do read code written by experts a lot , not for reviewing, but to learn how to write good code. )&lt;br /&gt;&lt;br /&gt;Do I like others reviewing my code ? They are most welcome, provided that they point out bugs, not formatting issues. I have a set of personal preferences I have developed. Any attempt to introduce a UNIFORM coding style (guidelines) is just that, like introducing a school uniform for the programmers. I would change my coding preferences, my indentation style and my variable naming style the day you convince me that yours has some tangible benefits, well worth the efforts I put in. Till that day, I code the way I do, so may you.&lt;br /&gt;&lt;br /&gt;The best way to overcome indentation issues and have a uniform look and feel is to use a program like indent, because the debate over tab and spaces and braces and newlines is an eternal one.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;a href="http://www.knowprose.com/node/82"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-111487272201770873?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/111487272201770873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=111487272201770873' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/111487272201770873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/111487272201770873'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2005/04/code-reviews.html' title='Code Reviews'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-111279712803019051</id><published>2005-04-06T19:39:00.000+05:30</published><updated>2005-05-07T00:04:44.940+05:30</updated><title type='text'>Linux on Compaq Pressario V2036AP</title><content type='html'>&lt;p&gt;Copyright © 2004 Qasim Zaidi&lt;br /&gt;Authors homepage:&lt;br /&gt;&lt;a href="http://thruput.blogspot.com/"&gt;http://thruput.blogspot.com&lt;/a&gt;&lt;/p&gt;&lt;p&gt;This document was created &lt;sdfield type="DATETIME" sdval="38396.1719907407" sdnum="1033;1033;MM/DD/YY"&gt;02/13/05&lt;/sdfield&gt;.&lt;br /&gt;Last updated &lt;sdfield type="DATETIME" sdval="38398.6019328704" sdnum="1033;1033;MM/DD/YY"&gt;02/15/05&lt;/sdfield&gt;&lt;/p&gt;&lt;h3&gt;System Specification&lt;/h3&gt;Intel Centrino Mobile Processor 735 (1.7 Ghz)&lt;br /&gt;&lt;p&gt;14” WXGA Screen&lt;br /&gt;Bluetooth, Intel 2200 Pro Wireless Lan&lt;br /&gt;5 in 1 Card Reader&lt;br /&gt;USB, Realtek 100Mbps NIC, Smartink 56kbps Softmodem&lt;br /&gt;S-Video Out, IE1394&lt;br /&gt;60 GB, 512 MB RAM, 2MB L2 Cache&lt;/p&gt;&lt;p&gt;This laptop of the Pressario V2000 Family, came with 256 MB RAM,which I upgraded to 512 MB.It came preinstalled with MS Windows XP Home, with a single NTFS partition spanning the entire disk.&lt;/p&gt;&lt;h3&gt;Linux Distributions tried on this Laptop&lt;/h3&gt;I first tried to install Mandrake 10.1 Community Edition on this Laptop. Installation went smoothly, and it successfully resized the NTFS partition , using ntfsresize. However, the system won't boot. It hanged in one of the startup script, so I booted into Single User mode and commented the firstboot script. This didn't helped either,as it again stopped in one of the runlevel 5 scripts. I was short of patience, so I decided to give Ubuntu a try.&lt;br /&gt;&lt;p&gt;I had no great hopes from Ubuntu, having read some of the reviews of how difficult its Laptop installation was. True to my premonition,the installation itself hanged quite early enough.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;My thoughts finally turned to SuSe 9.2. On my desktops I run FC2,FC3 , FreeBSD &amp; Solaris. However, I didn't wanted to run Fedora on the Laptop, and I wanted all of the hardware to be working.&lt;br /&gt;&lt;/p&gt;As I started waiting for 3.1 GB SuSe Download to finish, I decided to give SimplyMepis a try. And it simply ran, out of the box. So I installed it on Harddisk, and thats what I am running as I writethis.&lt;br /&gt;&lt;h3&gt;SimplyMepis&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;SimplyMepis is a single CD , KDE only live distribution, based on Debian. Installation is point and click, and its optimised for 586 &amp;amp;686 systems. Even non-free software such as Real Player are preinstalled, and multimedia support is excellent. Since I never intended to use my desktop for anything else (Desktops are much better for coding, my primary job function), I found this very impressive.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Almost everything worked out of the box. That excludes the soft modem. Wireless didn't worked initially and I am yet to test bluetooth, since I don't have any blue tooth devices.&lt;/p&gt;&lt;h3&gt;Intel Pro 2200 Wireless adapter&lt;/h3&gt;SimplyMepis didn't came with ipw2200 support installed, though it did had modules for an older model (Intel Pro 2100 Wireless card). I&lt;br /&gt;&lt;p&gt;downloaded the latest drivers &amp; firmware from ipw2200.sf.net.&lt;br /&gt;Also had to download and install sources for kernel 2.6.7 (and later 2.6.11) as they are required to compile the driver.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;After compiling the module, and making install, you will have to copy the firmware manually (and you have to download it too!, from the same location).&lt;br /&gt;&lt;/p&gt; &lt;p&gt;For compiling the modules, if you are getting a lot of errors, just go to /usr/src/linux and do make (after copying the correct config file from /boot to /usr/src/linux/.config) . You can press Ctrl-C and cancel build just after first few lines. Then go to ipw2200 extraction dir and recompile.&lt;br /&gt;&lt;/p&gt; Once you are able to load the ipw2200 module, to make it load automatically at boot time -Edit /etc/modules and add ipw2200 on a new line.&lt;br /&gt;Since this file is processed much before the networking subsystem comes up, thewireless device will be named eth0, and the other NIC card becomes eth1.&lt;p&gt;Next, you need to automate this process, so that wireless is up if&lt;br /&gt;the keyboard switch is on. This requires you to edit the&lt;br /&gt;/etc/network/interfaces file. Here is mine&lt;/p&gt;&lt;br /&gt;&lt;span style=""&gt;&lt;span style="font-size:85%;"&gt;auto lo&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=""&gt;&lt;span style="font-size:85%;"&gt;iface lo inet loopback&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=""&gt;&lt;span style="font-size:85%;"&gt;auto eth0&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=""&gt;&lt;span style="font-size:85%;"&gt;iface eth0 inet&lt;br /&gt;dhcp&lt;br /&gt;wireless_essid UP&lt;br /&gt;wireless_mode Managed&lt;br /&gt;wireless_key&lt;br /&gt;f8ec3213432d574e63a595b647&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=""&gt;&lt;span style="font-size:85%;"&gt;auto eth1&lt;br /&gt;iface eth1&lt;br /&gt;inet dhcp&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;Gnome&lt;/h3&gt;&lt;p&gt;I keep switching between Gnome and KDE. Since last few months, I&lt;br /&gt;am running Gnome, in spite of being a KDE Fan, traditionally. To a&lt;br /&gt;large extent, Gnome improvements and its cross platform nature (Its&lt;br /&gt;also available on Solaris and Free BSD) are responsible for this.&lt;/p&gt;Mepis doesn't comes with gnome, but installation is really easy.&lt;br /&gt;&lt;p&gt;All you need to do is&lt;/p&gt;&lt;p&gt;# apt-get install gnome-desktop-environment&lt;/p&gt;&lt;p&gt;However, when logging into GNOME, an ugly error message props&lt;br /&gt;up&lt;br /&gt;Error activating XKB configuration ...&lt;/p&gt;&lt;p&gt;Everything else worked fine. After a considerable googling around&lt;br /&gt;( as this seems to be a common catchall XKB error), the fix was&lt;br /&gt;really simple. Going to Applications -&amp;gt; Desktop Preferences -&amp;gt;&lt;br /&gt;Keyboard and changing the layout from deflayout to US English fixed&lt;br /&gt;this problem.&lt;/p&gt;&lt;h3&gt;TouchPad&lt;/h3&gt;&lt;p&gt;While the touchpad worked by default in Mepis, the on/off switch&lt;br /&gt;won't work making it difficult to type anything, as the mouse cursor&lt;br /&gt;will be moved. This is fixed simply by removing the mouseproto option&lt;br /&gt;thats passed at boot to kernel in default mepis configuration. The&lt;br /&gt;drawback is, scrolling doesn't works after this.&lt;br /&gt;&lt;/p&gt;For Mepis (which I believe actuall uses debian-unstable ), I found several debian packages for Synaptics available , such as&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;ksynaptics&lt;/p&gt; &lt;/li&gt;&lt;li&gt;&lt;p&gt;qsynaptics&lt;/p&gt; &lt;/li&gt;&lt;li&gt;&lt;p&gt;xfree86-synaptics-drivers&lt;br /&gt;which can be installed and used&lt;br /&gt;to configure the keyboard.&lt;/p&gt; &lt;p&gt;I found it easier to work with tapping disabled.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Keyboard&lt;/h3&gt;&lt;p&gt;See &lt;a href="http://www.peakunix.net/v2000.html"&gt;http://www.peakunix.net/v2000.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;for some excellent distribution-independent keyboard information.&lt;/p&gt;&lt;p&gt;If you use GNOME, you need to set up the correct keyboard layout,&lt;br /&gt;from either Applications-&amp;gt;Desktop Preferences-&amp;gt;Keyboard, or by&lt;br /&gt;manually editing the /etc/X11/XF86Config-4 file.&lt;/p&gt;&lt;p&gt;Once you have restarted your X server with the correct keyboard&lt;br /&gt;configuration, all that remains is setting the keyboard shortcuts,&lt;br /&gt;from Applications-&amp;gt;Desktop Preferences-&amp;gt;Keyboard Shortcuts.&lt;/p&gt;&lt;h3&gt;Arabic (Under construction) &lt;/h3&gt;&lt;p&gt;apt-get install katoob&lt;/p&gt;&lt;p&gt;apt-get install ttf-arabeyes ttf-kacst&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-111279712803019051?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/111279712803019051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=111279712803019051' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/111279712803019051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/111279712803019051'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2005/04/linux-on-compaq-pressario-v2036ap.html' title='Linux on Compaq Pressario V2036AP'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-111098236976269798</id><published>2005-03-16T19:32:00.000+05:30</published><updated>2005-03-16T19:43:42.056+05:30</updated><title type='text'>Random thoughts</title><content type='html'>A month has passed since I last blogged. So what happened.&lt;br /&gt;&lt;br /&gt;One big change that happened is I got a new Laptop (A Pentium Mobile, since I finally gave up on the wait for 64 bit AMD laptop). Second is the gradual shift from Fedora to Debian.&lt;br /&gt;&lt;br /&gt;It has been years since I am using Redhat. I am a late entrant, I guess the first one I used was RH 5.x. Then I have routinely loaded every release and upgraded to the next one.&lt;br /&gt;&lt;br /&gt;I still have Fedora Core 2/ RHEL 3 and Fedora core 3 on my PCs (Lucky enough to have 4 desktops and 1 laptop for personal use). But my primary distro at work is Ubuntu, and at home a combination of Fedora Core 2 and Mepis. So these are all the OS I have installed on my personal computers.&lt;br /&gt;&lt;br /&gt;Win XP Pro (office desktop1) -&gt; Don't remeber when it last ran, or even if it runs now. Just an entry in grub menu.&lt;br /&gt;RHEL (office desktop 1) -&gt; Not used since I installed Ubuntu&lt;br /&gt;Ubuntu (office desktop 1)&lt;br /&gt;Win XP Home (on laptop) -&gt; Used sometimes&lt;br /&gt;Mepis (on laptop) -&gt; used frequently&lt;br /&gt;Solaris 10 (64bit AMD- Office desk 2)&lt;br /&gt;Solaris 10 (32 bit Intel- Home desk2)&lt;br /&gt;Fedora 3 (Home desk 2)&lt;br /&gt;WinXP (Home desk 2) -&gt; for others in the family&lt;br /&gt;FreeBSD (Home desk1)&lt;br /&gt;Fedora Core 2 (Home desk1)&lt;br /&gt;&lt;br /&gt;And at the top of this, my current weeks interest is virtualization, so I sometimes run Debian on UML and FreeBSD on Qemu.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-111098236976269798?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/111098236976269798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=111098236976269798' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/111098236976269798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/111098236976269798'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2005/03/random-thoughts.html' title='Random thoughts'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-110709616217043045</id><published>2005-01-30T20:02:00.000+05:30</published><updated>2005-01-30T20:12:42.170+05:30</updated><title type='text'>Real to MP3</title><content type='html'>One frequent task I perform is a conversion from Real Audio to MP3. Most of my music content happens to be in real format, but I would prefer to listen to it on my discman, which plays MP3 disks. Hitherto, this required a trial version of StreamBox Ripper, an excellent conversion software, that also supports batch processing.&lt;br /&gt;&lt;br /&gt;Now that windows is gone, I had to look for Linux alternatives. I didn't had many hopes, since real-audio is a proprietary format, but I was in for a surprise. Real Networks is paying real attention to the Linux Platform (with a community supported Helix Player, and Free/Closed Real Player). And mplayer does the job of conversion just very well. Here is a shell script that I use to do batch conversions&lt;br /&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;INPUTFMTS='.ra .rm'&lt;br /&gt;&lt;br /&gt;convert() {&lt;br /&gt;for i in `find $1 -name '*'$3`&lt;br /&gt;do&lt;br /&gt; outfile=`basename $i $3`&lt;br /&gt; outdir=`dirname $i`&lt;br /&gt; if [ ! -e $2/$outdir ]; then&lt;br /&gt;        mkdir -p $2/$outdir;&lt;br /&gt; fi&lt;br /&gt; mplayer -vo null -vc dummy -af resample=44100 -ao pcm -waveheader $i &amp;&amp;amp; lame -m s audiodump.wav -o $2/$outdir/$outfile.mp3&lt;br /&gt;done&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;case $# in&lt;br /&gt;        2)break;;&lt;br /&gt;        *) echo "Usage: $0 &lt;source-dir&gt; &lt;destination-dir&gt;";&lt;br /&gt;           exit 1;;&lt;br /&gt;esac&lt;br /&gt;&lt;br /&gt;if [ ! -e $2 ]; then&lt;br /&gt;        mkdir $2 || exit 1;&lt;br /&gt;        echo "$2: pathname created";&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;if [ ! -d $2 ]; then&lt;br /&gt;        echo "Source directory invalid";&lt;br /&gt;        exit 1;&lt;br /&gt;fi&lt;br /&gt;        &lt;br /&gt;for i in $INPUTFMTS&lt;br /&gt;do&lt;br /&gt;        echo "Converting all $i files to mp3"&lt;br /&gt;        convert $1 $2 $i&lt;br /&gt;done&lt;br /&gt;rm -f audiodump.wav&lt;br /&gt;-------------------------------------------------------------------------&lt;br /&gt;I guess this script would also work for wma to mp3, you just need to add wma to INPUTFMTS variable.&lt;br /&gt;&lt;br /&gt;If I had to write a similar script on Windows , how difficult it would have been. I know this because my last job involved some windows batch scripting and vbscripting. Reminds me of this saying (probably by Larry Wall), about a good programming language&lt;br /&gt;&lt;br /&gt;Easy things should be easy, and difficult things should be possible.&lt;br /&gt;&lt;br /&gt;Not quite windows.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-110709616217043045?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/110709616217043045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=110709616217043045' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/110709616217043045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/110709616217043045'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2005/01/real-to-mp3.html' title='Real to MP3'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-110705413136373150</id><published>2005-01-30T08:15:00.000+05:30</published><updated>2005-01-30T08:32:11.363+05:30</updated><title type='text'>A tryst with FreeBSD</title><content type='html'>Now that I have a lot of freespace on my hard-disk, (since removing windows), I decided to experiment with another OS. I use Solaris+Linux at work, and Linux at home, so the choice gets limited to&lt;br /&gt;1) One of the BSDs (FreeBSD, NetBSD and OpenBSD)&lt;br /&gt;2) GNU Hurd&lt;br /&gt;3) Solaris 10&lt;br /&gt;(BeOS &amp; QNX I have already experimented with)&lt;br /&gt;&lt;br /&gt;I downloaded HURD quite some time ago, but it could only be compiled from another Hurd natively, and cross-compilation didn't looked easy. In any case, Hurd isn't going to be usable any time soon, so I downloaded the latest stable FreeBSD (5.3).&lt;br /&gt;&lt;br /&gt;Linux is no longer good enough. It has lost the exclusivity it had a few years back, so I needed something more uncommon to adorn my desktop. After all, every new kid on the block is running linux today ( or has run it at some point and given up), so you need something more to be accepted like a uber-geek, and thats where FreeBSD fits in very well. At least for the time being :)&lt;br /&gt;&lt;br /&gt;Jokes apart, I thought I had get some idea of the BSD kernel, and see if I can port the work I am doing on Solaris to FreeBSD. The two are a lot similar, and as I wait for the Solaris sources to be opened, FreeBSD kernel sources are proving quite helpful. Sun has taken the first step with dtrace (&lt;a href="http://www.opensolaris.org"&gt;http://opensolaris.org&lt;/a&gt;), but my guess is it would still take few more months.&lt;br /&gt;&lt;br /&gt;This post, being made from&lt;br /&gt;&lt;br /&gt;FreeBSD pluto.solar.com 5.3-RELEASE FreeBSD 5.3-RELEASE #0: Fri Nov  5 04:19:18 UTC 2004     root@harlow.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  i386&lt;br /&gt;&lt;br /&gt;is a proof that I have got FreeBSD and one of my LAN cards working. (which connects to 24Online cable network) . The other one still needs to be configured.&lt;br /&gt;&lt;br /&gt;BTW, Epiphany looks like a browser well done.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-110705413136373150?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/110705413136373150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=110705413136373150' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/110705413136373150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/110705413136373150'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2005/01/tryst-with-freebsd.html' title='A tryst with FreeBSD'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-110674280664891934</id><published>2005-01-26T17:52:00.000+05:30</published><updated>2005-01-26T18:03:26.646+05:30</updated><title type='text'>Adieu Windows</title><content type='html'>It has been more than a month since I last wrote. I would very much like to have an entry at least once a month.&lt;br /&gt;I am a long time linux user, using linux at work and home, most of the time. Still I had my machine set up for dual boot, and had to go through the rigouros exercise of formatting Windows every few months. Years ago, I would format it to get a clean new shiny system, &amp; after every format, it seemed like I had a hardware upgrade. Since an year or so, I am still following the ritual, but for a different reason; to get rid of all the spyware.&lt;br /&gt;&lt;br /&gt;The problem became too bad since I opted for broadband. So last time I had to format, which was around 90 days back, I decided to say good bye to dual booting windows. Of course, I still own hardware devices that are unsupported on Linux, but I am firm in my new year resolution, no windows on my home pc from now on. Fortunately, I no longer need to document my code &amp;amp; other stuff in Microsoft Word, so my office pc is running linux as happily. I have begun converting my powerpoint presentations to OpenOffice formats.&lt;br /&gt;&lt;br /&gt;Bye Bye Windows, may you never reside in my PCs RAM and disk ever again !!&lt;br /&gt;&lt;br /&gt;Amen&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-110674280664891934?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/110674280664891934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=110674280664891934' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/110674280664891934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/110674280664891934'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2005/01/adieu-windows.html' title='Adieu Windows'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-110321867536146931</id><published>2004-12-16T22:48:00.000+05:30</published><updated>2005-01-26T17:51:11.553+05:30</updated><title type='text'>Performance is a goal, correctness is a constraint</title><content type='html'>While writing my last post about Solaris, I never imagined that just two days later I would be programming kernel modules for solaris. I have conciously kept away from Solaris over the last few years, as I did not wish to have divide time from Linux, and get confused over the similarities as a side effect.&lt;br /&gt;&lt;br /&gt;They say 'The more things change, the more they remain the same' . On similar lines I think 'The more things appear the same, the more different they are' . Take C &amp;amp; C++ and Java as examples. I started my programming career with Java, then learnt C++ and finally learnt C ( Of course I am learning assembly now, isn't that natural ?). One would think that when you know C++ already, C would be easy . On the contrary, they are so similar that I had a tough time remembering the differences. Declaring variables as late as possible is one C++ best practices that would always result in my writing C programs that won't compile.&lt;br /&gt;&lt;br /&gt;The point of all this is, all *nixes are so much alike (superficially of course), that if you want to go a bit deeper under the hood, you start having a hard time. That philosophy, coupled with the conviction that only Free Software is the technology of future and is worth working on (more ramblings on this later) , kept me away from Solaris. As I program on Solaris now, its heartening and more than reassuring to know that come Feb, and the Sun will shine on the Open Source world. There won't be a GPL style license in all probability, but forcing a Unix company to open even with a BSD style license is no small success.&lt;br /&gt;&lt;br /&gt;[If you are still wondering how all this relates to the title, its past 11 now, and I have to get up early tomorrow, so that would come later.]&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-110321867536146931?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/110321867536146931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=110321867536146931' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/110321867536146931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/110321867536146931'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2004/12/performance-is-goal-correctness-is.html' title='Performance is a goal, correctness is a constraint'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-110120215364125042</id><published>2004-11-23T14:48:00.000+05:30</published><updated>2004-11-23T14:59:13.643+05:30</updated><title type='text'>Solaris going opensource ?</title><content type='html'>An article on slashdot suggests that Solaris 10 will be open-sourced. It further raises concerns about the effect of this on Linux. I do not see why it should be a cause for concern.&lt;br /&gt;&lt;br /&gt;First of all, linux is not the means or the end, its just an example of a successful FLOSS project. If the success of Linux could really force companies like Sun to take notice, and release products that were not originally developed using the floss way, and they turn out to be better, why should the Free Software community worry ? Let the best OS survive.&lt;br /&gt;&lt;br /&gt;Having said that, I still don't see how Free/Open sourced Solaris can be a threat. Solaris for intel has been free for a long time, but has that affected the adoption of Linux ? Not really, because for corporates , 'free' as in beer isn't everything. So If Solaris at all becomes Free &amp; Open, it would only affect those who were hindered in their adoption of Solaris because of TCOs. And besides the primary platform for solaris is sparc, just as the primary platform for linux is i386. We have versions of linux running on sparc, and versions of solaris on intel, and while both are free, they don't really compete. So the only threat that is there, is for those who have a sparc and couldn't afford Solaris uptil now.&lt;br /&gt;&lt;br /&gt;In the end, any such news is good news, and its only microsoft thats going to lose, as it becomes more and more isolated.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-110120215364125042?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/110120215364125042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=110120215364125042' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/110120215364125042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/110120215364125042'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2004/11/solaris-going-opensource.html' title='Solaris going opensource ?'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-110014607099646485</id><published>2004-11-11T09:32:00.000+05:30</published><updated>2004-11-11T09:37:50.996+05:30</updated><title type='text'>Relief</title><content type='html'>After a brief, or not so brief hiatus, I am back. The last few days have been difficult, and I have decided not to switch jobs anytime soon again, if God so wills. Feeling quite relieved now, after some stressful days of decision making.&lt;br /&gt;&lt;br /&gt;This is just one of those posts where you let the world know you still exist in a physical sense.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-110014607099646485?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/110014607099646485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=110014607099646485' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/110014607099646485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/110014607099646485'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2004/11/relief.html' title='Relief'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-109927635155448823</id><published>2004-11-01T07:40:00.000+05:30</published><updated>2004-11-11T09:32:13.996+05:30</updated><title type='text'>EDA tools</title><content type='html'>I am on the lookout for EDA tools, simple circuit simulation ones, that can be used in a classroom, to instruct first year engineering students. Something like a GPL'ed Electronics Workbench would do just fine. Since the tool would be used in a Lab Setup, and students would be having only a few hours to get familiar with (and not an entire course), it should have a GUI (must), and it should be intuitive. If you know of one, post a comment here.&lt;br /&gt;&lt;br /&gt;Initial search on source-forge yields three possibilities.&lt;br /&gt;&lt;br /&gt;The first one is &lt;a href="http://www.digital-simulator.de/"&gt;DigitalSimulator&lt;/a&gt;, which looks pretty stable (&amp; bloated too) and should suffice for digital experiments. Only thing that surprises me is its Java based, yet glued to MS Windows platfroms.&lt;br /&gt;&lt;br /&gt;Then there is &lt;a href="http://qucs.sourceforge.net"&gt;Qucs&lt;/a&gt; (Qt universal circuit simulator) , thats still in its 0.04 version, and would require some improvements before its ready for prime-time, but shows promise. This one of course, is more oriented towards electrical components (no digital circuits, no transistors/diodes either)&lt;br /&gt;&lt;br /&gt;And another one is &lt;a href="http://www.tkgate.org"&gt;tkgate&lt;/a&gt; (event driven digital circuit simulator with a tcl/tk-based graphical editor). I am yet to explore it and find out what an ED-DCS is. Time to get back to work !!&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-109927635155448823?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/109927635155448823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=109927635155448823' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/109927635155448823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/109927635155448823'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2004/10/eda-tools.html' title='EDA tools'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-109901597548494223</id><published>2004-10-29T07:42:00.000+05:30</published><updated>2004-10-29T07:51:15.220+05:30</updated><title type='text'>Stallman is Fed up</title><content type='html'>&lt;a href="http://photos1.blogger.com/img/161/2193/640/2.jpg"&gt;&lt;img style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; MARGIN: 2px; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid" height="157" src="http://photos1.blogger.com/img/161/2193/320/2.jpg" width="376" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ecol &lt;a target="ext" href="http://www.hello.com/"&gt;&lt;img style="BORDER-RIGHT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-TOP: 0px; BORDER-BOTTOM: 0px" alt="Posted by Hello" src="http://photos1.blogger.com/pbh.gif" align="absMiddle" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You bet he is, with this kind of strips doing the round.&lt;br /&gt;&lt;br /&gt;Now I like Dilbert, and could sometimes make some sense out of User Friendly, but &lt;a href="http://comic.escomposlinux.org/"&gt;Ecol &lt;/a&gt;(originally spanish, now translated to English) is just superb. I just subscribed it on my gmail account, and I am going to see if it could be printed by one of the local Linux magzines published here. I hope Ecol is GPL too.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-109901597548494223?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/109901597548494223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=109901597548494223' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/109901597548494223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/109901597548494223'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2004/10/stallman-is-fed-up.html' title='Stallman is Fed up'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-109884805248766082</id><published>2004-10-27T08:51:00.000+05:30</published><updated>2004-10-27T09:05:50.220+05:30</updated><title type='text'>Gambas</title><content type='html'>Slashdot is carrying a story on &lt;a href="http://gambas.sourceforge.net/"&gt;Gambas&lt;/a&gt;, a Visual Basic kind of a RAD for Linux. It has entered Release Candidate Phase, and I am dying to test it out. Its altogather a different matter that I don't know VB &amp; have never been comfortable with the idea of a RAD. My younger brother knows VB well, and I am sure he is going to like it. One big difference is that the BASIC code is compiled into bytecode, before being interpreted.&lt;br /&gt;&lt;br /&gt;And more than anything else, the screenshots feature terrific wallpapers (spoofs on the original Windows XP wallpaper).  See &lt;a href="http://gambas.sourceforge.net/2004-09-06.png"&gt;this&lt;/a&gt; , for an example :- If you know where I can get the wallpapers, do post the link here.&lt;br /&gt;&lt;br /&gt;I have a tough decision to make today, and I have almost made up my mind. If you had to choose between doing the work you love to do &amp; job security/brand name, what would you choose ? It would be rather obvious choice for most, but I don't have the benefit of retrospect to say so.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-109884805248766082?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/109884805248766082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=109884805248766082' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/109884805248766082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/109884805248766082'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2004/10/gambas.html' title='Gambas'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8879200.post-109875968142058868</id><published>2004-10-26T08:19:00.000+05:30</published><updated>2004-10-26T08:31:21.420+05:30</updated><title type='text'>First Blood</title><content type='html'>Its time to post the first bits. Time to decide what all is going to appear on this blog.&lt;br /&gt;&lt;br /&gt;Many a times have I tried maintaining a journal, with not so spectacular results. I have been thinking of having a blog since quite some time, &amp; actually created a PhoneLog &lt;insert&gt;. When the initial charm of my camera phone subsided, and the realisation dawned that neither of those whom I know are going to adopt GPRS/MMS any time soon, I stopped posting.&lt;br /&gt;Let me see how far do I go with blogging.&lt;br /&gt;&lt;br /&gt;What I intend to post (&amp;amp; solicit comments on), are my views (however flawed), of the Tech World, software in particular. Disgressions on my other interests, gadgets (cellphones, divx player &amp; the like) are allowed, every once in a while.&lt;br /&gt;&lt;br /&gt;I know this sounds boring, but didn't the title warned you !!&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8879200-109875968142058868?l=qasim.zaidi.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://qasim.zaidi.me/feeds/109875968142058868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8879200&amp;postID=109875968142058868' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/109875968142058868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8879200/posts/default/109875968142058868'/><link rel='alternate' type='text/html' href='http://qasim.zaidi.me/2004/10/first-blood.html' title='First Blood'/><author><name>Qasim Zaidi</name><uri>http://www.blogger.com/profile/00118625649607362355</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
