- Coursier is the Scala application and artifact manager. It can install Scala applications and setup your Scala development environment. It can also download and cache artifacts from the web.
- Scala CLI from Virtuslab, is a command-line tool to interact with the Scala language. It lets you compile, run, test, and package your Scala code.
- ammonite
Archive
9,565 entries: 46 from X, 8,923 from Pinboard, saved 1998 to 2026.
Browse by tag, site, author, folder or language
Tags
- #python 393
- #programming 343
- #tutorial 187
- #books 186
- #javascript 150
- #webdesign 146
- #mathematics 130
- #blog 128
- #css 123
- #linux 112
- #reference 107
- #lisp 101
- #business 95
- #free 95
- #history 95
- #productivity 95
- #llm 93
- #design 91
- #statistics 90
- #gtd 83
- #opensource 81
- #r 80
- #lifehacks 78
- #ajax 77
- #graphics 77
- #datamining 75
- #typography 75
- #funny 74
- #photography 73
- #visualization 73
- #ai 67
- #machine-learning 67
- #plone 64
- #algorithms 63
- #kannada 61
- #database 59
- #india 59
- #education 58
- #learning 56
- #science 55
Sites
- youtube.com 251
- news.ycombinator.com 222
- github.com 190
- en.wikipedia.org 161
- reddit.com 96
- amazon.com 71
- nytimes.com 70
- medium.com 69
- code.google.com 34
- x.com 34
- arxiv.org 33
- archive.org 28
- groups.google.com 28
- wired.com 27
- theatlantic.com 24
- theguardian.com 24
- bloomberg.com 21
- newyorker.com 21
- stackoverflow.com 21
- wsj.com 21
- en.m.wikipedia.org 19
- bbc.com 18
- plone.org 18
- goodreads.com 17
- btbytes.com 16
- btbytes.github.io 16
- old.reddit.com 16
- washingtonpost.com 16
- artima.com 15
- google.com 15
- thehindu.com 15
- onlamp.com 14
- www-128.ibm.com 14
- aws.amazon.com 13
- cs.cmu.edu 13
- economist.com 13
- thriftbooks.com 13
- atlasobscura.com 12
- informit.com 12
- smashingmagazine.com 12
Authors
- @achumukundan00 1
- @antoniogm 1
- @BrankoMilan 1
- @Chris_arnade 1
- @code_star 1
- @DeepknowledgeU 1
- @dhh 1
- @dillon_mulroy 1
- @ElamBend 1
- @elisa_freschi 1
- @emollick 1
- @EmreSevinc 1
- @foxyjackfox 1
- @francoisfleuret 1
- @gabrielpeyre 1
- @GunduHuDuGa 1
- @hamsanandi 1
- @HistoryinStory 1
- @itometeam 1
- @kmadathil 1
- @MistralAI 1
- @mprestonmeyer 1
- @NousResearch 1
- @npparikh 1
- @paulabartabajo_ 1
- @paulg 1
- @PEoperator 1
- @pmddomingos 1
- @ringer 1
- @RMantri 1
- @rockatanescu 1
- @sebasbensu 1
- @seriesgraph 1
- @shanselman 1
- @ShriramKMurthi 1
- @stellensatz 1
- @Stunt_ManMik3 1
- @TheIcahnist 1
- @tonywu_71 1
- @twofifteenam 1
Folders
Languages
Tags and folders
20 entries#scala ×
2024
2022
Scala is a Maintenance Nightmare - MungingData
mungingdata.com
2019
Scala programming language
See Also: Scala for Datascience, ScalaJS, coursier, select-scala
July, 2015 -- Scala book reviews Feb, 2018 -- Recursion and Trampolines in Scala
Random Notes
scala-cli—power repl -S 2.13 -A —ammonite-ver 2.5.11
Notes from Programming in Scala
Chapter 7 - built-in control structures.
- has very few control structures
if while for try matchand function calls.- scala accumulates control structs in libraries.
- use
valinstead ofvarwherever possible. makes it easy to refactor. "equational reasoning". - no
=sign while defining a function => returns aUnitvalue() whileanddo-whileare NOT expressions. they returnUnit.- prefer NOT to use while.
- for
- "generator" syntax --
file <- files. works on all collections. fileis aval.Ranges--1 to 4(yields 1,2,3,4)1 until 4-- exlcude the upper bound (yields 1,2,3)- generators can also include filters --
for (f <- files if f.getName.endsWith('.py')) - nested iteration.
- mid-stream variable bindings
- new collection:
def pyFiles =
for {
file <- files
if file.getName.endsWith('.py')
} yield file
- IMP: don't put
yieldinside the curlies.
Exceptions:
try {
} catch {
case ex: FileNotFoundException => //handle
case ex: IOException => //handle
}
- like other control structures,
try-catch-finallyalso results in a value. (this is unlike Java) //imp
Match:
val fruit =
someArg match {
case "foo" => "bar"
case "banana" => "pepper"
case _ => "what?"
}
Chapter 8- Functions and Closures
First class functions
(x: Int) => x+1
named function:
var increase = (x: Int) => x + 1
- target typing:
someNumbersList.filter((x) => x > 0). the type is inferred from the the list of integers. - alternatively:
someNumbersList.filter(x => x > 0)
Placeholder syntax:
someNumbersList.filter( _ > 0)
val f = (_: Int) + (_: Int)
Chapter 12 -- Traits
Traits are like java interfaces with concrete methods + declare fields and maintain state.
Traits can do everything classes can do, except --
- trait cannot have any clas parameters (ie., those passed to primary constructors).
supercalls are not statically bound.
Unlike Java, adding a concrete method to scala trait is an one-time effort.
Chapter 15 -- Case classes and pattern matching
Notes from "Scala in Action"
Chapter 2 -- Getting started
// working with arrays and Lists
@ val nList = 1 :: 2 :: 3 :: 4 :: Nil
nList: List[Int] = List(1, 2, 3, 4)
@ nList.fil
filter filterNot
@ nList.filter( _ > 2)
res17: List[Int] = List(3, 4)
@ // for comprehensions
@ oldList
res19: List[Int] = List(1, 2)
@ newList
res20: List[Int] = List(1, 2, 3)
@ for { a <- oldList; b <- newList } println (a+b)
2
3
4
3
4
5
@ // above is imperative form
@ // The functional form for comprehension is:
@ // also called the sequence composition
@ for { a <- oldList; b <- newList } yield a+b
res22: List[Int] = List(2, 3, 4, 3, 4, 5)
@ // Pattern Matching
@ val x = 3
x: Int = 3
@ def ordinal(number: Int): Unit = number match {
case 0 => println("One")
case 1 => println("Two")
case 2 => println("Three")
case 3 => println("Four")
case _ => println("what is this?")
}
defined function ordinal
@ ordinal(x)
Four
@ // Pattern Matching Types
@ dBef printType(obj: AnyRef) = obj match {
case s: String => println("This is a string")
case i: java.util.Date => println("This is a Date")
case l: List[_] => println("An array eh?")
case _ => println("dunno who ye are")
}
defined function printType
@ printType(List(1,1,2))
An array eh?
// Guards
@ def numCatcher(num: Int): Unit = num match {
case x if x < 10 => println("Number less than 10")
case y if (y%2 == 0) => println("Is an even number")
}
defined function numCatcher
@ numCatcher(5)
Number less than 10
@ numCatcher(12)
Is an even number
Miscellaneous notes
sbt plays an important role in the day to day programming of scala. I believe 'sbt' stood for "scala build tool" at one time, but is no longer.
To start working on a scala program, you can start with a simple text editor, however using something like IntelliJ IDEA is probably far more productive.
Creating a "project structure" can be automated. Essentially this
boilBs down to creating the build.sbt file, project directory and
optional plugins.sbt file inside it, a scala file inside the proper
src/main/scala/com/example/projectname/ directory etc., There is
little reason to do all this manually, except when you are trying to
understand the reason behind such a recommended directory layout.
giter8 ie., the g8 is a tool that
can create a project structure based on pre-defined
templates. Think
of this as paster tool for Python.
When you have g8 installed, creating a new project (say, a basic
scala project using
this template ),
all you have to do is:
$ g8 fayimora/basic-scala-project.g8
A basic scala project
name [Basic Project]: basic-scala
organization [com.example]: com.btbytes
version [0.0.1]:
Template applied in ./basic-scala
$ cd basic-scala
$ ls
build-sbt src
$ sbt run will download the dependencies defined in the build.sbt
file,B compile source and run the program.
sbt can also create the files necessary to make this an "IntelliJ IDEA
project". For this, we add a dependency to the plugins.sbt file:
#project/plugins.sbt -- add this line
addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.6.0")
Running sbt gen-idea will generate the IDEA project files (.idea,
some .iml).
Launch up IDEA and "open project" and open the root directory of the project. You are now set to work on the code.
Packaging the binary to a .jar:
$ sbt packageBin
Will produce target/scala-2.10/basic-scala_2.10-0.0.1.jar (where
basic-scala is the name of the project).
Why not Scala
Concepts
Covariance, Contravariance and Invariance
Reading:
In general, covariant type parameter can be used as immutable field type, method return type and also as method argument type if the method argument type has a lower bound. Because of those restrictions, covariance is most commonly used in producers (types that return something) and immutable types.
Adhoc polymorphism
In this article we discussed the motivation for introducing ad hoc polymorphism and implementing it using the Type Class Pattern in Scala. It allows us to build abstractions which are completely decoupled from the underlying data types on which they operate. Hence we can implement polymorphic functions which operate on types we have no control over, such as types defined in the standard library or some other third party library, without sacrificing the static type safety.
Concurrency (Akka etc.,)
StBreams
- Folding Stream with Scala(2011).
Libraries
- scalaz-stream and related ..
Process[Task, A] - Doobie -- principled database access for scala
- Monix via Travis Brown on twitter for "exceptionally good documentation"
- Easy Parsing with Parser Combinators HN
- ConsBcript is a distribution mechanism for Scala apps using Github and Maven repositories as the infrastructure. You can use it to install and update apps similar to APT or Home Brew.
- Knobs Documentation - Home
Tools
- lihaoyi/Ammonite: Scala Scripting. Ammonite enables shell-like scripting in the Scala programming language.
- Conscript -- is a tool for installing and updating Scala software programs.
- giter8 -- is a command line tool to generate files and directories from templates published on github or any other git repository.
SBT
sbt the easy way -- with example configurations.
sbt baby steps [Feb 2018]. SBT, scopes, proxy and so on
Ensime -- Enhanced Scala
Interaction Mode for Emacs.
Talks
- Compositionality talk by Runorama.
Articles
- 16 months of FP (with scala examples).
- Scala’s Types of Types
- Generalized type constraints in Scala
- Scala Saturday: Functions for the Object-Oriented – Medium -- a beginner overview of some scala features (eg: how apply works).
- Why? by Paul Snively.
- Transitioning to Scala – RedElastic (notes on "Scala levels" as espoused by Odersky.)
- Warts of the Scala Programming Language
- When the Scala compiler doesn't help
Blogs
- Bcomposes | (Scala, Java, Python, R)
- Just another scala quant
- Vladimir Pavkin – Scala developer at Evolution Gaming
- alexn.org creator of Monix. see Asynchronous Programming and Scala
- Julien Richard-Foy -- play, category-theory examples, dependency injection etc.,
- Timothy Perrett
- Blog Archive | Madusudanan -- scala posts.
Libraries
- kantan.csv has good documentation/tutorials.
- Quill Quoted Domain Specific Language (QDSL) to express queries in Scala and execute them in a target language. The library’s core is designed to support multiple target languages, currently featuring specializations for Structured Query Language (SQL) and Cassandra Query Language (CQL).
REPL
Ammonite REPL is much more featureful than the default REPL and comes with a lot of ergonomic improvements and configurability that may be familiar to people coming from IDEs or other REPLs such as IPython or Zsh.
Links
- Cheatsheet - Idiomatic Scala: Your Options Do Not Match - Originate Developer Blog
- Scala Starter Kit
- Essential Scala
- Code examples for "Programming in Scala" book by Odersky
- Scala Exercises | The easy way to learn Scala
- λ Tony's blog λ - scala.Option Cheat Sheet
- Scala jargon – Bonnie Eisenman
Scalajs
- From first principles: Why I bet on Scala.js
- vmunier/play-with-scalajs-example: Example application showing how you can integrate Play with Scala.js.
Scala Native
- Hands On Scala Native
- Stephen M. Blackburn and Kathryn S. McKinley. 2008. Immix: a mark-region garbage collector with space efficiency, fast collection, and mutator performance. In Proceedings of the 29th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI '08). ACM, New York, NY, USA, 22-32. [PDF].
- Fast startup and low latency - pick two [PDF] by Denys Shabalin and Lukas Kellenberger.
- Scala 0.3.0 announcement
Scala CLI
With scala-cli, it is quite easy to package a scala program into a standalone program:
scala-cli --power package --native-image Echo.scala -o echo -- --no-fallback
where Echo.scala is:
object Echo {
def main(args: Array[String]): Unit =
println(args.mkString(" "))
}
$ ls -alrt echo
-rwxr-xr-x@ 1 pradeep staff 14120984 Aug 23 17:15 echo
$ du -sh echo
13M echo
Books
- Overview of Apache Spark · Mastering Apache Spark 2 (Spark 2.2+) by jace klaskowski
- Introduction · Mastering Apache Kafka (0.11.0.1+) by jace klaskowski
- Introduction · Spark Structured Streaming (Apache Spark 2.2+) by jace klaskowski
Tutorials
- Learn Scala in Y Minutes
- The Neophyte's Guide to Scala - Daniel Westheide
- bhoward/IndyScala Notebooks for the Scala Primer presentation to the Indy Scala meetup, September 2016.
- Mark Lewis - YouTube tutorials on Scala and programming. Dr. Lewis's Homepage
- From Python to Scala: A Tutorial - Cristian Cardellino
Indyscala notes
Feb 6, 2017 -- Resource management in Scala
Presenter -- Ross A. Baker
- tut - Underscore
- atomic boolean in
- codensity == FManaged
- presentation code
May 1, 2017
- Brad Fritz -- Introduction to Scala Type Classes
- Ross A. Baker -- []
2017
So, what's wrong with SBT?
lihaoyi.com
2015
Paco Nathan
liber118.com
Author, trainer, expert.
Author, trainer, expert.
Spark Summit 2014 Training Archive | Spark Summit
spark-summit.org
2014
Hands-on Scala.js
lihaoyi.github.io
If you know web development and wonder whether there's a better way you should read this:
If you know web development and wonder whether there's a better way you should read this:
Toward a Safer Scala @ PNWScala 2014 - Google Slides
docs.google.com
ScalikeJDBC
scalikejdbc.org
Effective Scala
twitter.github.io
2013
Scala School
twitter.github.io
Learning Scala in small bites
matt.might.net
2011
2010
Recordings for the Programming Languages Course
www2.cs.uh.edu
by Dr Venkar Subramaniam, author of scala and groovy books
by Dr Venkar Subramaniam, author of scala and groovy books
Hacker News | Scala 2.8.0 final
news.ycombinator.com
All Things Runnable - Lalit Pant's blog
lalitpant.blogspot.com
creator of Kojo, Scala learning environment
creator of Kojo, Scala learning environment