Canonical pattern reference in Actors programming model - scala

Is there a source, which I could use to learn some of the most used and popular practices regarding Actor-/Agent-oriented programming? My primary concern is about parallelism and distribution limited to the mentioned scheme - Actors, message passing.
Should I begin with Erlang documentation or maybe there is any kind of book that describes the most important building blocks when programming Actor-oriented?
(Most useful examples would be in Scala or F#)

The Erlang and Scala's Akka are most popular and have large community. In case you want to know ML-based style there is JoCaml. They have simple intro text and collection of more formal papers. I'm using JoCaml about two years in my research work and very happy with it. Also, you can find many examples of the F# mailboxes usage to implement actor-style message passing.

For a colorful and interesting explanation I'd recommend to read some entries on this blog
Other than that, we welcome you to the Akka mailinglist!

With regards to the usage of Actors in Scala, you might want to look into the Akka framework. It has good documentation, and here they have a list of articles and presentations with many examples.

You won't find much in the Erlang documentation that explicitly talks about Actors. The documentation and recent Erlang books explain how to use concurrency/distribution/message passing in the Erlang context. As an aside we hadn't actually heard of Actors when we developed Erlang.

Related

What is simplest reactive programming language?

I teach a course in Programming Paradigms. Last year I used Elm as an example of (Functional) Reactive Programming. This summer I noticed that Elm is no longer FRP (according to http://elm-lang.org/blog/farewell-to-frp). I'm looking for another vehicle, one for which I don't have to first teach a lot of syntax.
Reactive Programming in JavaScript seems way too complex. My students will have learned some Scala, but I haven't found a good tutorial on RP in Scala.
Suggestions, anyone? Requirements: reactive, simple syntax.
You can also check Reactor for Spring ecosystem https://github.com/reactor/reactor-core/blob/master/README.md
I suggest RxJava with Java8. It is well documented and maintained. There is a lot of materials- books, articles, tutorials, conference talks, etc.
'reactive, simple syntax'..
I do not see much in common between syntax and being reactive. Java8 has excellent free IDE support (Intellij or Eclipse). For me, it is important in learning new language than paradigim- more important than language itself.

Scala distributed middleware

Is there any distributed middleware, like JXTA or JMS, for Scala?
I'm looking for a middleware that provides discovery, name service, service publications, availability verification, groups and so on, for Scala language.
Akka stack has many features , if you want AMQP reference then http://doc.akka.io/docs/akka-modules/1.3.1/modules/amqp.html
I just wrote this to help you use JMS in Scala, should you so wish
https://github.com/fancellu/jmsScala
I'm not sure what you mean by "for Scala". Since it runs within the JVM, with very good interoperability with Java, you can just use whatever Java-based facilities float your boat. In some cases there may be Scala "skins" available, but it doesn't matter a lot. For instance, here's an article on using ActiveMQ from Scala, with no Scala skin.
I think I would go further than Viral and say that Akka is the answer you're looking for. It doesn't provide all the features you mention (or at least takes a different approach to some of them) but it's a very powerful middleware suite that distributes well and is getting a lot of use and attention.

Important Scala concepts to "be thorough in" when learning Lift

I am learning Scala with the intention that I be able to develop in Lift. What are the Scala concepts that are highly ingrained to Lift, that I must be thorough in?
What are the concepts/design styles that I must start early to lead to maintainable Lift projects?
Particularly, I am interested in lazy vars, actors and pattern matching
To me, there are no scala fields that you won't use in Lift. Of course it can depend a lot on what you are working on. For exemple I did't have to use actors but some people chose Scala for their webapp because of them.
However here is what I personally recommend as a first aid kit:
The List API
I use a lot the List API. Mastering it is useful for all data anylisis and filtering cases. If you use Mapper[T] in Lift, it will return some List[T] as a result.
As you are interested in pattern matching I am sorry to tell you that with List you won't have to use match a lot.
Object oriented programming
It sounds silly but another interesting fields to master is the difference between Class and Object including of course inner classes and inner objects as, later on in Lift they will have different meanings in snippets to know if the snippet is a singleton, if the val is static of not...
Scala traits can also be powerful in Lift context, but in fact they are useful everywhere
Scala XML support
Mastering Scala XML will be very useful as you will certainly have to set some xml by hand, so if you don't have problems with this it will be really helpful.
To the list Chris wrote I would add:
Actors
While Lift has it own LiftActor and CometActors implementation, it is helpful to understand how to interact and use the actor paradigm. Comet, which is one of the best features in Lift is written using Actors.
Box
Lift has something similar to Scala's Option, called Box. A box can have any of these three statues, Full, Empty or Failure. You can read more about it on David's blog
Where to find help
While you will find useful answers here on SO (Like Chris's answer), most of the Lift community hangs out at the mailing list. There are thousands of questions and answers there.
We are currently working on a cookbook, there is the
wiki, there are three books about Lift, Lift in Action, SImply Lift and Exploring Lift

Is there a central site/page for "advanced Scala" topics?

Despite having read "Programming in Scala" several times, I still often finds important Scala constructs that were not explained in the book, like
#uncheckedVariance
#specialized
and other strange constructs like
new { ... } // No class name!
and so on.
I find this rather frustrating, considering that the book was written by the Scala "inventor" himself, and others.
I tried to read the language specification, but it's made for academics, rather than practicing programmers. It made my head spin.
Is there a website for "Everything "Programming in Scala" Didn't Tell You" ?
There was the daily-scala Blog, but it died over a year ago.
Currently, we're working on a central documentation site for scala-lang.org. We're hoping that this solves a lot of the documentation issues that new users face. More details on this effort can be found at http://heather.miller.am/blog/2011/07/improving-scala-documentation/, but in summary...
Believe it or not, there are a lot of documents that the Scala team has produced but which simply aren't in HTML or are otherwise difficult to find. Such as Martin's new Collections API, his document on Arrays, or Adriaan's on Type Constructor Inference.
One goal of such a site is to collect all of this documentation in one place, in a searchable, organized, and easy-to-navigate format.
Another goal is to collect excellent community documentation out there, and to put it in the same place as well. For that, we are actively looking for quality (article/overview-like) material with maintainers. Examples include the Scala Style Guide, and Daniel Spiewak's Scala for Java Refugees.
Yet another goal is to make it easy for contributors to participate- so the site is built from RST source, which will live in a documentation-only github repo at https://github.com/scala/scala-docs.
So, in short, something better is on it's way, and contributors are very welcome to participate.
EDIT: http://docs.scala-lang.org is now live.
Several documents considered to be rather detailed or even obscure are already available. This includes all "Scala Improvement Proposals" (the proposals produced when new language features are suggested, and which are usually very detailed, and written by the implementers themselves). Also available is the entire glossary from Programming in Scala, Scala cheatsheets, amongst many other documents. The bottom-line of the site is to be community-focused and contribution-friendly-- so, free, and totally open. Suggested topics to cover are also welcome.
Take a look at scalaz and typelevel librairies (shapeless, spire, etc.), they rely on many advanced features of Scala.
*scalaz was for a time part of typelevel, but it is no more the case.
Josh Sureth's book goes a little beyond the usual. It's not as far as I'd like but I'm not his core audience - still, there's a lot of good stuff in there.
http://www.manning.com/suereth
Scala IRC: irc://irc.freenode.net/scala
Scala forum: http://scala-forum.org/
Blogs: Just look at http://planetscala.com/
Programming Scala (Wampler, Payne): http://ofps.oreilly.com/titles/9780596155957/
Programming in Scala (Odersky, Venners, Spoon) - good but Scala 2.8: http://www.artima.com/pins1ed/
The new documentation page is online:
http://docs.scala-lang.org/
I've kept a library of advanced Scala resources, primarily talks and blog posts. It's updated pretty regularly as I find new, interesting content.
Happy to add new links to it if anyone has recommendations.
Try to read SBT Source: https://github.com/harrah/xsbt/wiki
Its a good exercise. Also check out the book 'scala in depth' : http://www.manning.com/suereth/ by
Joshua D. Suereth
I believe there are a lot of good answer here. But as a sharing of experience. I have been coding Scala for 2 year (not my full time job), and been progressively better at it. My project is 97% Scala, and I have been able to do most of it with:
Programming Scala
The scala-user list
Stackoverflow
This cover most of the need for the "user" side of Scala, meaning all you need to create working application. However if you want to write some more complex code, or create powerful typed libraries you definitely need more.
If you want to go beyond the basics and are prepared to delve deeply into type system, and libraries, then the alternatives I use:
Use the community, scala enthusiast are really nice. I have worked with folks form Specs, Scalaz and Lift.
IRC is really good and some of the core contributors to some of the big library frequently show up.
Jump to source code, but don't try to understand everything. Scala type system can be daunting, however you normally don't need to understand 100% of it to use it.
If you really need to get into the nitty gritty details, hit the language specs, development list, and get to know the key people.
However you can really be very effective in Scala without needing to understand every single bit of the language.

Good Scala introductory article/video to whet the appetite

What are some good online articles or videos you've seen that would be most likely to get a developer interested in Scala? I'm looking for an introduction that is brief & to the point that dives right into example code, and would leave a developer who does not know Scala wanting to learn more about it.
Try in this order:
Pragmatic Real-World Scala - This video shows off all kinds of things that would make a Java developer drool.
Programming In Scala - This is simply a great general-purpose programming book. In addition to being a gentle, clear introduction to the language, it's also a fantastic introduction to functional programming concepts and language design. Even if you hate Scala,
this book will make you a better programmer.
Scala For Java Refugees - Very well-written mostly gentle introduction to major Scala concepts.
Another tour of Scala - A Java-centric breakdown of fundamental Scala features.
i went to this talk, it was excellent. can't tell if it is still there due to our internet restrictions, if it's not i'll delete this post.
http://powerhost.powerstream.net/008/00102/100203Scala.wmv
I'd go straight to the horse's mouth, the Scala website itself: Code Examples.
http://www.escalatesoft.com/screencasts
Escalate software is in the process of creating a series of screencasts for Scala information sharing and training purposes. The first available screencasts are provided here for free and cover the new features of Scala 2.8. In the longer term we will create training materials in the form of these videos along with supporting material that will be for sale from this and other sources as well.
http://blog.jaoo.dk/2009/03/09/an-introduction-to-the-scala-programming-language-by-bill-venners/
Take a look at the following presentation by Jonas Bonér (a well known figure in the Scala community, responsible for the AKKA actors concurrency framework). I'm sure this will whet the appetite for Scala.
http://www.infoq.com/presentations/Scala-Jonas-Boner
german introduction, maybe useful for you: http://www.rheinjug.de/videos/gse.lectures.app/Player.html#Scala
I would recommend Chapter 1. Zero to Sixty: Introducing Scala of the Programming Scala book by Dean Wampler and Alex Payne. The rest of the book is also great. The book is freely available online.
EDIT
I recently bought and read the Atomic Scala book by Bruce Eckel and Dianne Marsh. This is the best book I have read so far for anyone wanting to learn Scala.