gvelez | 4 Jul 07:13

Scala programmers in US?


Hello all

Its likely in the next month we'll be able to hire a few programmers for a
semantic-web related job.  We've heard about Scala and its sounds promising,
but I'm not finding Scala resumes on Monster.com or Craigslist.org.  Is
there a Scala job board somewhere?  Ideally we want someone who is located
in or would relocate to New York, but remote work might be possible.  

I'm not ready yet to actually post the job opening, but trying to do a bit
of research ahead of time.

Thanks!

Golda
Head of Engineering
Disruptive Logic, Ltd
(520) 440-1420
gvelez17 <at> gmail.com
--

-- 
View this message in context: http://www.nabble.com/Scala-programmers-in-US--tp24331451p24331451.html
Sent from the Scala mailing list archive at Nabble.com.

qwerky | 3 Jul 18:55

[scala.swing] WindowClosing event not working


reactions += {
            case WindowClosing(`mainFrame`) =>
                println("Exiting")
}

not called on closing.
other events working ok.

what i'm doing wrong ? and where can i find good tutorial/examples on
scala.swing - api documentation is very scarce.
--

-- 
View this message in context: http://www.nabble.com/-scala.swing--WindowClosing-event-not-working-tp24326042p24326042.html
Sent from the Scala mailing list archive at Nabble.com.

Meredith Gregory | 29 Jun 01:04

preso on monadic design patterns for the web

All,

The talk i recently gave on this topic is now available online.

Best wishes,

--greg

--
L.G. Meredith
Managing Partner
Biosimilarity LLC
1219 NW 83rd St
Seattle, WA 98117

+1 206.650.3740

http://biosimilarity.blogspot.com

Marius Danciu | 27 Jun 10:23
Gravatar

http://scala-tools.org/ down ?

Can anyone help ?

Meredith Gregory | 26 Jun 23:30

unexpectedly abrupt end for such an innocent mistake

All,

See the trace below. Is this how we'd like this error to be handled?

Best wishes,

--greg

Welcome to Scala version 2.7.4.final (Java HotSpot(TM) Client VM, Java 1.5.0_16).
Type in expressions to have them evaluated.
Type :help for more information.

scala> List( 1, 2, 3 ) match { case List( 1, x* ) => x case _ => throw new Exception() }
Exception in thread "main" java.lang.Error: symbol value x does not exist in line1$object$$iw$$iw.<init>
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase.scala$tools$nsc$backend$icode$GenICode$ICodePhase$$genLoad(GenICode.scala:912)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase.scala$tools$nsc$backend$icode$GenICode$ICodePhase$$genLoad(GenICode.scala:402)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase.scala$tools$nsc$backend$icode$GenICode$ICodePhase$$genLoad(GenICode.scala:455)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase.scala$tools$nsc$backend$icode$GenICode$ICodePhase$$genLoad(GenICode.scala:939)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase.scala$tools$nsc$backend$icode$GenICode$ICodePhase$$genStat(GenICode.scala:171)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$genStat$1.apply(GenICode.scala:146)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$genStat$1.apply(GenICode.scala:145)
    at scala.List.foreach(List.scala:841)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase.genStat(GenICode.scala:145)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase.scala$tools$nsc$backend$icode$GenICode$ICodePhase$$genLoad(GenICode.scala:938)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:114)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$gen$1.apply(GenICode.scala:71)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$gen$1.apply(GenICode.scala:71)
    at scala.List.foreach(List.scala:841)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:71)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:136)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:90)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$gen$1.apply(GenICode.scala:71)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase$$anonfun$gen$1.apply(GenICode.scala:71)
    at scala.List.foreach(List.scala:841)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:71)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:81)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase.gen(GenICode.scala:67)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase.apply(GenICode.scala:63)
    at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:267)
    at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:246)
    at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:246)
    at scala.Iterator$class.foreach(Iterator.scala:414)
    at scala.collection.mutable.ListBuffer$$anon$1.foreach(ListBuffer.scala:266)
    at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:246)
    at scala.tools.nsc.backend.icode.GenICode$ICodePhase.run(GenICode.scala:56)
    at scala.tools.nsc.Global$Run.compileSources(Global.scala:574)
    at scala.tools.nsc.Interpreter$Request.compile(Interpreter.scala:820)
    at scala.tools.nsc.Interpreter.interpret(Interpreter.scala:505)
    at scala.tools.nsc.Interpreter.interpret(Interpreter.scala:494)
    at scala.tools.nsc.InterpreterLoop.interpretStartingWith(InterpreterLoop.scala:242)
    at scala.tools.nsc.InterpreterLoop.command(InterpreterLoop.scala:230)
    at scala.tools.nsc.InterpreterLoop.repl(InterpreterLoop.scala:142)
    at scala.tools.nsc.InterpreterLoop.main(InterpreterLoop.scala:298)
    at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:141)
    at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)

Process inferior-scala exited abnormally with code 1


--
L.G. Meredith
Managing Partner
Biosimilarity LLC
1219 NW 83rd St
Seattle, WA 98117

+1 206.650.3740

http://biosimilarity.blogspot.com

Meredith Gregory | 26 Jun 20:44

implementation hiding

All,

Am i being stupid or is it impossible in the code below to construct a natural way to hide the concrete case class?

Best wishes,

--greg

trait MBrace[C[X] <: MBrace[C,X],A] {
  def nest( a : A ) : C[A]
  def flatten[T <: C[C[A]]]( bsq : T ) : C[A]
}

// a monad that is a Seq
trait MBraceSeq[C[X] <: MBrace[C,X] with Seq[X],A] extends MBrace[C,A]

// one of the simplest witnesses of monad i can find
case class MSequitor[A]( a_ : A* ) extends Seq[A] with MBrace[MSequitor,A] {
  override def nest( a : A ) = new MSequitor[A]( a )
  override def flatten[T <: MSequitor[MSequitor[A]]]( bsq : T ) : MSequitor[A] = {
    (new MSequitor[A]( ) /: bsq)( {
      ( acc : MSequitor[A], e : MSequitor[A] ) => ( acc ++ e ).asInstanceOf[MSequitor[A]]     
    } )
  }
  override def length = a_.length
  override def elements = a_.elements
  override def apply( n : Int ) = a_.apply( n )
}

// a statement of the instance relation
class MBraceSequitor[A] extends MBraceSeq[MSequitor,A] {
  val empty : MSequitor[A] = new MSequitor[A]( )
  override def nest( a : A ) = empty.nest( a )
  override def flatten[T <: MSequitor[MSequitor[A]]]( bsq : T )
  : MSequitor[A] = empty.flatten( bsq )
}

--
L.G. Meredith
Managing Partner
Biosimilarity LLC
1219 NW 83rd St
Seattle, WA 98117

+1 206.650.3740

http://biosimilarity.blogspot.com

Meredith Gregory | 25 Jun 20:59

is this a bug?

All,

Here is a little codesnippet. Everything is fine up to the last decl. That generates the following compiler error.

error: type arguments [MSequitor,A] do not conform to trait MBraceSeq's type parameter bounds [C[_] <: MBrace[C,A] with Seq[A],A]
       class MBraceSequitor[A] extends MBraceSeq[MSequitor,A] {

i haven't been able to convince myself that the type checker is correct. Can someone else take a look and see if the checker's complaint is reasonable or if i should file a ticket?

Best wishes,

--greg

--
L.G. Meredith
Managing Partner
Biosimilarity LLC
1219 NW 83rd St
Seattle, WA 98117

+1 206.650.3740

http://biosimilarity.blogspot.com

Meredith Gregory | 25 Jun 00:47

higher-kinded types

All,

Am i correct in concluding that the solution in The Moors-Piessens-Odersky paper only works with collections that have been clever enough to have used type members rather that type parameters? Or, is there a trick to making the vast majority of the collections types that are parametrically typed look as if they have type members? (See example below.)

Best wishes,

--greg

// Paraphrasing the basic Moors-Piessens-Odersky construction
trait TypeCtor1 { type E }
trait Brace[A] extends TypeCtor1 {
  type C <: TypeCtor1
  def nest( a : A ) : C{type E = A}
  def flatten( bsq : C{type E=C{type E=A}} ) : C{type E=A}
}

// Now, how to make a version of BraceList since List is parametrically typed?


--
L.G. Meredith
Managing Partner
Biosimilarity LLC
1219 NW 83rd St
Seattle, WA 98117

+1 206.650.3740

http://biosimilarity.blogspot.com

Meredith Gregory | 22 Jun 22:38

Re: JPA question

Kris,

Thanks for the suggestion. i've now got a tiny little example that compiles on its own that illustrates the problem. Changing the inheritance strategy to JOINED makes no difference. Hibernate still does the wrong thing.

Best wishes,

--greg

On Mon, Jun 22, 2009 at 8:55 AM, Kris Nuttycombe <kris.nuttycombe <at> gmail.com> wrote:
This may be off the mark, but I'm wondering if the reason that you're
having difficulty with the parallel inheritance hierarchy problem is
not your use of TABLE_PER_CLASS inheritance. In my application, I have
a similar construct, but I am using JOINED_TABLE inheritance. This
allows for a normal foreign key relationship to be created in the
database between C2_table and the base table for CThing, with the
result that Hibernate will generate the query for CThing member as a
union. Using table per class inheritance, I would expect Hibernate to
need to synthesize an additional dtype field in C2_table along with
the key column in order to enforce the uniqueness of the keys to the
joined entities, and I don't believe that it does this.

I'm not sure how the fact that the code is generated is particularly
relevant; surely if it's possible to hand-write a successful solution,
then your code generator could be made aware of how to construct a
viable solution?

Kris

On Fri, Jun 19, 2009 at 8:47 PM, Meredith
Gregory<lgreg.meredith <at> gmail.com> wrote:
> All,
>
> i had a similar problem and found the source of the issues. Spse you have a
> container hierarchy (CTop <- C2) side-by-side with a contained hierarchy
> (CThing <- CThing1). The inheritance at the top of the container hierarchy,
> CTop, causes hibernate to bail on tracking the relations and punt to
> embedded values instead. Rewriting the top to be a <at> MappedSuperClass fixes
> the problem in this specific case. However, if your hierarchy is deep,
> you're screwed.
>
> If anybody has a suggestion for a workaround, i'm all ears. The problem is
> that it would appear that both Mr Crowley and i are generating Java + JPA
> code. So, the solution needs to be algorithmic and not 1-off.
>
> Perhaps the best solution is to find an alternative to hibernate as this is
> a particularly irritating bug.
>
> Best wishes,
>
> --greg
>
> <at> Entity
> <at> Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
> abstract class CTop {
>    ...
>    <at> Id
>     <at> GeneratedValue(generator = "system-uuid")
>     <at> GenericGenerator(name = "system-uuid", strategy = "uuid")
>     private String id_CTop;
> }
>
> <at> Entity
> <at> Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
> abstract class CThing {
>    ...
>    <at> Id
>     <at> GeneratedValue(generator = "system-uuid")
>     <at> GenericGenerator(name = "system-uuid", strategy = "uuid")
>     private String id_CThing;
> }
>
> <at> Entity
> <at> Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
> <at> Table(name = "C2_table", catalog = "mydb_production", uniqueConstraints = {
> <at> UniqueConstraint(columnNames = "uuid") })
> class C2 extends CTop {
>    CThing thing;
> ...
>   <at> OneToOne
>     <at> JoinColumn
>     public CThing getThing() {
>         return this.thing;
>     }
>     public void setThing( CThing thing ) {
>         this.thing = thing;
>     }
>
> <at> Column(name = "uuid", unique = false, nullable = true, insertable = true,
> updatable = true)
>     public String getUuid() {
>         return this.uuid;
>     }
>
>     public void setUuid(String uuid) {
>         this.uuid = uuid;
>     }
>
>     <at> Id
>     <at> GeneratedValue(generator = "system-uuid")
>     <at> GenericGenerator(name = "system-uuid", strategy = "uuid")
>     <at> Column(name = "id", unique = false, nullable = true, insertable = true,
> updatable = true)
>     public String getId() {
>         return this.id;
>     }
>
> }
>
> <at> Entity
> <at> Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
> <at> Table(name = "CThing1_table", catalog = "mydb_production",
> uniqueConstraints = { <at> UniqueConstraint(columnNames = "uuid") })
> class CThing1 extends CThing {
> ...
>   // lots of ground type fields
>
> <at> Column(name = "uuid", unique = false, nullable = true, insertable = true,
> updatable = true)
>     public String getUuid() {
>         return this.uuid;
>     }
>
>     public void setUuid(String uuid) {
>         this.uuid = uuid;
>     }
>
>     <at> Id
>     <at> GeneratedValue(generator = "system-uuid")
>     <at> GenericGenerator(name = "system-uuid", strategy = "uuid")
>     <at> Column(name = "id", unique = false, nullable = true, insertable = true,
> updatable = true)
>     public String getId() {
>         return this.id;
>     }
>
> }
>
>
> On Tue, Jun 16, 2009 at 1:45 PM, Derek Chen-Becker <java <at> chen-becker.org>
> wrote:
>>
>> John Nilsson wrote:
>> > Hi,
>> >
>> > I think the showSql property has been deprecated in favor of log4j
>> > loggers.
>> >
>> > If you set the log4j level to TRACE for org.hibernate you'll get
>> > everything Hibernate has to say about what it is doing. Can't remember
>> > which one it is, but I know one of the loggers will give you the
>> > values used in queries at the TRACE level.
>>
>> Good to know. Thanks!
>>
>
>
>
> --
> L.G. Meredith
> Managing Partner
> Biosimilarity LLC
> 1219 NW 83rd St
> Seattle, WA 98117
>
> +1 206.650.3740
>
> http://biosimilarity.blogspot.com
>



--
L.G. Meredith
Managing Partner
Biosimilarity LLC
1219 NW 83rd St
Seattle, WA 98117

+1 206.650.3740

http://biosimilarity.blogspot.com
Kannan Goundan | 21 Jun 05:58
Favicon

Disjoint unions in Java


(Off-topic, but hopefully people on this mailing list have some 
experience/interest in this sort of thing.  I apologize if this isn't 
appropriate.)

I'm looking for a technique to simulate disjoint unions in Java.  The 
technique should produce something that is easy to use from within Java 
(i.e. I'm not just looking for a way to encode disjoint unions on the 
JVM).

Right now, I'm using an abstract base class with a concrete subclass for 
each option.

One issue is that matching an option requires a verbose "instanceof" 
check along with a type cast.  It would be nice to be able to use a 
"switch" (is there a way to encode disjoint unions using Java enums?).

Another issue is that I want to allow union types to be extended with new 
options.  For example:

  type Bool = True | False
  type TriState extends Bool = Maybe
     // TriState can be True, False, or Maybe

Here, Bool is a subtype of TriState.  TriState describes a larger set of 
values than Bool.

I'd appreciate any relevant tips or references.

Thanks.
- Kannan

Jonas Bonér | 20 Jun 14:07
Favicon

Akka Actor Kernel - Re: Lift and Goat Rodeo

Hi Ray.

After seeing your excellent email I figured it would be good time to
write up the vision I have had for the last 6-9 months, and have been
hacking on for 3-4 months now. It is very much aligned with your
ideas. Here is the vision I have, some of it is already implemented
and some not. Trying to find the time :-)

Happy for all feedback I can get.

-----
Vision Akka Actor Kernel

* Erlang OTP-style embrace/expect failure. Supervisor hierarchies,
components (active objects/actors) restarted automatically according
to preconfigured restart strategies.
* Asynchronous and non-blocking message-passing. SEDA in-a-box.
Configurable thread-pools, queue semantics etc.
* Distributed components, both send messages to and link/supervise
remote components.
* Distributed STM on top of the message-passing model to do
compositional message-passing flows. Possible JTA integration.
* Generic Transactional Map, Vector and Ref. In-memory version and
persistent version backed up by Cassandra. Other backends will be
Terracotta, Tokyo Cabinet. Will provide persistente SPI.
* Java & Scala API. Components can plain Java or Scala objects, turned
into active objects using AspectWerkz bytecode weaving proxies. They
can also be Scala actors.
* All components or supervisor families are OSGi bundles. Possible to
run Akka as stand-alone Apache Karaf based server or deploy in other
OSGi kernel.
* JMX management and monitoring of components, queue depths, thread pools etc.
* Hooks transparently into Spring and Guice.
* Hooks into Apache Camel. E.g. allow components to function as Camel
endpoints and to wire up component interactions using Camel.
* REST layer. Expose the components as REST services.

/Jonas

2009/6/19 Ray Racine <ray.racine <at> gmail.com>:
> Great Manifesto.
>
> Skewing the trend towards the Enterprise Business needs perspective
> (slightly different than the social network application).
>
> A System Of Record is a system designed to maintain data.  Think RDB, form
> frameworks, tables, data integrity, ACID, O/R frameworks, etc.  J2EE, and
> similar frameworks are geared for System Of Record applications.  Setup a
> SKU, coupon, contract, price list, campaign.  Data maintenance.
>
> Its not too far of stretch to say commercial vendors, and most frameworks
> are very System Of Record oriented.  Need to build a new app to maintain X.
> Install RDB, app server, select O/R mapping and GUI form framework, place
> warm bodies in front of drag and drop IDEs and go for it.
>
> A System Of Service must service 1,000s of requests per second in millisecs,
> 24/7/365 with 99.99 % reliability e.g. a pricing service.  The business
> logic has to run in microseconds.  Your favorite O/R mapping framework
> hasn't even initiated a JDBC call, heck hasn't even allocated a connection
> from the pool and its already exhausted its 1 ms in allotted time.
>
> An item may undergo a few 10s of price changes a year on the System Of
> Record, yet that item's price may be served 100,000 times for each change on
> the System Of Service.
>
> Systems Of Record deal with lots of meta-data associated with maintaining
> the core data.  I might need only 30-50 data elements to determine a price,
> however, the System Of Maintenance has 100's of data elements in dozens of
> tables for data associated with SOX, security, versioning, authentication,
> approvals, etc...
>
> Data on a System Of Record should be in Boyce-Codd normal form.  Data on
> System Of Service should be structured in whatever way is necessary to
> achieve the workload, think denormalized data structured primarily for
> update workload and secondarily by read-only workload.
>
> There are lots of options for building a System Of Record.  Only the
> Amazons, Facebooks, LinkedIns, and Googles have solutions for building
> Systems Of Service.  Your average Joe-Sixpack enterprise has few options out
> there to build Systems Of Service.  Enterprises need to bring their mashable
> corporate API out onto the internet.  To offer that API they need a System
> Of Service to implement it.  But there are no off the shelf solutions.
>
> Systems are rarely (would be nice) both the System Of Record and the System
> Of Service.  Lets define what a System Of Service looks like.
>
> 1. A System Of Service shall run on a commodity box cluster.
> 2. A System Of Service shall support "hot" code changes (business logic).
> 3. A System Of Service shall be "consistent" in its answer.
> 4. A System Of Service shall be capable of incremental, near perfect
> horizontal scale out.
> 5. A System Of Service shall support failure.
> 6. A System Of Service shall support maximum performance via local resident
> data.
> 7. A System Of Service is session stateless.
> 8. A System Of Service is fed the data necessary to perform its function
> from a System Of Record.
> 9. Any server member of a System Of Service shall handle an update request
> from a System Of Record.
> 10. A Client of, or a System Of Record for, a System Of Service shall not
> observe a distinguished member of the service.  Any server shall be able to
> handle any request.
>
> Clusters
>
> Item #1 is just a given in today's world.  Big mid-range boxes just don't
> make sense.  The amount of pure horse power available on some Intel 64 bit
> commodity servers boggles the mind.
>
> No Down Time, Micro Deployment And Provisioning
>
> Current J2EE application servers are HUGE one size fits all monolithic
> entities.  What is needed is a small framework capable if incremental
> functionality for what is needed by the application.  The next generation
> application server will be a small, robust, OSGi framework server, which is
> configured to meet the needs of the application.  Need JPA, ESB, BPEL,
> Messaging, Batch processing, Transactions, Paxos, Key Storage, Servlet,
> COMET, HTTP, RestLet, SOAP, XMLRPC, EDI, etc, just select the needed
> services for installation in the OSGi framework and create a customized
> application server for the specific requirements of the application.
>
> If done correctly, one can micro hot deploy new versions or releases of the
> various modules, including your own OSGi modularized business logic.
>
> Consistent, Scalable, Robust
>
> Items #3,4,5,6,7 are really the key issues.
>
> Computation is relatively easy to scale out.  More boxes, more instances of
> executing code, even stateful applications aren't too bad with simple server
> affinity capabilities.  Data scale out is the problem, specifically data
> mutation.  By definition a System Of Service is primarily a service that
> operates upon mostly read-only data.  The service may serve 10,000 prices
> for every one price change, but price changes must be supported, and there
> has to be consensus within the cluster on state changes (data mutations).
>
> Item #5 means data must reside in multiple locations.  This is satisfied by
> a Dynamo/Cassandra/Voldemort KV storage system, but item #6 is stronger, it
> requires all data to be co-located on all servers.    Items #3 and #7 state
> a client may be serviced by any arbitrary member of the cluster and receives
> a consistent answer.  But item #7 says state (data) is being mutated by an
> external agent.
>
> One way to achieve the above set of constraints is to treat the entire
> cluster as a state machine.  The cluster is in some state S and transitions
> to a new state S' on updating of state.  If EACH member of the cluster
> applies the same globally ordered transformations then each server will
> provide the same consistent answer modulo latency.
>
> This is the consensus problem.  One solution to the consensus problem is the
> Paxos algorithm.  Zookeeper uses a version of Paxos to achieve consistent
> binding of hierarchical Key-Values across a cluster.   See "Paxos For System
> Builders", I am pretty darn sure it is the original paper used by the
> original Yahoo team that implemented Zookeeper.  Zookeeper is Paxos without
> the ability to define Listeners.
>
> If the cluster reaches consensus on which "command" to execute next and then
> each server in the cluster executes said command, the cluster acts as a
> single monolithic state machine.
>
> Its safe, in the sense that if consensus cannot be reached the system
> "fails" in its current state.  i.e., it will continue to serve prices, but
> will not process price changes.  In the face of failure, a cluster will make
> progress if a majority of nodes can reach consensus.  A failed node will
> reconcile and resynch its state machine with the cluster upon rejoining.
>
> 2PC, 3PC and e3PC transactional systems degenerate versions of Paxos (some
> simplification of).
>
> Dynamo like KV storage systems are substantial improvements over RDBs for
> Systems Of Service.  However, one still has to "fetch" the data for each
> request (it may have just changed).  Depending on the performance needs of a
> System Of Service _any_ cross network data fetch is too slow.  Therefore
> data must be cached, staleness must be dealt with and complexity explodes.
>
> At this point one just says lets just colocate (cache) all the data
> necessary to execute the service on each server and be done with it.  And
> why not?  A 16 even 32 gig server is nothing out of the ordinary these days
> and are quite capable of holding the equivalent of 100's of millions of rows
> of relational data in memory.  This raises the consistency question,
> answerable via distributed cluster node consensus.  Paxos.
>
> Under the System Of Service model Dynamo-like KV storage systems serve as a
> reliable drop off zone for data from Systems Of Record, and State
> Checkpoints. These data quanta can be as simple as JSON / REST oriented data
> updates.  (See
> http://project-voldemort.com/blog/2009/06/building-a-1-tb-data-cycle-at-linkedin-with-hadoop-and-project-voldemort/
> for a similar approach.)  A failed node or a joining node to a System Of
> Service must roll forward the last checkpoint executing each globally
> ordered command.
>
> Ah, yes, time to get to the point of all this...  Its the overlap to your
> manifesto.  Zookeeper <-> Paxos for transactions.  JOSH (Jason) Needs,
> Dynamo/Voldemort/Cassandra KV-Storage.   Lots of common overlap on some core
> technologies.
>
> I'll be creating a Git repo shortly with the start of a Scala based
> implementation of "Paxos for System Builders".
>
> Dave, I think you are on the right path, if for no other reason, I've
> observed similar trends and reached similar conclusions. :)
>
> A System Of Service app server is the next JBoss, the analogue of what J2EE
> is to Systems Of Record applications today.
>
> Ray
>
>
> On Thu, Jun 18, 2009 at 3:19 AM, David Pollak
> <feeder.of.the.bears <at> gmail.com> wrote:
>>
>> Folks,
>>
>> At the end of the Scala Lift Off, after I finished my third beer, Martin
>> Odersky came over to me and asked, "so, what's the future of Lift?"
>>
>> I gave a hand-waving answer about the features for 1.1.  But Martin is not
>> a hand-waving kind of guy and I think I owe him and the other folks in the
>> Scala and Lift communities more.
>>
>> There's a lot more that's necessary for web app development than Lift, an
>> abstraction to the HTTP request/response cycle, can provide.
>>
>> Over the last couple of years, I've been noticing trends in web
>> development, in the needs of my various consulting gigs, and in some other
>> projects.  It's clear to me that it's time for a unified data and data
>> management model that goes beyond OR mapping and that is scalably
>> transactional.  I've put together a model that looks to the developer like
>> STM but is backed with ZooKeeper and Cassandra.  I've blogged about it at
>> http://blog.lostlake.org/index.php?/archives/94-Lift,-Goat-Rodeo-and-Such.html
>>
>> Just as my web framework manifesto was the genesis of what has become
>> Lift, I hope that my notions and ramblings in this blog post will become
>> concrete, usable code over the next few months and a solid platform for
>> building the next generation of web systems over the next few years... all
>> built with Scala at their core.
>>
>> Thanks,
>>
>> David
>>
>> --
>> Lift, the simply functional web framework http://liftweb.net
>> Beginning Scala http://www.apress.com/book/view/1430219890
>> Follow me: http://twitter.com/dpp
>> Git some: http://github.com/dpp
>
>

--

-- 
Jonas Bonér

twitter: @jboner
blog:    http://jonasboner.com
work:   http://crisp.se
work:   http://scalablesolutions.se
code:   http://github.com/jboner


Gmane