[forge-dev] Forge CRAsH, CRAsH Forge!

Julien Viet julien at julienviet.com
Wed May 9 10:44:14 EDT 2012


On May 9, 2012, at 1:49 PM, Lincoln Baxter, III wrote:

> Hey Julien,
> 
> That's really cool! Just so I know what you did in your video - you had an OSX shell running, and you executed Forge using the maven exec goal. This forge build used CRaSH as the terminal implementation? This is very promising!

In Forge as I was suspecting, the IO part is not a plugin (but is a CDI bean) but more like a connector that fires invocation in the forge runtime and provides interactions (like reading a line, getting the width, printing something) etc...

It is similar to CRaSH that is layered as:

- Term interface which defines interaction for a term : implemented by SSH and Telnet
- Shell interface which defines interaction for a shell : used natively by JLine and the new web interface

so we have: those possible stacks in crash

apache sshd <-> ssh term io <-> shell <-> async shell <-> shell impl (groovy)
telnetd <-> ssh telnet io <-> shell <-> async shell <-> shell impl (groovy)
jline <-> jline processor <-> shell <-> async shell <-> shell impl (groovy)
jquery console <-> shell servlet <-> shell <-> async shell <-> shell impl (groovy)

So basically I did an implemention of org.crsh.shell.Shell interface to allow Forge to be used as a Shell:

http://julienviet.com/crash/javadoc/org/crsh/shell/Shell.html

This way forge could be used by all connectors

> 
> Which features aren't working at the moment? (If you want to cry a little bit on the inside, you might want to try the "less" plugin ;)

in fact I have not yet implemented the getHeight() (used by the less plugin) because I was not able to understand the meaning of getHeight versus getAbsoluteHeight . This part is not well explained. According to the code it's related to an internal buffer.

Could someone give me info about it ?

> 
> As part of Forge 2.0 (I think I mentioned this before,) we really want to de-couple the shell from any plugins, and provide a standalone container for plugin execution, so if you run in to any coupling issues, it would be really helpful if you could open a JIRA against https://issues.jboss.org/browse/FORGE - using the 2.0 target version :)

I will tell you once I have moved forward with the POC.

I think that at the end the Forge Shell should implement the Shell interface of CRaSH that defines the interaction.

This interface is imho decoupled from the IO since today it is able to interact with the various existing implementations.

Also CRaSH has notion of process to model a shell command running : http://julienviet.com/crash/javadoc/org/crsh/shell/ShellProcess.html

In the future I plan to make several process to execute concurrently (like you can do in shell)

So it would be really cool that forges moves in that direction (which is what my POC is doing).


> 
> Then we can start addressing these issues individually.
> 
> Thanks!
> ~Lincoln
> 
> On Mon, May 7, 2012 at 5:45 PM, Julien Viet <julien at julienviet.com> wrote:
> I started to do basic integration to give a concrete try and I'm able to make forge core/shell module to run using CRaSH JLine connector.
> 
> It is not 100% operational (as any POC) as some features are bypassed at the moment, the following work:
> 
> - command execution
> - command completion
> - prompt within a command but without completion (as crash does not support it originally (read here yet))
> 
> here is a short video of running the core/shell module standalone : http://www.youtube.com/watch?v=GJ_QbgawkpE
> 
> I pushed this POC in my GH repository if you are interested to look at the changes yourself : https://github.com/vietj/core/compare/crash
> 
> I will continue to work on this later to add telnet or ssh support because it would be the real value added for forge to use CRaSH.
> 
> Julien
> 
> On May 3, 2012, at 3:33 PM, Julien Viet wrote:
> 
> > no problem actually I had to update CRaSH to use the latest JLine release first (I did not have time to do it before 1.0).
> >
> > I published a 1.1 beta1 and will try to see how it integrates with forge soon.
> >
> > One thing I noticed is that forge is quite coupled at the code level to the JLine project and it's not an obvious thing to decouple it fully. And that would be necessary to achieve a clean integration.
> >
> > I will focus on doing a POC in the coming days.
> >
> > Meanwhile you can have a look at the web connector demo I've done recently : http://crash.vietj.cloudbees.net/
> >
> > you can try fun stuff like:
> >
> > "% help"
> >
> > "% sleep 10" then ctrl-c
> >
> > "% thread ls"
> >
> > "% system propget java." + tab
> >
> >
> >
> > On May 2, 2012, at 5:14 PM, Lincoln Baxter wrote:
> >
> >> Awesome, Julien!
> >>
> >> Sorry for the delay on my end. I am at a conference and have limited access to the RedHat mail VPN.
> >>
> >> Could we bring this discussion to the dev list? (Copied)
> >>
> >> This way everyone will be able to discuss/follow. And I'll see it faster since it comes to all of my accounts.
> >> Thanks!
> >>
> >> ~Lincoln
> >>
> >> ----- Original Message -----
> >> From: "Julien Viet" <julien at julienviet.com>
> >> To: "Lincoln Baxter, III" <lbaxter at redhat.com>
> >> Cc: "Max Rydahl Andersen" <max.andersen at redhat.com>
> >> Sent: Friday, April 27, 2012 1:32:42 AM
> >> Subject: Re: Forge CRAsH, CRAsH Forge!
> >>
> >> I'm trying to POC something with crash as invoker of forge.
> >>
> >> I can now clearly see how it would work:
> >> - the jline code would be merged somehow with jline crash code: I need to see what can be reused or not
> >> - the invoking part would use crash that would give the benefit to use the other protocol out of the box like SSH
> >> - crash would be used like a IO library mostly that wraps the various implementations (jline,ssh,telnet)
> >>
> >> It will take me some time because I cannot spend much time on it (and I'm in vacation until wednesday :-) ).
> >>
> >> That being said I learned interesting stuff looking at forge code, like the nasty but useful proprietary SigHandler usage that is useful
> >> to catch control-c and use it to interrupt a process.
> >>
> >> This way the "shell" implementation (i.e was the shell do when you use it) would remain separate I think because CRaSH uses a file based approach (using lot of groovy)
> >> and forge uses a plugin based approach with CDI based on plugin deployment. We can still see more convergence later: in particular the command line parser, both seems very contextual and are pain to write / maintain :-)
> >>
> >> I'll let you know when I'll have available, it may take a couple of weeks depending on the work load aside (probably less). It will surely fork forge on GH
> >> to push the work visible at some point, I'll also post on the forge dev list too at this moment.
> >>
> >> Julien
> >>
> >>
> >>
> >>
> >> On Apr 26, 2012, at 8:18 PM, Lincoln Baxter, III wrote:
> >>
> >>> Plugins can change core behavior, so certainly.
> >>>
> >>> On Thu 26 Apr 2012 01:43:33 PM EDT, Julien Viet wrote:
> >>>> if the connectivity part of forge is also a plugin of forge, then it would certainly work.
> >>>>
> >>>> On Apr 26, 2012, at 7:26 PM, Lincoln Baxter, III wrote:
> >>>>
> >>>>> That's certainly something we could do as well! I like that idea :) It would certainly be easier if CRaSh were used as the Forge shell provider.
> >>>>>
> >>>>> On 04/26/2012 12:55 PM, Max Rydahl Andersen wrote:
> >>>>>> I was thinking that the functionallity in CRAsH to connect remotely could be loaded in as a plugin to Forge.
> >>>>>>
> >>>>>> That would be more an addon and not involve complex dependencies/legal rearrangements ?
> >>>>>>
> >>>>>> /max
> >>>>>>
> >>>>>> On Apr 26, 2012, at 15:46 , Lincoln Baxter, III wrote:
> >>>>>>
> >>>>>>> Hey Julien!
> >>>>>>>
> >>>>>>> CRaSH seems like a very well implemented and creative project! At first I didn't really understand what it was for, but the thought of providing SSH access directly to runtime Java applications is, simply put, brilliant!
> >>>>>>>
> >>>>>>> Forge is a bit heavy for that at the moment, because of our dependency on CDI (primarily,) and because we haven't yet disassociated the built-in plugins from the core distribution. Soon, however, our shell will be entirely standalone. With zero or as much functionality as you want OOB.
> >>>>>>>
> >>>>>>> I noticed we both use JLine, although mike's Forked it quite a bit for our needs. (Wish he would have done it as an actual fork, not as a source bundle in the project itself, but perhaps there's some collaboration opportunity there.)
> >>>>>>>
> >>>>>>> Where do you think we can work together? I'm totally open to ideas.
> >>>>>>>
> >>>>>>> ~Lincoln
> >>>>>>>
> >>>>>>> On Wed 25 Apr 2012 04:18:06 PM EDT, Julien Viet wrote:
> >>>>>>>> hey :-)
> >>>>>>>>
> >>>>>>>> I would welcome a collaboration, a single effort would provide more features, increase the community footprint and visibility of both projects.
> >>>>>>>>
> >>>>>>>> I have been working hard recently to finish the 1.0 of CRaSH and provide the best user experience I could offer at the moment.
> >>>>>>>>
> >>>>>>>> Currently CRaSH is used in several products / projects already!
> >>>>>>>>
> >>>>>>>> - eXo Cloud IDE provides a web interface using CRaSH under the hood (see photo here https://twitter.com/#!/chanezon/status/194759689102303233/photo/1/large )
> >>>>>>>> - EPP embeds it for portal management providing CLI : https://lh4.googleusercontent.com/R8ruzrxNQ6IWyh-vKGgrnbzpZJJiUYMwZ5RePzRoQQH_YeRLhGeQG6olps5RgcyiZ162NIZTIWw6Quegmr33nPqU18FQteGmmv7ZCHDl8J9VQEXeKpk
> >>>>>>>> - the Silverpeas portal embeds it : http://www.silverpeas.org/
> >>>>>>>>
> >>>>>>>> let me know if you would like to work with me :-)
> >>>>>>>>
> >>>>>>>> On Apr 25, 2012, at 2:43 PM, Max Rydahl Andersen wrote:
> >>>>>>>>
> >>>>>>>>> Hi guys,
> >>>>>>>>>
> >>>>>>>>> Just wanted to e-introduce you guys after talking to you both about the nice possible overlaps/interactions
> >>>>>>>>> being able to have the features CRaSH provides from within Forge (i.e. connection and interaction with remote process).
> >>>>>>>>>
> >>>>>>>>> Julien, meet Lincoln the Forge Master;
> >>>>>>>>>
> >>>>>>>>> Lincoln, meet Julien the Party Crasher.
> >>>>>>>>>
> >>>>>>>>> /max
> >>>>>>> --
> >>>>>>> ---
> >>>>>>> Lincoln Baxter, III
> >>>>>>> http://ocpsoft.org
> >>>>>>> "Simpler is better."
> >>>>>>>
> >>>>>
> >>>>> --
> >>>>> ---
> >>>>> Lincoln Baxter, III
> >>>>> http://ocpsoft.org
> >>>>> "Simpler is better."
> >>>>>
> >>>>
> >>>
> >>> --
> >>> ---
> >>> Lincoln Baxter, III
> >>> http://ocpsoft.org
> >>> "Simpler is better."
> >>>
> >>
> >
> 
> 
> _______________________________________________
> forge-dev mailing list
> forge-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/forge-dev
> 
> 
> 
> -- 
> Lincoln Baxter, III
> http://ocpsoft.org
> "Simpler is better."
> _______________________________________________
> forge-dev mailing list
> forge-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/forge-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/forge-dev/attachments/20120509/ba22f9f2/attachment.html 


More information about the forge-dev mailing list