Wednesday, December 23, 2015

Get the old Pocket experience on Firefox (38.0.5 and above)

I have been using Pocket ever since it was called Read It Later and I really like it because it allows me to
  1. save web pages that interest me at the click of a button (in the address bar)
  2. assign meaningful custom tags to the saved pages
  3. search the saved pages on the basis of the title, url or tags (or lets me browse the entire list if need be)
  4. sync the saved list across devices

These capabilities are also provided by Firefox bookmarks (with Firefox sync providing the 4th capability), but the usage experience provided by Firefox bookmarks is not as engaging for the following reasons
  1. Pocket provides a much more seamless experience when it comes to all the three capabilities mentioned above. Pocket allows us to perform actions 1 to 3 from the same browser window which we are trying to save. Firefox bookmarks requires us to open the bookmarks window.
  2. Pocket provides a good visual indicator if a page is already in my list ,but this is not super critical for me.
This was going well for me till Firefox decided to integrate Pocket from version 38.0.5 onward. While integration should be beneficial to those who already use Pocket, the implementation was such that it reduced the 'seamless experience' that I seem to like about Pocket. We lost the following capabilities with the integrated experience as compared to what we had earlier
  1. No visual cue if a page is already in the pocket list
  2. No integrated search or browse capability - the capability does exists, but one needs to depend on the pocket web interface for the same - which is less than ideal ui experience for me.
If you are in the same boat as me, and are missing the old interface of Pocket, but at the same time want to have the latest version of Firefox (to avoid any security concerns), then follow the below process to get it working in the latest version of Firefox.

Get Pocket 3.0.6 version

Before you go ahead and download Pocket 3.0.6 extension from the below resources I would recommend you to use one from a computer where you already have it working. That way it is more secure as it was obtained from a trusted source.

from existing Firefox install

On a machine where Pocket is installed and still provides the required seamless experience, follow these steps :
  1. Start Firefox and enter about:support in the address bar.
  2. In the page that opens up, find the 'Show Folder' button next to 'Profile Folder' label. Click this button.
  3. In the folder that opens up, find a folder called 'extensions'
  4.  Within extensions, you will find a folder ''. This is the Pocket extension. Copy this folder into a usb drive.
from online locations

Since Pocket is no longer available for download/install in the Firefox addons page, you can get the extension from the below locations. Please use these links at your own risk
  2. Softpedia
  3. Reddit
Once you have the xpi file downloaded rename it to zip and extract it into a folder. Rename the folder to Copy this folder into a usb drive.

Install Pocket extension on a new Firefox.

On the machine where you have Firefox with the embedded Pocket functionality, but need the interface of the earlier version, follow the steps below
  1. Start Firefox and enter about:support in the address bar.
  2. In the page that opens up, find the 'Show Folder' button next to 'Profile Folder' label. Click this button.
  3. Exit Firefox, ensure that the process is not running any more in task manager.
  4. In the folder that opens up, find a folder called 'extensions'
  5. Copy the folder you obtained from the above step in this folder.
  6. Start Firefox, it will display a warning that an external program is getting installed, ensure that it is Pocket that is getting installed, and if so select allow.
  7. Once the installation completes, Firefox will restart again.
Post the restart you will notice the familiar Pocket interface is back. Enjoy !!

Note -
  1. I have tested the above approach with an existing version of Pocket ( that I obtained from my other laptop, but I believe it should also work with the xpi file method I mention above.
  2. The file link for is version and i compared the files in this link with the ones i had on my machine and they seem identical, so I have some confidence on that file.

Saturday, August 2, 2014

Article 2 - Setting up a development workstation - Part 1 - Power of Vagrant

This is the second article in the Enterprise Application development series, definitely coming after a long time, but I hope to continue this series more regularly now.

In this multipart series, I will cover
  • Using Vagrant to simplify the process of creating development environments, such as to overcome many challenges faced in enterprise development teams.
  • Configuring your Guest tools to work with Vagrant virtual development environment.
  • Setting up your IDE such that it looks cool and helps you spend extended hours coding (optional)
Some days back I blogged on a related topic 'Setting up Ubuntu as a Penetration Testing and Development Platform', however the aim out there was a setup a development and penetration testing environment on the same box. That post is still valid and can be referred to, but I have found a better approach to setup a  development box as compared to the method explained in that blog post. You can still follow the penetration testing setup as explained with that post once you are done configuring your system for development as explained below.

So you might wonder, why did I completely reconfigure my development system, within such a short time, and spend some more time documenting the new method? The answer is the immense 'Value' and 'Productivity Gain' this new method has to offer, and all this is possible by a single tool call Vagrant.

If you have been developing applications in a team/enterprise environment, you should be familiar with one or more of the below challenges.
  • Manual Setup - for most developers setting up their development system is a manual activity, pretty much as explained in the earlier blog post 'Setting up Ubuntu as a Penetration Testing and Development Platform', whereby components that form the development stack (like sdk, appserver, database etc.) are installed manually on the machine. This manual process takes a long time to complete - especially for very complicated setups, and anything manual and complicated is prone to errors (as you might miss that minor but critical configuration step). This makes ramping up a new developer or a new team extremely time consuming.
  • Multiple developers and Multiple Projects - Considering you are in the manual setup mode as discussed above, you have managed to get the system setup for one project, but there is a need to work on a different project for a short time. Keeping the environments of these two projects is a big challenge for a single developer. Now consider this situation with all the developers in your team, and very quickly the team will end up in a situation where none of your development environments are in sync in terms of a configuration.
  • Works on my machine - The above situation gives rise to bugs where things work in the environment of some team member, but does not on others. These types of bugs are the most tricky to resolve, because we do not know which is the correct configuration to use.
  • Development vs Production environments - Since developers have tweaked their local environments considerably to make things work, their configuration may not be in sync with production, which can result in unexpected errors in production.
  • No cross platform development ability - If your production server is Windows/ Linux but you use a Mac for your coding (as it has a more soothing development environment) you can enter into tricky situations where you may need to run windows virtually on your Mac, or are forced to use a OS and tools that you are not comfortable using.
  • Productivity - Notice that in most of the above situations the developers are busy grappling with bugs related to system configurations, or tweaking system configs, getting comfortable with new development environments etc…basically doing everything other than coding, or fixing bugs purely due to coding issues.
The above are challenges faced by a single developer too, but consider the impact on productivity in a large project, with multiple developers, usually not geo co-located. The impact on productivity are profound in this case and can mean the success or failure of a project. So let us now talk about the solution.

So what is Vagrant?

Vagrant is a tool that runs on your development box/workstation, typically referred to as GUEST, and builds up on a virtualization provider (like VMWare, VirtualBox, etc.) and uses a provisioning tool (like Chef, Puppet or simple shell scripts) to create a virtual development environment, typically referred to as HOST, that is configured per your needs without manual intervention.

You really need to experience it, to understand its power and it is practically impossible for me to explain the same in words. Try it out, before you read further, and I guarantee you will be amazed to see how easy it is to setup a development environment for web applications using just a few commands.
  • [ToDo Activity] Visit my GitHub repository and try out steps 1 to 4 as explained in the vagrant-webdev project.

How about the above challenges ?

  • Manual Setup - not needed any more, since the provisioning tool takes care of it in an automated fashion. You may argue that creating the provisioning script takes time. Yes, agree, but that is a one-time activity. Moreover provisioning files are mostly written by operations team (the people that manage your servers) , who are well versed with provisioning tools like Chef and Puppet. Developers are only required to clone the repository, fire up the development environment and start coding. Any additional configuration changes can be easily rolled out to the entire development team, by asking them to pull the latest configuration code from the repository and recreate the vagrant machine.
  • Multiple Developers and Multiple Projects - Since all developers use the same repository to setup their development environment, there will never a a discrepancy in terms of the environment configurations. The configuration changes are tightly controlled by the operations team so less possibility of it getting out of sync. If one is working on multiple projects they can create one vagrant dev box per project and that way each project can maintain its environment sanity.
  • Works on my machine - Since the environments are  similar, and assuming code base is similar the code is guaranteed to work in the same manner.
  • Dev vs Production - the provisioning scripts used to create development environments are exactly the ones used to create the production environment. This means less probability of encountering issues in Production that were not encountered on Development.
  • Cross platform development -  Vagrant is available for Windows, Linux as well as Mac GUEST. The options available for HOST are abundant that you will not need to create a box of your own. In any case, if the readily available boxes do not meet your needs, there is an option for you to create a customized one too. See References section.
  • Productivity - No brainer here, finally the developers can focus on coding and let the system configuration be with the Operations team.
  • And more - these are just few of the benefits, you will discover endless more when you start using it.

Personal Opinion

While working on vagrant-webdev I was faced with the dilemma of selecting a provisioning tool/language. I had the option of Shell Scripts (simple, quick, flexible, prior knowledge), Chef or Puppet (both unknown to me). I ended up selecting Puppet because
  • There was something new to learn here
  • Better support and backing from puppet labs.
  • Lots of modules readily available from puppet forge.
  • Syntax more catered towards developers.
I recommend using ready made boxes available from Puppetlabs, and then using puppet to add the required applications part of your development stack as done in vagrant-webdev.  


Wednesday, April 30, 2014

Mind mapping SCRUM process

I recently got a request for conducting a SCRUM training from one of the teams in our account. To try something new this time, as compared to the monotonous presentation using Powerpoint, I decided to use a mind map for outlining the points to be covered in the presentation.

One drawback I have seen with presentations is that they sit either in your mailbox or some folder in your machine, and pretty much never get updated. Also when one needs to refer it it few months/years later, it is very difficult to locate them unless you are pretty organized.

A mind map hosted online does not have these issues. It can be shared, re-used, updated using collaborative features and can provide a platform for discussion based on the social features.

I started with evaluating a few freely available Mind Mapping solutions available on the internet and seemed to like the below two
Which ones you follow depends on your personal taste. I preferred the more cleaner Mind42, but will give WiseMapping a try too, just to compare the features in detail.

Update - 2 July 2014 - After evaluating both Mind42 and WiseMapping for the same mind map I found WiseMapping more catering towards my aesthetic sense and logical visualization.

Well in any case coming to the SCRUM mind map that was created, the same is available at SCRUM Mind Map - Hemen Kapadia @ WiseMapping

Attaching the same in iframe too

Enjoy !! And do not forget to add you comments.