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 ?)

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 ● Counterclockwiseis 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 !
  • 8.
    Intro 2/2 ● InstallingCounterclockwise and starting testing/developing in clojure is really just a matter of minutes!
  • 9.
    Intro 2/2 ● InstallingCounterclockwise 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 ● InstallingCounterclockwise 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 ● InstallingCounterclockwise 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 in2008 ● 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 ● Structuraledition 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 feature2/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 – featuresaround 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 – otherfeatures ● 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 findit ● 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! (canyou wake up your neighbor pliz ?)