<?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-6144117508697071990</id><updated>2012-02-10T12:29:34.911-05:00</updated><category term='Python'/><category term='Internet'/><category term='Firefox-Extension'/><category term='MySQL'/><category term='gdb'/><category term='Javascript'/><category term='Thunderbird'/><category term='CVS'/><category term='Windows'/><category term='Java'/><category term='Fun'/><category term='Source Code'/><category term='Programming'/><category term='Tool'/><category term='C++'/><category term='Adsense'/><category term='Firefox'/><category term='Example'/><category term='Git'/><category term='Chrome'/><category term='Chrome-Extension'/><category term='Linux'/><category term='Software'/><category term='IE'/><category term='Blog'/><title type='text'>Tips, Tricks and Tools</title><subtitle type='html'>... and Thoughts</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.toptip.ca/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default?start-index=101&amp;max-results=100'/><author><name>Zen</name><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>130</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-8462104113937779143</id><published>2012-01-19T23:57:00.006-05:00</published><updated>2012-01-27T21:48:28.520-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox extension: Full Screen Image Viewer</title><summary type='text'>You can easily view images of a page in full screen with Full Screen Image Viewer extension. Just right-click on the Firefox browser and find the *Full Screen Image Viewer* item from the Context Menu.










The Image Viewer can also open the image links on a web page or your local disk. You can use it as a local image viewing application.






Control Buttons

After you click on the *Full </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/8462104113937779143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=8462104113937779143' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/8462104113937779143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/8462104113937779143'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2012/01/firefox-extension-image-viewer.html' title='Firefox extension: Full Screen Image Viewer'/><author><name>Zen</name><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/-k6g1OKf_5Jw/Txo1bZ3x8jI/AAAAAAAAAVE/Opn2lzG1bJs/s72-c/CaptureIv1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-2441475371173755002</id><published>2012-01-17T21:26:00.000-05:00</published><updated>2012-01-17T21:26:07.343-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Example'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Code'/><title type='text'>Javascript: setting image width/height in pixels, cannot use "px"</title><summary type='text'>The *img* element has its own width and height property. You can resize an image by setting its width and height property or by setting its style property, e.g.   imageElement.width = "100";      or    imageElement.style.width = "100px";They both resize the width of the image to 100 pixels.You may notice that one is set with "px" at the end, the other is without. If you try the following code, </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/2441475371173755002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=2441475371173755002' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2441475371173755002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2441475371173755002'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2012/01/javascript-setting-image-widthheight-in.html' title='Javascript: setting image width/height in pixels, cannot use &quot;px&quot;'/><author><name>Zen</name><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-6144117508697071990.post-6894324775736930545</id><published>2012-01-14T14:08:00.000-05:00</published><updated>2012-01-14T14:08:57.174-05:00</updated><title type='text'>Firefox extension programming: insert an image to the document</title><summary type='text'>The Firefox extension can insert things to the document you are viewing. This document (or web page) is not the one the Firefox extension is referring as the *document* element. To access it, one of the methods is to use:       var doc = getBrowser().contentWindow.document;Now *doc* is the document object of the current page in the content window.To insert a paragraph to the bottom of the current</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/6894324775736930545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=6894324775736930545' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/6894324775736930545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/6894324775736930545'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2012/01/firefox-extension-programming-insert.html' title='Firefox extension programming: insert an image to the document'/><author><name>Zen</name><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-6144117508697071990.post-8461880982432679875</id><published>2012-01-06T22:44:00.001-05:00</published><updated>2012-01-06T22:51:14.572-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Code'/><title type='text'>Lightbox without jQuery -- soooooooo simple</title><summary type='text'>Lightbox is like a modal dialog which usually pops up to display images. It looks fancy and more websites are now using it. Most of the tutorials on creating a Lightbox is by using jQuery. But the magic of Lightbox has nothing do with jQuery. It is the *CSS position property* that plays the key. All you need are two things:

1) a style sheet for the lightbox:

   .lightbox {
      position:fixed;</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/8461880982432679875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=8461880982432679875' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/8461880982432679875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/8461880982432679875'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2012/01/lightbox-without-jquery-soooooooo.html' title='Lightbox without jQuery -- soooooooo simple'/><author><name>Zen</name><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-6144117508697071990.post-3183164215047718954</id><published>2012-01-03T21:58:00.000-05:00</published><updated>2012-01-03T21:58:38.051-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><title type='text'>Git for Windows</title><summary type='text'>I was looking for a version control system that runs on Windows recently. Git seemed to be a very good candidate. It is a distributed system which works very well and naturally on a standalone machine. The Windows flavor is called msysgit. I downloaded the portable version of it. It is packed by 7zip and does not require installation. Just extract the files and folders to a new folder you want. </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/3183164215047718954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=3183164215047718954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/3183164215047718954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/3183164215047718954'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2012/01/git-for-windows.html' title='Git for Windows'/><author><name>Zen</name><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-6144117508697071990.post-9004713921593847183</id><published>2011-12-13T23:22:00.057-05:00</published><updated>2011-12-27T23:18:20.776-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Code'/><title type='text'>Share Buttons Bar</title><summary type='text'>As you can see in the bottom left corner of this page, the Share Buttons Bar embeds the most popular share buttons from Internet. Your readers can shrink or expand the Bar by click on the rightmost button.

If you are interested to add the Share Buttons Bar to your web site, it is very simple. Just copy the following two pieces of code to the appropriate place. Before doing it, you should </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/9004713921593847183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=9004713921593847183' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/9004713921593847183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/9004713921593847183'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2011/12/share-buttons-bar.html' title='Share Buttons Bar'/><author><name>Zen</name><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-6144117508697071990.post-4193143125709805541</id><published>2011-12-09T21:45:00.000-05:00</published><updated>2011-12-09T21:45:05.035-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Example'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Code'/><title type='text'>Python: a simple HTTP client</title><summary type='text'>  1     import httplib
  2 
  3     h = httplib.HTTPConnection('www.python.org')
  4     h.request('GET', '')
  5     r = h.getresponse()
  6 
  7     rh = r.getheaders()
  8     print 'Header:'
  9     for i in rh:
 10         print i[0], ':', i[1]
 11     print '\n'
 12 
 13     rr = r.read()
 14     print 'Content:'
 15     print rr
 16     print '\n'
 17 
 18     h.close()

The httplib module</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/4193143125709805541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=4193143125709805541' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4193143125709805541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4193143125709805541'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2011/12/python-simple-http-client.html' title='Python: a simple HTTP client'/><author><name>Zen</name><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-6144117508697071990.post-6636657152337734334</id><published>2011-12-08T23:57:00.007-05:00</published><updated>2011-12-11T23:31:03.295-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>Add the Google +1 button to your website</title><summary type='text'>Google has made it very convenient to add the Google +1 button to your website.






What is shown above is the default style of the Google +1 button you can get from http://www.google.com/intl/en/webmasters/+1/button/index.html. Just make a couple of clicks and you can get the code to copy to your website.

Tip 1: 
If you want to add multiple Google +1 buttons that +1 different URLs, you need </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/6636657152337734334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=6636657152337734334' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/6636657152337734334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/6636657152337734334'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2011/12/add-google-1-button-to-your-website.html' title='Add the Google +1 button to your website'/><author><name>Zen</name><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-6144117508697071990.post-5007705105499134601</id><published>2011-10-22T23:42:00.000-04:00</published><updated>2011-10-22T23:42:31.036-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Fun'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><title type='text'>Google Chrome extension: Bulk Player Mate</title><summary type='text'>Bulk Player for YouTube is an online tools that let you play a list of YouTube videos continuously. After one video is done playing, the next one will be played automatically without your intervention. It is useful when you want to play a bunch of YouTube musics or watch a program in series from a distance -- e.g. you have a big display, or your computer is connected to a TV.

Bulk Player for </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/5007705105499134601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=5007705105499134601' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5007705105499134601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5007705105499134601'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2011/10/google-chrome-extension-bulk-player.html' title='Google Chrome extension: Bulk Player Mate'/><author><name>Zen</name><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/-xU-5FnNeNd8/TqOKoZOnRVI/AAAAAAAAATU/dggF8l-AuIA/s72-c/ybpmchrome1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-2806201264690190564</id><published>2011-09-13T22:37:00.000-04:00</published><updated>2011-09-13T22:37:50.032-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Name change of one Firefox extension</title><summary type='text'>The name of our Firefox extension Google Dictionary and Google Translation is changed to Wiktionary and Google Translation in version 3.0.

As many of you have noticed, the Google Dictionary service (http://www.google.com/dictionary) was shut down not long ago. Consequently, some function of the Google Dictionary and Google Translation extension stopped working -- the old version of the extension</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/2806201264690190564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=2806201264690190564' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2806201264690190564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2806201264690190564'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2011/09/name-change-of-one-firefox-extension.html' title='Name change of one Firefox extension'/><author><name>Zen</name><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-6144117508697071990.post-5076465115957639081</id><published>2011-05-22T16:27:00.001-04:00</published><updated>2011-10-11T23:16:07.298-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IE'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><title type='text'>IE Extension: Bulk Player Mate for YouTube</title><summary type='text'>This IE extension lets you play all or any of the YouTube video links on a page by just several clicks.

For example, if we want to watch some videos of Shania Twain, we can go to www.youtube.com and input Shania Twain into the search box. We would get so many results. To narrow it down, we input the owner's name as well -- Shania Twain by ShaniaTwainVEVO. Now we get some videos as the search </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/5076465115957639081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=5076465115957639081' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5076465115957639081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5076465115957639081'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2011/05/ie-extension-youtube-bulk-player-mate.html' title='IE Extension: Bulk Player Mate for YouTube'/><author><name>Zen</name><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/_5M8KR9GHm30/TR6vCQEjSZI/AAAAAAAAAO4/76k5SYMW888/s72-c/CaptureSearch.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-8188911568295600914</id><published>2011-05-13T18:26:00.007-04:00</published><updated>2011-05-14T15:13:05.247-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Example'/><category scheme='http://www.blogger.com/atom/ns#' term='IE'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Code'/><title type='text'>A very simple example of Internet Explorer addon development</title><summary type='text'>This is not a complete tutorial. It shows how easy it is to build an IE addon/extension in just 5 minutes. And it does not stop you from building a far more complex addon with the other mechanisms.

This example adds a menu item to the default context menu of IE. When right click on IE, the user can see the new menu item and click on it. A dialog pops up showing the title of the Web page you are </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/8188911568295600914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=8188911568295600914' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/8188911568295600914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/8188911568295600914'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2011/05/very-simple-example-of-internet.html' title='A very simple example of Internet Explorer addon development'/><author><name>Zen</name><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-6144117508697071990.post-5528771943971072676</id><published>2011-05-02T22:58:00.001-04:00</published><updated>2011-05-02T23:15:57.567-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Windows XP: add a Lock Screen icon to the desktop and the Quick Launch bar</title><summary type='text'>Follow these steps:

Right click on the desktop. Select New|Shortcut on the context menu.
Input "rundll32.exe user32.dll, LockWorkStation" (without the quotes) as the location of the shortcut. Choose a name for the icon, e.g. Lock Screen. 
After the shortcut is created on the desktop, you can change its icon by right click on it and select Properties, and click on the "Change Icon ..." button. </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/5528771943971072676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=5528771943971072676' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5528771943971072676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5528771943971072676'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2011/05/windows-xp-add-lock-screen-icon-to.html' title='Windows XP: add a Lock Screen icon to the desktop and the Quick Launch bar'/><author><name>Zen</name><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-6144117508697071990.post-7035720933711969604</id><published>2011-03-25T20:44:00.006-04:00</published><updated>2011-03-25T20:51:10.949-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CVS'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><title type='text'>CVS: merge changes in trunk to branch</title><summary type='text'>After you have made some changes in the trunk, you can merge those changes into a branch with the following steps.

&lt;!--
addAd1();  //--&gt;
Tag the code before you make the changes in the trunk, e.g. TAG_TRUNK_BEFORE_CHANGES. (If you have forgot to do the tagging, see how to do it at the end.)


   cvs tag TAG_TRUNK_BEFORE_CHANGES

Change the code.


Tag the code after the changes in the trunk, e.g</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/7035720933711969604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=7035720933711969604' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/7035720933711969604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/7035720933711969604'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2011/03/cvs-merge-changes-in-trunk-to-branch.html' title='CVS: merge changes in trunk to branch'/><author><name>Zen</name><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-6144117508697071990.post-4460847388763870956</id><published>2011-03-11T20:58:00.004-05:00</published><updated>2011-03-12T15:02:04.766-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>Random Posts Widget for Blogger</title><summary type='text'>This widget is for Blogger.com. It randomly digs up your posts and lists them on every posts of your blog. This helps to give your old posts  more exposure.

You can see the live example in the side bar (on the right side) of this page. Each time you reload the page, the Random Posts section displays the titles of different posts.

To install the widget, just click the icon below and follow the </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/4460847388763870956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=4460847388763870956' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4460847388763870956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4460847388763870956'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2011/03/random-posts-widget-for-blogger.html' title='Random Posts Widget for Blogger'/><author><name>Zen</name><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-6144117508697071990.post-4076532670235893330</id><published>2011-03-07T19:21:00.000-05:00</published><updated>2011-03-07T19:21:05.200-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Find out what WiFi channels your neighbors use and avoid interference</title><summary type='text'>As you may have known, it is recommended to choose a channel among 1, 6, 11 for your wireless network. You can also choose other channels and actually some people do. But that is not doing good to your and other wireless networks. Why 1, 6, 11 are recommended? Because these channels do not intervene with each other. 

The air is getting more and more crowded. Chances are some of your neighbors </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/4076532670235893330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=4076532670235893330' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4076532670235893330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4076532670235893330'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2011/03/find-out-what-wifi-channels-your.html' title='Find out what WiFi channels your neighbors use and avoid interference'/><author><name>Zen</name><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-6144117508697071990.post-465852215235180564</id><published>2011-03-04T18:11:00.001-05:00</published><updated>2011-03-15T20:51:30.016-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Google Dictionary and Google Translate extension is blocked by Flashblock</title><summary type='text'>One of the feature, the whole page translation feature of the Google Dictionary and Google Translate extension for Firefox does not work when the Flashblock extension is installed and enabled. After some investigation, I found out that some functions of the Google Translate service is not working if the Flashblock extension is in effect. Our Google Dictionary and Google Translate extension can do</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/465852215235180564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=465852215235180564' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/465852215235180564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/465852215235180564'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2011/03/google-dictionary-and-google-translate.html' title='Google Dictionary and Google Translate extension is blocked by Flashblock'/><author><name>Zen</name><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>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-4793159976759778545</id><published>2011-02-23T21:12:00.003-05:00</published><updated>2011-03-15T20:56:27.846-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adsense'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>Blogger: move Adsense to the end of post and above comments</title><summary type='text'>When hosting your blog at blogspot.com, it is very easy to add Ads to your blog. Just go to the Dashboard, click on the Monetize tab and follow the instructions. You could add Ads at the end of each post and the sidebar.

But there is a major "flaw" of adding the Ad to the end of the post. The Ad is added below the comments. When your readers are reading that single post (not the homepage of the </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/4793159976759778545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=4793159976759778545' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4793159976759778545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4793159976759778545'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2011/02/blogger-move-adsense-to-end-of-post-and.html' title='Blogger: move Adsense to the end of post and above comments'/><author><name>Zen</name><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-6144117508697071990.post-1246944863931483040</id><published>2011-02-16T21:21:00.004-05:00</published><updated>2011-02-22T22:53:21.969-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox Extension: Packed Menu 2 Nav</title><summary type='text'>(For Firefox 4 only.)

This extension is very similar to another extension Packed Menu except that it puts the button on the Navigation Toolbar instead of the Menu Bar.

This extension conflicts with the extension Packed
 Menu, so I self-host it. You must read this and uninstall Packed
 Menu before you can use this extension.

This extension adds a button "M" to the Navigation Toolbar. And the </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/1246944863931483040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=1246944863931483040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1246944863931483040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1246944863931483040'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2011/02/firefox-extension-packed-menu-2-nav.html' title='Firefox Extension: Packed Menu 2 Nav'/><author><name>Zen</name><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/_5M8KR9GHm30/S5w2W_dp9gI/AAAAAAAAAFY/cLn0eLKdCwg/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-7529378522669412912</id><published>2011-02-10T18:23:00.001-05:00</published><updated>2011-03-15T20:58:33.833-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Google Chrome: What to do if a problematic extension crashes Chrome</title><summary type='text'>If after you install an extension, your Chrome can not start and run, you want to run Chrome in a safe mode so that you can disable the extension which causes the problem.

Method 1

Right click on the icon of the Chrome, and select Properties on the context menu. In the Shortcut tab, look for the Target box. Append the argument "--incognito" to it. It will then look like:
        "C:\\...\Google</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/7529378522669412912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=7529378522669412912' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/7529378522669412912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/7529378522669412912'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2011/02/google-chrome-what-to-do-if-problematic.html' title='Google Chrome: What to do if a problematic extension crashes Chrome'/><author><name>Zen</name><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-6144117508697071990.post-5804758357915299981</id><published>2011-01-31T22:01:00.000-05:00</published><updated>2011-01-31T22:01:06.863-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><title type='text'>What happened to the Chrome extension Boss Key and Button</title><summary type='text'>Just got a comment on the post Google Chrome extension Boss Key and Button, and knew that the extension's Options page stopped working. After some investigation, it turned out that the new version of Google Chrome does not support the syntax:
        &lt;script src="bossknb.js" /&gt;

We have to change it into:
        &lt;script src="bossknb.js"&gt;&lt;/script&gt;
        
It was not only Google's fault. Google </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/5804758357915299981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=5804758357915299981' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5804758357915299981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5804758357915299981'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2011/01/what-happened-to-chrome-extension-boss.html' title='What happened to the Chrome extension Boss Key and Button'/><author><name>Zen</name><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-6144117508697071990.post-1901991278129504908</id><published>2011-01-27T19:31:00.000-05:00</published><updated>2011-01-28T09:11:05.117-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Example'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Code'/><title type='text'>C++ programming: split a string</title><summary type='text'>We have a string

  red, green, brown, blue

and we want to split it by ", " into four words

  red
  green
  brown
  blue

Method 1 -- the traditional way with the C function strtok()
  #include &lt;vector&gt;
  #include &lt;string&gt;
  #include &lt;iostream&gt;
  #include &lt;string.h&gt;
  #include &lt;stdlib.h&gt;
  
  using namespace std;
  
  vector&lt;string&gt; splitString(string input, string delimiter)
  {
     vector&lt;</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/1901991278129504908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=1901991278129504908' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1901991278129504908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1901991278129504908'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2011/01/c-programming-split-string.html' title='C++ programming: split a string'/><author><name>Zen</name><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-6144117508697071990.post-6284887537759251052</id><published>2011-01-24T21:43:00.001-05:00</published><updated>2011-01-25T21:04:52.547-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Code'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>How to change the font and color of the Google Dictionary and Google Translate extension</title><summary type='text'>In the version 2.0 of the Google Dictionary and Google Translate Firefox extension, you can apply your own style to the dictionary pop-up. You can change the background color, the font family, the font color, or the font size, etc. To do that, you must have some knowledge of CSS (Cascading Style Sheets). If you do not want to bother, you can just choose from the samples we provide.

To input your</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/6284887537759251052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=6284887537759251052' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/6284887537759251052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/6284887537759251052'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2011/01/how-to-change-font-and-color-of-google.html' title='How to change the font and color of the Google Dictionary and Google Translate extension'/><author><name>Zen</name><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/_5M8KR9GHm30/TTEGobtkRpI/AAAAAAAAAQc/AvC7-O-N83o/s72-c/ssGdOption.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-488961452206297666</id><published>2011-01-14T21:35:00.013-05:00</published><updated>2012-02-02T00:01:24.753-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Example'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Code'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Style templates for Google Dictionary and Google Translate firefox extension</title><summary type='text'>In the upcoming version 2.0 of the Google Dictionary and Google Translate firefox extension, users can apply their own style to the dictionary pop-up. This is a highly wanted feature requested in many comments.

To do that, go to the extension's Options dialog and click on the "Style" tab; check the "Enable my style" option; and input your CSS code underneath. Yes, the user should know some CSS </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/488961452206297666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=488961452206297666' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/488961452206297666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/488961452206297666'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2011/01/style-templates-for-google-dictionary.html' title='Style templates for Google Dictionary and Google Translate firefox extension'/><author><name>Zen</name><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/_5M8KR9GHm30/TTEGobtkRpI/AAAAAAAAAQc/AvC7-O-N83o/s72-c/ssGdOption.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-8284689924490260106</id><published>2011-01-05T21:40:00.001-05:00</published><updated>2011-01-05T21:42:04.250-05:00</updated><title type='text'>ASCII &lt;--&gt; EBCDIC Online Converter</title><summary type='text'>(Beta version)


var asciiList = [
              'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
              'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
                   's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 

              'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
              'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
                   'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 

</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/8284689924490260106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=8284689924490260106' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/8284689924490260106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/8284689924490260106'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2011/01/ascii-ebcdic-online-converter.html' title='ASCII &lt;--&gt; EBCDIC Online Converter'/><author><name>Zen</name><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-6144117508697071990.post-7919909187847012162</id><published>2010-12-29T18:59:00.008-05:00</published><updated>2011-10-11T23:14:44.697-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox Extension: Bulk Player Mate for YouTube</title><summary type='text'>This extension lets you play all or any of the YouTube video links on a page by just several clicks.

For example, if we want to watch some videos of Shania Twain, we can go to www.youtube.com and input Shania Twain into the search box. We would get so many results. To narrow it down, we input the owner's name as well -- Shania Twain by ShaniaTwainVEVO. Now we get some videos as the search result</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/7919909187847012162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=7919909187847012162' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/7919909187847012162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/7919909187847012162'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/12/firefox-extension-youtube-bulk-player.html' title='Firefox Extension: Bulk Player Mate for YouTube'/><author><name>Zen</name><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/_5M8KR9GHm30/TR6vCQEjSZI/AAAAAAAAAO4/76k5SYMW888/s72-c/CaptureSearch.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-3765768642589015708</id><published>2010-12-28T19:57:00.007-05:00</published><updated>2011-01-29T16:27:00.055-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Linux ACPI issue</title><summary type='text'>In a previous post, I had a temporary solution for the ACPI issue of the kernel on my machine. It worked but the machine hesitated all the time. Recently, I played with the kernel parameters related to the ACPI and got some interesting results.

1. Use the option acpi=off. The auto shutdown problem was gone, but the system became sluggish.

2. Use the option acpi=ht. The result was same as acpi=</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/3765768642589015708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=3765768642589015708' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/3765768642589015708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/3765768642589015708'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/12/linux-acpi-issue.html' title='Linux ACPI issue'/><author><name>Zen</name><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-6144117508697071990.post-6126139273680618787</id><published>2010-12-28T18:13:00.001-05:00</published><updated>2010-12-28T18:13:00.103-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><title type='text'>Enter multiple paragraphs in a cell of the Google Docs' spreadsheet</title><summary type='text'>You cannot simply press the Enter button to insert a line break into the cell in the Google Doc's spreadsheet. That would finish the editing of the cell and the next cell would be focused. Instead, you need to press


Alt-Enter
or

Ctrl-Enter</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/6126139273680618787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=6126139273680618787' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/6126139273680618787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/6126139273680618787'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/12/enter-multiple-paragraphs-in-cell-of.html' title='Enter multiple paragraphs in a cell of the Google Docs&apos; spreadsheet'/><author><name>Zen</name><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-6144117508697071990.post-2529433605082394569</id><published>2010-12-06T20:35:00.002-05:00</published><updated>2010-12-06T20:35:00.053-05:00</updated><title type='text'>MD5 example in Java</title><summary type='text'>Both Linux and Windows have tools to compute the MD5 (Message Digest algorithm 5) hash value of a file.

In Linux, run
        md5sum &lt;file_name&gt;
        
In Windows, run
        fciv.exe &lt;file_name&gt;
        
If the tools are not installed, it is very easy to build your own one in Java. Just create a new text file named Md5.java and copy&amp;paste the following code into it.

import </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/2529433605082394569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=2529433605082394569' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2529433605082394569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2529433605082394569'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/12/md5-example-in-java.html' title='MD5 example in Java'/><author><name>Zen</name><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-6144117508697071990.post-7875053690328494933</id><published>2010-11-30T22:55:00.002-05:00</published><updated>2010-12-01T20:09:53.030-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Fun'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>How confident is Google about its language detection?</title><summary type='text'>Google provides a very handy online  tool for language detection -- http://www.google.com/uds/samples/language/detect.html. After you input something and hit the Detect Language button, the result is shown below telling you what language Google thinks it is, together with whether Google thinks the result is reliable or not, and how confident it is.

The confidence level is between 0-1, so a value</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/7875053690328494933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=7875053690328494933' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/7875053690328494933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/7875053690328494933'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/11/how-confident-is-google-about-its.html' title='How confident is Google about its language detection?'/><author><name>Zen</name><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-6144117508697071990.post-4305348693328874695</id><published>2010-11-15T22:18:00.003-05:00</published><updated>2010-11-15T22:45:32.696-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Whole-page translation problem in the early versions of Google Dictionary and Google Translate</title><summary type='text'>(The issue is fixed in version 1.2.1.)

Although I had tested all the supported languages with the whole-page translation feature of the Google Dictionary and Google Translate extension for Firefox, the reviewers said that the whole-page translation did not work at all. This puzzled me for quite some time and I rewrote most of that part of code.

The last error they got was an exception of "</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/4305348693328874695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=4305348693328874695' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4305348693328874695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4305348693328874695'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/11/whole-page-translation-problem-in-early.html' title='Whole-page translation problem in the early versions of Google Dictionary and Google Translate'/><author><name>Zen</name><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-6144117508697071990.post-4775558527747504388</id><published>2010-11-10T20:11:00.002-05:00</published><updated>2010-11-12T20:39:01.014-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='gdb'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Crash, core dump and gdb</title><summary type='text'>When a linux program crashes, a core file could be generated under the directory where you ran the file. A core file contains very useful information to help you debug the program. If there is no such a file named core.XXXX, it may be that the parameter of the maximum size of core files is set as 0. Check it with this command:

    $ ulimit -c

If the result is 0, set a size for it, e.g.

    $ </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/4775558527747504388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=4775558527747504388' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4775558527747504388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4775558527747504388'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/11/crash-core-dump-and-gdb.html' title='Crash, core dump and gdb'/><author><name>Zen</name><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-6144117508697071990.post-2157166166523362543</id><published>2010-10-18T21:11:00.000-04:00</published><updated>2010-10-18T21:11:29.130-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><title type='text'>Turn off the open captioning</title><summary type='text'>Closed captioning is a good thing. It helps not only those who have hearing issues, but also those who speak other languages. 

Open captioning, unlike the closed captioning which can be turned off when you don't need it, is burnt to the video and cannot be turned off. It is sometimes annoying when you want to enjoy the pictures but the subtitle keeps distracting you. It is even more annoying </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/2157166166523362543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=2157166166523362543' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2157166166523362543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2157166166523362543'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/10/turn-off-open-captioning.html' title='Turn off the open captioning'/><author><name>Zen</name><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-6144117508697071990.post-315937916221539476</id><published>2010-10-18T21:07:00.000-04:00</published><updated>2010-10-18T21:07:07.127-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Code'/><title type='text'>Java source code of NoCaption</title><summary type='text'>import javax.swing.JFrame; 
import java.awt.*; 
import java.awt.event.*; 
import java.io.*; 
import java.lang.*; 
import java.util.Properties; 

public class NoCaption { 
   public static void main(String[] args) { 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

      // no title bar 
      frame.setUndecorated(true); 

      frame.setAlwaysOnTop( true ); 

      </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/315937916221539476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=315937916221539476' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/315937916221539476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/315937916221539476'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/10/java-source-code-of-nocaption.html' title='Java source code of NoCaption'/><author><name>Zen</name><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-6144117508697071990.post-6864635247522741073</id><published>2010-10-08T13:38:00.037-04:00</published><updated>2012-01-26T22:40:54.908-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox Extension: Wiktionary and Google Translate</title><summary type='text'>Former Google Dictionary and Google Translate

(As you have known, Google Dictionary site has been shut down. We try to switch to Wiktionary.org for the dictionary functionality of this extension. Since version 3.0, it is renamed to Wiktionary and Google Translate. You can install the latest version from https://addons.mozilla.org/en-US/firefox/addon/google-dictionary-and-google-t/versions/ and </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/6864635247522741073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=6864635247522741073' title='105 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/6864635247522741073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/6864635247522741073'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/10/firefox-extension-google-dictionary-and.html' title='Firefox Extension: Wiktionary and Google Translate'/><author><name>Zen</name><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/-AnQWzPS6d0o/TyIcTP6qUtI/AAAAAAAAAVU/V84Php_2cio/s72-c/CaptureWik1.JPG' height='72' width='72'/><thr:total>105</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-2941695782151062195</id><published>2010-08-28T14:17:00.017-04:00</published><updated>2011-02-21T17:36:36.848-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox Extension: YouTube Play All</title><summary type='text'>Note: This extension is vulnerable to changes YouTube may make to their web site or their player. It is recommended to use the YouTube Bulk Player which uses YouTube's official API and is more reliable.

This extension lets you play all the YouTube video links on a page by just several clicks.

Many long videos are split into small pieces and uploaded to YouTube. This help shows you how to "</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/2941695782151062195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=2941695782151062195' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2941695782151062195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2941695782151062195'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/08/firefox-extension-youtube-play-all.html' title='Firefox Extension: YouTube Play All'/><author><name>Zen</name><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/_5M8KR9GHm30/THlRE5cha_I/AAAAAAAAAM0/7Ap-mEIr16E/s72-c/ypa_search.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-826855062353788691</id><published>2010-08-02T14:13:00.004-04:00</published><updated>2011-10-11T23:12:54.311-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Fun'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><title type='text'>Online tool: Bulk Player for YouTube</title><summary type='text'>Many long videos are split into small pieces and uploaded to YouTube. After you watch one part of them, you need to click on the next one to continue. But I just want to seat back and enjoy the whole video without clicking on each part separately. 

Bulk  Player is a little online tool to let you input a bunch of URLs of the videos. When you click the Play All button, all the listed videos will </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/826855062353788691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=826855062353788691' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/826855062353788691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/826855062353788691'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/08/online-tool-youtube-bulk-player.html' title='Online tool: Bulk Player for YouTube'/><author><name>Zen</name><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/_5M8KR9GHm30/TFcEzyZIZ5I/AAAAAAAAAKY/NcZMFMibYKk/s72-c/CaptureYoutubeBP1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-2922726147854798948</id><published>2010-07-26T19:33:00.001-04:00</published><updated>2010-07-26T19:34:38.661-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox extension: Invert Input version 2</title><summary type='text'>
&lt;!--
addCnLink("2010/02/firefox_05.html")
//--&gt;

Note: This is the online help of an old version. Please try the latest  version.

No matter what reason you want to invert your input to the browser, you can do it with this extension now. It can invert the input of a text field or a password field.

After you input something into a text box, right click your mouse to pop up the context menu where</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/2922726147854798948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=2922726147854798948' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2922726147854798948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2922726147854798948'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/07/firefox-extension-invert-input-version_26.html' title='Firefox extension: Invert Input version 2'/><author><name>Zen</name><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/_5M8KR9GHm30/TDVIDOnxLyI/AAAAAAAAAJA/ms0ugFqVMP0/s72-c/iimenu.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-1238479036358924811</id><published>2010-07-26T19:29:00.000-04:00</published><updated>2010-07-26T19:29:34.787-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox: customize the toolbar</title><summary type='text'>The steps to add, remove or arrange the buttons of the toolbar are

1. Right click on the toolbar. The context menu shows up.

2. Select "Customize..." from the context menu. A Customize Toolbar palette pops up.

3a. To add buttons to the toolbar, find the button from the palette and drag it to wherever you want inside the toolbar.

3b. To remove buttons from the toolbar, drag the button that you</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/1238479036358924811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=1238479036358924811' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1238479036358924811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1238479036358924811'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/07/firefox-customize-toolbar.html' title='Firefox: customize the toolbar'/><author><name>Zen</name><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-6144117508697071990.post-719828414631874738</id><published>2010-07-22T20:29:00.000-04:00</published><updated>2010-07-22T20:29:53.673-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox extension programming: add an icon/button to the address bar</title><summary type='text'>During the development of Invert Input version 3, I tried to add an little icon to the address bar (URL bar). When the user clicked on the icon, the URL would be inverted. Although this idea was dropped, the steps of the creation of an icon in the URL bar are captured here.

1. In the overlay.xul file, added an icon to the urlbar-icons group:

   &lt;hbox id="urlbar-icons"&gt;
      &lt;image id="</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/719828414631874738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=719828414631874738' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/719828414631874738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/719828414631874738'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/07/firefox-extension-programming-add.html' title='Firefox extension programming: add an icon/button to the address bar'/><author><name>Zen</name><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-6144117508697071990.post-7540082930308590387</id><published>2010-07-22T20:28:00.000-04:00</published><updated>2010-07-22T20:28:02.269-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox extension programming: build a button for the tool bar</title><summary type='text'>I just finished a tool bar button for my extension Invert Input. It was not difficult and not too much code were written. But there were some pitfalls which cost me some time.

1. In the overlay.xul file, we added our tool bar button.

   &lt;?xml-stylesheet type="text/css" href="chrome://invertinput12/skin/invertinput.css"?&gt;

    &lt;toolbarpalette id="BrowserToolbarPalette"&gt;
       &lt;toolbarbutton id=</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/7540082930308590387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=7540082930308590387' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/7540082930308590387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/7540082930308590387'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/07/firefox-extension-programming-build.html' title='Firefox extension programming: build a button for the tool bar'/><author><name>Zen</name><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-6144117508697071990.post-6285435072173699435</id><published>2010-07-21T20:48:00.000-04:00</published><updated>2010-07-21T20:48:46.493-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Will Packed Menu (a Firefox extension) mess up your tool bar?</title><summary type='text'>Packed Menu was accused of corrupting the tool bar recently. I have been running this little toy since it was developed and it works great. Don't get me wrong, I am not implying that the user's comment is nonsense. I believe our users are serious about their reviews.

But what could have caused the problems? Many people like to install several or many extensions on their browser. These extensions</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/6285435072173699435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=6285435072173699435' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/6285435072173699435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/6285435072173699435'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/07/will-packed-menu-firefox-extension-mess.html' title='Will Packed Menu (a Firefox extension) mess up your tool bar?'/><author><name>Zen</name><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-6144117508697071990.post-8811780990661327865</id><published>2010-07-08T22:20:00.001-04:00</published><updated>2010-07-08T22:23:01.011-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox Extension: Keylogger Beater version 2</title><summary type='text'>Note: This is the online help of an old version. Please try the latest  version.

If you are worried about keylogging programs in your system, you can try this extension. There are two different ways to input with this extension. With the help of Keylogger Beater, a keylogger running in the background can never capture what you have really input, and you will be more confident to do online </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/8811780990661327865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=8811780990661327865' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/8811780990661327865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/8811780990661327865'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/07/firefox-extension-keylogger-beater.html' title='Firefox Extension: Keylogger Beater version 2'/><author><name>Zen</name><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/_5M8KR9GHm30/TCeKeOG5BvI/AAAAAAAAAIg/EdmFpkbaAsg/s72-c/klb.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-1790466981855630225</id><published>2010-07-07T23:48:00.000-04:00</published><updated>2010-07-07T23:48:21.293-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox Extension: Invert Input version 1.x</title><summary type='text'>Note: This is the online help of an old version. Please try the latest version.

No matter what reason you want to invert your input to the browser, you can do it with this extension now. It can invert the input of a text field or a password field.

After you input something into a text box, right click your mouse to pop up the context menu where you can see an item of "Invert Input". Click it </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/1790466981855630225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=1790466981855630225' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1790466981855630225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1790466981855630225'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/07/firefox-extension-invert-input-version.html' title='Firefox Extension: Invert Input version 1.x'/><author><name>Zen</name><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-6144117508697071990.post-2434016516254571056</id><published>2010-07-07T22:59:00.000-04:00</published><updated>2010-07-07T22:59:54.218-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>A scary day -- the rescue of my VirtualBox image file after upgrading  Ubuntu</title><summary type='text'>I was using Ubuntu Hardy Heron (8.04LTS) as a guest OS on VirtualBox. The system worked excellent, but it was about time to say goodbye and upgrade it to the latest Long Term Support version Lucid Lynx (10.04LTS).

I brought up a terminal, and run the command,
  sudo update-manager --proposed

Now you see, I made a big mistake -- I had not backup-ed my data! Well, it is very easy to backup the </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/2434016516254571056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=2434016516254571056' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2434016516254571056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2434016516254571056'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/07/scary-day-rescue-of-my-virtualbox-image.html' title='A scary day -- the rescue of my VirtualBox image file after upgrading  Ubuntu'/><author><name>Zen</name><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-6144117508697071990.post-559911337408358244</id><published>2010-07-04T14:41:00.000-04:00</published><updated>2010-07-04T14:41:40.756-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Install a Firefox extension for a newer/unsupported version of Firefox</title><summary type='text'>Some Firefox extensions are released on this site. They are free and can be downloaded from the official Mozilla Add-ons website. I would try my best to update them as soon as possible for the latest stable version of Firefox. Some users love these extensions and want to know whether I can upgrade them for the upcoming preview version of Firefox. I do not have a plan to do that yet, but that does</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/559911337408358244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=559911337408358244' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/559911337408358244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/559911337408358244'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/07/install-firefox-extension-for.html' title='Install a Firefox extension for a newer/unsupported version of Firefox'/><author><name>Zen</name><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-6144117508697071990.post-1250916824636300382</id><published>2010-06-27T13:27:00.000-04:00</published><updated>2010-06-27T13:27:58.711-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox Extension: Keylogger Beater version 1</title><summary type='text'>This is the help of the old version 1. Please try the latest version.

If you are worried about keylogging programs in your system, you can try this extension. There are two different ways to input with this extension. With the help of Keylogger Beater, a keylogger running in the background can never capture what you have really input, and you will be more confident to do online shopping or </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/1250916824636300382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=1250916824636300382' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1250916824636300382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1250916824636300382'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/06/firefox-extension-keylogger-beater.html' title='Firefox Extension: Keylogger Beater version 1'/><author><name>Zen</name><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/_5M8KR9GHm30/S-32U98H4qI/AAAAAAAAAG4/ihdgElAm-vs/s72-c/klb.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-4909775284499165729</id><published>2010-06-16T19:13:00.001-04:00</published><updated>2011-02-21T17:08:22.012-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='gdb'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>gdb: skip instructions or lines while stepping the program</title><summary type='text'>Supposed you are at line 50 and you want to skip the following several lines of your source code and continue from line 60, you can input command

   jump 60
&lt;!--
google_ad_client = "pub-5400749133295188";
/* 336x280, created 2/19/11 */
google_ad_slot = "2346695524";
google_ad_width = 336;
google_ad_height = 280;
//--&gt;



However, the command will continue your program till it meets next break </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/4909775284499165729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=4909775284499165729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4909775284499165729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4909775284499165729'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/06/gdb-skip-instructions-or-lines-while.html' title='gdb: skip instructions or lines while stepping the program'/><author><name>Zen</name><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-6144117508697071990.post-1735893026803585647</id><published>2010-06-14T23:43:00.000-04:00</published><updated>2010-06-15T21:00:47.106-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>C programming: the "size" argument and return value of snprintf()</title><summary type='text'>Considering the following code. What would the string "s" and the return value "r" be?

   char s[10];
   int r = snprintf(s, 3, "%d", 12345);

It turns out that s would become "12" and r would be 5. Why?

The second argument "size" of snprintf(char *str, size_t size, const char *format, ...) allows only up to 3 characters to be written into s. And these 3 characters includes the null terminator </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/1735893026803585647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=1735893026803585647' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1735893026803585647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1735893026803585647'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/06/c-programming-size-argument-and-return.html' title='C programming: the &quot;size&quot; argument and return value of snprintf()'/><author><name>Zen</name><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-6144117508697071990.post-3861076263961416585</id><published>2010-06-02T20:13:00.000-04:00</published><updated>2010-06-03T17:48:57.073-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>VIM: go to last position when re-open a file</title><summary type='text'>Each time I re-open a file with vi (vim actually), the very beginning of the file is shown. If I just want to add something at the end of the file, I could quickly go to the end by pressing Shift-g. But most of the time, I need to go to where I was working on in the middle of the file. Then I have to remember some strings or phrases to search, or go down page by page. That would be a headache to </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/3861076263961416585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=3861076263961416585' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/3861076263961416585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/3861076263961416585'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/06/vim-go-to-last-position-when-re-open.html' title='VIM: go to last position when re-open a file'/><author><name>Zen</name><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-6144117508697071990.post-3125234527358508747</id><published>2010-05-25T15:13:00.002-04:00</published><updated>2010-06-03T17:49:10.329-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox Extension: Take A Break version 1.1</title><summary type='text'>Click here for the online help of the old version 1.0.x.

Addicted to the Web? Don't compromise your health! Continuously staring at the computer can cause headaches, blurred vision, neck pain, fatigue, dry eyes. Take A Break extension tries to help you avoid or reduce these problems. It reminds you when to take a break while you are surfing the Web.

Features
- A little icon on the status bar </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/3125234527358508747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=3125234527358508747' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/3125234527358508747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/3125234527358508747'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/05/firefox-extension-take-break-version-11.html' title='Firefox Extension: Take A Break version 1.1'/><author><name>Zen</name><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/_5M8KR9GHm30/S70p8jT4TUI/AAAAAAAAAGo/XkOxFXyKW1Y/s72-c/TaBIcon.JPG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-6931452774029571840</id><published>2010-05-20T18:14:00.000-04:00</published><updated>2010-05-20T18:14:30.457-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Linux: print OS version and information</title><summary type='text'>The uname command prints certain system information. With the -a option, it prints all information about the Linux OS.

   $ uname -a

The version number in the print-out is the kernel release.

A Linux distribution usually has it own release versions. For example, the Ubuntu distribution may have a release version of 8.04. To see the version of a distribution, run command --

   $ lsb_release -a</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/6931452774029571840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=6931452774029571840' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/6931452774029571840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/6931452774029571840'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/05/linux-print-os-version-and-information.html' title='Linux: print OS version and information'/><author><name>Zen</name><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-6144117508697071990.post-7967580427819746375</id><published>2010-05-11T21:19:00.008-04:00</published><updated>2010-07-26T19:28:26.983-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox Extension: Keylogger Beater's More Features</title><summary type='text'>To know the basic usage and features of Keylogger Beater, please read this post first.

Context Menu

Besides Ctrl-Shift-k, you can also activate Keylogger Beater via the context menu.

Right click on a text area or a password box and you can find a new menu item "Keylogger Beater". Click on it to turn on the Virtual Keyboard and start your private input. 




Options

There are some options you </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/7967580427819746375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=7967580427819746375' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/7967580427819746375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/7967580427819746375'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/05/firefox-extension-keylogger-beaters.html' title='Firefox Extension: Keylogger Beater&apos;s More Features'/><author><name>Zen</name><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/_5M8KR9GHm30/S-347mVMqjI/AAAAAAAAAHQ/y6R7ukgBqrE/s72-c/klb_menu.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-148063304219602762</id><published>2010-05-11T20:36:00.020-04:00</published><updated>2011-02-20T14:29:07.029-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox Extension: Keylogger Beater</title><summary type='text'>The online help of the old version 1 can be found here. 
The online help of the old version 2 can be found here.   


If you are worried about keylogging programs in your system, you can try this extension. There are two different ways to input with this extension. With the help of Keylogger Beater, a keylogger running in the background can never capture what you have really input, and you will </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/148063304219602762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=148063304219602762' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/148063304219602762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/148063304219602762'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/05/firefox-extension-keylogger-beater.html' title='Firefox Extension: Keylogger Beater'/><author><name>Zen</name><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/_5M8KR9GHm30/TCeKeOG5BvI/AAAAAAAAAIg/EdmFpkbaAsg/s72-c/klb.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-1479650728700611166</id><published>2010-05-06T21:12:00.000-04:00</published><updated>2010-05-07T15:14:50.968-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Example'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Code'/><title type='text'>C++ exercise: Recursion example -- sum up numbers</title><summary type='text'>Q: Given a Sum and a string of numbers, add minimum operator "+" to make the sum of numbers equal to Sum. e.g. Sum=9, numbers: 101124, we get 9=1+01+1+1+2+4; Sum=88, numbers: 2112331453, we get 88=21+12+33+14+5+3.

#include &lt;string&gt;
#include &lt;stack&gt;
#include &lt;iostream&gt;

using namespace std;
 
// Returns: 0 -- Got a solution.
//         -1 -- No solution.
int Calculate(int sum, string numbers,
</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/1479650728700611166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=1479650728700611166' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1479650728700611166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1479650728700611166'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/05/c-exercise-recursion-example-sum-up.html' title='C++ exercise: Recursion example -- sum up numbers'/><author><name>Zen</name><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-6144117508697071990.post-7750192128654804205</id><published>2010-05-05T20:27:00.000-04:00</published><updated>2010-05-05T20:27:14.156-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Example'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Code'/><title type='text'>C++ exercises: read file with fstream and count punctuation marks</title><summary type='text'>Q: Write a program that reads a text file and prints a count of the number of occurrences of the punctuation marks (.,!?).

#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
 
using namespace std;
 
int main(int argc, char *argv[])
{
   if (argc &lt; 2)
   {
      cout &lt;&lt; "Usage: " &lt;&lt; argv[0] &lt;&lt; " &lt;input_file&gt;" &lt;&lt; endl;
      return -1;
   }
 
   string s;
   string chs = ",.!?";
   int count</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/7750192128654804205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=7750192128654804205' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/7750192128654804205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/7750192128654804205'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/05/c-exercises-read-file-with-fstream-and.html' title='C++ exercises: read file with fstream and count punctuation marks'/><author><name>Zen</name><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-6144117508697071990.post-1238535297182826424</id><published>2010-05-03T21:04:00.000-04:00</published><updated>2010-05-03T21:04:23.367-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Example'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Code'/><title type='text'>C++ exercises: swap two variables</title><summary type='text'>Q: Swap a and b without using a third variable.

Algorithm:
1. a(new) = a(old) + b(old);
2. b(new) = a(new) - b(old) = (a(old) + b(old)) - b(old) = a(old)
3. a(final) = a(new) - b(new) = (a(old) + b(old)) - a(old) = b(old)


#include &lt;iostream&gt;

using namespace std;

int main()
{
   int a = 123;
   int b = 200;

   cout &lt;&lt; "a: " &lt;&lt; a &lt;&lt; ", b: " &lt;&lt; b &lt;&lt; endl;

   a = a + b;
   cout &lt;&lt; "a: " &lt;&lt; a &lt;</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/1238535297182826424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=1238535297182826424' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1238535297182826424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1238535297182826424'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/05/c-exercises-swap-two-variables.html' title='C++ exercises: swap two variables'/><author><name>Zen</name><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-6144117508697071990.post-329317708437993400</id><published>2010-04-21T20:41:00.000-04:00</published><updated>2010-04-21T20:41:05.002-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Online unit converter</title><summary type='text'>Many of the supermarkets here are playing tricks on the price tags. While the price tag displays $x.xx/lb, the receipt shows the price in dollars per kilograms. As a customer, we are always confused and hard to remember the listed price when we are reading the receipt. But why the supermarkets do that? 99 cents per pounds looks quite attractive on the price tag. People nowadays do not expect too </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/329317708437993400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=329317708437993400' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/329317708437993400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/329317708437993400'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/04/online-unit-converter.html' title='Online unit converter'/><author><name>Zen</name><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-6144117508697071990.post-2232343066375820483</id><published>2010-04-20T20:31:00.001-04:00</published><updated>2011-02-21T18:06:40.091-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Example'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Code'/><title type='text'>C++ exercises: selection sort, bubble sort, insertion sort</title><summary type='text'>Q: Consider the record declaration
   struct Month { char name[10]; //name of a month
     int monthnum; //number of days in the month
   };
&lt;!--
google_ad_client = "pub-5400749133295188";
/* 336x280, created 2/19/11 */
google_ad_slot = "2346695524";
google_ad_width = 336;
google_ad_height = 280;
//--&gt;


a) Write a function
   void SortByName(Month months[], int n);
that sorts an array whose </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/2232343066375820483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=2232343066375820483' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2232343066375820483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2232343066375820483'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/04/c-exercises-selection-sort-bubble-sort.html' title='C++ exercises: selection sort, bubble sort, insertion sort'/><author><name>Zen</name><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-6144117508697071990.post-8002412944825944784</id><published>2010-04-19T20:39:00.000-04:00</published><updated>2010-04-20T20:30:44.169-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Example'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Code'/><title type='text'>C++ exercises: exchange sort</title><summary type='text'>Q: Write an exchange sort function to sort the list in descending order.

#include &lt;iostream&gt;
 
using namespace std;
 
void ExchangeSortDesc(int a[], int sz)
{
   if (sz &lt; 2)
      return;
 
   for (int i = 0; i &lt; sz - 1; i++)
   {
      for (int j = i + 1; j &lt; sz; j++)
      {
         if (a[i] &lt; a[j])
         {
            int t = a[i];
            a[i] = a[j];
            a[j] = t;
         }</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/8002412944825944784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=8002412944825944784' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/8002412944825944784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/8002412944825944784'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/04/c-exercises-exchange-sort.html' title='C++ exercises: exchange sort'/><author><name>Zen</name><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-6144117508697071990.post-4482356851166930380</id><published>2010-04-18T13:38:00.000-04:00</published><updated>2010-04-20T20:30:44.169-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Example'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Code'/><title type='text'>C++ exercises: tabular encrypt</title><summary type='text'>Q: A string of text can be encrypted using a tabular mapping that associates each letter of the alphabet with a unique letter. For example, the mapping
   abcdefghijklmnopqrstuvwxyz ==&gt; ngzqtcobmuhelkpdawxfyivrsj
maps "encrypt" to "tkzwsdf".
Write a program that reads text until end of file and outputs the encrypted form.

#include &lt;iostream&gt;
#include &lt;string&gt;
 
using namespace std;
 
int main()
</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/4482356851166930380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=4482356851166930380' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4482356851166930380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4482356851166930380'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/04/c-exercises-tabular-encrypt.html' title='C++ exercises: tabular encrypt'/><author><name>Zen</name><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-6144117508697071990.post-910185674557001498</id><published>2010-04-17T13:35:00.001-04:00</published><updated>2010-04-20T20:30:44.170-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Example'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Code'/><title type='text'>C++ exercises: Pig-latin</title><summary type='text'>Q: Input a series of words until end of file, converting each one to Pig-latin. If the word begins with a consonant, move the first character of the word to the last position and append "ay". If the word begins with a vowel, simply append "ay". for example,
   Input: this is simple
   Output: histay isay implesay

#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/910185674557001498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=910185674557001498' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/910185674557001498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/910185674557001498'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/04/c-exercises-pig-latin.html' title='C++ exercises: Pig-latin'/><author><name>Zen</name><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-6144117508697071990.post-1801056475955365420</id><published>2010-04-16T21:48:00.001-04:00</published><updated>2010-04-16T21:49:09.429-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Linux: use awk to help generate XML file</title><summary type='text'>We have a text file product_desc.txt like this:
   name product1
   size large
   weight 30lb
   price 10.00
   quantity 100
and we want to change it into XML format:
   &lt;name&gt;product1&lt;/name&gt;
   &lt;size&gt;large&lt;/size&gt;
   &lt;weight&gt;30lb&lt;/weight&gt;
   &lt;price&gt;10.00&lt;/price&gt;
   &lt;quantity&gt;100&lt;/quantity&gt;
So we run command:

   awk '{print "&lt;"$1"&gt;"$2"&lt;/"$1"&gt;"}' product_desc.txt 
In the command, $1 refers to </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/1801056475955365420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=1801056475955365420' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1801056475955365420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1801056475955365420'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/04/linux-use-awk-to-help-generate-xml-file.html' title='Linux: use awk to help generate XML file'/><author><name>Zen</name><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-6144117508697071990.post-4520658676735865043</id><published>2010-04-16T21:46:00.000-04:00</published><updated>2010-04-20T20:30:44.170-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Example'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Code'/><title type='text'>C++ exercises: DaysOfWeek</title><summary type='text'>Q: Consider the enumerated type
   enum DaysOfWeek {Sun, Mon, Tues, Web, Thurs, Fri, Sat};
Write a function
   void  GetDay(DaysOfWeek&amp; day);
that reads the name of a day from the keyboard as a string and assigns the corresponding enum value to day. Also write a function
   void PutDay(DaysOfWeek day)
that writes the enum value to the screen. Develop a main program to test the two functions.

#</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/4520658676735865043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=4520658676735865043' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4520658676735865043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4520658676735865043'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/04/c-exercises-daysofweek.html' title='C++ exercises: DaysOfWeek'/><author><name>Zen</name><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-6144117508697071990.post-4306844556054685438</id><published>2010-04-15T20:03:00.001-04:00</published><updated>2010-04-20T20:30:44.171-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Example'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Code'/><title type='text'>C++ exercises: hex and decimal</title><summary type='text'>Q: Write a program that declares three integer variables i, j, k. Input a value for i in decimal and values for j and k in hex. Print all three variables in both hex and decimal.

#include &lt;iostream&gt;
 
using namespace std;
 
int main()
{
   int i, j, k;
 
   cout &lt;&lt; "input i(dec), j(hex), k(hex):";
   cin &gt;&gt; i &gt;&gt; hex &gt;&gt; j &gt;&gt; k;
 
   cout &lt;&lt; "i: " &lt;&lt; hex &lt;&lt; i &lt;&lt; "(hex) " &lt;&lt; dec &lt;&lt; i &lt;&lt; "(dec) " &lt;&lt;</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/4306844556054685438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=4306844556054685438' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4306844556054685438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4306844556054685438'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/04/c-exercises-hex-and-decimal.html' title='C++ exercises: hex and decimal'/><author><name>Zen</name><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-6144117508697071990.post-5240397164176707670</id><published>2010-04-15T20:01:00.001-04:00</published><updated>2010-04-20T20:30:44.171-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Example'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Code'/><title type='text'>C++ exercises: OctIn</title><summary type='text'>Q: Write a function
   void OctIn(unsigned int&amp; n);
that reads a base 8 (octal) number and assigns it to n. Use OctIn in a main program that reads the following octal numbers and prints the decimal equivalents:
   7, 177, 127, 7776, 177777

#include &lt;iostream&gt;

using std::cin;
using std::cout;
using std::endl;
using std::oct;

void OctIn(unsigned int&amp; n)
{
   cin &gt;&gt; oct &gt;&gt; n;
}

int main()
{
   </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/5240397164176707670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=5240397164176707670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5240397164176707670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5240397164176707670'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/04/c-exercises_15.html' title='C++ exercises: OctIn'/><author><name>Zen</name><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-6144117508697071990.post-2279996102245000716</id><published>2010-04-14T20:34:00.000-04:00</published><updated>2010-04-14T20:34:46.259-04:00</updated><title type='text'>Add a Gadget in Blogger.com</title><summary type='text'>After login into Blogger.com, go to the dashboard of Blogger.com. Select "Layout" then "Page Elements". There are several places you can add a gadget.
right below the title and above the posts;
the side bar;
the footer;
It is easy to identify them because all of them have a big linked title yelling "Add a Gadget". Click on the link and you can choose the gadgets you want to add. After adding them</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/2279996102245000716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=2279996102245000716' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2279996102245000716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2279996102245000716'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/04/add-gadget-in-bloggercom.html' title='Add a Gadget in Blogger.com'/><author><name>Zen</name><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-6144117508697071990.post-1428030158388942425</id><published>2010-04-14T20:33:00.001-04:00</published><updated>2010-04-20T20:30:44.172-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Example'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Code'/><title type='text'>C++ exercises: BaseOut</title><summary type='text'>Q: Write a function
   void BaseOut(unsigned int n, int b);
that outputs n in the base b, 2 &lt;= b &lt;= 10. Print each number in the range 2&lt;=n&lt;=50 in base 2, 4, 5, 8 and 9.

#include &lt;iostream&gt;
                                                                                
using std::cout;
using std::endl;
                                                                                
void BaseOut</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/1428030158388942425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=1428030158388942425' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1428030158388942425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1428030158388942425'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/04/c-exercises.html' title='C++ exercises: BaseOut'/><author><name>Zen</name><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-6144117508697071990.post-6599970991307093178</id><published>2010-04-07T20:58:00.001-04:00</published><updated>2010-05-25T15:17:41.152-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox extension: new features of Take-A-Break</title><summary type='text'>New features of Take A Break are added in version 1.1 to serve the feedbacks from you. It is already submitted to the official Firefox extensions website. Please give it a try. The new features are -

Sound Option

You can enable sound for the short break. When it is enabled, the extension will keep beeping while the icon is flashing, and stop beeping when the short break ends. So you can know </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/6599970991307093178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=6599970991307093178' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/6599970991307093178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/6599970991307093178'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/04/firefox-extension-new-features-of-take.html' title='Firefox extension: new features of Take-A-Break'/><author><name>Zen</name><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/_5M8KR9GHm30/S70prdHhswI/AAAAAAAAAGY/O8Pvht4RLV8/s72-c/TaBOptions.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-3556661765608935735</id><published>2010-03-30T20:45:00.000-04:00</published><updated>2010-03-30T20:45:51.838-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox extension programming: play sound</title><summary type='text'>A Firefox extension can play sound with the nsISound interface. In my next release of the extension Take A Break, I will add the sound to remind the user of a break. The interface is very easy to use.

1. Create a sound instance.
   sound = Components.classes["@mozilla.org/sound;1"]
            .createInstance(Components.interfaces.nsISound);
2. Beep.
   sound.beep();
That is how simple it can be</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/3556661765608935735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=3556661765608935735' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/3556661765608935735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/3556661765608935735'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/03/firefox-extension-programming-play.html' title='Firefox extension programming: play sound'/><author><name>Zen</name><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-6144117508697071990.post-5112381240824106558</id><published>2010-03-25T20:35:00.000-04:00</published><updated>2010-03-25T20:35:28.642-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Measure the linear distance of two locations in Google Earth</title><summary type='text'>You can measure the linear distance of two addresses in Google Earth. There is a "Show Ruler" icon in the Toolbar of Google Earth. If you cannot see the Toolbar, you can show it by checking the "Toolbar" item under main menu "View".

When you click the "Show Ruler" icon in the Toolbar, a "Ruler" dialog pops up. You can drag it aside if it blocks the view of the map. 

To measure a distance, click</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/5112381240824106558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=5112381240824106558' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5112381240824106558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5112381240824106558'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/03/measure-linear-distance-of-two.html' title='Measure the linear distance of two locations in Google Earth'/><author><name>Zen</name><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-6144117508697071990.post-7284537875763765935</id><published>2010-03-24T21:05:00.000-04:00</published><updated>2010-03-24T21:05:35.187-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Trim leading or trailing white spaces off a string in C++</title><summary type='text'>Unlike Java, there is no built-in function to remove leading or trailing white spaces from a string in C++.

We can write a function to implement this.

  1 void trim(string&amp; s)
  2 {
  3    size_t p = s.find_first_not_of(" \t");
  4    s.erase(0, p);
  5 
  6    p = s.find_last_not_of(" \t");
  7    if (string::npos != p)
  8       s.erase(p+1);
  9 }

Line 1: "s" is a reference parameter </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/7284537875763765935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=7284537875763765935' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/7284537875763765935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/7284537875763765935'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/03/trim-leading-or-trailing-white-spaces.html' title='Trim leading or trailing white spaces off a string in C++'/><author><name>Zen</name><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-6144117508697071990.post-9038366358704912581</id><published>2010-03-18T20:35:00.000-04:00</published><updated>2010-03-18T20:35:42.794-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Linux: SETGID on directory</title><summary type='text'>SETGID stands for SET Group ID. We can use the command chmod to set the group ID bit for a directory.

   chmod g+s mydir

or with numeric mode:

   chmod 2775 mydir

After the change, the permission of the directory "mydir" becomes "drwxrwsr-x".

   drwxrwsr-x 3 zen zen 4096 2010-03-18 19:57 mydir

But what is so special about setting the group ID for a directory? The trick is that when another </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/9038366358704912581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=9038366358704912581' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/9038366358704912581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/9038366358704912581'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/03/linux-setgid-on-directory.html' title='Linux: SETGID on directory'/><author><name>Zen</name><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-6144117508697071990.post-6001507207788667750</id><published>2010-03-17T21:40:00.000-04:00</published><updated>2010-03-17T21:40:17.725-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox extension programming: add actions to status bar icon</title><summary type='text'>Note: This is a successive post of put an icon on the status bar.

After we add our icon to the status bar of Firefox, we want to make it useful. In this tip, we show how to implement the following three functions.

   1. When the mouse hovers over the icon, a tooltip pops up to show some text.
   2. Clicking on the icon changes its color.
   3. Right-clicking on the icon pops up a context menu.
</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/6001507207788667750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=6001507207788667750' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/6001507207788667750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/6001507207788667750'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/03/firefox-extension-programming-add.html' title='Firefox extension programming: add actions to status bar icon'/><author><name>Zen</name><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-6144117508697071990.post-7274410156648019309</id><published>2010-03-15T21:06:00.000-04:00</published><updated>2010-03-15T21:06:13.231-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Customize the Firefox Toolbar</title><summary type='text'>By default, Firefox shows Menu Bar, Navigation Toolbar, Bookmarks Toolbar at the top. They take some space and makes the view panel smaller. 

If you are using a netbook or a small display, you may want to customize the toolbar to hide the less used items. To do that, right click on the Menu Bar and select "Custmize..." from the context menu.

A Customize Toolbar dialog pops up. You can drag and </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/7274410156648019309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=7274410156648019309' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/7274410156648019309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/7274410156648019309'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/03/customize-firefox-toolbar.html' title='Customize the Firefox Toolbar'/><author><name>Zen</name><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/_5M8KR9GHm30/S54qREH7BwI/AAAAAAAAAFo/wLo193bDrWM/s72-c/CaptureFFToolbar1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-5199490278529136868</id><published>2010-03-13T08:38:00.011-05:00</published><updated>2011-02-17T22:07:19.659-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox Extension: Packed Menu</title><summary type='text'>Note: this extension conflicts with my another extension Packed Menu 2 Nav, which puts the button "M" on the Navigation Toolbar. If you have installed Packed Menu 2 Nav, you must uninstall it first before you install this extension. 

This extension adds a button "M" to the menu bar. And the original main menus are hidden. When you click the "M" button or press Alt-M, the original main menus are </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/5199490278529136868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=5199490278529136868' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5199490278529136868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5199490278529136868'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/03/firefox-extension-packed-menu.html' title='Firefox Extension: Packed Menu'/><author><name>Zen</name><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/_5M8KR9GHm30/TE9qpQqzfyI/AAAAAAAAAKA/6ZjH9W2JN-g/s72-c/packedmenu.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-5305687545462290576</id><published>2010-03-11T20:35:00.000-05:00</published><updated>2010-03-11T20:35:24.141-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Convert string to number in C++</title><summary type='text'>There are several methods to convert a string to number in C++. We use floating point numbers as examples. There are similar functions for integer.

Method 1: use function atof().

The syntax of atof() is:
   #include &lt;stdlib.h&gt;
   double atof(const char *nptr);
The conversion code could be:
   const char *a = "234.5";
   double d;

   d = atof(a);
There is a little problem with this function. It</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/5305687545462290576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=5305687545462290576' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5305687545462290576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5305687545462290576'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/03/convert-string-to-number-in-c.html' title='Convert string to number in C++'/><author><name>Zen</name><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-6144117508697071990.post-5469464156826060073</id><published>2010-03-10T20:15:00.003-05:00</published><updated>2010-03-17T21:42:05.040-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox extension programming: put an icon on the status bar</title><summary type='text'>To better understand this article, you should have the basic knowledge of building a Firefox extension. You can refer to my another post Learn how to create a Firefox extension in 10 minutes if needed.

To put an icon on the status bar of Firefox, we first need to "overlay" the status bar in our main *.xul file. Let us name it "overlay.xul":
   &lt;overlay ...

      &lt;script src="chrome://</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/5469464156826060073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=5469464156826060073' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5469464156826060073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5469464156826060073'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/03/firefox-extension-programming-put-icon.html' title='Firefox extension programming: put an icon on the status bar'/><author><name>Zen</name><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-6144117508697071990.post-5117919073656918067</id><published>2010-03-08T20:21:00.001-05:00</published><updated>2010-03-08T20:22:01.233-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Setting the language in Firefox</title><summary type='text'>There are a couple of language parameters of Firefox. You can change them to make your Firefox browser speak a different language to the Web.

It seems that different web sites utilize different parameters to detect your language. So you may want to try both of the following methods.

The first one is the User-Agent Locale parameter. To change it:
* input "about:config" into the Address box, and </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/5117919073656918067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=5117919073656918067' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5117919073656918067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5117919073656918067'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/03/setting-language-in-firefox.html' title='Setting the language in Firefox'/><author><name>Zen</name><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-6144117508697071990.post-4773688727630655117</id><published>2010-03-05T20:27:00.001-05:00</published><updated>2010-03-05T20:28:48.365-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Thunderbird'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Change the secret configuration parameters of Mozilla  Firefox/Thunderbird</title><summary type='text'>There are many secret parameters you can use to tweak your Mozilla Firefox or Thunderbird. It is different to access them between Firefox and Thunderbird.

In Firefox, input "about:config" in the address box. Firefox will warn you: "This might void your warranty!". It IS dangerous if you mess up with the parameters. But if you are confident, just click the "I'll be careful, I promise!" button to </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/4773688727630655117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=4773688727630655117' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4773688727630655117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4773688727630655117'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/03/change-secret-configuration-parameters.html' title='Change the secret configuration parameters of Mozilla  Firefox/Thunderbird'/><author><name>Zen</name><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-6144117508697071990.post-288871472992533415</id><published>2010-03-04T19:57:00.000-05:00</published><updated>2010-03-04T19:57:52.896-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Slow SSH connection to remote server</title><summary type='text'>When I tried to ssh connect to a new remote server, it took a longer time. Although it got connected finally. I was curious so I turned on the debug mode:
   ssh -v remote_server
The log showed that there was a pause when ssh client application was trying authentication method gssapi-with-mic. After 3 trials, ssh client tried the next authentication method and succeeded:
   debug1: </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/288871472992533415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=288871472992533415' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/288871472992533415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/288871472992533415'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/03/slow-ssh-connection-to-remote-server.html' title='Slow SSH connection to remote server'/><author><name>Zen</name><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-6144117508697071990.post-2894565290691246519</id><published>2010-02-26T19:55:00.000-05:00</published><updated>2010-02-26T19:55:00.172-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Check out Java project from CVS to Eclipse</title><summary type='text'>Step 1:
Start Eclipse.
Select menu "File|Import...".

Step 2:
The "Import" dialog pops up.
Select "CVS|Projects from CVS".
Click "Next".

Step 3:
Select "Create a new repository location". 
Click "Next" to add the CVS repository location.
orSelect "Use existing repository location:".  Select the wanted repository location from the list.
Click "Next".

Step 4:
Select "Use an existing module (this </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/2894565290691246519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=2894565290691246519' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2894565290691246519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2894565290691246519'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/02/check-out-java-project-from-cvs-to.html' title='Check out Java project from CVS to Eclipse'/><author><name>Zen</name><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-6144117508697071990.post-868138693200604735</id><published>2010-02-25T21:07:00.000-05:00</published><updated>2010-02-25T21:08:05.547-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Thunderbird'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>How to change the options/preferences of a Mozilla Firefox/Thunderbird extension</title><summary type='text'>Most of the extensions of Mozilla Firefox or Mozilla Thunderbird have "Options" dialogs. To open the "Options" dialog, you can:

Step 1: click the "Tools" button in the menu bar;

Step 2: select the "Add-ons" item;


Step 3: select the "Extensions" icon;

Step 4: select the extension you want and the "Options" button will show up;

Step 5: click the "Options" to open the dialog.

 
</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/868138693200604735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=868138693200604735' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/868138693200604735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/868138693200604735'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/02/how-to-change-optionspreferences-of.html' title='How to change the options/preferences of a Mozilla Firefox/Thunderbird extension'/><author><name>Zen</name><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/_5M8KR9GHm30/S4csouD9G6I/AAAAAAAAAFI/sPy-5pCuHuM/s72-c/addonopt1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-1570880454451713512</id><published>2010-02-24T19:23:00.000-05:00</published><updated>2010-02-24T19:23:42.216-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Detect memory allocation failure in C++</title><summary type='text'>In C++, we use "new" to allocate a piece of memory. There are chances that the allocation may fail. Upon the failure of allocating memory, the developer may want to do some clean-up or logging. You may see this piece of code in some old programs:
char *p = new char[buffer_size];
if (!p) {
   // error handling ...
}
It worked in the last century, but not any more. The problem of this piece of code</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/1570880454451713512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=1570880454451713512' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1570880454451713512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1570880454451713512'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/02/detect-memory-allocation-failure-in-c.html' title='Detect memory allocation failure in C++'/><author><name>Zen</name><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-6144117508697071990.post-4039095987356673067</id><published>2010-02-23T20:38:00.000-05:00</published><updated>2010-02-23T20:38:22.400-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Thunderbird'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Porting Firefox extension to Thunderbird</title><summary type='text'>After I published the Autohide Tabbar Firefox extension, some positive comments were received. Thank you! It encourages me to keep improving it. One of the comments was asking whether the Autohide Tabbar extension could be added to Mozilla Thunderbird. I looked into Thunderbird and found out that since version 3, tabs were introduced. After some more investigations, it was discovered that porting</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/4039095987356673067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=4039095987356673067' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4039095987356673067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4039095987356673067'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/02/porting-firefox-extension-to.html' title='Porting Firefox extension to Thunderbird'/><author><name>Zen</name><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-6144117508697071990.post-2185806000581985568</id><published>2010-02-19T19:34:00.001-05:00</published><updated>2011-02-21T18:08:19.522-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><title type='text'>JavaScript: trim leading or trailing spaces from a string</title><summary type='text'>There is no built-in function to remove leading or trailing spaces from a string in JavaScript. To do that, we can use the replace() method of the String object.

The syntax of String's replace() method is:
string.replace(regexp/substr,newstring);
The first parameter can be a regular expression. The second parameter is a new string to replace what the regular expression matches in the string. So </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/2185806000581985568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=2185806000581985568' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2185806000581985568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2185806000581985568'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/02/javascript-trim-leading-or-trailing.html' title='JavaScript: trim leading or trailing spaces from a string'/><author><name>Zen</name><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-6144117508697071990.post-5945820933853306381</id><published>2010-02-18T17:54:00.000-05:00</published><updated>2010-02-18T17:55:41.592-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>GNU C++ compiler (g++) does not like the typical hello-world program</title><summary type='text'>In some old text books or web sites, you can see the standard or traditional "hello world" program like this:
#include &lt;iostream.h&gt;
main()
{
   cout &lt;&lt; "Hello World!" &lt;&lt; endl;
}
If you use the latest GNU C++ compiler to build this program, you will get a warning.
$ g++ helloworld.cpp 
In file included from /usr/include/c++/4.2/backward/iostream.h:31,
                 from helloworld.cpp:1:
/usr/</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/5945820933853306381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=5945820933853306381' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5945820933853306381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5945820933853306381'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/02/gnu-c-compiler-g-does-not-like-typical.html' title='GNU C++ compiler (g++) does not like the typical hello-world program'/><author><name>Zen</name><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-6144117508697071990.post-3578490132152519468</id><published>2010-02-07T19:39:00.001-05:00</published><updated>2011-02-21T17:19:16.524-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Linux: EADDRNOTAVAIL (Address not available) error</title><summary type='text'>If you are running many TCP client programs on your machine and these programs do not specify ports when they make connections to the server, the system would assign temporary ports for them. When a connection is closed, the port will be returned to the system for reuse. The temporary ports have a limited range. When the allowed connections are exhausted, the program could get an error when it </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/3578490132152519468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=3578490132152519468' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/3578490132152519468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/3578490132152519468'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/02/linux-eaddrnotavail-address-not.html' title='Linux: EADDRNOTAVAIL (Address not available) error'/><author><name>Zen</name><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-6144117508697071990.post-4234151963800555902</id><published>2010-02-05T19:42:00.010-05:00</published><updated>2011-02-21T17:38:33.061-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox Extension: Invert Input</title><summary type='text'>Note: Online help of the old version 1 can be found here.
Note: Online help of the old version 2 can be found here.

No matter what reason you want to invert your input to the browser, you can do it with this extension now. It can invert the input of a text field or a password field.
&lt;!--
google_ad_client = "pub-5400749133295188";
/* 336x280, created 2/19/11 */
google_ad_slot = "2346695524";
</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/4234151963800555902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=4234151963800555902' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4234151963800555902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/4234151963800555902'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/02/firefox-extension-invert-input.html' title='Firefox Extension: Invert Input'/><author><name>Zen</name><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/_5M8KR9GHm30/TE4hdygnbfI/AAAAAAAAAJ4/UBBUcWeA3XE/s72-c/iitoolbar.png' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-6416986444620312882</id><published>2010-02-03T19:46:00.001-05:00</published><updated>2010-02-03T19:58:12.673-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Linux: create a CVS repository on local machine</title><summary type='text'>CVS is usually set up as client/server model to let developers from different locations work concurrently and submit their code to a central place for sharing. If you are the only developer and work on some small projects by yourself, you don't need to build such a complicated system. With several simple steps, you can use CVS on a stand-alone machine.

* Create a directory for the CVS repository</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/6416986444620312882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=6416986444620312882' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/6416986444620312882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/6416986444620312882'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/02/linux-create-cvs-repository-on-local.html' title='Linux: create a CVS repository on local machine'/><author><name>Zen</name><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-6144117508697071990.post-714665308823991485</id><published>2010-01-25T20:16:00.003-05:00</published><updated>2010-02-03T19:57:44.407-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Add Google Translate Tool To Your Webpage Or Blog</title><summary type='text'>1. Google Translate Element
Go to http://www.google.com/webelements/translate/. With a little configuration, you can get a snippet of javascript code to put on your web page or blog. By choosing "Display" as "Always", you get a menu of "Select Language"; by choosing "Display" as "Automatic", you can invoke the Google Translate automatically.

If you just want to specify a subset of destination </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/714665308823991485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=714665308823991485' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/714665308823991485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/714665308823991485'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/01/add-google-translate-tool-to-your.html' title='Add Google Translate Tool To Your Webpage Or Blog'/><author><name>Zen</name><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-6144117508697071990.post-1257652212128917342</id><published>2010-01-13T19:29:00.019-05:00</published><updated>2011-02-20T14:07:36.326-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Thunderbird'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox/Thunderbird Extension: Autohide Tabbar</title><summary type='text'>
&lt;!--
addCnLink('2010/01/firefox.html');
//--&gt;

Overview
This extension auto-hides your Firefox/Thunderbird's tab bar. It can also relocate the tab bar to the bottom of the browser window. 

It supports Thunderbird since version 2.0.
&lt;!--
google_ad_client = "pub-5400749133295188";
/* 336x280, created 2/19/11 */
google_ad_slot = "2346695524";
google_ad_width = 336;
google_ad_height = 280;
//--&gt;


</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/1257652212128917342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=1257652212128917342' title='25 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1257652212128917342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1257652212128917342'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/01/firefox-extension-autohide-tabbar.html' title='Firefox/Thunderbird Extension: Autohide Tabbar'/><author><name>Zen</name><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/_5M8KR9GHm30/S1EWA_WCXII/AAAAAAAAAEU/NUmiTsibPF4/s72-c/CaptureContextMenu.JPG' height='72' width='72'/><thr:total>25</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-8615823537931317672</id><published>2010-01-10T16:06:00.007-05:00</published><updated>2010-02-07T19:31:15.500-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><title type='text'>Google Chrome Extension: Take A Break</title><summary type='text'>Addicted to the Web? Don't compromise your health! Continuously staring at the computer can cause headaches, blurred vision, neck pain, fatigue, dry eyes. Take A Break extension tries to help you avoid or reduce these problems. It reminds you when to take a break while you are surfing the Web.

Features
- A little icon on the tool bar will be flashing every 15 minutes to remind you a short break.</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/8615823537931317672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=8615823537931317672' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/8615823537931317672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/8615823537931317672'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/01/google-chrome-extension-take-break.html' title='Google Chrome Extension: Take A Break'/><author><name>Zen</name><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/_5M8KR9GHm30/S0o-c7-Wr9I/AAAAAAAAAD8/3gI44671pw0/s72-c/CaptureIcon.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-1297755236724343311</id><published>2010-01-05T19:03:00.004-05:00</published><updated>2011-02-21T17:06:45.348-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><title type='text'>Google Chrome: content script limitations make my extension look bad</title><summary type='text'>After I published my Google Chrome extension Boss Key and Button, some positive feedbacks were received in the beginning. But later on, I kept receiving comments saying that the the extension was not working. That puzzled me for quite some time because I had developed it in a quite early version of Google Chrome (the dev channel) and tested it on both Windows and Linux successfully.
&lt;!--
</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/1297755236724343311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=1297755236724343311' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1297755236724343311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/1297755236724343311'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/01/google-chrome-content-script.html' title='Google Chrome: content script limitations make my extension look bad'/><author><name>Zen</name><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-6144117508697071990.post-8732963488305340969</id><published>2010-01-04T19:10:00.001-05:00</published><updated>2010-01-17T12:23:29.947-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Linux: secure login without entering password (Part 2)</title><summary type='text'>If you have supplied a passphrase when you generated your pair of private and public keys (see Part 1 for how to generate the keys), you would need to enter the passphrase each time you ssh login to the remote machine. If you think that is painful, you need the program ssh-agent. It can hold the private key and help to authenticate without asking for the passphrase every time.

Case 1
If you are </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/8732963488305340969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=8732963488305340969' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/8732963488305340969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/8732963488305340969'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2010/01/linux-secure-login-without-entering.html' title='Linux: secure login without entering password (Part 2)'/><author><name>Zen</name><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-6144117508697071990.post-8194930239953469214</id><published>2010-01-03T20:00:00.001-05:00</published><updated>2010-02-07T19:30:23.832-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Chrome-Extension'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><title type='text'>Chrome Extensions: Table Of Contents</title><summary type='text'>Boss Key and Button
You can press the F12 key or both the right button of your mouse to hide all your browser windows.

Secure Or Not
It shows whether the links on a webpage are https links or http.

Take A Break
By reminding you when to take a break while surfing the Web, it tries to help you avoid excessive web browsing and keep healthy.

 Support</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/8194930239953469214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=8194930239953469214' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/8194930239953469214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/8194930239953469214'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2009/12/chrome-extensions-table-of-contents.html' title='Chrome Extensions: Table Of Contents'/><author><name>Zen</name><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-6144117508697071990.post-2184438208459313261</id><published>2009-12-28T18:39:00.004-05:00</published><updated>2011-01-29T16:28:36.368-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Linux: random shutdown and keyboard issues with Ubuntu 9.10 (Karmic Koala)</title><summary type='text'>After upgrading from Ubuntu 9.04 to 9.10 several days ago, my laptop experienced random shutdowns -- or more precisely, sudden power-offs. It turned out to be a known issue of ACPI and i8042 controller conflicts. By adding the parameter of acpi=off to the kernel boot options in grub, the issue of random shutdowns went away.

However, the keyboard would stop working after the laptop ran for some </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/2184438208459313261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=2184438208459313261' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2184438208459313261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/2184438208459313261'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2009/12/linux-random-shutdown-and-keyboard.html' title='Linux: random shutdown and keyboard issues with Ubuntu 9.10 (Karmic Koala)'/><author><name>Zen</name><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-6144117508697071990.post-3856260858588056344</id><published>2009-12-16T17:58:00.001-05:00</published><updated>2010-01-04T19:16:07.570-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Linux: secure login without entering password (Part 1)</title><summary type='text'>We can use ssh to login to a remote machine with secure encrypted communications. If you are as lazy as me, you would be tired of entering the password on each login. ssh allows you to use a pair of private and public keys to authenticate your logins instead of the password. It is very simple to set it up.

Step 1: generate the keys
Run command:
    ssh-keygen
It would ask you to input a </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/3856260858588056344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=3856260858588056344' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/3856260858588056344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/3856260858588056344'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2009/12/linux-secure-login-without-entering.html' title='Linux: secure login without entering password (Part 1)'/><author><name>Zen</name><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-6144117508697071990.post-335496964669615222</id><published>2009-12-12T14:47:00.006-05:00</published><updated>2010-02-07T19:30:40.219-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><title type='text'>Google Chrome Extension: Secure Or Not</title><summary type='text'>When you visit some secure web pages, you sometimes see a warning icon indicating that the webpage contains insecure contents on the address bar:


And you would wonder what information on the page is unencrypted.

This Chrome extension will answer the question. It shows whether the links on a webpage are https links or http, and whether the forms you are going to submit will be transferred </summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/335496964669615222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=335496964669615222' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/335496964669615222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/335496964669615222'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2009/12/google-chrome-extension-secure-or-not.html' title='Google Chrome Extension: Secure Or Not'/><author><name>Zen</name><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/_5M8KR9GHm30/SyPyRsBvHpI/AAAAAAAAADc/jzWSp7s69-8/s72-c/CaptureInsecureIcon.JPG' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6144117508697071990.post-5888472554993617276</id><published>2009-12-11T17:50:00.002-05:00</published><updated>2010-02-07T19:30:40.220-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><title type='text'>Google Chrome extensions: example of how to use Options page</title><summary type='text'>If you want to let the user customize the behavior of your extension, you can provide an Options page. In my Boss Key and Button extension (version 1.1), I use an Options page to allow the user control what features they want to enable. Here are the steps to do that.

Add the Options page to file manifest.json
{
  ...
  "options_page": "options.html",
  ...
}

Then in the extensions page (chrome:</summary><link rel='replies' type='application/atom+xml' href='http://www.toptip.ca/feeds/5888472554993617276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6144117508697071990&amp;postID=5888472554993617276' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5888472554993617276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6144117508697071990/posts/default/5888472554993617276'/><link rel='alternate' type='text/html' href='http://www.toptip.ca/2009/12/google-chrome-extensions-example-of-how.html' title='Google Chrome extensions: example of how to use Options page'/><author><name>Zen</name><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></feed>
