Open Source Software: A Case Study


Published on

  • Be the first to comment

  • Be the first to like this

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Open Source Software: A Case Study

  1. 1. Open Source Software: A Case Study Scott A. James, President Computer Consulting Specialists, Inc. Sarasota, Florida
  2. 2. What is Open Source Software <ul><li> says 10 things, but we summarize as: </li></ul><ul><li>Software in a community that is: </li></ul><ul><ul><li>Freely Used (no warranty, no limits on usage) </li></ul></ul><ul><ul><li>Freely Extended (must share source, represent original works and owners) </li></ul></ul><ul><ul><li>Many varieties of licenses, they ARE different. Know what they mean. </li></ul></ul><ul><ul><li>Check out for large list and details of each. </li></ul></ul>
  3. 3. Summary <ul><li>A case study of a project created with open source technology. </li></ul><ul><li>Project analysis : Goals & Resources </li></ul><ul><li>Technology : TCO, Evaluation & Decision </li></ul><ul><li>Implementation : Building the project </li></ul><ul><li>Lessons : What was learned </li></ul><ul><li>Resources </li></ul>
  4. 4. Project Analysis What are we doing? What do we have?
  5. 5. Project Analysis: Goals <ul><li>Project – functional, scalable, simple. </li></ul><ul><li>Timeline – when will each phase roll out? </li></ul><ul><li>Budget – how much money do we have? </li></ul><ul><li>Longevity – short term utility or long term application? </li></ul><ul><li>Equity – invest time in ourselves, or dollars in outside vendors? </li></ul><ul><li>Inexpensive, Build Fast, Quality: pick any two. </li></ul>
  6. 6. Project Analysis: Resources <ul><li>Staff Knowledge – what is current ability of staff? </li></ul><ul><li>Time – how long do we have? </li></ul><ul><li>Money – how much do we have? </li></ul><ul><li>Technology – what is already in use? </li></ul>
  7. 7. Technology An Evaluation of Open Source Software
  8. 8. Technology: Total Cost of Ownership (TCO) <ul><li>Startup Time: days or weeks? </li></ul><ul><li>Development Time: weeks, months, years? </li></ul><ul><li>Startup Money: cost of acquisition </li></ul><ul><li>Development Money: recurring costs and time. </li></ul><ul><li>Equity: $ pay to outside, vs. pay to ourselves </li></ul><ul><li>Risk: Dependency on outside trends? </li></ul><ul><li>Support: availability? Cost? </li></ul>
  9. 9. Technology: Investigation <ul><li>LAMP: Linux, Apache, MySQL, PHP </li></ul><ul><li>Windows: ASP/ActiveX, .NET, SQL Server </li></ul><ul><li>IBM WebSphere, Sun ONE, HP </li></ul>
  10. 10. Technology: Evaluation for TCO <ul><li>Tech staff has both Windows and UNIX background </li></ul><ul><li>We have time (several months ok) </li></ul><ul><li>Low budget, little money to spend. </li></ul><ul><li>Prefer to invest equity in ourselves. </li></ul><ul><li>Would like to reduce risk from outside tech trends. </li></ul><ul><li>Need solid, reliable server that requires little maintenance. </li></ul><ul><li>Need development questions/problems solved, but not real time. </li></ul>
  11. 11. Technology: Decision to use LAMP <ul><li>This is a new project (no migration necessary) </li></ul><ul><li>Our staff has UNIX (Linux) experience </li></ul><ul><li>Large user support community for core technology </li></ul><ul><li>Invest into own technology equity </li></ul><ul><li>Reduce risk of reliance on technology trends </li></ul><ul><li>Low cost to entry (no license or hardware fees) </li></ul>
  12. 12. Implementation Putting Open Source Software to Work
  13. 13. Implementation: Development Environment <ul><li>Linux server, Windows 2000 & XP workstations. </li></ul><ul><li>Apache, MySQL and PHP. </li></ul><ul><li>CVS & e-mail/IM for configuration management. </li></ul><ul><li>Smarty template engine ( ) </li></ul><ul><li>PEAR application framework ( ) </li></ul><ul><li>SafeSQL - PHP Class to prepare SQL statements Google to find. Written by author of Smarty. </li></ul>
  14. 14. Implementation: Linux Server Preperation <ul><li>Linux Mandrake ( ) </li></ul><ul><li>Apache 2.0 ( ) </li></ul><ul><li>MySQL 3.23 ( ) </li></ul><ul><li>PHP 4.2 ( ) </li></ul>
  15. 15. Implementation: Development Preparation <ul><li>CVS for version control on Linux server </li></ul><ul><li>SAMBA for windows networking. </li></ul><ul><li>TortoiseCVS on Windows ( ) Better than WinCVS (it’s a powerful shell extension) </li></ul><ul><li>Language syntax sensitive editor (Ultra Edit, Multi-Edit, vim, etc.) </li></ul><ul><li>Apache and PHP on local workstations for unit testing (Linux version on server, Win32 versions on workstations). </li></ul>
  16. 16. Implementation: Development <ul><li>Data model with subject matter experts, talk through 1-to-Many relationships, sanity check. </li></ul><ul><li>Design PHP class hierarchy for business N-tier layer. </li></ul><ul><li>Create shim PHP classes for web designers to use while building and testing HTML templates. This provides ability to develop GUI in parallel. </li></ul><ul><li>Smarty template syntax can be HTML syntax compliant for use with Dreamweaver. </li></ul>
  17. 17. Implementation: Open Source value, case in point <ul><li>We found a useful PHP class for preparing SQL statements called SafeSQL. </li></ul><ul><li>However, it did not provide all the functionality we wanted. </li></ul><ul><li>In about 2 hours we modified the source to add our features. </li></ul><ul><li>We then e-mailed a copy back to the author; that these features may be included in future versions (as he my decide). </li></ul><ul><li>We enjoy similar features added by other developers. </li></ul>
  18. 18. Implementation: Use the Support Channels <ul><li>Docs ( , ) Save time with on-line look-up (MySQL, PHP) RTFM (Read The Fine Manual) </li></ul><ul><li> - Best way to search the Internet. Search for specifics like: functions, methods and error numbers </li></ul><ul><li>Forums ( , ) Register early, try to skim articles regularly. </li></ul><ul><li>Wiki – web page self regulated by community, very useful. The Smarty template engine has a great Wiki. </li></ul><ul><li>Plan for time to interact with open source community -- support is usually not real time. </li></ul>
  19. 19. Implementation: Flexible environment for unit testing <ul><li>Perform unit testing on local Windows workstations using Windows versions of Apache, PHP and MySQL. </li></ul><ul><li>Regression testing is desirable, use automated methods as much as possible. </li></ul><ul><li>CVS provides “hooks” to execute scripts on files as they are committed to repository. </li></ul>
  20. 20. Implementation: Deployment on servers <ul><li>Deploy using automated script – fewer human actions means fewer mistakes. </li></ul><ul><li>Look at using SSH, TAR, RSYNC for ways to move software between hosts. </li></ul><ul><li>Use CVS to ‘tag’ releases for consistent software bundling. Avoid temptation to copy individual files. </li></ul><ul><li>Adopt versioning nomenclature like: ( </li></ul><ul><li>Batch bugs/features into small groups of changes for frequent (sometimes weekly) updates. </li></ul>
  21. 21. Lessons Learned What have we learned from our experience?
  22. 22. Lessons Learned: Support <ul><li>Subscribe to on-line newsletters early on. Look for digest versions and skim for understanding of product and current support. </li></ul><ul><li>Plan time for support from open source community. Response time may be days. </li></ul><ul><li>Don’t be afraid to ask for help. Be courteous to the open source community. </li></ul>
  23. 23. Lessons Learned: Development <ul><li>Do a small project (a prototype) to test development staff and environment. Set goals, and track progress. </li></ul><ul><li>Schedule tasks in parallel to allow for workflow snags and interacting with open source community. </li></ul><ul><li>Use in-source documentation tools ( , ) to aid staff and to monitor progress. </li></ul><ul><li>Tap into local support network early in the project: user groups, business associates, consultants. </li></ul>
  24. 24. Lessons Learned: Configuration Management <ul><li>Frequently commit (check-in) files to CVS and tag frequently (release). </li></ul><ul><li>Goal: Only commit working code, and never tag broken code. </li></ul><ul><li>Use CVS for all files, including docs, libraries, binaries. Makes for easy reproduction of whole environment for reliable testing. </li></ul><ul><li>Do unit testing on local workstations with Apache & PHP running locally. Build this into the design. </li></ul><ul><li>Have fun, and learn a lot! </li></ul>
  25. 25. Resources <ul><li>Philosophy & Legal: </li></ul><ul><li>Fun: </li></ul><ul><li>For these slides and more visit: </li></ul><ul><li>Computer Consulting Specialists, Inc. </li></ul><ul><li> </li></ul><ul><li>[email_address] </li></ul><ul><li>941-320-7937 </li></ul>