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

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

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