Web Development Environments: Choose the best or go with the rest

8,927 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
8,927
On SlideShare
0
From Embeds
0
Number of Embeds
32
Actions
Shares
0
Downloads
112
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Web Development Environments: Choose the best or go with the rest

  1. 1. Web Development Environments: Choose the best or go with the rest Chris Munt M/Gateway Developments Ltd
  2. 2. Agenda <ul><li>Technologies </li></ul><ul><ul><li>CSP, WebLink </li></ul></ul><ul><ul><li>Dedicated: JSP, ASP.NET, PHP etc … </li></ul></ul><ul><ul><li>Pre-existing: Perl, Python, Ruby etc … </li></ul></ul><ul><li>Choosing the “right” one </li></ul>
  3. 3. Choosing the right one <ul><li>Effect of powerful corporate interests </li></ul><ul><li>Effect of powerful community interests </li></ul><ul><li>Effect of peer pressure </li></ul><ul><li>Effect of Open Source movement </li></ul>
  4. 4. Choosing the right one <ul><li>“ No one ever got fired for choosing __” </li></ul>
  5. 5. Windows? <ul><li>You can evaluate and choose from… </li></ul><ul><ul><li>PHP </li></ul></ul><ul><ul><ul><li>Zend, CakePHP, PHOCOA, Friendly, Symfony, etc… </li></ul></ul></ul><ul><ul><li>JSP/Java </li></ul></ul><ul><ul><ul><li>Barracuda, Struts, Spring, etc … </li></ul></ul></ul><ul><ul><li>Python </li></ul></ul><ul><ul><ul><li>Django, Pylons, TurboGears, Zope, Pyroxide, etc … </li></ul></ul></ul><ul><ul><li>Ruby </li></ul></ul><ul><ul><ul><li>Ruby on Rails, Ramaze, Camping, etc … </li></ul></ul></ul><ul><ul><li>Perl </li></ul></ul><ul><ul><ul><li>LAMP, Mason, Calatyst, etc … </li></ul></ul></ul><ul><ul><li>CSP, WebLink </li></ul></ul><ul><ul><ul><li>Zen, EWD, WLD </li></ul></ul></ul>
  6. 6. Windows? <ul><li>… or go with the crowd … </li></ul><ul><ul><li>ASP.NET </li></ul></ul>
  7. 7. Not Windows? <ul><li>You can evaluate and choose from… </li></ul><ul><ul><li>PHP </li></ul></ul><ul><ul><ul><li>Zend, CakePHP, PHOCOA, Friendly, Symfony, etc… </li></ul></ul></ul><ul><ul><li>Python </li></ul></ul><ul><ul><ul><li>Django, Pylons, TurboGears, Zope, Pyroxide, etc … </li></ul></ul></ul><ul><ul><li>Ruby </li></ul></ul><ul><ul><ul><li>Ruby on Rails, Ramaze, Camping, etc … </li></ul></ul></ul><ul><ul><li>Perl </li></ul></ul><ul><ul><ul><li>LAMP, Mason, Calatyst, etc … </li></ul></ul></ul><ul><ul><li>CSP, WebLink </li></ul></ul><ul><ul><ul><li>Zen, EWD, WLD </li></ul></ul></ul>
  8. 8. Not Windows? <ul><li>… or go with the crowd … </li></ul><ul><ul><li>JSP/Java </li></ul></ul>
  9. 9. Choosing a database 1980s/90s <ul><li>… Evaluate demonstrably better performing options … </li></ul><ul><ul><li>Cache </li></ul></ul><ul><li>… or go with the crowd … </li></ul><ul><ul><li>Oracle </li></ul></ul><ul><ul><li>DB2 </li></ul></ul><ul><ul><li>Informix </li></ul></ul><ul><ul><li>Sybase </li></ul></ul><ul><ul><li>(SQL Server – partially derived from Sybase) </li></ul></ul>
  10. 10. Choosing a database 2000s <ul><li>Looking at alternatives to the big players no longer seems daft. </li></ul><ul><ul><li>Cache </li></ul></ul><ul><ul><li>Derivatives from the M and PICK world </li></ul></ul><ul><ul><li>XML Databases, OO Databases </li></ul></ul><ul><ul><li>MySQL </li></ul></ul><ul><ul><li>Btree based databases from the embedded systems world </li></ul></ul><ul><li>Previous main players? </li></ul><ul><ul><li>Oracle (Oracle Database 10g Express – free). </li></ul></ul><ul><ul><ul><li>(purchased Berkeley DB from Sleepycat 2006 - free). </li></ul></ul></ul><ul><ul><li>DB2 (provide DB2 Express-C - free). </li></ul></ul><ul><ul><li>SQL Server (provide SQL Server Express – free). </li></ul></ul><ul><ul><li>Sybase (A long way behind the top three). </li></ul></ul><ul><ul><li>Informix (Acquired by IBM 2001). </li></ul></ul>
  11. 11. Databases: What happened? <ul><li>Over-powerful vendors </li></ul><ul><ul><li>Challenged by Open Source movement </li></ul></ul><ul><ul><ul><li>MySQL </li></ul></ul></ul><ul><ul><ul><li>“ Good enough” databases </li></ul></ul></ul><ul><ul><li>Challenged by diverse requirements </li></ul></ul><ul><ul><ul><li>XML </li></ul></ul></ul><ul><ul><ul><li>Diverse data types </li></ul></ul></ul><ul><ul><ul><li>Web services </li></ul></ul></ul><ul><ul><ul><li>Embedded systems </li></ul></ul></ul>
  12. 12. Web Development: What’s happening? <ul><li>Two monsters: </li></ul><ul><ul><li>ASP.NET </li></ul></ul><ul><ul><li>Java/JSP </li></ul></ul><ul><li>Vendor interests assisted by over-powerful development communities </li></ul><ul><ul><li>Challenged by powerful user communities and companies acting on their behalf </li></ul></ul><ul><ul><ul><li>Google App engine: Python takes its place on the Cool Wall </li></ul></ul></ul><ul><ul><li>Ongoing challenge from Open Source movement </li></ul></ul>
  13. 13. Web Development: How to choose an environment <ul><li>Note the impact that companies like Google can have. </li></ul><ul><li>Don’t be afraid to evaluate lesser known technologies provided … well let’s look at what’s available first … </li></ul>
  14. 14. ASP & ASP.NET <ul><li>Microsoft IIS </li></ul><ul><li>Classic ASP (~1996) </li></ul><ul><ul><li>script based and interpretive </li></ul></ul><ul><li>ASP.NET (~2002) </li></ul><ul><ul><li>Compiled, dependent on .Net framework </li></ul></ul><ul><li>Database access </li></ul><ul><ul><li>ADO.Net (base class library) </li></ul></ul><ul><ul><li>ODBC data provider </li></ul></ul><ul><ul><li>Web Services </li></ul></ul>
  15. 15. .NET Architecture – key components <ul><li>Huge class library. </li></ul><ul><li>Common Language Infrastructure (CLI) </li></ul><ul><li>Common Language Runtime (CLR) </li></ul><ul><ul><li>Microsoft’s Virtual Machine </li></ul></ul><ul><ul><li>Contributing languages expected to work with this layer </li></ul></ul><ul><ul><li>Memory management/Garbage collection </li></ul></ul><ul><ul><li>System resource management </li></ul></ul><ul><ul><ul><li>E.g. threads and exceptions </li></ul></ul></ul><ul><ul><li>Security </li></ul></ul>
  16. 16. ASP.NET: Key Languages <ul><li>VB.NET </li></ul><ul><ul><li>Classic VB development </li></ul></ul><ul><li>C# </li></ul><ul><ul><li>Similar to Java </li></ul></ul><ul><ul><ul><li>Higher level types than C/C++; array bounds checking etc … </li></ul></ul></ul><ul><ul><li>Approved as standard ECMA (ECMA-334) and ISO (ISO/IEC 23270) </li></ul></ul><ul><li>J# </li></ul><ul><ul><li>Legacy environment for J++ </li></ul></ul><ul><ul><li>Usage declining </li></ul></ul><ul><ul><li>Will retire with Visual Studio 2005 in 2015 </li></ul></ul>
  17. 17. Java/JSP <ul><li>Specified by Sun </li></ul><ul><li>Apache Tomcat </li></ul><ul><ul><li>web container or application server </li></ul></ul><ul><ul><li>Implements Java Servlet and JSP </li></ul></ul><ul><ul><li>Apache mod_jk (Jakarta) manages communication between Apache and Tomcat </li></ul></ul><ul><li>Database access </li></ul><ul><ul><li>JDBC, web services </li></ul></ul>
  18. 18. Java/JSP: Frameworks <ul><li>Barracuda </li></ul><ul><li>Apache Struts </li></ul><ul><ul><li>Formerly Jakarta project </li></ul></ul><ul><li>Spring </li></ul><ul><li>Many others … </li></ul>
  19. 19. Java/JSP vs. ASP.NET <ul><li>Similar technical framework: </li></ul><ul><ul><li>Sun: Java Virtual Machine (JVM) + Java </li></ul></ul><ul><ul><li>Microsoft: Common Language Infratructure (CLI) + C# </li></ul></ul><ul><li>Similar compiler architecture </li></ul><ul><ul><li>Both use intermediate “Bytecode”. </li></ul></ul><ul><ul><ul><li>Sun: Java Bytecode </li></ul></ul></ul><ul><ul><ul><li>Microsoft: Common Intermediate Language (CIL) </li></ul></ul></ul>
  20. 20. JSP vs. ASP.NET <ul><li>Similar execution environment </li></ul><ul><ul><li>Sun: Bytecode can be interpreted, compiled in advance or Just In Time (JIT) </li></ul></ul><ul><ul><li>Microsoft: CLI can be compiled in advance or JIT </li></ul></ul><ul><li>Both extremely bloated </li></ul><ul><ul><li>Huge class libraries </li></ul></ul><ul><ul><li>Continuum (often messy) between technical implementation and design </li></ul></ul><ul><ul><li>Component version control seems to persist as a significant problem </li></ul></ul>
  21. 21. The rest: Applying the $Order Test <ul><li>Set a(&quot;c&quot;)=&quot;record c&quot; </li></ul><ul><li>Set a(&quot;b&quot;)=&quot;record b&quot; </li></ul><ul><li>Set a(&quot;a&quot;)=&quot;record a&quot; </li></ul><ul><li>Set key=&quot;&quot; For { </li></ul><ul><li>Set key=$Order(a(key)) </li></ul><ul><li>If key=&quot;&quot; Quit </li></ul><ul><li>Write &quot;<br>&quot;, key, &quot; = &quot;, a(key) </li></ul><ul><li>} </li></ul>
  22. 22. PHP <ul><li>PHP ( Hypertext Preprocessor) </li></ul><ul><li>Created 1994 </li></ul><ul><ul><li>By Rasmus Lerdorf </li></ul></ul><ul><ul><li>One of the ‘3 Ps’ (along with Python, Perl) </li></ul></ul><ul><li>Used for over 20 million web sites </li></ul><ul><li>Most popular Apache module </li></ul><ul><li>M-like associative arrays </li></ul><ul><li>Increasing OO capability </li></ul><ul><li>Interfaces to numerous SQL-based databases </li></ul><ul><ul><li>MySQL popular choice </li></ul></ul>
  23. 23. PHP: Frameworks <ul><li>Zend </li></ul><ul><li>CakePHP </li></ul><ul><li>PHOCOA </li></ul><ul><li>Friendly </li></ul><ul><li>Symfony </li></ul><ul><li>CodeIgniter </li></ul><ul><li>Prado </li></ul><ul><li>Many others … </li></ul>
  24. 24. PHP: The $Order Test <ul><li>$a = array(); # An associative array </li></ul><ul><li>$a[&quot;c&quot;]=&quot;record c&quot;; </li></ul><ul><li>$a[&quot;b&quot;]=&quot;record b&quot;; </li></ul><ul><li>$a[&quot;a&quot;]=&quot;record a&quot;; </li></ul><ul><li>asort($a); </li></ul><ul><li>foreach($a as $key => $value) { </li></ul><ul><li>echo &quot;<br>&quot;,$key,&quot; = &quot;,$value; </li></ul><ul><li>} </li></ul>
  25. 25. Python <ul><li>Created 1991 </li></ul><ul><ul><li>By Guido van Rossum (Hired by Google late 2005) </li></ul></ul><ul><li>General purpose scripting environment </li></ul><ul><ul><li>Some implementations include compiler </li></ul></ul><ul><li>Multi-paradigm programming environment </li></ul><ul><ul><li>Functional </li></ul></ul><ul><ul><li>Object Oriented </li></ul></ul><ul><li>Large standard library </li></ul><ul><ul><li>Modules for processing web requests </li></ul></ul><ul><ul><li>Modules for database access </li></ul></ul>
  26. 26. Python: The $Order Test <ul><li>a = {} # A dictionary </li></ul><ul><li>a[&quot;c&quot;]=&quot;record c&quot; </li></ul><ul><li>a[&quot;b&quot;]=&quot;record b&quot; </li></ul><ul><li>a[&quot;a&quot;]=&quot;record a&quot; </li></ul><ul><li>keys = a.keys() </li></ul><ul><li>keys.sort() </li></ul><ul><li>for n, key in enumerate(keys): </li></ul><ul><li>print &quot;<br>&quot;, key, &quot; = &quot;, a[key] </li></ul>
  27. 27. Python: Frameworks <ul><li>Django </li></ul><ul><ul><li>Google App engine </li></ul></ul><ul><li>Pylons </li></ul><ul><li>TurboGears </li></ul><ul><ul><li>Combination of CherryPy and MochiKit </li></ul></ul><ul><li>CherryPy </li></ul><ul><li>MochiKit </li></ul><ul><li>Zope </li></ul><ul><li>Pyroxide </li></ul><ul><ul><li>Layered on mod_python </li></ul></ul><ul><li>Many others … </li></ul>
  28. 28. Python: Other key developments <ul><li>IronPython </li></ul><ul><ul><li>Created 2006 </li></ul></ul><ul><ul><li>Python implementation targetting .NET </li></ul></ul><ul><ul><li>Written entirely in C# </li></ul></ul><ul><ul><li>Similar initiatives include IronLisp and IronRuby. </li></ul></ul>
  29. 29. Ruby <ul><li>Created mid 1990s </li></ul><ul><ul><li>By Yukihiro &quot;Matz&quot; Matsumoto </li></ul></ul><ul><li>General purpose </li></ul><ul><li>Multi-paradigm programming environment </li></ul><ul><ul><li>Functional </li></ul></ul><ul><ul><li>Object Oriented (Many ideas from Perl and Smalltalk) </li></ul></ul><ul><li>Ruby On Rails: Created 2004 </li></ul><ul><ul><li>Complete web application development framework </li></ul></ul><ul><ul><li>Consists of several packages </li></ul></ul><ul><ul><ul><li>ActiveRecord – Object Relational mapping </li></ul></ul></ul>
  30. 30. Ruby: The $Order Test <ul><li>a = {} # A hash </li></ul><ul><li>a[&quot;c&quot;]=&quot;record c&quot; </li></ul><ul><li>a[&quot;b&quot;]=&quot;record b&quot; </li></ul><ul><li>a[&quot;a&quot;]=&quot;record a&quot; </li></ul><ul><li>a.each { </li></ul><ul><li>|key, value| </li></ul><ul><li>puts “<br>#{key} = #{value}” </li></ul><ul><li>} </li></ul>
  31. 31. Ruby on Rails <ul><li>“ Ruby on Rails is an open source web framework that's optimized for programmer happiness and sustainable productivity. It lets you write beautiful code by favoring convention over configuration.” </li></ul>
  32. 32. Ruby: Frameworks and other developments <ul><li>JRuby </li></ul><ul><ul><li>Java implementation of Ruby interpreter </li></ul></ul><ul><li>IronRuby </li></ul><ul><ul><li>Ruby for .NET. </li></ul></ul><ul><ul><ul><li>Implemented on Dynamic Runtime Library (DLR) layered over Common Language Runtime (CLR) </li></ul></ul></ul><ul><li>Ramaze </li></ul><ul><ul><li>Lightweight option </li></ul></ul><ul><li>Camping </li></ul>
  33. 33. Perl <ul><li>Created 1987 </li></ul><ul><ul><li>By Larry Wall </li></ul></ul><ul><li>General purpose scripting language </li></ul><ul><li>Emphasis on text processing </li></ul><ul><ul><li>Suited to the needs of web programming </li></ul></ul><ul><li>DBI (Database Interface) modules </li></ul>
  34. 34. Perl: The $Order Test <ul><li>## Set up associative array </li></ul><ul><li>$a{&quot;c&quot;}=&quot;record c&quot;; </li></ul><ul><li>$a{&quot;b&quot;}=&quot;record b&quot;; </li></ul><ul><li>$a{&quot;a&quot;}=&quot;record a&quot;; </li></ul><ul><li>foreach $key (sort keys %a) { </li></ul><ul><li>print &quot;<br>$key = $a{$key}&quot;; </li></ul><ul><li>} </li></ul>
  35. 35. Perl: Frameworks <ul><li>LAMP “solution stack” </li></ul><ul><ul><li>Linux, Apache, MySQL, Perl (or one of the other “3 Ps”) </li></ul></ul><ul><li>Mason </li></ul><ul><li>Catalyst </li></ul><ul><li>Many others </li></ul>
  36. 36. CSP & WebLink <ul><li>WebLink (1996) succeeded by CSP (~2000) </li></ul><ul><li>Implemented over CGI and Web Server APIs </li></ul><ul><li>Proxy to Caché </li></ul><ul><ul><li>Responses generated entirely in Caché </li></ul></ul><ul><li>WebLink </li></ul><ul><ul><li>M based. Support for legacy M systems </li></ul></ul><ul><li>CSP </li></ul><ul><ul><li>Close coupling with Caché Objects and Development environment </li></ul></ul>
  37. 37. CSP & WebLink: Particular highlights <ul><li>Support for state-aware sessions </li></ul><ul><ul><li>Migration of legacy M/Caché code to the web </li></ul></ul><ul><ul><li>CSP equivalent: Preserve mode 1 </li></ul></ul><ul><li>WebLink Event Broker (1998) </li></ul><ul><ul><li>Early incarnation of AJAX-like techniques </li></ul></ul><ul><ul><ul><li>A “first” for InterSystems </li></ul></ul></ul><ul><ul><li>In-form scriptable communication with server </li></ul></ul><ul><ul><ul><li>Initially Java applet based; then XMLHTTP </li></ul></ul></ul><ul><ul><li>CSP equivalent: Hyperevents </li></ul></ul>
  38. 38. CSP & WebLink: Development Frameworks <ul><li>WebLink Developer (WLD) </li></ul><ul><ul><li>Code generator for WebLink applications </li></ul></ul><ul><ul><li>Run-time environment to support applications and security. </li></ul></ul><ul><ul><li>Precursor to Zen and EWD </li></ul></ul><ul><li>CSP Zen </li></ul><ul><ul><li>Developer focused environment </li></ul></ul><ul><li>Enterprise Web Developer (EWD) </li></ul><ul><ul><li>Designer focused environment </li></ul></ul><ul><ul><li>Reaches out to legacy WebLink/WLD applications </li></ul></ul>
  39. 39. WebLink/CSP vs. The rest <ul><li>Non CSP/WebLink environments </li></ul><ul><ul><li>Requests processed and responses generated on web server host </li></ul></ul><ul><ul><li>Possible multiple round trips to database </li></ul></ul><ul><ul><li>Will need to increase capacity of web server tier sooner </li></ul></ul><ul><ul><ul><li>Load-Balancing techniques </li></ul></ul></ul>
  40. 40. WebLink/CSP vs. The rest <ul><li>CSP/WebLink </li></ul><ul><ul><li>Web server extension as intelligent proxy/router </li></ul></ul><ul><ul><li>Requests and complete response generated in Caché </li></ul></ul><ul><ul><li>Single round trip to database per request/response cycle </li></ul></ul><ul><ul><li>Integrated scripting environment and database ideal for web application run-time environment </li></ul></ul><ul><ul><li>Better performance/throughput per web server </li></ul></ul>
  41. 41. MGWSI Gateway: Connecting all environments to Cache <ul><li>Uniform/Normalized interface to Caché </li></ul><ul><li>Underpins Enterprise Web Developer (EWD) </li></ul><ul><li>Currently supported: </li></ul><ul><ul><li>PHP (m_php) </li></ul></ul><ul><ul><li>JSP (m_jsp) </li></ul></ul><ul><ul><li>ASP.NET (m_aspx) </li></ul></ul><ul><li>To be released shortly: </li></ul><ul><ul><li>Ruby (m_ruby) </li></ul></ul><ul><ul><li>Python (m_python) </li></ul></ul><ul><li>Future support anticipated: </li></ul><ul><ul><li>Perl (m_perl) </li></ul></ul><ul><li>www.mgateway.com </li></ul>
  42. 42. Conclusion <ul><li>Note developments in service providers </li></ul><ul><li>Keep eye on trends in all web development technologies. </li></ul><ul><li>Don’t be afraid to evaluate lesser known technologies provided … there is a vibrant community supporting them. </li></ul>

×