Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Clojure@Echo 02 Библиотеки, web-стек, ClojureSc...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Nikita Prokopov
July 25, 2012
Programming
560
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Clojure@Echo 02 Библиотеки, web-стек, ClojureScript
Третья лекция цикла Clojure@Echo
Видео:
https://vimeo.com/clojure-at-echo-02
Nikita Prokopov
July 25, 2012
More Decks by Nikita Prokopov
See All by Nikita Prokopov
DataScript for Web Development
tonsky
1
6.6k
Калифорнийский стартап в России @ NSU
tonsky
1
290
Clojure@Codefest 2013
tonsky
14
1.8k
Clojure@NSU 01
tonsky
1
790
Clojure@NSU 00
tonsky
2
980
Clojure@Echo 01 Структуры данных, полиморфизм, интероп
tonsky
3
320
Clojure@Echo 00 обзор, concurrency
tonsky
3
510
Юзабилити инструментов разработчика
tonsky
0
190
Other Decks in Programming
See All in Programming
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
180
App Intentsのビルドプロセスを支える技術
kntkymt
0
480
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
180
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
150
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
150
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
270
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
350
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
30
13k
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
770
The Rails Doctrine Decade
koic
2
420
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
190
AGENTS.md Is Not Enough:Build Skills, Don't Download Them
lx_t
0
130
Featured
See All Featured
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
Utilizing Notion as your number one productivity tool
mfonobong
4
600
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
550
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
290
Skip the Path - Find Your Career Trail
mkilby
1
240
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
560
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.1k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Transcript
Echo // Ульяновск, 2012 # Clojure@Echo 02 ## Технологии вокруг
Clojure clojure-toolbox.com clojars.org
Echo // Ульяновск, 2012 # Leiningen ## Project automation Управление
зависимостями Сборка Тестирование Packaging REPL Интеграция
Echo // Ульяновск, 2012 # Leiningen ## Устройство Использует maven
repos Значительно проще! Расширяемый
Echo // Ульяновск, 2012 # Leiningen ## lein2 Профили Загрузка
on demand
Echo // Ульяновск, 2012 # Leiningen ## Пример (defproject leiningen.org
“1.0.0” :description “Generate static HTML for lein” :dependencies [[enlive “1.0.1”] [cheshire “4.0.0”] [org.markdownj/markdownj “0.3.7”]] :main leiningen.web)
Echo // Ульяновск, 2012 # Clojure contrib clojure.test tools.logging data.json
data.xml core.match core.logic core.cache algo.monads …
Echo // Ульяновск, 2012 # UI ## Seesaw Unified API
Composable functions Binding + pipeline processing CSS селекторы по формам Динамизм!
Echo // Ульяновск, 2012 # Avout Распределенный MVCC Ref-ы, atom-ы
и транзакции между машинами Distributed locks Zookeeper или mongodb-backed
Echo // Ульяновск, 2012 # Storm Обработка потоков данных в
реальном времени Предоставляет инфраструктуру Произвольные топологии Быстрый Гарантирует обработку Живучий Любые языки
Echo // Ульяновск, 2012 # SQL ## Korma (select users
(aggregate (count :*) :cnt) (where (or (> :visits 20) (< :last_login dt))))
Echo // Ульяновск, 2012 # SQL ## ClojureQL (-> (table
:users) (project [:id :name :email]) (sort [:id#asc]) (take 5) (drop 2))
Echo // Ульяновск, 2012 # Incanter Charting & visualization functions
Mathematical functions Statistical functions Matrix & linear algebra functions Data manipulation functions
Echo // Ульяновск, 2012 # Pallet Deployment/provisioning automation Облачные провайдеры
ч/з jcloud Сервера ч/з ssh/bash Скриптуется ч/з clojure, порождающую bash
Echo // Ульяновск, 2012 # Typed Clojure (ann use-map [(HMap
{:a Number}) -> Number]) (defn use-map [a] (get a :a))
Echo // Ульяновск, 2012 # IDE ## Swank + SLIME
Компиляция eval Отладка Документация Есть lein-swank
Echo // Ульяновск, 2012 # IDE ## Другое Eclipse —
Counterclockwise Idea — La Clojure
Echo // Ульяновск, 2012 # IDE ## LightTable
Echo // Ульяновск, 2012 # IDE ## LightTable
Echo // Ульяновск, 2012 # Web-стек
Echo // Ульяновск, 2012 # Ring ## to rule them
all github.com/ring-clojure/ring/blob/master/SPEC request map → response map
Echo // Ульяновск, 2012 # Ring ## Request & response
maps {:keys [uri query-string request-method headers body …]} {:keys [status headers body]} →
Echo // Ульяновск, 2012 # Ring ## Выводы Нет реализации
— нет зависимостей, багов, етц Маленькая — легко реализовать Низкоуровневая Вход-выход — просто тестировать Веб-сокеты не засунешь
Echo // Ульяновск, 2012 # Ring ## Адаптеры ring-servlet ring-jetty
ring‑mongrel2‑adapter ring-netty-adapter ring-devel для lein
Echo // Ульяновск, 2012 # Middleware [(req→resp) & opts] →
(req→resp) ring.middleware: + Sessions + Cookies + Uploads + Form parsing …
Echo // Ульяновск, 2012 # Диспатчинг Moustache (def my-app (app
[“hi”] {:get “hello world only for GET!”} [“hi” name] {:get [“hello “ name]})) Compojure (defroutes app (GET “/” [] “<h1>Hello World</h1>”) (route/not-found “<h1>Page not found</h1>”))
Echo // Ульяновск, 2012 # Генерация HTML ## Hiccup (html
[:span {:class “foo”} “bar”]) => <span class=”foo”>bar</span> (html [:div#foo.bar.baz “bang”]) => <div id=”foo” class=”bar baz”>bang</div>
Echo // Ульяновск, 2012 # Генерация HTML ## Enlive Парсинг
и трансформация HTML Код отдельно от верстки Переиспользование snippets Модификации можно комбинировать Макросы!
Echo // Ульяновск, 2012 # Генерация HTML ## Enlive пример
(at a-node [:a :selector] a-transformation [:another :selector] another-transformation ...) (html/deftemplate index “tutorial/template1.html” [ctxt] [:p#message] (html/content (get ctxt :message “Nothing to see here”))
Echo // Ульяновск, 2012 # Noir Ring + Compojure +
Hiccup (defpage “/validate” [] (vali/rule (= 3 3) [:math “3 != 3”]) (vali/rule (= 1 2) [:math “1 != 2”]) (layout [:p “Let’s check your math: “] [:p (str (vali/get-errors :math))])
Echo // Ульяновск, 2012 # WebSockets ## Aleph Сетевая библиотека
общения по каналам Почти как Ring, только request и response разделены HTTP, WebSockets, TCP, UDP, Redis Ожидаются: socket.io, AMQP, SPDY, BSON
Echo // Ульяновск, 2012 # WebSockets ## Aleph пример (def
broadcast-channel (channel)) (defn chat-handler [ch handshake] (receive ch (fn [name] (siphon (map* #(str name “: “ %) ch) broad- cast-channel) (siphon broadcast-channel ch)))) (start-http-server chat-handler {:port 8080 :websocket true})
Echo // Ульяновск, 2012 # ClojureScript
Echo // Ульяновск, 2012 # Задача Разработка больших приложений в
браузере
Echo // Ульяновск, 2012 # Проблемы Рост кодебазы Коллективная разработка
Взаимодействие со сторонними библиотеками Оптимизация, отладка
Echo // Ульяновск, 2012 # Не-решения CoffeeScript — ничего не
меняет в семантике
Echo // Ульяновск, 2012 # Решение Семантические проблемы: состояние, иммутабельность,
ФП, макросы, строгая типизация, протоколы
Echo // Ульяновск, 2012 # Решение-2 Одно стандартное решение для
стандартных проблем: неймспейсы, управление зависимостями, структуры данных, типовые операции
Echo // Ульяновск, 2012 # Решение-3 ## Компиляция в JS
Может увеличить производительность Снимает browser quirks
Echo // Ульяновск, 2012 # Как это работает Компилируется на
«большой» Clojure Генерирует Javascript под Google Closure Compiler Оптимизируется Google Closure Compiler Зависимости ч/з Goolge Closure Library Персистентные структуры данных
Echo // Ульяновск, 2012 # Штуки Browser-connected REPL Reader (общий
формат передачи данных клиент-сервер) Интероп Библиотеки подключаются и используются Enfocus — enlive в браузере
Echo // Ульяновск, 2012 # Недостатки Дебаггинг (ждем source maps)
Echo // Ульяновск, 2012 Никита Прокопов tonsky.livejournal.com Echo, Ульяновск 25
июля 2012 aboutecho.com echorussia.ru Обсуждение лекций: tonsky.livejournal.com/tag/clojure