Skip to content

Instantly share code, notes, and snippets.

Working from home

Debasish Ghosh debasishg

Working from home
View GitHub Profile
View async_redis_client.scala
import cats.effect._
object Main extends IOApp {
override def run(args: List[String]): IO[ExitCode] =
RedisClient.makeWithURI[IO](new URI("http://localhost:6379")).use { cmd =>
import cmd._
val result = for {
debasishg / refined_runtime_validation.scala
Created Jul 23, 2020
Incorporating compile time and runtime validation using refinement types in Scala
View refined_runtime_validation.scala
import cats.implicits._
import eu.timepit.refined._
import eu.timepit.refined.api.Refined
import eu.timepit.refined.numeric._
import eu.timepit.refined.collection._
object person {

Thread Pools

Thread pools on the JVM should usually be divided into the following three categories:

  1. CPU-bound
  2. Blocking IO
  3. Non-blocking IO polling

Each of these categories has a different optimal configuration and usage pattern.

debasishg /
Last active Aug 30, 2020
Join based queries using skunk decoders

Join based queries with skunk decoders - folding with a Semigroup

Domain Model

Let's take a simple example that models an employee along with the salaries accrued in a year. Here's the domain model in Scala:

case class Salary(empId: String, month: Int, amount: BigDecimal)
case class Employee(id: String, name: String, salaries: List[Salary])
debasishg /
Last active May 25, 2020
Machine Learning on Graphs
  1. Graph Convolution Network - a blog post and the associated tweet. Check for the video.
  2. Deep Graph Library
  3. Machine Learning on Graphs: A Model and Comprehensive Taxonomy by Ines Chami, Sami Abu-El-Haija, Bryan Perozzi, Christopher Ré, Kevin Murphy
  4. Relational inductive biases, deep learning, and graph networks by Peter W. Battaglia, Jessica B. Hamrick, Victor Bapst, Alvaro Sanchez-Gonzalez, Vinicius Zambaldi, Mateusz Malinowski, Andrea Tacchetti, David Raposo, Adam Santoro, Ryan Faulkner, Caglar Gulcehre, Francis Song, Andrew Ballard, Justin Gilmer, George Dahl, Ashish Vaswani, Kelsey Allen, Charles Nash, Victoria Langston, Chris Dyer, Nicolas Heess, Daan Wierstra, Pushmeet Kohli, Matt Botvinick, Oriol Vinyals, Yujia Li, Razvan Pascanu - For the intuition of what GNNs can achieve, what the pro
debasishg /
Created Mar 21, 2020
some links on foldl/foldr

Original :

Yes, that’s right. It never makes sense to use foldl on lists because it never has any benefit and will always leak space.

To explain why, I wrote a mini blog post explaining the difference between foldl and foldr in Haskell. To start, you have to understand that foldl and foldr are not folds “from the left” and “from the right.” Both foldl and foldr traverse the structure in the same order, which in the case of lists means left to right. The difference is the fold’s associativity.

View Effects .. (thread)
debasishg / sync.txt
Last active May 8, 2020
Git tidbits
View sync.txt
Keeping a remote fork in sync
git status
git checkout master
git remote -v
git remote add upstream
git remote -v
git fetch upstream
git pull upstream master
git push origin master
debasishg /
Last active Mar 1, 2020
Useful links to read ..

Visitor Pattern

View gist:738436be246179293c50f4ab7bef02b1
Can we do it with `ClassTag` ?
You can't with a class tag, as it represents the erased type as known to the JVM. You could use a TypeTag
to reify the full type, but that depends on full scala reflection, which has its own downsides
(not thread safe, basically pulls in the compiler,...)
scala> import scala.reflect.runtime.universe.TypeTag
import scala.reflect.runtime.universe.TypeTag