Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jacoby6000/clone-hero-chart-db
System for indexing clone hero charts
https://github.com/jacoby6000/clone-hero-chart-db
Last synced: 15 days ago
JSON representation
System for indexing clone hero charts
- Host: GitHub
- URL: https://github.com/jacoby6000/clone-hero-chart-db
- Owner: Jacoby6000
- License: gpl-3.0
- Created: 2017-11-29T00:16:06.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2017-12-28T23:30:59.000Z (about 7 years ago)
- Last Synced: 2024-11-02T00:51:40.243Z (2 months ago)
- Language: Scala
- Size: 178 KB
- Stars: 1
- Watchers: 2
- Forks: 2
- Open Issues: 17
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![build-status](https://travis-ci.org/Jacoby6000/clone-hero-chart-db.svg?branch=master)](https://travis-ci.org/Jacoby6000/clone-hero-chart-db)
[![Join the chat at https://gitter.im/Jacoby6000/clone-hero-chart-db](https://badges.gitter.im/Jacoby6000/clone-hero-chart-db.svg)](https://gitter.im/Jacoby6000/clone-hero-chart-db?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![codecov](https://codecov.io/gh/Jacoby6000/clone-hero-chart-db/branch/master/graph/badge.svg)](https://codecov.io/gh/Jacoby6000/clone-hero-chart-db)# clone-hero-chart-db
System for indexing [clone hero](https://docs.google.com/document/d/14gJj66WpGKFPJOBCQ1HTOCrXuidWmGMVI2CIXA1-Qws/edit) charts
## Contributing
Currently, the system uses symlinks to make sharing code between the build and the project a bit
simpler. This may change in the future. However, if you are on a filesystem that does not support
symlinks, you're going to have a bad time trying to help.The project is built via `sbt`. You can get `sbt` from Lightbend, or you can use an alternate
launcher (which i recommend): [paulp/sbt-extras](https://github.com/paulp/sbt-extras).Once you have `sbt`, you'll need the jdk. For now, the project is built using `openjdk-8`. Oracle's
jdk works fine, too as long as you have version 8.Todo: database setup instructions
## Technology stack
* [PostgreSQL](https://www.postgresql.org/): Because it's the best relational database out there.
* [Scala](https://www.scala-lang.org/): Because I don't know haskell very well yet.
* [http4s](http://http4s.org): To serve http requests and provide an http client.
* [scalaz](https://github.com/scalaz/scalaz): To provide robust functional programming abstractions.
* [doobie](http://tpolecat.github.io/doobie/): To provide database access in a sane manner.
* [argonaut](http://argonaut.io): For functional json (de)serialization.
* [tsec](https://github.com/jmcardon/tsec): For cryptography.
* [pureconfig](https://pureconfig.github.io/docs/): To provide semi-functional config file parsing.
* [scalacheck](http://www.scalacheck.org/): For property based testing.
* [flywaydb](https://flywaydb.org/): For convenient database migrations.
* [enumeratum](https://github.com/lloydmeta/enumeratum): For sane scala enums.
* [shims](https://github.com/djspiewak/shims): For compatibility between the fp libs.If the above ever seems incorrect or out of date, check
[BuildSettings.scala](./project/BuildSettings.scala). If the technology stack is out of date, please
create a pull request to fix it.## Design Philosophy
* No null values.
* No exceptions.
* No type casing (`isInstanceOf`). The one exception is pattern matching on ADTs. Even this is a smell.
* No type casting. (`asInstanceOf`)
* **No side-effects.** _"but..."_ No. Not even then.
* No using methods defined on `Any`. (`equals`, `toString`, `hashCode`)
* No calls to `notify` or `wait`. In fact, avoid most of `Predef`.
* No calls to `classOf` or `getClass`.This leads to the use of a subset of the scala language, which some call `scalazzi`.
Doing this, we will create an application made up of more composable components which are easier to
test, easier to debug, and easier to expand upon. This means more features faster in the long run,
with fewer bugs.This design philosophy is expanded upon in Tony Morris' (dibblego) talk about parametricity at YOW West
2014 ([video](https://www.youtube.com/watch?v=pVCkDZFSmVU&index=5&list=PLIpl4GKFQR6eXub6zaSren896Dfq4lUhs)/[slides](http://yowconference.com.au/slides/yowwest2014/Morris-ParametricityTypesDocumentationCodeReadability.pdf)),
and is talked about in [lihaoyi's blog](http://www.lihaoyi.com/post/StrategicScalaStylePracticalTypeSafety.html)Failing to abide by any of the above guidelines is a direct violation of the official
[Code of Conduct](./Code%20Of%20Conduct.md)Having some knowledge of type classes and functional programming concepts will go a long way to make
working with this code easier. I highly recommend the
[data61 fp course](https://github.com/data61/fp-course) if you are new to fp.