Don't get me wrong, I'm all about seeing a Wicket-like Scala-based
project (and would contribute to it), but that's not what we've been
debating here lately on this thread.  If you guys want to talk about
coming up with a from-the-ground-up Scala-based, Wicket-inspired
project, then I'm all ears and think we should start putting something
in github or something.

On Wed, Jan 19, 2011 at 12:09 PM, Martin Makundi
<martin.maku...@koodaripalvelut.com> wrote:
> What about rewriting wicket into most wonderful tight functional scala style?
>
> def : webserver {
>   homepage,
>   logoutpage,
>   onlinestore,
> }
>
> ...
>
> ;)
>
> **
> Martin
>
> 2011/1/19 James Carman <ja...@carmanconsulting.com>:
>> I believe this conversation has gone enough off-course that it no
>> longer belongs on this mailing list.  We're not discussing anything
>> related to Wicket anymore.
>>
>> On Wed, Jan 19, 2011 at 11:57 AM, richard emberson
>> <richard.ember...@gmail.com> wrote:
>>>
>>>
>>> On 01/19/2011 07:22 AM, Martin Makundi wrote:
>>>>
>>>> The only thing that bugs me about scala is its flexibility of
>>>> accepting different kind of notation. It's that what was the
>>>> "downfall" of html: making complilers flexible to allow various human
>>>> input and as end result none of the browsers work correctly because
>>>> the truth is only "in the eye of the beholder" (or creator only, in
>>>> this case).
>>>
>>> I guess concerning HTML, I would say that it did not have a good
>>> enough spec soon enough and, of course, MS did whatever they wanted
>>> anyway.
>>> Scala has a very, very detailed spec (do not try to learn the
>>> language by reading the spec first).
>>> Scala also has the incredible advantage that the Scala team
>>> can make changes that are not backward compatible, which is to
>>> say, Scala has had a long gestation period.
>>> This advantage was particularly useful in going from the 2.7 to 2.8
>>> releases where the whole collection framework was redone. They are
>>> finding out what works best and folding those changes back into the
>>> language.  This will slow down with time (I expect the collection
>>> re-write is the last super big change).
>>>
>>>>
>>>> Scala maybe needs a bit more syntactical canonicity?
>>>
>>> I agree, languages have multiple ways of doing things:
>>>    while-loop and for-loops
>>>    i++ vs i += 1 vs i = i + 1 (Scala does not support i++)
>>>
>>> First, Scala is both OO and FP, so there are generally a
>>> couple of approaches - one that looks like Java and one that
>>> is more pipelined, data flowing through functions.
>>>
>>> So, it is true that Scala allows one to be "creative!?".
>>> Some of this comes from the vastly richer set of capabilities
>>> associated with the collection classes. In Java one has
>>> Iterator while in Scala there is a whole lot of extra
>>> standard methods.
>>>
>>> Just yesterday while working on my NIST RBAC code, I had to
>>> decide how to check access rights in a test class:
>>>  Does a Session have a given Permission, where
>>>  Roles are in a Set and RolesToPerm is a Map from Role to Permission:
>>>
>>>  def checkAccess(session: Session, perm: Permission): Boolean = {
>>> // version 0, very Java-like, never considered
>>>    for (role <- session.getRoles) {
>>>      val pOp = roleToPerms.get(role)
>>>      if (permOp.isDefined)
>>>        if (permOp.get == perm) return true
>>>    }
>>>    false
>>>
>>> // or version 1, handling Option the Scala-way
>>>    for (role <- session.getRoles) {
>>>      roleToPerms.get(role) match {
>>>        case Some(p) => if (p == perm) return true
>>>        case None => // ignore
>>>      }
>>>    }
>>>    false
>>>
>>> // or version 2, rather more functional
>>>    sesson.getRoles.foldLeft(false) { _ || roleToPerms.get(_).getOrElse(null)
>>> == perm }
>>>  }
>>>
>>> The first two versions are not too hard to understand, but the last
>>> one, unless you know what foldLeft does, is, I imagine, opaque to most
>>> Java programmers.
>>> ["foldLeft" sets the result value with an initial value, "false", and
>>> then iterates over the values of the container, "roles", performing
>>> the operation, "||", creating a new result value on each iteration
>>> where the first "_" is the current result value and the second "_" is
>>> the value from the container.  "getOrElse returns the value looked up
>>> from "roleToPerms" and, if it does not exist, returns "null". Lastly,
>>> the iteration stops when the first true value, "== perm" is true;
>>> the normal "||" shortcutting.]
>>> That said, I consider the code to be functional
>>> programming in-the-small, a single line of code and, ultimately, more
>>> understandable (and more maintainable) than either of the proceeding
>>> versions.  [There maybe a better way to pipeline the evaluation, this
>>> is just what I did.]
>>>
>>> I have very mixed feelings about DSLs. If every programmer in your
>>> project creates their own DSLs for their own section or, even worse,
>>> per class, then DSLs are very bad; less understandable code, a
>>> maintenance problem and a barrier to getting new hires up to speed.
>>> On the other hand, if a project controls the use of DSLs and they
>>> are well documented, they could (not will be, but could) be a boon
>>> rather than a bust.
>>>
>>>>
>>>> **
>>>> Martin
>>>>
>>>> 2011/1/19 richard emberson<richard.ember...@gmail.com>:
>>>>>
>>>>> Yea,
>>>>>
>>>>> I have consistently advocated using Scala with strong coding
>>>>> standards - standards that are actually believed in and enforced.
>>>>> I have referred to it as OO Scala, Scala which is strong on the
>>>>> Java-like Object-Oriented features plus functional programming
>>>>> in-the-small, but refrains from using functional programming
>>>>> in-the-large, many of Scala's "functional goodies" and advanced
>>>>> type capabilities (and if any of these really have to be used, they
>>>>> should be approved by the group and be documented in detail).
>>>>>
>>>>> The reasons for Scala and using it with limitation are:
>>>>>  Scala is a better Java and
>>>>>  The use of Scala's "advanced features" must be controlled so that
>>>>>  code is understandable, maintainable and, most importantly, so that
>>>>>  one can access the existing programmer labor pool and not have to
>>>>>  limit one self to the very small number of FP programmers out there.
>>>>>
>>>>> Those who advocate the use of Scala's advanced features on large
>>>>> projects are really advocating that Scala be only a niche language.
>>>>>
>>>>> Richard
>>>>>
>>>>> On 01/18/2011 11:02 PM, Liam Clarke-Hutchinson wrote:
>>>>>>
>>>>>> Hey mate,
>>>>>>
>>>>>> I code Java for my day job, and write my fun code in Scala. I just love
>>>>>> the
>>>>>> flexibility of Scala combined with the power to use all my existing Java
>>>>>> libraries. That said,
>>>>>> I don't see Scala overcoming Java anytime soon because it offers
>>>>>> developers
>>>>>> _too much_ freedom. I had a real bad time using
>>>>>> http://dispatch.databinder.net for a project, because it fully utilized
>>>>>> a
>>>>>> lot of Scala features to offer a really shit API. Java makes everyone
>>>>>> conform to a base level while preventing soaring, and it's a base level
>>>>>> that's sane. And when it comes to writing  business code, as in "Code
>>>>>> that
>>>>>> makes money", Scala's freedom doesn't offer overly much compared to
>>>>>> Java's
>>>>>> enforced conformity.
>>>>>>
>>>>>> Don't get me wrong, I<3 Scala, but while half of me wants to use it at
>>>>>> work, the other half is terrified of what the Java developers who write
>>>>>> Spring code like this:
>>>>>>
>>>>>> <bean id="something class="java.lang.String">
>>>>>>     <constructor-arg index="0">
>>>>>>         <value>${someProperty}</value>
>>>>>>     </constructor-arg>
>>>>>> </bean>
>>>>>>
>>>>>> Would do with the power of Scala at their finger tips. (PS, that's real
>>>>>> Spring code that I saw (and refactored) today.)
>>>>>>
>>>>>> On Tue, Jan 18, 2011 at 5:33 PM, richard emberson<
>>>>>> richard.ember...@gmail.com>    wrote:
>>>>>>
>>>>>>> I originally mentioned the Kuhn book in the context of the politics of
>>>>>>> change.  Altering the focus, you brought up *the truth* as the view
>>>>>>> held by those resisting change, which I believe is not the larger
>>>>>>> insight to be gained from his book.  It is still my contention that my
>>>>>>> original interpretation is valid; Scala faces resistance to change and
>>>>>>> the structure of that resistance, maps into those structures
>>>>>>> identified by Kuhn.
>>>>>>>
>>>>>>> Using a term you earlier used, I think it would be naive to believe
>>>>>>> that entrenched business forces will stop the emergence of a new,
>>>>>>> major development language. Such forces were aligned against C, C++
>>>>>>> and Java, but the forces were overcome.  In each case, rational
>>>>>>> examination of the languages revealed advantages as well as
>>>>>>> non-rational forces, such as Sun's marketing and glitter in the case
>>>>>>> of Java, strengthening the prospects of the language's adaption. I
>>>>>>> hope we can both agree that change will come.
>>>>>>>
>>>>>>> But, I do not believe the change will be revolutionary but, rather,
>>>>>>> evolutionary. A language that evolves from an existing ecosystem has a
>>>>>>> much greater likelihood of becoming significant than a green field
>>>>>>> language.
>>>>>>>
>>>>>>> I paint and sculpt as well as do mathematics and physics and, for me,
>>>>>>> language selection is far closer to math and physics than to the play
>>>>>>> of colors or shape and form. I, thus, do not agree that choosing a
>>>>>>> programming language is an exercise in artistry, but rather, its a
>>>>>>> more rational process.  And, if beauty is involved, then it is
>>>>>>> scientific beauty and not artistic beauty.  Are you Picasso? Maybe
>>>>>>> even Mondrian? Hopefully, not Pollock.
>>>>>>>
>>>>>>> Concerning the languages you listed as "the way forward", an important
>>>>>>> criteria must be: where are the programmers coming from?  One can wait
>>>>>>> for a new generation or one can see if any existing programmers will
>>>>>>> migrate from their current language to a new language.  Some language
>>>>>>> usages from the web:
>>>>>>>    Java         18%
>>>>>>>    C            16%
>>>>>>>    C++           9%
>>>>>>>    Python        6%
>>>>>>>    C#            6%
>>>>>>>    Objective-C   3%
>>>>>>>    Ruby          2%
>>>>>>>    Lisp          1%
>>>>>>>    Scheme       ~0.5%
>>>>>>>    Haskell      ~0.3%
>>>>>>>    Scala        ~0.3%
>>>>>>>    Eiffel<0.1%
>>>>>>>    Clojure      ~0.0%
>>>>>>>
>>>>>>> So, where might future Haskell or Clojure or Eiffel or Scala
>>>>>>> programmers come from?
>>>>>>>
>>>>>>> # So, what about Eiffel?
>>>>>>>
>>>>>>> Eiffel (with DbC, "design by contract") is a 25 year old language and
>>>>>>> its usage stats are down in the noise - well below Scala, Clojure and
>>>>>>> Haskell - and showing its age. Hard to see a ground swell of C or Java
>>>>>>> programmers switching to Eiffel.
>>>>>>>
>>>>>>> Eiffel's grasp exceeded what could be supported; its notion of
>>>>>>> "contract" was so big, it was hard to find a wrapper around it all.
>>>>>>> Category Theory may provide for a pragmatic approach to reasoning
>>>>>>> about interfaces (contracts) which might not encompass all possible
>>>>>>> rely/guarantee predicates, but many.  As such, the three laws of
>>>>>>> Monads from Category Theory might yield a more coherent, reasoned
>>>>>>> approach to DbC and interface design.  Curiously, this has been
>>>>>>> discussed by the author of Scala as a possible approach to adding DbC
>>>>>>> to Scala. For the Scala-CLR binding there is native support for such
>>>>>>> constructs while for the Scala-JVM binding, it would have to be done
>>>>>>> with code.
>>>>>>>
>>>>>>>
>>>>>>> # So, what about Haskell?
>>>>>>>
>>>>>>> Haskell is the flag ship FP testbed which has been out there for close
>>>>>>> to 20 years. There are no large enterprise applications written in
>>>>>>> Haskell. It has certainly not taking the programming world by storm
>>>>>>> whatever its merits.  In addition, for Haskell, and all FP languages
>>>>>>> for that matter, the world view required is not shared by most people,
>>>>>>> Folks do not see the world as math functions (program mangers and
>>>>>>> customers certainly don't); functional programming in-the-large is an
>>>>>>> unnatural mapping of external objects and relationship to a FP design.
>>>>>>> (That said, Category Theory is being used more in Physics and
>>>>>>> non-computer Mathematics as a means of providing some guidance by
>>>>>>> helping to find higher level relationships between areas of research,
>>>>>>> but those are rather rarefied endeavors.) Again, where are the
>>>>>>> converts to Haskell coming from?  Just an occasional graduate student.
>>>>>>>
>>>>>>>
>>>>>>> # So, what about Clojure?
>>>>>>>
>>>>>>> Clojure is an interesting case; its immutable data structures are a
>>>>>>> strength but as soon as you allow users to call into Java libraries
>>>>>>> any program-level reasoning due to such data structures are suspect -
>>>>>>> an issue with any FP language which is not 100% pure.  In addition,
>>>>>>> where is the pool of potential converts?  Clojure is a rather large
>>>>>>> leap for the 20% of programmers using Java (or for that matter for the
>>>>>>> 20% using C/C++) Converts would likely come from the Lisp (1% usage)
>>>>>>> and Scheme (usage levels in the noise) community.
>>>>>>>
>>>>>>> As an aside, I had considered porting the Clojure runtime to Scala.
>>>>>>> There would have been many advantages over the Java-based
>>>>>>> runtime, e.g.:
>>>>>>>  Scala with its immutable data structures would be a good fit,
>>>>>>>  Scala's coming parallelized data structures targeted to
>>>>>>>    multi-core environments saving the Clojure group much development
>>>>>>>    effort.
>>>>>>>  Scala would have given the Clojure community delimited continuations
>>>>>>>    which the Scheme folks would like and understand.
>>>>>>> But, such a port, while interesting and I would certainly have
>>>>>>> learned Clojure, would not have appreciably increased the number
>>>>>>> of Scala users - so I choice Wicket.
>>>>>>>
>>>>>>>
>>>>>>> # So, what about Scala?
>>>>>>>
>>>>>>> I recently came upon a discussion of Joshua Bloch's "Effective Java",
>>>>>>> its list of recommended practices and how they map into Scala.
>>>>>>> Curiously, in each case, the article pointed out that Scala made
>>>>>>> simpler or completely eliminated the need for the "Effective Java"
>>>>>>> better-coding-practice. So, if one thinks that "Effective Java" makes
>>>>>>> sense, so does, at least at the level of the recommendations, a switch
>>>>>>> to Scala - the state of art has moved on from Java. As I have been
>>>>>>> advocating, Scala is a better Java; switching from OO Java to OO Scala
>>>>>>> is relatively easy and certainly Java's warts have become very
>>>>>>> glaring.
>>>>>>>
>>>>>>> As with any language and development team, one needs development
>>>>>>> standards. In this, Scala is no different than Java, C++, C, etc.  To
>>>>>>> not let programmers use Scala because one don't trust them and that
>>>>>>> the team's development practices are not being followed or are
>>>>>>> inadequate is not a problem with the language but rather with those in
>>>>>>> positions of authority and/or respect for failing to set the proper
>>>>>>> environment.
>>>>>>>
>>>>>>> Scala does allow users to access the existing, significant base of
>>>>>>> Java libraries so that a whole universe of supporting libraries does
>>>>>>> not have to be re-created for Scala.  Also, if the use of its
>>>>>>> functional and extended type capabilities are controlled, it offers a
>>>>>>> relatively easy migration for the average Java programmer (or any of
>>>>>>> the other OO languages listed above - a large pool of potential
>>>>>>> converts).
>>>>>>>
>>>>>>>
>>>>>>> The rate of change is increasing, A 100 years ago, change occurred much
>>>>>>> slower than today.  The establishment 100 years ago, those forces that
>>>>>>> resist change as described by Kuhn, suffered few consequences for
>>>>>>> their recalcitrance.  But, now, change on the order of a few years is
>>>>>>> the new constant, and it is only getting shorter (we are, in fact,
>>>>>>> approaching the singularity).  So, yesterday's guru, technical
>>>>>>> innovator is today's stick-in-the-mud detractor - unless one rises
>>>>>>> above the recurring drama Knuth discussed.  Now a day, one might say,
>>>>>>> Go Meta young man or become a Dunsel.
>>>>>>>
>>>>>>>
>>>>>>> Quis custodiet ipsos custodes
>>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> Quis custodiet ipsos custodes
>>>>>
>>>>
>>>
>>> --
>>> Quis custodiet ipsos custodes
>>>
>>
>

Reply via email to