ClojureLT_OXUT
lagenorhynque
Scala vs Clojure
Opt had some history of Scala vs Clojure
Introduction
excited for first physical event for long time
Talk is about Clojure usage at Opt, but personal role has been more manager
3 topics
Opt technologies summary
How clojure is used
Lessons learned
hopefully 15 mins
Opt technologies
internet advertising agency
Opt technologies is an internal development org with 40~50 members
I am defacto CTO
please check official site and tech blog
characteristics
autonomy
office/not is flexible
time is also flexible
annyal 60 days holiday
tech
JVM language
Go
Ruby
PHP
very wide range
and accompanying chaos
Hiring
Clojure usages at opt
several articles/blog
2017 first usage - mail sending batch
2019 Talk titled Clojurian conquest
How to make Clojure prevail in a Scala dominated environment
Graphql API made with Clojure
Introduction to functional programming
Scala usage was huge, but currently Scala usage is declining
Scala usage was huge among web companies circa 2016
Typescript & Go also growing
I introduced Clojure and usage has been expanding
Used in important system
Haskell and elm were attempted in the past
Challenge: why use Clojure when there is Scala?
Now 10 Clojure engineers
Products using Clojure
Task Driver
task manager for ad operation
send mails
luminus
immutant
hugsql
Schema (clojure spec was not a thing)
aws api
New Opt editor
Talk to rest apis provided by Ad platforms like yahoo etc
duct+pedestal
made original duct module
struct for validation
honeysql
great for dynamic sql
amazonica
a little out dated
Wrote a mini book as well
Ams API
ad related master data
solution against chaos arising from shared database that hosted every data
lacinia
graphql library provided by walmart labs
superlifter
dataloader
malli
input validation
lessons learned
Had to fight with Scala
Dynamic nature was hard to argue
Long term stability was great for selling
Scala is famous for breaking changes
Japanse resource is limited
Contributed material by self
Had to improvise some graphql constructs that are available in Typescript out of box
Functional programming, JVM, repl driven development, community <3
questoin: What did the scala user say when using Clojure?
Great after getting over the Lack of type check and parenthesis
Pretty smooth if person is okay with dynamic lang
athos
Clojure usage at Xcoo
Intro
Clojurian since 2009
Joined Xcoo in 2018
Contributed to Clojure/ClojureScript
Past longer talks by Xcoo
Clojure/Conj 2017
Shibuya Lisp tech talk 2022
This talk is like a quick summary of above
What Xcoo does
How Clojure is used
Xcoo
founded in 2011
44 members
Business
Provide chrovis, total solution for genome medicine
Genome medicine
everyone has DNA made from ACGT
Could be damaged, leading to Cancer
Medical treatment based on genomic information is important
e.g. molecular target drug
Engineering team
Analysis
Analyse gene mutations
Athos works in this team
Database
Scrape/collect information from public sources
Report
Provide UI for medical providers
Infrastructure
Operate the systems
All Engineers can Clojure
Probably larget Clojure house
Clojure usage at Xcoo
203 repositories
2380 source files
200,000 lines of code mostly Clojure
3866 Pull requests
Many OSS products under Chrovis organization
cljam - largest, used in many places
i/o for genome specific files
need to deal with file sizes of 10s of GBs
specific file formats to deal with the scale
e.g.
fastq
sam/bam
vcf/bcf
various algoritms
Tools/libraries used in Systems
Good points from using Clojure
Sequence representation
Large files don't fit in memory
processing as sequence is very convenient
Parallelism
Large data => long processing time
several hours is typical, can take up to 1 day
speed up by some constant factor is effective
immutable data is makes multi threading easy
claypool to control parallelism
REPL exploration
esp. for analysis team, need to deal with problems that require interaction with actual data
repl works well for trial and error process
easy for debugging
as long as there is an uberjar you can start a repl
socket repl for remote debugging
Advantage for analyzing data
Looking forward to datascience/visualization development in the ecosystem
Was a Clojure conj talk on the topic as well
Might become a viable choice by data scientists
REPL might be a strong selling point
Sane package system compared to R and Python
Platforms
Clojure
ClojureScript
UI
Babashka
scripting
also use personally
genome analysis requires handling many files, and babashka is great when sed/awk become too hard
stdin is sequence
has threads
Xcoo is hiring
_ayato_p
usabase
more casual than previous talks
name: ayapi
usabase
B2B saas
products
speeda
probably very few people using Clojure and F#
Talking about JSON
probably everyone loves JSON?
micro service architecutre
managed in a monorepo
probably 150 apis
40 project.clj
100 engineers in org
fluid team
potentially 100 Clojure engineers
Services talk to each others in JSON
camelCase is required
Typically need to return a list of companies
100 items/10 items
Need to aggregate attributes from various micro services
Batching blocks for a long time
=> great if it can be a stream?
And core.async?
great * great = really great?
<snippet of core.async demo>
clj-http
extract reader
JSON/process json
register callback on provided jsonpath
JSONL
json as steam has advantage because consumer can chose to buffer content
Usabase
Many languages used as long as JSON is used
rust is gaining popular
Might be good fit if you want to use many languages
Haokang Den
CTO at Toreta
Making POS using datomic cloud
Toreta
vertical SaaS
provide many services to Restaurants
Hiring
POS
50 yeas of history
Mobile order on the rise
Restaurants want to express their own idea
need to accomodate many flavors with one product
Product = O/X
UX
scan QR code
great menu
post orders
complete payment
Advantage
Waiter is no longer bottleneck
customers can order whenever
Waiters can focus on recommending/hosting
Why Clojure?
From management prospective
Stability
POS is critical for restaurants
no POS no business
need long term commitment
Clojure has great track record
was a Ruby shop
Ruby is famous for breaking changes
Auditability
System
Not just processing orders, want to provide value by analytics as well
transaction
cdc with 15 mins
Near realitime info with Looker
Dyncamically change menu
Architecture
Testing is important
clean architecture inspired
Datomic+Duct+Lacinia
Fetcher layer to avoid N+1
90% coverage
Development process
Customers are restaurants
very personal
Need close understanding of customers
Accumulate domain knowledge
Datamodeling by product owner
Designers work with E-R diagrams
Prevent mismatch of UI - Backend datamodel
Used in many restaurants
Questions
TLA+
not used in Clojure, but used for validating interfaces
# of transactions?
will get back
Nicolas Modrzyk
Talk about origami
Intro
Drank too much champane and ended up in Tokyo
CTO
using many languages
Origami
library
opencv rapper on jvm
compiling installing etc taken care of
<demo detecting a cat>
started in 2017
Was doing something with OpenCV
Wanted to make a tool to recognize sushi item
Clojure => no need to re-compile
No demo
Supported languages
Clojure
Java
Kotlin
Scala
etc
Sample Applications
3 books
Chinese Web Camera
noticed traffic to China
Usecases
motion tracking
art filters
Bought 30 webcams to compare
Recognizing a banana is hard
M1 mac broke things
opensource
feel good when people DM you about it
maintenance is a lot of work
collaboration is fun
Jetbrains IDE lisence for contributors