Skip to content

Instantly share code, notes, and snippets.

View shankarshastri's full-sized avatar
💻
Think -> Code -> Solve

ShankarShastri shankarshastri

💻
Think -> Code -> Solve
View GitHub Profile
@shankarshastri
shankarshastri / gist:4d496958d7d0b06f568ee043f2637ab4
Created January 2, 2020 10:33 — forked from cvogt/gist:9193220
Slick: Dynamic query conditions using the **MaybeFilter** (Updated to support nullable columns)
import scala.slick.lifted.CanBeQueryCondition
// optionally filter on a column with a supplied predicate
case class MaybeFilter[X, Y](val query: scala.slick.lifted.Query[X, Y]) {
def filter[T,R:CanBeQueryCondition](data: Option[T])(f: T => X => R) = {
data.map(v => MaybeFilter(query.filter(f(v)))).getOrElse(this)
}
}
// example use case
import java.sql.Date

Applied Functional Programming with Scala - Notes

Copyright © 2016-2018 Fantasyland Institute of Learning. All rights reserved.

1. Mastering Functions

A function is a mapping from one set, called a domain, to another set, called the codomain. A function associates every element in the domain with exactly one element in the codomain. In Scala, both domain and codomain are types.

val square : Int => Int = x => x * x
@shankarshastri
shankarshastri / redis-master.yaml
Last active January 29, 2020 14:55
Redis And Redis Insight
apiVersion: v1
kind: Service
metadata:
name: redis-service
spec:
type: LoadBalancer
selector:
app: redis
ports:
- name: redis
@shankarshastri
shankarshastri / KafkaProducerConsumerAvro.scala
Created April 28, 2020 14:24
KafkaProducerConsumerAvro
import java.io.ByteArrayOutputStream
import java.time.Duration
import java.util.concurrent.Executors
import java.util.{Properties, Timer, TimerTask, UUID}
import Models.{Message, SystemMessage, UserMessage, msgAvroSchema}
import com.sksamuel.avro4s.{AvroInputStream, AvroOutputStream, AvroSchema}
import org.apache.kafka.clients.consumer._
import org.apache.kafka.clients.producer._
import org.apache.kafka.common.errors.WakeupException
@shankarshastri
shankarshastri / letsencrypt_2020.md
Created May 9, 2020 10:19 — forked from cecilemuller/letsencrypt_2020.md
How to setup Let's Encrypt for Nginx on Ubuntu 18.04 (including IPv6, HTTP/2 and A+ SSL rating)

How to setup Let's Encrypt for Nginx on Ubuntu 18.04 (including IPv6, HTTP/2 and A+ SLL rating)


Virtual hosts

Let's say you want to host domains first.com and second.com.

Create folders for their files:

@shankarshastri
shankarshastri / Client example
Created June 8, 2020 12:38 — forked from rklaehn/Client example
akka http file server
package akkahttptest
import akka.http.Http
import akka.stream.ActorFlowMaterializer
import akka.actor.ActorSystem
import akka.stream.scaladsl.{Sink, Source}
import akka.http.model._
object TestClient extends App {
case class TrieNode[T](edgeList: Map[T, TrieNode[T]] = Map.empty[T, TrieNode[T]], isLeaf: Boolean = false,
isEntry: Boolean = false)
object TrieNode {
def emptyTrieNode[T]: TrieNode[T] = {
TrieNode[T]()
}
def newTrieNode[T](data: T): TrieNode[T] = {
TrieNode[T](edgeList = Map[T, TrieNode[T]]((data, emptyTrieNode[T])))
import scala.annotation.tailrec
import scala.collection.immutable.HashMap
case class TrieNode(h: HashMap[Char, TrieNode], isWord: Boolean = false)
object TrieNode {
def empty = TrieNode(HashMap.empty)
def buildTrieNode(s: List[Char], t: TrieNode = TrieNode.empty): TrieNode = {
s match {
case Nil => t.copy(isWord = true)
@shankarshastri
shankarshastri / MutableTrie.scala
Created August 11, 2020 07:36
MutableTrieNode
import scala.annotation.tailrec
import scala.collection.mutable
case class MutableTrieNode(h: mutable.HashMap[Char, MutableTrieNode], isWord: Boolean = false)
object MutableTrieNode {
def empty = MutableTrieNode(mutable.HashMap.empty)
def buildTrieNode(s: List[Char], t: MutableTrieNode = MutableTrieNode.empty): MutableTrieNode = {
s match {
case Nil => t.copy(isWord = true)
@shankarshastri
shankarshastri / EditDistance.scala
Created August 29, 2020 11:26
EditDistance.scala
def editDistance(s1: String, s2: String): Int = {
val s1Arr = s1.toCharArray
val s2Arr = s2.toCharArray
val mapOfEditDistance = scala.collection.mutable.HashMap.empty[(Int, Int), Int]
def editDistanceHelperDP(i: Int, j: Int): Int = {
mapOfEditDistance.getOrElseUpdate((i, j), if(i == -1) {
mapOfEditDistance.update((i, j), j + 1)