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

Java.next: Общие принципы языков нового поколения

Время на прочтение 7 мин
Количество просмотров 9.4K
Разработка веб-сайтов *
Перевод

Java.next: Общие принципы языков нового поколения


Это первая часть серии статей насчёт Java.next. В первой части я собираюсь рассмотреть общие принципы, которые разделяют языки Java.next.

Я выбрал четыре языка, которые вместе и назвал «Java.next»: Clojure, Groovy, JRuby, and Scala. На первый взгляд, эти языки совершенно разные. Clojure — это Lisp. Groovy — это «почти Java». JRuby обладает красотой Ruby, и использует мощь Rails. Scala, в отличие от других языков, настаивает на том, что нам нужна статическая типизация.
Читать дальше →
Всего голосов 60: ↑53.5 и ↓6.5 +47
Комментарии 133

Clojure и Project Euler, часть 1

Время на прочтение 4 мин
Количество просмотров 5.6K
Lisp *Clojure *

Предисловие


Недавно я начал изучать язык Clojure. Заинтересовал меня он потому, что это диалект lisp'a, выполняющийся на jvm. Сам я программирую на java, а lisp удивил меня своими скобочками. И тут такая смесь интересная. Да и с функциональным программированием тоже хотел познакомиться. Но тут же появилась проблема: как изучать clojure? Надо на нём что-то писать… А что? И пришёл к выводу, что очень удобно при изучении языка решить какие-нибудь несложные математические задачки: и к синтаксису привыкнешь, и с функционалом немного познакомишься. Для этого очень хорошо подходит Project Euler. Здесь я попробую показать, как начать работать с clojure и решить пару задач на нём. Я новичок в функциональном программировании и lisp'е, так что буду очень рад увидеть решения более близкие и красивые с точки зрения функционального и lisp'а.
Читать дальше →
Всего голосов 39: ↑35 и ↓4 +31
Комментарии 25

Clojure и Project Euler, часть 2

Время на прочтение 4 мин
Количество просмотров 2.7K
Lisp *Clojure *
В предыдущей статье (Clojure и Project Euler, часть 1) я описал решение первых 3 задач из проекта Эйлер с использованием clojure — достаточно молодого языка, но имеющего известных родителей.
В этой статье я продолжу знакомить читателя (да и себя тоже) с этим забавным джава-лиспом. И покажу решение ещё 3 несложных задач из Эйлера.
Читать дальше →
Всего голосов 26: ↑21 и ↓5 +16
Комментарии 6

Первая встреча клуба DZ – MongoDB, Clojure, MapReduce и Azure

Время на прочтение 2 мин
Количество просмотров 1.1K
Разработка веб-сайтов *MongoDB *Microsoft Azure *Clojure *
Вчера побывал на интересном мероприятии и хотел поделиться впечатлениями. Мероприятие представляло из себя неформальную встречу с открытыми обсуждениями, общением и множеством практической информации.

С некоторой статистикой вы можете ознакомиться в ЖЖ главного организатора Дмитрия Завалишина из Digital Zone.

Вкратце по темам – MongoDB, Clojure, MapReduce и Azure. В ходе первоначального знакомства всех пришедших стало известно, что основная часть людей пришла послушать про мир без SQL в лице MongoDB.
Подробнее...
Всего голосов 26: ↑19 и ↓7 +12
Комментарии 5

Новая волна языков программирования

Время на прочтение 2 мин
Количество просмотров 8K
Программирование *
На конференции OSCON (19-23 июля, Портленд) в этом году решили организовать дополнительную секцию Emerging Languages Camp, посвящённую языкам программирования нового поколения. Организатор — Алекс Пейн, известный по своей работе в компании Twitter.

Новые языки появляются постоянно и в бесчисленном количестве, потому что в программировании всё время возникают новые задачи, с которыми старые языки справляются плохо. Алекс Пейн говорит, что главная фундаментальная проблема сейчас — параллелизм. Он добавляет к этому ясность выражений (expressability) и удобство сопровождения (maintainability).
Читать дальше →
Всего голосов 49: ↑46 и ↓3 +43
Комментарии 60

Основы Clojure Web Applications

Время на прочтение 6 мин
Количество просмотров 10K
Программирование *Clojure *
Сегодня я попробую показать основы создания веб приложений на языке Clojure. Здесь не будет сложной логики и модных фреймворков. Будет использоваться ряд библиотек для работы с примитивами. По мере упоминания я попробую в двух словах объяснить, какой функционал они предоставляют.

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

Наше приложение будет принимать через форму одно значение, брать из базы данных второе, складывать их, а результат отдавать клиенту. При этом введенное значение будет заменять старое в базе данных. Глупая, бесполезная и не интересная логика — я знаю.
Читать дальше →
Всего голосов 22: ↑19 и ↓3 +16
Комментарии 6

GitHub Reflog v1.4.20

Время на прочтение 3 мин
Количество просмотров 1K
Git *
Перевод
Добро пожаловать в The GitHub Reflog — еженедельную хронику замечательных репозиториев на GitHub и активности открытого сообщества. Предыдущие выпуски вы сможете найти в Архиве Reflog либо в Архиве русскоязычной версии Reflog.
Читать дальше →
Всего голосов 49: ↑46 и ↓3 +43
Комментарии 9

10 «однострочников», которые произведут впечатление на ваших друзей

Время на прочтение 13 мин
Количество просмотров 41K
Программирование *F# *
За последнюю неделю появилось несколько топиков с названием «10 однострочников на <MY_LANGUAGE>, которые произведут впечатление на ваших друзей», которые содержат однострочное решение нескольких простых задач, демонстрирующее достоинства и «крутость» любимого языка программирования автора. Я решил перевести их и для сравнения собрать в одном топике. Вся волна началась (вроде как) со Scala.
Итак, поехали!
Читать дальше →
Всего голосов 181: ↑154 и ↓27 +127
Комментарии 147

GitHub Reflog v1.7.19

Время на прочтение 2 мин
Количество просмотров 1.3K
Git *
Перевод
Добро пожаловать в GitHub Reflog — хронику замечательных репозиториев GitHub и активности сообщества. Предыдущие выпуски доступны в Архиве Reflog, переводы выпусков в Архиве русскоязычной версии Reflog.
Читать дальше →
Всего голосов 35: ↑34 и ↓1 +33
Комментарии 2

Будущее Лиспа

Время на прочтение 4 мин
Количество просмотров 6.1K
Lisp *
Перевод
Это перевод статьи Стивена Дегутиса.

Будущее Lisp


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

Если вы еще не знакомы с ним, Lisp является замечательным семейством языков; его чрезвычайно минималистический синтаксис позволяет нам думать практически на уровне алгоритмов, не заморачиваясь по поводу неочевидного синтаксиса или каких-либо языковых рамок.

Положение на рынке


Традиционно, существует Scheme, который полезен разве что для преподавания в вузах из-за скудности поддерживаемых библиотек, есть также Common Lisp, который представляет из себя ужасную, страшную неразбериху (представьте C++, но с целым морем скобок).
Читать дальше →
Всего голосов 41: ↑31 и ↓10 +21
Комментарии 54

Storm («Hadoop в реальном времени») теперь Open Source

Время на прочтение 1 мин
Количество просмотров 5.9K
Высокая производительность *
Как и обещалось, Twitter выложил на github распределённую систему обработки данных в реальном времени Storm (от компании BackType). Теперь это проект open source.

В пояснительной записке автор проекта Натан Марц объясняет, что за последнее десятилетие такие технологии как MapReduce, Hadoop и проч. произвели настоящую революцию в области обработки больших объёмов данных. К сожалению, они никак не предназначены для работы realtime. Storm предалагет альтернативное решение. Фактически, Storm можно назвать «Hadoop в реальном времени», здесь реализована такая же схема с набором базовых примитивов. Это чрезвычайно надёжная и масштабируемая система с поддержкой любых языков программирования, устанавливается одной строчкой на Amazon EC2.
Читать дальше →
Всего голосов 38: ↑33 и ↓5 +28
Комментарии 5

Программирование музыки на Лиспе

Время на прочтение 1 мин
Количество просмотров 6.5K
Lisp *Clojure *Звук
Сэм Арон (Sam Aaron), один из разработчиков Overtone, выложил впечатляющее видео, как он синтезирует мелодии в редакторе Emacs, используя различные приёмы — триггеры инструментов, назначение будущих событий и проектирование сэмплов — на языке Clojure. Музыка звучит сразу после написания строчки кода (live coding).
Всего голосов 54: ↑46 и ↓8 +38
Комментарии 25

«Bloated code» в коммерческой разработке ПО

Время на прочтение 3 мин
Количество просмотров 827
Программирование *Clojure *
Из песочницы
В продуктовой разработке используются согласованные внутри команды паттерны. Это не только известные паттерны проектирования, но и, например, паттерны обработки ошибок внутри системы, форматы запросов и ответов в межсистемном взаимодействии и прочее. Так же при индивидуальной разработке не все повторяющиеся по логике и структуре куски можно завернуть в методы, что тоже не способствует читабельности и простоте кода.

С ростом количества систем и их размеров при малейшем изменении паттернов приходится рефакторить кучу мест для приведения кода к заданному шаблону.

После исследования альтернативных языков на jvm мы остановились на clojure. Вот небольшой пример реализации паттерна обработки ошибки на нем.

Допустим, мы оформляем обработку ошибок в джаве следующим образом:

Читать дальше →
Всего голосов 21: ↑17 и ↓4 +13
Комментарии 14

Рециркуляционные нейронные сети

Время на прочтение 4 мин
Количество просмотров 24K
Алгоритмы *
Рециркуляционные нейронные сети представляют собой многослойные нейронные сети с обратным распространение информации. При этом обратное распространение информации происходит по двунаправленным связям, которые имеют в различных направлениях разные весовые коэффициенты. При обратном распространении сигналов, в таких сетях осуществляется преобразование их с целью восстановления входного образа. В случае прямого распространения сигналов происходит сжатие входных данных. Обучение рециркуляционных сетей производится без учителя.
Читать дальше →
Всего голосов 60: ↑58 и ↓2 +56
Комментарии 33

Есть ли жизнь без ORM?

Время на прочтение 3 мин
Количество просмотров 2.4K
Программирование *Clojure *
После перехода в наших проектах с java на clojure нам необходимо было найти замену привычным средствам работы с базами данных.

В clojure есть стандартная библиотека работы с бд clojure.java.jdbc и несколько библиотек, основанных на ней и позволяющих писать запросы в предоставляемом ими eDSL. Но для «ежедневного пользования» нам хотелось что-то по удобству напоминающее jpa и работу с ним в IDE.

Мы подумали, почему бы не написать свою библиотеку, которая бы идеально подходила нашим требованиям. А требования были следующие:

  • автодополнение таблиц, полей;
  • автодополнение констант из определенных таблиц (более позднее);
  • удобный eDSL запросов;
  • возможность без ручного запроса получать значения из таблиц, связанные по внешнему ключу (более позднее).
Читать дальше →
Всего голосов 18: ↑11 и ↓7 +4
Комментарии 13

Коды возврата vs исключения: взгляд с колокольни

Время на прочтение 4 мин
Количество просмотров 2.3K
Программирование *Lisp *Clojure *
Просмотрев пост Коды возврата vs исключения и комментарии к нему, я заметил, что в обсуждении упущена одна нить, краткий тезис которой следующий: в некоторых языках такая проблема даже не стоИт, т.к. вопрос «что выбрать, коды возврата или исключения» в таком языке является низкоуровневым. Как, например, не стоит вопрос, каким образом реализовать конструкцию «foreach». Т.к. для программиста, использующего тот же «foreach», нет никакой разницы, использовали ли создатели языка while или for или что-то еще в имплементации данного оператора. Главное это паттерн, который представляет собой этот самый оператор.

Хватит рассуждать про foreach. Покажу непосредственно на примере два очень похожих друг на друга оператора, один из которых использует в качестве реализации «исключения», другой — «коды возврата».
Читать дальше →
Всего голосов 40: ↑29 и ↓11 +18
Комментарии 23

Алгоритмы сегментации текста

Время на прочтение 4 мин
Количество просмотров 13K
Data Mining *
Из песочницы
Здравствуйте.

В контексте анализа данных из твиттера возникла задача обработки хештегов. Нужно было взять хештег и разбить его на отдельные слова (#habratopic => habra topic). Задача казалась примитивной, но, получается, я ее недооценил. Пришлось перебрать несколько алгоритмов пока не было найдено то, что надо.

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

Читать дальше →
Всего голосов 41: ↑40 и ↓1 +39
Комментарии 15

Релиз Clojure 1.4

Время на прочтение 2 мин
Количество просмотров 1.7K
Программирование *Clojure *
image
После нескольких месяцев разработки вышла новая версия языка Clojure — 1.4. Clojure — Lisp'образный язык программирования общего назначения, работающий на платформах JVM и CLR, известный специальными средствами для упрощения разработки concurrency кода.

Среди изменений стоит отметить:
Читать дальше →
Всего голосов 17: ↑17 и ↓0 +17
Комментарии 12

Жизнь без объектов

Время на прочтение 5 мин
Количество просмотров 21K
Разработка веб-сайтов *Проектирование и рефакторинг *ООП *
Перевод
(Перевод)

Последние несколько лет я провел в изучении и экспериментах со многими языками программирования. В частности, я начал использовать Scala как основной язык, стараюсь использовать функциональный стиль везде где это возможно. Меня также весьма заинтересовал Haskell (чистый функциональный язык) и Clojure (современный диалект Лиспа).

Таким образом, я постепенно отказываюсь от объектно-ориентированной парадигмы, несмотря на то, что использовал в основном её последние 17 лет моей профессиональной деятельности. У меня появляется чувство, что объекты это то, что мешает нам писать лапидарный, структурированный и повторно используемый код.
Читать дальше →
Всего голосов 181: ↑160 и ↓21 +139
Комментарии 226

Clojure — последовательности (sequences)

Время на прочтение 7 мин
Количество просмотров 7.1K
Lisp *Clojure *
Из песочницы
Clojure является диалектом Lisp, поэтому совершенно не удивительно, что работе со списками отводится ключевое место в языке. Правда, в отличии от традиционных диалектов (CL или Scheme), вместо классических двухслотовых списков в Clojure используется абстракция Sequence — «логический список». Фактически, это интерфейс, предоставляющий методы для работы с неизменяемыми, ленивыми и, возможно, бесконечными последовательностями. Данная статья описывает внутреннее устройство этих сущностей.
Читать дальше →
Всего голосов 24: ↑24 и ↓0 +24
Комментарии 2