SlideShare uma empresa Scribd logo
1 de 47
Baixar para ler offline
OpenLaszlo:
   A Python Success Story



                            PyCon 2005

Oliver Steele
Chief Software Architect
Laszlo Systems, Inc.

March 23, 2005
Lots of Languages




                                         LZX              XHTML
     Target Languages



                            JavaScript     RELAX NG     XML
     Definition Languages


     Implementation
                        JavaCC      Java       Jython         Python   XSLT
     Languages




Laszlo Systems, Inc.
                                                                              2
Outline
         What we built
                 OpenLaszlo platform
                 Demos
                 Architecture
         How we built it
                      Script compiler
                      Cool features
                      Doc tools
                      Synergy
         What we learned
                 Technical challenges
                 Social challenges
                 Why it worked (and what didn’t)



Laszlo Systems, Inc.
                                                    3
Laszlo Systems
         Founded in 2001
         Team from Apple, Adobe, Allaire, Excite, GO,
          Farallon, and Macromedia
         20 developers in Boston and San Francisco Bay
                 (Looking for 21st)
         News
                 October 5, 2004: Platform released as Open Source
                 October 13, 2004: Company receives Series B funding
                 March 2005: Earthlink announces use of Laszlo Mail




Laszlo Systems, Inc.
                                                                        4
Laszlo Vision




                       Develop and market Rich Internet
                       Applications for customer-facing
                       websites


                       Establish the Laszlo platform as the
                       standard, open source software
                       platform of choice for such
                       applications




Laszlo Systems, Inc.
                                                              5
Demos
         Calendar
         Dashboard




Laszlo Systems, Inc.
                       6
Who Uses OpenLaszlo?




Over 20M consumers have used Laszlo-based applications
                                                         7
Laszlo Systems, Inc.
Under the Hood: Platform Architecture
               XML Source
                               OpenLaszlo Platform
               Files                                                 swf object file


                                   Compiler           Linker




                                                                  Flash player


                GIFs, JPEGs,         User interface   Runtime
                PNGs                 components       Library




                               J2EE Server                      Client


Laszlo Systems, Inc.
                                                                                      8
Under the Hood (2): Removing the Server
               XML Source
                               OpenLaszlo Platform
               Files                                                swf object file


                                  Compiler           Linker


                                                               Web Server


                                                                 Flash player


                GIFs, JPEGs,        User interface   Runtime
                PNGs                components       Library




                                                               Client


Laszlo Systems, Inc.
                                                                                     9
Script Compiler
         Compiles JavaScript to Flash bytecode
         Plus unanticipated cool features




Laszlo Systems, Inc.
                                                  10
Laszlo Source Code (LZX)

        <canvas>
          <window>
            <button
                 onclick=”
                   animate(‘x’, 100, 1000, true)”>
              Click me!
            </button>
          </window>
        </canvas>

         Source hierarchy mirrors object hierarchy
         Embedded JavaScript
         Constraints, data binding, and declarative states

Laszlo Systems, Inc.
                                                              11
Script Compiler
         Requirements
                 100% Java
                 JavaScript -> ActionScript byte code
                 Three months (concurrent with language design, API design,
                  XML compiler, and compiler architecture)
         Why not Java?
                 I’d written a lot of code in Java and Python, and didn’t think I
                  could write the Java version in time.
                     JWordNet
                     PyWordNet
         Evaluation
                      Java
                      Jython
                      SML
                      ICON
Laszlo Systems, Inc.
                                                                                     12
Script Compiler: The 10,000 foot view
                       LZX                                       swf (Flash)
                       Source File                               object file

                                         OpenLaszlo
                                          Compiler

                                                      88450008006174747273006e61
                                                      6d65004c7a496e7374616e74696
                                                      174655669657700436c69636b2
                                                      06d6521006368696c6472656e0
                 <window>                             077696e646f7700627574746f6e
                                                      007465787400960c0007020000
                       <button>Click me!</button>     000800070000000043960d0008
                                                      04080008070803070100000043
                 </window>                            96090008010806070200000043
                                                      96050007010000004296090008
                                                      01080507030000004396070007
                                                      0200000008023d1700




Laszlo Systems, Inc.
                                                                                    13
Script Compiler: The 5,000 foot view
                       LZX                                        swf (Flash)
                       Source File                                object file




                              XML
                                                   Linker
                             Compiler


                                         Script
                                        Compiler
                       JavaScript                  ActionScript
                                                     byte code




Laszlo Systems, Inc.
                                                                                14
Script Compiler: The 1,000 foot view
                       LZX                                                               swf (Flash)
                       Source File                                                       object file




                              XML                       Java                 Linker
                             Compiler


                                                                   ActionScript
                               JavaScript
                                                                     byte code
                                            JavaCC       Jython


                        Parser                                                   Assembler
                                                   Code
                                                  Generator
                                     JavaScript                   ActionScript
                                     AST                          assembly


Laszlo Systems, Inc.
                                                                                                       15
Compilation Stages
LZX (XML)                          ActionScript assembly        Byte code
                                     constants 'attrs' 'name'     88450008006
    <window>                                                      17474727300
                                     'LzInstantiateView'
                                                                  6e616d65004c
                                     'Click me!' 'children'
      <button>Click me!</button>                                  7a496e737461
                                     'window' 'button' 'text'
                                                                  6e746961746
    </window>                        push '2' 'attrs' '0'         55669657700
                                                                  436c69636b2
                                     initObject
                                                                  06d65210063
                                     push 'children' 'attrs'      68696c64726
                                     'text' 'Click me!' '1'       56e0077696e6
                                                                  46f770062757
                                     initObject
                                                                  4746f6e00746
                                     push 'name' 'button' '2'     5787400960c
JavaScript                                                        00070200000
                                     initObject
 LzInstantiateView(                                               00800070000
                                     push '1'                     000043960d0
  {name: quot;windowquot;,                                                00804080008
                                     initArray
                                                                  07080307010
   attrs: {},                        push 'name' 'window' '3'     00000439609
   children:                                                      00080108060
                                     initObject
                                                                  70200000043
   [{name: quot;buttonquot;,                 push '2'                     96050007010
     attrs: {text: quot;Click                                         00000429609
                                     'LzInstantiateView'
                                                                  00080108050
 me!quot;}}]},                           callFunction                 70300000043
  2);                                                             96070007020
                                     pop
                                                                  0000008023d
                                                                  1700



Laszlo Systems, Inc.
                                                                                 16
Embedded JavaScript


    <button onclick=quot;animate('x', 100, 1000, true)quot;/>




   LzInstantiateView(
    {name: quot;buttonquot;,
     attrs: {
      $events:
       {onclick:
        function $test$2Elzx_2_52_onclick_event () {
         animate('x', 100, 1000, true)}},
      clickable: true}},
    1);




Laszlo Systems, Inc.
                                                        17
Results
         Three months
         4.5K LOC (3K Jython, 1.5K Java + JavaCC)
         25 bugs over three years




Laszlo Systems, Inc.
                                                     18
Jython Advantages
               REPL
        
               Literal syntax
        
               Doctest
        
               Reflection
        
               Java integration
        




Laszlo Systems, Inc.
                                  19
REPL

  >>> c('a=b')
    constants 'a' 'b'
    push 'a' 'b'
    getVariable
    setVariable
  >>> c('a=a*2')
    constants 'a'
    push 'a' 'a'
    getVariable
    push '2'
    multiply
    setVariable
  >>> c('function f(a,b) {return a+b}')
    function2 f(r:2='a', r:1='b') ()
      push 'r:2' 'r:1'
      add
      return
    end


Laszlo Systems, Inc.
                                          20
Doctest
      def substitute(self, str, **keys):
          quot;quot;quot;Parse an expression and replace any identifier with the same
          name as a keyword argument to this function, with the value of
          that key. If the value has type Splice, it's spliced into place
          instead of substituting at the same level.

        >>> s = Parser().substitute
        >>> s('[0,1,2]')
        (ASTArrayLiteral, Literal(0.0), Literal(1), Literal(2))
        >>> s('[_0,1,2]', _0=Literal(quot;subquot;))
        (ASTArrayLiteral, Literal(sub), Literal(1), Literal(2))
        >>> s('[_0,1,2]', _0=s('[a,b,c]'))
        (ASTArrayLiteral, (ASTArrayLiteral, ASTIdentifier(a), ASTIdentifier(b),
ASTIdentifier(c)), Literal(1), Literal(2))
        >>> s('[_0,1,2]', _0=Splice(s('[a,b,c]')))
        (ASTArrayLiteral, ASTArrayLiteral, ASTIdentifier(a), ASTIdentifier(b),
ASTIdentifier(c), Literal(1), Literal(2))

               N.B., there is no attempt to enforce macro hygiene
               quot;quot;quot;




 Laszlo Systems, Inc.
                                                                                  21
Concise Literal Syntax
DefineTests(
    'label',
    Stmts(['a:         while (f()) b:   while (g()) {break; h()}',
           'a:         while (f()) b:   while (g()) {break b; h()}',
           'a:         while (f()) b:   while (g()) {break a; h()}',
           'a:         while (f()) b:   for (p in obj) {break; h()}',
           'a:         while (f()) b:   for (p in obj) {break b; h()}',
           'a:         while (f()) b:   for (p in obj) {break a; h()}',
           'a:         for (p in obj)   b: while (g()) {break; h()}',
           'a:         for (p in obj)   b: while (g()) {break b; h()}',
           'a:         for (p in obj)   b: while (g()) {break a; h()}',
           'a:         for (p in obj)   b: for (p in obj) {break; h()}',
           'a:         for (p in obj)   b: for (p in obj) {break b; h()}',
           'a:         for (p in obj)   b: for (p in obj) {break a; h()}',
           ]))




Laszlo Systems, Inc.
                                                                       22
Reflection

      def visit(self, node):
          fn = getattr(self, 'visit' + node.name)
          fn(node, *node.children)

      def visitArrayLiteral(self, node, *args):
        ...

      def visitBinaryExpressionSequence(self, node, a, op, *args):
       ...

      def visitFunctionDeclaration(self, node, *args):
       ...

      def visitIdentifier(self, node):
       ...

      def visitLiteral(self, node):
       ...


Laszlo Systems, Inc.
                                                                 23
Jython disadvantages
         Execution speed
         Deployment issues




Laszlo Systems, Inc.
                               24
Port Assembler to Java
         1.2KLoC Jython -> 2.7KLoC Java
         Harder to work with
         But...10 times as fast




Laszlo Systems, Inc.
                                           25
Deployment Issues
         Deploying Jython within a J2EE Servlet has (had?)
          severe class loader issues
         Jython triggered a memory manager error in JVM 1.4
         Jython 2.0/Java 1.5 issues




Laszlo Systems, Inc.
                                                               26
However...
         Xalan, Xerces, Jing, Commons Logging, and JDOM
          all had issues too




Laszlo Systems, Inc.
                                                           27
The First Pattern
         Jython saved us a lot of time during development, but
          cost (less) time during deployment.
         But so did several other Java libraries
         But this still makes it difficult to justify, especially to
          deployers (who don’t see the development-time
          advantages)




Laszlo Systems, Inc.
                                                                        28
And then we were done...




Laszlo Systems, Inc.
                                   29
Constraint System (Laszlo 1.0)
Requirements
 • Width of view is a function of parent’s width and view’s ‘border’ property
 • Width is updated whenever parent’s width changes
 • Width is updated whenever ‘border’ property value changes

Observer Pattern
 <view>
   <method event=”oninit”>
      registerListener(parent, ‘width’, myWidthListener);
      registerListener(this, ‘border’, myWidthListener);
      myWidthListener();
   </method>
   <method name=”myWidthListener”>
      this.width = parent.width - 2*this.border;
   </method>
 </view>

Constraint expression
 <view width=”${parent.width - 2*this.border}”/>

Laszlo Systems, Inc.
                                                                                30
Constraint Implementation

      <view width=quot;${parent.width - 2*this.border}quot;/>



       LzInstantiateView(
        {attrs: {
         name: quot;viewquot;,
         $refs: {
          width: function $test$2Elzx_2_46_width_always () {
           this.setAttribute(quot;widthquot;,
             parent.width - 2*this.border)}}}},
        1);

                                  +

              $test$2Elzx_2_46_width_always.dependencies =
               [parent, ‘width’, this, ‘border’]


Laszlo Systems, Inc.
                                                               31
And then we were done...




Laszlo Systems, Inc.
                                  32
KRANK Feature (Laszlo 2.0)
         Problem: Slow initialization time
         Solution: Initialize the application prior to deployment
         Results: 2-4x performance increase, at expense of
          developer time and application size




Laszlo Systems, Inc.
                                                                     33
KRANK feature


               LZX                          Instrumented
               Source File                  object file

                             OpenLaszlo
                              Compiler



                             Flash player



                              KRANK
                              Compiler
               Serialized                   Optimized
               application                  object file
               state




Laszlo Systems, Inc.
                                                           34
But now we’re really done..




Laszlo Systems, Inc.
                                     35
The Second Pattern
         Python (Jython) is good for prototyping
         But, you don’t know when you’re done prototyping




Laszlo Systems, Inc.
                                                             36
OpenLaszlo Doc Tools




Laszlo Systems, Inc.
                              37
OpenLaszlo Doc Tools
                                           schema/                   schema/
                                            lzx.rng                rngparse.xml


                       ant targets                                       imports
                                                                                               schema/
                                         components/                          schema/          tagdocs/
                        tag-xml            Document
                                           **/*.lzx                                             Document
                                                                             rng2xml.py          *.xml




                                                                                             server/jsdocs/
                                                                              server/sc/
                                          lfc/**/*.as
                        api-xml            Document                                             Document
                                                                                                 *.xml
                                                                            jsdoc2xml.py




                                                          server/sc/




                                                                                                              copy
                                                        xmldocutils.py




                                                          docs/src/**

                                                                                                 build/
                                         wrappers/**/
                                                                                              reference/
                                                                            makeXML.py
                                           Document
                                            *xml                                                Document
                                                                                               xml/*.xml


                        combined-xml

                                          wrappers/
                                           Document
                                            *.html


                                                                                                 build/
                                                                                              reference/
                        raw-html                                           makeHTML.py         Document
                                                                                              html/*.html




                                                                                              LPS/docs/
                                                                                              reference/
                                                                            xsl/format.xsl     Document
                        reference-html                                                          *.html




Laszlo Systems, Inc.
                                                                                                                     38
Lots of Languages: Developers Guide




                                         LZX              XHTML
     Target Languages



                            JavaScript     RELAX NG     XML
     Definition Languages


     Implementation
                        JavaCC      Java       Jython         Python   XSLT
     Languages




Laszlo Systems, Inc.
                                                                              39
Lots of Languages: LZX Reference




                                         LZX                       XHTML
     Target Languages



                            JavaScript     RELAX NG          XML
     Definition Languages


     Implementation
                        JavaCC      Java       Jython                Python   XSLT
     Languages
                                                        Utility Library




Laszlo Systems, Inc.
                                                                                     40
The Third Pattern
         There are different requirements for build system and
          deployment
         Components may move between build system and
          deployment...
         ...or be shared by both




Laszlo Systems, Inc.
                                                                  41
Conclusions




Laszlo Systems, Inc.
                       42
Experimentation
         Let us experiment with new features:
                      Krank
                      Constraints
                      PUSH merge
                      Macros
         Swings of “I wish we had ported” vs. “I’m glad we
          didn’t port yet”
         Don’t know when you’re done prototyping




Laszlo Systems, Inc.
                                                              43
Lots of Languages (2)




                                           LZX                 XHTML
     Target Languages



                              JavaScript     RELAX NG      XML
     Definition Languages


     Implementation
                        JavaCC        Java        Jython           Python   XSLT
     Languages
                           Process    Implement     Interoperate




Laszlo Systems, Inc.
                                                                                   44
Migration
         Smooth path between Python and Jython
         Possible path between Jython and Java
         Excellent integration between Jython and Java-based
          tools




Laszlo Systems, Inc.
                                                                45
What would help Jython?
         Smoother path to performance
         Smoother path to deployment




Laszlo Systems, Inc.
                                         46
Q&A




Laszlo Systems, Inc.
                       47

Mais conteúdo relacionado

Mais procurados

Gregor Hohpe Track Intro The Cloud As Middle Ware
Gregor Hohpe Track Intro The Cloud As Middle WareGregor Hohpe Track Intro The Cloud As Middle Ware
Gregor Hohpe Track Intro The Cloud As Middle Waredeimos
 
吴磊 - Silverlight企业级RIA
吴磊 - Silverlight企业级RIA吴磊 - Silverlight企业级RIA
吴磊 - Silverlight企业级RIAd0nn9n
 
(ATS3-GS03) Accelrys Enterprise Platform Deeper Dive
(ATS3-GS03) Accelrys Enterprise Platform Deeper Dive(ATS3-GS03) Accelrys Enterprise Platform Deeper Dive
(ATS3-GS03) Accelrys Enterprise Platform Deeper DiveBIOVIA
 
Weblogic Server
Weblogic ServerWeblogic Server
Weblogic Serveracsvianabr
 
WebClient Overview and 1.8 Roadmap
WebClient Overview and 1.8 RoadmapWebClient Overview and 1.8 Roadmap
WebClient Overview and 1.8 RoadmapCM First Group
 
Enterprise Mashups With Soa
Enterprise Mashups With SoaEnterprise Mashups With Soa
Enterprise Mashups With Soaumityalcinalp
 
New & Emerging _ Mick Andrew _ Adding mobile and web 2.0 UIs to existing appl...
New & Emerging _ Mick Andrew _ Adding mobile and web 2.0 UIs to existing appl...New & Emerging _ Mick Andrew _ Adding mobile and web 2.0 UIs to existing appl...
New & Emerging _ Mick Andrew _ Adding mobile and web 2.0 UIs to existing appl...InSync2011
 
Dave Carroll Application Services Salesforce
Dave Carroll Application Services SalesforceDave Carroll Application Services Salesforce
Dave Carroll Application Services Salesforcedeimos
 
Ajax In Enterprise Portals Wesley Hales
Ajax In Enterprise Portals Wesley HalesAjax In Enterprise Portals Wesley Hales
Ajax In Enterprise Portals Wesley Halesrajivmordani
 
SharePoint Data Anywhere and Everywhere by Chris Beckett - SPTechCon
SharePoint Data Anywhere and Everywhere by Chris Beckett - SPTechConSharePoint Data Anywhere and Everywhere by Chris Beckett - SPTechCon
SharePoint Data Anywhere and Everywhere by Chris Beckett - SPTechConSPTechCon
 
(ATS3-GS02) Accelrys Enterprise Platform in Enterprise Architectures
(ATS3-GS02) Accelrys Enterprise Platform in Enterprise Architectures(ATS3-GS02) Accelrys Enterprise Platform in Enterprise Architectures
(ATS3-GS02) Accelrys Enterprise Platform in Enterprise ArchitecturesBIOVIA
 
Vaadin - Rich Web Applications in Server-side Java without Plug-ins or JavaSc...
Vaadin - Rich Web Applications in Server-side Java without Plug-ins or JavaSc...Vaadin - Rich Web Applications in Server-side Java without Plug-ins or JavaSc...
Vaadin - Rich Web Applications in Server-side Java without Plug-ins or JavaSc...Joonas Lehtinen
 
A guide to ADF fusion development
A guide to ADF fusion developmentA guide to ADF fusion development
A guide to ADF fusion developmentDataNext Solutions
 
Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript: Joo...
Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript: Joo...Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript: Joo...
Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript: Joo...jaxconf
 
Professional Frontend Engineering
Professional Frontend EngineeringProfessional Frontend Engineering
Professional Frontend EngineeringNate Koechley
 
Composing Domain-Specific Languages
Composing Domain-Specific LanguagesComposing Domain-Specific Languages
Composing Domain-Specific LanguagesEelco Visser
 
Java EE 6 Adoption in One of the World’s Largest Online Financial Systems [Ja...
Java EE 6 Adoption in One of the World’s Largest Online Financial Systems [Ja...Java EE 6 Adoption in One of the World’s Largest Online Financial Systems [Ja...
Java EE 6 Adoption in One of the World’s Largest Online Financial Systems [Ja...Hirofumi Iwasaki
 
Ruby on Rails: Building Web Applications Is Fun Again!
Ruby on Rails: Building Web Applications Is Fun Again!Ruby on Rails: Building Web Applications Is Fun Again!
Ruby on Rails: Building Web Applications Is Fun Again!judofyr
 

Mais procurados (20)

Gregor Hohpe Track Intro The Cloud As Middle Ware
Gregor Hohpe Track Intro The Cloud As Middle WareGregor Hohpe Track Intro The Cloud As Middle Ware
Gregor Hohpe Track Intro The Cloud As Middle Ware
 
吴磊 - Silverlight企业级RIA
吴磊 - Silverlight企业级RIA吴磊 - Silverlight企业级RIA
吴磊 - Silverlight企业级RIA
 
(ATS3-GS03) Accelrys Enterprise Platform Deeper Dive
(ATS3-GS03) Accelrys Enterprise Platform Deeper Dive(ATS3-GS03) Accelrys Enterprise Platform Deeper Dive
(ATS3-GS03) Accelrys Enterprise Platform Deeper Dive
 
Weblogic Server
Weblogic ServerWeblogic Server
Weblogic Server
 
WebClient Overview and 1.8 Roadmap
WebClient Overview and 1.8 RoadmapWebClient Overview and 1.8 Roadmap
WebClient Overview and 1.8 Roadmap
 
Enterprise Mashups With Soa
Enterprise Mashups With SoaEnterprise Mashups With Soa
Enterprise Mashups With Soa
 
New & Emerging _ Mick Andrew _ Adding mobile and web 2.0 UIs to existing appl...
New & Emerging _ Mick Andrew _ Adding mobile and web 2.0 UIs to existing appl...New & Emerging _ Mick Andrew _ Adding mobile and web 2.0 UIs to existing appl...
New & Emerging _ Mick Andrew _ Adding mobile and web 2.0 UIs to existing appl...
 
Dave Carroll Application Services Salesforce
Dave Carroll Application Services SalesforceDave Carroll Application Services Salesforce
Dave Carroll Application Services Salesforce
 
Ajax In Enterprise Portals Wesley Hales
Ajax In Enterprise Portals Wesley HalesAjax In Enterprise Portals Wesley Hales
Ajax In Enterprise Portals Wesley Hales
 
SharePoint Data Anywhere and Everywhere by Chris Beckett - SPTechCon
SharePoint Data Anywhere and Everywhere by Chris Beckett - SPTechConSharePoint Data Anywhere and Everywhere by Chris Beckett - SPTechCon
SharePoint Data Anywhere and Everywhere by Chris Beckett - SPTechCon
 
(ATS3-GS02) Accelrys Enterprise Platform in Enterprise Architectures
(ATS3-GS02) Accelrys Enterprise Platform in Enterprise Architectures(ATS3-GS02) Accelrys Enterprise Platform in Enterprise Architectures
(ATS3-GS02) Accelrys Enterprise Platform in Enterprise Architectures
 
Vaadin - Rich Web Applications in Server-side Java without Plug-ins or JavaSc...
Vaadin - Rich Web Applications in Server-side Java without Plug-ins or JavaSc...Vaadin - Rich Web Applications in Server-side Java without Plug-ins or JavaSc...
Vaadin - Rich Web Applications in Server-side Java without Plug-ins or JavaSc...
 
A guide to ADF fusion development
A guide to ADF fusion developmentA guide to ADF fusion development
A guide to ADF fusion development
 
Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript: Joo...
Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript: Joo...Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript: Joo...
Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript: Joo...
 
Professional Frontend Engineering
Professional Frontend EngineeringProfessional Frontend Engineering
Professional Frontend Engineering
 
Crx 2.2 Deep-Dive
Crx 2.2 Deep-DiveCrx 2.2 Deep-Dive
Crx 2.2 Deep-Dive
 
Krishnakumar Rajendran (1)
Krishnakumar Rajendran (1)Krishnakumar Rajendran (1)
Krishnakumar Rajendran (1)
 
Composing Domain-Specific Languages
Composing Domain-Specific LanguagesComposing Domain-Specific Languages
Composing Domain-Specific Languages
 
Java EE 6 Adoption in One of the World’s Largest Online Financial Systems [Ja...
Java EE 6 Adoption in One of the World’s Largest Online Financial Systems [Ja...Java EE 6 Adoption in One of the World’s Largest Online Financial Systems [Ja...
Java EE 6 Adoption in One of the World’s Largest Online Financial Systems [Ja...
 
Ruby on Rails: Building Web Applications Is Fun Again!
Ruby on Rails: Building Web Applications Is Fun Again!Ruby on Rails: Building Web Applications Is Fun Again!
Ruby on Rails: Building Web Applications Is Fun Again!
 

Destaque

A Scalable I/O Manager for GHC
A Scalable I/O Manager for GHCA Scalable I/O Manager for GHC
A Scalable I/O Manager for GHCJohan Tibell
 
Agile Management 2013 - Nie tylko it
Agile Management 2013 - Nie tylko itAgile Management 2013 - Nie tylko it
Agile Management 2013 - Nie tylko itPiotr Burdylo
 
Metasepi team meeting #6: "Snatch-driven development"
Metasepi team meeting #6: "Snatch-driven development"Metasepi team meeting #6: "Snatch-driven development"
Metasepi team meeting #6: "Snatch-driven development"Kiwamu Okabe
 
Wakanda: a new end-to-end JavaScript platform - JSConf Berlin 2009
Wakanda: a new end-to-end JavaScript platform - JSConf Berlin 2009Wakanda: a new end-to-end JavaScript platform - JSConf Berlin 2009
Wakanda: a new end-to-end JavaScript platform - JSConf Berlin 2009Alexandre Morgaut
 
There's a Monster in My Closet: Architecture of a MongoDB-powered Event Proce...
There's a Monster in My Closet: Architecture of a MongoDB-powered Event Proce...There's a Monster in My Closet: Architecture of a MongoDB-powered Event Proce...
There's a Monster in My Closet: Architecture of a MongoDB-powered Event Proce...thegdb
 
erlang at hover.in , Devcamp Blr 09
erlang at hover.in , Devcamp Blr 09erlang at hover.in , Devcamp Blr 09
erlang at hover.in , Devcamp Blr 09Bhasker Kode
 
Parallel-Ready Java Code: Managing Mutation in an Imperative Language
Parallel-Ready Java Code: Managing Mutation in an Imperative LanguageParallel-Ready Java Code: Managing Mutation in an Imperative Language
Parallel-Ready Java Code: Managing Mutation in an Imperative LanguageMaurice Naftalin
 
Managing gang of chaotic developers is complex at Agile Tour Riga 2012
Managing gang of chaotic developers is complex at Agile Tour Riga 2012Managing gang of chaotic developers is complex at Agile Tour Riga 2012
Managing gang of chaotic developers is complex at Agile Tour Riga 2012Piotr Burdylo
 
Présentation Kivy (et projets associés) à Pycon-fr 2013
Présentation Kivy (et projets associés) à Pycon-fr 2013Présentation Kivy (et projets associés) à Pycon-fr 2013
Présentation Kivy (et projets associés) à Pycon-fr 2013Gabriel Pettier
 
Vert.x - JDD 2013 (English)
Vert.x - JDD 2013 (English)Vert.x - JDD 2013 (English)
Vert.x - JDD 2013 (English)Bartek Zdanowski
 
Good and Wicked Fairies, and the Tragedy of the Commons: Understanding the Pe...
Good and Wicked Fairies, and the Tragedy of the Commons: Understanding the Pe...Good and Wicked Fairies, and the Tragedy of the Commons: Understanding the Pe...
Good and Wicked Fairies, and the Tragedy of the Commons: Understanding the Pe...Maurice Naftalin
 
Jensimmons html5live-responsivedesign
Jensimmons html5live-responsivedesignJensimmons html5live-responsivedesign
Jensimmons html5live-responsivedesignJen Simmons
 
Mendeley presentation
Mendeley presentationMendeley presentation
Mendeley presentationDiogo Provete
 
Monadologie
MonadologieMonadologie
Monadologieleague
 
Federated CDNs: What every service provider should know
Federated CDNs: What every service provider should knowFederated CDNs: What every service provider should know
Federated CDNs: What every service provider should knowPatrick Hurley
 
Be careful when entering a casino (Agile by Example 2012)
Be careful when entering a casino (Agile by Example 2012)Be careful when entering a casino (Agile by Example 2012)
Be careful when entering a casino (Agile by Example 2012)Piotr Burdylo
 
Rcpp: Seemless R and C++
Rcpp: Seemless R and C++Rcpp: Seemless R and C++
Rcpp: Seemless R and C++Romain Francois
 
JavaScript Growing Up
JavaScript Growing UpJavaScript Growing Up
JavaScript Growing UpDavid Padbury
 

Destaque (20)

Let's Get to the Rapids
Let's Get to the RapidsLet's Get to the Rapids
Let's Get to the Rapids
 
A Scalable I/O Manager for GHC
A Scalable I/O Manager for GHCA Scalable I/O Manager for GHC
A Scalable I/O Manager for GHC
 
Shooting the Rapids
Shooting the RapidsShooting the Rapids
Shooting the Rapids
 
Agile Management 2013 - Nie tylko it
Agile Management 2013 - Nie tylko itAgile Management 2013 - Nie tylko it
Agile Management 2013 - Nie tylko it
 
Metasepi team meeting #6: "Snatch-driven development"
Metasepi team meeting #6: "Snatch-driven development"Metasepi team meeting #6: "Snatch-driven development"
Metasepi team meeting #6: "Snatch-driven development"
 
Wakanda: a new end-to-end JavaScript platform - JSConf Berlin 2009
Wakanda: a new end-to-end JavaScript platform - JSConf Berlin 2009Wakanda: a new end-to-end JavaScript platform - JSConf Berlin 2009
Wakanda: a new end-to-end JavaScript platform - JSConf Berlin 2009
 
There's a Monster in My Closet: Architecture of a MongoDB-powered Event Proce...
There's a Monster in My Closet: Architecture of a MongoDB-powered Event Proce...There's a Monster in My Closet: Architecture of a MongoDB-powered Event Proce...
There's a Monster in My Closet: Architecture of a MongoDB-powered Event Proce...
 
erlang at hover.in , Devcamp Blr 09
erlang at hover.in , Devcamp Blr 09erlang at hover.in , Devcamp Blr 09
erlang at hover.in , Devcamp Blr 09
 
Parallel-Ready Java Code: Managing Mutation in an Imperative Language
Parallel-Ready Java Code: Managing Mutation in an Imperative LanguageParallel-Ready Java Code: Managing Mutation in an Imperative Language
Parallel-Ready Java Code: Managing Mutation in an Imperative Language
 
Managing gang of chaotic developers is complex at Agile Tour Riga 2012
Managing gang of chaotic developers is complex at Agile Tour Riga 2012Managing gang of chaotic developers is complex at Agile Tour Riga 2012
Managing gang of chaotic developers is complex at Agile Tour Riga 2012
 
Présentation Kivy (et projets associés) à Pycon-fr 2013
Présentation Kivy (et projets associés) à Pycon-fr 2013Présentation Kivy (et projets associés) à Pycon-fr 2013
Présentation Kivy (et projets associés) à Pycon-fr 2013
 
Vert.x - JDD 2013 (English)
Vert.x - JDD 2013 (English)Vert.x - JDD 2013 (English)
Vert.x - JDD 2013 (English)
 
Good and Wicked Fairies, and the Tragedy of the Commons: Understanding the Pe...
Good and Wicked Fairies, and the Tragedy of the Commons: Understanding the Pe...Good and Wicked Fairies, and the Tragedy of the Commons: Understanding the Pe...
Good and Wicked Fairies, and the Tragedy of the Commons: Understanding the Pe...
 
Jensimmons html5live-responsivedesign
Jensimmons html5live-responsivedesignJensimmons html5live-responsivedesign
Jensimmons html5live-responsivedesign
 
Mendeley presentation
Mendeley presentationMendeley presentation
Mendeley presentation
 
Monadologie
MonadologieMonadologie
Monadologie
 
Federated CDNs: What every service provider should know
Federated CDNs: What every service provider should knowFederated CDNs: What every service provider should know
Federated CDNs: What every service provider should know
 
Be careful when entering a casino (Agile by Example 2012)
Be careful when entering a casino (Agile by Example 2012)Be careful when entering a casino (Agile by Example 2012)
Be careful when entering a casino (Agile by Example 2012)
 
Rcpp: Seemless R and C++
Rcpp: Seemless R and C++Rcpp: Seemless R and C++
Rcpp: Seemless R and C++
 
JavaScript Growing Up
JavaScript Growing UpJavaScript Growing Up
JavaScript Growing Up
 

Semelhante a Laszlo PyCon 2005

Flex For Java Architects Ledroff Breizh Jug V Blog Cc
Flex For Java Architects Ledroff Breizh Jug V Blog CcFlex For Java Architects Ledroff Breizh Jug V Blog Cc
Flex For Java Architects Ledroff Breizh Jug V Blog CcFrançois Le Droff
 
Open Innovation means Open Source
Open Innovation means Open SourceOpen Innovation means Open Source
Open Innovation means Open SourceBertrand Delacretaz
 
RIA Platform Comparison
RIA Platform ComparisonRIA Platform Comparison
RIA Platform ComparisonOliver Steele
 
Shake Hooves With BeEF - OWASP AppSec APAC 2012
Shake Hooves With BeEF - OWASP AppSec APAC 2012Shake Hooves With BeEF - OWASP AppSec APAC 2012
Shake Hooves With BeEF - OWASP AppSec APAC 2012Christian Frichot
 
Open Innovation means Open Source
Open Innovation means Open SourceOpen Innovation means Open Source
Open Innovation means Open SourceBertrand Delacretaz
 
Log everything!
Log everything!Log everything!
Log everything!ICANS GmbH
 
Úvod do programování 7
Úvod do programování 7Úvod do programování 7
Úvod do programování 7Karel Minarik
 
JavaScript Libraries: The Big Picture
JavaScript Libraries: The Big PictureJavaScript Libraries: The Big Picture
JavaScript Libraries: The Big PictureSimon Willison
 
From Flash to Canvas - a penchant for black holes
From Flash to Canvas - a penchant for black holesFrom Flash to Canvas - a penchant for black holes
From Flash to Canvas - a penchant for black holesPatric Lanhed
 
How to make Ajax Libraries work for you
How to make Ajax Libraries work for youHow to make Ajax Libraries work for you
How to make Ajax Libraries work for youSimon Willison
 
Developing Java Web Applications
Developing Java Web ApplicationsDeveloping Java Web Applications
Developing Java Web Applicationshchen1
 
Open Source Identity Integration with OpenSSO
Open Source Identity Integration with OpenSSOOpen Source Identity Integration with OpenSSO
Open Source Identity Integration with OpenSSOelliando dias
 
qooxdoo - Open Source Ajax Framework
qooxdoo - Open Source Ajax Frameworkqooxdoo - Open Source Ajax Framework
qooxdoo - Open Source Ajax Frameworkecker
 
XPages Blast - ILUG 2010
XPages Blast - ILUG 2010XPages Blast - ILUG 2010
XPages Blast - ILUG 2010Tim Clark
 
The YUI Library (Yahoo! Course @NCU)
The YUI Library (Yahoo! Course @NCU)The YUI Library (Yahoo! Course @NCU)
The YUI Library (Yahoo! Course @NCU)Joseph Chiang
 
Running your Java EE 6 applications in the Cloud @ Silicon Valley Code Camp 2010
Running your Java EE 6 applications in the Cloud @ Silicon Valley Code Camp 2010Running your Java EE 6 applications in the Cloud @ Silicon Valley Code Camp 2010
Running your Java EE 6 applications in the Cloud @ Silicon Valley Code Camp 2010Arun Gupta
 
GeekAustin DevOps
GeekAustin DevOpsGeekAustin DevOps
GeekAustin DevOpsMatt Ray
 
CRX Best practices
CRX Best practicesCRX Best practices
CRX Best practiceslisui0807
 

Semelhante a Laszlo PyCon 2005 (20)

Flex For Java Architects Ledroff Breizh Jug V Blog Cc
Flex For Java Architects Ledroff Breizh Jug V Blog CcFlex For Java Architects Ledroff Breizh Jug V Blog Cc
Flex For Java Architects Ledroff Breizh Jug V Blog Cc
 
Open Innovation means Open Source
Open Innovation means Open SourceOpen Innovation means Open Source
Open Innovation means Open Source
 
RIA Platform Comparison
RIA Platform ComparisonRIA Platform Comparison
RIA Platform Comparison
 
Ajaxworld West 08
Ajaxworld West 08Ajaxworld West 08
Ajaxworld West 08
 
Shake Hooves With BeEF - OWASP AppSec APAC 2012
Shake Hooves With BeEF - OWASP AppSec APAC 2012Shake Hooves With BeEF - OWASP AppSec APAC 2012
Shake Hooves With BeEF - OWASP AppSec APAC 2012
 
Open Innovation means Open Source
Open Innovation means Open SourceOpen Innovation means Open Source
Open Innovation means Open Source
 
Log everything!
Log everything!Log everything!
Log everything!
 
Úvod do programování 7
Úvod do programování 7Úvod do programování 7
Úvod do programování 7
 
JavaScript Libraries: The Big Picture
JavaScript Libraries: The Big PictureJavaScript Libraries: The Big Picture
JavaScript Libraries: The Big Picture
 
From Flash to Canvas - a penchant for black holes
From Flash to Canvas - a penchant for black holesFrom Flash to Canvas - a penchant for black holes
From Flash to Canvas - a penchant for black holes
 
How to make Ajax Libraries work for you
How to make Ajax Libraries work for youHow to make Ajax Libraries work for you
How to make Ajax Libraries work for you
 
Developing Java Web Applications
Developing Java Web ApplicationsDeveloping Java Web Applications
Developing Java Web Applications
 
Open Source Identity Integration with OpenSSO
Open Source Identity Integration with OpenSSOOpen Source Identity Integration with OpenSSO
Open Source Identity Integration with OpenSSO
 
qooxdoo - Open Source Ajax Framework
qooxdoo - Open Source Ajax Frameworkqooxdoo - Open Source Ajax Framework
qooxdoo - Open Source Ajax Framework
 
XPages Blast - ILUG 2010
XPages Blast - ILUG 2010XPages Blast - ILUG 2010
XPages Blast - ILUG 2010
 
The YUI Library (Yahoo! Course @NCU)
The YUI Library (Yahoo! Course @NCU)The YUI Library (Yahoo! Course @NCU)
The YUI Library (Yahoo! Course @NCU)
 
Running your Java EE 6 applications in the Cloud @ Silicon Valley Code Camp 2010
Running your Java EE 6 applications in the Cloud @ Silicon Valley Code Camp 2010Running your Java EE 6 applications in the Cloud @ Silicon Valley Code Camp 2010
Running your Java EE 6 applications in the Cloud @ Silicon Valley Code Camp 2010
 
GeekAustin DevOps
GeekAustin DevOpsGeekAustin DevOps
GeekAustin DevOps
 
CRX Best practices
CRX Best practicesCRX Best practices
CRX Best practices
 
The State of Wicket
The State of WicketThe State of Wicket
The State of Wicket
 

Último

Value Proposition canvas- Customer needs and pains
Value Proposition canvas- Customer needs and painsValue Proposition canvas- Customer needs and pains
Value Proposition canvas- Customer needs and painsP&CO
 
Monte Carlo simulation : Simulation using MCSM
Monte Carlo simulation : Simulation using MCSMMonte Carlo simulation : Simulation using MCSM
Monte Carlo simulation : Simulation using MCSMRavindra Nath Shukla
 
Call Girls In Holiday Inn Express Gurugram➥99902@11544 ( Best price)100% Genu...
Call Girls In Holiday Inn Express Gurugram➥99902@11544 ( Best price)100% Genu...Call Girls In Holiday Inn Express Gurugram➥99902@11544 ( Best price)100% Genu...
Call Girls In Holiday Inn Express Gurugram➥99902@11544 ( Best price)100% Genu...lizamodels9
 
7.pdf This presentation captures many uses and the significance of the number...
7.pdf This presentation captures many uses and the significance of the number...7.pdf This presentation captures many uses and the significance of the number...
7.pdf This presentation captures many uses and the significance of the number...Paul Menig
 
HONOR Veterans Event Keynote by Michael Hawkins
HONOR Veterans Event Keynote by Michael HawkinsHONOR Veterans Event Keynote by Michael Hawkins
HONOR Veterans Event Keynote by Michael HawkinsMichael W. Hawkins
 
Mysore Call Girls 8617370543 WhatsApp Number 24x7 Best Services
Mysore Call Girls 8617370543 WhatsApp Number 24x7 Best ServicesMysore Call Girls 8617370543 WhatsApp Number 24x7 Best Services
Mysore Call Girls 8617370543 WhatsApp Number 24x7 Best ServicesDipal Arora
 
KYC-Verified Accounts: Helping Companies Handle Challenging Regulatory Enviro...
KYC-Verified Accounts: Helping Companies Handle Challenging Regulatory Enviro...KYC-Verified Accounts: Helping Companies Handle Challenging Regulatory Enviro...
KYC-Verified Accounts: Helping Companies Handle Challenging Regulatory Enviro...Any kyc Account
 
Enhancing and Restoring Safety & Quality Cultures - Dave Litwiller - May 2024...
Enhancing and Restoring Safety & Quality Cultures - Dave Litwiller - May 2024...Enhancing and Restoring Safety & Quality Cultures - Dave Litwiller - May 2024...
Enhancing and Restoring Safety & Quality Cultures - Dave Litwiller - May 2024...Dave Litwiller
 
Best VIP Call Girls Noida Sector 40 Call Me: 8448380779
Best VIP Call Girls Noida Sector 40 Call Me: 8448380779Best VIP Call Girls Noida Sector 40 Call Me: 8448380779
Best VIP Call Girls Noida Sector 40 Call Me: 8448380779Delhi Call girls
 
B.COM Unit – 4 ( CORPORATE SOCIAL RESPONSIBILITY ( CSR ).pptx
B.COM Unit – 4 ( CORPORATE SOCIAL RESPONSIBILITY ( CSR ).pptxB.COM Unit – 4 ( CORPORATE SOCIAL RESPONSIBILITY ( CSR ).pptx
B.COM Unit – 4 ( CORPORATE SOCIAL RESPONSIBILITY ( CSR ).pptxpriyanshujha201
 
Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...
Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...
Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...anilsa9823
 
Creating Low-Code Loan Applications using the Trisotech Mortgage Feature Set
Creating Low-Code Loan Applications using the Trisotech Mortgage Feature SetCreating Low-Code Loan Applications using the Trisotech Mortgage Feature Set
Creating Low-Code Loan Applications using the Trisotech Mortgage Feature SetDenis Gagné
 
RSA Conference Exhibitor List 2024 - Exhibitors Data
RSA Conference Exhibitor List 2024 - Exhibitors DataRSA Conference Exhibitor List 2024 - Exhibitors Data
RSA Conference Exhibitor List 2024 - Exhibitors DataExhibitors Data
 
Boost the utilization of your HCL environment by reevaluating use cases and f...
Boost the utilization of your HCL environment by reevaluating use cases and f...Boost the utilization of your HCL environment by reevaluating use cases and f...
Boost the utilization of your HCL environment by reevaluating use cases and f...Roland Driesen
 
Regression analysis: Simple Linear Regression Multiple Linear Regression
Regression analysis:  Simple Linear Regression Multiple Linear RegressionRegression analysis:  Simple Linear Regression Multiple Linear Regression
Regression analysis: Simple Linear Regression Multiple Linear RegressionRavindra Nath Shukla
 
Progress Report - Oracle Database Analyst Summit
Progress  Report - Oracle Database Analyst SummitProgress  Report - Oracle Database Analyst Summit
Progress Report - Oracle Database Analyst SummitHolger Mueller
 
The Coffee Bean & Tea Leaf(CBTL), Business strategy case study
The Coffee Bean & Tea Leaf(CBTL), Business strategy case studyThe Coffee Bean & Tea Leaf(CBTL), Business strategy case study
The Coffee Bean & Tea Leaf(CBTL), Business strategy case studyEthan lee
 
VIP Call Girls Gandi Maisamma ( Hyderabad ) Phone 8250192130 | ₹5k To 25k Wit...
VIP Call Girls Gandi Maisamma ( Hyderabad ) Phone 8250192130 | ₹5k To 25k Wit...VIP Call Girls Gandi Maisamma ( Hyderabad ) Phone 8250192130 | ₹5k To 25k Wit...
VIP Call Girls Gandi Maisamma ( Hyderabad ) Phone 8250192130 | ₹5k To 25k Wit...Suhani Kapoor
 
9599632723 Top Call Girls in Delhi at your Door Step Available 24x7 Delhi
9599632723 Top Call Girls in Delhi at your Door Step Available 24x7 Delhi9599632723 Top Call Girls in Delhi at your Door Step Available 24x7 Delhi
9599632723 Top Call Girls in Delhi at your Door Step Available 24x7 DelhiCall Girls in Delhi
 

Último (20)

Value Proposition canvas- Customer needs and pains
Value Proposition canvas- Customer needs and painsValue Proposition canvas- Customer needs and pains
Value Proposition canvas- Customer needs and pains
 
Monte Carlo simulation : Simulation using MCSM
Monte Carlo simulation : Simulation using MCSMMonte Carlo simulation : Simulation using MCSM
Monte Carlo simulation : Simulation using MCSM
 
Call Girls In Holiday Inn Express Gurugram➥99902@11544 ( Best price)100% Genu...
Call Girls In Holiday Inn Express Gurugram➥99902@11544 ( Best price)100% Genu...Call Girls In Holiday Inn Express Gurugram➥99902@11544 ( Best price)100% Genu...
Call Girls In Holiday Inn Express Gurugram➥99902@11544 ( Best price)100% Genu...
 
7.pdf This presentation captures many uses and the significance of the number...
7.pdf This presentation captures many uses and the significance of the number...7.pdf This presentation captures many uses and the significance of the number...
7.pdf This presentation captures many uses and the significance of the number...
 
unwanted pregnancy Kit [+918133066128] Abortion Pills IN Dubai UAE Abudhabi
unwanted pregnancy Kit [+918133066128] Abortion Pills IN Dubai UAE Abudhabiunwanted pregnancy Kit [+918133066128] Abortion Pills IN Dubai UAE Abudhabi
unwanted pregnancy Kit [+918133066128] Abortion Pills IN Dubai UAE Abudhabi
 
HONOR Veterans Event Keynote by Michael Hawkins
HONOR Veterans Event Keynote by Michael HawkinsHONOR Veterans Event Keynote by Michael Hawkins
HONOR Veterans Event Keynote by Michael Hawkins
 
Mysore Call Girls 8617370543 WhatsApp Number 24x7 Best Services
Mysore Call Girls 8617370543 WhatsApp Number 24x7 Best ServicesMysore Call Girls 8617370543 WhatsApp Number 24x7 Best Services
Mysore Call Girls 8617370543 WhatsApp Number 24x7 Best Services
 
KYC-Verified Accounts: Helping Companies Handle Challenging Regulatory Enviro...
KYC-Verified Accounts: Helping Companies Handle Challenging Regulatory Enviro...KYC-Verified Accounts: Helping Companies Handle Challenging Regulatory Enviro...
KYC-Verified Accounts: Helping Companies Handle Challenging Regulatory Enviro...
 
Enhancing and Restoring Safety & Quality Cultures - Dave Litwiller - May 2024...
Enhancing and Restoring Safety & Quality Cultures - Dave Litwiller - May 2024...Enhancing and Restoring Safety & Quality Cultures - Dave Litwiller - May 2024...
Enhancing and Restoring Safety & Quality Cultures - Dave Litwiller - May 2024...
 
Best VIP Call Girls Noida Sector 40 Call Me: 8448380779
Best VIP Call Girls Noida Sector 40 Call Me: 8448380779Best VIP Call Girls Noida Sector 40 Call Me: 8448380779
Best VIP Call Girls Noida Sector 40 Call Me: 8448380779
 
B.COM Unit – 4 ( CORPORATE SOCIAL RESPONSIBILITY ( CSR ).pptx
B.COM Unit – 4 ( CORPORATE SOCIAL RESPONSIBILITY ( CSR ).pptxB.COM Unit – 4 ( CORPORATE SOCIAL RESPONSIBILITY ( CSR ).pptx
B.COM Unit – 4 ( CORPORATE SOCIAL RESPONSIBILITY ( CSR ).pptx
 
Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...
Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...
Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...
 
Creating Low-Code Loan Applications using the Trisotech Mortgage Feature Set
Creating Low-Code Loan Applications using the Trisotech Mortgage Feature SetCreating Low-Code Loan Applications using the Trisotech Mortgage Feature Set
Creating Low-Code Loan Applications using the Trisotech Mortgage Feature Set
 
RSA Conference Exhibitor List 2024 - Exhibitors Data
RSA Conference Exhibitor List 2024 - Exhibitors DataRSA Conference Exhibitor List 2024 - Exhibitors Data
RSA Conference Exhibitor List 2024 - Exhibitors Data
 
Boost the utilization of your HCL environment by reevaluating use cases and f...
Boost the utilization of your HCL environment by reevaluating use cases and f...Boost the utilization of your HCL environment by reevaluating use cases and f...
Boost the utilization of your HCL environment by reevaluating use cases and f...
 
Regression analysis: Simple Linear Regression Multiple Linear Regression
Regression analysis:  Simple Linear Regression Multiple Linear RegressionRegression analysis:  Simple Linear Regression Multiple Linear Regression
Regression analysis: Simple Linear Regression Multiple Linear Regression
 
Progress Report - Oracle Database Analyst Summit
Progress  Report - Oracle Database Analyst SummitProgress  Report - Oracle Database Analyst Summit
Progress Report - Oracle Database Analyst Summit
 
The Coffee Bean & Tea Leaf(CBTL), Business strategy case study
The Coffee Bean & Tea Leaf(CBTL), Business strategy case studyThe Coffee Bean & Tea Leaf(CBTL), Business strategy case study
The Coffee Bean & Tea Leaf(CBTL), Business strategy case study
 
VIP Call Girls Gandi Maisamma ( Hyderabad ) Phone 8250192130 | ₹5k To 25k Wit...
VIP Call Girls Gandi Maisamma ( Hyderabad ) Phone 8250192130 | ₹5k To 25k Wit...VIP Call Girls Gandi Maisamma ( Hyderabad ) Phone 8250192130 | ₹5k To 25k Wit...
VIP Call Girls Gandi Maisamma ( Hyderabad ) Phone 8250192130 | ₹5k To 25k Wit...
 
9599632723 Top Call Girls in Delhi at your Door Step Available 24x7 Delhi
9599632723 Top Call Girls in Delhi at your Door Step Available 24x7 Delhi9599632723 Top Call Girls in Delhi at your Door Step Available 24x7 Delhi
9599632723 Top Call Girls in Delhi at your Door Step Available 24x7 Delhi
 

Laszlo PyCon 2005

  • 1. OpenLaszlo: A Python Success Story PyCon 2005 Oliver Steele Chief Software Architect Laszlo Systems, Inc. March 23, 2005
  • 2. Lots of Languages LZX XHTML Target Languages JavaScript RELAX NG XML Definition Languages Implementation JavaCC Java Jython Python XSLT Languages Laszlo Systems, Inc. 2
  • 3. Outline  What we built  OpenLaszlo platform  Demos  Architecture  How we built it  Script compiler  Cool features  Doc tools  Synergy  What we learned  Technical challenges  Social challenges  Why it worked (and what didn’t) Laszlo Systems, Inc. 3
  • 4. Laszlo Systems  Founded in 2001  Team from Apple, Adobe, Allaire, Excite, GO, Farallon, and Macromedia  20 developers in Boston and San Francisco Bay  (Looking for 21st)  News  October 5, 2004: Platform released as Open Source  October 13, 2004: Company receives Series B funding  March 2005: Earthlink announces use of Laszlo Mail Laszlo Systems, Inc. 4
  • 5. Laszlo Vision Develop and market Rich Internet Applications for customer-facing websites Establish the Laszlo platform as the standard, open source software platform of choice for such applications Laszlo Systems, Inc. 5
  • 6. Demos  Calendar  Dashboard Laszlo Systems, Inc. 6
  • 7. Who Uses OpenLaszlo? Over 20M consumers have used Laszlo-based applications 7 Laszlo Systems, Inc.
  • 8. Under the Hood: Platform Architecture XML Source OpenLaszlo Platform Files swf object file Compiler Linker Flash player GIFs, JPEGs, User interface Runtime PNGs components Library J2EE Server Client Laszlo Systems, Inc. 8
  • 9. Under the Hood (2): Removing the Server XML Source OpenLaszlo Platform Files swf object file Compiler Linker Web Server Flash player GIFs, JPEGs, User interface Runtime PNGs components Library Client Laszlo Systems, Inc. 9
  • 10. Script Compiler  Compiles JavaScript to Flash bytecode  Plus unanticipated cool features Laszlo Systems, Inc. 10
  • 11. Laszlo Source Code (LZX) <canvas> <window> <button onclick=” animate(‘x’, 100, 1000, true)”> Click me! </button> </window> </canvas>  Source hierarchy mirrors object hierarchy  Embedded JavaScript  Constraints, data binding, and declarative states Laszlo Systems, Inc. 11
  • 12. Script Compiler  Requirements  100% Java  JavaScript -> ActionScript byte code  Three months (concurrent with language design, API design, XML compiler, and compiler architecture)  Why not Java?  I’d written a lot of code in Java and Python, and didn’t think I could write the Java version in time.  JWordNet  PyWordNet  Evaluation  Java  Jython  SML  ICON Laszlo Systems, Inc. 12
  • 13. Script Compiler: The 10,000 foot view LZX swf (Flash) Source File object file OpenLaszlo Compiler 88450008006174747273006e61 6d65004c7a496e7374616e74696 174655669657700436c69636b2 06d6521006368696c6472656e0 <window> 077696e646f7700627574746f6e 007465787400960c0007020000 <button>Click me!</button> 000800070000000043960d0008 04080008070803070100000043 </window> 96090008010806070200000043 96050007010000004296090008 01080507030000004396070007 0200000008023d1700 Laszlo Systems, Inc. 13
  • 14. Script Compiler: The 5,000 foot view LZX swf (Flash) Source File object file XML Linker Compiler Script Compiler JavaScript ActionScript byte code Laszlo Systems, Inc. 14
  • 15. Script Compiler: The 1,000 foot view LZX swf (Flash) Source File object file XML Java Linker Compiler ActionScript JavaScript byte code JavaCC Jython Parser Assembler Code Generator JavaScript ActionScript AST assembly Laszlo Systems, Inc. 15
  • 16. Compilation Stages LZX (XML) ActionScript assembly Byte code constants 'attrs' 'name' 88450008006 <window> 17474727300 'LzInstantiateView' 6e616d65004c 'Click me!' 'children' <button>Click me!</button> 7a496e737461 'window' 'button' 'text' 6e746961746 </window> push '2' 'attrs' '0' 55669657700 436c69636b2 initObject 06d65210063 push 'children' 'attrs' 68696c64726 'text' 'Click me!' '1' 56e0077696e6 46f770062757 initObject 4746f6e00746 push 'name' 'button' '2' 5787400960c JavaScript 00070200000 initObject LzInstantiateView( 00800070000 push '1' 000043960d0 {name: quot;windowquot;, 00804080008 initArray 07080307010 attrs: {}, push 'name' 'window' '3' 00000439609 children: 00080108060 initObject 70200000043 [{name: quot;buttonquot;, push '2' 96050007010 attrs: {text: quot;Click 00000429609 'LzInstantiateView' 00080108050 me!quot;}}]}, callFunction 70300000043 2); 96070007020 pop 0000008023d 1700 Laszlo Systems, Inc. 16
  • 17. Embedded JavaScript <button onclick=quot;animate('x', 100, 1000, true)quot;/> LzInstantiateView( {name: quot;buttonquot;, attrs: { $events: {onclick: function $test$2Elzx_2_52_onclick_event () { animate('x', 100, 1000, true)}}, clickable: true}}, 1); Laszlo Systems, Inc. 17
  • 18. Results  Three months  4.5K LOC (3K Jython, 1.5K Java + JavaCC)  25 bugs over three years Laszlo Systems, Inc. 18
  • 19. Jython Advantages REPL  Literal syntax  Doctest  Reflection  Java integration  Laszlo Systems, Inc. 19
  • 20. REPL >>> c('a=b') constants 'a' 'b' push 'a' 'b' getVariable setVariable >>> c('a=a*2') constants 'a' push 'a' 'a' getVariable push '2' multiply setVariable >>> c('function f(a,b) {return a+b}') function2 f(r:2='a', r:1='b') () push 'r:2' 'r:1' add return end Laszlo Systems, Inc. 20
  • 21. Doctest def substitute(self, str, **keys): quot;quot;quot;Parse an expression and replace any identifier with the same name as a keyword argument to this function, with the value of that key. If the value has type Splice, it's spliced into place instead of substituting at the same level. >>> s = Parser().substitute >>> s('[0,1,2]') (ASTArrayLiteral, Literal(0.0), Literal(1), Literal(2)) >>> s('[_0,1,2]', _0=Literal(quot;subquot;)) (ASTArrayLiteral, Literal(sub), Literal(1), Literal(2)) >>> s('[_0,1,2]', _0=s('[a,b,c]')) (ASTArrayLiteral, (ASTArrayLiteral, ASTIdentifier(a), ASTIdentifier(b), ASTIdentifier(c)), Literal(1), Literal(2)) >>> s('[_0,1,2]', _0=Splice(s('[a,b,c]'))) (ASTArrayLiteral, ASTArrayLiteral, ASTIdentifier(a), ASTIdentifier(b), ASTIdentifier(c), Literal(1), Literal(2)) N.B., there is no attempt to enforce macro hygiene quot;quot;quot; Laszlo Systems, Inc. 21
  • 22. Concise Literal Syntax DefineTests( 'label', Stmts(['a: while (f()) b: while (g()) {break; h()}', 'a: while (f()) b: while (g()) {break b; h()}', 'a: while (f()) b: while (g()) {break a; h()}', 'a: while (f()) b: for (p in obj) {break; h()}', 'a: while (f()) b: for (p in obj) {break b; h()}', 'a: while (f()) b: for (p in obj) {break a; h()}', 'a: for (p in obj) b: while (g()) {break; h()}', 'a: for (p in obj) b: while (g()) {break b; h()}', 'a: for (p in obj) b: while (g()) {break a; h()}', 'a: for (p in obj) b: for (p in obj) {break; h()}', 'a: for (p in obj) b: for (p in obj) {break b; h()}', 'a: for (p in obj) b: for (p in obj) {break a; h()}', ])) Laszlo Systems, Inc. 22
  • 23. Reflection def visit(self, node): fn = getattr(self, 'visit' + node.name) fn(node, *node.children) def visitArrayLiteral(self, node, *args): ... def visitBinaryExpressionSequence(self, node, a, op, *args): ... def visitFunctionDeclaration(self, node, *args): ... def visitIdentifier(self, node): ... def visitLiteral(self, node): ... Laszlo Systems, Inc. 23
  • 24. Jython disadvantages  Execution speed  Deployment issues Laszlo Systems, Inc. 24
  • 25. Port Assembler to Java  1.2KLoC Jython -> 2.7KLoC Java  Harder to work with  But...10 times as fast Laszlo Systems, Inc. 25
  • 26. Deployment Issues  Deploying Jython within a J2EE Servlet has (had?) severe class loader issues  Jython triggered a memory manager error in JVM 1.4  Jython 2.0/Java 1.5 issues Laszlo Systems, Inc. 26
  • 27. However...  Xalan, Xerces, Jing, Commons Logging, and JDOM all had issues too Laszlo Systems, Inc. 27
  • 28. The First Pattern  Jython saved us a lot of time during development, but cost (less) time during deployment.  But so did several other Java libraries  But this still makes it difficult to justify, especially to deployers (who don’t see the development-time advantages) Laszlo Systems, Inc. 28
  • 29. And then we were done... Laszlo Systems, Inc. 29
  • 30. Constraint System (Laszlo 1.0) Requirements • Width of view is a function of parent’s width and view’s ‘border’ property • Width is updated whenever parent’s width changes • Width is updated whenever ‘border’ property value changes Observer Pattern <view> <method event=”oninit”> registerListener(parent, ‘width’, myWidthListener); registerListener(this, ‘border’, myWidthListener); myWidthListener(); </method> <method name=”myWidthListener”> this.width = parent.width - 2*this.border; </method> </view> Constraint expression <view width=”${parent.width - 2*this.border}”/> Laszlo Systems, Inc. 30
  • 31. Constraint Implementation <view width=quot;${parent.width - 2*this.border}quot;/> LzInstantiateView( {attrs: { name: quot;viewquot;, $refs: { width: function $test$2Elzx_2_46_width_always () { this.setAttribute(quot;widthquot;, parent.width - 2*this.border)}}}}, 1); + $test$2Elzx_2_46_width_always.dependencies = [parent, ‘width’, this, ‘border’] Laszlo Systems, Inc. 31
  • 32. And then we were done... Laszlo Systems, Inc. 32
  • 33. KRANK Feature (Laszlo 2.0)  Problem: Slow initialization time  Solution: Initialize the application prior to deployment  Results: 2-4x performance increase, at expense of developer time and application size Laszlo Systems, Inc. 33
  • 34. KRANK feature LZX Instrumented Source File object file OpenLaszlo Compiler Flash player KRANK Compiler Serialized Optimized application object file state Laszlo Systems, Inc. 34
  • 35. But now we’re really done.. Laszlo Systems, Inc. 35
  • 36. The Second Pattern  Python (Jython) is good for prototyping  But, you don’t know when you’re done prototyping Laszlo Systems, Inc. 36
  • 37. OpenLaszlo Doc Tools Laszlo Systems, Inc. 37
  • 38. OpenLaszlo Doc Tools schema/ schema/ lzx.rng rngparse.xml ant targets imports schema/ components/ schema/ tagdocs/ tag-xml Document **/*.lzx Document rng2xml.py *.xml server/jsdocs/ server/sc/ lfc/**/*.as api-xml Document Document *.xml jsdoc2xml.py server/sc/ copy xmldocutils.py docs/src/** build/ wrappers/**/ reference/ makeXML.py Document *xml Document xml/*.xml combined-xml wrappers/ Document *.html build/ reference/ raw-html makeHTML.py Document html/*.html LPS/docs/ reference/ xsl/format.xsl Document reference-html *.html Laszlo Systems, Inc. 38
  • 39. Lots of Languages: Developers Guide LZX XHTML Target Languages JavaScript RELAX NG XML Definition Languages Implementation JavaCC Java Jython Python XSLT Languages Laszlo Systems, Inc. 39
  • 40. Lots of Languages: LZX Reference LZX XHTML Target Languages JavaScript RELAX NG XML Definition Languages Implementation JavaCC Java Jython Python XSLT Languages Utility Library Laszlo Systems, Inc. 40
  • 41. The Third Pattern  There are different requirements for build system and deployment  Components may move between build system and deployment...  ...or be shared by both Laszlo Systems, Inc. 41
  • 43. Experimentation  Let us experiment with new features:  Krank  Constraints  PUSH merge  Macros  Swings of “I wish we had ported” vs. “I’m glad we didn’t port yet”  Don’t know when you’re done prototyping Laszlo Systems, Inc. 43
  • 44. Lots of Languages (2) LZX XHTML Target Languages JavaScript RELAX NG XML Definition Languages Implementation JavaCC Java Jython Python XSLT Languages Process Implement Interoperate Laszlo Systems, Inc. 44
  • 45. Migration  Smooth path between Python and Jython  Possible path between Jython and Java  Excellent integration between Jython and Java-based tools Laszlo Systems, Inc. 45
  • 46. What would help Jython?  Smoother path to performance  Smoother path to deployment Laszlo Systems, Inc. 46