Posts

Showing posts with the label Varun Mehta

Multitenancy: What is it ?

Image
I'm not trying to redefine the concept or write a new white paper on multi-tenancy. Most of the article points you to few of the best articles and white papers on the internet that I've come across. Different companies have different approaches and ideas on how to handle this. I try to handle this from a data separation perspective first and then take it to the application level. If you are new to the concept of SaaS itself, then you have some reading to do, before you read further. Can I suggest Wikipedia to being with first [ http://en.wikipedia.org/wiki/SaaS ] Working on a SaaS model, multi-tenancy plays a major role to allow (their) multiple clients to live on the same system. There are various white papers and articles out there on the internet discussing on strategies on how to implement them. I've listed a few for your bed time reading; http://en.wikipedia.org/wiki/Multitenancy http://msdn.microsoft.com/en-us/library/aa479086.aspx http://wiki.developerforce.co...

New Photography Blog!

I moved out of my old photography blog and started a new one ! My Sony DSC-S60 was getting old, and I have laid my hands on a fresh new DSLR, Canon 50D. Picked up the default 28-135mm/3.5-5.6f lens with a 50mm/1.8f. Starting this dedicated blog to keep this more personal and technical, and that exclusively about photography. Hope to checkout some awesome posts out there! The photographs will be hosted on flickr and then embedded on the pages. I don't trust blogger to do justice with the pics. https://www.flickr.com/photos/varunmehta/  Happy Clicking! 

Own your network, Own your client

Own your network, Own your client. What do we mean by that ? When building a SaaS based model, companies built strong systems for their clients to use. All the latest web 2.0, 3.0 features and implement the security best practices, but many of them fail to make basic statistics available to them. I've tried to list a few of the short-comings companies should look at resolving; Usage Statistics: If you bill the client per transaction and the amount of load they use on the system, its always nice to have this information available at the customer information screen of the application. Billing Information: Invoices and bills should be readily available in the system. Build a billing engine right into the application, saves the finance team a lot of effort processing invoices on a monthly basis and then following up with the clients. Auto-payments: You don't want to be left in the limbo, with the client not paying on time and keeping you stranded without money for months....

iAd for iPhone, what does that mean for Google

Apple just presented a preview of iPhone 4.0. Off all the bells and whistles with multitasking and other features released in this version, the most interesting one is iAds integrated into the iPhone api. Salient Features; 60% of the revenue is shared with the developers. You as a developer can directly embed ads in your app from the api The ads will be sold and hosted by Apple. They have a limitation on how many ads will be served per-day, per-phone, per-app So what does that mean to other ad-serving companies like Google, Yahoo, Microsoft etc...

Hot Deployment issues

The build always makes it to the staging and production server after a series of rigorous tests. This ensures the build is complaint with the requirement and that none of the old features have been compromised in any way. Once in a while, a rare, but an annoying " Scope Creep " scenario does happen. Just minutes before the demo some one would realize a missing feature or patch which missed the commit deadline and did not make it to the server. So as a quick temp fix we just deploy that file to ensure the code does not have to go through the grueling tests again. Some of the smart developers don't commit these hot patches to SVN or merge it with the patch branch, losing the feature again. 

Project Management and Issue tracking tools: Redmine vs Trac

I've been beating around the web searching for a good solution, that can scale from a microISV team to a mid sized team. We've been using svnrepository.com for sometime. They provide svn and git as a SCM,  also trac with multiple plugins for project management. Off late they've upgraded to a new system which offers redmine , along with trac and also has support for mercurial. After searching the web for a few minutes, I hit upon this article at stackoverflow; Trac vs. Redmine vs. JIRA vs. FogBugz for one-man shop? Check through the article, you might find it useful. If you are looking for online svn hosting, this website might be useful to you. http://www.svnhostingcomparison.com . It provides you with multiple options available in the market. You can filter depending on the cost, disk space and other features.

Adhoc or Agile

I wanted to hot link to an old post by Simon Brown , but I believe he's dropped his old blog and transformed into a more consultant type blog. I'm copy pasting the old post here, with link to the original post. In the vast majority of cases where these phrases are used, agile has mistakenly been used to mean that the development process in use is ad hoc or even non-existent. It's not hard to get to the bottom of what people mean by agile, particularly in interviews, with a few simple questions. Usually, the flow of conversation goes something like this.

Customizing JIRA workflow

Image
Like other cool companies we also use JIRA for issue tracking; and we are agile using it. JIRA has posted a very useful article on how  to go agile using JIRA [ http://confluence.atlassian.com/display/CONFEVAL/Using+JIRA+for+Agile+Development ]. Since JIRA gives you an option to customize the workflow. We've added some more details extending the normal 4 step JIRA workflow to a 6-7 step workflow.

Version Control Policy: Best Practices

Image
Your code base is always under version control (if it's not, it's high time you did!), and developers are always scared about taking updates or committing files, under some supernatural fear, that an update will wipe out their local changes. This causes a lot of trouble in the team, when some developers have not updated their code base since a long time. I've compiled below a checklist of best practices. Before you check in your code to subversion, here are a few points to follow. Ensure that there are 0 (zero) serious CheckStyle, PMD, FindBugs error (warnings should be reviewed). If you need an exception Checked in Code must build with all dependencies (not just your module). Checked in Code must not break unit tests. Checkins without comments should be noted as a build break caused by the developer.  Before committing your changes to repository, it is advisable to synchronize the files, run an update and then commit your changes.

Software Versioning

Software versioning for the end consumer is a very vital part of the software release cycle. It is one of the primary identifiers for consumers to report issues against in a software. It also helps the development team to identify, if the features/bug fix made it through the release. We follow a similar pattern, which can be useful for you too. The version number is strongly tied to the SVN (also valid for other version control systems) branching and tagging convention. Hudson (CI server) also plays an important role in stamping the build number.

Online Recruitment Firm

One of my friend’s over the past few months has been speculating starting her own recruitment firm, but was not sure how to go about investing & setting it up. So we got together and brainstormed a few ideas. We created a list of tools that are of utmost importance for her work. It turns out Microsoft Office, MS Word more precisely is one of the most sought after tools by recruiters, followed by Microsoft Outlook for email. 95-98% of the people seeking jobs send their resumes in MS Word format. Time immemorial email is one of the fastest and most efficient way of bulk communication. Using MS Office is expensive, and word documents are a prime target for carrying viruses. We needed a document reader, an email client and a strong anti-virus software.

Staging environment using VMware

(This document is aimed more towards Java & VMWare, but the same can be replicated for any other language & environment) Abstract You have a team of developers working on different modules for a project-product which are inter-dependant. Each developer diligently writes unit & integration tests supporting their code. You want to set-up an agile test environment to run the unit tests & staging server for integration test, but purchasing hardware for multiple machines is a constraint. The following article provides a guide on how virtualization tools like VMware can be used to set-up staging or QA environment (Agile).

DWR & Hibernate Lazy Loading

Time immemorial, we are all aware about the famous lazy load exceptions in Hibernate. Using a detached object does not exactly hide us from the issue. We are using DWR in our application and found that when marshalling (or unmarshalling if you insist) a detached object to JSON, DWR was erratically trying to call a null (lazyly loaded) object, causing LazyLoadExceptions. We did not want to use OpenSessionInViewFilter as it is evil (some day I'll post all the consolidated rantings as one). You can google and find a lot of info around it. As a quick fix we did what one would first think of, "It's a demo, just eager load it!". Well the demo was over and now was the time to investigate a better solution, and we did find it. It was no rocket science, the solution was available in front of us all along, we just did not look hard enough. When using DWR, there are BeanConverters available which are responsible for this marshalling process. There was one for Hiberante, ...

By Contract or By Convention

Should we be using interfaces for everything and making everyone explicitly implement them or should we trust that everyone follows the same convention.

2 DTO or not 2 DTO

Since the new project began I've been think about this over and over again reading as many posts and taking ideas from different posts and blogs. The more I read, the less I knew. Below is a collection of few links I've come across which have some conclusive and non-conclusive decisions/arguments, some of these post lean towards POJO's and some towards DTO(Data Transfer Object). Frankly I was not been able to convince myself on what to use. (Leaning more towards POJO's as detached objects).

iPhone & CFA

I've enrolled myself for the Level I CFA exam in December '08. Studying on and off, depending on the schedule and time availability. Off late I stumbled upon SenFinance an interesting site full of Accounting and Quantitative tutorials for CFA Level I. I downloaded them all and wanted to view them on my way to work (a 20 minute train travel is good to study). So I got my hands on SUPER® which is an amazing software to convert any one video or auto file to another format. Now I finally have the tutorials in mp4 format and can study on my way to work!

Setting up a PHP development environment on your local system

This is an old post I had written on google docs, before VMware Server was free for the general user. Thought could be still more relevant to the general developer for testing in Linux envoirment. VMPlayer I beleive is lighter than VMware Server. There are 2 stages of setting up the development & testing environment for yourself. The preferred work environment is Linux. If you already on Linux then you can safely skip Stage I, you can directly proceed to Stage II, also if you have Linux already installed, just cross check if you have the LAMP (Linux + Apache + MySQL + PHP) server installed.

Duplicate file finder

Disk space is cheap, starting from a 1.2GB hard drive from my first computer to a "spare" 500GB external hard drive, cheap data storage has come a long way. I click a lot of photographs ever since I got my first digital camera, and I store a lot of these photos too (locally), now since 2006 I have over 201,608 photos and some videos. My camera photo number counter has reset twice!!