Custom Search
|
Date: October 31, 2005
From: robert kuzelj <robert.kuzelj@xxxxxxxx>
In-reply-to:
<436612C2.7030302@xxxxxxx>
References:
<43654D94.90202@xxxxxxxx> <4365F9DF.4020100@xxxxxxx> <436606E0.4060301@xxxxxxxx> <436612C2.7030302@xxxxxxx>
hi burak,
> Yes. Actually there are more ways, not all are necessarily verbose
> - just for appending, there are (costly) ways to append to immutable
> sequences (consider `def concat' in object `Seq' which builds objects
> that glue sequences together).
can you show an example on how to do that?
btw. what do you mean by costly? memory or execution speed or even both?
> For most cases, one could get by with just appending (those cases where
> one cannot use NodeBuffer directly).
> - for replacing, there are the transformer classes in
> scala.xml.transform that try as much as possible to not duplicate
> sequences.
i will have a look into them.
> Yes, I understand, but a full mutable API will require some duplication
> on the library level (parsers, pretty printers...)
> I am not sure to which extent we can avoid that duplication. And the
> fact that A is covariant in Seq[A] suggests that our mother sequence
> class is for immutable sequences only (the NodeBuffer implementation
> notwithstanding).
probably this is very naive: but i dont see the need for duplication.
why not just extend Node and Element classes and have a toDom method
on Node. where you would get a domnified tree which one can use for
easy processing if needed. and when the other stuff is needed transform
it back to the default xml elements.
>> - is there a way i can intercept xml = <MyTag></MyTag>;
>> so that i can create my own Node intstead of getting
>> an element?
> Currently not, but in the future we could pass through a factory method
> defined in scala.Predef.
that would be really great. some sort of SAX or Stax interface.
> Yes, because Seq[A] is considered being immutable. Maybe something like
>
> class MutableNode {
> var mutableChildren: MutableSeq[Node] = ...
> }
>
> would then be necessary.
>
> If you have a good proposal for a mutable API that avoids duplication of
> library code, I will happily integrate it.
sorry, but i had only a very highlevel view. so i didnt care for
duplication issues.
ciao robertj
Date: October 31, 2005
From: robert kuzelj <robert.kuzelj@xxxxxxxx>
hi,
any particular reason why this works
object Test1
{
class SymbolWrapper(val source: Symbol)
{
def ->(p: Any) = {Console.println("" + p);}
def call(p: Any) = {Console.println("" + p);}
}
def view(source: Symbol) = new SymbolWrapper(source);
'test -> 1;
'test.call(1);
}
but this doesnt
object Test2
{
class SymbolWrapper(val source: Symbol)
{
def apply(p: Any) = {Console.println("" + p);}
}
def view(source: Symbol) = new SymbolWrapper(source);
'test(1);
}
ciao robertj
Date: October 31, 2005
From: Burak Emir <Burak.Emir@xxxxxxx>
In-reply-to:
<436612C2.7030302@xxxxxxx>
References:
<43654D94.90202@xxxxxxxx> <4365F9DF.4020100@xxxxxxx> <436606E0.4060301@xxxxxxxx> <436612C2.7030302@xxxxxxx>
Burak Emir wrote:
Yes. Actually there are more ways, not all are necessarily verbose- just for appending, there are (costly) ways to append to immutable sequences (consider `def concat' in object `Seq' which builds objects that glue sequences together).
Sorry for the confusion.Actually, that's `def concat' in trait `Seq', together with `def single' in object `Seq'. Like this, one can append even single elements to sequences without knowing their representation, but it's costly.
cheers, B. -- Burak Emir http://lamp.epfl.ch/~emir
Date: October 31, 2005
From: Burak Emir <Burak.Emir@xxxxxxx>
In-reply-to:
<436606E0.4060301@xxxxxxxx>
References:
<43654D94.90202@xxxxxxxx> <4365F9DF.4020100@xxxxxxx> <436606E0.4060301@xxxxxxxx>
robert kuzelj wrote:
hi burak,The whole API is based on immutable trees. The docs in the <scala/xml> book at http://lamp.epfl.ch/~emir/projects contain some examples on how to do updates with immutable data.you mean like in the "queries and update" section? actually this is a bit verbose, isnt it?
Yes. Actually there are more ways, not all are necessarily verbose- just for appending, there are (costly) ways to append to immutable sequences (consider `def concat' in object `Seq' which builds objects that glue sequences together). For most cases, one could get by with just appending (those cases where one cannot use NodeBuffer directly). - for replacing, there are the transformer classes in scala.xml.transform that try as much as possible to not duplicate sequences.
i would prefer a dom-like api - of course scalafied.
Yes, I understand, but a full mutable API will require some duplication on the library level (parsers, pretty printers...) I am not sure to which extent we can avoid that duplication. And the fact that A is covariant in Seq[A] suggests that our mother sequence class is for immutable sequences only (the NodeBuffer implementation notwithstanding).
Currently not, but in the future we could pass through a factory method defined in scala.Predef.Alternatively, you can subclass scala.xml.Node with something like MutableNode, and use those mutable nodes. To that end, the class scala.xml.NodeBuffer might be useful, it is basically a growable array (which however does not allow removal of nodes).i had a look into it. there are some questions thou: - is there a way i can intercept xml = <MyTag></MyTag>; so that i can create my own Node intstead of getting an element?
- it is not possible to get a hold onto a mutable list of child elements (at least i could see it)
Yes, because Seq[A] is considered being immutable. Maybe something like
class MutableNode {
var mutableChildren: MutableSeq[Node] = ...
}
would then be necessary.
If you have a good proposal for a mutable API that avoids duplication of
library code, I will happily integrate it.
cheers, Burak -- Burak Emir http://lamp.epfl.ch/~emir
Date: October 31, 2005
From: robert kuzelj <robert.kuzelj@xxxxxxxx>
In-reply-to:
<4365F9DF.4020100@xxxxxxx>
References:
<43654D94.90202@xxxxxxxx> <4365F9DF.4020100@xxxxxxx>
hi burak, > The whole API is based on immutable trees. The docs in the <scala/xml> > book at http://lamp.epfl.ch/~emir/projects contain some examples on how > to do updates with immutable data. you mean like in the "queries and update" section? actually this is a bit verbose, isnt it? i would prefer a dom-like api - of course scalafied. > Alternatively, you can subclass scala.xml.Node with something like > MutableNode, and use those mutable nodes. > To that end, the class scala.xml.NodeBuffer might be useful, it is > basically a growable array (which however does not allow removal of nodes). i had a look into it. there are some questions thou: - is there a way i can intercept xml = <MyTag></MyTag>; so that i can create my own Node intstead of getting an element? - it is not possible to get a hold onto a mutable list of child elements (at least i could see it) ciao robertj
Date: October 31, 2005
From: Burak Emir <Burak.Emir@xxxxxxx>
In-reply-to:
<43654D94.90202@xxxxxxxx>
References:
<43654D94.90202@xxxxxxxx>
Hello Robert, robert kuzelj wrote:
hi, is there a way to build in memory mutable xml trees? something like: aNode.addChild(createChildFromExternalData()); def createChildFromExternalData(): Node = ...
The whole API is based on immutable trees. The docs in the <scala/xml> book at http://lamp.epfl.ch/~emir/projects contain some examples on how to do updates with immutable data.
Alternatively, you can subclass scala.xml.Node with something like MutableNode, and use those mutable nodes. To that end, the class scala.xml.NodeBuffer might be useful, it is basically a growable array (which however does not allow removal of nodes).
hope this helps! Burak -- Burak Emir http://lamp.epfl.ch/~emir
Date: October 30, 2005
From: robert kuzelj <robert.kuzelj@xxxxxxxx>
hi, is there a way to build in memory mutable xml trees? something like: aNode.addChild(createChildFromExternalData()); def createChildFromExternalData(): Node = ... ciao robertj
Date: October 30, 2005
From: Burak Emir <Burak.Emir@xxxxxxx>
In-reply-to:
<loom.20051030T014509-894@xxxxxxxxxxxxxx>
References:
<loom.20051030T014509-894@xxxxxxxxxxxxxx>
Hi Gary,There is a much better version now, it is called schema2src and is distributed separately (like all the other scalax tools).
I put up a tarball so you can take a look at the latest pre-release. All my XML goodies can be found on http://lamp.epfl.ch/~emir/projects
schema2src is still almost undocumented but has now things like late-validation (which is my name for conversion of scala.xml.Elem instances into validated classes)!
Plus it is modular, so future versions that may add support for other schema languages can be added more easily.
If you give me feedback (does not need to be positive), this will increase my motivation to write documentation :-)
cheers, Burak Gary T. Leavens wrote:
I can't find dtd2scala in the latest Scala release (at least on the Windows version). Is it no longer available?Gary
-- Burak Emir http://lamp.epfl.ch/~emir
Date: October 30, 2005
From: Vijay Saraswat <vijay@xxxxxxxxxxxx>
Best,
Vijay
====================================
bash-2.05b$ scalaint
__ __ _ _
(_ / /_|| /_| INTERPRETER
___)\__/ ||__/ | (c) 2002-05, LAMP/EPFL
version: 1.4.0.2
type :? to get a list of all interpreter commands
> def test(a : => unit) = Console.print(a);
|
def test(=> scala.Unit): scala.Unit
> test { var a:int = 3; Console.print(a);}
3()(): scala.Unit
>
Date: October 30, 2005
From: robert kuzelj <robert.kuzelj@xxxxxxxx>
hi,
is there anyway to extend enumerations?
i am looking for something like this
object BaseLock extends Enumeration
{
val FREEZE, OPEN = Value;
}
object ValueLock extends BaseLock
{
val EXTEND, NARROW = Value;
}
where ValueLock would include
FREEZE, OPEN, EXTEND and NARROW.
ciao robertj
Date: October 29, 2005
From: Gary T. Leavens <leavens@xxxxxxxxxxxxxx>
I can't find dtd2scala in the latest Scala release (at least on the Windows
version). Is it no longer available?
Gary
Date: October 27, 2005
From: Florian Hof <florian.hof@xxxxxxx>
Hello, I had two difficulties to install Scala (last version, 1.4.0.2) on MacOSX 10.3. Perhaps it can interest someone else, or even the installer be updated. - The installer stop due to permission denied. I need to log as root to run the installer successfully. I noted that the installer hasn't asked for an admin password. - Man pages cannot be accessed, for example "man scaladoc". I need to add the following line in the file /etc/manpath.conf: OPTIONAL_MANPATH /usr/local/share/man Florian Hof
Date: October 25, 2005
From: Matthias Zenger <mail@xxxxxxxxxx>
In-reply-to:
<200510251441.AA1082065026@xxxxxxxxxxxxxxxxx>
References:
<200510251441.AA1082065026@xxxxxxxxxxxxxxxxx>
The "what does it mean" part is easy :-) ... see e.g. System F, where it is worked out in detail. Briefly, one has type abstraction as well as value abstraction, and, correspondingly, type application as well as value application.
Nice explanation! Now I'm just wondering why you only want
to parameterize objects with types? Why don't you also ask
for parameterizing objects with values; something like
object ntimes[T](n: Int) {
def apply(f: T => T): T => T =
if (n > 1) (y => f(ntimes[T](n - 1).apply(f))) else f;
}
This looks very much like something that exists already in Scala.
ntimes is a class, ntimes[T](n - 1) is an object (in fact, it's
an instantiation of class ntimes), apply is a method, etc.
So, you're basically not asking for anything new.
I guess the real question you are interested in is why classes
and polymorphic methods are not first class values, right?
== Matthias
Date: October 25, 2005
From: "Vijay Saraswat" <vijay@xxxxxxxxxxxxxxxxx>
The "what does it mean" part is easy :-) ... see e.g. System F, where it is
worked out in detail. Briefly, one has type abstraction as well as value
abstraction, and, correspondingly, type application as well as value
application.
Thus given
> object twice[t] { def apply(f:t=3D>t) =3D y:t =3D> f (f (y)) }
its application at type int would look something like
twice[int](x =3D> x+1)
and similarly at double. twice[int] is of course not the same as twice[double].
Thus a polymorphic object exists as a poly morphic entity that can be
specialized to monomorphic entities as needed.
Another way to look at it is if there is a correspondence between methods and
functions then how come methods can be poly morphic but not functions?
I am still feeling my way around scala but it seems to me the implementation
already has enough structure to make this work.
Best,
Vijay
========================
>Right, I do understand these work-arounds. Scala is surprisingly clean and
>orthogonal, so the few deviations from orthogonality stick out. Hence my
>original question: Why does Scala not have polymorphic objects.
I think it is not a question of orthogonally but a question of meaning:
Parametric polymorphism, for example at the class level, really means instances
of this class rely on this datatype, but it's early enough to decide the actual
datatype when creating an instance. The same goes for methods: ... decide the
actual datatype when applying the method.
Objects, on the other hand, exist as soon as they are defined and do not change
at all afterwards (its variable members might change, but not the object
itself). In that sense, objects do not have a later stage when a datatype can
be decided: an object must be finished as soon as it is defined.
In your example:
> object twice[t] { def apply(f:t=3D>t) =3D y:t =3D> f (f (y)) }
when should the type argument be decided?
- Every time the apply method is
called? But then t would loose any meaning when used as the type of a field.
And anyway that would be the exact definition of parametric polymorphism on
methods.
- The first time the apply method is called? But static type safety would
be lost.
- Through a special "concretise" call that will set the type parameter?
So much for orthogonality. And what if you access a member before calling
concretise? And anyway, polymorphic classes allow exactly that (instance
creation being the concretise call).
- ...
It just does not have any acceptable meaning! If you think you want a polym=
orphic object, then you really need a polymorphic class or method.
Cheers,
Gilles.
________________________________________________________________
Sent via the WebMail system at mail.saraswat.org
________________________________________________________________
Sent via the WebMail system at mail.saraswat.org
Date: October 25, 2005
From: Gilles Dubochet <gilles.dubochet@xxxxxxx>
References:
<435E5E22.6070507@xxxxxxxxxxxx>
Right, I do understand these work-arounds. Scala is surprisingly clean and orthogonal, so the few deviations from orthogonality stick out. Hence my original question: Why does Scala not have polymorphic objects.
I think it is not a question of orthogonally but a question of meaning:Parametric polymorphism, for example at the class level, really means “instances of this class rely on this datatype, but it's early enough to decide the actual datatype when creating an instance”. The same goes for methods: “... decide the actual datatype when applying the method”.
Objects, on the other hand, exist as soon as they are defined and do not change at all afterwards (its variable members might change, but not the object itself). In that sense, objects do not have a later stage when a datatype can be decided: an object must be “finished” as soon as it is defined.
In your example:
object twice[t] { def apply(f:t=>t) = y:t => f (f (y)) }
when should the type argument “t” be decided?- Every time the apply method is called? But then “t” would loose any meaning when used as the type of a field. And anyway that would be the exact definition of parametric polymorphism on methods. - The first time the apply method is called? But static type safety would be lost. - Through a special "concretise" call that will set the type parameter? So much for orthogonality. And what if you access a member before calling “concretise”? And anyway, polymorphic classes allow exactly that (instance creation being the “concretise” call).
- ...
It just does not have any acceptable meaning! If you think you want a
polymorphic object, then you really need a polymorphic class or method.
Cheers, Gilles.
Date: October 25, 2005
From: Martin Schaffner <schaffner@xxxxxx>
In-reply-to:
<435E5E22.6070507@xxxxxxxxxxxx>
References:
<435E4E31.20601@xxxxxxxxxxxx> <Pine.LNX.4.63.0510251808110.6763@xxxxxxxxxxxxx> <435E5E22.6070507@xxxxxxxxxxxx>
On 25.10.2005, at 18:32, Vijay Saraswat wrote:
Right, I do understand these work-arounds. Scala is surprisingly clean and orthogonal, so the few deviations from orthogonality stick out. Hence my original question: Why does Scala not have polymorphic objects.
Because objects are singletons, and as such can never be instantiated by the programmer:
For a polymorphic class x[T], each instanciation assigns a concrete type to the type variable T. As the runtime does the instantiation of a "scala object"'s class implicitly at load time, there is no way for the programmer to tell which type the resulting object should have. It does not make sense to give the programmer the possibility to create a type variable to which he can never assign a concrete value.
Martin
Date: October 25, 2005
From: Alex Peake <alex_peake@xxxxxxxxx>
References:
<loom.20051024T064406-403@xxxxxxxxxxxxxx> <1130228436.9078.8.camel@xxxxxxxxxxxxxxxx>
Iulian Dragos <iulian.dragos <at> epfl.ch> writes: > > Hello, > > > I tried the example hello project from the web site. On Run (Scala) I get: > > > > java.lang.NoClassDefFoundError: and > > Exception in thread "main" > > > > I am sure some simple configuration problem, but I cannot find it. > > It probably is. Have you created a new Run configuration as > described on http://scala.epfl.ch/docu/eclipse/index.html ? can you run > your program outside Eclipse (from the command line, using the 'scala' > script)? Is the compilation coming through without errors? > > Iulian > > Thanks for the help. I did follow the instructions as best I could (including the Run configuration). The following works (in the bin directory): > scala HelloWorld Hello World > Alex
Date: October 25, 2005
From: Vijay Saraswat <vijay@xxxxxxxxxxxx>
In-reply-to:
<Pine.LNX.4.63.0510251808110.6763@xxxxxxxxxxxxx>
References:
<435E4E31.20601@xxxxxxxxxxxx> <Pine.LNX.4.63.0510251808110.6763@xxxxxxxxxxxxx>
Vincent Cremet wrote:
Hi, as you have noticed, objects are not polymorphic in Scala. You can use methods or classes instead, as in the following example: class Example { def twice1[t]: (t => t) => (t => t) = ( f: Function1[t,t] => y: t => f(f(y))); def twice2[t] = new Function1[t => t, t => t] { def apply(f: t => t): t => t = y: t => f(f(y)); } class twice3[t] { def apply(f: t => t): t => t = y: t => f(f(y)); } twice1[Double](x: Double => x+1); twice1[Int](x: Int => x+1); twice2[Double](x: Double => x+1); twice2[Int](x: Int => x+1); (new twice3[Double])(x: Double => x+1); (new twice3[Int])(x: Int => x+1); } Hope it helps. Vincent. On Tue, 25 Oct 2005, Vijay Saraswat wrote:Why does Scala not permit polymorphic objects? Here is an example. object twice { def apply(f:int => int) = y:int => f (f (y)) } This works, and scalaint gives:twice (x:int=>x+1)(3)5: scala.Int However, I cant define the generic version. scalaint says: ======================object twice[t] { def apply(f:t=>t) = y:t => f (f (y))}<console>:1: `extends' or `{' expected object twice[t] { def apply(f:t=>t) = y:t => f (f (y))} ^======================The idea is to be able to use twice(x:double=>x+1) as well as twice(x:int=>x+1).What is the fundamental problem? Best, Vijay
Date: October 25, 2005
From: Vincent Cremet <vincent.cremet@xxxxxxx>
In-reply-to:
<435E4E31.20601@xxxxxxxxxxxx>
References:
<435E4E31.20601@xxxxxxxxxxxx>
Hi,
as you have noticed, objects are not polymorphic in Scala.
You can use methods or classes instead, as in the following
example:
class Example {
def twice1[t]: (t => t) => (t => t) =
( f: Function1[t,t] => y: t => f(f(y)));
def twice2[t] = new Function1[t => t, t => t] {
def apply(f: t => t): t => t = y: t => f(f(y));
}
class twice3[t] {
def apply(f: t => t): t => t = y: t => f(f(y));
}
twice1[Double](x: Double => x+1);
twice1[Int](x: Int => x+1);
twice2[Double](x: Double => x+1);
twice2[Int](x: Int => x+1);
(new twice3[Double])(x: Double => x+1);
(new twice3[Int])(x: Int => x+1);
}
Hope it helps.
Vincent.
On Tue, 25 Oct 2005, Vijay Saraswat wrote:
Why does Scala not permit polymorphic objects? Here is an example. object twice { def apply(f:int => int) = y:int => f (f (y)) } This works, and scalaint gives:twice (x:int=>x+1)(3)5: scala.Int However, I cant define the generic version. scalaint says: ======================object twice[t] { def apply(f:t=>t) = y:t => f (f (y))}<console>:1: `extends' or `{' expected object twice[t] { def apply(f:t=>t) = y:t => f (f (y))} ^======================The idea is to be able to use twice(x:double=>x+1) as well as twice(x:int=>x+1).What is the fundamental problem? Best, Vijay
Date: October 25, 2005
From: Michal Politowski <mpol@xxxxxxxxxxxxxxxxxxx>
In-reply-to:
<435E4E31.20601@xxxxxxxxxxxx>
References:
<435E4E31.20601@xxxxxxxxxxxx>
On Tue, 25 Oct 2005 11:24:33 -0400, Vijay Saraswat wrote:
> Why does Scala not permit polymorphic objects?
>
> Here is an example.
>
> object twice {
> def apply(f:int => int) = y:int => f (f (y))
> }
>
> This works, and scalaint gives:
>
> >twice (x:int=>x+1)(3)
> 5: scala.Int
>
> However, I cant define the generic version. scalaint says:
>
> ======================
> > object twice[t] { def apply(f:t=>t) = y:t => f (f (y))}
> <console>:1: `extends' or `{' expected
> object twice[t] { def apply(f:t=>t) = y:t => f (f (y))}
> ^
> >
> ======================
>
> The idea is to be able to use twice(x:double=>x+1) as well as
> twice(x:int=>x+1).
You can define a polymorphic method to do that.
object twice {
def apply[T](f: T => T) = y: T => f (f (y))
}
--
Michał Politowski
Talking has been known to lead to communication if practiced carelessly.
Date: October 25, 2005
From: Vijay Saraswat <vijay@xxxxxxxxxxxx>
Why does Scala not permit polymorphic objects?
Here is an example.
object twice {
def apply(f:int => int) = y:int => f (f (y))
}
This works, and scalaint gives:
>twice (x:int=>x+1)(3)
5: scala.Int
However, I cant define the generic version. scalaint says:
======================
> object twice[t] { def apply(f:t=>t) = y:t => f (f (y))}
<console>:1: `extends' or `{' expected
object twice[t] { def apply(f:t=>t) = y:t => f (f (y))}
^
>
======================
The idea is to be able to use twice(x:double=>x+1) as well as
twice(x:int=>x+1).
What is the fundamental problem? Best, Vijay
Date: October 25, 2005
From: Michal Politowski <mpol@xxxxxxxxxxxxxxxxxxx>
In-reply-to:
<435E2A28.10407@xxxxxxxxxxxx>
References:
<435E2A28.10407@xxxxxxxxxxxx>
On Tue, 25 Oct 2005 08:50:48 -0400, Vijay Saraswat wrote: > Working with examples and came across the following oddity.. > > Tried to understand timeofday.scala. Thought I would have a date printed > out. Added (1): > > ===== > def toString = h + ":" + m + ":" + s; > ===== > > in class TimeOfDayVar, and tried Console.println(d). Got an error: > > ===== > timeofday.scala:25: Accidental override: > method toString: java.lang.String has same type after uncurry as > method toString: ()java.lang.String which is inherited from class Object > def toString = h + ":" + m + ":" + s; > ^ > ===== There is a toString():String method in Object. You cannot create a toString:String method in a subclass because of the way Scala translates parameterless methods to the host language. Java does not have parameterless methods so these are translated to methods with empty parameter lists. Just like Scala methods with empty parameter lists. It means that you cannot have both def foo:Type and def foo():Type in one class and you cannot define one in a class that has the other in a supertype. > Then changed that to (2): > ===== > override def toString = h + ":" + m + ":" + s; > ===== > > Now I get > ===== > scalac timeofday.scala > timeofday.scala:25: method toString:java.lang.String in class > TimeOfDayVar overrides nothing > override def toString = h + ":" + m + ":" + s; > ^ > one error found > ====== Yes, as you realized later, the metod to override here is one with an empty parameter list, not a parameterless one. > Hmm.. Seems like a catch22. Later on page 39 of ScalaByExample, I > realize that I should have done (3): > ====== > override def toString() = h + ":" + m + ":" + s; > ====== > This works. > > However, this is a bit odd. What is the guideline -- When should (2) be > used? When should (3) be used? Are (2) and (3) not intended to be > equivalent? Is a method with no parameters not the same as a method with > an empty parameter list? Parameterless methods are indeed distinct from methods with empty parameter lists. (There was some talk here before about maybe getting rid of the distinction, replacing it with more sugar. I don't know what the language authors think of it.) 1. def foo: Type = expr These are definitions of expressions that are re-evaluated every time they are referenced. Advantages: two characters less to type on each access :-) Being indistinguishable from variable access, together with the syntactic sugar translation of assignment to a method application, gives nice, readable "property-like" syntax. Disadvantage: since every access is evaluation, you cannot just pass them around unevaluated. About the best you can do is create a closure () => foo and pass that instead, thus going into the realm of: 2. def bar(): Type = expr These are more Java-like methods, convertible to Function0[Type] when used as a value without being applied. Advantage: you can pass them around as functions and apply later. Also these are what Java has, so you see them and use them when interfacing with Java. -- Michał Politowski Talking has been known to lead to communication if practiced carelessly.
Date: October 25, 2005
From: Vijay Saraswat <vijay@xxxxxxxxxxxx>
Working with examples and came across the following oddity..Tried to understand timeofday.scala. Thought I would have a date printed out. Added (1):
=====
def toString = h + ":" + m + ":" + s;
=====
in class TimeOfDayVar, and tried Console.println(d). Got an error:
=====
timeofday.scala:25: Accidental override:
method toString: java.lang.String has same type after uncurry as
method toString: ()java.lang.String which is inherited from class Object
def toString = h + ":" + m + ":" + s;
^
=====
Then changed that to (2):
=====
override def toString = h + ":" + m + ":" + s;
=====
Now I get
=====
scalac timeofday.scala
timeofday.scala:25: method toString:java.lang.String in class
TimeOfDayVar overrides nothing
override def toString = h + ":" + m + ":" + s;
^
one error found
======
Hmm.. Seems like a catch22. Later on page 39 of ScalaByExample, I
realize that I should have done (3):
====== override def toString() = h + ":" + m + ":" + s; ====== This works.However, this is a bit odd. What is the guideline -- When should (2) be used? When should (3) be used? Are (2) and (3) not intended to be equivalent? Is a method with no parameters not the same as a method with an empty parameter list?
Best, Vijay
Date: October 25, 2005
From: Sebastien Noir <info@xxxxxxxxxxx>
Hello Gary,The bugtracking service has been updated. It should know be able to receive your bug contribution. Please use the page (same as before) : http://lamppc1s1.epfl.ch/bugtracking/contribs/load.do
Sorry for the bugs you encountered ... in the bugtracking service ;-) Hope that helps, Sébastien N.
Hello Gary,It was updated recently, and indeed bug contributions are temporarily broken. We are looking at it.The .../contribs pages are for non-LAMP users. No login is required (once the page works :-o)The .../bugs pages are reserved for staff. cheers, Burak Gary T. Leavens wrote:Hi all,I would like to post bug reports on the documentation for Scala, but the bug reporting system is either broken or it's not obvious how to use it.When I go to the link from the Scala page that is Reporting a Bug/Report a Bug (http://lamppc1s1.epfl.ch/bugtracking/contribs/load.do) I get a "HTTP Status 500" error with message "description The server encountered an internal error () that prevented it from fulfilling this request."When I try to get in another way, through the "view bug list" at the bottom of Reporting a Bug/View Bug List, I get a login screen (http://lamppc1s1.epfl.ch/bugtracking/bugs/loadItem.do), but there doesn't seem to be a way to get a new login.Is it really broken or am I just doing something wrong?
--- Begin Message ------ Begin Message ---In-reply-to: <435C7390.4080501@xxxxxxx>
References: <loom.20051023T224134-556@xxxxxxxxxxxxxx> <435C7390.4080501@xxxxxxx>
Hello Gary,The bugtracking service has been updated. It should know be able to receive your bug contribution. Please use the page (same as before) : http://lamppc1s1.epfl.ch/bugtracking/contribs/load.doSorry for the bugs you encountered ... in the bugtracking service ;-) Hope that helps, Sébastien N.Hello Gary,It was updated recently, and indeed bug contributions are temporarily broken. We are looking at it.The .../contribs pages are for non-LAMP users. No login is required (once the page works :-o)The .../bugs pages are reserved for staff. cheers, Burak Gary T. Leavens wrote:Hi all,I would like to post bug reports on the documentation for Scala, but the bug reporting system is either broken or it's not obvious how to use it.When I go to the link from the Scala page that is Reporting a Bug/Report a Bug (http://lamppc1s1.epfl.ch/bugtracking/contribs/load.do) I get a "HTTP Status 500" error with message "description The server encountered an internal error () that prevented it from fulfilling this request."When I try to get in another way, through the "view bug list" at the bottom of Reporting a Bug/View Bug List, I get a login screen (http://lamppc1s1.epfl.ch/bugtracking/bugs/loadItem.do), but there doesn't seem to be a way to get a new login.Is it really broken or am I just doing something wrong?
--- End Message ---
--- End Message ---
Date: October 25, 2005
From: Stéphane Micheloud <stephane.micheloud@xxxxxxx>
In-reply-to:
<435E13BB.7010805@xxxxxxxxxxxx>
References:
<435E13BB.7010805@xxxxxxxxxxxx>
Starting with Scala 1.4.x.x the 'examples' directory is located in share/doc/scala-1.4.0.2/. [scala-1.4.0.2]$ ls share/doc/scala-1.4.0.2/examples/ -rw-r--r-- 1 3506 Feb 23 2004 auction.scala -rw-r--r-- 1 895 Oct 13 17:14 boundedbuffer.scala -rw-r--r-- 1 762 Oct 13 17:14 computeserver.scala drwxr-sr-x 2 4096 Oct 15 00:12 expressions/ -rw-r--r-- 1 3431 Oct 13 17:14 fors.scala -rw-r--r-- 1 359 Jan 5 2004 futures.scala -rw-r--r-- 1 748 Oct 13 17:14 iterators.scala -rw-r--r-- 1 5483 May 4 2004 maps.scala drwxr-sr-x 2 4096 Oct 15 00:12 mobile/ drwxr-sr-x 2 4096 Oct 15 00:12 monads/ -rw-r--r-- 1 1006 Oct 13 17:14 oneplacebuffer.scala -rw-r--r-- 1 3384 Oct 13 17:14 parsers1.scala -rw-r--r-- 1 1742 Oct 13 17:14 parsers2.scala -rw-r--r-- 1 2721 Oct 13 17:14 Parsers.scala -rw-r--r-- 1 959 Jan 5 2004 patterns.scala drwxr-sr-x 2 4096 Oct 15 00:12 pilib/ -rw-r--r-- 1 416 Feb 23 2004 sort1.scala -rw-r--r-- 1 515 Feb 23 2004 sort2.scala -rw-r--r-- 1 975 Feb 23 2004 sort.scala [scala-1.4.0.2]$ Regards S. Micheloud Vijay Saraswat wrote:
I installed via http://scala.epfl.ch/downloads/ (GZip unix tarball) on my Windows XP/Cygwin Thinkpad. Surprisingly this is missing the examples directory.
Date: October 25, 2005
From: Vijay Saraswat <vijay@xxxxxxxxxxxx>
I installed via http://scala.epfl.ch/downloads/ (GZip unix tarball) on my Windows XP/Cygwin Thinkpad. Surprisingly this is missing the examples directory.
Date: October 25, 2005
From: Iulian Dragos <iulian.dragos@xxxxxxx>
In-reply-to:
<loom.20051024T064406-403@xxxxxxxxxxxxxx>
References:
<loom.20051024T064406-403@xxxxxxxxxxxxxx>
Hello, > I tried the example hello project from the web site. On Run (Scala) I get: > > java.lang.NoClassDefFoundError: and > Exception in thread "main" > > I am sure some simple configuration problem, but I cannot find it. It probably is. :-) Have you created a new Run configuration as described on http://scala.epfl.ch/docu/eclipse/index.html ? can you run your program outside Eclipse (from the command line, using the 'scala' script)? Is the compilation coming through without errors? Iulian
Date: October 25, 2005
From: Vijay Saraswat <vijay@xxxxxxxxxxxx>
In-reply-to:
<1130228501.9078.10.camel@xxxxxxxxxxxxxxxx>
References:
<loom.20051023T060557-12@xxxxxxxxxxxxxx> <1130228501.9078.10.camel@xxxxxxxxxxxxxxxx>
Iulian Dragos wrote:Hmm.. I tried it out last night (US East coast time) and again just now (Eclipse -> Help -> Software Updates -> Find and Install on Eclipse client v 3.1.0 running on Thinkpad Windows/cygwin) and got:On Sun, 2005-10-23 at 04:07 +0000, Alex Peake wrote: ============ Unable to access "http://scala.epfl.ch/downloads/eclipse". ============ What am I doing wrong? Best, Vijay |
Date: October 25, 2005
From: Iulian Dragos <iulian.dragos@xxxxxxx>
In-reply-to:
<loom.20051023T060557-12@xxxxxxxxxxxxxx>
References:
<loom.20051023T060557-12@xxxxxxxxxxxxxx>
On Sun, 2005-10-23 at 04:07 +0000, Alex Peake wrote: > Is there a brief intro to Scala in Eclipse? > Yes, here it is: http://scala.epfl.ch/docu/eclipse/index.html Cheers, Iulian
Date: October 24, 2005
From: Burak Emir <Burak.Emir@xxxxxxx>
In-reply-to:
<loom.20051023T224134-556@xxxxxxxxxxxxxx>
References:
<loom.20051023T224134-556@xxxxxxxxxxxxxx>
Hello Gary,It was updated recently, and indeed bug contributions are temporarily broken. We are looking at it.
The .../contribs pages are for non-LAMP users. No login is required (once the page works :-o)
The .../bugs pages are reserved for staff. cheers, Burak Gary T. Leavens wrote:
Hi all,I would like to post bug reports on the documentation for Scala, but the bug reporting system is either broken or it's not obvious how to use it.When I go to the link from the Scala page that is Reporting a Bug/Report a Bug (http://lamppc1s1.epfl.ch/bugtracking/contribs/load.do) I get a "HTTP Status 500" error with message "description The server encountered an internal error () that prevented it from fulfilling this request."When I try to get in another way, through the "view bug list" at the bottom of Reporting a Bug/View Bug List, I get a login screen (http://lamppc1s1.epfl.ch/bugtracking/bugs/loadItem.do), but there doesn't seem to be a way to get a new login.Is it really broken or am I just doing something wrong?
-- Burak Emir http://lamp.epfl.ch/~emir
Date: October 24, 2005
From: Alex Peake <alex_peake@xxxxxxxxx>
Sorry for such simple questions. I tried the example hello project from the web site. On Run (Scala) I get: java.lang.NoClassDefFoundError: and Exception in thread "main" I am sure some simple configuration problem, but I cannot find it. (Java programs work fine) Alex
Date: October 23, 2005
From: Gary T. Leavens <leavens@xxxxxxxxxxxxxx>
Hi all, I would like to post bug reports on the documentation for Scala, but the bug reporting system is either broken or it's not obvious how to use it. When I go to the link from the Scala page that is Reporting a Bug/Report a Bug (http://lamppc1s1.epfl.ch/bugtracking/contribs/load.do) I get a "HTTP Status 500" error with message "description The server encountered an internal error () that prevented it from fulfilling this request." When I try to get in another way, through the "view bug list" at the bottom of Reporting a Bug/View Bug List, I get a login screen (http://lamppc1s1.epfl.ch/bugtracking/bugs/loadItem.do), but there doesn't seem to be a way to get a new login. Is it really broken or am I just doing something wrong?
Date: October 23, 2005
From: Alex Peake <alex_peake@xxxxxxxxx>
Is there a brief intro to Scala in Eclipse? I installed the plug-in and opened the file sort.scal (in examples) and all I see in the source window is a blue line and the word ERROR Thanks, Alex
Date: October 18, 2005
From: Stéphane Micheloud <stephane.micheloud@xxxxxxx>
In-reply-to:
<4354D8AE.3020202@xxxxxxxx>
References:
<4354D8AE.3020202@xxxxxxxx>
Fixed. Thank you --S. Micheloud robert kuzelj wrote:
trying to install the eclipse plugin gives this error Network connection problems encountered during search. Unable to access "http://scala.epfl.ch/downloads/eclipse/". Unable to access site: "http://scala.epfl.ch/downloads/eclipse/" [Server returned HTTP response code: "403 Forbidden" for URL: http://scala.epfl.ch/downloads/eclipse/.] Unable to access site: "http://scala.epfl.ch/downloads/eclipse/" [Server returned HTTP response code: "403 Forbidden" for URL: http://scala.epfl.ch/downloads/eclipse/.] did the pat to it change? ciao robertj
Date: October 18, 2005
From: robert kuzelj <robert.kuzelj@xxxxxxxx>
trying to install the eclipse plugin gives this error Network connection problems encountered during search. Unable to access "http://scala.epfl.ch/downloads/eclipse/". Unable to access site: "http://scala.epfl.ch/downloads/eclipse/" [Server returned HTTP response code: "403 Forbidden" for URL: http://scala.epfl.ch/downloads/eclipse/.] Unable to access site: "http://scala.epfl.ch/downloads/eclipse/" [Server returned HTTP response code: "403 Forbidden" for URL: http://scala.epfl.ch/downloads/eclipse/.] did the pat to it change? ciao robertj
Date: October 18, 2005
From: Steve Ganz <ganz@xxxxxxxxxxx>
References:
<loom.20051015T012435-508@xxxxxxxxxxxxxx> <20051016215451.GA16525@xxxxxxxxxxxxxxxxxxx>
Michal Politowski <mpol <at> charybda.icm.edu.pl> writes:
>
> Given
> class C[B1 <: B] extends A[B] {
> type P = B1#Q;
> }
> what use would C[B] be? What would it mean?
It would be like A[B] except that instead of two different unknown types,
P and B#Q, these would be unified to a single unknown type. In further
refinements, P could then only be set to subclasses of B1#Q. This is closer to
what I was intending than the solution with the instance variables.
(BTW, the base class should be A[B1]).
Being able to reference abstract type members would also allow a class that
defines an abstract type member to reference a refinement of itself that
specifies the class member, as in:
trait A {
type P;
def f: A {type P = List[this.type#P];};
}
Steve
Date: October 17, 2005
From: Burak Emir <Burak.Emir@xxxxxxx>
In-reply-to:
<ditekd$ge0$1@xxxxxxxxxxxxx>
References:
<ditekd$ge0$1@xxxxxxxxxxxxx>
Hello Vadim,Thanks for the praise! I don't think we are interested much in aspects - try some mixin composition instead, it's fun!
And finally: Thanks for pointint out the bug and the fix.Embarrasingly, this bug had been found some an awful long time ago (by Rachele Fuzzati).
Will fix it the code *and* the documentation in the next release. cheers, Burak Vadim Lebedev wrote:
Hello,
First i want to congatulate the authors of Scala...
It is really beautiful and elegant language.
Second, i've a question: Are there any plans to include some AOP
functionnality?
Third i believe that scala.concurent.Channel contains a bug,
it should be:
class Channel[a] {
class LinkedList[a] {
var elem: a = _;
var next: LinkedList[a] = null;
}
private var written = new LinkedList[a];
private var lastWritten = written; // FIX: new LinkedList[a];
private var nreaders = 0;
def write(x: a) = synchronized {
lastWritten.elem = x;
lastWritten.next = new LinkedList[a];
lastWritten = lastWritten.next;
if (nreaders > 0) notify();
}
def read: a = synchronized {
if (written.next == null) {
nreaders = nreaders + 1; wait(); nreaders = nreaders - 1;
}
val x = written.elem;
written = written.next;
x
}
}
-- Burak Emir http://lamp.epfl.ch/~emir
Date: October 17, 2005
From: Michal Politowski <mpol@xxxxxxxxxxxxxxxxxxx>
In-reply-to:
<43532F80.8060302@xxxxxxx>
References:
<loom.20051015T012435-508@xxxxxxxxxxxxxx> <20051016215451.GA16525@xxxxxxxxxxxxxxxxxxx> <43532F80.8060302@xxxxxxx>
On Mon, 17 Oct 2005 06:58:40 +0200, martin odersky wrote:
> Michal is correct in his analysis, but this begs the question how to
> make types dependent on parameters in Scala. Here's a way to do it:
>
> class C [B1 <: B] (val x: B1) extends A[B] {
> type P = x.Q;
> }
>
> The keyword `val' in front of the parameter makes `x' into an externally
> accessible field of class `C'.
> This makes it legal to write x.Q as a type.
Which shows that the last part of my analysis wasn't really good.
Let me correct myself somewhat:
type P = x.Q
is just shorthand notation for
type P = x.type#Q
(though scalap prints it the other way, translating x.type#Q to this.x.Q)
and we obviously don't really need x, only its type, to know what P is.
Thus C[BB]#P is sound if BB <: B and BB#Q is not an abstract type member.
And the real problem was that without the val keyword x was not in C signature,
so x.type#Q shouldn't appear in the signature either.
By the way: scalap doesn't show val constructor attributes as class
members. Is it a bug?
--
Michał Politowski
Talking has been known to lead to communication if practiced carelessly.
Date: October 17, 2005
From: martin odersky <martin.odersky@xxxxxxx>
In-reply-to:
<20051016215451.GA16525@xxxxxxxxxxxxxxxxxxx>
References:
<loom.20051015T012435-508@xxxxxxxxxxxxxx> <20051016215451.GA16525@xxxxxxxxxxxxxxxxxxx>
class C [B1 <: B] (val x: B1) extends A[B] {
type P = x.Q;
}
The keyword `val' in front of the parameter makes `x' into an externally
accessible field of class `C'.
This makes it legal to write x.Q as a type. Cheers -- Martin Michal Politowski wrote:
On Sat, 15 Oct 2005 00:10:58 +0000, Steve Ganz wrote:Hello, I'm considering using Scala to represent some category theory. A question - Is it possible to reference a type member via a type parameter?For example, giventrait A [B1 <: B] { type P; } trait B { type Q; } class C [B1 <: B] extends A[B]{type P = B1.Q;} { } gives ';' expected but '{' foundThis is invalid syntax. A template may only have one template body.class C [B1 <: B] extends A[B] { type P = B1.Q; } gives not found: value B1The dot selects members of values not types. Type projection T#S selects type members of types. But these have to be concrete (specification even says [3.2.2] that T has to be a singleton type, non-abstract class or Java class, but scalac only seems to care if T#S is a (concrete) type) and Q is abstract in B. Given class C[B1 <: B] extends A[B] { type P = B1#Q; } what use would C[B] be? What would it mean? Maybe making type X = Y an alias definition when Y is concrete and a declaration when it's abstract would be possible, but it would also be very confusing, I guess.class C [B1 <: B] (x: B1) extends A[B] { type P = x.Q; } gives type x.type escapes its defining scope.Which is what it does. Consider eg. the projection C[T]#P There isn't any x available here. Disclaimer: I tried to write these answers mainly to check what I do understand about Scala type system myself. Their correctness and usefulness is somewhat uncertain.
Date: October 16, 2005
From: Michal Politowski <mpol@xxxxxxxxxxxxxxxxxxx>
In-reply-to:
<loom.20051015T012435-508@xxxxxxxxxxxxxx>
References:
<loom.20051015T012435-508@xxxxxxxxxxxxxx>
On Sat, 15 Oct 2005 00:10:58 +0000, Steve Ganz wrote:
> Hello,
>
> I'm considering using Scala to represent some category theory. A question -
>
> Is it possible to reference a type member via a type parameter?
>
> For example, given
>
> trait A [B1 <: B] {
> type P;
> }
>
> trait B {
> type Q;
> }
>
> class C [B1 <: B] extends A[B]{type P = B1.Q;} {
> }
> gives ';' expected but '{' found
This is invalid syntax. A template may only have one template body.
> class C [B1 <: B] extends A[B] {
> type P = B1.Q;
> }
> gives not found: value B1
The dot selects members of values not types.
Type projection T#S selects type members of types.
But these have to be concrete
(specification even says [3.2.2] that T has to be a singleton type,
non-abstract class or Java class, but scalac only seems to care
if T#S is a (concrete) type)
and Q is abstract in B.
Given
class C[B1 <: B] extends A[B] {
type P = B1#Q;
}
what use would C[B] be? What would it mean?
Maybe making
type X = Y
an alias definition when Y is concrete
and a declaration when it's abstract would be possible,
but it would also be very confusing, I guess.
> class C [B1 <: B] (x: B1) extends A[B] {
> type P = x.Q;
> }
> gives type x.type escapes its defining scope.
Which is what it does. Consider eg. the projection C[T]#P
There isn't any x available here.
Disclaimer: I tried to write these answers mainly to check what I do
understand about Scala type system myself. Their correctness and usefulness
is somewhat uncertain.
--
Michał Politowski
Talking has been known to lead to communication if practiced carelessly.
Date: October 16, 2005
From: Vadim Lebedev <vadim@xxxxxxxxxx>
Hello,
First i want to congatulate the authors of Scala...
It is really beautiful and elegant language.
Second, i've a question: Are there any plans to include some AOP
functionnality?
Third i believe that scala.concurent.Channel contains a bug,
it should be:
class Channel[a] {
class LinkedList[a] {
var elem: a = _;
var next: LinkedList[a] = null;
}
private var written = new LinkedList[a];
private var lastWritten = written; // FIX: new LinkedList[a];
private var nreaders = 0;
def write(x: a) = synchronized {
lastWritten.elem = x;
lastWritten.next = new LinkedList[a];
lastWritten = lastWritten.next;
if (nreaders > 0) notify();
}
def read: a = synchronized {
if (written.next == null) {
nreaders = nreaders + 1; wait(); nreaders = nreaders - 1;
}
val x = written.elem;
written = written.next;
x
}
}
Date: October 15, 2005
From: Steve Ganz <ganz@xxxxxxxxxxx>
Hello,
I'm considering using Scala to represent some category theory. A question -
Is it possible to reference a type member via a type parameter?
For example, given
trait A [B1 <: B] {
type P;
}
trait B {
type Q;
}
class C [B1 <: B] extends A[B]{type P = B1.Q;} {
}
gives ';' expected but '{' found
class C [B1 <: B] extends A[B] {
type P = B1.Q;
}
gives not found: value B1
class C [B1 <: B] (x: B1) extends A[B] {
type P = x.Q;
}
gives type x.type escapes its defining scope.
This seems like a useful thing to be able to do, or am I confused.
Steve Ganz
Date: October 14, 2005
From: robert kuzelj <robert.kuzelj@xxxxxxxx>
hi,
i just discovered that
var x = new Foo:String;
kicks a view into motion if there is defined a
def view(foo: Foo): String.
this is nice but it would be even nicer if i could
chain the resulting object without the parenthesis
(to much java here)
what i would like to do is something like this here
result = new Reader(url):String
toUpperCase():Command
send: String
toLowerCase();
one could build crystal clear pipelines with that
(syntax wise as well as with design wise)
of course i could (need to at the moment) put all those
parens in there
result = (((new Reader(url):String)
toUpperCase():Command)
send: String)
toLowerCase();
but the longer the pipe gets the uglier and harder to edit
it gets.
of course i have no clue how big that can of worms in regards
ot the syntax is that is being opened by such a change.
ciao robertj
Date: October 13, 2005
From: robert kuzelj <robert.kuzelj@xxxxxxxx>
hi
i hope you dont mind :-)
pay.on, munich (germany)
as a fast growing enterprise that services the financial industry
we are looking for
OO- and java pros, software engineers, senior software engineers
required skills and tasks:
- you will design, extend and implement our payment platform
for internet payments.
- you are delivering high quality code that is tested
and can be released.
- you program because you love to program and you love unit tests too.
- you work will embrace the whole development cycle and you will be part
of the ongoing success of our platform and services.
- you are working closely with our clients to find and
implement their requirements.
- you are working autonomously across every module of the system.
- you are a teamplayer.
- you like to learn from collegues and clients.
- you have fun at work!
desired skills:
- agile development mindset.
- fast and effective OO coder.
- you will have 4-8 years of experience on the java platform.
- J2EE, AspectJ, Hibernate, xUnit (maybe scala in the future)
- web technologies (http, xml, xsl, etc.)
- dynamic languages (Javascript, Ruby, Python)
- understanding how architektur, buildprocess
and programming interweave.
- willingness to learn
- clear and concise communication, both written and verbal
(german is a plus)
- fun at work!
what we offer
- a small team
- motivated and knowlegdeable team-mates
- a lot to learn
- fun@work
- depending on your experience between EUR45.000 and EUR60.000
send your application to hr@xxxxxxxx
================================================
pay.on, muenchen
Als schnell wachsendes Finanzdienstleistungsunternehmmen suchen wir zur
Verstaerkung unseres Entwicklerteams
OO- und Java-Profis als
Software Engineer / Senior Software Engineer
Deine Aufgaben:
- Du konzipierst, erweiterst und entwickelst eine technische Plattform
fuer Bezahltransaktionen im Internet
- Du lieferst hochqualitativen, getesteten und release-faehigen Code
- Du programmierst, weil es dein Hobby ist und du liebst Unit-Testing
- Du traegst in allen Phasen eines Software Development Zyklus etwas zum
Erfolg des Projekts/Produkts bei
- Du arbeitest eng mit unseren Kunden zusammen um Software Requirements
zu bestimmen
- Du entwickelst innovativ und selbststaendig auf allen Ebenen unseres
Produkts
- Du bist teamfaehig und lernst gerne von Kunden und Kollegen
- Du hast Spass bei der Arbeit!
Unsere Anforderungen:
- Agile development mindset
- Schneller und Effektiver OO Coder
- Mehrjaehrige Berufserfahrung und Projektpraxis mit Java-Technologien
- J2EE, AspectJ, Hibernate, xUnit
- Web Technologien (http, xml, xsl, etc.)
- Dynamische Sprachen (Javascript, Ruby, Python)
- Verstaendnis fuer das Zusammenwirken von Architektur, Buildprozess und
Programmierung
- Lernbereitschaft
- Problemlose Verstaendigung in Deutsch und Englisch (in Wort und Schrift)
- Spass bei der Arbeit
Wir bieten dir:
- Offenes und angenehmes Betriebsklima in einem kleinen Team
- Motivierte und fitte Kollegen
- Lernmoeglichkeiten
- Fun@work
- Je nach Erfahrung EUR45.000 bis EUR60.000
Schriftliche Bewerbungen bitte an hr@xxxxxxxx
--
*robert kuzelj* technology | robert.kuzelj@xxxxxxxx
pay.on GmbH | Augustenstr. 102 | 80798
Munich - Germany
P. +49 89 52 01 14 01 | F. +49 89 14 88 24 94 37 | M. +49 176
2412 6035
Date: October 13, 2005
From: robert kuzelj <robert.kuzelj@xxxxxxxx>
In-reply-to:
<434E9FB0.4080607@xxxxxxx>
References:
<434E39A9.7090602@xxxxxxxx> <dilhp7$phv$1@xxxxxxxxxxxxx> <434E520C.9050603@xxxxxxxx> <434E9FB0.4080607@xxxxxxx>
hi martin, > One could do that