Announcement

Tuesday, November 09, 2010

Persistent Systems and Mr. Anand Deshpande.

I think in last 7-8 years Persistent Systems has grown by leaps and bounds. I always wondered what is the key to Persistent's phenomenal growth. Few months back I met Mr. Anand Deshpande (CEO of Persistent) during a CSI (Computer Society of India) event. Well, I met him for 10 min but I keenly listened when he was talking to others. I also had a chance to have some informal discussion with few other Persistent employees. I am impressed with clear and practical thoughts and ideas of Anand Deshpande. Consider following ideas.

1. Persistent employees are deeply involved in organizations like Computer Society of India (CSI) and Pune Open Coffe club, ACM Pune chapter
Anand Deshpande encouraged Persistent employees to get involved in organization like CSI, Pune Open Coffee Club for long time. Now Persistent employees are key to these organizations. Persistent also allows these organizations to use its infrastructure like conference rooms, training rooms etc. This policy has given some great advantages to Persistent. The developers who get involved in these organizations usually care for 'their craft'. They are passionate about software and about developing their own skills. Now consider a developer who is involved in CSI and is now interested in changing his job. First company he is going to consider is Persistent, because he already knows the people from CSI work. And Persistent is getting some good developers with such personal contacts.

If this is such a good policy, why other companies don't do it ??
Problem is a company will get these benefits only if it consistently does this for 5/6 years at least. So companies who focus visible benefits in short term will never do this. Most of the companies (i.e. their management) don't have this long term vision.

2. College projects
Typically companies who sponsor college projects do it this way.
  • Send a mail to all employees asking for ideas for projects.
  • Company insists the project has to be in the technology domain that company works in.
  • Usually at most 3/4 people reply. Some time nobody replies
  • So company has a list of 3 or 4 projects 
  • Since companies don't regularly work with colleges or give the list of projects to colleges, this works on personal contacts of students (i.e. students parents).
Obviously there are no great benefits to students or companies.

Usually companies publish 'list of projects'. Persistent publishes a list of 'mentors' and mentor's expertise areas And this is a Key difference. Now students work on their project ideas. And based on technology and problem domain and the quality of project idea Persistent chooses the projects and assigns a mentor. This way mentor's work in areas of their own expertise. As far as I know, there is no restriction that the project has to be the domain that Persistent works in. 

Now this process works great for Students and for Persistent. Students get to work on their own ideas rather than somebody else's idea. Students have to meet their mentors every week. And Persistent gets to know the students and can pick up good ones. Since the project students already know Persistent and its developers they are more likely to join Persistent than other company.

Persistent is the only company I know who have such practical policy on college projects.

3. Courses for college professors.
Last few years Persistent is running one week course for professors of computer science departments in colleges in the month of May. Again there is unique approach. This course is not about some latest buzz word techniques like 'cloud computing, Sliverlight etc'. This course is about some topic that these professors have to teach in next semester in their college (for example, 'algorithms'). So whatever these professor's earn in this course they will use immediately to teach their students in their colleges. 

Again Professors  benefit, Students benefit and Persistent benefits. We crib about quality of students coming out of colleges and quality of professors in such colleges. So Anand Deshpande concentrates on how to improving the skills of professors and indirectly the skills of students coming out these colleges. Now next time Persistent goes to these colleges for campus interviews, it will get to choose from the best. Also it already knows about quality of professors in those colleges. So it can decide which colleges to go for campus interviews. Again a win-win for everyone involved.

Just three policies told me a lot about Why Persistent is so successful. The secret ingredient of Persistent's success in 'vision and ideas of its founder Anand Deshpande'. My admiration for the company and especially it's founder increased many fold based on just one encounter. 

Congratulations Anand Deshpande for mentoring and developing a great organization. 
And Thanks. Just once chance encounter gave me lot of ideas. I hope I will get a chance to work with you.

Wednesday, October 13, 2010

Dear C# Programmers, please use 'using' and 'IDisposable'

In C++ world, RAII (Resource Acquisition Is Initialization) is a widely accepted idiom. It used by std::auto_ptr<>, CComPtr<>, CWaitCurstor and all smart pointer implementations, streams, etc etc manage the lifetime of resources (e.g. memory, files, cursors, database connections etc). RAII ties the life time of a resource to a life time of a 'local object' (i.e. a object on stack). C++ guarantees that destructors of the objects on stack get call in face of exceptions, multiple returns from functions etc. However, the technique 'as it is' is not directly useful in C# since in C# all objects are created on heap.

Since it is a very useful technique, Microsoft added an interface IDisposable and a keyword 'using' to .Net. It gives all the advantages of RAII.

Recently I saw code similar to following
Stream astream=null;
try
{
    astream = new FileStream(...)
    ....
    // do some processing on stream  
}
catch(...)
{
  
}
finally()
{
    if( astream != null)
    {
       astream.Close()
    }
}
The developer was trying to ensure that stream is closed in case of any exception is thrown (or multiple returns). However, there is much simpler way to do achieve the same result. Rememer 'Stream' objects implement IDisposable interface.  So you can achieve this same effect simply by
using (astream = new FileStream(...))
{
    ....
    // do some processing on stream   
}
It is smaller, simpler and easier to understand. This code clearly indicates, what is the expected life of 'astream'.  With Garbage collector .Net (somewhat ) automates managements of one types of resource i.e. memory. However, there is no good way to manage other types of resources (like files) in face of exceptions where a 'guaranteed release' at certain point is required. Since GC doesn't really guarantee at what object will get garbage collected, tieing resource release to object lifetime doesn't work well. IDispose and 'using' keyword address this concern.
Even though this functionality is available in C#/.Net for a long time, many C# developers don't seem to use it. Probably because they are not really aware of the benefits. Hence my dear C# programmers, please learn about IDisposable/'using' keyword and use it regularly. It will make your life easier. In fact, I will recommend that as much possible make your own classes IDisposable

Sunday, October 10, 2010

The Design of Design : New book from Fred Brooks

Some time back I blogged about the 'Mythical Man month'. Recently I have started reading the new book from Fred Brooks.' The Design of Design'. Like Mythical Manmonth this book is also a collection of essays and it also a book where you read a chapter and then you need to think and reflect on the ideas/thoughts in the chapter and your own experiences before continuing to next one.

First thing that struck me about this book is Authors gives examples from diverse fields  like music, civil engineer and construction apart from Software. These examples illustrate the author's knowledge about these other fields. I am greatly impressed by the case study about design of auhor's house and kind of design notes that he kept through out the process. I wish I was this systematic.

The book is divided in 6 sections
  1. Models of Designing
    So models of design talks about the 'engineer's view of design, about Water fall model and why it doesn't work and what are possibly better design models.
    In my 15 years of experience, I have never seen 'water fall model' work in practice. However, all the software development processes defined in software companies implicitly assume 'water fall model'. End result is developers hate 'these processes' and organization cannot get expected benefits of process implementation. Someone (I think Albert Einstein) once said that 'Insanity is doing the same thing, over and over again, but expecting different results'. By this definition, many common software development 'processes' in software companies are 'insane'.
  2. Collaboration and Tele collaboration
    Now a days any significant sized project is about 'collaborating with other' for design, coding/construction, testing etc. In the world of 'outsourced software development', tele-collaboration is increasing critical. As expected, Fred provides some insights on what works and what doesn't.
  3. Design Perspectives
    Talks about various 'views' about the design, user models, aesthetics, constraints, examplars (or design patterns), where things go wrong.
  4. Dream system for design houses.Authors thoughts and ideas for a 'dream system' to design houses and why of those ideas
  5. Great Designers.
    Talks a common argument that software development should be like a 'factory'. Good Product development process will produce 'good designs'. I have heard this argument many times from Software Engineering Process Groups (SEPG) in the companies, CMM and ISO style processes etc.While, Fred argues that 'Great Designs come from Great Designers'. He also goes into the depth of why we need Product processes and how to make product processes that encourage and facilitate great design. I think this is a chapters that every manager should read.
  6. Case studies.
It is not possible to reviews the ideas in this book in one article. So I am hoping to write multiple articles as I assimilate ideas from this book.

Monday, October 04, 2010

Net banking & Security and Customer Service

Few days back, I was trying to make payment using Netbanking through HDFC bank. As part of internet payment process, some security questions were asked. I wrote the wrong answer. My account got locked. Now this is a good security features. However what happened next is classic example of 'how not to treat your customer'.
  1. In many cases, when account is locked because of wrong password entry, it is automatically unlocked after 24 hours. So I tried to make a payment after 24 hours. Again it failed. At this point a general expectation is HDFC will send me an email or SMS with intimation that my account locked and how to unlock it. I did not get any intimation. 
  2. So finally I sent an email HDFC customer support. I got a reply 2 days later. The reply was to contact HDFC phone banking to unlock it.
  3. So I called phone banking, the phone backing support executive took the call and gave me a 'support request number' and told me it will get unlocked in TWO days. Why it takes 2 days to unlock the account???. I thought its just a matter of minutes.
  4. So I said I want to talk with the supervisor. A lady came on phone and told me 'HDFC don't have any process to inform customer that their net backing secure payment access is locked'. I understand HDFC want to add more security. It is good for bank and its good me as customer. But then 'not having a process to inform customer' is a bad way to treat the customer. HDFC already has alerts for Netbanking and third party transfer transactions. So they already have all the necessary information to inform me about account getting locked.
  5. I have to make alternative arrangement to make the payments. I could make those arrangements a lot earlier if I get account locking intimation on time. 
It was frustrating experience. I also have few other interesting experiences/tidbits about HDFC.
  1. HDFC bank credit card department kept calling me even after I got a credit card from HDFC and they kept offering me a credit card for almost another 2 weeks.
  2. I have already registered my number to 'National Do Not Call registry' long time back. But HDFC doesn't seem to respect National Do not call registry. So I registered my number to HDFCs 'do not call' registry. There is an interesting line on this page "Please give us 45 days from the day we receive this request to action the same.".  I started getting calls about credit card almost within few days of opening account with HDFC. So that happened in less than a week but to act upon a 'Do not Call' registration takes 45 days.That's interesting.
  3. After I opened account with HDFC I wanted to register for bill payment. So I checked 'Payment Services' page. On this page there is 'Bill Pay', 'Visa Bill Pay', 'Register & Pay', 'Pay Now', 'Insta pay' etc etc. I am still trying to figure out which one makes sense for me. Give it a try. Its an interesting exercise.
  4. Every time I visit the bank there are new notices on the branch notice board usually of the form 'from so and so date Rs xxx charge for yyy service'. HDFC's profit after tax in FY 09 was Rs 2,282.54 cores. Interesting bank still wants to charge even photo attestation, signature attestation. Even cash transactions are charged (5 cash transactions at branch will be allowed free per month. Every additional transaction will be charged @ Rs 100 per transaction effective 1st July 2010)
HDFC is not the only one this kind of mistakes. I have seen some really bad Net banking user interfaces, weird policies etc. in other banks as well (Nationalized, private and cooperative banks). After Sangli bank was merged with ICICI bank, my cousin closed our family hardware shop's current accounts with them because of bad /irritating policies of ICICI.
I have also experienced some excellent customer service from HDFC and ICICI. I don't want to change the banks frequently. I want to be a happy customer of HDFC bank. If HDFC bank learns to take care of such small but really irritating to customer issues, I will be a happy customer of HDFC. If it doesn't I may remain a customer but not the happy/loyal one or I may not remain a customer at all.


Lets see what happens.

Thursday, September 23, 2010

How YouTube detects copies of copyrighted material ?

Coding Horror Blog of Jeff Atwood usually have very useful and well written articles.  In the recent article titled 'YouTube vs. Fair Use' he talks about his experience of uploading a 90 second video from a movie as reference to a blog article. The interesting part of the article is his observations about how You Tube is able to 'detect' that this 90 sec video is from some movie (a copyrighted material).


While reading this article, I discovered a bunch of interesting links and information about the detecting the copies of audio and video files.

A TED Talk by Margaret Gould Stewart on "How YouTube thinks about copyright" 
The interesting parts of this video describe how YouTube detects possible 'copies' of the copyrighted material.
"The scale and speed of this system is truly breathtaking -- we're not just talking about a few videos,we're talking about over 100 years of video every day between new uploads and the legacy scans we regularly do across all of the content on the site. And when we compare those 100 years of video, we're comparing it against millions of reference files in our database. It'd be like 36,000 people staring at 36,000 monitors each and every day without as much as a coffee break. "
While Google tools usual work on massive scale, this one is in a class of its own. As Jeff has observed in his article, the scope and scale is AMAZING.

I also discovered an interesting mobile phone application named "Shazamwhile reading the related linksShazam is an application which you can use to analyse/match music. When you install it on your phone, and hold the microphone to some music for about 20 to 30 seconds, it will tell you which song it is from.
  • This is an article which explores "How Shazam works?"
  • There is another article which describes an experimental implementation of Shazam in Java. "Creating Shazam in Java". The code is not available because of Patent issues.

Duplication detection (in text, Audio and video) is very interesting problems. Implications of automatic duplication detection are useful as well as frightening.

Monday, September 13, 2010

Rereading Mythical Manmonth - Flowcharts and UML

This is a second entry about Rereading Mythical Manmonth. You can read the first one here.

When I started programming, I never used to create 'detailed flow charts' while many people (usually who are not actively coding) urged it. I did create some small flowchart to get overall picture in my mind but never detailed flowcharts. Later same thing happened with UML diagrams, I always felt little guilty about it. Till I read, Fred Brooks observations about Flow charts.

These are the Fred Brooks observations about Flow Charts in section named 'Flow Chart Curse' (in essay 15, The Other Face).  
The flow chart is a most thoroughly oversold piece of program documentation. Many programs don't need flow charts at all; few programs need more than a one-page flow chart. 
....
The detailed blow-by-blow flow chart, however, is an obsolete nuisance, suitable only for initiating beginners into algorithmic thinking.
....
In fact, flow charting is more preached than practiced. I have never seen an experienced programmer who routinely made detailed flow charts before beginning to write programs. Where organization standards require flow charts, these are almost invariably done after the fact. Many shops proudly use machine programs to generate this "indispensable design tool" from the completed code. I think this universal experience is not an embarrassing and deplorable departure from good practice, to be acknowledged only with a nervous laugh. Instead it is the application of good judgment, and it teaches us something about the utility of flow charts.
Try replacing the 'Flow chart' in the above discussion with 'UML Diagrams' and the whole discussion now suddenly seems very recent discussion. In my experience 'UML Diagrams' are more preached that practiced and most of the time these diagrams are created 'automatically' from the code at the end of development cycle.

Obviously with UML also, I create a few class diagrams and sequence diagrams to clear top level picture. But I don't create very detailed UML diagrams of every single class and function. In my experience, when a team tries to create very granular UML diagrams :
  • it confuses every one in the team, 
  • it takes too much efforts 
  • and hence not really worth it.
However, many times Customers and internal SEPG groups ask for UML diagrams (sometimes because of mostly misguided notion that a UML documented design means 'good design', sometimes because of everybody is doing it, sometimes because of all the UML hype).

Still I could never clearly explain why UML is not a 'silver bullet' in documenting software design. That is till I reread the 'No Silver Bullet' and the section 'Essential difficulties->Invisibility'.
Software is invisible and unvisualizable. Geometric abstractions are powerful tools. The floor plan of a building helps both architect and client evaluate spaces, traffic flows, views. Contradictions become obvious, omissions can be caught. Scale drawings of mechanical parts and stick-figure models of molecules, although abstractions, serve the same purpose. A geometric reality is captured in a geometric abstraction.

The reality of software is not inherently embedded in space. Hence it has no ready geometric representation in the way that land has maps, silicon chips have diagrams, computers have connectivity schematics. As soon as we attempt to diagram software structure, we find it to constitute not one, but several, general directed graphs, superimposed one upon another. The several graphs may represent the flow of control, the flow of data, patterns of dependency, time sequence, name-space relationships. These are usually not even planar, much less hierarchical. Indeed, one of the ways of establishing conceptual control over such structure is to enforce link cutting until one or more of the graphs becomes hierarchical.

In spite of progress in restricting and simplifying the structures of software, they remain inherently unvisualizable, thus depriving the mind of some of its most powerful conceptual tools. This lack not only impedes the process of design within one mind, it severely hinders communication among minds.
Since software is inherently 'unvisualizable' (as explained above), software developer will always feel that any graphical modeling technique (Flow charts, UML Diagrams, Swimlanes, data flow diagrams, etc etc) is insufficient to imagine and communicate the software design.  

So in conclusion:
  • Software design is hard.
  • Documenting and communicating software design is even harder.
  • Flowcharts, UML diagrams or any other diagrams are not a silver bullet of 'design documentation'.
  • Most likely, there will never be a 'silver bullet' in design documentation.
UPDATE (Oct 30, 2010):
I fully agree that UML diagrams are useful communication tool to document/discuss/understand the overall design. However, it utterly fails as  'documentation' tool for documenting every class and function. Documenting every single class with UML results in information overload. So I agree with observations of 
Stephan.Schmidt and others.

In one of the project that I worked, we had about 10 different modules. Each module had some 2/3 key classes. We created module dependency diagram. We documented the class hierarchy (inheritance and aggregation relationships) of these classes in a single class diagram. We also documented names of various design patterns used in these classes. Then we documented key functions of these modules with 2/3 sequence diagrams. This documentation served us well. New team members can quickly get the hang of the system and start contributing.  
 
At the end of the project, our customer insisted on UML diagrams for every single class and function. Hence we reverse engineered whole system and created UML documentation of every single class. It was completely incomprehensible and hence completely useless.

    Wednesday, September 08, 2010

    Rereading Mythical Man month

    Recently I started rereading Mythical Man Month by Fred Brooks. The book is a collection of essays about programming and software development in general. First edition was published in 1974. I am reading the 20th Anniversary edition published in 1994. So the one I am reading is also 16 years old.

    First time I read this book sometime in year 2000. At that time, I was a just a somewhat experienced developer. In last 10 years, I have handled teams, worked in project leader roles, taught software development, design, architecture.  Now when I started rereading the book, its a very interesting and educational experience. Some things which I did not completely understand or believe at that time, now those ideas make sense. Though the ideas and advice in the book are still very sound advice even after 35 years. Still this book  is known as a book 'that is quoted often but followed rarely'. I agree to that.

    I am going to review some ideas on the book which stuck a cord.

    I found a following gem in Chapter 13, The Whole and The Part. Here Author is talking about the 'System Debugging'. 
    Build Plenty of Scaffolding
    By scaffolding I mean all programs and data built for debugging purposes but never intended to be in the final product. It is not unreasonable for there to be half as much code in scaffolding as there is in product.

    One form of scaffolding is the dummy component, which consists only of interfaces and perhaps some faked data or some small test cases. For example, a system may include a sort program which isn't finished yet. Its neighbors can be tested by using a dummy program that merely reads and tests the format of input data, and spews out a set of well-formatted meaningless but ordered data.

    Another form is the miniature file. A very common form of system bug is misunderstanding of formats for tape and disk files. So it is worthwhile to build some little files that have only a few typical records, but all the descriptions, pointers, etc.
    I suddenly realized that the description is very similar to description in Agile books/articles about Test Driven Development. (with some minor change in terminology). 'dummy component' is Mock Objects. The estimate of proportion of 'test code' to 'production code' is also very similar('It is not unreasonable for there to be half as much code in scaffolding as there is in product' )

    I found few more such gems. Later I will write about them.

    Saturday, July 03, 2010

    Students and Professional Software Development

    In May 2010, I conducted a workshop on 'Introduction to Profession Software Development' in Sir Padmapat Singhania University, Udaipur (SPSU). Previously I have conducted various introductory sessions for new joinees in Geometric Ltd (my previous employer). In all the projects that I worked on, usually 50% team members were 'freshers'. While working with these fresher/new joinees, I realized that even computer science students have no clue about 'professional software development'. Most of them have not even heard of 'version control'  so there was no question of using any version control system.

    Obviously when they join a software company, it is a 'culture shock'. Also when these students try to work on some short internships with the industry, they spend more time learning such tools/practices rather than  development of their project. Hence industry mentors are not very happy with the output of such internship programs. 

    The objective of this five day workshop was to reduce the intensity of this culture shock and help students to with internships, last year projects and also prepare them to work on programs like 'Google Summer of Code'.

    Participants were divided into teams 4-5 students each. A SPSU professor was assigned as 'mentor' to each team. The daily program was divided into 
    • class room sessions of about 2 hrs every morning, 
    • 15-20 min presentation about yesterdays work by the teams 
    • working a 'mini-project' during remaining time.
    I conducted following sessions during the 5 day program along with reviewing the design/code. The team of SPSU professors worked with me to mentor the students, answer their queries, review the code/design etc.

    Day 1 : Difference between amateur and professional software development. And the tools of professional software development (e.g. Version Control, Bugbase, Build systems etc).
    Day 2 : Writing specification document
    Day 3 : Key Principles of Software Design and how to write design document.
    Day 4 : Principles of User Interface Design
    Day 5 : Bad coding practices and how to avoid them.

    The workshop was very interesting experience. 
    • Most of material I prepared before hand has to heavily modified based on interaction with students. 
    • As usual some student groups were not at all interested while some groups did fabulous job. 
    • The professors were serious about mentoring the students and took a keen interest in their teams work. However, many professor didn't have any experience of working in a industry and it showed.
    • Many students had done a basic java course. But most of them did not have any idea on developing a GUI in Java. Same was true for students working on C# or C/C++. 
    • Some teams worked on Turbo C compiler. Obviously that experience with Turbo C and developing GUI with TurboC is not going to be very useful today.

    The Program was organized by Industry Readiness Center (IRC) and Sir Padmapat Singhania University, Udaipur (SPSU) in collaboration with Poorvanchal Systems Pvt Ltd.

    What do you think about such workshop ? Will they be useful to students and industry ? I am interested in hearing about your experiences.

    Friday, June 11, 2010

    Why ALM softwares with SaaS model are good for Startups ?

    Many software developers express doubts when I tell them that hosted ALM softwares with SaaS model are good for startups.  Typically the arguments are two.

    1. I am software developer, I can setup my own Trac, Subversion (or some other version control), bugzilla (or some other bugbase). Why should I pay for something I can do on my own ?

    2. I don't want to put my code on some other companies server.  What if it gets stolen ?

    Lets examine these arguments in more detail starting with first argument, 'I can do it on my own'.


    Why should I pay for something I can do on my own ?


    If you are experienced software developer, you can definitely 'do it on your own'. However, if you are startup founder where will you like to spend your time ?  Do you want to spend time working on your own idea or you want to spend time on setting up version control, bugbase, taking backup etc.  You can spend some initial time in deploying the basic infrastructure, what about maintaining it?  Someone has to regularly spend time in keeping these infrastructure running.  Someone has to spend time on taking regular backup, applying security patches to servers, upgrade to newer versions of software, etc etc. The time spent on all such 'non-value added but necessary'' activities is significant.

    When you go to a hosted ALM provider like 'BootstrapToday',  activities like taking regular backups, server maintainance, upgrade to newer versions, any data migration are handled by ALM service provider. Hence startup developers are free to spend more time on developing their own ideas.  Usually these are 'integrated' ALM applications which provide at-least version control, issue trackers in one package. BootstrapToday also provides Wiki and some very basic project management and time tracking capabilities.


    I don't want to put my code on some other companies server.  What if it gets stolen ?


    This is a very legitimate and sincere concern.  However, many time its seriousness is exaggerated.  What are the 'threats or risk'' to your IPR if you host your IPR on ALM providers server.

    1. Someone may hack your ALM providers servers and steal the source code.
      This risk exists even if you are hosting source on your server especially if server is accessible from outside the company network. If source code hosted on a server accessible only inside the company network, then this risk is less. However, it also means that your developers have to work from company premises. In case of startups, sometimes the founders are in two different cities and still want to access the source, then you want to spend time/resources to create a VPN, make sure the server is up 24/7, etc.

    2. An employee may steal the source.
      Again this risk exists even if source code is hosted on your own server. Still you may want to make sure that employees cannot access source code from their homes to minimize this risk. Typically ALM providers have additional security features like IP address based access restrictions.

    3. ALM provider may look at the source and sell it to the competitor.
      ALM providers like us (BootstrapToday) are not stupid. We know that if we do this even by mistake, we are finished. No one will trust us after that. Hence we have contracts that specifically ensure that we cannot do this. We have additional restrictions on which employees can directly access the data on our servers.

    As ALM service provider , we have to to be extremely serious about the security of data of our customers. We have to take special care in design, deployment of our software, security of our servers, backups.

    So if you are hosting the code on ALM providers server, the risk to your IPR does not really increase in any significant way.  Still sometimes startups have their own (many times imaginary) fears about their protection and security of IPR.  Unfortunately rational arguments do not work on such 'fears'.


    Are there any situations where SaaS model is not appropriate for a startup ?


    Yes there are situations where SaaS model is not appropriate.  For example, lets assume that you are working on project for US government (or Indian government).  In such cases, your contract may not allow hosting the source on servers outside your company.

    (NOTE : This article is imported from BootStrapToday blog)

    Monday, March 29, 2010

    BootstrapToday

    In Aug 2009, we (I, Anand and Vishwajeet) started a software company. We named our company 'Sensible Softwares Pvt. Ltd.'  Our first product BootstrapToday is now officially available. BootstrapToday is a Simple and Sensible Application Lifecycle Management (ALM) software. BootstrapToday is a SaaS application.

    There are many budding entrepreneurs in India & around the world. We believe that they will like to focus on their core ideas rather than spending time on setting up development team infrastructure to manage their projects. BootstrapToday with simple interface & intuitive design lets our customers to get started immediately, Our customers can offload non-core activities like setting up project infrastructure, its maintenance, upgrade, backup responsibilities to us.

    Saturday, February 13, 2010

    svnplot - one year later

    About one year back (Dec 2008) I changed job. Between two jobs I had some free time. I wrote first version of svnplot during these 4-5 days. Then I released it as 'open source' project on Google Code. Soon many people started using it. I started getting the bug reports filed on the project page. To me, this was a indication that people are really using this project. 
    1. I got bug reports from developers/scientist working in places like CERN, AMD.
    2. One of the bug reports mentioned that "I'm using SVNPlot on over 100 of my users' repositories"
    3. Svnplot was mentioned in discussions on StatSVN forums
    4. StatSVN developers added the feature of  tag cloud of commonly used words in commit messages inspired from the similar feature in svnplot. So as mentioned by  Benoit "it is now a bilateral inspiration". Since initially features in svnplot were inspired from excellent StatSVN project.
    Many people contributed bug fixes and improvements to svnplot.
    1. Chris Glasman added  support for repository authentication.
    2. Oscar Castaneda developed/contributed code to convert SVN logs to output files can be used in CMU's ORA and Apache Agora as as part of Google Summer of Code 2009 (GSoC09). You can read the details of his contribution here.
    3. kitpz2 contributed code for better pie-chart display of directory sizes.
    I think the key advantage of  svnplot is it doesn't require a checked out copy of repository. Also it is easy to hack.

    So what's next ?
     
    I am now working on next version of svnplot (0.6). The key new feature will be graphs be generated on client side with javascript and HTML canvas. This will reduce the dependency on matplotlib and it will be easier for users to deploy it.  After checking few Javascript charting libraries like Flot, jquery.Visualize plugin, I decided to use jqPlot. I am planning to release Svnplot 0.6 in few weeks time.

    Monday, January 11, 2010

    Code Analysis and Visualization Tools

    Since last few years, I am studying how improve the effective of code reviews. In my experience, every organization have its own 'code review guidelines'. However, ROI of time spent on code reviews varies a tremendously. In some project groups, it works very well. While in other groups, many code review comments are of 'naming convention' related issues and not serious code problems. I developed a program called 'Effective Code Review' to teach simple but effective techniques of analyzing code to find more defects during the code reviews.

    Last one year I have been conducting this 'Effective Code Review' program in various organizations. As part of this program, I checked/discovered various opensource and freeware tools available to analyze code and/or visualize various aspects of code. I also wrote few simple tools to do that. I have released these simple tools as 'Thinking Craftsman Toolkit' on google code.

    I have prepared a list of such tools and their websites and published it on my website with the hope that other will find this list useful.

    Check Code Analysis and Visualization Tools on Thinking Craftsman website. If you have any good tools, please leave a comment. I will update the list based on the comments.