On Wed, Jan 5, 2011 at 9:38 AM, Juergen Donnerstag < juergen.donners...@gmail.com> wrote:
> Cool. May I ask which tools (IDE) you've been using and what your > experience with these tools has been. > #scala suggests IDEA 10 + SBT plugin as the most mature one. > > -Juergen > > On Wed, Jan 5, 2011 at 2:34 AM, Jeremy Thomerson > <jer...@wickettraining.com> wrote: > > On Tue, Jan 4, 2011 at 5:15 PM, richard emberson < > richard.ember...@gmail.com > >> wrote: > > > >> Dev Wicketers, > >> > >> What: I have ported Wicket to Scala > >> A couple of months ago I took a 1.5 snapshot and ported to Scala. > >> This encompasses all of the source and test code. As successive 1.5 > >> snapshots were released, I ported those differences to my Scala > >> version. I am current with 1.5 M3. > >> > >> The Java 137,791 loc in 1.5 M3 are now 100,077 loc Scala (not > >> counting all the println statements I put into the Scala code > >> for debugging). I used cloc (http://cloc.sourceforge.net/) to > >> count lines of code. > >> > > > > I haven't used CLOC before. I've used Ohcount ( > > http://www.ohloh.net/p/ohcount) and like it. I'll have to give this a > try. > > > > > > I have also replaced all of the Java collection classes with > >> Scala collection classes (though a small number of Java collection > >> classes remain that did not have comparable Scala implementations). > >> > >> I have changed many method return types from the Java returning > >> some "object" or "null" to Scala returning "Some(object)" or "None" > >> (using the Scala Option[return-type] construct) - trying to > >> eliminate nulls. > >> > >> Lastly, I pushed the IModel[T] typing down to the Component class > >> making get/set DefaultModel and get/set DefaultModelObject strong > >> typed. This included using Scala companion object apply methods > >> which eliminated having to explicitly declare type parameters in > >> most end-user code (I had read that one of the objections to > >> pushing strong typing down to the Component class in Wicket was > >> that there were "too many notes", end-user code was too verbose). > >> > >> It can not interoperate with Java Wicket because Scala compiles to > >> JVM class files and so all of the classes in Java Wicket also > >> appear in Scala-Wicket. > > > > > >> I have an "internal" name for my Scala port of Wicket which > >> acknowledges its Wicket heritage as well as advertises its > >> enterprise level capabilities. For external communications, > >> I am currently simply call it Scala-Wicket. > >> > >> Why: Scala is a better Java > >> I was introduced to Scala 9 months ago and quickly determined that > >> it was a better Java (at least IMO). For Scala to succeed it > >> requires more programmers to use it. Many on the Scala mailing > >> lists were from a functional background and seemed not to recognize > >> that Haskell and Lisp are not blindingly successful but, rather, > >> niche languages and that the heavy selling of Scala's function and > >> typing capabilities might turn off Java programmers. > >> > >> Scala struck me in many ways as a strong-typed JavaScript, at > >> least, much of the code did not have to have type declarations > >> because the compiler could infer types in many cases. In addition, > >> a whole lot of the Java boil-plate code was not needed. As such, > >> it could be sold as simply a better Java; a more-to-the-point > >> object oriented language with functional programming in-the-small. > >> > >> To get more Java programmers to try Scala I looked for a > >> significant Java application with a strong support and user > >> community that I could port to Scala. I ended up with Wicket. > >> Wicket is an enterprise level web framework (unlike existing > >> Scale web frameworks which place restrictions on enterprise IT > >> organizations, e.g., by requiring sticky sessions). It is well > >> documented. And, as it turned out, very, very importantly it had > >> a large number of unit tests (the unit tests saved my butt, > >> without them I would never had succeeded in getting a port that > >> worked). > >> > >> No, Really, Why: > >> I like Scala and I took the time to learn it. Right now about > >> 20% of programmers use Java while only some 0.4% use Scala. > >> I did not want my effort of learning Scala to be wasted so my > >> solution is to increase the number of Scala programmers. Where > >> to get them? Again, my solution is from the existing horde of > >> Java programmers. > >> > >> Plans: Release, Evolve and Proselytize > >> I would like to release Scala-Wicket. > >> I do not know if Apache hosts anything other than Java code. > >> Growing a community is important. > >> > >> Still Todo: > >> Comments: All of the existing class and inline comments are > >> still Java related. This would have to be a long, on-going > >> task to edit the comments so they reflect the code's > >> Scala usage. > >> Package path: The code still uses the "org.apache.wicket" > >> package path and this must be changed - unless this became > >> an Apache project. > >> Author: I have quite literally looked at and touched every line > >> of code but I have not yet felt comfortable with adding > >> myself as an author since, well, many changes were > >> syntactic and not semantic. > >> Refactor with Traits: Currently the port uses Scala traits like > >> Java interfaces but it should be possible to factor the > >> common code out into the traits. This would result in many > >> of the interfaces, the "I" files, such as IModel.scala, > >> going away. > >> Some general refactoring: > >> As an example, consider factoring out the IModel[T] from > >> Component. Half the time a user wants a Component with > >> no model, so, if there was a HasModel trait: > >> class Model[T](var value: T) { > >> def getObject: T = value > >> def setObject(value: T): Unit = this.value = value > >> } > >> trait HasModel[T] { > >> var model: Model[T] > >> def getDefaultModel: IModel[T] = model > >> def setDefaultModel(model: IModel[T]): this.type = { > >> .... > >> this > >> } > >> def getDefaultModelObject: Option[T] = { > >> .... > >> } > >> def setDefaultModelObject(obj: T): this.type = { > >> .... > >> this > >> } > >> } > >> The Component hierarchy would have no model support. > >> The user could add model support when needed: > >> val form = new Form("hi") > >> with HasModel[Int] { var model = new Model(42) } > >> Just an Idea. > >> STM: There are a number of Scala STM projects and I do not know > >> if it is useful to add STM capabilities to Scala-Wicket. > >> RBAC: I've written a Scala implementation of the NIST RBAC > >> recommended standard and might consider adding it. > >> Logging: Adding a Scala-based logging framework to aid user > >> debugging. > >> Monitoring and stats: In the last couple of years many web > >> sites have added monitoring and statistics gathering > >> capabilities (e.g., who clicks what, where, how long, on > >> what page does the visitor exit the web site, etc.) in > >> order to know how the web site is being used and then > >> improve the web site. > >> Significant Memory Usage Reduction: I've an idea that would > >> significantly decrease the memory usage of Scala-Wicket and > >> I plan to do a test implementation. > >> Replace Java features: There are still some Java-isms that can > >> be replaced with Scala equivalents. > >> Port additional Java Wicket libraries to Scala. > >> Enable multiple instances of a unit tests to be run at once. > >> More: ???????????? > >> > >> I want to avoid using some of the WTF features of Scala (when a > >> Java programmer looks at the code and says "WTF") in order to > >> ease and accelerate acceptance by Java programmers; as > >> examples, implicits can make code hard to understand and > >> advanced Scala type usages, as James Gosling said, "makes one's > >> head spin". > >> > >> > >> Help and Advice: How should Scala-Wicket be extended and released > >> > >> Scala-Wicket is a port and evolution of Wicket, not a ground-up > >> re-write. Given that, what would you do differently in Wicket > >> now that there are years of experience using it? > >> > >> How best to get a hosting site, release the code and build a > >> community? > >> > > > > If you're looking for a place to host it, I'd recommend starting with > > Github. Git is where the crowd is headed, and Github is the easiest > place > > to get up and running with it these days. > > > > You mentioned earlier the idea of it being an Apache project. If you > wanted > > it to be an Apache project, you would start at the Incubator ( > > http://incubator.apache.org/). The one barrier you'll have initially is > > that Apache favors "community over code"... so it's not a great place to > > start a one-man project. Since this is a port of an existing Apache > > project, you might have more leniency, but you'd have to build a > community > > around the project before you could ever "graduate" from the incubator. > > > > Probably Github is your best bet for now. Build a community. Then, if > your > > community is in favor, move to Apache. By that time, ASF might have full > > git support. > > > > > >> Are there any mechanism to help fund such an open-source project? > >> > > > > Best bet is to build a community. Of course, if you can find some > company > > that wants such a project, you can get monetary support to develop / > > maintain. But that seems unlikely in this case with the limited number > of > > companies looking for Scala out there, and especially since this is an > > unproven port of a large Java project. So, start by getting folks like > > jWeekend involved - great coders who are already salivating for Scala. > Find > > other individuals such as yourself who are interested, and build a group > of > > core committers. > > > > > >> This is not meant to be a general announcement but rather a means > >> for me to get some initial advice as to how to proceed. > >> > >> Any help is appreciated. > >> > >> Richard Emberson > > > > > > I'm impressed. Quite an undertaking. > > > > -- > > Jeremy Thomerson > > http://wickettraining.com > > *Need a CMS for Wicket? Use Brix! http://brixcms.org* > > >