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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
Automatic Grammar Agreementと Markdown Extended Attributes について
kishikawakatsumi
0
200
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
270
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.8k
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
7
3.9k
Oxlintはいいぞ
yug1224
5
1.3k
CSC307 Lecture 04
javiergs
PRO
0
660
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
1
980
Data-Centric Kaggle
isax1015
2
780
AIエージェントのキホンから学ぶ「エージェンティックコーディング」実践入門
masahiro_nishimi
5
490
CSC307 Lecture 02
javiergs
PRO
1
780
Patterns of Patterns
denyspoltorak
0
1.4k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
600
Featured
See All Featured
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
200
What's in a price? How to price your products and services
michaelherold
247
13k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Site-Speed That Sticks
csswizardry
13
1.1k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
410
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.7k
Navigating Weather and Climate Data
rabernat
0
110
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
140
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
Thoughts on Productivity
jonyablonski
74
5k
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