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
510
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
5.9k
Калифорнийский стартап в России @ NSU
tonsky
1
260
Clojure@Codefest 2013
tonsky
14
1.7k
Clojure@NSU 01
tonsky
1
760
Clojure@NSU 00
tonsky
2
950
Clojure@Echo 01 Структуры данных, полиморфизм, интероп
tonsky
3
280
Clojure@Echo 00 обзор, concurrency
tonsky
3
470
Юзабилити инструментов разработчика
tonsky
0
180
Other Decks in Programming
See All in Programming
ブラウザ単体でmp4書き出すまで - muddy-web - 2024-12
yue4u
2
460
Beyond ORM
77web
4
480
ゆるやかにgolangci-lintのルールを強くする / Kyoto.go #56
utgwkk
1
370
rails statsで大解剖 🔍 “B/43流” のRailsの育て方を歴史とともに振り返ります
shoheimitani
2
930
モバイルアプリにおける自動テストの導入戦略
ostk0069
0
110
Haze - Real time background blurring
chrisbanes
1
510
テストコード文化を0から作り、変化し続けた組織
kazatohiei
2
1.5k
HTTP compression in PHP and Symfony apps
dunglas
2
1.7k
CSC305 Lecture 25
javiergs
PRO
0
130
PHPで学ぶプログラミングの教訓 / Lessons in Programming Learned through PHP
nrslib
2
160
CSC305 Lecture 26
javiergs
PRO
0
140
命名をリントする
chiroruxx
1
390
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
5
440
Code Reviewing Like a Champion
maltzj
520
39k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Navigating Team Friction
lara
183
15k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
170
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Done Done
chrislema
181
16k
How to Ace a Technical Interview
jacobian
276
23k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
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