Как стать автором
Обновить
0

Clojure *

Уголок языков Clojure и Clojure REPL

Сначала показывать
Порог рейтинга
Уровень сложности

Функциональное программирование, знакомься — ООП

Время на прочтение9 мин
Количество просмотров11K

Мне нравится экспериментировать с разными парадигмами и играться с разными интересными (для меня) идеями (некоторые из них превращаются в посты: раз, два). Недавно я решил проверить, смогу ли я писать объектно-ориентированный код на функциональном языке.

Читать дальше →

Книга «Clojure на производстве»

Время на прочтение7 мин
Количество просмотров9.2K

Неделю назад в издательстве "Ридеро" вышла книга "Clojure на производстве". Как ее автор, расскажу о ней подробнее: что внутри и кому она полезна.



Общие сведения


Это книга о том, как применять Clojure в настоящих условиях: не сортировать списки в олимпиадных задачах, а поднимать веб-приложения, строить системы, писать тесты. Мой опыт с Clojure показывает, что переход от теории к практике происходит болезненно. Руководства обещают чистоту и неизменяемость, но на практике нам дают код, полный побочных эффектов и состояния.


Это книга — попытка облегчить погружение в практику. Одновременно хочу развеять ложные надежды: Clojure — прекрасный язык, но и в нем не бывает чудес.


От других материалов по Clojure книга отличается следующим. Прежде всего, это не перевод. Я не зря делаю на этом акцент во вступлении. Проблема переводов в том, что в издательствах не понимают технические термины и пытаются их адаптировать. Token становится маркером, trait — чертой, persistence — сохранностью. Формально перевод корректный, но пропадает живость описания, и к нему падает интерес. В своей книге я не срезал углы: если у слова нет однозначного перевода, я ставил английский вариант — тот, в котором мы видим его каждый день.

Читать дальше →

Гамак дривен девелопмент: «Сон — это важная часть работы программиста»

Время на прочтение20 мин
Количество просмотров8.1K
Рич Хикки — создатель языка программирования Clojure, независимый разработчик ПО и консультант с 20-летним опытом работы в различных областях разработки ПО. Примерно 2,5 года в одиночку работал над Clojure, прежде чем кому-либо его показать.

image

Предлагаю вашему вниманию расшифровку доклада 2010 года «Hammock Driven Development»

Это просто доклад, основанный на опыте. Не научный доклад, не будет какой-то методологии, науки или чего-то ещё.

Когда был последний раз, когда вы всерьёз думали о чем-то целый час? Чтобы вас никто не беспокоил и вы могли сосредоточиться. Или целый день? Помните ли вы день, когда вы могли целый день над чем-то думать? Или месяц? Почти всё время думая над чем-то? Или год?

Это чрезвычайно ценные моменты, если они у вас вообще есть. Я считаю, что мне очень повезло, я мог думать о трех разных вещах в течение года или более. Одной из них был Clojure. И нет ничего, что я ценю больше, чем такое время.

Еще одна вещь, которую я хотел бы спросить: «Когда вы в последний раз чувствовали себя уверенно, пытаясь сделать то, чего никогда раньше не делали?» И как вы думаете, что нужно, чтобы стать уверенным в том, чего вы никогда не делали раньше?

Очевидно, что, как разработчики программного обеспечения мы часто делаем еще одно приложение, которое извлекает что-то из базы данных и размещает в Интернете, но чем вы удачливее, тем больше вероятность того, что вы столкнётесь с проблемами которых никогда раньше не решали. И как вы начнёте их решать? Не чувствуя себя в большой опасности?

Поэтому я начну с того, что расскажу о некоторых вещах в области разработки софта, о которых мы все знаем, что это правда.

Оцениваем опционы на Clojure методом Монте-Карло

Время на прочтение3 мин
Количество просмотров3.5K

Привет! Меня зовут Рома, я работаю iOS-разработчиком в Exness. А кроме того, пишу на Clojure и инвестирую.


Сегодня я расскажу о том, как оценивать опционы. Это вводная статья и заработать миллион, используя предложенный способ, вряд ли получится. Тем не менее, это хорошая основа для понимания более сложных методов оценки.


Читать дальше →

Прагматическое функциональное программирование

Время на прочтение6 мин
Количество просмотров6.4K
Привет, Хабр! Предлагаю вашему вниманию перевод статьи «Pragmatic Functional Programming» автора Robert C. Martin (Uncle Bob).

Переход к функциональному программированию всерьез развился только около десяти лет назад. Мы видим, что такие языки, как Scala, Clojure и F# привлекают внимание. На самом деле это был большой шаг в программировании: “О, круто, новый язык!” — энтузиазм… Видимо там было что-то особенное — ну или это мы так думали.  

Закон Мура гласит нам, что скорость компьютеров будет удваиваться каждые 18 месяцев. Данный закон действовал с 1960-х до 2000 годов. Затем он прекратился. Частота достигла 3 ГГц, а затем и вовсе поднялась на плато. Мы достигли скорости света! Сигналы не могут распространяться по поверхности чипа достаточно быстро, чтобы обеспечить более высокие скорости. 

Это привело к тому, что инженеры оборудования изменили свою стратегию. В попытках увеличить пропускную способность, они добавили больше процессоров (ядер). А чтобы освободить место для этих ядер, они удалили большую часть оборудования для кэширования и конвейеризации из чипов. Из-за этого процессоры стали намного медленнее, чем раньше; однако их стало больше. В итоге увеличилась пропускная способность. 
Читать дальше →

Парсим X12 «на коленке»

Время на прочтение13 мин
Количество просмотров2.6K
imageПри создании приложения, активно взаимодействующего со сторонними сервисами и системами, часто требуется обеспечить обмен информацией с ними, односторонний или двусторонний

При этом зачастую сторонний сервис предоставляет единственный формат и структуры данных для такого взаимодействия.

Одним из таких форматов электронного документооборота является EDI ANSI ASC X12, достаточно подробное описание которого приведено по ссылке.

КДПВ была взята с этого сайта


Под катом приведен простой алгоритм парсера X12 и код на Clojure, реализующий парсер и пример обработки распарсенных данных.
Читать дальше →

Книга «App from scratch»

Время на прочтение2 мин
Количество просмотров4.6K

Я написал книгу, предварительный релиз, о создании веб-приложений с нуля.


Я прочитал много книг по программированию, но, часто, после прочтения у меня оставался только один вопрос — Как мне применить эти знания на практике?


Предположим, вы разработчик системы автоматизации, портала или интернет-магазина.
Добавление новой функциональности осложняется наслоениями кода. Запуск тестов занимает полчаса, а релиз — час. Идея о переходе на новую версию фреймворка вызывает нервные подергивания. Вы узнаёте, что PostgreSQL имеет поддержку массивов, jsonb, полнотекстового поиска и lateral join, но ORM не позволяет использовать их в полную силу. Вы прочитали про TDD, но как писать в таком стиле, когда аналитик описывает сценарии, а фреймворк требует создания модели, контроллера и представления?


Как применить SOLID, если сущности наследуют от ORM?


Как избавиться от боли?


Постепенно, по мере изучения Clojure, и, наконец после прочтения Clean Architecture, я понял, как без боли написать приложение, где на первом месте стоит предметная область, а не фреймворк, где я принимаю решения, а не создатели фреймворков навязывают свои.


В какой-то степени книгу можно рассматривать как практический самоучитель по Clojure,
так что знание этого языка не требуется.

Читать дальше →

Визуализируем FHIR — IT-стандарт для медицины

Время на прочтение5 мин
Количество просмотров13K



Здравствуйте. Меня зовут Андрей, я работаю в компании, создающей IT-решения в области медицины. В качестве основного языка разработки мы используем Clojure, а также (в зависимости от проекта/модуля) Python, Javascript, Go, C, C#, Rust, Objective-C и т.д.

Важное место в нашем технологическом стеке занимает международный стандарт FHIR (Fast Healthcare Interoperability Resources), определяющий формат хранения/обмена/предоставления медицинской информации в электронном виде и включающий в себя спецификацию RESTful API клиент-серверного взаимодействия.

Некоторое время назад я начал пет-проект приложения, которое визуализирует содержимое ресурсов произвольного FHIR-сервера и позволяет производить базовые CRUD — операции. В КДПВ показан скриншот страницы редактирования элемента ресурса типа Patient.

Под катом небольшое описание и ссылка на онлайн-демо — можно будет пощупать настоящий живой FHIR-сервер, потыкать кнопочки, посмотреть/посоздавать/поредактировать различные ресурсы и даже попробовать вызвать тот самый хабраэффект! )
Читать дальше →

OpenSource на Clojure

Время на прочтение12 мин
Количество просмотров5.2K
В Run Loop приглашают тех, кто делает классные продукты своими руками. Никита Прокопов (tonsky) — человек и пароход, успел сделать несколько OpenSource проектов, которыми с удовольствием пользуются другие люди.

В первую очередь поговорим о шрифте FiraCode, о Clojure, и совершенно разных проектах, например, обертке ClojureScript для React. А потом перейдем к более общим рассуждениям о хороших интерфейсах, здравом смысле, и моделях обучения программистов.



О госте: Никита Прокопов примечателен тем, что создал FiraCode, внёс заметный вклад в развитие Clojure сообщества и опубликовал в OpenSource такие проекты как Datascript и Rum. Помимо этого он пишет на Objective-C под macOS: программа AnyBar подскажет о наступлении какого-либо события в statusbar, ой, menubar вашего компьютера.

Ведущие: Роман Бусыгин (разработчик Яндекс.музыки для iOS) и Алексей Милеев (App in the Air).
Читать дальше →

Make frontend «backend» again

Время на прочтение20 мин
Количество просмотров13K
Николай Рыжиков предложил свою версию ответа на вопрос, почему же так сложно разрабатывать пользовательский интерфейс. На примере своего проекта он покажет, что применение на фронтенде некоторых идей из бэкенда сказывается как на сокращении сложности разработки, так и на тестируемости фронтенда.



Материал подготовлен на основе доклада Николая Рыжикова на весенней конференции HolyJS 2018 Piter.

Операция на сердце: как мы переписывали основной компонент DLP-системы

Время на прочтение9 мин
Количество просмотров4.8K
Переписывание legacy-кода как поход к стоматологу – вроде, все понимают, что надо бы пойти, но все равно прокрастинируют и стараются оттянуть неизбежное, потому что знают: будет больно. В нашем случае дела обстояли еще хуже: нам надо было переписать ключевую часть системы, и в силу внешних обстоятельств мы не могли заменять старые куски кода на новые по частям, только все сразу и целиком. И все это в условиях нехватки времени, ресурсов и документации, но с требованием руководства, что в результате «операции» ни один заказчик не должен пострадать.

Под катом история о том, как мы переписали основной компонент продукта с 17-летней историей (!) со Scheme на Clojure, и все сразу заработало как надо (ну, почти :)).


Читать дальше →

О декомпозии кода замолвим слово: контекстное программирование

Время на прочтение4 мин
Количество просмотров6.2K

Конечно, в идеале лучше вообще Не писать лишнего кода. А если и писать, то, как известно, нужно хорошо продумывать кости системы архитектуру системы и реализовывать мясо системы логику системы. В данной заметке мы приведем рецепты для удобной реализации последнего.

Читать дальше →

Erlang-like микросервисы в Clojure приложении: это просто

Время на прочтение7 мин
Количество просмотров6K

Как известно в кругу Erlang разработчиков: только Erlang разработчики знают как "жить" правильно а все остальные "живут" — неправильно. Не пытаясь оспаривать этот факт, приведем пример Clojure приложения в стиле Erlang, используя библиотеку Otplike.

Читать дальше →

Ближайшие события

Java 9 — Вы уже перешли? Нет? И не надо ...!?

Время на прочтение2 мин
Количество просмотров43K

Недели две назад InfoQ напомнил, что официальная поддержка Java 9 заканчивается… в Марте 2018г. (т.е. через 20 дней :)


Вот cсылка на официальный EOL от Oracle, в которой в разделе "Java SE Public Updates" черным по английскому говорится, что Java 9 будет поддерживаться до Марта 2018, а Java 8до Января 2019 (или позже) и Декабря 2020 (или позже).

Читать дальше →

Объединяем Websockets, Lisp и функциональное программирование

Время на прочтение10 мин
Количество просмотров6.6K

Alt text


Объединяем Websockets, Lisp и функциональное программирование. Но как?

Читаем

Прагматичное функциональное программирование

Время на прочтение5 мин
Количество просмотров15K

Движение к функциональному программированию началось всерьез примерно десятилетие назад. Мы видели как такие языки как Scala, Clojure и F# стали привлекать внимание. Это движение было больше чем просто обычное восхищение «О, круто, новый язык!». Было что-то действительно побуждающее это движение — или мы так думали.

Читать дальше →

Готовим многопоточность с core.async

Время на прочтение4 мин
Количество просмотров13K
image


Всё больше набирает популярность паттерн использования каналов при создании
многопоточных приложений. Идея не нова, ее дизайн заложен ещё в далёком 1978 году
в виде CSP.Наиболее известная реализация сейчас повсеместно используется в Golang.


Мы же в статье рассмотрим реализацию CSP в core.async для Clojure, если интересно, добро пожаловать под кат.


Читать дальше →

Организация роутинга в clojure веб-приложении

Время на прочтение4 мин
Количество просмотров3.9K

Существуют библиотеки на различных языках, имеющие общие черты. Это compojure, sinatra, grape, express, koa и подобные.


У них схожий подход к роутингу. Они не накладывают никаких ограничений и не предлагают структуру для организации url. Разработчики в таких условиях склонны не заботиться о структуре и впоследствии получают плохо поддерживаемый код.


Другая общая черта — это однонаправленность. Т.е. определенному запросу соответствует определенный обработчик. Разработчики вынуждены прописывать url строками в шаблонах. Нет возможности указать в виде конструкции языка, какой url сгенерировать. Это приводит к тому, что в представлениях остаются мертвые ссылки, и нет способа найти их, кроме как протыкать все страницы.


Я расскажу, как улучшить поддерживаемость кода в экосистеме Clojure, и покажу, как:


  1. организовать url'ы
  2. структурировать код обработчиков
  3. использовать языковые конструкции для генерации url
Читать дальше →

Как Clojure помогает ускорить написание Selenium-тестов

Время на прочтение7 мин
Количество просмотров14K

image Привет, читатель! Если доводилось писать Selenuim-тесты чуть сложнее чем на пару полей ввода и одну кнопку, то эта статья может пригодиться.


Наверняка знакомо чувство неправильности происходящего, когда внезапно отказывался работать тест-кейс длиной в пару минут, вынуждая тыкаться вслепую, чтобы найти поломавшийся css- или xpath-селектор в сложном Single Page Application, раз за разом запуская этот медленный сценарий, только чтобы дождаться вывода лога в консоль. Оказывается, можно писать Selenium-тесты с комфортом!


О чём статья - другими словами для нубов

Про Selenium. Когда-то это был просто плагин для FireFox. Нажимаешь кнопочку "запись", и начинаешь дергать интерфейсы тестируемого сайта (формочки, ссылки). Практически без знания программирования, полученный сценарий можно править, подставляя нужные значения проверок. Всё — тест готов! Запускай каждый раз после деплоя, и проверяй, чего сдвинул локтем. Потом в Selenium добавили API для разных языков. В частности есть и для JAVA. Через API можно делать тоже самое: запускать браузер с требуемым сайтом, проверять переданные значения в формах, ходить по ссылкам и т.д. Беда в том, что скрипт выполняется медленно. Чтобы тестировать тесты, надо перезапускать сценарий, а это форменная пытка. Clojure (поверх JAVA) позволяет выполнять куски кода в работающей программе посредством REPL прямо в редакторе!

Читать дальше →

Материалы курсов по Clojure

Время на прочтение1 мин
Количество просмотров13K
image

В 2014 году группа профессиональных разработчиков на Clojure под руководством Дмитрия Бушенко провела первые и единственные онлайн-курсы по языку Clojure на русском языке.

Специально для курса мы записали 71 оригинальное видео общей продолжительностью 17 часов 25 минут и 44 секунды. Курс пользовался успехом — пришло более 200 человек, но материалы в открытом доступе не публиковались.

Этот сайт — те самые материалы.

Мы публикуем их в том виде, в каком они есть. Лекции сами по себе связные, полные и самодостаточные. Они даже почти не устарели (на июнь 2016-го), хотя, конечно, появилось и много нового. Задания тоже можете порешать — это ровно те файлы, которые выдавались на дом слушателям курса в 2014-м.

(мопед не мой)