Skip to content

My Reaction to One of My Posts Being Overrated by Google

One would think that I would be quite pleased when I see that one of my blog posts appear among the first ten results returned by Google when a commonly entered search term is entered into Google. However, there is one post that I had recently written that I do not believe is worthy of being on the first page of Google’s search results after a certain frequently entered search term is submitted to Google.

I have recently found that a number of individuals have found their way to my site after entering “writing firefox extensions” into a search engine. It was after finding that more individuals than I expected were viewing a post that contains that search term in its title that I decided to conduct a Google search using that term. I then found that the blog post that I wrote titled “Going Beyond Programming When Writing Firefox Extensions” was on the first page of search results when I Googled that term. You can see where that blog post currently ranks in search results when that term is entered if you click here. Since the time that I first discovered where that post ranked when that search term is used, I have found that that post did not rank as high as it previously did. However, I am unsure if it should be ranked among the first ten results, ahead of hundreds of thousands of results returned when a search for that term is conducted.

The term “writing firefox extensions” may often be entered by those who would like to join the many individuals who write extensions for Firefox. When a search for information on writing Firefox extensions is done, what individuals may want is the best information on how to write these extensions. However, my aforementioned blog post does not contain the best information for those who aspire to write Firefox extensions. Inclusion of the text of this search term in the title of that blog post is what may be one reason it ranks as high as it does among these search results. However, I never meant for that blog post to be considered an authoritative guide for those who want to write Firefox extensions. If I had known that that post was going to be ranked that high among search results, I would have put more effort into making it contain as much useful information as possible.

I would like to apologize to those who tried to find information on writing Firefox extensions only to find that any of their time was wasted by coming across this information that may not have been very useful. I have mentioned before that Google is not perfect. That blog post being ranked as high as it is appears to be evidence of this fact. However, Google’s algorithms were designed and written by those who have much knowledge of search engine technology. To dispute where pages should rank among search results would seem to be arguing with these individuals. And who am I to argue with them? I suppose I will need to accept that some my blog posts rank higher among Google’s search results than they should.

Minor Updates to Software That I Wrote

Although I am not sure what kind of software I should write next, I am certain that I will maintain and update what I have already written. And I have recently found that I needed to update one of my Greasemonkey scripts as well as the Firefox extension that I wrote. The Greasemonkey script that I wrote titled “Link to YouTube Video Pages from Embedded YouTube Videos” was found to not work with an embedded video, so I corrected it. The Firefox extension titled “Bookmark Current Tab Set” that I wrote needed to have an update made to its user interface, and so that update was made. These updates may certainly not have been critical, although I do consider these updates necessary.

This Greasemonkey script that I wrote did not work with embedded videos that were embedded a certain way, and so I made the necessary corrections to it. I also added a feature to it so that it would not add links to YouTube pages on the main Google Video page. This was done because there already is a link below the embedded video that is featured on that page to the page on YouTube where that video can be found. These updates were quite minor, although they needed to be made.

In version 0.2.0 of the Firefox extension that I wrote, I added a menu option that brings up a dialog box. However, it was only after releasing this version of the extension that I thought that I should add an ellipsis to the end of the title of this menu option. I could have checked the extension more thoroughly for errors both in functionality and in the user interface before releasing version 0.2.0 of the extension. However, as is it often said that those who write this kind of software should release early and release often, I chose to release it before I could check for all errors that I might have made in writing it.

I am currently trying to decide on what kind of software to write next, and I am not sure what my focus should be. However, I am sure that I will continue to make the necessary updates to what I have already written.

noXSS: A Firefox Extension for Defending Against Reflected XSS Attacks

After writing a Firefox extension that is still considered experimental, I decided to try to discover which Firefox extensions are the best ones that are considered experimental. After taking some time to look for experimental extensions to install, I came across one called “noXSS”, which can be found on this page on AMO. This extension, which is designed to protect its users from reflected (or non-persistent) XSS attacks, is currently a work in progress. In this post on the mozillaZine forums, it was requested that end users test it and give feedback about it. As I thought that this extension could be useful, and as I understand the importance of peer review, I decided to install this extension, test it, and give feedback on it.

As it says on the main page for the project here, this extension is based on technology proposed by two individuals from the University of Passau and one individual from the University of Hamburg. This paper in which this was proposed can be viewed in PDF form if you click here. In that paper, it was mentioned that input filtering and output sanitation are commonly used methods for preventing XSS attacks. However, the process of filtering of certain keywords that may indicate the possibility of an XSS attack, such as "document" or "javascript" tends to be flawed. This fact was noted in the paper, and the fact that output sanitation fails frequently was also noted. More complex and more reliable methods for detecting possible XSS attacks were proposed in that paper. It was suggested in that paper that data in HTTP requests and their corresponding HTTP responses should be analyzed and compared in order to report possible XSS attacks while preventing reports of false positives. It was said in that paper that when this XSS detecting software that was proposed was tested, there were no false negatives, and few false positives. Methods for further preventing false positives were also mentioned in the paper. Having said this, a Firefox extension based on what was proposed in this paper would be one that many would like to have.

The Firefox extension based on what was proposed in that paper currently only implements part of what was proposed in the paper. For example, it currently uses string matching when trying to detect XSS attacks, when the process of subsequence matching mentioned in the paper would detect more XSS attacks. However, in tests that I have run with it, it successfully prevented XSS attacks, except in situations that are not yet supported by this extension. In addition, I have yet to receive a false positive when using the newest version of noXSS. The testing that I had done on it may not have been thorough, and the author of the extension mentioned that there are some XSS attacks that it currently will not block. However, based on what I have seen on the noXSS project page regarding future plans and based on what I have seen in comments in the extension’s source code, there are clearly defined plans to make it work well in the future. At this time, one might still want to use the protection against XSS attacks offered by a Firefox extension named NoScript, which was mentioned both on the project page and on the paper on which this project is based. However, in the paper, it was said that use of NoScript can result in false positives because NoScript does not analyze as much HTTP data as the software proposed in the paper.

This Firefox extension has potential to be very useful, as it is based on technology that has already been found to work well. A number of individuals will need to test it and give feedback about it in order to ensure that it will be implemented properly. I will continue to test it, and I plan on testing future versions of it. I also may write more about it in the future. I look forward to working with future versions of this extension, and I plan on assisting in ensuring that it will work as well as it should.

Bookmark Current Tab Set 0.2.0 Released

When I first wrote my Firefox extension titled “Bookmark Current Tab Set”, I decided to release once it successfully did only what I wanted it to do. However, I later wanted this extension to do more, and other users may have also wanted it to do more. Releasing an extension that did little other than what Firefox already did may have led to a lack of interest in it. Perhaps I was putting in more effort than necessary to prevent this extension from being considered bloated. However, I considered this extension excessively basic and minimalistic, and I thought that it needed more features so that it would be considered more useful. I have previously mentioned which features may be added to it in the future, as I knew that I needed to make it less basic. And now, a new version of the extension has been released, and it now has features that I, and some other users, wanted it to have.

I have mentioned previously that sometimes when I bookmark a set of tabs, I like to have the time and date when these tabs were bookmarked to be included in the name of the folder that will contain these bookmarks. However, there are times when I would like additional information to be included in the bookmark folder’s name. I sometimes like to be absolutely sure why I bookmarked certain sets of tabs that I had open at certain times. And information on when these bookmarks were added is not always enough information to remind me why I bookmarked the tabs that I had open at a particular time. I would sometimes like information on what each of these bookmarked pages has in common (aside from the date and time when they were bookmarked) in the bookmark folder name. And if that additional information is included, then there may not be as much need to include the time of the day when the set of tabs was bookmarked in the folder name. In addition, there is some information that version 0.1.0 of the extension includes in bookmark folder names that is unnecessary. I was reminded of this fact when a user mentioned that the time zone does not need to be included in the folder name. Also, the format of the date may be something that users would want to adjust. This new version of the extension was written with ideas such as these in mind.

In this new version, one can still immediately bookmark all tabs by selecting the menu option to quickly bookmark the current tab set. However, there is now an option to bookmark all tabs that brings up a dialog similar to the one that appears when choosing Firefox’s option to bookmark all tabs. The difference is that initially, information on when this bookmarking is done already appears in the text box where the bookmark folder’s name is to be entered. Users can then modify what is initially entered as the folder name. The screen shot on the left below displays the menu options for bookmarking the current tab set, and for quickly bookmarking the current tab set. The one on the right displays the dialog that appears when choosing what is the new regular option for bookmarking the tab set.

Free Image Hosting at www.ImageShack.us Free Image Hosting at www.ImageShack.us

The other most significant change to the extension is the addition of options for adjusting what the bookmark folder name will be. By default, the bookmark folder name will contain the date in the same format that it previously had. The bookmark folder name will also contain the time of the day that the bookmarking was done by default. However, there may be those who would like the format of the date to be different. As one can see in the screen shot below, there are three other formats from which to choose when selecting the format of the date. As can also be seen in that screen shot, inclusion of the time of the day when the bookmarking was done is now optional.

Free Image Hosting at www.ImageShack.us

As always, I would appreciate receiving feedback regarding changes that can be made to this extension. It was feedback from users that helped make this extension what it is now. And feedback from users will be needed to make this extension as good as it can be.

Going Beyond Programming When Writing Firefox Extensions

Those who write software code often prefer to focus solely on writing software code. However, as software is written for individuals who would use it, the actual writing of software is only one part of a larger picture. Some coders, myself included, write software to address their own personal needs. However, what these coders write tends to be made publicly available for others who may be interested in the software solutions that these coders write. And when programmers want software that they write initially for themselves to be made available for others, they must, appropriately enough, go beyond doing solely what they would prefer to do. The further from actual coding some programmers get when working on software projects, the less enthusiastic they may be about work on their projects. However, as software is ultimately for people, those who write it must remember how software fits into a larger picture.

I have found it quite necessary to go beyond merely coding in the time that I have worked on my Firefox extension titled “Bookmark Current Tab Set”. In particular, I have found that informing individuals of what I have written and why it is useful to be a challenge. As you may know, the best ideas for new innovations are irrelevant if the marketing of them is not sufficiently good. I previously had some difficulty in trying to inform users why this extension that I had written was relevant and useful. I had much difficulty trying to determine what the best name for the extension would be before deciding on “Bookmark Current Tab Set” as its name. And even after the long length of time that I spent considering a name for the extension, I am still not sure if “Bookmark Current Tab Set” is a good name. I needed to choose a name that describes what the extension does and how it is useful, without it being excessively long. Writing a good description of what the extension does was also a challenge. It, like the “Bookmark All” extension upon which my extension was based, could have been misunderstood as a redundant extension that does not perform something that Firefox can already perform. Describing why this extension mattered was as important as it was challenging.

I have also had some difficulty informing potential users of my extension about its existence, let alone its purpose. Aside from uploading the extension to addons.mozilla.org, there did not seem to be much that I could have done in order to inform users about the availability of this extension. However, an opportunity for me to advertise this extension occurred when I viewed this Lifehacker article. It was an article that included a tip on how to copy URLs of bookmarks in a bookmark folder in Firefox to the clipboard. And since the extension that I wrote was related to bookmark folders, I thought I would mention in the comments section of the article that knowledge of this tip can make my extension even more useful. I actually was afraid that my comment would be considered a shameless attempt at drawing attention to my extension. After posting my comment though, it did receive a reply. Unfortunately, the reply indicated that my concern about this extension being misunderstand as redundant was a valid one.

Perhaps if I make this extension less like a feature already in Firefox by adding more features to it, it will be less likely to be misunderstood. And addition of new features to the extension will make it easier for me to convince users that this extension is useful. I am currently working on adding new features to the Bookmark Current Tab Set extension. And perhaps adding features to it and maintaining it may be the best way to make people want it. Posting reports about what is being done with this extension to improve on it might be the best way to inform people of this extension and its usefulness.

Making a Greasemonkey Script for Embedded YouTube Videos Work with More Embedded Videos

As I have mentioned a number of times here before, I always appreciate receiving feedback about the software that I write. I need feedback from the users of my software in order to ensure that my software works as it should, and to know how I can make improvements to what I write. And I was recently informed that my Greasemonkey script that adds links below embedded YouTube videos to the pages on YouTube on which these videos can be found did not work with a video embedded on a particular page. A new version of the script that corrected this error was made available within twenty-four (24) hours of a comment being posted about this error. It was a very simple error that occurred as a result of me assuming that when an embedded video is added to a web page, few changes, if any, are made to the code one can copy and paste from the page on YouTube on which the video can be found. I later discovered on my own that this script had another similar error that occurred as a result of me making this assumption.

This second error was one that I discovered after Googling myself. This egosurfing indirectly led me to this page, which actually has information on this script. However, the page actually contains an embedded YouTube video to which my script did not add a link. After checking the parameters in the tags used to embed the video, I found that the .SWF extension was added to the end of the URL of the YouTube page where the video can be found. Therefore, I once again needed to update this script to handle a case that I did not think it would need to handle. Once again, however, only slight modifications needed to be made to correct this error.

This script has been publicly available for a long time. And during the time that it had been publicly available, errors like these had either not been found or were never reported. I certainly hope that the former rather than the latter is the case, for obvious reasons. However, in any case, I will try to decrease the number of pages on the web that have YouTube videos embedded in them with which this script will not work.

A Review of the First Two Chapters of the Second Edition of “Hacking: The Art of Exploitation”

When I first decided to start a blog, I never did think that book reviews would appear on it. However, after reading part of the second edition of the critically acclaimed book titled “Hacking: The Art of Exploitation” by Jon Erickson, I decided that I should weigh in on it here. Those thinking of whether or not they should buy the book may want to know as many details about the book as possible, and so I decided to write an entry here in which I would give my opinions of this book. I have read many reviews of this book, and nearly all of them were positive. In this review, I will attempt to avoid stating what has already been stated many times about this book. In addition, this review will be somewhat unusual, in that it is a review that covers only the first two chapters of the book. In one review of the first edition of this book, it was said that this book was recommended for the programming section of it alone. And as I found it difficult to put off saying what I wanted to say about this book after reading this first part of the book (which included this section on programming) I decided to write this review of this part of the book.

I should begin by noting that as you may have assumed, I have knowledge of the C programming language. I also had prior knowledge of some of the concepts mentioned in this section of the book, and reading about these concepts refreshed my memory about them. This book, however, assumes no prior knowledge of programming in any language at all, as it describes the concept of programming at first. Then the fundamentals of programming with C are explained. These concepts are covered in much detail, and the explanations of them are quite lucid. I believe that individuals new to the concept of programming would find that the explanations of these fundamentals are given about as well as they can be given.

Many of those who will read this book may already have knowledge of C, and those individuals can skip reading several of the first pages of the book. These individuals will want to skip ahead to where what actually happens when code is compiled is described, as that is where the more advanced concepts that are the basis for later sections of the book are described. When readers see the disassembly of the source code and other information that can be viewed via the GNU debugger, they will truly begin to understand what happens when code is compiled. Many books on C do not cover material such as this. One may not need to know what is done with C code after it is compiled in order to write C code correctly. However, the importance of not viewing programs written in C as a series of statements written in C is noted in this book. Many hackers take advantage of the fact that many programmers see C code as the instructions executed by the computer, when it is the machine language that is ultimately derived from that C code that actually is executed. And this section on programming gives readers an idea of what is actually happening when a program is running. That is what makes this section of the book the introduction to C programming that I wish I had when I first started learning C.

After the obligatory “Hello World” program is given and the assembly code of it is described in detail, concepts about C programming that are beyond the basics are mentioned. And these concepts are not described without giving much information about what goes on “behind the scenes” when code examples illustrating these concepts are described. The reader will see what kind of assembly code is used when a function is called, the importance of the EBP, ESP, and EIP registers, and other details I would have liked to have seen before I started reading this book. I took a course in university titled “Foundations of Sequential Programs” in which it was said by the best professor that I ever had that there would be no mysteries as to what happens when code is compiled after taking that course. In that course, concepts like those taught in the book were taught, although not in C and x86 assembly language. To be able to learn about concepts such as frames on the stack, sections of memory, and what data is stored in certain registers in the context of C and actual x86 assembly language was something that I wanted to do for a long time.

In addition, I liked the way that the book subtly pointed out common errors made by C programmers. As an example, the importance of type casting to avoid a certain “gotcha” in C programming can be seen in a code example. More importantly, the way the book is written rewards the reader for paying attention to detail. There are a number of sentences that include the phrase “as you may have noticed” or something similar after code examples are given. It is noted in the first chapter of the book that hackers tend to fully understand rules and the details about these rules. When one reads through the book, one should pay attention to details such as exactly what is contained in assembly language statements as well as why memory addresses are what they are. One should always be an active reader when trying to learn new material. However, when reading this book on hacking, it is highly important to pay more attention to detail. And the importance of hands-on experience of course, cannot be overemphasized. Therefore, it would not have made much sense for there to not be a CD included with the book with a full Linux environment in which one could experiment and reinforce knowledge of concepts explained in the book.

There were other aspects of the book that I liked. In the example program at the end of the chapter that uses the concepts of C programming that were covered in the chapter on programming is a set of games. In the last blog entry here, I mentioned the “Find the Ace” game and how it illustrates the sometimes counterintuitive concept of conditional probability. Despite the fact that it says in the book incorrectly that the probability of winning when one changes which card to select is 50% (as mentioned in the book errata here) I thought this was interesting. Another game in that program seems to try to illustrate another topic of interest to hackers, which is the birthday paradox, which is important to know about when considering a security issue known as the birthday attack.

Knowledge of hacking begins with much knowledge of fundamental concepts. And this chapter on programming gives lucid and detailed information about those concepts. The first part of the book also teaches why these concepts matter. If more C programmers read this part of the book, there would be fewer security holes in software. This book does well in teaching what hackers need to know and why they need to know the concepts taught in it. This book truly underscores the fact that hacking is what tends to happen when depth and breadth of knowledge meet creativity. And I also consider the programming section alone worth the price I had to pay for the book. I look forward to reading later sections of this book. And I may review these sections at a later time, even though I suggest buying the book for only the section of it that I reviewed.

How I Came to Understand the Solution to the Monty Hall Problem

The Monty Hall problem is considered an example of a problem whose solution is counterintuitive. There are many who may be familiar with this problem, although relatively few may truly understand the solution to it. The problem’s solution is explained on a number of different pages on the web, such as the Wikipedia page for it. A description of the problem and a description of its solution were given in the film 21 and on an episode of the television series Numb3rs. However, even after hearing explanations of the solution to the problem in that film and on that television show, I never truly fully understood how one could see how the solution to the problem made sense. That is, until quite recently, when I was able to view it so that it made sense to me.

For those of you not familiar with the problem, here is a short description of it: On the game show titled Let’s Make a Deal, a contestant would be given a choice to open one of three doors. Behind one of these doors was a car, and behind the other two doors were goats. The contestant would choose a door to open. After the contestant chose one of the three doors to open, the host, Monty Hall, would actually open a door not selected by the contestant, and it would be one that had a goat behind it. He could do this, as he knew what was placed at random behind each door. Opening a door that has a goat behind it leaves two doors closed, one of which has a car behind it, and the other has a goat behind it. He would then give the contestant the option to open the closed door that the contestant did not initially choose. The contestant would then win whatever was behind whichever door was selected at this point.

There are many who think that switching which door to open does not improve the contestant’s chances of winning the car. As there would be a car behind one door and a goat behind the other door, many believe that the contestant has a 50% chance of winning the car regardless of which of these doors is selected. The question of whether or not choosing to open the previously unselected door would improve the contestant’s chances of winning the car was asked by the professor of an artificial intelligence course that I took while at university. Some do not understand why the probability of winning the car increases from 33.3% to 66.7% when the contestant switches which door to open. Those individuals will be pleased to know that approximately half a class of fourth year computer science students thought that switching doors would not affect the probability of winning the car, and that the professor said that he finds that about half the class usually gets the answer to this question wrong.

The reason switching which door to open leads to an increase in the probability of winning a car is stated formally in a number of places, and it is often given in terms of conditional probability in these places. However, many people would prefer a less formal, more understandable, yet still accurate explanation of why it pays to open the door that was not initially selected. There are a number of different ways in which one can understand why switching doors doubles the probability of winning a car. One of the better-known explanations involves imagining a similar situation. In this situation, there are many more than three doors from which to choose, although only one door has a car behind it and the rest have goats behind them. After choosing a door, all but one of the unselected doors are opened, and all of these doors are revealed to have had goats behind them. When one visualizes all but one of these other doors being opened, it seems to almost be a certainty that the one door left closed and not selected would have the car behind it. Since the host only opens doors that have goats behind them, the host is giving information about what is behind every door that was not selected. When one imagines several of these doors being opened, and only one among them being left closed, one may understand how the door left closed was not likely chosen at random by the host. I thought this explanation was a good one, although I thought that an explanation that applies to the actual situation in which there were three doors from which to choose would be preferable.

I have seen the solution to the problem given in terms of Bayesian analysis. However, it may have been because I majored in computer science, not statistics, that I came to understand the problem when I viewed the source code of an implementation of a similar problem. It was when I was viewing the source code of a program that included a game titled “Find the Ace” that I found that I could explain why switching doors doubles the probability of winning a car. This program, whose source code is in the book titled “Hacking: The Art of Exploitation” and is located in the file titled “game_of_chance.c” in an archive that can be downloaded from here, allows one to view the problem as if it were an algorithm. In the program, one is dealt three cards which are “face down” and only one of these cards is an ace. After selecting a card to “turn over” one can choose to switch which card to select after an unselected card other than an ace is revealed. It was after viewing this source code that I realized that I needed to view the Monty Hall problem from the perspective of the host who reveals what is behind the doors. And I could explain why a contestant should always switch doors by describing what the host must do after the contestant initially selects a door.

This explanation is as follows: When one first chooses a door to open, then there is, of course, a 33.3% chance that the car is behind that door. Then the host always opens a door that has a goat behind it. If the contestant chooses the door that has the car behind it at first, then the host can choose between two doors to open. And in that case, no information about which door has the car behind it is given, as the host is choosing a door at random. However, there is a 66.7% chance that a door with a goat behind it was selected at first. And in that case, the host has no choice as to which door to open, as only one of the two remaining doors has a goat behind it. It is in this case that the host is not opening a door at random, and giving information about where the car is, by the process of elimination. Therefore, 66.7% of the time, when a goat is selected at first, the host is giving information about what is behind the closed door that was not selected by the contestant. This is made clear when one views the source code for an algorithm that implements this kind of game. In fact, one might see that in the source code of the “Find the Ace” game, the first of the three cards that is not an ace is always revealed. Therefore, whenever the first of the three cards not selected by the user is left unrevealed, one will always win by switching which card to select.

Some explanations of why switching which door to open are more understandable to some people than others. Some might prefer informal explanations such as the one given in this entry. Some, like myself, prefer to see the source code behind the problem. Some might prefer to see how the probability of winning a car is derived by seeing how this probability is calculated. To those people, I suggest viewing this section of the article on Bayes’ theorem. I find that it gives a concise explanation of how switching from one particular door to another, without loss of generality, increases the probability of winning by explicitly giving the probability of the host opening a particular door. And there are those who might still need to see for themselves that this is true, and can visit this site to play the game several times to see if they will win the car more often after switching which door to open. One can also view the source code of this web page on which this game can be played to see how the game is implemented. However, when reading the source code, it helps to be able to understand the languages of English, German, and JavaScript. Understanding two of these three languages may be sufficient, though.

I have found that some do not find that they can understand why switching doors increases the probability of winning a car even after hearing explanations of this solution. And after some discover why switching doors increases the probability of winning a car, they may be disappointed that they did not originally understand why one should always switch which door to open. I understand why some would be disappointed that they do not initially understand this. This is because I was one of those students in the class who raised their hands after the professor of that AI class asked who thought it would make no difference to switch which door to open.

For Internet Explorer Users Who Want Gmail the Old-Fashioned Way

I was aware of the existence of add-ons for Internet Explorer that give it the ability to run user scripts. I was also aware of the possibility that there are Internet Explorer users who would like to be able to use JavaScript scripts that modify web pages, without having to use Mozilla Firefox with Greasemonkey in order to do so. However, I had not made efforts to ensure that any of the scripts that I had written could have been used with browsers other than Firefox. The reasons I had never tried to make these scripts work with other browsers are related to the reasons I began writing these scripts. I write these scripts for myself and for all those who would want to use them. I personally almost always use Firefox as my web browser, and I have not received any requests to make any of my scripts work with other browsers. Until now.

I recently received a request from an Internet Explorer user to modify my Greasemonkey user script that redirects users to the older version of Gmail after logging into Gmail so that it could be used with Internet Explorer. And after discovering that I could simply remove the code for toggling whether or not the secure version of Gmail is to be used to make it compatible to Internet Explorer’s add-ons for running user scripts, I made these changes. This option for using HTTPS while using Gmail may have been obsolete for the last few months, as it was a few months ago that Gmail began giving this option for using HTTPS while in Gmail. I tested this modified version of the script with an add-on for Internet Explorer known as Trixie and found that the script worked with that add-on. I also copied and pasted the script code into a script that comes with an add-on called IE7Pro and found that it worked with IE7Pro, although not as efficiently.

This version of the script can be retrieved from here. This script might also work with Safari when its add-on for running user scripts is installed. However, I have been unable to use this add-on, titled GreaseKit, to determine whether or not Safari users can use this script. I have also been unable to test out this script on Google Chrome when it is used with Greasemetal, although users of Google Chrome might possibly be able to use it. This version of the script, however, does not work with Opera. However, I may take the time to make this script work with Opera. Once again, whether or not I will ensure that this script will work with other browsers depends on whether or not there will be demand for this support from users of these other browsers.

Bookmark Current Tab Set: A Firefox Extension for Quickly Bookmarking All Tabs

Several months ago, I mentioned that when I browse the web, I often find that I want the ability to reopen the set of browser tabs that I have open at a later time. I mentioned then that I often chose the option to bookmark all tabs, and give the bookmark folder in which these bookmarks are to be stored a name that is based on the date that this new folder for storing these bookmarks was created. Although I noted then that doing this leads to clutter in my bookmarks, it was something that I continued to do. In fact, I did this so often, I wanted to be able to automate this process. This is a process that can be automated via a Firefox extension, so I began work on an extension that could perform this task.

It was only after I began writing this extension that I discovered that an extension that performs this task already existed. This extension, titled “Bookmark All”, can also be used to quickly bookmark all open tabs and store them in a bookmark folder whose name contains the date the folder was created. However, this extension is not compatible with Firefox 3. There are some extensions that can be easily upgraded so that they will work with Firefox 3. However, this extension was not one of them. So after seeing that at least a few individuals wanted this extension to be compatible with Firefox 3, I made this extension work with Firefox 3.

This extension is about as basic as Firefox extensions get. It only adds options to menus for creating these bookmark folders, and it has no configuration options. In future versions of the extension, there may be options for adjusting the format of the names of the folders created by the extension. There may also be an option for informing the user when the bookmarking of tabs is complete. Options for sorting tabs in a particular order in the folder could also be included. This extension does what I would like it to do at this time. However, I would like it to be useful to as many people as possible by adding features its users would want.

At this time, this extension is considered experimental at addons.mozilla.org. However, you may install this extension if you have an account on addons.mozilla.org. You may click here to visit the page on AMO where this extension can be found. This is the first Firefox extension that I have written, and it may appear to be one that was written by someone who was only beginning to learn about writing Firefox extensions. Feedback on what I have written is welcome as always. I would like to know how I can make improvements to this extension, as newer versions of it will be released in the future.