SlideShare a Scribd company logo
Пользовательское API на базе
Shapeless
Челышов Вадим - qtankle@gmail.com
hydrosphere.io
Scalalaz Podcast
INTRO
Scala styles
better java
std scala fp
pure functional
generic + type level
Generic + type level
Shapeless
Generic + type level
akka-http
slick
finch
SBT
Spark app
Spark app
spark/bin/spark-submit 
--class "SimpleApp" 
--master local[4] 
target/scala-2.11/simple-project_2.11-1.0.jar
Frontend
Frontend
Frontend
Mist
https://github.com/Hydrospheredata/mist
Library Api
object UserJob extends Job {
def execute(a: String, b: Int): Map[String, Any] = {
val wordsToCount = sc.textFile("hdfs://...").flatMap(line
wordsToCount
}
}
Минусы
serialization/deserialization
нельзя override def execute
inject spark context
Прототип
object MyJob extends Job[R] {
override def defineJob: JobDef[R] = ???
}
Прототип
override def define = {
args(
arg[Int]("x"),
arg[String]("str")
)
}
Прототип
object MyJob extends Job[Int] {
override def define = {
args(arg[String]("path")).withSparkContext(
(p: String, sc: SparkContext) => {
sc.textFile("hdfs://" + p)
})
}
}
Akka-http
val route =
parameters('foo, 'bar) { (foo, bar) =>
complete(s"Hello $foo $bar")
}
Finch
val route = get("foo" :: path[String]) { s: String =>
Ok(s"Hello $foo")
}
Sbt
packageBin in Compile <<= (name, organization, version) map {
(n, o, v) => file(o + "-" + n + "-" + v + ".jar")
}
Fake it till you make it
Arg
trait Arg[A]{
def extract(ctx: Ctx): Option[A]
}
Arg
def arg[A](name: String): Arg[A]
def arg[A](name: String, default: A): Arg[A]
spread your boilerplate
def args[A](a1: Arg[A]): Args1[A]
def args[A](a1: Arg[A], a2: Arg[B]): Args2[A, B]
и еще
class Args1[A](a1: Arg[A]) {
def withContext[Res](
f: (A, SparkContext) => Res): JobDef[Res]
}
class Args2[A, B](a1: Arg[A], a2: Arg[B]) {
def withContext[Res](
f: (A, B, SparkContext) => Res): JobDef[Res]
}
Все дороги ведут в shapeless
shapeless/project/Boilerplate.scala
boilerplate
block"""
|trait Methods {
- def args[${`A..N`}](${`a1..n`}): Args${arity}[${`A..N`}]
- new Args${arity}(${`a1..aN`})
|}
|
|object Methods extends Methods
"""
Что возвращать
trait Job[R] {
def define: JobDef[R]
}
No way
trait Job[A] {
def define: JobDef1[A, R]
def define: JobDef2[A, B, R]
}
Type member
trait Generic[A] {
def foo(a: A)
}
trait Member {
type A
def foo(a: A)
}
Сохранить типы
trait JobDef[R] {
type Args
def args: Args
def run(ctx: Ctx): R
}
HList
class Job1[A, R](
a: Arg[A]
f: (A, SparkContext) => R)
extends JobDef[R] {
type Args = A :: HNil
def args = a :: HNil
}
Последний рывок бойлерплейта
def run(ctx: Context): R = {
val options = args.map(a => a.extract(ctx.params)
if (options.exists(_.isEmpty))
//error
else {
val asTuple = ..
f.tupled(asTuple)
}
}
Это так не работает
import poly._
// а как сюда передать Ctx с параметрами??
object mapExtract extends (ArgDef ~> Option) {
def apply[T](a : ArgDef[T]) = a.extract(?)
}
https://milessabin.com/blog/2012/04/27/shapeless-
polymorphic-function-values-1/
Что получилось
Что получилось
21 - withArgs, ArgN, JobDefN
вот он тот boilrepalte который скрапит shapeless
придется читать сорцы
Понять type-level
type parameters
implicit paramters
type-params + implicit params = type level lang
Могучие типы
trait Foo[A]{
def map(f: A => B): Foo[B]
}
Могучие типы
val a: Int :: HNil = 1 :: HNil
val ab: Int :: String :: HNil = 1 :: "str" :: HNil
implicit ~= match
trait Show[A] {
def show(a: A): String
}
object Show {
implicit val forString: Show[String] = ...
implicit val forInt: Show[Int] = ...
}
implicit ~= match
trait DepFn[A] {
type Out
def apply(a: A): Out
}
object DepFn {
implicit val forString: DepFn[String]
implicit val forInt: DepFn[Int]
}
DepFn
def size(a: Any): Int = a match {
case i: Int = i
case s: String = s
}
trait Size[A] {
type Out
dep apply(a: A): Out
}
object Size[A] {
implicit val forStr: Size[String] = ...
implicit val forInt: Size[Int] = ...
}
def size[A](a: A)(implicit sz: Size[A]): sz.Out =
size(a)
DepFn
object ToHList {
implicit def tuple1[A] = new ToHList[Tuple1[A]] {
type Out = A :: HNil
def apply(a: Tuple1[A]): A :: HNil = a._1 :: HNil
}
}
def foo[A](a: A)(implicit thl: ToHList[A]): thl.Out =
thl(a)
Композиция depfn
def foo[A](a: A)(implicit
thl: ToHList[A],
rev: Reverse[?]
): rev.Out =
rev(thl(a))
Aux
object ToHList {
type Aux[A, Out0] = ToHList[A] {type Out = Out0 }
implicit def tuple1[A]: Aux[Tuple1[A], A :: HNil] =
new ToHList[Tuple1[A]] {
type Out = A :: HNil
def apply(a: Tuple1[A]): A :: HNil = a._1 :: HNil
}
}
Aux
def reverse[A, H <: HList](a: A)(
implicit
thl: ToHList.Aux[A, H],
r: Reverse[H]): r.Out = r(thl(a))
И это все?
The Type Astronaut's Guide to Shapeless
Type Level Programming in Scala step by step
Время поправить
object MyJob extends Job[Int] {
override def define = {
args(arg[String]("path"), arg[Int]("n")).withSparkContext(
(p: String, sc: SparkContext) => {
})
}
}
Scrap your boilerplate
class ArgsN[A ... N ](a1 ... aN)
class JobDefN[A .. N, R](
a1: Arg[A],
...
aN: Arg[N],
f: (A.. N, SparkContext) => R)
extends JobDef[R] {
type RunArgs = A :: N
def args = a :: n
}
Комбинаторы
trait Arg[A] { self =>
def &(b: Arg[B]): Arg[A :: B :: HNil] =
}
Комбинаторы
val a: ArgDef[A] = arg[A]("a")
val b: ArgDef[B] = arg[B]("b")
val c: ArgDef[C] = arg[C]("c")
val ab: ArgDef[A :: B :: HNil] = a & b
val abc: ArgDef[A :: B :: C :: HNil] = a & b & c
Extract
def &(b: Arg[B]): Arg[A :: B :: HNil] = {
new Arg[A :: B :: HNil] {
def extract(ctx: Ctx): Option[A :: B :: HNil] = {
val opt1 = self.extract(p)
val opt2 = b.extract(p)
(opt1, opt2) match {
case (Some(a), Some(b)) => Some(a :: b :: HNil)
}
}
}
}
Больше кейсов
val ab = arg[Int]("a") & arg[Int]("b")
val dc = arg[String]("c") & arg[Int]("d")
val abdc = ab & dc
Adjoin
def &(b: Arg[B])(
implicit
adj: Adjoin[A :: B :: HNil]
): Arg[adj.Out] = {
(opt1, opt2) match {
case (Some(a), Some(b)) => Some(adj(a :: b :: HNil))
}
Контекст это тоже аргумент
val sparkContext = new Arg[SparkContext] {
def extract(ctx: Ctx): = Some(ctx.sparkContext)
}
val args = arg[Int]("n") & sparkContext
FnToProduct
trait Arg[A] { self =>
def apply[F, Int <: HList, Res](f: F)(
implicit
fntp: FnToProduct.Aux[F, In => Res]): JobDef[Res] =
}
val args = arg[Int]("n") & sparkContex
val jobdef = args {(n, sparkContext) => ...}
adapted-args
def foo(ab: (Int, String, Double))
foo((1, "foo", 1.0))
foo(1, "foo", 1.0)
def args[A, H <: HList, ROut, Z](a : A)(
implicit
gen: Generic.Aux[A, H],
r: LeftReducer.Aux[H, reducer.type, ROut],
ev: ROut <:< ArgDef[Z]
)
Репортинг ошибок
implicitNotFound
@implicitNoFound("Not found Foo {A}")
trait Foo[A]
def foo[A](implicit foo: Foo[A])
foo(1) // Not found Foo Int
implicitNotFound
def bar[X, R])(x: X)(implicit x: Aux[X, R], foo: Foo[R])
bar(1) //Not found Foo R
Итог
generic + type level - необходиомость
с этим можно жить

More Related Content

What's hot

Advanced Tagless Final - Saying Farewell to Free
Advanced Tagless Final - Saying Farewell to FreeAdvanced Tagless Final - Saying Farewell to Free
Advanced Tagless Final - Saying Farewell to Free
Luka Jacobowitz
 
F sh3tdkeq
F sh3tdkeqF sh3tdkeq
F sh3tdkeq
Lokesh Lio M
 
F[1]
F[1]F[1]
Beginning Scala Svcc 2009
Beginning Scala Svcc 2009Beginning Scala Svcc 2009
Beginning Scala Svcc 2009
David Pollak
 
C Prog - Array
C Prog - ArrayC Prog - Array
C Prog - Array
vinay arora
 
Java8 stream
Java8 streamJava8 stream
Java8 stream
koji lin
 
The Ring programming language version 1.3 book - Part 25 of 88
The Ring programming language version 1.3 book - Part 25 of 88The Ring programming language version 1.3 book - Part 25 of 88
The Ring programming language version 1.3 book - Part 25 of 88
Mahmoud Samir Fayed
 
Crystal Ball Event Prediction and Log Analysis with Hadoop MapReduce and Spark
Crystal Ball Event Prediction and Log Analysis with Hadoop MapReduce and SparkCrystal Ball Event Prediction and Log Analysis with Hadoop MapReduce and Spark
Crystal Ball Event Prediction and Log Analysis with Hadoop MapReduce and Spark
Jivan Nepali
 
GECon2017_Cpp a monster that no one likes but that will outlast them all _Ya...
GECon2017_Cpp  a monster that no one likes but that will outlast them all _Ya...GECon2017_Cpp  a monster that no one likes but that will outlast them all _Ya...
GECon2017_Cpp a monster that no one likes but that will outlast them all _Ya...
GECon_Org Team
 
GECon 2017: C++ - a Monster that no one likes but that will outlast them all
GECon 2017: C++ - a Monster that no one likes but that will outlast them allGECon 2017: C++ - a Monster that no one likes but that will outlast them all
GECon 2017: C++ - a Monster that no one likes but that will outlast them all
Yauheni Akhotnikau
 
ZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional Programming
ZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional ProgrammingZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional Programming
ZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional Programming
John De Goes
 
Legacy lambda code
Legacy lambda codeLegacy lambda code
Legacy lambda code
Peter Lawrey
 
Streams and lambdas the good, the bad and the ugly
Streams and lambdas the good, the bad and the uglyStreams and lambdas the good, the bad and the ugly
Streams and lambdas the good, the bad and the ugly
Peter Lawrey
 
Beyond tf idf why, what & how
Beyond tf idf why, what & howBeyond tf idf why, what & how
Beyond tf idf why, what & how
lucenerevolution
 
The Design of the Scalaz 8 Effect System
The Design of the Scalaz 8 Effect SystemThe Design of the Scalaz 8 Effect System
The Design of the Scalaz 8 Effect System
John De Goes
 
Struct examples
Struct examplesStruct examples
Struct examples
mondalakash2012
 
Data Structures Practical File
Data Structures Practical File Data Structures Practical File
Data Structures Practical File
Harjinder Singh
 
Munihac 2018 - Beautiful Template Haskell
Munihac 2018 - Beautiful Template HaskellMunihac 2018 - Beautiful Template Haskell
Munihac 2018 - Beautiful Template Haskell
Matthew Pickering
 
Scala Hands On!!
Scala Hands On!!Scala Hands On!!
Scala Hands On!!
Yoshifumi Takeshima
 
Vim Registers
Vim RegistersVim Registers
Vim Registers
Weverton Timoteo
 

What's hot (20)

Advanced Tagless Final - Saying Farewell to Free
Advanced Tagless Final - Saying Farewell to FreeAdvanced Tagless Final - Saying Farewell to Free
Advanced Tagless Final - Saying Farewell to Free
 
F sh3tdkeq
F sh3tdkeqF sh3tdkeq
F sh3tdkeq
 
F[1]
F[1]F[1]
F[1]
 
Beginning Scala Svcc 2009
Beginning Scala Svcc 2009Beginning Scala Svcc 2009
Beginning Scala Svcc 2009
 
C Prog - Array
C Prog - ArrayC Prog - Array
C Prog - Array
 
Java8 stream
Java8 streamJava8 stream
Java8 stream
 
The Ring programming language version 1.3 book - Part 25 of 88
The Ring programming language version 1.3 book - Part 25 of 88The Ring programming language version 1.3 book - Part 25 of 88
The Ring programming language version 1.3 book - Part 25 of 88
 
Crystal Ball Event Prediction and Log Analysis with Hadoop MapReduce and Spark
Crystal Ball Event Prediction and Log Analysis with Hadoop MapReduce and SparkCrystal Ball Event Prediction and Log Analysis with Hadoop MapReduce and Spark
Crystal Ball Event Prediction and Log Analysis with Hadoop MapReduce and Spark
 
GECon2017_Cpp a monster that no one likes but that will outlast them all _Ya...
GECon2017_Cpp  a monster that no one likes but that will outlast them all _Ya...GECon2017_Cpp  a monster that no one likes but that will outlast them all _Ya...
GECon2017_Cpp a monster that no one likes but that will outlast them all _Ya...
 
GECon 2017: C++ - a Monster that no one likes but that will outlast them all
GECon 2017: C++ - a Monster that no one likes but that will outlast them allGECon 2017: C++ - a Monster that no one likes but that will outlast them all
GECon 2017: C++ - a Monster that no one likes but that will outlast them all
 
ZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional Programming
ZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional ProgrammingZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional Programming
ZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional Programming
 
Legacy lambda code
Legacy lambda codeLegacy lambda code
Legacy lambda code
 
Streams and lambdas the good, the bad and the ugly
Streams and lambdas the good, the bad and the uglyStreams and lambdas the good, the bad and the ugly
Streams and lambdas the good, the bad and the ugly
 
Beyond tf idf why, what & how
Beyond tf idf why, what & howBeyond tf idf why, what & how
Beyond tf idf why, what & how
 
The Design of the Scalaz 8 Effect System
The Design of the Scalaz 8 Effect SystemThe Design of the Scalaz 8 Effect System
The Design of the Scalaz 8 Effect System
 
Struct examples
Struct examplesStruct examples
Struct examples
 
Data Structures Practical File
Data Structures Practical File Data Structures Practical File
Data Structures Practical File
 
Munihac 2018 - Beautiful Template Haskell
Munihac 2018 - Beautiful Template HaskellMunihac 2018 - Beautiful Template Haskell
Munihac 2018 - Beautiful Template Haskell
 
Scala Hands On!!
Scala Hands On!!Scala Hands On!!
Scala Hands On!!
 
Vim Registers
Vim RegistersVim Registers
Vim Registers
 

Similar to Делаем пользовательское Api на базе Shapeless

Fp in scala with adts part 2
Fp in scala with adts part 2Fp in scala with adts part 2
Fp in scala with adts part 2
Hang Zhao
 
Generic Functional Programming with Type Classes
Generic Functional Programming with Type ClassesGeneric Functional Programming with Type Classes
Generic Functional Programming with Type Classes
Tapio Rautonen
 
Scala best practices
Scala best practicesScala best practices
Scala best practices
Alexander Zaidel
 
Scalapeno18 - Thinking Less with Scala
Scalapeno18 - Thinking Less with ScalaScalapeno18 - Thinking Less with Scala
Scalapeno18 - Thinking Less with Scala
Daniel Sebban
 
Functional programming in scala
Functional programming in scalaFunctional programming in scala
Functional programming in scala
Siarhiej Siemianchuk
 
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...
PROIDEA
 
Scala - where objects and functions meet
Scala - where objects and functions meetScala - where objects and functions meet
Scala - where objects and functions meet
Mario Fusco
 
Monads and friends demystified
Monads and friends demystifiedMonads and friends demystified
Monads and friends demystified
Alessandro Lacava
 
Lego: A brick system build by scala
Lego: A brick system build by scalaLego: A brick system build by scala
Lego: A brick system build by scala
lunfu zhong
 
D vs OWKN Language at LLnagoya
D vs OWKN Language at LLnagoyaD vs OWKN Language at LLnagoya
D vs OWKN Language at LLnagoya
N Masahiro
 
Why Haskell Matters
Why Haskell MattersWhy Haskell Matters
Why Haskell Matters
romanandreg
 
Un dsl pour ma base de données
Un dsl pour ma base de donnéesUn dsl pour ma base de données
Un dsl pour ma base de données
Romain Lecomte
 
Scala-Gopher: CSP-style programming techniques with idiomatic Scala.
Scala-Gopher: CSP-style programming techniques with idiomatic Scala.Scala-Gopher: CSP-style programming techniques with idiomatic Scala.
Scala-Gopher: CSP-style programming techniques with idiomatic Scala.
Ruslan Shevchenko
 
Scala Functional Patterns
Scala Functional PatternsScala Functional Patterns
Scala Functional Patterns
league
 
Quark: A Purely-Functional Scala DSL for Data Processing & Analytics
Quark: A Purely-Functional Scala DSL for Data Processing & AnalyticsQuark: A Purely-Functional Scala DSL for Data Processing & Analytics
Quark: A Purely-Functional Scala DSL for Data Processing & Analytics
John De Goes
 
Algebraic Data Types and Origami Patterns
Algebraic Data Types and Origami PatternsAlgebraic Data Types and Origami Patterns
Algebraic Data Types and Origami Patterns
Vasil Remeniuk
 
Power of functions in a typed world
Power of functions in a typed worldPower of functions in a typed world
Power of functions in a typed world
Debasish Ghosh
 
String Manipulation Function and Header File Functions
String Manipulation Function and Header File FunctionsString Manipulation Function and Header File Functions
An Introduction to Functional Programming using Haskell
An Introduction to Functional Programming using HaskellAn Introduction to Functional Programming using Haskell
An Introduction to Functional Programming using Haskell
Michel Rijnders
 
SDC - Einführung in Scala
SDC - Einführung in ScalaSDC - Einführung in Scala
SDC - Einführung in Scala
Christian Baranowski
 

Similar to Делаем пользовательское Api на базе Shapeless (20)

Fp in scala with adts part 2
Fp in scala with adts part 2Fp in scala with adts part 2
Fp in scala with adts part 2
 
Generic Functional Programming with Type Classes
Generic Functional Programming with Type ClassesGeneric Functional Programming with Type Classes
Generic Functional Programming with Type Classes
 
Scala best practices
Scala best practicesScala best practices
Scala best practices
 
Scalapeno18 - Thinking Less with Scala
Scalapeno18 - Thinking Less with ScalaScalapeno18 - Thinking Less with Scala
Scalapeno18 - Thinking Less with Scala
 
Functional programming in scala
Functional programming in scalaFunctional programming in scala
Functional programming in scala
 
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...
 
Scala - where objects and functions meet
Scala - where objects and functions meetScala - where objects and functions meet
Scala - where objects and functions meet
 
Monads and friends demystified
Monads and friends demystifiedMonads and friends demystified
Monads and friends demystified
 
Lego: A brick system build by scala
Lego: A brick system build by scalaLego: A brick system build by scala
Lego: A brick system build by scala
 
D vs OWKN Language at LLnagoya
D vs OWKN Language at LLnagoyaD vs OWKN Language at LLnagoya
D vs OWKN Language at LLnagoya
 
Why Haskell Matters
Why Haskell MattersWhy Haskell Matters
Why Haskell Matters
 
Un dsl pour ma base de données
Un dsl pour ma base de donnéesUn dsl pour ma base de données
Un dsl pour ma base de données
 
Scala-Gopher: CSP-style programming techniques with idiomatic Scala.
Scala-Gopher: CSP-style programming techniques with idiomatic Scala.Scala-Gopher: CSP-style programming techniques with idiomatic Scala.
Scala-Gopher: CSP-style programming techniques with idiomatic Scala.
 
Scala Functional Patterns
Scala Functional PatternsScala Functional Patterns
Scala Functional Patterns
 
Quark: A Purely-Functional Scala DSL for Data Processing & Analytics
Quark: A Purely-Functional Scala DSL for Data Processing & AnalyticsQuark: A Purely-Functional Scala DSL for Data Processing & Analytics
Quark: A Purely-Functional Scala DSL for Data Processing & Analytics
 
Algebraic Data Types and Origami Patterns
Algebraic Data Types and Origami PatternsAlgebraic Data Types and Origami Patterns
Algebraic Data Types and Origami Patterns
 
Power of functions in a typed world
Power of functions in a typed worldPower of functions in a typed world
Power of functions in a typed world
 
String Manipulation Function and Header File Functions
String Manipulation Function and Header File FunctionsString Manipulation Function and Header File Functions
String Manipulation Function and Header File Functions
 
An Introduction to Functional Programming using Haskell
An Introduction to Functional Programming using HaskellAn Introduction to Functional Programming using Haskell
An Introduction to Functional Programming using Haskell
 
SDC - Einführung in Scala
SDC - Einführung in ScalaSDC - Einführung in Scala
SDC - Einführung in Scala
 

Recently uploaded

Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
Octavian Nadolu
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
Deuglo Infosystem Pvt Ltd
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
Google
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
Neo4j
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
lorraineandreiamcidl
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
Philip Schwarz
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
Hironori Washizaki
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Crescat
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
Ayan Halder
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
Rakesh Kumar R
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
mz5nrf0n
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 

Recently uploaded (20)

Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 

Делаем пользовательское Api на базе Shapeless