Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Clojure@Echo 02 Библиотеки, web-стек, ClojureSc...
Search
Nikita Prokopov
July 25, 2012
Programming
3
530
Clojure@Echo 02 Библиотеки, web-стек, ClojureScript
Третья лекция цикла Clojure@Echo
Видео:
https://vimeo.com/clojure-at-echo-02
Nikita Prokopov
July 25, 2012
Tweet
Share
More Decks by Nikita Prokopov
See All by Nikita Prokopov
DataScript for Web Development
tonsky
1
6.2k
Калифорнийский стартап в России @ NSU
tonsky
1
270
Clojure@Codefest 2013
tonsky
14
1.7k
Clojure@NSU 01
tonsky
1
770
Clojure@NSU 00
tonsky
2
960
Clojure@Echo 01 Структуры данных, полиморфизм, интероп
tonsky
3
290
Clojure@Echo 00 обзор, concurrency
tonsky
3
480
Юзабилити инструментов разработчика
tonsky
0
180
Other Decks in Programming
See All in Programming
Flutter with Dart MCP: All You Need - 박제창 2025 I/O Extended Busan
itsmedreamwalker
0
150
Amazon RDS 向けに提供されている MCP Server と仕組みを調べてみた/jawsug-okayama-2025-aurora-mcp
takahashiikki
1
120
Things You Thought You Didn’t Need To Care About That Have a Big Impact On Your Job
hollycummins
0
110
CJK and Unicode From a PHP Committer
youkidearitai
PRO
0
110
Navigation 2 を 3 に移行する(予定)ためにやったこと
yokomii
0
350
Improving my own Ruby thereafter
sisshiki1969
1
160
「手軽で便利」に潜む罠。 Popover API を WCAG 2.2の視点で安全に使うには
taitotnk
0
870
時間軸から考えるTerraformを使う理由と留意点
fufuhu
16
4.8k
Swift Updates - Learn Languages 2025
koher
2
510
Deep Dive into Kotlin Flow
jmatsu
1
370
AIと私たちの学習の変化を考える - Claude Codeの学習モードを例に
azukiazusa1
11
4.4k
プロポーザル駆動学習 / Proposal-Driven Learning
mackey0225
2
1.3k
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
How to Think Like a Performance Engineer
csswizardry
26
1.9k
Producing Creativity
orderedlist
PRO
347
40k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
850
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.6k
Building Adaptive Systems
keathley
43
2.7k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.9k
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