Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
540
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.3k
Калифорнийский стартап в России @ NSU
tonsky
1
280
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
490
Юзабилити инструментов разработчика
tonsky
0
180
Other Decks in Programming
See All in Programming
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
39
26k
愛される翻訳の秘訣
kishikawakatsumi
3
330
Github Copilotのチャット履歴ビューワーを作りました~WPF、dotnet10もあるよ~ #clrh111
katsuyuzu
0
110
Graviton と Nitro と私
maroon1st
0
110
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
160
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
1.2k
Cell-Based Architecture
larchanjo
0
130
脳の「省エネモード」をデバッグする ~System 1(直感)と System 2(論理)の切り替え~
panda728
PRO
0
100
著者と進める!『AIと個人開発したくなったらまずCursorで要件定義だ!』
yasunacoffee
0
150
dotfiles 式年遷宮 令和最新版
masawada
1
790
tsgolintはいかにしてtypescript-goの非公開APIを呼び出しているのか
syumai
7
2.2k
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
210
Featured
See All Featured
Making Projects Easy
brettharned
120
6.5k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
Designing for Performance
lara
610
69k
The Cost Of JavaScript in 2023
addyosmani
55
9.4k
Fireside Chat
paigeccino
41
3.7k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
286
14k
Scaling GitHub
holman
464
140k
Rails Girls Zürich Keynote
gr2m
95
14k
Thoughts on Productivity
jonyablonski
73
5k
Building Adaptive Systems
keathley
44
2.9k
Optimizing for Happiness
mojombo
379
70k
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