Category Archives: Event Report

Event Report: IndicThreads Conference on Mobile Application Development

(This is a live-blog of the IndicThreads conference on mobile application development that is currently happening in Pune. Since this is a live blog, so please excuse the greater-than-normal number of errors and lack of coherence sometimes.)

NFC in mobile devices – Ashutosh Tripathy, Talentica

Ashutosh Tripathy talked about NFC in mobile devices and why it is important. NFC is “Near Field Communication”, which is a very short range wireless communication between devices. The range is very low – just a few centimeters, and the bandwidth is also low – just 424kbps max. But the important thing is the ease of use it gives in a large number of use cases – e.g. event tickets, sharing business cards, ID cards, easy printing, file sharing, mobile payments etc.

The important thing about NFC is that it does not work at a distance (and it can be configured so that it does not work when the screen is off). This means that NFC communication can only happen with the knowledge of the user of the device. Thus, for many applications you can get rid of complex security procedures and passcodes that are needed to prevent malicious users from getting access to your device without your knowledge.

For example:

  • Bluetooth + NFC gives instant Bluetooth pairing – without requiring passcodes and other complex mechanisms. So if you want to transfer a file between two devices, you bring them close together and NFC is used to set up the Bluetooth pairing. After this, the actual file transfer happens over Bluetooth, so that it will continue to work even when distance between the devices is increased.
  • Wi-Fi + NFC can similarly give very easy to use wi-fi configurations

NFC Enabled Phones in the market already:

  • Google Nexus S (Android)
  • Samsung Galaxy SII (Android)
  • Nokia C7
  • Blackberry Bold 9900 and 9930
  • Nokia 6131

Upcoming and rumored:

  • iPhone 5
  • Nokia N9, N5
  • Lots of Android 2.3.3 phones
  • LG Optimuz NET
  • Various Samsung BADA OS based phones

It is expected that most new smartphones will be NFC enabled soon.

Ashutosh followed it up with a demo of how to build an NFC app on Android.

Developing mobile enterprise applications – Yateen Shaha, SAS

More and more enterprise apps are now mobile enabled. The primary business drivers behind this trend is increased productivity, faster/better decisions, and thus competitive advantage.

Important Things to worry about when building enterprise mobile apps:

  • Delivering the right functionality – not all functionality can be supported in the mobile device. So choosing what is in and what is not included is important
  • Access Everywhere – User should be able to access the app from inside the company intranet, but also from outside over public networks.
  • Offline Access – Should be allowed
  • Protecting data – Security is very important to enterprise customers, so you need to take great pains to keep them happy.
    • Authentication could be device based, or user based, or ideally both.
    • Data Encryption:
      • Over the Air: The data being sent over the public internet should be encrypted
      • At Rest: The data stored on the device should also be encrypted, so that if the device gets lost, the data is still protected
  • Storage/Bandwidth limitations – Since storage and network bandwidth on the mobile device is going to be limited, you need to carefully design the architecture of the app (and the backend services supporting the app) in such a way that it does not require lots of data to be downloaded and stored locally.
    • Some of the decisions could be based on what kind of network connection the device is currently using. Thus, use network liberally when on wi-fi but be more careful when using 2G or 3G.
  • Code Reuse – having to maintain two different code bases, one for desktop apps, and another for mobile apps is a pain. Design the overall app (e.g. by using model-view-presenter patterns) so that maximum code is reused.

Tips and tricks:

  • Cache whenever you can, to improve performance
  • A good user experience is very critical – much more so than for desktop apps
  • Must take advantage of device features
  • Performance and Response time is critical for user acceptance

Other Talks

There was a panel discussion on “Mobile is the next Desktop.” I was one of the panelists, so unfortunately, I could not live-blog this. Topics discussed were why mobiles are going to take over the world, how developing for mobiles is different from developing for PCs, how the fragmentation in mobile (devices and platforms) is a huge pain (with no solution in sight), how html5 might or might not replace native apps, and other topics.

Mayur Tendulkar gave a presentation on Windows Phone 7. Most of what he said was similar to the talk he gave a few months back at TechWeekend 7, so I’m not repeating it here.

Abhay Aggarwal, from Xebia India talked about building an app that needs to target multiple screens. These are the various sizes available: 240×320, 240×400, 320×480, 360×640, 480×800, 540×960, this doesn’t even count the tablets. He talked about a process & architecture that would minimize the pain of doing this.

(At this point I had to leave even though there where two more talks later in the day, and a full day of talks the next day that I could not attend. However, the presentations are online at http://m11.indicthreads.com if you’re interested.)

Event Report: Java 7 Launch Event in Pune

(This article by guest writer Amit Naik, an architect at BMC Software, Pune, is a report of the Java 7 Launch event that happened in Pune last weekend.)

Harshad Oak started things off by pointing out that Java has a bit of ups & downs in the past couple of years. Hopefully Java 7 will reverse the trend. He also encouraged people to join the Pune Java User Group to stay connected with other Java users in Pune.

Then, we moved on to the main speaker: Chuk-Munn Lee (chuk-munn.lee@oracle.com). Fun fact – Chuk-Munn is a fan of Futurama and called out the fact that he is wearing a “Bender the Robot” T-Shirt.

These are the highlights of Chuk-Munn’s presentation:

The last Major release of Java – Java 6 was in 2006-7 and no major releases since then. JavaSE7 has a lot of gestation period. The big release of 7 is now broken down into 2 incremental releases Java 7 and Java 8 to get something out of the door faster and make it more manageable.

Reading is more important than writing for Programming Languages. Programs should be a Joy to read. Counter example PERL a Write-Only Language, or Looks Same Before and After AES Encryption. A Camel is a horse designed by committee. Very difficult to read and maintain. So very difficult to collaborate in large teams or large codebases where readability is important. This is where Java shines but it has sometimes got too much boilerplate code needed.

Applications in the commercial world compete on the basis of features – same should not apply to programming languages. In languages you want fewer features but they should work consistently. So it is difficult to add new features to Java consistently.

The main features new in Java 7 can be grouped into these categories:

Small Language Changes (Project Coin)

  • Binary Literals with underscores for clarity
  • Strings in Switch statements
  • Inferring types with <>
  • Varargs Warnings @SafeVarargs fixes problem of Heap Pollutions JLSv3 4.12.2.1
  • Multi-Catch – very useful in reducing boilerplate code if used properly!
  • Copying Streams – try-with-resources

NIO2

  • NIO2 (JSR -203) java.io.File does not work consistently across platforms, missing basic operations like copy, move, etc.
  • Path Class (Async I/O)
  • Features – Filesystem and Filestore support
  • Symlink support
  • Basic File operations
  • File attributes and Permissions support enhanced
  • Other interesting features
    • Watch files directories

Invokedynamic

Java may or may not be the first choice of everybody but JVM is massively popular and many, many languages are adopting it. The VM spec is from 1997 – fairly generic and not specifically wired to Java except for the 4 key bytecode instructions – invokespecial (constructor invocation), invokestatic (statics), invokeinterface (interface), invokevirtual (methods)

Java 7 is introducing a new instruction for Java 7 invokedynamic that will allow for late binding in languages such as JavaScript to be natively supported on the JVM.

Other Features

  • New Fork-Join framework
    • ForkJoinPool and ForkJoinTask along with fork keyword to natively support fork-join semantics
      natively on the VM
  • New decorators for Swing – Jlayer and LayerUI
  • Infiniband support – using a sockets direct protocol (SDP) over the wire
  • Utility methods for java.util.Objects

That was end of the main presentation.

Time for Audience Q/A

(All Questions/Answers paraphrased to best of my recollection)

  • Java 7 seems like an underwhelming release. Why?
    • There was a very long gap between Java 6 and Java 7 because of the inability to move things thru to conclusions fast enough in the JCP. All the big features were not done yet so it would have taken a lot longer to get everything finished. Oracle polled the community and the result was two releases – one with all the finished features and one with all the big features -Java 8- to follow shortly thereafter.
  • Will Oracle make Java more “restrictive” in terms of licensing etc.?, What is Oracle’s commitment to Java?
    • A very large part of Oracle’s internal codebase is on Java so Oracle has excellent commitment to Java and will move it forward Will it make it more restrictive license wise – this question has been comin up over the years and the answer is always NO. Most of Java is under a GPL-like license anyway so cannot be really made more restrictive.
  • With the departure of Apache Software Foundation from the JCP and the Lawsuit over Android against Goolge what is the future of JCP and the Java community?
    • Cannot comment on the lawsuit. If the situation with the ASF worries you personally then you should consult a lawyer. I (Chuk-Munn) ask myself this question – does it personally affect me in any manner? If not then I do not worry about it.
  • Is the support for dynamic languages increasing or decreasing with Java 7?
    • Increasing with the introduction of invokedynamic etc.

The PPT that was used by Chuk-Munn Lee is available from here (see attachment at the end of that page)

About the Author – Amit Naik

Amit Naik works as an Architect with BMC Software. He builds performant cloud solutions with a focus on heterogeneity and monitoring across different virtualization and provisioning vendors in the cloud computing space. His main focus is the Architecture and Design of BMC solutions with emphasis on building highly-scalable systems with REST and other SOA interfaces.

Amit has a Bachelor’s degree from College of Engineering Pune and a Master’s degree from Purdue Univ., West Lafayette. He has more than 15 years of experience in the IT industry, much of it in the USA, across a variety of Technical and Techno-Managerial roles.

Event Report: “Building Tech Products out of India” with Naren Gupta of Nexus Ventures

(This is a live blog of the event Nexus Venture Partners’ event “Building Global Tech Product Companies out of India” where Naren Gupta, founder of Nexus chatted with Abinash Tripathy, founder of Pune-company Infinitely Beta about the challenges faced by companies trying to build a global product. The other four partners at Nexus were also there. This is essentially a collection of observations made by the various speakers during this event.)

  • Indian companies are good with technology, but we don’t build sales and marketing organizations early. Most engineers think that if you build a great product, customers will be easy to get. This is the biggest shortcoming that needs fixing.
    • Having a sales & marketing person in the founding team is great, but not necessary. Having one of the technical co-founder play a sales/marketing role is really great. Customers tend to trust technical guys more than pure sales guys. And this is a skill that can be learned. Initially, it will be hard, as you will be turned down by a large number of people, but you’ll figure it out. We all know how to do sales & marketing – because we do a lot of that when dealing with our parents, teachers, siblings. We’ve just forgotten to apply those skills in the context of our work.
  • The large markets are in the US, so how do you build a good sales and marketing organization? The best people in the US are both expensive, and hard to find.
    • India now has customers who are willing to pay for tech products. So it is possible now to use India as a test market, and build a small sales/marketing team based on this.
    • Not all sales/marketing has to happen on the ground. You can achieve a lot with the internet and phone.
    • The market of the future is not necessarily in the US. For example, new technologies, the US is a maturing market (i.e. there are legacy products and you have to convince people to migrate) whereas less developed countries are green field markets who are more receptive to new technologies.
  • The most experienced companies in the world are not just building great products – they are building great customer experiences. And experience is everything – from how the customer first hears about your company, how your product functions and makes the customer feel, and afterwards, if there is a problem, how you handle the problem and how you treat the customer. You need to be building great experiences. Example: craigslist is the top classifieds site in the world, but has a not-so-good experience. AirBnB took one small slice of this market, built a great experience around it, and now has a billion dollar valuation. DropBox makes the experience of backup and file-sharing so smooth and unobtrusive.
  • The biggest challenge in building a company is how to build the right culture. Before hiring, Pune company InfinitelyBeta makes prospective candidates build a mini-product and then review that code. Hence their hiring process takes 2 months. But then they know exactly what kind of a programmer they are getting.
  • Pune is ahead of other Indian cities as far as people building or interested in building products. This is probably because Pune has traditionally not had that many software services companies, and it has had some large development centers of product companies (like Veritas/Symantec, nVidia), so the product DNA has thrived more in Pune.
    • Because it is ahead of others in product orientation, Pune is the Indian city that is best positioned to be able to reproduce the Silicon Valley ecosystem.
    • It already has a microbrewery (like Silicon Valley’s Gordon Biersch), so an important component of the valley culture is already here 🙂
  • Currently, top Indian tech universities (like IITs) are quite isolated from the industry. But as more and more product companies start coming out of India, there is likely to be more collaboration between universities and companies. So we should start seeing more of this in the next 5 years.
  • We are getting into an era where fast response to changing conditions is much more important than protecting your intellectual property. Thus building an agile engineering organization is more important than getting patents.
  • You can build a B2C company immediately after college, with minimal experience. But building a B2B company really requires you to have some experience in the industry.
  • Challenges of selling into the SME market in India: Selling products for the SME market is tough for the following reasons:
    • No one has really solved the problem of distribution. Creating a product that SMEs find interesting is not good enough. Creating an efficient system for selling the product to a large number of SMEs remains a challenge. Often the cost of selling a product to a customer turns out to be higher than the income from that customer. And it is sometimes easier to sell to large companies than it is to sell to SMEs (which tend to be very price and feature conscious)
    • Far too many Indian companies in this space are creating products that they think SMEs want, but in reality, SMEs are not really that interested. Finding products that SMEs really want is very tough. Few startup founders have a good understanding of the SME space.

Event Report: Product Management Challenges Unique to India

(This is a live-blog of the Indian Product Management Association (IPMA), Pune Chapter’s event on Product Management Challenges Unique to India by Vivek Tuljapurkar.)

What is Product Management

Different people define it differently. At the very least, a product manager is a person who is the “guardian angel” of the product. He gathers requirements from the market, and defines what the features of the product will be. But in some cases, a product manager might have responsibility of the product engineering. In other cases, a product manager might also have sales and support responsibilities. And sometimes a product manager might have full responsibility for a product – including worrying about the business profit & loss (P&L responsibility).

For this talk, we will be using the broader definition of product management.

These are the different types of product management that happen in India:

  • Product Mgmt for an Indian Software Company
  • Product Mgmt for an MNC
    • Only Product Mgmt for the Indian market is done from here
    • Product Mgmt for the global market is done from here
  • Product mgmt for an off-shore customer of an Indian product software services company. (e.g. a customer of Persistent asks Persistent to also do Product Mgmt. for their product.)

The greater the responsibility, the greater the challenges of doing the role out of India.

Product Manager and Geographic Location

The product manager’s location is important in two different ways. You can have easy access to the market (i.e. the customers), or not. And you can have easy access to the development team. If you have easy access to both, it’s ideal. If you have easy access only to the market, you can do outbound product management (creating the marketing requirements document from the market research document produced by the strategic marketing team). If you have easy access only to the development team, you can do inbound product management (creating the product requirements document from the marketing requirements document). If you do not have easy access to both, then you are in trouble.

In India-based product companies, a product manager could possibly do handle all responsibilities: requirements + engineering + sales and marketing + P&L responsibility. However, product managers in MNCs and Indian services companies, only requirements gathering and engineering can be owned out of India. Support to product sales and marketing can happen within the next 5 years, but full sales and marketing responsibility, and P&L responsibility is unlikely even 5 years from now.

Requirements for being a good Product Manager

  • Basic Understanding of finance, technology, development process, sales and marketing
  • Domain Knowledge – otherwise you will not be able to use your judgement to take strategic decisions and add value
  • Basic managerial capabilities – planning and execution
  • Organizational skills – ability to get things done
  • Social skills – building internal and external relationships. Because you need to get work done by a lot of people who don’t work for you
  • Communication skills and listening skills
  • Political astuteness. Many product managers, especially those who come from a technical background, ignore this aspect. Know who is friends with whom, which way the wind is blowing, who is trying to kill your product, and a whole bunch of other behind the scenes work that is happening, so that you can keep the future of your product, and yourself secure.
  • Negotiation skills.
  • Coping with uncertainty, pressure and changing priorities
  • Strategic thinking and foresight
  • Ability to influence, motivate and inspire

You don’t have to be an expert in all these areas, but whatever is missing will hurt you. Figure out which areas you’re weak in and work on improving those.

Engineers as Product Managers

Some of the difficulties that engineers face when they transition into product management roles (and this describes most Indian product managers):

  • Were used to “hard science”: algorithms, formulas, tools, methodologies, structure
  • Too methodical and structured, and have a tough time dealing with uncertainty and amorphous nature of things
  • Enamoured with technology, and want to do technology for the sake of technology
  • Too introverted, and don’t communicate (well) enough to succeed
  • Have a hard time letting go of technology focus and focusing on broader product management issues. (This is basically fear of the unknown)
  • We are too straightforward, and don’t have the political astuteness required

As a result, many engineers (i.e. many Indian product managers) fail at this role and end up doing only inbound product management.

So, focus on fixing these issues if you want to succeed.

Problems with a product management career in India

Typically, for product management being done in India, the role is in a very early stage, and is experimental. The responsibilities are ill-defined and evolving. The person given the job is likely to be from a development background, and is likely to have no exposure to other aspects of product management: like sales, marketing, market research, customer management etc. Further he has no access to customers or to market research.

The biggest problem: Lack of opportunity to learn and practice what you have learnt

In addition, the specific career path for a product manager is not really well defined in India.

Overall, the role is quite risky.

And if product management role does not work out, what happens to you? It is usually not clear whether you’ll be able to go back to your previous role and career path.

As a company, HR should have policies to clarify these issues, so that people feel safe about going into product management.

Getting people to do product management in a software company in India is difficult. IIM graduates don’t want to join as a product manager, but they’re happy to go to a HLL as a brand manager. Which is practically the same thing! So what is needed is that the product manager position in software companies needs to be branded appropriately, ensure that the candidate’s perception of the role is correct, and as before, the career paths are defined appropriately.

The problems are even worse for smaller companies. They cannot afford to pay higher salaries, provide the facilities and amenities. They don’t have a brand recognition, which is important to current and future employees. And smaller companies are also afraid that if they try to improve their branding and visibility, the larger companies will quickly come and poach employees, leading to attrition and major problems before they can hire new guys. Solution: don’t know! This is a tough problem, and it is unclear whether there is a good answer to this at this time.

Advice to new product managers in India

  • Understand and seek clarifications on your role, responsibilities, org structure, and processes. Don’t let unstated expectations hurt you!
  • Be prepared to deal with uncertainties and changing demands regarding your role
  • Seek a sympathetic executive sponsor. A CXO/VP who will help you with tactical challenges, or at least present your case to the decision makers
  • Stay one step ahead of the game. Never stop preparing yourself for a bigger role. Learn new things. Build new relationships with the long term in the mind.
  • Keep thinking about strategic matters. Immerse yourself, but don’t drown yourself in day-to-day stuff.
  • Find ways to exploit your best capabilities to your best advantage
  • Find a way to make a name for yourself. You don’t make a name for yourself by doing your day-to-day job well. Find something else, somewhere else which is dramatic and drastic. Keep watching for those, and if you see an opportunity and grab it. It should cause people to forget all your day-to-day issues, and focus on your big win

Specific skills and techniques

  • Keep a stakeholder mapping spreadsheet. Keep track of all the stakeholders in your project, and which of them is interested in what outcome, and what is the level of friendliness of these people towards you/your product, and when was the last time you had contact with them.
  • Never go public with strong stand, or a new strategic direction, unless you’re sure that it will be received well. Before the important meeting, or the presentation, go and meet some of the key people individually, make your point to them, and ensure that they’re in agreement with you
  • On a regular basis, check whether you’ve been doing anything specific to improve your weak areas. And if you’ve not, scold yourself.

Code + Beer + Enthusiasm = Pune Hackfest

(Last weekend, the Pune Rails Meetup community organized a weekend-long Hackfest to build a Citizen Empowerment App. Gautam Rege, one of the organizers of this hackfest wrote this event report about the hackfest, which first appeared on the Josh Software blog, and is being re-published here with permission.)

Damn! Hackfests really work.

At the latest event of the Pune Rails Meetup – we organized a hackfest for the ‘second’ time (ahem – the first one ended before it started). This time however, we had a plan:

“Citizen Empowerment for Better Governance” – the aim was to complete the MVP for this in 2 days! We had a record attendance of 25-30 people on both days. I was skeptical of how much we could do, how much we can organize and if we can manage to keep everyone satisfied – it was make or break!

http://kipwiki.heroku.com — WE DID IT! This portal is almost complete (a few technical glitches but over all I would say it was success in more ways than one. The source code is hosted on github: https://github.com/punerb/kipwiki The hitch was that MongoHQ use v1.6 which does not support $nearSphere conditions for geo-spatial indexing — this causes our geo-location to go for a toss.

These are the lessons we learnt:

Pair Programming

This was not mandated but recommended (LoL — “mandatory pair-programing” — an oxymoron?). This photo says it all. Everyone paired with someone automagically — and it worked like a charm.

There were plenty of more modules build, tracked and tweaked. However, everyone was open to change, talking to everyone AND most importantly committed to “GETTING IT DONE”.

What we did

Initially,we had some mocks that we got confirmed – narrowed down the scope of work to 2 days, discussed with Peter at length what he wanted and then planned this hackfest. The first morning – we discussed the plan and with 1 hour we got down to business. This was our rails stack:

– Rails 3.0.7

– MongoDb (via Mongoid)

– Devise & omniauth for authentication

– mongoid-paperclip (with S3 as storage).

– Heroku and MongoHQ

– jQuery search result filtering

The Party continued into the night

Peter sponsored not just the lunches and dinners – but also ensured there was a steady flow of juices, snacks, fruits and beer! Shardul did not miss the chance to ‘showcase drink-fest’ 😉

Peter even bought a ‘Hackfest’ cake – what more could we ask for?

We worked on the first day till 11.30pm and then crashed to be ready for Day2. Day2 was very very productive and we were coding till 1.30am in the night to reach the finish.

Lots of beer, fun, ‘resolving conflicts’, ‘git blame’ games — and even doing something right like this one of Sergey! 😉

Coding, Designing and Testing

We were able to churn out a LOT of code indeed. But it did not start there. We had to design the web-portal with our designers, we had pivotal tracker to track stories and rspec to test the models. No we did not do ALL this. We used Pivotal tracker to check and evaluate stories and unfortunately we did not do Test Driven Development. Some of the things that we need to improve.

The excellent part of was that we had some rock-star programmers – who churned out a LOT of awesome code and we had some excellent designers who helped with designing.

“427 commits from 17 developers” and here is the impact:

We missed out on Test Driven Development!!

This is one thing that we need to do differently at the next hackfest. Its very important to see this work beautifully and always be ‘code green’.

All in all I think we are ready to be a part of RailsRumble later this year and I do intend to get Pune.rb on the RailsRumble map!

 

Event Report: TechSparks Pune 2011

(This is a live-blog of the TechSparks 2011 event in Pune. Since it is being written as the event happens, please excuse the typos, and the general low quality of the writing. Hopefully the quality of the speakers and the content will make up for that.)

Some interesting statistics. The event is at Dewang Mehta Auditorium, and it’s mostly full – which means that there are about 250 people attending. And apparently 2/3rd of them are entrepreneurs. And most of them are first-time entrepreneurs. Less than 1/3rd appear to be developers/techies.

The rest of this article is broken up into sections according to the different talks at this event.

Story of VSS Mani, JustDial

  • “I am a TamBram, so probably there has not been a entrepreneur in my family for 100 generations.”
  • He first started “AskMe” in 1989. Ran out of money in the first two years – too many meetings in 5-star hotels, and too many high-quality, high-salary employees. And since he was the sole breadwinner of his family, he had to go do something else to earn money. So, JustDial really started in 1996.
  • This incarnation of JustDial did not repeat the mistakes of AskMe – so the first office was tiny – 300 sq. ft., and did not move to a bigger place unless absolutely necessary. Rented everything possible, including chairs, tables, computers, and even LAN network cables.
  • Focused on many small customers (instead of a few large customers). And took money in advance. Helped with cash-flow (because there was little VC money in India at that time, and none at all for a new business model.)
  • When the dotcom bust of 2000 happened, most internet based companies collapsed, but JustDial was only minimally affected, because they had been conservative about betting on the internet.
  • Decided to bet big on voice enable local search and marketing around 2002.
  • Met a VC, who told them that he wasn’t interested in their existing business, but would fund them if they converted to a BPO. This convinced them to not pursue VCs any more. This remained true until 2006, at which point a VC approached them, heard their story and signed a term sheet the next day.
  • They finally launched the web-based version in 2007. Lost of internal conflicts about whether to do this – because of the fear that the internet business would cannibalize the voice based business. Interestingly, their internet business grew like a hockey stick, and at the same time the voice-based business continued to grow at the same rate as before.
  • Rode the telecom penetration and internet penetration wave on the way to fantastic growth.
  • It appears that further growth in metros is not possible because the market is already saturated. But, India is not just a metro-based market. JustDial will go to all the small cities.
  • The JustDial WAP site is growing at a tremendous pace.
  • Apps (Android/iPhone/Blackberry) are being launched next month
  • Throughout the journey, there have been naysayers. The second time he re-started JustDial, everyone told him that it was a bad idea to re-start a failed business. When they launched the web-based version, people told them that they were not a tech company, and would fail in this segment. Now the same story is repeating with their app-based business that they’re launching in the US market. (What they’re seeing that “human assisted search” is finding a lot of takers in that market – where talking to actual humans is rare.)
  • JustDial.com has the largest number of reviews and ratings in the world – 2.5 million. The secret sauce? Most people don’t actually go online and give reviews. Most online review sites have paid staff generating “reviews”. JustDial calls their voice customers back for ratings/reviews and then uploads them to their site.
  • It’s difficult to give one-line advice to entrepreneurs. But here’s an attempt: Remember, entrepreneurship is different. It’s not like a regular job. It’s a calling. So don’t do it unless you have it in you. It has to come from inside. Not because someone told you. Or copying someone else. And remember, there will be lots of failures. And learn from them. Don’t do minor, incremental things that copy someone else’s idea. Do something disruptive. Don’t do coupons.

Sanjay and Kailash Katkar, QuickHeal Technologies

  • “We are not seasoned entrepreneurs. We don’t yet feel that we have learnt everything. We are making mistakes everyday. We’ll try our best to tell you what we’ve learnt until now.”
  • Kailash Katkar’s entrepreneurial journey started in 5th standard. Over time did various minor things like screen printing, radio repairing, TV repairing. Was earning Rs. 2000 per month doing this, when he was offered a job for Rs. 400 per month – to repair calculators. He took that job because he wanted to learn the new technology. He was the only person in Pune who could repair calculators. Moved on to repairing other machines, including ledger posting machines. When his boss decided to close that business, he decided to take over that business.
  • In early 1990s he realized that computers were going to replace calculators and ledger posting machines. Decided that he needed to refocus his business on computers. Based on this, convinced his brother, Sanjay, to go for a degree in computers (BCS).
  • While doing computer repairing, he got lots of requests for fixing computers infected by viruses. Got Sanjay to write utilities for this. For example, a utility to kill the Michaleangelo virus. Started selling collection of such utilities to his customers.
  • Clubbing together all these utilities into a single product resulted in the birth of QuickHeal anti-virus software.
  • Convinced Sanjay to not take a regular job, not go to US, but instead, to join him so that they could do something different together.
  • Everybody told them that it was a bad idea to do an anti-virus product business, to go against the MNCs who had products in this space. However, the Katkars never really had that much of focus on the big picture – they only had a passion for helping their existing customers.
  • While studying for his MCS, Sanjay Katkar, in his free time, built the first version of QuickHeal, all by himself. He did not start with the intention of building an anti-virus product. He started playing with viruses and anti-virus utilities just out of interest.
  • They were late entrants in this business. In addition to the big MNCs who were selling anti-viruses in India, there were 7 or 8 Indian companies doing anti-virus products.
  • They earned money from the computer maintenance business and used it to develop the anti-virus product. And the main focus was customer satisfaction. For example, lots of organizations were using Norton Antivirus or McAfee. The software would detect files with virus, and then suggest that the infected files should be deleted. This worked in the US, because there were backups to restore the files from. In India, this never worked, because nobody bothered with backups. Hence, QuickHeal were able to actually win customers by offering versions of anti-virus which would clean existing files.
  • When the software was ready for the market, they found it very difficult to sell it. Because “buying” software was a new concept for Indians. Also, their sales partners were very comfortable selling hardware, but not with selling software. Lots and lots of effort went into educating not just customers, but also sales partners that buying anti-virus software was worth the money.
  • The Katkars were techies, not sales or business people. But their sales partners gave up on selling software, saying it couldn’t be done. So they had to do it themselves. Learn the hard way.
  • Other examples of how QuickHeal’s superior understanding of local customers helped them beat the MNCs: most Indian companies had much lower internet speeds compared to the assumptions that software from US companies made. Hence, QuickHeal, which was customized to the speeds here, was able to give a better customer experience.
  • Find good people who are committed to giving a good customer experience. Then give them a good package. And then educate them about the business. Give good after sales support (that’s how you beat the MNCs).
  • When expanding beyond Pune, they decided not to go to big cities. It is very expensive to develop the market, and you’ll probably not be in a position to make a splash. Better go to small towns where you’ll be noticed more easily. So they went to Baroda first, and then Surat, and other such places before finally going to Ahmedabad – where it was easier for them to get channel partners because they had already been noticed in the other, smaller cities in Gujarat. Today Ahmedabad is of course a bigger market than the other cities, but they couldn’t have tackled Ahmedabad without having taken the smaller cities.
  • If you are going to start a tech startup, you must have two strong pillars in your company – a very strong technology/engineering team, and a very strong marketing/business team. The other departments (finance, HR, etc) are support. But don’t start a company without having these two departments. If you’re a typical Pune entrepreneur, you’re probably a techie. Go find co-founders from the marketing/business side so that side is also strong.

There was an introductory talk about Cloud Computing at this point. Skipping it because it was too basic. Please check back around 5:30pm for the next update from the panel discussion.)

Panel Discussion – Go to Market for Startups

The panelists are:

  • Probir Roy, founder of Paymate
  • Sachin Kelkar, Head of Intel Software Partner Program
  • Shailesh Lakhani, from Sequoia Capital
  • Kris Nair, Partner, Opdrage Venture Partners
  • VSS Mani, Founder of JustDial

There where various questions and answers – I’ve tried to capture some of the more interesting quotes:

  • (Shailesh) It should not be easy to raise money. Lots of people who ask for money don’t deserve it. At early stages, people invest based on the people and not on the idea, because the idea isn’t really worth anything. And that’s the job of angel investors. Angels are slowly increasing in India.
  • (Mani) Focus on doing the best with you already have. Focus on existing customers and keep them happy. Don’t focus on what you could do if you had money. Forget the fancy stuff. Align the interests of your early employees with the interests of the company. So they should see that if the company does well, they do well.
  • (Mani) Don’t wait for a miracle to happen. Don’t wait for an angel to appear. Just focus on ensuring that your tomorrow is better than today. Focus on a small, core set of customers, and keep them happy. They will become your evangelists, they’ll get you more customers, and they’ll help you get investors.
  • (Shailesh) In deciding whether to invest in a company, we look at the size of the potential market, and a good (strong, intelligent, thoughtful) team.
  • (Probir) Entrepreneurs look for new business models. MBAs help administrate existing business models. Know the difference!
  • (Probir) Chances of you getting VC funding in India are low. So keep looking for alternative funding models.
  • (Mani) Timing is very important. We had a brilliant idea (JustDial) in 1989, and even had money. But it failed because it was way before its time. Analyze carefully whether your idea is before its time.
  • Brilliant question from audience. An entrepreneur (from SpotMyGadget) just got up and asked this question (without waiting for permission of the moderator): “How shameless should an entrepreneur be when approaching clients/etc?” Answer, from Mani was – as shameless as possible. But remember to deliver a good/relevant product in the end.

Event Report: GeekNight with Ola Bini – JRuby for the win

(This is a report of the GeekNight with Ola Bini written by Sandeep Mukhopadhyay)

ThoughtWorks Pune had invited all developers to their GeekNight held on May 25, 2011. GeekNight is a series of talks about cutting edge technology, where you also get to meet like minded geeks. This GeekNight featured a talk “JRuby for the win” by JRuby Core Developer Ola Bini.

Ola Bini is a core JRuby developer and is the author of the book “Practical JRuby on Rails”. He works for ThoughtWorks in Chicago. Ola’s wide technical experience ranges from Java, Ruby and LISP to several open source projects. He likes implementing languages, writing regular expression engines, YAML parsers, blogging, and other similar things that exist at the cutting edge of computer science.

This is a first hand report by Sandeep Mukhopadhyay:

The GeekNight Event kicked off officially with Ola Bini giving an overview of JRuby. JRuby is a 100% Java implementation of the Ruby programming language. It is Ruby for the JVM. A number of companies use JRuby, including Thoughtworks, as it is most compatible version of Ruby as coded in Java.

Ola also displayed a sample Application which showcased integration of Java APIs with JRuby. Using a combination of Explicit Extension API and OO internals in JRuby, integration bridges can be built with Legacy systems. Ola showed how to use Java and Ruby interchangeably in same program, and this feature was quite popular among those present.

Understandably, JRuby seems to be popular among many developers as it gives a free hand to use the best possible features of Java and Ruby in same ecosystem. Ola also discussed integration with different language like Erlang and Clojure just by adding jars into classpath and also talked about build tools for JRuby i.e. (Ant+Rake).

Just like in other technology events, the technical crowd soon started discussing issues like threading, Unicode, Performance, Memory Usage and Garbage Collector. Ola also brought up issues with threading as it runs on Native threads or Green Threads and briefly discussed as how to check memory usage of applications in JRuby using JConsole and other Java tools.

Gautam Rege (Co-founder Josh Software) and whose company extensively uses Ruby on Rails also discussed a few production issues.

Last but not the least, Ola and group also discussed issues about support at the Cloud level by Engine Yard as well as using Ruby Frameworks (Cucumber and JtestR) for testing.

It was a productive GeekNight

The Basics of Game Development – for programmers

(This is a live-blog of a talk Girish Dhakephalkar of http://ShoonyaGames.com gave at TechWeekend #9 on Game Development.)

This talk is an overview of what exactly is involved in game development – from the point of view of a programmer.

These are the major components of game development.

Game Platform

A game platform is the hardware-software combination on which a game runs. These are the major game platforms:

  • Console (e.g. Xbox 360, Wii, PS2/PS3).
  • Handheld
  • PC (Windows, Mac)
  • Mobile (iPhone, others)
  • Web Browser Based
  • Arcade Machines (i.e. the dedicated game play machines you see in video-games parlours in malls)

The platform makes a big difference to the kind of games you can build. For example, consider the consoles. Here the hardware is fixed. This is good because a game is a very optimized piece of software. So the more you know about the hardware, the more you can optimize, and the better will be your gameplay. (Compare with a PC game where it can be played on PCs with vastly different hardware capabilities. Then you end up programming to the minimum requirements, which is sub-optimal for the higher end PCs.)

Game Development Team

A game development team consists of the following roles:

  • Artists – 2D/3D artists and animators
  • Game Designers – Level designers, Gameplay designers, UI designers
  • Programmers – Graphics, Gameplay, AI engine, Physics, Networking, UI, Tools
  • Audio – Sound effects creators, music composers
  • Testers (Pune has a lot of game testing companies)
  • Special mention: The Crossovers – Technical Artists, Team Leads, Tester-Producer, etc.

Not all kinds of games require all these roles. A “big” game is a huge production, pretty much like a movie, and will hence need all these roles. Smaller games can do with fewer.

Interesting points: The Physics Engine in a game is a piece of software in a game which essentially enforces the laws of physics (as they exist in the game world). When you throw an object, how it flies through space is determined by the physics engine. When you fall, what happens to you, how much you get hurt; if you kick a door, will it break. Such things are determined by the physics engine.

Networking is needed in online games. Specially, an MMORPG (massively multiplayer online role-playing game) has hundreds of thousands of people playing simultaneously, and the various players are interacting with the game system, and with each other. All of this networking has to be managed at the game servers (which are in the cloud) and the game clients (which are installed on the users PC/console).

Game Development

There are two broad phases of game development.

First there is “content creation”. This includes things like creating the characters, animations, levels etc. This happens offline, before the game is “released”. The tools used are Maya/Max, Photoshop, Sound creation tools, and Game design tools. The other big chunk of program in a game software is the “runtime”. This is the server and the engine which interacts with the user and renders each frame of the game, and controls the game play.

The fundamental difference between animation and graphics in games and anywhere else is the “realtime” nature of the rendering. When doing animation/graphics for a movie, everything is computed beforehand, and it is simply displayed/rendered at runtime. However, with a game, this is not true. You need to keep gathering input from the user (for example, the current position of the user), and change the animation appropriately. So, the animation needs to be auto-created at runtime based on the inputs, and this needs to happen at 30+ frames per second.

Going below 30+ frames per second is just not permissible – the game will not feel smooth. Hence, the only thing you can compromise on is the quality/resolution of the graphics. Hence, in terms of pure graphical output, a pre-rendered video is always going to have better possibilities than what is possible in a game.

In any case, in most games, lots and lots of optimization happens to be able to render high quality graphics at 30+ FPS, using the best possible software and hardware combination. Thus, most games will try to use the graphics cards of the hardware to the fullest extent possible. All modern graphics cards are programmable in the sense that common graphics operations (like shaders) can be offloaded to the graphics card. The game engine will have sophisticated software that pushes as much work as possible to the graphics card.

The Game Runtime is broken up into two big parts. First there is the basic engine, which can be thought of as a framework for building games, and has building blocks like rendering, animation, physics, networking, sound. Another major feature of an engine is that it allows easy creation of different kinds of games, characters, levels, and general purpose scripting.

Thus, the idea is that there is a generic game engine which is not necessarily tied to any specific game, and on top of this, various different games can be built by the game designers. Typically, the same game engine will be re-used by a company to build and release many different games.

A game engine will typically come with “game creation tools” which are separate pieces of software which allow you to “author” games. Typical workflow: an artist uses tools like Maya/Photoshop to create the basic content, and the level designer of a game will use the game engine tools to import the basic content into the game. You might create a character in Maya,

Examples of game engines: CryEngine (Crysis, Far Cry, Aion: Tower of Eternity), Unreal Engine (Unreal Tournament, Unreal3, Gears of War. http://udk.com is available free for non-commercial use), Source Engine (Half Life, Counter Strike Source), Unity, Torque (Casual/web-based gaming).

Components of a Game Engine

  • Graphics renderer: all the computer graphics calculations (including ray tracing, lighting, refraction, reflection, etc). Crysis (the game) looks very good because the CryEngine graphics engine is very good.
  • Animation system: Define how your characters move. This includes defining the walk cycle (i.e. one full step of the character walking, which is looped to show a walking character).
  • Scene graph: A level in a game is a huge 3D (or 2D) space, with lots of things – characters, objects, lights. All of these need to be defined and instantiated. These need to be held in memory while the game is playing. Knowing what objects are where, and keeping track of them in memory is the job of a scene graph. The renderer shows you the view of what is currently visible to you, while the scene graph keeps track of everything that is “nearby”, and is the one who calculates what is and is not visible (and should hence be sent to the renderer).
  • Physics: As described earlier, the physics of the game world. When things are thrown, what is their trajectory. If something hits something else, how much doe it bounce. Compute the mass, the force, the acceleration, and apply the Newton’s laws (or another set of laws, if the game world has different physics than our own).
  • Networking: This most programmers should be familiar with.
  • AI: This is what actually defines how different characters (the computer controlled ones) behave and react. Note that you’re not always trying to create reality, or “human” behavior. All you want is a fun experience – not necessarily realistic.
  • Audio: Sound effects, and voice-overs.
  • UI: The interface for the game. Including inputs, options, etc.
  • Scripting: While the basic engine is programmed in C++, for defining what happens in a game, a low-level programming language like C++ or Java is not an ideal language to define the “gameplay.” For this, a scripting language like Lua, or Python is used. Or, like Unreal Engine, the engine might have its own scripting language. Compiling a game takes a long time (more than half an hour for a big game), so you definitely don’t want to write your game logic in a compiled language and require a full compilation every time you make a minor change.

Who would be interested in Game Development

If you want to make a career in game development, these are some things to think about:

  • You need to be interested in games, and should have some knowledge of games. That will make work more interesting
  • You should have played, and analyzed a variety of games – that way you know and understand what are the different possibilities out there
  • You should like working in a team. A game development team can be 100s of people, all working together to produce a single game. And if you’re not really a team player, you will not be able to function properly.
  • Good communication skills. A game development team has people from many different teams, with different backgrounds, and if you’re not good at communication, especially written communication, you might run into problems.

Once you’ve become a game programmer, you’ll find yourself using these skills a lot:

  • Mathematics!!
    • Linear Algebra: matrix operators, vectors, quaternions
    • Co-ordinate systems (remember your geometry?)
    • Trigonometry – basics, like 10th/12th std. level
    • Laws of physics (laws of motion, angular velocity/momentum etc).
  • Programming
    • C/C++. .NET, C# for tools. Scripting languages (python, lua).
    • Object-oriented programming.
    • Writing optimized code

But here is the biggest reason why you should get into game development:

  • Game development is at the cutting edge of technology. All the latest and best technology is used in games first, and only slowly and later does it trickle down into other fields of programming. Game development is the F1-racing of programming.

Links

Lookup these links for some further interesting reading for games.

My Experience at the IndicThreads Conference on Software Quality

(This post by Abhay Bakshi, a techie who has recently moved to Pune, is about the IndicThreads Conference on Software Quality that was held in Pune recently. This post first appeared on DZone, and is reproduced here with permission.)

Typically, it was about a week’s planning before I got to attend the IndicThreads conference.  I didn’t know that the conference was taking place on Friday until I got an invite by Harshad Oak through LinkedIn.  I took permission from my authorities at my work place, took Friday off and was looking forward to this 2-day conference in the city of Pune, India.

I had attended (TSSS 2003, USA), presented at (FIE 97, USA), and written about (NFJS 2005, USA) conferences in the USA — but had never attended one in India, specifically in Pune.  Honestly, I was eager to.

Expectations

From my background in attending conferences in the USA, the expectations were high in my mind — the glamour, the large-size attendance, the goodies and the prizes to receive, the signed copies of books from authors, the networking and food (!) for two consecutive days.

On many of these fronts, Q11 by IndicThreads delivered and delivered well!  Yes, they did a pretty good job indeed.

Benefits

Benefits to receive are up to the individual, I believe — how much you want to take away.  That includes the speakers too.  In USA, I had paid $675 USD from my pocket to attend an NFJS weekend show and my employer was also surprised (pleasantly) then. But even today, I benefit (because I choose to) from that attendance.  It becomes easier to get in touch with authors / speakers / fellow attendees.  That is just one benefit.  The other benefit is — from your regular everyday schedule, you get out and see in reality what other developers / IT engineers are doing.  That opens a whole new perspective and regains energies for you in multitude.

Who Hosted the Conference?

The Q11 conference was hosted by Harshad Oak (Rightrix Solutions).  Harshad is the first Java champion in India and has served and continues to serve the overall IT community in several ways.  For his achievements, he is not that old – in fact quite young. 🙂

The thought process, as put in by Harshad, could be felt all throughout the conference

The Actual Sessions!

Every session was little over an hour.  That was good so that an otherwise information overload could be avoided.  Timings of the speakers were awesome — plus it didn’t feel that the speakers were running a race against time at any point.

The conference covered the following topics (all slides available on Slideshare):

  • Image Based Testing – Application Technology Independent Automation (Girish Kolapkar)
  • Proving correctness of a multiplayer game server (Nirmalya Sengupta)
  • Continuous Integration: A Case Study (Vaibhav Kothari)
  • Cloud based Testing for Mobile Applications (Dada Mote)
  • Test Automation for Mobile Applications (Dipesh Bhatewara)
  • Test Automation on Android Using Robotium (Amit Dixit)
  • Testing Flash and Flex for Accessibility (Rashmi Aghor)
  • PerformFuzz the Web Interface (Aniket Kulkarni)
  • Keyword Driven Automation using Selenesse (Ameya Naik)
  • Platform Independent Migration Testing Framework (Vishal Harane)

All speakers and sessions were accommodated fine by Harshad and Sangeeta (his wife).

It would be unjust to pick only one speaker that stood outstanding — everyone did a great job (offered their 100% for the attendees).  The professionalism was at its best.  This was probably the first time in the last 15 years that I interacted so closely with professionals in the IT industry in India.  All this was a superb learning experience for me.

Particularly speaking, Dada Mote, just for his zeal to learn more and offer more, had done a fantastic job.  I was amazed to see that he was accompanied by his boss who arrived just to give Dada moral support.  They both drove in from Mumbai.  Dada knows what he is doing.

Again, I do not have any bias for any one speaker (don’t even know Dada Mote in person that well!), everyone did so very well for us.

Vishal Harane, for what he put together at his work place using ANT (just under 3 days), was simply a great experience to watch and learn from.  I can go on and on like this for every session, but the space is limited and I have to get back to my work as well.

My Comparisons with the Conferences in the USA

The comparisons with the conferences in the USA will loom over my mind, by default.  But I attribute a few things lacking to the growth aspect of conferences at IndicThreads.

My mind was tuned to having parallel sessions and being able to choose a session where I want to get trained.  At Q11, there was however only one big hall for learning!  I couldn’t think of many “lacking” points at all.  Harshad has good experience in arranging the shows.  The professionalism shown by speakers was one of the best, as I mentioned earlier.  The consistent slide formats, good designs, aspects on the content arrangement for maximum absorption by the slide readers, real-time Q & A sessions, quizzes and prizes were all welcome and gave a pleasant appeal to the overall event.

What Can be Better / New Ideas

An obvious general difference between East and West — usage of English (well, I struggle myself with arrangement and good choice of words, as you can see in this article) during presentation.  And so we do not need “perfect” skills, just slight modifications with an element of clarity transferred from that in the slides’ content to every sentence that you speak.  Again, that’s about clarity only and nothing about undertaking the usage of any fancy English.

When speakers implement (more) clarity during speeches, here is a new idea for this conference (just for the sake of it) –> Harshad can even think about live broadcasting of the conferences where people from outside India can join the live sessions.  Yes, Harshad can charge a fee for such attendance. 🙂

The Best Take-away Point

The best take-away point for me will be the personal interactions with the fellow attendees and speakers.  A few of the speakers are local to the Pune city, and therefore if I were to get / offer help at any point regarding new emerging topics, I can rush for a get-together to a place which is only at a drivable distance.

Harshad encourages local speakers to come out and respond to the RFPs (and participate).  Hopefully, in the future, there will be “parallel” sessions (!), offering choices of topics, at conferences like Q11.

What I like about Rails3 by Gautam Rege

(This article by Gautam Rege is based on a talk he gave at Techweekend #8. It was first published on the Josh Software blog, and is reproduced here with permission.)

This is NOT a post about differences between Rails 2.x and Rails 3 but these are some musings about what I love in Rails. A lot of goodies come ‘in the box’ (I hate saying out-of-the-box) with Rails3 and some of them have been there since early version of Rails but somehow less frequently used or talked about. I spoke about this at Techweekend #8 and the presentation is here.

Bundler

Ever had a production system crash one day – without any code deployment or even anyone logging in. After the initial ‘its not me’ excuses, one system administrator says ‘Hey, I had updated the system libraries’. Having been burnt already before (hopefully), you check on the system and find that some system library has been upgraded and some gems have been upgraded and that is causing incompatibility between other gems etc. We had the case where rack (1.0.1) was upgraded to rack (1.1) causing incompatibility with the Rails gem we were running! The fix is simple — upgrade or downgrade your gems or libraries and you’re on your way. A few days later, another developer needs to deploy a simple sinatra application. He takes the latest version which requires rack > 1.1 and it automatically upgrades the gem. Boom! Your Rails app crashed again.

Did I hear you freeze the gems? Nah – not a good approach, as it causes your application deployment bundle to be huge and ‘frozen’. Every application you use would require to freeze gems and this does not really solve your problem.

Bundler (by Yahuda and Carl) built this awesome gem which is now the de-facto standard for any Rails application. In fact, it was so cool, its not Rails 2.x compatible and very highly recommended. You can now specify your dependencies in a Gemfile and prevent any clashes with any other gem versions and their dependencies. Since the gems are installed in the system default location (not frozen in your app), it means it us re-usable and version friendly!


source "http://rubygems.org"

gem "haml" # the latest version
gem "rack", "~>1.1" # v1.1 or greater
gem "nokogiri", :git => "git://github.com/tenderlove/nokogiri.git"
gem "splat", :path => "~/Code/splat" # local code base

group :test do # only in test environment
gem "rspec", :require => "spec"
end

UJS

Unobtrusive Java Script has been around for ages now but Rails lingered with prototype.js. Now, with the awesome features of JQuery, we can easily use UJS to solve some common and nagging problems:

  • Avoid submit if button clicked twice!
  • Make non-get requests from Hyperlinks!
  • Submit form data via Ajax

Add :remote => true to hyperlink, forms and other elements. This adds the data-remote=true in your html properties. The ‘live’ JQuery function binding kicks in and sets up the events for various elements. Simple and awesome – this is available here.

XSS

Cross site scripting has been a pain to handle for a long time. Rails does this under covers – you dont event need to know too many details:

protect_from_forgery is automatically added during basic rails project creation. This ensures that every form created by the application has an authenticity_token as a hidden data field. During a post request, this is verified and thus ensures that the source of the form creation is the same server – this avoid session stealing where a malicious form is posted to your server using an authenticated user’s session!

While using UJS, you need to add csrf_meta_tag in your layout to avoid silent Ajax errors.

SQL injection is cleanly avoided with new where syntax:

# Wrong
where("user_name = '#{user_name}' AND "password = '#{password}'").first

# Correct
where("user_name = ? AND password = ?", user_name, password).first

# Correct and clean
where(:user_name => user_name, :password => password).first

In Rails3, all html spewed out is HTML SAFE! So, you cannot leave gaps for non-HTML safe code, even by mistake! If indeed you do trust the source, you can use the ‘raw’ method to spew out the HTML as is.

Rails Eager Loading

The N+1 query problem is fairly common and largely ignored until you hit serious performance issues.  Straight out of the Rails guide, consider the case

clients = Client.all.limit(10)

clients.each do |client|
puts client.address.postcode
end

There are 11 queries fired here. Using the :includes construct, Rails does eager loading like this:

clients = Client.includes(:address).limit(10)

clients.each do |client|
puts client.address.postcode
end

Here only 2 queries are fired as Rails includes the address relationship too while fetching the client objects.

Transliteration / Babosa

What happens to your permalinks if a user enters the information in Arabic? We faced exactly this issue and were asked by our client to prevent input which is not English. Woh! ActiveSuppprt in Rails3 addresses a lot of these transliteration issues:

"Jürgen Müller".to_slug.transliterate.to_s #=> "Jurgen Muller"

Performance using Identity Map

The awesomeness of Rails progression – As of this inclusion the Identity Map pattern is now part of Rails 3 caching mechanism. An identity map is a design pattern used to improve performance by providing a in-memory cache to prevent duplicate retrieval of the same object data from the database, in context of the same request or thread.

Optimistic Locking

A really old concept which has been there since REALLY early versions of Rails. This is commonly overlooked but is critically important when it comes to concurrent request processing. By adding a ‘lock_version’ field in the table, Rails automatically kicks into optimistic locking mode and prevents concurrent writes when the data is stale. The StaleObjectError is raised incase the lock_version is not the same as when it was read.

Named Scopes

This is almost cliched now 🙂 Mames scopes were added since Rails 2.1. Its one of the things I love about Rails. The scopes are chained together and the query is fired only when the data is really needed. This is excellent for report filters! Adding new filters is a breeze as its only one of the scopes to be chained. Remember that scopes do not return an Array but an association object like has_many. That is how they can be chained to other scopes.

I’m pretty sure I have missed some things here. Do comment on what features you like best about Rails3! 😉