Shalin Says...

Amit Desh­pande and Dirk Riehle from SAP Labs have conducted and published a research on the growth of open source software.

The data has been culled from Ohloh.net and is based on the stats and activity of around 5000 open source projects written in 30 different languages and 103 open source licenses.

Some interesting quotes from the publication:

Suc­cess­ful open source projects like Linux, Apache, Post­greSQL and many oth­ers are grow­ing super-linearly. Pre­vi­ous research showed that lin­ear and qua­dratic growth is the dom­i­nant growth pat­tern of open source soft­ware projects

Our work shows that the addi­tions to open source projects, the total project size (mea­sured in source lines of code), the num­ber of new open source projects, and the total num­ber of open source projects are grow­ing at an expo­nen­tial rate. The total amount of source code and the total num­ber of projects dou­ble about every 14 months.

Open Source has taken off handsomely and continues to thrive. It is not just about philosophy any more, it is good business sense.

In case you are interested about Solr stats, see the Solr project page at Ohloh.

Update - The report is quite old but I just discovered it now :)

Erik has written about Solr’s usage in libraries on the Lucid Imagination Blog. Solr has found its way into many libraries and quite rightly so. However, one of the main things that Erik talks about in that blog post is the performance of DataImportHandler vs SolrMarc (the indexing library used by both VUFind and Blacklight).

Quoting from Erik’s email to the solrmarc-tech google group:

The difference in speeds:

SolrMarc: 22 docs / s
DIHmarc: 1,745 docs / s

W00t!

Well, I don’t know much about SolrMarc but I’ve seen DataImportHandler instances with comparable (or even better) throughput many times. There is something fishy inside SolrMarc for sure and I have a feeling that fixing it would be a low hanging fruit. However, Erik’s opinion is that DataImportHandler is a better way to index and that he will devote a portion of his time to helping the Solr using library community (thanks Erik!).

DIH has really taken off since it debuted in Solr 1.3 and it would be safe to call it the de-facto standard for indexing data into Solr. It may not be the most elegant way to index data but it is quick and it works great. With the planned features for DataImportHandler in Solr v1.5, it will continue to improve and it makes sense to base VUFind and Blacklight’s indexing infrastructure on top of it. I’m very excited to see this happening.

Opera published a study titled State of the Mobile Web, November 2009 which I found through TechCrunch. I can’t help but notice the tremendous growth in web usage through mobile phones in India. Page views have grown by 228.5% Y/Y and unique users have grown by 208.4% but if you look at metrics like page views per user or the amount of data transferred per user, you’ll see that they are quite small.

One of the reason is that in India we don’t have 3G (actually we do but it is limited to only one provider - BSNL) and browsing the Internet is painfully slow on GPRS connections. With 3G finally coming next year, I’m quite sure that the mobile web usage in India will just explode.

Right now the only kind of mobile applications that can work in India are SMS based. The increase in download speeds will make more people use the Internet and SMS will be less relevant, though that may take more time than a year. If 3G indeed is introduced by mid next year by prominent providers like Airtel and Vodaphone, I won’t be surprised to see Y/Y growth rate exceeding 500%.

Companies building products/services around SMS should start thinking about a mobile web strategy now.

I had been thinking about moving away from Blogger to my own domain. Finally, I decided to give in and I was fortunate enough to buy this domain. Blogger has been a simple service but I wanted to try the new kids Tumblr or Posterous. After spending some time fiddling with both of them, I decided to go with Tumblr.

It took me some time to figure out the right way to move from Blogger. I used the import script written by Jonathan Tron to import my old posts. Sadly, there is no way to import comments from blogger. The least I could do was to import them into disqus and link the same disqus account into tumblr; which actually does not help much.

The bigger issue was to migrate without leaving RSS subscribers in the lurch. The slightly lesser issue was to preserve my earlier blog’s Google page rank.

The first issue was solved easily. You can do the same with the following sequence of steps.

  1. Create a Feedburner account and import your blogger feed.
  2. Set your blogger feed to redirect to Feedburner.
  3. Edit your tumblr theme and replace the RSS link to point to feedburner
  4. Edit your feedburner to import from tumblr’s rss

The second was slightly more tricky. The right way to move a website to a different domain is to use permanent redirects from the old page to the new page. However, Blogger (obviously) does not allow you to do that. Thankfully, Google recently announced support for specifying  canonical links which can point to the preferred version of a URL. So, I hacked up a script to match pages of blogger’s RSS with tumblr’s RSS and generate conditional blogger template snippets which let me specify the canonical (tumblr) URL for each page on my Blogger account.

I couldn’t redirect so I had to fall back on meta-refresh to redirect anyone visiting an old page to the new page. I hate to break the back button like this but that was the only possible way in this case. This is what it looked like:

I used to think that blogging is a solved problem. After doing all this and trying out many service, I don’t believe that anymore.

AOL’s new logos, which one do you like?

AOL listed on the New York Stock Exchange on 10th December 2009. This has been in the works for a long time and I’m glad we’re finally here. Things are changing around the company and I’m happy to be a part of this change.

AOL has a new logo (and yes, it is still to be written as AOL). I loved the new brand videos, watch them on youtube - http://www.youtube.com/watch?v=YlSL7svbooY

Seed.com was also launched a few days back. It is a new spin on crowd sourcing content which, I believe, is a great idea.

We’re just getting started!


Apache Lucene Java 3.0.0 has been released. Lucene Java 3.0.0 is mostly a clean-up release without any new features. It paves the path for refactoring and adding new features without the shackles of backwards compatibility. All APIs deprecated in Lucene 2.9 have been removed and Lucene Java has officially moved to Java 5 as the minimum requirement.

See the announcement email for more details. Congratulations Lucene Devs!



Apache Mahout 0.2 has been released. Apache Mahout is a project which attempts to make machine learning both scalable and accessible. It is a sub-project of the excellent Apache Lucene project which provides open source search software.

From the project website:

The Apache Lucene project is pleased to announce the release of Apache Mahout 0.2.

Highlights include:

  • Significant performance increase (and API changes) in collaborative filtering engine
  • K-nearest-neighbor and SVD recommenders
  • Much code cleanup, bug fixing
  • Random forests, frequent pattern mining using parallel FP growth
  • Latent Dirichlet Allocation
  • Updates for Hadoop 0.20.x

Details on what’s included can be found in the release notes.

Downloads are available from the Apache Mirrors


From the official announcement:

Apache Solr 1.4 has been released and is now available for public download!
http://www.apache.org/dyn/closer.cgi/lucene/solr/

Solr is the popular, blazing fast open source enterprise search platform from the Apache Lucene project. Its major features include powerful full-text search, hit highlighting, faceted search, dynamic clustering, database integration, and rich document (e.g., Word, PDF) handling. Solr is highly scalable, providing distributed search and index replication, and it powers the search and navigation features of
many of the world’s largest internet sites.

Solr is written in Java and runs as a standalone full-text search server within a servlet container such as Tomcat. Solr uses the Lucene Java search library at its core for full-text indexing and search, and has REST-like HTTP/XML and JSON APIs that make it easy to use from virtually any programming language. Solr’s powerful external configuration allows it to be tailored to almost any type of application without Java coding, and it has an extensive plugin architecture when more advanced customization is required.

New Solr 1.4 features include

  • Major performance enhancements in indexing, searching, and faceting
  • Revamped all-Java index replication that’s simple to configure and can replicate configuration files
  • Greatly improved database integration via the DataImportHandler
  • Rich document processing (Word, PDF, HTML) via Apache Tika
  • Dynamic search results clustering via Carrot2
  • Multi-select faceting (support for multiple items in a single category to be selected)
  • Many powerful query enhancements, including ranges over arbitrary functions, and nested queries of different syntaxes
  • Many other plugins including Terms for auto-suggest, Statistics, TermVectors, Deduplication
Performance Enhancements
  1. A simple FieldCache load test
  2. Filtered query performance increases
  3. Solr scalability improvements
  4. Solr faceted search performance improvements
  5. Improvements in Solr Faceting Search
Revamped All-Java Replication
  1. SolrReplication wiki page
  2. Works on Microsoft Windows Platforms too!
DataImportHandler improvements
  1. What’s new in DataImportHandler in Solr
  2. DataImportHandler wiki page
Rich document processing
  1. ExtractingRequestHandler Wiki page
  2. Posting Rich Documents to Apache Solr using SolrJ and Solr Cell
Dynamic Search Results Clustering
  1. ClusteringComponent Wiki page
  2. Solr’s new Clustering Capabilities
Multi-select Faceting
  1. Local params for faceting
  2. Tagging and excluding filters
Query Enhancements
  1. Ranges over functions
  2. Nested query support for any type of query parser (via QParserPlugin). Quotes will often be necessary to encapsulate the nested query if it contains reserved characters. Example: _query_:”{!dismax qf=myfield}how now brown cow”
New Plugins
  1. TermsComponent (can be used for auto-suggest)
  2. TermVectorComponent
  3. Statistics
  4. Deduplication
SolrJ - Java client
  1. Faster, more efficient Binary Update format
  2. Javabean (POJO) binding support
  3. Fast multi-threaded updates through StreamingUpdateSolrServer
  4. Simple round-robin load balancing client - LBHttpSolrServer
  5. Stream documents through an Iterator API
  6. Many performance optimizations
Miscellaneous
  1. Rollback command in UpdateHandler
  2. More configurable logging through the use of SLF4J library
  3. ‘commitWithin’ parameter on add document command allows setting a per-request auto-commit time limit.
  4. TokenFilter factories for Arabic language
  5. Improved Thai language tokenization (SOLR-1078)
  6. Merge multiple indexes
  7. Expunge Deletes command
Upgrade instructions

Although Solr 1.4 is backwards-compatible with previous releases, users are encouraged to read the upgrading notes in the Solr Change Log.

There are so many more new features, optimizations, bug fixes and refactorings that it is not possible to cover them all in a single blog post.

A large amount of effort has gone into this release. Many congratulations to the entire Solr community for making this happen!

Great things are planned for the next release and it is a great time to get involved. See http://wiki.apache.org/solr/HowToContribute for how to get started.

Enjoy Solr 1.4 and let us know on the mailing lists if you have any questions!

Note: The following material and presentation was prepared for students of the Indian Institute of Information Technology (IIIT), Allahabad. The aim was to get them excited about contributing to open source projects and in particular about Apache Lucene, Solr and Hadoop. The first talk was titled “Why you should contribute to Open Source” and was aimed at freshmen and has no technical content. The second was titled “Get involved with the Apache Software Foundation” and was given to sophomore, junior and senior students and it goes into some basic technical information on Apache Lucene, Solr and Hadoop projects. The following post comprises of some notes that I put together for the talks.

Work on what you like, when you like

Everybody wants to work on “cool” products. However, the reality is that most of you will get stuck in a job which although may pay well, it will hardly be about the things you wanted to work on. In your course, you will learn about algorithms, distributed systems, natural language processing, information retrieval, bio-informatics and other areas of computer science and its applications but in real life, the majority of the work done in software companies will have little direct application of things you will learn in your course.

Most of the times you will be using things built by others and writing glue code to build things needed by your company’s business. This is not to say that all that knowledge will go waste; it will definitely help you become a better programmer and you should learn it but there’s a fair chance that it may not be used directly in your job.

Open Source projects offer you a chance to work on something that you want rather than something that others want you to work on. It is a great opportunity to work on something that is both cool and useful as well as to associate with a well known brand and all the publicity and goodwill it brings. You are free to pick and choose between the thousands of open source projects out there. Moreover, you are free to decide on how much you want to contribute. You won’t have a boss and you won’t have the pressure of deadlines and schedules.

Development in the “real” world

Academic projects are insufficient to impart many of the skills that you’d need once you start developing software full-time. Many of these skills are “social” rather than technical in nature but are at least as important.

Most academic projects are “toy” projects. By that, I mean that their whole life cycle revolves around you. You are the designer, developer, tester and also the user. As a result, there are few key things missing in those projects.

  • No build system - Makefiles? Ant? Maven? Very few students are familiar with using them. Don’t even ask about creating a build from scratch. “Hey! Just open those files in a text editor or an IDE and hack away” is not an unusual thing to be heard
  • No source control - CVS? SVN? Git? A single person writing all the code or >80% of the code is very common
  • No bug tracker - “It is never going to be used after we demo it to the professors”
  • No user documentation - maybe you will write a research paper detailing your findings but there is little or no documentation written for “other” people
  • No mailing lists or forums for support - Nobody but you is going to use it
Moreover, under these circumstances, you never learn how to:
  • Discuss technical design or issues in writing
  • Resolve conflicts in matters of design, architecture and a project’s road map.
  • Build usable interfaces (whether command line options or a GUI or an API)
  • Write proper error handling and logging code
  • Identify hooks for monitoring systems in production
  • Think about backup and recovery
  • Identify components which can be extended or replaced to add or modify functionality of the system
Open source projects are the real deal. If you are involved for long enough, you will either see or be a part of many such discussions and conflicts. All of the above skills are things you will need when you get around to software development in the real world.

Learn from the best

How many great developers do you know about? How many of them work or have worked on an open source project? I bet there are many names common to both the lists.

Open Source development will help you observe how experienced developers work and their various ways of designing, coding and discussing solutions. You will learn new ideas and new ways of solving problems. The second and probably more important part is that many smart programmers will be looking over your code and will provide review comments which will help you improve yourself. You will learn more efficient or shorter (or both) ways to solve the same problem. That kind of feedback is invaluable to a budding programmer.

I know that I’ve learned a great deal since I got involved in Apache Solr.

Build a publicly verifiable resume

What you tell in your resume are things like contact information, performance in academia, programming languages you know, projects you’ve worked on and other such stuff. There is very little in this document which can be verified easily. This is a problem for you as well as for the prospective employer because:
  1. It may not represent you, your skills and your hard work sufficiently enough
  2. It makes hiring a game of chance for the prospective employer and prevents them from making more informed decisions
The best thing about contributing to an open source project is that everything you do is public. So you can say things like the following:
  • I have worked on this project for the last two years
  • I wrote features X, Y and Z on Project P
  • I have over two hundred posts on the user forum or mailing list
  • I have commit access to the project
  • I am the expert because “I wrote it”
And your prospective employer can search and verify such things easily. Congratulations, you have just landed on top of the stack of resumes!

Companies will find you

When a company evaluates that an open source Project X can save them a lot of money, it is likely that they will hire a few people who have experience on project X and can support its use internally. Many such companies also allow their developers to work on the project either part-time or full-time. And who else is more qualified to work on the project but you - an existing contributor!

More and more companies are starting up around providing training, consulting and support for open source projects. Many such companies exclusively hire existing contributors.

Even if an open source project is not used directly inside the company, many tech companies hire open source contributors because:
  1. Hiring popular open source developers makes them more cool in the eyes of other developers
  2. Developers who contribute to open source projects are good programmers

I’m sure there are many more reasons other than the ones I’ve given here. In the end, contributing to an open source project is a good investment of your time and it may well be your big ticket to finding that great job. Good Luck!