Monthly Archives: March 2009

Seminar: Strengths and weaknesses of various programming languages – 28th March

What: A presentation on the strengths and weaknesses of various programming languages, and how to choose one for your application, by Dhananjay Nene
When: Saturday, March 28th, 4pm
Where: SICSR – Symbiosis Institute of Computer Studies and Research – Map
Registration and Fees: This event is free for all. No registration required.

Details:
Confused about whether to use C/C++, or Java for your application? Or unsure of whether to go with Python, or Ruby, or PHP, or one of the many other “new” languages? Are you wondering whether it is worth the trouble to learn a hot new language?

Popularity of programming languages, or the number of jobs being offered for some programming language are not really good indicators by which to make your choice. It’s time to get some data on the fundamental technical differences between the major language groups today. It’s time to get some useful insights on the business implications your choice.

Dhananjay will discuss the relative merits and weaknesses of the major classes of modern programming languages and they reasons why you should choose one over the other for a specific application. He will cover both – technical issues in choosing a language, and business reasons.

This is targeted towards both – developers as well as managers who want to go past the religious debates over programming languages and want to be able to take decisions based on technical/business reasons as opposed to faith.

To get a primer for the material to be covered, check out the article Dhananjay wrote yesterday about how to improve your web based software development and maintenance ROI with dynamic programming languages

About the author – Dhananjay Nene

Dhananjay is a Software Engineer with around 17 years of experience in the field. He is passionate about software engineering, programming, design and architecture. He did his post graduation from Indian Institute of Management, Ahmedabad, and has been involved in Senior Management positions and has managed team sizes in excess of 120 persons. His tech blog, and twitter stream are a must read for anybody interested in programming languages or development methodologies. Those interested in the person behind the tech can check out his general blog, and personal twitter stream. For more details, check out Dhananjay’s PuneTech wiki profile.

Reblog this post [with Zemanta]

Improve your web based software development and maintenance ROI with dynamic programming languages

After we carried a few quick articles on why you should learn more about Ruby and Ruby on Rails (take 1, take 2) last month, we decided that we wanted to give people a much deeper article on why these new languages (Ruby, Python, PHP) and frameworks (Rails, Django) are setting the web world on fire. We invited Dhananjay Nene to write an article with an in depth discussion of the technical reasons how these new languages differ from the older ones and when to choose one over the other. He responded with this article which, as an added bonus, also includes the business reasons for your decisions. At the request of the community, Dhananjay is also giving a talk on the relative strengths and weaknesses of different programming languages on Saturday, 28th March, 4pm, at SICSR. All those who found this article interesting should definitely attend.

Introduction

Programing language selection is often a topic that elicits a lot of excitement, debate and often a bit of acrimony as well. There is no universally superior programming language that one can recommend, so I tend to generally disregard most language opinions which say ‘X language is the best’, without specifying the context under which it is superior. Finally most language debates often deal with the technical issues and not the ROI issues. Hopefully I shall be able to address this topic without being guilty of any of these problems.

So what languages are we referring to here ?

Official Ruby logo
Image via Wikipedia

The range of languages that fall under Dynamic Programming Languages category is rather extensive. My experience is primarily limited to Python and to a lesser extent PHP, Ruby, Javascript, and Groovy. For the rest of this article, I shall be primarily referring to Python or Ruby when I use the word dynamic languages, though many of the references may continue to be applicable and relevant for a number of other dynamic programming languages.

As I describe the technical characteristics, I shall also continue to attempt to address the business aspects as well, so you might find this article at a little techno-business level. Assuming I am able to excite their interest, the tech guys would not find sufficient technical details and would be hungry to hunt for more, and while the business guys would get a little teased with the possibilities, they will not quite get the ROI served in the traditionally formatted excel spreadsheets. Being aware of that, I continue down this path with a feeling that this perhaps will be the most appropriate level for me to abstract this article to.

Characteristics of Dynamic Programming Languages.

Let us quickly review some of the characteristics :

CPython
Image via Wikipedia

Object Oriented : Many dynamic languages support full object orientation. There are many who don’t necessarily buy the benefits of Object Orientation, but it is my strong belief, that once a piece of software grows beyond a certain threshold of complexity and / or size, Object Orientation starts delivering very strong dividends. There are a few areas such as highly complex, algorithmic processing which might be better suited for functional programming. However a majority of the medium-to-large sized web applications are better served by OO. The empirical evidence at least bears out the fact that most of the most popular languages today (except C) are Object Oriented. However this still is a very very large class of languages which in them include C++, Java, PHP, Python, Ruby etc. The one area where some dynamic languages separate themselves from the others is in the notion of “everything is an object”, ie. primitives such as numbers, functions are all objects by themselves.

Business implications: OO code well designed and implemented allows for a substantial reduction in maintenance costs. When working with a team which is up the curve on OO, it is likely to lead to lower costs and time on inital coding as well. On the other hand, both training costs and skill requirements are higher for fully OO languages. If you are already using partialy OO / hybrid languages such as PHP, C++ or Java, and are convinced about OO, using fully OO languages such as Python or Ruby will help you leverage the OO capabilities even further.

Duck Typing : In very loose terms, duck typed languages do not require you to declare an explicit interface. You send an object a message (ie. invoke a function or access an attribute) and if it can respond to it, it will, and if it can’t it will result in an error. Duck typing is a specific typing system which is a subset of a broader system called Dynamic Typing, which often makes for an interesting debate with its counterpart – Static typing : Static and Dynamic Type checking in practice. For people well grounded in static typing alone, this can sometimes seem to be sacrilegious. I am convinced that duck typing makes writing code much much faster for two reasons – a) You now require to write fewer lines of code and b) You often don’t have to keep on regularly waiting for the compiler to do its work. There is also a substantial capability enhancement that dynamic typing makes to the language type system, which allow the frameworks to build dynamic types on the fly. This in turn offers the framework users many more capabilities than frameworks written in other languages. That is why it is nearly impossible to write frameworks like Rails or Django in Java (You can modify the class loaders and use byte code generation to generate the new types, but the compiler can’t see them so you cant use them). That is also why there is a lot of anticipation of using JRuby, Jython and Grails on the JVM since the languages underlying them (Ruby, Python and Groovy respectively) bring the dynamic typing capabilities to the JVM platform.

Business Implications :Writing code is much much faster. Maintenance depending upon the situation can sometimes be more or less difficult in case of dynamic typed languages. Refactoring is usually a lot more difficult in case of dynamically typed languages since the underlying type system is not able to infer sufficiently about the code to help the refactoring tools, as is possible in case of statically typed languages. It is my opinion that a skilled and trained development team using dynamic languages can generally substantially outperform another equally capable team using static languages. Insufficiently or poorly skilled development teams however can lead to very very different kind of pitfalls in these class of languages. In both cases the code becomes difficult to change or maintain due to a) cryptic code in case of dynamically typed languages and b) extremely large code bases in case of statically typed languages. Both are undesirable situations to be in but if I had to choose between one of the two, I would go for being in the cryptic mess since it is at least manageable by bringing in external skilled help.

Metaprogramming : Metaprogramming is in loose terms the ability of programs to write programs. A large proportion of developers may not use this capability too frequently. Specifically in web application development it gets used as a mechanism to transform one set of datastructures which a programmer specifies into code at runtime. As I point out later in this article, it in fact is a very important element in designing common frameworks and libraries which in turn offer substantial capabilities including small code and easier maintenance. A quick note to state that metaprogramming is not code generation. In case of code generation, one uses the generator to generate code which is then compiled. A big limitation with this is the fact that often people modify the generated code leading to really tough maintenance nightmares and the fact that it is a two stage process which is prone to more errors. Metaprogramming results in new code “coming to life” so to speak while your program is running.

Business Implications : Read on, they will get covered in the final roundup. They are large and they are positive.

Function blocks/objects, iterators, closures, continuations, generators: I will not go into any substantial details of this issue except to say that small pieces of code logic can be handled in a much much more concise way than if these weren’t supported. While many situations may not need closures support, you will be glad to have them on your side when needed.

Business Implications : Helps having shorter, cleaner code leading to lesser development and maintenance costs. Another significant positive is that your developers are just likely to be so much happier since they get some truly nice building blocks for concise and elegant expression of their logic. Can’t think of any significant negatives.

There are a full range of other capabilities, but none come to mind immediately as something that have strong business implications as well.

The role of frameworks

Ruby on Rails
Image via Wikipedia

When did these languages say Ruby and Python originate ? Most people are likely to be a little surprised if the answer is in the last millenium. Yet Guido von Rossum started working on Python in 1986 and Ruby was released in 1992. Python has been rather well known within the scientific community and perhaps a bit within the systems / OS utility programming communities for quite some time. However both languages grabbed a large mindshare only post 2005. A big reason for their popularity (especially in case of Ruby’s case) came from the popularity the frameworks which used them. Ruby on Rails for ruby and Django (to the best of my knowledge) for python. These frameworks combined the language capabilities with the learnings of good design practices for internet applications (eg MVC, declarative validations, simple ORM etc) into a simple usable package, which developers could take and build web applications quickly. There are examples of people having built simple web apps within a day and medium complexity apps in 1-3 weeks using these frameworks. The languages are the ingredients, the frameworks are the cooks – a great combination for serving great meals. Now you will find many such frameworks in these languages, including some which have better capabilities for building more sophisticated / complex applications eg. Merb and Pylons.

I am not too sure of how many people are exactly aware of the role of metaprogramming in the frameworks’ successes. I am willing to believe that but for metaprogramming, these frameworks simply would not have achieved anywhere close to the success they achieved. It is metaprogramming which takes the datastructures as defined by a developer and converts it into runtime code implicitly, saving the developer lots of time and effort. So even if most developers don’t actively write metaprograms, their lives are so much easier. Metaprogramming capabilities are also the reason why it is virtually impossible to write similar frameworks in Java. However if you are on the .NET or JVM environments, things are definitely looking encouraging with the possibilities to use IronPython or IronRuby on .NET or JRuby or Jython or Groovy+Grails on the JVM.

Business implications : If you are focused on scientific or desktop or highly algorithmic applications, where python especially is used extensively, you are likely to get benefits from these languages on their own merit alone. For web applications you will see the maximum benefits by using the web MVC frameworks along with the languages. I submit that on the whole you are likely to see very substantial reduction in development, enhancement and maintenance times – sweet music for any end user, investor or project manager.

Increased Business Agility

There is one more reason why I believe these languages are especially helpful. They help by increasing development agility to an extent where it now allows for the business to be more agile. You can get a first prototype version up in weeks, take it around to potential users, and gather feedback on the same. Incorporate elements of this feedback into the next release of working code quickly. The business benefits of such a scenario are tremendous. You might wonder that this is a process issue, so what does it have to do with a language selection. I would submit, that languages which allow changes to be made faster, help support this process in a far superior way. Another equally important facet is the superior risk management. Since you are able to build features with lower investments, you are able to get a series of customer feedbacks into your decision making process much faster. This helps being able to come up with a product that really meets the customer expectations much earlier. This happens by allowing the better features to come in earlier and also by allowing the lesser important or lesser relevant features to be decided to be deferred earlier. That’s precisely the reason why the dynamic languages have found a strong acceptance in the startup world. I believe the increasing agility which is often required in the startup world, is and will continue to be increasingly required of established enterprises. Precisely the reason why I believe these languages will continue to do better in the enterprise space as well. Finally, these languages make it relatively easier to tell your business sponsor – We will work with you on imprecise requirements rather than spending months on nailing down requirements which anyways are likely to change later. This has both a pro and a con especially for outsourcing situations. It is likely to allow for tremendous customer delight in terms of a vendor that works with him in such a flexible manner, yet it does introduce challenges in terms of how the commercials and management of the project are handled.

The reason I would like to especially point out increased business agility is because programmers don’t often visualise or evangelise it much, but when I wear a manager’s hat, it is perhaps the most compelling benefit of these languages.

Concluding

As I said earlier, there is no single universal language which is the best for all scenarios. There are some scenarios where using dynamic languages will not be helpful

Programming language book sales 4Q2008

A Treemap view of sales of programming language books by O’Reilly Media in 4Q2008. The size of a box represents the total sales of a book. The color represents the increase or decrease in sales compared to same quarter in 2007. Green = increase, bright green = big increase, red = decrease, bright red = large decrease. See full article at O’Reilly Radar for lots of interesting details.

When not to use these languages

  • You are building a simple / small application and don’t have the available skill sets. One exception to this is where you decide to use it in a simple application to allow yourself a non risky mechanism of building these skillsets.
  • Extremely High performance requirements. However please make sure that you really need the high performance capabilities of say a C, C++ or Java. In my experience 80% of developers like to believe that they are building highly performant applications where the maximum speed is a must have. Yet the top 10% of them are facing far far more critical performance requirements than the remainder. Unless you are convinced you are in the top 10%, you should certainly consider dynamic languages as an option. Moreover in case of most high performance requirements, these can sometimes be boiled down to a few inner loops / algorithms. Consider implementing the same in C, / Java or other .NET languages (depending upon the choice of your dynamic language interpreter implementation)
  • You have an architecture standard in place which does not allow using these languages. If you are convinced your applications are better served by using dynamic languages both from your individual application and an overall enterprise perspective, consider taking the feedback to your standards setting body to see if you can pilot a different approach. Also evaluate if the .NET or JVM versions can help you comply with the architecture guidelines.
  • You are unable to commit to the retraining requirements. While these languages are easy and powerful to use, leveraging that power can require some amount of retraining. If that does not fit your business plans, since the retraining effort could impact immediate and urgent requirements, that could be a reason to not use these languages. However in such situations do consider investing in building this skill sets before you get to another similar decision point.
  • You need a very high levels of multithreadinging as opposed to multi processing support. While this is not a typical situation for web applications, you should be aware that most dynamic languages have some limitations in terms of multi threading support. This actually is not necessarily an issue with the language as with the implementation eg. the C implementation of python has the notorious Global Interpreter Lock which constrains you from being able to use more than a handful of threads per processes efficiently. However the same restriction is not present in Jython (the jvm implementation of python). This is likely to be an issue for a miniscule percentage of the web applications market for the primary reason that multi process / shared nothing architecture styles often work quite well for many web applications and they don’t really need multi threading.

So where’s my return on investment ?

First of all lets talk of the investment part. If you get into it in a paced approach, the investment may not be that great. Start with a team size of anywhere between 2-6 people (depending upon your organisation and project size). Think of 15 days of intensive training followed by a 2-6 months coming up the curve effort (more likely 2 than 6). Make sure your first project is not a critical one under tremendous business pressure. This can be subsequently followed by more people getting retrained as necessary. In the longer term it might actually help reduce your incremental investment, since it might be much easier to ramp up new programmers in Ruby or Python than say Java or C#.

Secondly lets look at the incrementally higher costs. You are likely to need people who are a little bit more capable in terms of understanding and debugging the same logic expressed in fewer lines of code (that sometimes can be a challenge) and then be able to modify and enhance the same. This may increase your testing and fixing costs in the earlier days. Finally while the fewer lines of code can make refactoring easier, you could find that your total refactoring costs are a little higher.

Now the returns part. I am convinced that the increased business agility is the strongest return in business terms. Immediately after that is the substantial reduction in development, enhancement and maintenance times. If neither of these benefits are appealing, when contrasted with some other issues that you might perceive, maybe considering dynamic languages in your context is not such a great idea.

One more factor that I would of course encourage you to evaluate from a business perspective are the implications for you if your competition (assuming it is not already using them) started using these languages. The implications would vary from case to case, but it could also help you decide how important this issue is for you.

About the author – Dhananjay Nene

Dhananjay is a Software Engineer with around 17 years of experience in the field. He is passionate about software engineering, programming, design and architecture. He did his post graduation from Indian Institute of Management, Ahmedabad, and has been involved in Senior Management positions and has managed team sizes in excess of 120 persons. His tech blog, and twitter stream are a must read for anybody interested in programming languages or development methodologies. Those interested in the person behind the tech can check out his general blog, and personal twitter stream. For more details, check out Dhananjay’s PuneTech wiki profile.

Reblog this post [with Zemanta]

Introduction to Engineering Simulations (CAE)

(This article giving an overview of the field of Computer Aided Engineering has been written for PuneTech on our request by Dr. Ajey Walavalkar, regional manager of services and support at Ansys Fluent India, a company specializing in CAE and CFD applications and services, which has a development center in Pune. See the end of this article for more about Ajey.)

In the earlier PuneTech article “An Overview of CAD,” Yogesh and Amit have provided a very good overview of the CAD technology spectrum. There, we learnt where and how “Analysis” and “Simulations” fit in the overall scheme of CAD. This article is intended to provide a broad overview of the area called Engineering Simulations, which spans across the above mentioned “Analysis” and “Simulations” fields on the CAD canvas.

What are Engineering Simulations?

The analysis of vibrations and the dynamical behaviour due to excitation forces have been applied routinely to cable-stayed bridges using SMR devised analysis tools. Note that similar techniques have been used to analyse the resonance behaviour of large floating bridge structures.

The example shows an eigenmode of a large cable-stayed bridge (model and analysis with B2000 by The Dutch National Aerospace Research Institute (NLR)). The figure displays a vibration mode, the shape being artificially amplified to emphasize the deformation. Source http://www.smr.ch/services/csm

Let’s say you want to build a bridge. Not just any bridge, but a massive suspension bridge to rival the Golden Gate Bridge in San Francisco Bay Area. How do you decide the type of steel, the span length, the tower height, the thickness of the cables, the depth of the foundations, and other design parameters? You will wonder that if this problem was solved in the 1930s then why is it tough today? The simple answer is, ‘Solved? Yes! But at what cost and effort?’ Previously, the simple solution for most tough engineering problems was to ‘over-engineer’ the solution by building in a ‘huge factor of safety’. Today, this design process is lot more accurate and efficient. Today, the engineering team will start off by considering the effects of vehicles (weights and speeds) plying on the bridge, the wind forces that will sway the bridge, the waves that will hit the foundation, the steady long-term corrosive effects of weather, etc. These effects can studied by mathematically modeling these factors and ‘simulating’ them with a help of a computer. Such ‘simulations’ greatly help today’s engineers to come up with the exact design that is safe and that saves time and costs.

Wikipedia defines Simulation as follows:

Simulation is the imitation of some real thing, state of affairs, or process. The act of simulating something generally entails representing certain key characteristics or behaviors of a selected physical or abstract system.

Engineering simulations are simulations applied to engineering problems. These can range from simple “back of the envelope” calculations to full fledged systems simulations using High Performance Computing.
Mathematical modeling and physical modeling are two main aspects of engineering simulations. Mathematical modeling refers to the description of a particular phenomenon in terms of mathematical equations. E.g. If you wish to find out the distance a canon ball will travel when fired from a canon at certain angle, at a certain speed; you can write some mathematical expressions and solve them to calculate this distance. This is mathematical modeling. Now suppose you are firing that canon ball at a mountain cliff and the ball is going to bounce off and roll down the slopes of the mountain, how do you find out where that ball will end up? Here you need to also consider the physical structures and that leads you to physical modeling.

Uses of Engineering Simulations

Today, computer aided engineering simulations are used extensively in designing and development of almost all industrial products. In addition to product designing, simulations find their uses in troubleshooting of existing systems and research & development of new processes. Many times the field of computer aided engineering simulations is also termed as Computer Aided Engineering (CAE). There are numerous software products available in the market and they offer variety of engineering simulation capabilities. Many organizations also use their in-house built simulation software products that capture their time proven design practices.

There are many objectives in performing engineering simulations:

  1. During product design cycle, engineering simulations enable the designers to evaluate various design options without getting into costly prototyping and testing. Use of simulations in the design process can help narrow the design choices to very small set that can be taken to the prototyping and testing phases. Even with physical testing, one can inspect and measure only a small number of variables at few select locations. Whereas simulations can provide visual information on all the variables of interest at all locations inside the simulated space.
  2. Simulations can help troubleshoot deviation of actual performance of system/product from the desired one.
  3. Simulations can help designers and analysts to evaluate response from the product or system, to ‘highly-off’ design conditions, e.g. evaluating the safety of a nuclear reactor facility in hurricane conditions etc.

What is involved in performing engineering simulations?

Animation of electromagnetic simulation showing development of magnetic flux lines.

Animation of Electromagnetic Simulation showing development of magnetic flux lines. Source http://www.ansys.com/solutions/electromagnetics.asp

The domain of engineering simulations is mainly divided based on the physics that is captured in the simulation. Based on this criterion, the domain is broadly categorized as follows

  1. Structural analysis Simulations
  2. Thermal & Fluids Simulations or Computational Fluid Dynamics (CFD) simulations
  3. Electronic Design Automation

In any type of engineering simulation, there are three main stages.

  1. Pre-processing: This involves determining the region in space that one will need to use in simulation. This region, (with all the necessary geometry details that are needed to attain the goals of the simulation) is then drafted on a computer using various CAD software tools. This space domain is then discretized into various small volumes or elements called computational cells. This is called meshing or gridding of the domain. Depending on the physics involved, the extent of the physical domain, the accuracy desired and the computational resources that are available, this mesh or grid can range from a few hundred cells to few hundred million cells. Ansys recently broke the Billion cell barrier.
  2. Solving the governing equations: This step involves solving the governing mathematical equations that describe the physics that one desires to capture at all the computational cells. Finite Element Method (FEM), Finite Volume Method (FVM) and Finite Difference Method (FDM) are the most commonly used numerical techniques that enable solving the governing partial differential equations on discretized domain on computers. To perform these calculations, many inputs need to be provided. The results achieved from the simulations are directly dependent on the inputs provided. Techniques of parallel computing enable use of multiple cpus on a network to be used for solving a single simulation. In this technique, if you have a mesh with say 2 million cells, and have a network cluster of 8 cpus, each CPU can solve equations for 0.25 million cells and thus the simulation time can be reduced significantly as compared to a single CPU solving equations for all 2 million cells.
  3. Post-processing: This stage involves understanding and analyzing the results of the simulations. The simulation software tools provide a mix of visual as well as alpha-numeric reporting of various variable of interest to the user so that the user can derive the information from the simulation needed to fulfill their objectives.

Most of the engineering simulation software tools provide connectivity to variety of CAD drafting packages so that geometries can be imported in from various different sources. Many of them provide ability to customize the solvers such that users can add their own/ proprietary physics/knowledge in the simulations. The post-processing allows results to be ported to various other analysis tools including optimization tools. Through these customizations, many users of these software tools have embedded the engineering simulation technology deep into their design process. Of the software tools available in the market, many are general tools that can be used by any industry vertical where as there are few tools that are developed for only one or few industry verticals and are easier to use to simulate applications in that particular industry.

Future of engineering simulations

Animation of FLUENT CFD simulation of flow over an elite male swimmer in the glide position. Source: http://www.fluent.com/news/pr/pr69.htm.

At present, most of the software tools available in the market are solving various physics involved in the real life process or equipment separately. However, in reality all these physics occur simultaneously and affect one another. The world of engineering simulations is moving rapidly towards incorporating multiple physics and their interactions to provide more reliable predictions. The engineering product development community is exploring, what is known as “Simulation Driven Product Development”, so that full benefits of engineering simulation technology can be leveraged to their competitive advantage. Some of the major software providers in this space have already started offering multi-physics solvers that enable organizations to march in this direction.

Another new facet that is coming in focus now is of knowledge management. Use of these simulation software tools, is generating a lot of engineering knowledge which the companies would like to leverage in their future design processes. With this need in mind, integrated engineering knowledge management platforms that will work seamlessly with the engineering simulation tools are being developed.

Engineering Simulations scene in Pune

Pune has attracted most of the main players in this exciting domain.

Ansys Inc, one of the leading companies in developing the engineering simulation software tools is present in Pune. Ansys has development, testing, sales, support and services functions for India based as well as worldwide customers being conducted out of the Pune office. Ansys develops structural analysis, CFD, EAD as well as optimization tools that are used widely in almost all industry segments.

In addition to Ansys, companies such as Siemens PLM, MSC Software, Abaqus also have presence in Pune.

Pune also has a growing list of companies that are using these engineering simulation softwares. Companies such as Cummins, John Deere, Dow Chemicals, Eaton Corp, Honeywell, etc have set up their product development centers in Pune which use these tools. Tata Motors, Tata Technologies, research wing of TCS, TRDDC and Tata’s new venture in HPC, CRL are also exploring the field of engineering simulations actively. Additionally engineering services consultants such as Tridiagonal, Pacific Mindware are also based in Pune.

Education institutes such as COEP too are now well equipped and have elective courses that allow students exposure to this interesting field.

About the author – Dr. Ajey Walavalkar

Ajey has over 10 years of experience in the Computational Fluid Dynamics industry. Currently, he is a Regional Support and Services Manager for Ansys Fluent India, in Pune. He has experience in successfully simulating various applications across industry domains, building teams of engineers for delivering CFD projects, support and services in an offshore setting. Ajey has a Ph.D. in Mechanical Engineering from Pennsylvania State University, USA, and a B.E. in Mechanical Engineering from COEP.

Reblog this post [with Zemanta]

Pune Flex Users Group Meet with Raghunath Rao, Tech Evangelist, Adobe – 12 Mar

Adobe Flex
Image via Wikipedia

What: Pune Flex Users Group meeting with Raghunath Rao, Tech Evangelist, Adobe
When: Thursday, 12th March, 5:30pm
Where: Symbiosis Institute of Computer Studies and Research, 7th Floor, Atur Centre, Gokhale Cross Road, Model Colony. Map.
Registration and Fees: This event is free for all to attend. Please register here

Details:
PuneFUG (Pune Flex Users Group) is an RIA discussion forum primarily focussing on Adobe Flex and related technologies. This is the place where Pune Adobe developers/designers discuss on user group activities and happenings.

PuneFUG will meet for a general get-together on Thursday evening at SICSR. Raghunath Rao, will speak about latest Adobe technologies and practices. In addition if you have any interesting Flex/Flash application to show the group and get feedback, bring that along.

More details about PuneFUG:

Reblog this post [with Zemanta]

Breakfast with TiE (The Indus Entrepreneurs) – Mar 12

TiE Pune LogoWhat: An informal get-together with entrepreneurs from The Indus Entrepreneurs (TiE), Pune
When: Thursday, 12th March, 8:30am to 9:30am
Where: PYC Hindu Gymkhana, Near Deccan Gymkhana, Bhandarkar Road, Pune
Registration and Fees: Anybody can attend. Fees are Rs. 10 for TiE members, and Rs. 50 for non-members. Send mail to namita[dot]shibad[at]gmail[dot]com.

Details:
This is an informal event with no specific agenda. During this event, we can ask the TiE members to share their story. It can be followed by discussions on any current topic and general chat session.

It’s a sit down fixed menu breakfast – Two items + tea/coffee

Around the table, 3 associate members will present their company and interests.

This will also be a chance for new entrepreneurs, and wannabe entrepreneurs to interact with successful entrepreneurs for guidance and mentorship.

Zemanta Pixie

Spread PuneTech – tell your friends why you like PuneTech

Please consider putting this (or a smaller badge) on your blog/website. See the bottom of this post for other sizes.
Please consider putting this (or a smaller badge) on your blog/website. See the bottom of this article for other sizes available

Today is PuneTech’s first birthday, and as a birthday gift, we are asking our readers to spread the word about PuneTech through emails, blogs, twitter and other means. (Update 1: Honorary Punekar Sushrut Bidwai has written a nice post giving the reasons why he likes PuneTech. I think he has managed to articulate very well a lot of the things we have been striving for with PuneTech. Please take a look at the article and comments there. Update 2: The community is doing a better job of articulating what PuneTech is than we are able to do ourselves. Dhananjay Nene, has a post giving insights into the role that PuneTech plays in the tech community in Pune. Update 3: Sahil Khan of The Tossed Salad called me up for a mini-interview to produce this article. Update 4: Rohit Srivastwa has a great post about what “PuneTech is…” according to google)

Why the blatant begging? Read on.

PuneTech is a non-commercial, by the community, for the community site. Which means that any and all publicity/marketing for PuneTech happens only one way: word of mouth. And that’s your mouth and your blog that we are talking about. So here’s what we are asking for:

If you don’t love PuneTech, let us know why. And give us some time to fix it – we are volunteering only part of our time on this. But if you do love PuneTech, help us spread the word. Send email to a few of your friends who are techies in Pune asking them to subscribe to our updates by email or via RSS (free!) That is the main thing we care about – more subscribers. Because, the value that a community provides to its members is directly proportional to the square of the number of members. Also, if someone visits the website directly, there would be days when they forget, or are too busy, and miss some updates. In contrast, a subscriber is forever.

The other thing that we care about is google rank. A search for “Pune technology” results in a PuneTech page showing up as the second link (at least for us – google search results are different for different people, so please don’t flame us if you see different results). Strangely, that link is to the PuneTech wiki page about the PuneTech linked-in group. And, sometimes there is a sub-link to Amit’s article about whether Pune can emulate Silicon Valley. While I don’t understand why the PuneTech front page is not ranked higher than these articles, I am happy that at least this showed up. (By the way, have you joined the PuneTech group on linked-in? Considering that it is the second search result, you probably should 🙂

But what I find extremely irritating is that the first link Google throws up for this search is a ridiculously outdated, ridiculously incomplete listing of IT companies from PuneDiary (http://www.punediary.com/itcomp.html). I cringe to think that this is the first impression about Pune for people all over the world searching for “pune technology.” I’ve tried contacting the PuneDiary people, and suggested that they update that page with PuneTech content (all our content is CC-licensed). I even offered to update the page myself and keep it updated without asking for anything in return. But no response.

So now I’d like to go on the warpath. I would like to knock that page off the top of the google search results. I want “pune technology” to be linked with the PuneTech front page. I believe that, while not perfect, it is a much better indicator of the activity and energy of the software technology community in Pune.

So who is with me? If you agree, please link to the PuneTech front page from whereever it is appropriate. And let others know why. If possible, put up an “I love PuneTech” badge. (If you don’t agree, please let us know why in the comments below, and suggest an alternative. Because the current number #1 search result is completely unacceptable.)

Here are the “I love PuneTech” badges that for you to put up somewhere. If you would like a different size, please let us know. If you are a graphic designer and can come up with better badges, please, please do so and let us know.

I love PuneTech medium

http://punetech.com/files/I_love_punetech_logo-135x80.gif

I love PuneTech medium

http://punetech.com/files/I_love_punetech_logo-200x119.gif

I love PuneTech medium

http://punetech.com/files/I_love_punetech_logo-300x178.gif

For larger images (i.e. if you want to make a T-shirt or a mug) check out

http://punetech.com/files/I_love_punetech_logo-506x300.gif

and

http://punetech.com/files/I_love_punetech_logo_large.gif

Dhanesh Shivanandan of Pune IT Labs has created some more badges for us.
I love PuneTech

http://punetech.com/files/I_love_punetech_logo2-120x120.jpg

I love PuneTech

http://punetech.com/files/I_love_punetech_logo2-150x150.jpg

I love PuneTech

http://punetech.com/files/I_love_punetech_logo2-200x200.jpg

PuneTech is One – Give us a birthday gift, spread the word

Please consider putting this (or a smaller badge) on your blog/website. Click on the image for details.
Please consider putting this (or a smaller badge) on your blog/website. Click on the image for details.

Today is PuneTech’s first birthday.

The first post on PuneTech was on March 6th 2008. (Check it out, you might still find that article interesting.) In the one year, we have come a long way. We’ve learnt a lot. Some things we tried haven’t worked out, and some things we tried succeeded beyond our expectations. But overall, the feedback we are getting is that people like what PuneTech has to offer. So, on our first birthday, we feel like celebrating, and we want our birthday gifts – if you like PuneTech, please take some time out to spread the word, and get other people to subscribe to PuneTech updates.

For the rest of this article, we are going to get a little teary-eyed and ramble about the journey so far. So if that doesn’t sound very interesting to you (“How can you?!”) please skip this article and instead read the “Spread Punetech?” article, where are asking for specific help from you in spreading the word.

I (i.e. Navin)  had actually been thinking ab0ut creating something like PuneTech since maybe 2005. I registered PuneTech.com in June 2007, and finally started the site about 9 months later (insert your own joke here). When I started it, my original vision was that PuneTech would be a mini-wikipedia for technology in Pune. So my primary focus was on creating the PuneTech wiki, and as an afterthought, I added the PuneTech blog. The idea was that until there was a critical mass of people updating the wiki, there should be some reason for people to keep visiting the site, and hence I hit upon the idea of having a blog that I update every day. Also, since there wasn’t much content on the wiki initially, I made the blog the front page, and was planning to switch the front page over to the wiki “in six months”. Unfortunately, the wiki never really took off in the way I had hoped, and it remains a poor, neglected half-brother, while the blog is going great guns. Oh well. Man proposes, community disposes.

PuneTech reaches about 780+ email/rss subscribers, and an additional 400+ daily visitors to the website. The bad news is that this number is rather low considering the number of software technologists in Pune (help us change this, see spread PuneTech). The good news is that the ones we have, are really interested in Pune and technology, so we get focused attention of our readers. But the most interesting part of doing PuneTech, for us (i.e. Navin and Amit who joined PuneTech a few months after it was created), has been the offline activities. We’ve met so many interesting people in Pune that we were totally unaware of an year ago. Our knowledge of what goes on in Pune has tremendously increased. Due in part to this knowledge, we have been able to help out a lot of people in providing information or making connections. Business deals have happened because of introductions we made. People have found senior employees for their companies because of us, or because of events we organized. Small startups have discovered new avenues to market their products because of information supplied by us. All of this gives us a great sense of achievement that our regular jobs did not necessarily give. For what is supposed to be an unpaid, part-time hobby, PuneTech is a huge time-sink for us, but the satisfaction we get out of it is immense. And we’d like to share this with others – if you like doing lots of unpaid work, get in touch with us.

What next? We have a lot of ideas for what to do with PuneTech, and the community also gives us lots of ideas about what they would like to see. The biggest constraint is time. Every new feature added to PuneTech results in a little more of our time spent on it per week (without which it would atrophy and die). We are struggling with a long todo list and not enough time to do it in (who isn’t!?) So we prefer to make slow and steady progress that we can sustain. We won’t promise lots of new features, but definitely hope for some new ones to crop up from time to time.

Of course, this process can be accelerated if more people join the volunteers working on PuneTech. Currently it is just me (Navin) and Amit, with occasional help from others in the community. What would be great is if people join us and take over an entire activity (like event co-ordination, or creating content related to animation technology, or mobile technology, or fixing the usability and look-and-feel of PuneTech). We are in the process of writing out a more detailed “We need your help document,” but in the meantime, please feel free to contact us with thoughts on how you can help. The best kind of help is when you can guarantee at least 3 or 4 hours per week for 6 months or more.

But one thing you can help us with right away is this – spread the word. Please let your friends know about PuneTech. Please consider putting up an “I love PuneTech” badge on your blog/website. For more details, see the “Spread PuneTech” page. Consider this a birthday gift to us. For your return gifts, subscribe to PuneTech.

Reblog this post [with Zemanta]

How To Effectively Use Linkedin For Professional Networking: 30 DOs and DON’Ts

Once in a while a technology feature/product really appeals to you, and you have that ‘Aha! Experience’. “Why didn’t I think of this before? This makes perfect sense!”  I felt the same way when I first signed up on Linkedin in 2004. Linkedin was a fairly small, unknown networking portal back then. It surely has come a long way!

 

My first reaction was, here I have a way to maintain a ‘dynamic address book’. Other address books maintained in email programs are ‘static’. They have to be manually updated, and get out of synch when your contact changes jobs/schools/location/etc. I gradually started building my network in 2004. Over the past 4 years, I have been able to grow my network significantly through Linkedin. Various new features have been added over this period those greatly enhance networking capabilities. Features focused on tracking former colleagues and classmates were very helpful in finding these old friends.

 

Today, I have a large contact base of over 500 contacts. I extensively use Linkedin to keep track of my network (changes/updates/etc.) as well as for finding new connections. The recently introduced ‘connections update’ feature is extremely useful. You can get daily alerts about changes in your network (profile changes, network changes, etc.)

 

I think of a Linkedin profile as a summarized background with specific emphasis on specialties and areas of interest. The Linkedin framework if leveraged effectively can help you build an excellent network. [Note -To me ‘recruitment aid/job hunting’ is a tactical objective for using Linkedin; ‘networking’ is a more strategic objective in my view.]

 

In this article, I will discuss ‘Do’s and Don’ts’ of effective Linkedin usage, based on my experience. These points are specifically written for a new linkedin user or someone who doesn’t use it extensively, but wants to learn more. I have benefited greatly from following these simple guidelines in building my network and staying in touch with it.

 

Dos & Don’ts

 

0. Maintain brief, accurate and current profile information about yourself. Clearly list your specialties and provide a brief summary.

 

1. Update the correct geographic location. For users in India, there is a known issue/bug regarding Indian zip codes and how linkedin interprets it. E.g. Entering Pune area zip codes will end up displaying ‘Satara Area’ as your location. Similar issues are also there with a few other major cities in India. Until this is fixed, I would not populate anything in the zip code field (just put ‘111111’). That way, the location will show up as ‘India’.

 

2. Update a non-work email address on your profile.

 

3. I personally am not a big fan of recommendations. If you really have a good recommendation from someone senior, then put it up, otherwise don’t put them just for the sake of it. Do restrict the number of recommendations.

 

4. Ensure that education experience is correctly updated. This is very important.

 

5. As far as possible, avoid chronological gaps in your profile.

 

6. Do ensure that you have correct names and tenure for your companies and educational institutes. Typos here will prevent you from effectively using the class-mates and colleagues feature.

 

7. Avoid writing a long winding description of your experience. Remember, a linkedin profile is a ‘profile’ and not a detailed resume.

 

8. Use the ‘My Company’, ‘My Website’ links to add information about your company websites, your blog, websites that you are involved with, etc.

 

9. Remember, Linkedin is a professional networking tool, and not a social networking tool. Hence keep the profile/language/messages professional.

 

10. After you have finished all updates, do view your profile once, to check for any obvious typos or formatting errors.

 

11. Send invites to all key professional contacts from your address book. Use some discretion here. Sending invites to people who may not recognize you (people with whom you have had limited interactions) could result in rejections.

 

12. First send invites to those contacts that are already signed up on Linkedin. Probability of them connecting with you is higher than someone who is not already on Linkedin.

 

13. Leverage the class-mates and colleagues feature to find and link with former co-workers and school & college friends. This feature lets you send invites without having the email address. However, if you send invites to too many folks who don’t recognize you, and who end up rejecting your invite – you might end up in some linkedin trouble! Linkedin can temporarily put a hold of sending any further invites if you accumulate too many rejections.

 

14. While leveraging your contacts list to connect with someone in your 2nd or 3rd degree separated network, make sure you write a brief and clear note (to your contact, as well as the end recipient).

 

15. Avoid sending ‘Spam Invites’. In general, maintain some guidelines regarding who are trying to connect with. There are no hard and fast rules, but I usually try to restrict this to people I have met with in context of some business meeting/seminar/conference/networking event. I hate invitations that come from people who I haven’t even met or exchanged any emails!

 

16. Do monitor the ‘Just Joined Linkedin’ tab. Often times one of your friends/colleagues would show up on this list. You can directly send an invite to this person, if you already have their email id and add them to your contacts list.

 

17. Avoid participating in too many irrelevant groups. A few relevant groups can help you in two ways. 1) I like to look at linkedin group as an ‘electronic T Shirt’. It’s a way to proclaim to the world that you belong to a specific alumni or professional association. 2) A way to exchange discussions and establish contacts with other members of the groups. I am a big fan of #1 and don’t think linkedin is doing great with #2. Probability of getting connected to someone, whom you send an invite just because you are on the same group, is pretty low. Also, the quality of discussions on linkedin groups today leaves a lot to be desired compared to Google or Yahoo groups.

 

18. I personally prefer to not to hide the contacts list from my connections. This is subjective, and I know some people who keep the list private. However, I think this creates a negative (anti-networking) perception in the mind of their contacts.

 

19. If you are really adding some confidential person (e.g. competitor, etc.) to your connections list, then keep the network private. However, the best solution would be not to add such people to your network in the first place!

 

20. If you actively use multiple email addresses, do enter them into your linkedin profile. This way, if you receive an invitation on any of these email ids, it will automatically show up on your linkedin homepage. This will also prevent linkedin from accidentally creating two different accounts for you. If this happens, send a note to linkedin support and I believe they can merge the two accounts.

 

21. Linkedin recently started providing a way to update a one-line status about your activity. Use it, where it makes sense. I know some people who abuse it by changing the tag line literally everyday. This can be counterproductive. Remember, this is not like a tag line on your instant messaging device.

 

22. Try to maintain some communication with your contacts (in some cases, even once a year is sufficient). I know many people who absolutely forget about some of their contacts for years, after adding them.

 

23. However DO NOT SPAM your network. If you want to forward or send messages that you think are relevant, do so very carefully and make sure you send it to that subset of your network that will find it ‘relevant’!

 

24. Recently, linkedin started supporting ‘linkedin apps’. I have used the wordpress plugin thus far and it is a very good way to selectively display articles summary from your blog on your profile. Applications like Trip It also look interesting.

 

25. Create a personalized name (like a login name) for your linkedin profile. This way, your linkedin profile will display in the www.linkedin.com/in/YOUR_USER_NAME format (e.g. www.linkedin.com/in/aparanjape) instead of some complicated alpha numerical id.

 

26. Make your profile ‘public’ for search engines. This way, it will show up on web searches.

 

27. Once in a while, it’s a good idea to backup your contacts. This can be done by exporting your contacts list into Outlook or into an Excel File.

 

29. Do you use the new analytics feature ‘People who looked at this profile also viewed…’ This can sometimes come with terrific suggestions!

 

29. ‘Who has viewed my profile’ can also provide some interesting insights from time to time.

 

30. ‘People you name know’ is another new powerful feature that can suggest some good potential connections.

 

Reblog this post [with Zemanta]

Marketing for Startups: A Pune OpenCoffee Club event – Mar 7th

What: POCC program on Marketing for Startups. Pune
When: Saturday, 7th March. 4pm to 8pm
Where: Symbiosis Institute of Computer Studies and Research, Atur Centre, Model Colony. Map.
Registration and Fees: This event is free for all to attend. No registration required.

Pune OpenCoffee Club - POCC Logo

Schedule

4.00pm – 4.50pm – Anuj Khurana, “How to build traffic for your online product? PurpleTrail.com – a case study”.
5.00pm – 5.50pm – Alok Kejriwal, CEO, Games2Win “My Games2Win story”.
6.00pm – 6.50pm – Abhishek Goyal, Accel Partners “What Accel looks for in Startups”.
7.00pm – 8.00pm – Networking.
The event will start at 4pm sharp.

About the speakers

Image representing Accel Partners as depicted ...
Image via CrunchBase

Abhishek Goyal represents Accel India Venture Fund and will walk the OCC through the critical aspects of Businesses from an Investor’s perspective. Accel India Venture Fund works with early-stage Business in Web and Mobile technologies. Accel provides both Investment and Venture Development acumen for their Portfolio companies.

Image representing Games2Win as depicted in Cr...
Image via CrunchBase

Alok Kejriwal is a serial entrepreneur and founded Contests2win (c2w) in 1998. Alok and c2w have gone on to create 3 more exciting businesses – Mobile2win in China and India, Media2win and Games2win. Alok will talk about the Games2Win story, about how Games2Win hit the sweet spot on the web. Alok also mentors first-generation Entrepreneurs in building Strong Brands, Strategy, Funding and several other areas.

Image representing PurpleTrail as depicted in ...
Image via CrunchBase

Anuj Khurana will present his first hand experience with PurpleTrail – an online invitations and party planning website (focused on the U.S market). 6 months into going live; the site has tried all the tricks in the book with varying degrees of success. Today it is growing at a steady clip and is drawing hundreds of thousands of visitors a month. Though these are early days for the service it makes for a useful case study and presents the success and impact of various online marketing efforts. Anuj is Director of Products at MangoSpring, Pune.

Reblog this post [with Zemanta]