Skip to content

Instantly share code, notes, and snippets.

@dorsev
dorsev / dynamicTemplateSchema.sh
Last active December 24, 2019 23:10
dynamic_template schema
curl -X PUT "localhost:9200/_template/my_template?pretty" -H 'Content-Type: application/json' -d '
{
"index_patterns": [
"your-index-names*"
],
"mappings": {
"_doc": {
"dynamic_templates": [
{
"tags": {
@dorsev
dorsev / JsonCompare.scala
Created September 12, 2019 21:14
DeepEqual in Jsons
import play.api.libs.json._
object Main extends App {
val input= Json.parse("""{"a":1}"""}
val expected= Json.parse("""{"a":1}"""}
def isEqual(a: JsValue, b: JsValue): Boolean = (a, b) match {
case (JsNull, JsNull) => true
case (JsString(str), JsString(str2)) => str == str2
package sandbox
import cats.free.Free
import cats.implicits._
object FreeMonadExample extends App {
sealed trait KvStoreA[A]
case class Put[A](key: String, value: A) extends KvStoreA[Unit]
case class Get[A](key: String) extends KvStoreA[Option[A]]
case class Delete[A](key: String) extends KvStoreA[Unit]
type KvStore[A] = Free[KvStoreA, A]
import $ivy.`org.reactivemongo::reactivemongo:0.16.0`
import $ivy.`com.typesafe.play::play-json:2.6.10`
import $ivy.`org.typelevel::cats:0.9.0`
import $ivy.`com.github.alexarchambault::scalacheck-shapeless_1.13:1.1.6`
import $ivy.`org.scalatest::scalatest:3.0.5`
import $ivy.`org.scalacheck::scalacheck:1.14.0`
import cats.{Applicative, Functor, Id}

Some code I recently ran into in our code-base.

  val minOffset: Long = if (items.isEmpty) 0 else items.map(_.offset).min

What is my problem ?

It is too verbose. Instead of the code telling you what is it's purpose, it is telling you what to do.

An ideal syntax for that would be for me :

@dorsev
dorsev / time.based.cache.js
Created February 27, 2019 20:41
node-caching in node
const NodeCache = require('node-cache');
module.exports = (refreshTime, loadByKey, logger, cacheName) => {
const myCache = new NodeCache({
stdTTL: refreshTime,
checkperiod: 120
});
return (key, params) => {
const value = myCache.get(key);
def min[B >: A](implicit cmp: Ordering[B]): A = {
if (isEmpty)
throw new UnsupportedOperationException("empty.min")
//.. does not really matter
}
def reduceLeft.... = //see TraversableOnce.scala code for mroe info
implicit class ListSyntax[T: Ordering](lst: Iterable[T]) {
def minOrElse(default: T): T = foldOrElse(lst)(_.min, default)
def foldOrElse(lst: Iterable[T])(func: Iterable[T] => T, default: T): T =
if (lst.nonEmpty) func(lst) else default
}
//importing this allows us the syntax we wanted
case class Item(val offset:Int)
val list = List(Item(1),Item(2))
list.map(_.offset).minOrElse(-1) //yields 1
val offset = items.map(_.offset).minOrElse(0)
val minOffset: Long = if (items.isEmpty) 0 else items.map(_.offset).min