Scala: Difference between revisions
No edit summary |
No edit summary |
||
Line 9: | Line 9: | ||
Next, set up ~/.sbt/repositories with repos used by your team. | Next, set up ~/.sbt/repositories with repos used by your team. | ||
=== PROJECT CREATION === | === SBT PROJECT CREATION === | ||
# Make a folder for your project, eg MyProject | # Make a folder for your project, eg MyProject | ||
# Create this path, it is HARDCODED INTO SBT and expected, fuck off | # Create this path, it is HARDCODED INTO SBT and expected, fuck off | ||
#:<pre> | |||
#::src/main/scala | |||
#::--- | |||
#::Hardcoded layout | |||
#::├── project | |||
#::│ └── target | |||
#::│ └── config-classes | |||
#::├── src | |||
#::│ ├── main | |||
#::│ │ ├── resources | |||
#::│ │ └── scala | |||
#::│ └── test | |||
#::│ ├── resources | |||
#::│ └── scala | |||
#::└── target | |||
</pre> | |||
# Create a first module, eg: | # Create a first module, eg: | ||
#::MyProject/src/main/scala/Scrap.scala | |||
#::--- | |||
#::object Scrap extends App { | |||
#:: println("Hello Scrap. And away we go!") | |||
#::} | |||
# From a command line, run sbt, should compile and run: | # From a command line, run sbt, should compile and run: | ||
#::MyProject$ sbt run | |||
=== INTELLIJ PROJECT CREATION === | |||
# From IntelliJ, File->New->Project... (NOT FROM EXISTING because INTELLIJ SUCKS MY DICK)... ->Scala->SBT | # From IntelliJ, File->New->Project... (NOT FROM EXISTING because INTELLIJ SUCKS MY DICK)... ->Scala->SBT | ||
# Use your folder for location and the name; eg MyProject | # Use your folder for location and the name; eg MyProject |
Revision as of 18:12, 25 October 2016
Installation
echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823 sudo apt-get update sudo apt-get install sbt
Next, set up ~/.sbt/repositories with repos used by your team.
SBT PROJECT CREATION
- Make a folder for your project, eg MyProject
- Create this path, it is HARDCODED INTO SBT and expected, fuck off
- src/main/scala
- ---
- Hardcoded layout
- ├── project
- │ └── target
- │ └── config-classes
- ├── src
- │ ├── main
- │ │ ├── resources
- │ │ └── scala
- │ └── test
- │ ├── resources
- │ └── scala
- └── target
- Create a first module, eg:
- MyProject/src/main/scala/Scrap.scala
- ---
- object Scrap extends App {
- println("Hello Scrap. And away we go!")
- }
- From a command line, run sbt, should compile and run:
- MyProject$ sbt run
INTELLIJ PROJECT CREATION
- From IntelliJ, File->New->Project... (NOT FROM EXISTING because INTELLIJ SUCKS MY DICK)... ->Scala->SBT
- Use your folder for location and the name; eg MyProject
- NNOPE FUCK OFF
Trying again, starting with IntelliJ...
- File - New - Project... - Scala->SBT
- Project Name: Scrap
- Project location: ~/development/Reusable/scala/scrap/IDEAScrapProject
- [X] use auto-import
CONTAINERS
Here are three ways to create a container from information in another.
Immutable map (best):
val andClause = unverifiedTileSet.map { un => and( Array( BSONDocument("x" -> BSONInteger(un.x)), BSONDocument("y" -> BSONInteger(un.y)) ) ) } val orClause = BSONDocument("$or" -> andClause) val pUp = Promise[Unit] val fUp = uDao.col.update(orClause, updateSet, upsert = true, multi = true) fUp.onComplete { case Success(res) => pUp.success() case Failure(t) => pUp.failure(t) } pUp.future
For with yeild, good for multiple steps:
/* // //2) way with for <- yield // val orClause = for( // un <- unverifiedTileSet; // andClause <- { // and( // Array( // BSONDocument("x" -> BSONInteger(un.x)), // BSONDocument("y" -> BSONInteger(un.y)) // ) // ) // } // )yield{ // BSONDocument("$or" -> andClause) // } //2) way with for <- yield val orClause2 = for( andClause <- { unverifiedTileSet.map{un => and( Array( BSONDocument("x" -> BSONInteger(un.x)), BSONDocument("y" -> BSONInteger(un.y)) ) ) } } )yield{ BSONDocument("$or" -> andClause) }
Third way, mutable oldskool:
// method 3, oldskool for with mutable, not recommended import scala.collection.mutable.ArrayBuffer var andClause = ArrayBuffer.empty[BSONDocument] for (un <- unverifiedTileSet) { andClause += and( Array( BSONDocument("x" -> BSONInteger(un.x)), BSONDocument("y" -> BSONInteger(un.y)) ) ) } val orClause = BSONDocument("$or" -> andClause) */
CAUSAM setup
For Causam, set up an AWS VPN to get on the stash network, then add these:
[repositories] local artifactory-releases: http://artifactory.energynet.link:8081/artifactory/libs-release/ artifactory-snapshots: http://artifactory.energynet.link:8081/artifactory/libs-snapshot/ ivy-releases: http://artifactory.energynet.link:8081/artifactory/ivy-releases, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext] anormcypher: http://artifactory.energynet.link:8081/artifactory/anormcypher
Then if you have a project already, use sbt and let that pull down all the dependencies:
cd ~/development/causam/git/causam-north-poller-scala sbt compile