# Scala Learning Resources

## FP Extention

- scalaz An extension to the core Scala library for functional programming.
- shapeless is a type class and dependent type based generic programming library for Scala.

## Learning Resources

- Twitter Scala School
- Hongjiang Scala
- otfried Scala GUI Programming
- Official Tutorials
- Call C Library in Scala

## Scala based Projects

- Spark a fast and general engine for big data processing, with built-in modules for streaming, SQL, machine learning and graph processing.
- Kafka A high-throughput, distributed, publish-subscribe messaging system.
- Akka a toolkit and runtime for building highly concurrent, distributed, and resilient message-driven applications on the JVM.
- Spray An open-source toolkit for REST/HTTP and low-level network IO on top of Scala and Akka.
- Play Framework High Velocity Web Framework
- Lift the most powerful, most secure web framework available today.
- Finagle is an extensible RPC system for the JVM, used to construct high-concurrency servers.
- Zipkin is a distributed tracing system that helps us gather timing data for all the disparate services at Twitter.
- Samza is a distributed stream processing framework.
- Scalaz An extension to the core Scala library for functional programming.
- shapeless: generic programming for Scala.

## View Bound

```
trait Narrowable[A] extends Iterable[A] {
def narrow[B <: A with AnyRef] : Iterable[B]
}
```

## JVM

有没有什么基于C++或者scala的比较轻量级的JVM实现？

## Linear Algebra Library

- JAMA : A Java Matrix Package JAMA is a basic linear algebra package for Java which provides a matrix class and a number of matrix decomposition classes. The matrix class supports basic operations such as matrix addition, multiplication, transpose, norm calculation etc.
- Apache Commons Math Apache Commons Math is an Apache project aiming to address the most common mathematical and statistical problems that are not available in the standard Java language. It supports both dense and sparse matrix classes, equipped with basic operations as well as matrix decomposition algorithms.
- la4j la4j is a light weight linear algebra library for Java, supporting both dense and sparse matrices, as well as matrix decomposition algorithms.
- EJML Efficient Java Matrix Library (EJML) is a linear algebra library for manipulating dense matrices. It is designed to be computationally efficient.
- Breeze Breeze is a Scala libary for machine learning and numerical computing. It contains matrix and vector classes and many other components such as statistical distributions, optimization, integration, etc. Since this library is written in Scala, the syntax is generally more elegant and convenient than those implemented in pure Java.