KEMBAR78
Tooling for the JavaScript Era | PDF
Tooling for the JavaScript era
                                     Andy Clement, Staff Engineer
                                     Martin Lippert, Staff Engineer
                           Andrew Eisenberg, Senior Member of Technical Staff


© 2012 SpringOne 2GX. All rights reserved. Do not distribute without permission.
Speaker Introduction
              •    Andy Clement
                    –  Staff Engineer, R&D
                    –  Lead, language lab

              •    Martin Lippert
                    –  Staff Engineer, R&D
                    –  Lead, development tools

              •    Andrew Eisenberg
                    –  Senior Member of Technical Staff, R&D
                    –  Lead, Groovy-Eclipse

2
Disclaimer
•  This session may contain product features that are
   currently under development.
•  This session/overview of the new technology represents
   no commitment from SpringSource/VMware to deliver
   these features in any generally available product. 
•  Features are subject to change, and must not be
   included in contracts, purchase orders, or sales
   agreements of any kind. 
•  Technical feasibility and market demand will affect final
   delivery. 
•  Pricing and packaging for any new technologies or
   features discussed or presented have not been
   determined
3
Agenda
•    The basic idea
•    Observations and assumptions
•    Our prototypes
•    Where are we heading?




4
The basic idea
•  Where are IDE and development tools in general heading
   towards?
    –    Big integrated desktop IDE?
    –    Lightweight editors?
    –    Browser-based IDEs?
    –    Does Cloud have an impact?

•  Why can Google search the web in 10ms, but it takes
   1000ms or more for my IDE to lookup a type hierarchy

5
Exploring…
•  Lets do things differently:
    –    Browser-based
    –    Lightweight instead of fully integrated IDEs
    –    Maybe cloud hosted
    –    Innovate…


•  And see what comes out of that…



6
Exploration
•  Non-coding work:
    –  Talk to people
    –  Ask questions
    –  Scribble
•  Coding work:
    –  Prototyping
    –  Shipping early



7
JavaScript
•  Increasing in popularity
•  Not only web UI gadgets anymore
    –  Serious large-scale apps in JavaScript
    –  Server-side JS (node.js)
•  Other dialects interesting: CoffeeScript, TypeScript
    –  JS is first priority
•  Fits nicely into our scope for browser-based tooling



8
Results and assumptions #1
•  Lightweight beats heavyweight
    –  Simple editors still the most popular JS tool
    –  Don’t want the uber tool


•  Speed is essential (startup, coding, typing)
    –  No acceptance for long startups, delay in typing




9
Results and assumptions #2
•  Real code comprehension missed a lot
     –  People would love to get good content-assist and code-
        completion
        •  Aware of module definitions (AMD, RequireJS, …)
        •  Aware of frameworks
     –  Fast/accurate navigation
     –  Early error indication (more than just JSLint)




10
Results and assumptions #3
•  Debugging is great, but good integration with editing is
   missing
     –  Workarounds exist (for Chrome Dev Tools, for example)
     –  Better integration would be good

•  Connecting with existing popular tools




11
Results and assumptions #4
•  A cloud-hosted workspace?
     –  Need to work offline
     –  Need to use other tools on my machine on the files

•  A cloud-hosted tool?
     –    Collaborative editing
     –    Social coding
     –    Zero installation – always up-to-date
     –    Technically using cloud (aka unlimited) resources
12
Let’s prototype




13
Prototyping
•  Build some basic tools with key features that meet user
   need
•  Make them available
•  Collect feedback, adjust direction as necessary




14
Prototype #1
•  Build:
     –  Editing tool with server side ‘cloud’ workspace
        •  browser based editing experience
     –  Good content assist
     –  Reuse tech where appropriate
     –  No preference on backend technology




15
Prototype #1: Eclipse Orion

         “Browser-based open tool integration platform”

•    Eclipse Project
•    Client/Server tool
•    Orion is a tools platform
•    Not an IDE in a browser tab



16
Prototype #1: Features
•  An Eclipse Orion deployed internally in VMware
•  With extra capabilities:
     –  Better content assist than real orion
     –  Basic command line console included for running some
        server side commands
        •  e.g. vmc push to Cloud Foundry


•  What happened?


17
What happened?
•  Very little interest
     –  Developers are busy people
     –  The benefits of basic content assist did not outweigh cost of
        giving up their environment
     –  Developers happier with code on their machine
     –  Even just to ‘try it out’ they had to migrate some code over
        to the cloud workspace




18
Prototype #2
•  Learn from our own experiences extending Orion
     –  What do we need?


•  Create a tool that would support local or remote
   workspace
     –  Continues to be a web app, just with a local server
     –  Can optionally have the server deployed remotely
     –  Keep a low adoption barrier


19
Prototype #2
•  Could use Orion, but:
     –  UI for Orion not quite as snappy/fast as we wanted
     –  Server is a bit heavy
     –  Orion offered more facilities than we wanted
        •  Another Git UI
        •  Multi user setup




20
Prototype #2
•  Reuse Eclipse Orion Code Editor
•  Implement alternative lightweight backend
•  Focus on:
     –  Speed (startup and usage)
     –  Code awareness:
        •  Static code analysis
        •  Content assist
             –  Module system comprehension



21
Scripted Architecture: client side
•  Eclipse Orion
     –  Just the editor: familiar to Eclipse users
•  Dojo for now
•  Inferencing engine relying on
     –  Recoverable JS parsing: esprima
     –  Dependency analysis code




22
Scripted Architecture: server side
•  Small Node.js server
     –  Serving the client html/js
     –  Serving requests from the client
        •  ‘give me the contents of file X’
        •  ‘search for this string’
        •  ‘tell me the dependencies of this JS file’
•  Restarted on each editor launch
     –  Likely to eventually be a long running process


23
Scripted
•  Much more positive feedback internally
•  Decided to open source to access a wider audience
•  Now on github:
     https://github.com/scripted-editor/scripted




24
Scripted: Features
•  Fast – startup and during use
•  Code awareness
     –  JSLint early error indication
     –  Module system awareness, transitive dependency analysis
     –  JSDoc comprehension
•  Basic editor configuration
•  Basic navigator
•  Side-panel

25
Scripted Demo




26
Scripted – near term goals
•  Even more code awareness
     –  Even better content assist
     –  More module systems
     –  Maybe always ON content assist…
•  Plugin model
     –  Extend it with JavaScript




27
Scripted – near term goals
•  More side-panel contents
     –  More panes (documentation, search results)
     –  Automated management of panes by the editor
•  UI overhaul
     –  we’re smarter than we were when we started !




28
Scripted – longer term goals
•  Debugging
     –  Not reinventing CDT
     –  Helping developers in callback hell
     –  Step into server from client
•  Selected tool integration
     –  But not replacing command line tools, e.g. Git
•  Even further out
     –  Other languages (Java)


29
Some images from the drawing board…




30
Original overlays instead of side panel
                                Discarded
                                •  Covering the user
                                   code just too irritating




31
Other side panel entries
                           Will be implementing
                           •  Documentation pane
                           •  Search results pane
                           •  Panes pinnable

                           •  More panes to follow




32
Navigator filters
                    Still exploring
                    •  Filters try to ensure
                       navigator content
                       relevant
                    •  Tag based filtering with
                       auto-tagging




33
Scrolling side panel
                       Still exploring
                       •  Confusing ‘scroll’ story




34
‘Overview’ for side panel entries
                                Unlikely to pursue
                                •  Overview doesn’t
                                   communicate enough
                                   information
                                •  Still somewhat fiddly
                                   scrolling story




35
Accordion style side panel
                             Still exploring
                             •  How lightweight can the
                                collapsed entries be?
                             •  Easier scroll story




36
Smart global search box
                          Likely to implement
                          •  One place to search for
                             anything




37
Git integration
                  Likely to implement
                  •  Initially just a browsing
                     tool for comments/
                     commit changes
                  •  Timeline feature (at the
                     bottom) still work in
                     progress




38
Feedback welcome
•  Having a reaction to some of those images?
•  Let us know!

     https://groups.google.com/forum/#!forum/scripted-dev

     https://issuetracker.springsource.com/browse/scripted




39
Summary
•  The basic idea
•  Observations and assumptions
•  The prototypes
     –  The Scripted Code Editor
•  Where are we heading?




40
Any questions?
•  Google Group: scripted-dev
     https://groups.google.com/forum/#!forum/scripted-dev
•  Project page:
          https://github.com/scripted-editor/scripted

     Andy Clement          Martin Lippert        Andrew Eisenberg
     aclement@vmware.com   mlippert@vmware.com   aeisenberg@vmware.com
     @andy_clement         @martinlippert        @werdnagreb




41
The End




42

Tooling for the JavaScript Era

  • 1.
    Tooling for theJavaScript era Andy Clement, Staff Engineer Martin Lippert, Staff Engineer Andrew Eisenberg, Senior Member of Technical Staff © 2012 SpringOne 2GX. All rights reserved. Do not distribute without permission.
  • 2.
    Speaker Introduction •  Andy Clement –  Staff Engineer, R&D –  Lead, language lab •  Martin Lippert –  Staff Engineer, R&D –  Lead, development tools •  Andrew Eisenberg –  Senior Member of Technical Staff, R&D –  Lead, Groovy-Eclipse 2
  • 3.
    Disclaimer •  This sessionmay contain product features that are currently under development. •  This session/overview of the new technology represents no commitment from SpringSource/VMware to deliver these features in any generally available product.  •  Features are subject to change, and must not be included in contracts, purchase orders, or sales agreements of any kind.  •  Technical feasibility and market demand will affect final delivery.  •  Pricing and packaging for any new technologies or features discussed or presented have not been determined 3
  • 4.
    Agenda •  The basic idea •  Observations and assumptions •  Our prototypes •  Where are we heading? 4
  • 5.
    The basic idea • Where are IDE and development tools in general heading towards? –  Big integrated desktop IDE? –  Lightweight editors? –  Browser-based IDEs? –  Does Cloud have an impact? •  Why can Google search the web in 10ms, but it takes 1000ms or more for my IDE to lookup a type hierarchy 5
  • 6.
    Exploring… •  Lets dothings differently: –  Browser-based –  Lightweight instead of fully integrated IDEs –  Maybe cloud hosted –  Innovate… •  And see what comes out of that… 6
  • 7.
    Exploration •  Non-coding work: –  Talk to people –  Ask questions –  Scribble •  Coding work: –  Prototyping –  Shipping early 7
  • 8.
    JavaScript •  Increasing inpopularity •  Not only web UI gadgets anymore –  Serious large-scale apps in JavaScript –  Server-side JS (node.js) •  Other dialects interesting: CoffeeScript, TypeScript –  JS is first priority •  Fits nicely into our scope for browser-based tooling 8
  • 9.
    Results and assumptions#1 •  Lightweight beats heavyweight –  Simple editors still the most popular JS tool –  Don’t want the uber tool •  Speed is essential (startup, coding, typing) –  No acceptance for long startups, delay in typing 9
  • 10.
    Results and assumptions#2 •  Real code comprehension missed a lot –  People would love to get good content-assist and code- completion •  Aware of module definitions (AMD, RequireJS, …) •  Aware of frameworks –  Fast/accurate navigation –  Early error indication (more than just JSLint) 10
  • 11.
    Results and assumptions#3 •  Debugging is great, but good integration with editing is missing –  Workarounds exist (for Chrome Dev Tools, for example) –  Better integration would be good •  Connecting with existing popular tools 11
  • 12.
    Results and assumptions#4 •  A cloud-hosted workspace? –  Need to work offline –  Need to use other tools on my machine on the files •  A cloud-hosted tool? –  Collaborative editing –  Social coding –  Zero installation – always up-to-date –  Technically using cloud (aka unlimited) resources 12
  • 13.
  • 14.
    Prototyping •  Build somebasic tools with key features that meet user need •  Make them available •  Collect feedback, adjust direction as necessary 14
  • 15.
    Prototype #1 •  Build: –  Editing tool with server side ‘cloud’ workspace •  browser based editing experience –  Good content assist –  Reuse tech where appropriate –  No preference on backend technology 15
  • 16.
    Prototype #1: EclipseOrion “Browser-based open tool integration platform” •  Eclipse Project •  Client/Server tool •  Orion is a tools platform •  Not an IDE in a browser tab 16
  • 17.
    Prototype #1: Features • An Eclipse Orion deployed internally in VMware •  With extra capabilities: –  Better content assist than real orion –  Basic command line console included for running some server side commands •  e.g. vmc push to Cloud Foundry •  What happened? 17
  • 18.
    What happened? •  Verylittle interest –  Developers are busy people –  The benefits of basic content assist did not outweigh cost of giving up their environment –  Developers happier with code on their machine –  Even just to ‘try it out’ they had to migrate some code over to the cloud workspace 18
  • 19.
    Prototype #2 •  Learnfrom our own experiences extending Orion –  What do we need? •  Create a tool that would support local or remote workspace –  Continues to be a web app, just with a local server –  Can optionally have the server deployed remotely –  Keep a low adoption barrier 19
  • 20.
    Prototype #2 •  Coulduse Orion, but: –  UI for Orion not quite as snappy/fast as we wanted –  Server is a bit heavy –  Orion offered more facilities than we wanted •  Another Git UI •  Multi user setup 20
  • 21.
    Prototype #2 •  ReuseEclipse Orion Code Editor •  Implement alternative lightweight backend •  Focus on: –  Speed (startup and usage) –  Code awareness: •  Static code analysis •  Content assist –  Module system comprehension 21
  • 22.
    Scripted Architecture: clientside •  Eclipse Orion –  Just the editor: familiar to Eclipse users •  Dojo for now •  Inferencing engine relying on –  Recoverable JS parsing: esprima –  Dependency analysis code 22
  • 23.
    Scripted Architecture: serverside •  Small Node.js server –  Serving the client html/js –  Serving requests from the client •  ‘give me the contents of file X’ •  ‘search for this string’ •  ‘tell me the dependencies of this JS file’ •  Restarted on each editor launch –  Likely to eventually be a long running process 23
  • 24.
    Scripted •  Much morepositive feedback internally •  Decided to open source to access a wider audience •  Now on github: https://github.com/scripted-editor/scripted 24
  • 25.
    Scripted: Features •  Fast– startup and during use •  Code awareness –  JSLint early error indication –  Module system awareness, transitive dependency analysis –  JSDoc comprehension •  Basic editor configuration •  Basic navigator •  Side-panel 25
  • 26.
  • 27.
    Scripted – nearterm goals •  Even more code awareness –  Even better content assist –  More module systems –  Maybe always ON content assist… •  Plugin model –  Extend it with JavaScript 27
  • 28.
    Scripted – nearterm goals •  More side-panel contents –  More panes (documentation, search results) –  Automated management of panes by the editor •  UI overhaul –  we’re smarter than we were when we started ! 28
  • 29.
    Scripted – longerterm goals •  Debugging –  Not reinventing CDT –  Helping developers in callback hell –  Step into server from client •  Selected tool integration –  But not replacing command line tools, e.g. Git •  Even further out –  Other languages (Java) 29
  • 30.
    Some images fromthe drawing board… 30
  • 31.
    Original overlays insteadof side panel Discarded •  Covering the user code just too irritating 31
  • 32.
    Other side panelentries Will be implementing •  Documentation pane •  Search results pane •  Panes pinnable •  More panes to follow 32
  • 33.
    Navigator filters Still exploring •  Filters try to ensure navigator content relevant •  Tag based filtering with auto-tagging 33
  • 34.
    Scrolling side panel Still exploring •  Confusing ‘scroll’ story 34
  • 35.
    ‘Overview’ for sidepanel entries Unlikely to pursue •  Overview doesn’t communicate enough information •  Still somewhat fiddly scrolling story 35
  • 36.
    Accordion style sidepanel Still exploring •  How lightweight can the collapsed entries be? •  Easier scroll story 36
  • 37.
    Smart global searchbox Likely to implement •  One place to search for anything 37
  • 38.
    Git integration Likely to implement •  Initially just a browsing tool for comments/ commit changes •  Timeline feature (at the bottom) still work in progress 38
  • 39.
    Feedback welcome •  Havinga reaction to some of those images? •  Let us know! https://groups.google.com/forum/#!forum/scripted-dev https://issuetracker.springsource.com/browse/scripted 39
  • 40.
    Summary •  The basicidea •  Observations and assumptions •  The prototypes –  The Scripted Code Editor •  Where are we heading? 40
  • 41.
    Any questions? •  GoogleGroup: scripted-dev https://groups.google.com/forum/#!forum/scripted-dev •  Project page: https://github.com/scripted-editor/scripted Andy Clement Martin Lippert Andrew Eisenberg aclement@vmware.com mlippert@vmware.com aeisenberg@vmware.com @andy_clement @martinlippert @werdnagreb 41
  • 42.