SlideShare una empresa de Scribd logo
1 de 37
Descargar para leer sin conexión
State of Counterclockwise:
Past, Present and Future
http://bit.ly/counterclockwise
by Laurent Petit
@laurentpetit
first.clojure-conj.org - 2010/10/22
Agenda
● Presentations / Intro
● History / Figures
● Installation
● Features / quick demos
● Future
● Credits
● Q & A
Presentations 1/2
● Me
● Laurent Petit, french
● Fond of Clojure since Q2 2008
● Involved in Counterclockwise since Q4 2008
Presentations 2/2
● Eclipse
● multi-language software development environment
● Primary target language/platform: Java/JVM
● Eclipse Foundation claims “millions” of users,
worldwide
● Counterclockwise
● An Eclipse extension for managing Clojure-based
projects
● License : EPL
● “ccw” for short
Intro 1/2
● Counterclockwise is an Eclipse plugin helping
developers write Clojure code
● Why an Eclipse plugin ?
● Targetting a large base of java developers
● Driving forces : writing Eclipse plugins both at work
& at home !
● Want Clojure for my next paid java project !
Intro 2/2
● Installing Counterclockwise and starting
testing/developing in clojure is really just a
matter of minutes!
Intro 2/2
● Installing Counterclockwise and starting
testing/developing in clojure is really just a
matter of minutes!
● Ease of installation = maximize a good first
impression with the language (like it or not !)
Intro 2/2
● Installing Counterclockwise and starting
testing/developing in clojure is really just a
matter of minutes!
● Ease of installation = maximize a good first
impression with the language (like it or not !)
● No-brainer integration into Eclipse java users'
toolset
– Parens will already feel UFOs to them, let the IDE get out
of their way and help them concentrate on the concepts
Intro 2/2
● Installing Counterclockwise and starting
testing/developing in clojure is really just a matter of
minutes!
● Ease of installation = maximize a good first impression
with the language (like it or not !)
● No-brainer integration into Eclipse java users' toolset
– Parens will feel alien enough to new users, let the IDE get out
of their way and help them concentrate on the concepts
● But should provide same interactive “dynamic”
experience
Agenda
● Presentations / Intro
● History / Figures
● Installation
● Features / quick demos
● Future
● Credits
● Q & A
History
● Started in 2008
● By Casey Marshall, code name “clojure-dev”
● Joined on October 2008
● Casey left the team early 2009 ...
● … got the “de-facto” leadership since then
Figures (google analytics)
Homepage – 2000 views per month
● Since March 1, 2010:
● ~ 4000 different visitors
– 800-900 average different visitors per month
● ~2000 homepage views per month
● ~2000 documentation page views per month
Agenda
● Presentations / Intro
● History / Figures
● Installation
● Features / quick demos
● Future
● Credits
● Q & A
Installation
● Super easy
● Use Eclipse 3.6 Helios' Market place
– Menu Help > Eclipse Market Place
– search for “clojure” & click
● Super fast
● 6 Mb download
Agenda
● Presentations / Intro
● History / Figures
● Installation
● Features / quick demos
● Future
● Credits
● Q & A
Editor features 1/2
● Syntactic coloration (stable)
● Strictly speaking, “token-based” coloration
● “rainbow” parens (and higlight, and jump to/from)
● Around the corner: true syntactic coloration (full use of parser's info)
● Structural edition commands (stable)
● based on emac's paredit.el (~ 80% commands currently ported)
● Totally reusable outside Eclipse context (pure clojure)
● Jump to definition (stable)
● Only to clojure global vars for now on ...
● Auto-indentation (stable)
● Predictable behaviour with & without support of dynamic environment
● But judged “too simple” by increasing number of users ...
Editor features 2/2
● Code completion (incomplete)
● Clojure top level vars
● Java
– Clojure is “backward”
– full search in the project's classpath)
– → slow !
● REPL interaction commands (stable)
● Documentation hover (around the corner)
● Code Outline (unstable)
● Missing: formatting, macro-expansion
Editor demo
● Structural edition modes
● Default mode – does not break habit
● Strict mode – mixed free/guided mode
● Underused structural edition commands
● Both modes
– Structure-based selection
– Raise over parent
– Split / Join
● Strict mode only
– Easy wrapping
Project management feature
● Compliant with Eclipse's notion of project
● Project “natures” : composable with JDT nature,
etc.
● “Running the project” uses “enhanced” java-
nature-based “launch configuration”
● Enabled to quickly provide out-of-the-box
interactivity
Interactive Dev feature1/2
● REPL' state of the art (v0.0.64)
● Based on the Java nature of the project
– Uses the project's classpath
– Same configuration tabs as the java's
● But limited in scope ...
– Forces the project to start with a stdin/stdout-based REPL class
(e.g. clojure.main or clojure.contrib.repl-ln)
– Not possible to work with web projects (WTP), GWT projects,
Eclipse projects (PDE)
● … and in features
– Plain text edition (no colors, no user assistance)
– No history
Interactive Dev feature 2/2
● Brand new REPL around the corner !
● Based on cemerick's nREPL client/server REPL library
● And on cemerick's rework of the Graphical REPLView !
● Connection to any JVM running a nREPL client
● No more need for special “launch configuration”
● => composable with projects of any kind (Web WTP, GWT, AppEngine,
etc.)
● Rich set of feature for the REPL View
● Shares source code editor featureset: colors, structural edition, code
completion (wip), navigation commands, etc.
● Colorized logs
● Recall previously entered commands (wip)
● Multiline (with auto-indentation!) command area
Interactive Dev demo
● “launch” your project
● auto-reload-on-save enabled or disabled
– Agile feature design at work ! :-)
● Exclusivity: new REPL View !
● Same feature set as editor
● Receive code from the editor
● Namespace browser
● Embedded search engine
● Click to jump to definition
Debugger feature
● Features
● Place breakpoints in clojure code
● Leverage the classic Eclipse integrated java
debugger
● Still a little bit unstable
● Future work
● Does not (yet) filter frames related to the internals
of clojure (clojure.lang.*)
● Integration with George Jahad's CDT debugger
Agenda
● Presentations / Intro
● History / Figures
● Installation
● Features / quick demos
● Future
● Credits
● Q & A
Future – features around the corner
● Editor
● Jump to definition (java)
● Documentation hover (clojure & java)
● True syntax-based coloration (locals, etc.)
● Project management
● More “orthogonality” with underlying “project nature” (pure
java, GWT, WTP, AppEngine, Eclipse RCP, etc.)
● REPL
● Port features of the editor
● And then … towards “graphical REPL” (ability to display
“binary” return values as images, HTML, charts, etc.)
Future – other features
● Refactoring features
● Integration of tcrayford's clojure-refactoring project
● Hopefully bidirectional java ↔ clojure
● Debugging features
● Integration with George Jahad's Clojure Debugging
Toolkit (CDT)
Future – “dream-about” features
● More “warnings” than what the compiler has to offer
● Help enforcing conventions
● Help detect potential bugs (more than one statement
inside dosync, local same name as global, etc., etc.)
● → No hurry, 'cause “cinc” may be a game changer ...
● “AI-like” User suggestions
● Analyse user's habits through heuristics (and occurrence)
● Non-invasive (hard part !) suggestions
Future - Miscellaneous
● Introduction of Contributor Agreement
● Better juridical protection for project's code
● Better protection of sponsor's rights on project “as a whole”
● copy&paste of Clojure's one, just names changed
● Switch to “semantic versioning”
● “embedded” REPL for ccw own's development
● Open the door to more contributors
● devs:
– mvn based build process
– Continuous integration
● users:
– Update Sites for “beta” versions as well as “stable” version
– Opening the plugin to user contributions (in clojure, of course)
Agenda
● Presentations / Intro
● History / Figures
● Installation
● Features / quick demos
● Future
● Credits
● Q & A
Share, ...
● Past & current contributors
● Casey Marshall (first versions of ccw)
● Stephan Müehlstraßer (preference pages, online
help, labrepl support)
● Christophe Grand (Debug breakpoints)
● Manuel Woelker (Source code outline)
● Miaubiz, clooney (editor commands:navigate to
definition, etc.)
● Nicolas Lambert (Outline commands)
● Chas Emerick (integration with nREPL, REPLView)
… reuse,
● vimClojure (@kotarak): code completion
● parsley (@cgrand): source code parser
● clojure.osgi (@aav): clojure+OSGi love story
● nREPL (@cemerick): REPL client/server library
… give back.
● Structural Editor
● paredit.clj (github)
● Clojure Grammar
● ccw.parsers.clojure (github, wip, no rush please)
Where to find it
● Google code home page
● http://code.google.com/p/counterclockwise/
● Google groups
● Users : http://groups.google.com/group/clojuredev-
users (66 members)
● Devs :
http://groups.google.com/group/clojuredev-devel
(37 members)
Agenda
● Presentations / Intro
● History / Figures
● Installation
● Features / quick demos
● Future
● Credits
● Q & A
Thanks for attending!
(can you wake up your neighbor pliz ?)

Más contenido relacionado

La actualidad más candente

Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
mfrancis
 
Building Rich Internet Applications Using Google Web Toolkit
Building Rich Internet Applications Using  Google Web ToolkitBuilding Rich Internet Applications Using  Google Web Toolkit
Building Rich Internet Applications Using Google Web Toolkit
rajivmordani
 
20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』
20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』
20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』
Ryo RKTM
 

La actualidad más candente (20)

How to Make Your Qt App Look Native
How to Make Your Qt App Look NativeHow to Make Your Qt App Look Native
How to Make Your Qt App Look Native
 
JVM Languages Support in Eclipse - Monkey-patching the JDT for fun and profit?
JVM Languages Support in Eclipse - Monkey-patching the JDT for fun and profit?JVM Languages Support in Eclipse - Monkey-patching the JDT for fun and profit?
JVM Languages Support in Eclipse - Monkey-patching the JDT for fun and profit?
 
Case Study: Using Qt to Develop Advanced GUIs & Advanced Visualization Software
Case Study: Using Qt to Develop Advanced GUIs & Advanced Visualization SoftwareCase Study: Using Qt to Develop Advanced GUIs & Advanced Visualization Software
Case Study: Using Qt to Develop Advanced GUIs & Advanced Visualization Software
 
Qt for beginners part 4 doing more
Qt for beginners part 4   doing moreQt for beginners part 4   doing more
Qt for beginners part 4 doing more
 
LJCConf 2013 "Contributing to OpenJDK for the GitHub Generation"
LJCConf 2013 "Contributing to OpenJDK for the GitHub Generation"LJCConf 2013 "Contributing to OpenJDK for the GitHub Generation"
LJCConf 2013 "Contributing to OpenJDK for the GitHub Generation"
 
Ljc conf open jdk betterrev bof
Ljc conf open jdk betterrev bofLjc conf open jdk betterrev bof
Ljc conf open jdk betterrev bof
 
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
 
Android Modularization
Android ModularizationAndroid Modularization
Android Modularization
 
Java SE 9 modules (JPMS) - an introduction
Java SE 9 modules (JPMS) - an introductionJava SE 9 modules (JPMS) - an introduction
Java SE 9 modules (JPMS) - an introduction
 
Javascript as a target language - GWT KickOff - Part 2/2
Javascript as a target language - GWT KickOff - Part 2/2Javascript as a target language - GWT KickOff - Part 2/2
Javascript as a target language - GWT KickOff - Part 2/2
 
Scala Support in Eclipse - Monkey-patching the JDT for fun and profit?
Scala Support in Eclipse - Monkey-patching the JDT for fun and profit?Scala Support in Eclipse - Monkey-patching the JDT for fun and profit?
Scala Support in Eclipse - Monkey-patching the JDT for fun and profit?
 
Gwt Presentation
Gwt PresentationGwt Presentation
Gwt Presentation
 
Building Rich Internet Applications Using Google Web Toolkit
Building Rich Internet Applications Using  Google Web ToolkitBuilding Rich Internet Applications Using  Google Web Toolkit
Building Rich Internet Applications Using Google Web Toolkit
 
Gwt ppt
Gwt pptGwt ppt
Gwt ppt
 
GWT- Google Web Toolkit
GWT- Google Web ToolkitGWT- Google Web Toolkit
GWT- Google Web Toolkit
 
Using Features
Using FeaturesUsing Features
Using Features
 
Geb+spock: let your functional tests live long and prosper
Geb+spock: let your functional tests live long and prosperGeb+spock: let your functional tests live long and prosper
Geb+spock: let your functional tests live long and prosper
 
Programming iOS in Lua - A bridge story
Programming iOS in Lua - A bridge storyProgramming iOS in Lua - A bridge story
Programming iOS in Lua - A bridge story
 
20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』
20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』
20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』
 
Introduction to User Experience Design for Engineers
Introduction to User Experience Design for EngineersIntroduction to User Experience Design for Engineers
Introduction to User Experience Design for Engineers
 

Similar a Counterclockwise past present future

Similar a Counterclockwise past present future (20)

Instant developer onboarding with self contained repositories
Instant developer onboarding with self contained repositoriesInstant developer onboarding with self contained repositories
Instant developer onboarding with self contained repositories
 
GWT - Building Rich Internet Applications Using OO Tools
GWT - Building Rich Internet Applications Using OO ToolsGWT - Building Rich Internet Applications Using OO Tools
GWT - Building Rich Internet Applications Using OO Tools
 
Road to sbt 1.0: Paved with server (2015 Amsterdam)
Road to sbt 1.0: Paved with server (2015 Amsterdam)Road to sbt 1.0: Paved with server (2015 Amsterdam)
Road to sbt 1.0: Paved with server (2015 Amsterdam)
 
Road to sbt 1.0 paved with server
Road to sbt 1.0   paved with serverRoad to sbt 1.0   paved with server
Road to sbt 1.0 paved with server
 
Odo improving the developer experience on OpenShift - hack & sangria
Odo   improving the developer experience on OpenShift - hack & sangriaOdo   improving the developer experience on OpenShift - hack & sangria
Odo improving the developer experience on OpenShift - hack & sangria
 
Dust.js
Dust.jsDust.js
Dust.js
 
How To Maintain Million Lines Of Open Source Code And Remain Sane or The Stor...
How To Maintain Million Lines Of Open Source Code And Remain Sane or The Stor...How To Maintain Million Lines Of Open Source Code And Remain Sane or The Stor...
How To Maintain Million Lines Of Open Source Code And Remain Sane or The Stor...
 
Micronaut: A new way to build microservices
Micronaut: A new way to build microservicesMicronaut: A new way to build microservices
Micronaut: A new way to build microservices
 
AirBNB's ML platform - BigHead
AirBNB's ML platform - BigHeadAirBNB's ML platform - BigHead
AirBNB's ML platform - BigHead
 
Bighead: Airbnb’s End-to-End Machine Learning Platform with Krishna Puttaswa...
 Bighead: Airbnb’s End-to-End Machine Learning Platform with Krishna Puttaswa... Bighead: Airbnb’s End-to-End Machine Learning Platform with Krishna Puttaswa...
Bighead: Airbnb’s End-to-End Machine Learning Platform with Krishna Puttaswa...
 
Joomla!Day Poland 2013 - Joomla Architecture (Ofer Cohen)
Joomla!Day Poland 2013 - Joomla Architecture  (Ofer Cohen)Joomla!Day Poland 2013 - Joomla Architecture  (Ofer Cohen)
Joomla!Day Poland 2013 - Joomla Architecture (Ofer Cohen)
 
Apache Airflow in the Cloud: Programmatically orchestrating workloads with Py...
Apache Airflow in the Cloud: Programmatically orchestrating workloads with Py...Apache Airflow in the Cloud: Programmatically orchestrating workloads with Py...
Apache Airflow in the Cloud: Programmatically orchestrating workloads with Py...
 
Gradle build automation tool
Gradle   build automation toolGradle   build automation tool
Gradle build automation tool
 
Angular meetup 2 2019-08-29
Angular meetup 2   2019-08-29Angular meetup 2   2019-08-29
Angular meetup 2 2019-08-29
 
Node.js Web Apps @ ebay scale
Node.js Web Apps @ ebay scaleNode.js Web Apps @ ebay scale
Node.js Web Apps @ ebay scale
 
Protractor survival guide
Protractor survival guideProtractor survival guide
Protractor survival guide
 
GeoServer Developers Workshop
GeoServer Developers WorkshopGeoServer Developers Workshop
GeoServer Developers Workshop
 
The State of the Veil Framework
The State of the Veil FrameworkThe State of the Veil Framework
The State of the Veil Framework
 
september13.ppt
september13.pptseptember13.ppt
september13.ppt
 
Introduction to serverless computing on Google Cloud
Introduction to serverless computing on Google CloudIntroduction to serverless computing on Google Cloud
Introduction to serverless computing on Google Cloud
 

Último

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Último (20)

Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 

Counterclockwise past present future

  • 1. State of Counterclockwise: Past, Present and Future http://bit.ly/counterclockwise by Laurent Petit @laurentpetit first.clojure-conj.org - 2010/10/22
  • 2. Agenda ● Presentations / Intro ● History / Figures ● Installation ● Features / quick demos ● Future ● Credits ● Q & A
  • 3. Presentations 1/2 ● Me ● Laurent Petit, french ● Fond of Clojure since Q2 2008 ● Involved in Counterclockwise since Q4 2008
  • 4. Presentations 2/2 ● Eclipse ● multi-language software development environment ● Primary target language/platform: Java/JVM ● Eclipse Foundation claims “millions” of users, worldwide ● Counterclockwise ● An Eclipse extension for managing Clojure-based projects ● License : EPL ● “ccw” for short
  • 5. Intro 1/2 ● Counterclockwise is an Eclipse plugin helping developers write Clojure code ● Why an Eclipse plugin ? ● Targetting a large base of java developers ● Driving forces : writing Eclipse plugins both at work & at home ! ● Want Clojure for my next paid java project !
  • 6.
  • 7.
  • 8. Intro 2/2 ● Installing Counterclockwise and starting testing/developing in clojure is really just a matter of minutes!
  • 9. Intro 2/2 ● Installing Counterclockwise and starting testing/developing in clojure is really just a matter of minutes! ● Ease of installation = maximize a good first impression with the language (like it or not !)
  • 10. Intro 2/2 ● Installing Counterclockwise and starting testing/developing in clojure is really just a matter of minutes! ● Ease of installation = maximize a good first impression with the language (like it or not !) ● No-brainer integration into Eclipse java users' toolset – Parens will already feel UFOs to them, let the IDE get out of their way and help them concentrate on the concepts
  • 11. Intro 2/2 ● Installing Counterclockwise and starting testing/developing in clojure is really just a matter of minutes! ● Ease of installation = maximize a good first impression with the language (like it or not !) ● No-brainer integration into Eclipse java users' toolset – Parens will feel alien enough to new users, let the IDE get out of their way and help them concentrate on the concepts ● But should provide same interactive “dynamic” experience
  • 12. Agenda ● Presentations / Intro ● History / Figures ● Installation ● Features / quick demos ● Future ● Credits ● Q & A
  • 13. History ● Started in 2008 ● By Casey Marshall, code name “clojure-dev” ● Joined on October 2008 ● Casey left the team early 2009 ... ● … got the “de-facto” leadership since then
  • 14. Figures (google analytics) Homepage – 2000 views per month ● Since March 1, 2010: ● ~ 4000 different visitors – 800-900 average different visitors per month ● ~2000 homepage views per month ● ~2000 documentation page views per month
  • 15. Agenda ● Presentations / Intro ● History / Figures ● Installation ● Features / quick demos ● Future ● Credits ● Q & A
  • 16. Installation ● Super easy ● Use Eclipse 3.6 Helios' Market place – Menu Help > Eclipse Market Place – search for “clojure” & click ● Super fast ● 6 Mb download
  • 17. Agenda ● Presentations / Intro ● History / Figures ● Installation ● Features / quick demos ● Future ● Credits ● Q & A
  • 18. Editor features 1/2 ● Syntactic coloration (stable) ● Strictly speaking, “token-based” coloration ● “rainbow” parens (and higlight, and jump to/from) ● Around the corner: true syntactic coloration (full use of parser's info) ● Structural edition commands (stable) ● based on emac's paredit.el (~ 80% commands currently ported) ● Totally reusable outside Eclipse context (pure clojure) ● Jump to definition (stable) ● Only to clojure global vars for now on ... ● Auto-indentation (stable) ● Predictable behaviour with & without support of dynamic environment ● But judged “too simple” by increasing number of users ...
  • 19. Editor features 2/2 ● Code completion (incomplete) ● Clojure top level vars ● Java – Clojure is “backward” – full search in the project's classpath) – → slow ! ● REPL interaction commands (stable) ● Documentation hover (around the corner) ● Code Outline (unstable) ● Missing: formatting, macro-expansion
  • 20. Editor demo ● Structural edition modes ● Default mode – does not break habit ● Strict mode – mixed free/guided mode ● Underused structural edition commands ● Both modes – Structure-based selection – Raise over parent – Split / Join ● Strict mode only – Easy wrapping
  • 21. Project management feature ● Compliant with Eclipse's notion of project ● Project “natures” : composable with JDT nature, etc. ● “Running the project” uses “enhanced” java- nature-based “launch configuration” ● Enabled to quickly provide out-of-the-box interactivity
  • 22. Interactive Dev feature1/2 ● REPL' state of the art (v0.0.64) ● Based on the Java nature of the project – Uses the project's classpath – Same configuration tabs as the java's ● But limited in scope ... – Forces the project to start with a stdin/stdout-based REPL class (e.g. clojure.main or clojure.contrib.repl-ln) – Not possible to work with web projects (WTP), GWT projects, Eclipse projects (PDE) ● … and in features – Plain text edition (no colors, no user assistance) – No history
  • 23. Interactive Dev feature 2/2 ● Brand new REPL around the corner ! ● Based on cemerick's nREPL client/server REPL library ● And on cemerick's rework of the Graphical REPLView ! ● Connection to any JVM running a nREPL client ● No more need for special “launch configuration” ● => composable with projects of any kind (Web WTP, GWT, AppEngine, etc.) ● Rich set of feature for the REPL View ● Shares source code editor featureset: colors, structural edition, code completion (wip), navigation commands, etc. ● Colorized logs ● Recall previously entered commands (wip) ● Multiline (with auto-indentation!) command area
  • 24. Interactive Dev demo ● “launch” your project ● auto-reload-on-save enabled or disabled – Agile feature design at work ! :-) ● Exclusivity: new REPL View ! ● Same feature set as editor ● Receive code from the editor ● Namespace browser ● Embedded search engine ● Click to jump to definition
  • 25. Debugger feature ● Features ● Place breakpoints in clojure code ● Leverage the classic Eclipse integrated java debugger ● Still a little bit unstable ● Future work ● Does not (yet) filter frames related to the internals of clojure (clojure.lang.*) ● Integration with George Jahad's CDT debugger
  • 26. Agenda ● Presentations / Intro ● History / Figures ● Installation ● Features / quick demos ● Future ● Credits ● Q & A
  • 27. Future – features around the corner ● Editor ● Jump to definition (java) ● Documentation hover (clojure & java) ● True syntax-based coloration (locals, etc.) ● Project management ● More “orthogonality” with underlying “project nature” (pure java, GWT, WTP, AppEngine, Eclipse RCP, etc.) ● REPL ● Port features of the editor ● And then … towards “graphical REPL” (ability to display “binary” return values as images, HTML, charts, etc.)
  • 28. Future – other features ● Refactoring features ● Integration of tcrayford's clojure-refactoring project ● Hopefully bidirectional java ↔ clojure ● Debugging features ● Integration with George Jahad's Clojure Debugging Toolkit (CDT)
  • 29. Future – “dream-about” features ● More “warnings” than what the compiler has to offer ● Help enforcing conventions ● Help detect potential bugs (more than one statement inside dosync, local same name as global, etc., etc.) ● → No hurry, 'cause “cinc” may be a game changer ... ● “AI-like” User suggestions ● Analyse user's habits through heuristics (and occurrence) ● Non-invasive (hard part !) suggestions
  • 30. Future - Miscellaneous ● Introduction of Contributor Agreement ● Better juridical protection for project's code ● Better protection of sponsor's rights on project “as a whole” ● copy&paste of Clojure's one, just names changed ● Switch to “semantic versioning” ● “embedded” REPL for ccw own's development ● Open the door to more contributors ● devs: – mvn based build process – Continuous integration ● users: – Update Sites for “beta” versions as well as “stable” version – Opening the plugin to user contributions (in clojure, of course)
  • 31. Agenda ● Presentations / Intro ● History / Figures ● Installation ● Features / quick demos ● Future ● Credits ● Q & A
  • 32. Share, ... ● Past & current contributors ● Casey Marshall (first versions of ccw) ● Stephan Müehlstraßer (preference pages, online help, labrepl support) ● Christophe Grand (Debug breakpoints) ● Manuel Woelker (Source code outline) ● Miaubiz, clooney (editor commands:navigate to definition, etc.) ● Nicolas Lambert (Outline commands) ● Chas Emerick (integration with nREPL, REPLView)
  • 33. … reuse, ● vimClojure (@kotarak): code completion ● parsley (@cgrand): source code parser ● clojure.osgi (@aav): clojure+OSGi love story ● nREPL (@cemerick): REPL client/server library
  • 34. … give back. ● Structural Editor ● paredit.clj (github) ● Clojure Grammar ● ccw.parsers.clojure (github, wip, no rush please)
  • 35. Where to find it ● Google code home page ● http://code.google.com/p/counterclockwise/ ● Google groups ● Users : http://groups.google.com/group/clojuredev- users (66 members) ● Devs : http://groups.google.com/group/clojuredev-devel (37 members)
  • 36. Agenda ● Presentations / Intro ● History / Figures ● Installation ● Features / quick demos ● Future ● Credits ● Q & A
  • 37. Thanks for attending! (can you wake up your neighbor pliz ?)