Показаны сообщения с ярлыком общение. Показать все сообщения
Показаны сообщения с ярлыком общение. Показать все сообщения

четверг, 2 мая 2013 г.

Курсы по Clojure закончились

В марте я начал курсы по языку Clojure. Все участники были поделены на три группы: А -- очники, B -- дистанционщики с преподавателем, С -- дистанционщики без преподавателя. Из примерно сотни стартовавших до конца обучения дошли всего 18 человек.

На фото -- мы с Никитой Белоглазовым толкаем речь.

Поскольку слушателей курсов было много, я попросил помочь мне вести группы Никиту Белоглазова, Алекса Отта, Никиту Прокопова и Виталия Монастырева. Благодаря их помощи, курсы получились довольно масштабными, если бы я был один, то смог бы взять максимум человек 30.

Параллельно я провел три занятия по Clojure и функциональному программированию в БГУ у третьекурсников ФПМ. Двум студентам, выполнившим ДЗ, я тоже вручил сертификаты.


На фото я вручаю сертификат, а Никита награждает значком с символом Сlojure

На курсах мы разобрали следующие основные темы:
1. Основы ФП
2. Параллельное программирование
3. Макросы и предметно-ориентированные языки
4. Веб-разработка

По итогам курсов те, кто дошли до конца, разработали свое небольшое веб-приложение в стиле Single-Page Application. Самое забавное, на мой взгляд, сделал Виталий Монастырев (http://www.komoku.org:3000/index.html).

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

1. Разработаем сайт минского коммьюнити clojure.by
2. Задачи комьюнити:
а) пропаганда clojure, культурная экспансия в умы ООП-инфицированных;
б) обзоры интересных clojure-технологий в виде докладов на митапах;
в) совместная разработка best practices по использованию clojure в различных областях. На данный момент следующие темы требуют выработки общих best practices: веб-разработка, разработка параллельных алгоритмов средствами clojure, разработка предметно-ориентированных языков.
г) организация clojure-хакатонов.

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

3. Создать чисто технарьскую конференцию thestrangeloop.by по примеру thestrangeloop.com. С этим пунктом пока много неясного, предлагаю его обсудить. Но в целом, на этой конфе должны быть исключительно программерские доклады от классных докладчиков (возможно даже дистанционно). Языки и технологии в основном маргинальные, вроде Clojure, Haskell, CL, Scheme, Emaсs Lisp, Scala, ML, Erlang и т.д. Задачи конфы -- дать возможность обсудить проблемы использования маргинальных технологий "вживую", познакомиться с грамотными специалистами. Причем я думаю, тезисы докладов стоит публиковать заранее, чтобы слушатели ознакомились и могли заготовить вопросы для обсуждения. Возможно даже такую конфу стоило бы проводить в онлайне -- дешево и сердито.

По поводу сlojure.by и thestrangeloop.by прошу высказаться всех заинтересованных.

среда, 27 марта 2013 г.

Clojure в БГУ

Сегодня договорились с деканом ФПМ БГУ о том, что я проведу три занятия по Clojure на ФПМ (занятия парные, лекция + ПЗ) в рамках спецкурса по функциональному программированию.

Главная печаль в том, что до крайности не хочется заниматься настройкой окружения в лаборатории, т.к. у них там компы c Windows XP и дохлым интернетом. Вот как студентам установить lein?

Одно из решений, которое я придумал: предложу студентам залогиниться на мой ноутбук по SSH и работать там в консольном Emacs-е. Заодно и ктулхуугодный редактор пропиарю :-)

пятница, 1 марта 2013 г.

14 марта стартуют курсы Clojure


Вам надоела многословность Java или C#? Вы хотите, чтобы писать программы было проще и быстрее? Вас достало писать вручную одни и те же паттерны проектирования?
Решение есть! Приходите на курсы Clojure, мы научим вас самым современным методам программирования! Вы будете использовать преимущества функционального подхода, интерактивной разработки и метапрограммирования. Мы покажем вам, как автоматизировать программерскую рутину!

С 14 марта по 18 апреля 2013г. в офисе компании ITA (г.Минск, проспект Независимости, 58) будут проходить курсы программирования на Clojure. Программа курсов включает в себя изучение основ функционального и мета-программирования средствами языка Clojure, а также применение Clojure для разработки современных веб-приложений.
Примерный план занятий:
14.03.2013 — Установка и настройка необходимых инструментов, введение в Clojure и функциональное программирование.
21.03.2013 — Функции высшего порядка, ленивые вычисления, полиморфизм, STM, взаимодействие с Java.
28.03.2013 — Макросы, предметно-ориентированные языки, генерация кода.
04.04.2013 — Введение в веб-стек Clojure. Ring, Compojure, lib-noir, развертывание приложений.
11.04.2013 — Генерация html (Clostache, Hiccup, Enlive), Взаимодействие с БД (Korma).
18.04.2013 — ClojureScript вместо JavaScript.
Для успешного прохождения курсов необходимо иметь представление о Java, SQL, HTML, CSS и JavaScript.
Количество мест на очную форму обучения ограничено. Поэтому те, кто хочет посетить курсы лично, должны будут выполнить тестовое задание на алгоритмизацию. Задание будет объявлено в группе «Clojure Course» в facebook 7 марта 2013г. Если у Вас есть желание получить задание предварительно, присылайте Ваши заявки на email: d.bushenko@gmail.com. После успешного прохождения очной формы курсов, слушатели получат сертификаты.
Для тех, кто не сможет попасть на очную форму обучения, мы предложим вам дистанционную. Информацию о том, как попасть на дистанционную форму обучения мы объявим в группе «Clojure Course» в facebook 7 марта 2013г.

воскресенье, 24 февраля 2013 г.

Обзор Clojure на тусовке Software Craftmanship

На днях делал презентацию языка Clojure на тусовке Software Craftmanship.


Саму презентацию можно взять здесь. Видео доклада -- здесь.

Были разобраны следующие темы:
1. Какие причины заставляют программистов искать замену языкам промышленного программирования (Java, C#, C++, etc.).
2. Что такое Clojure.
3. Синтаксис Clojure.
4. Макросы -- самое мощное средство метапрограммирования.
5. Зачем нужны eDSL и как их пишут на Clojure.
6. Когда стоит, а когда не стоит применять Clojure.
7. Как продавать Clojure менеджеру и заказчику.
8. Как пользоваться Clojure, если от вас все-таки требуют код на языке промышленного уровня (например, Java).

понедельник, 28 января 2013 г.

Курсы Clojure -- продолжение

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

Скорее всего курсы начнутся через месяц, в последних числах февраля (это пока не точно). Еще мы планируем выдавать сертификаты о прохождении курсов тем, кто выполнит все домашние задания.

С помощью Алекса Отта я составил предварительную программу курсов. Опять же, это пока не официально, возможны изменения.

Вообще я предлагаю всем заинтересованным обсудить программу, что-то подкорректировать, добавить-убрать. Буду очень благодарен за feedback.

Побеседовав с Алексом, решил вынести из основной части программы почти всю "эзотерику" и включить её в виде бонуса (бонусы буду записывать по мере сил и возможностей). Вначале предполагалось, что  метацикилческий интерпретатор мы будем тоже писать на курсах. Но раз уж я вынес его в бонус, то мою реализацию можно посмотреть здесь.

Всем, кто хочет и может помочь мне с материалами курсов, предлагаю выбрать тему/подтему или даже какой-то совсем уж ограниченный фрагмент занятия. Пожалуйста, связывайтесь по этому поводу со мной через email: d.bushenko-at-gmail.com Имена всех, кто будет помогать мне с материалами, тоже каким-нибудь образом увековечим.

четверг, 29 марта 2012 г.

Итоги за месяц

Давно не писал сюда из-за нехватки времени. Но вот, наконец, я достаточно освободился, чтобы набросать пару строк в блог.

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

Проект, который я делал с начала февраля по середину марта, -- андроид-приложение для планшетов. Оно предназначалось для дистанционного обучения какой-то фигне сотрудников какой-то компании. Технических сложностей там никаких нету, писать здесь не о чем, за исключением достаточного большого объема работы: необходимо было реализовать 22 формы со всякими разными украшениями. Дополнительная сложность -- необходимо написать еще и JSON веб-сервис, который может отдавать запрашиваемые данные и сохранять у себя ответы пользователей на опросы и тесты.

Дедлайн был очень жесткий: 12 марта. На мой взгляд, при таких объемах и сроках проект должен делать не один человек, а как минимум трое.

Во-первых, мне удалось уговорить заказчика разрешить писать веб-сервис на Clojure вместо java. По моим прикидкам, это сэкономило бы мне неделю работы. Для заказчика были крайне важны сроки, и он позитивно воспринял мое предложение, но поинтересовался: какие минусы у clojure? Я честно сказал, что этот язык просто менее распространен, чем java. Все остальное -- то же, что и у java. Например, готовый сервис мы захостим под Tomcat в виде war-файла. Заказчик согласился с этим риском, заметив, что если вдальнейшем будет необходимость, то тогда вебсервис можно будет переделать на java. Забегая вперед скажу, что необходимость не возникла :-)

Я воспользовался библиотеками noir1.3-alpha10, cheshire, sqlkorma, lobos и очень быстро показал работающий сервак. Функциональность в сервак я добавлял в процессе работы над клиентской частью по мере необходимости. Поскольку я пользовался связкой Emacs+Slime, рабочий код я получал очень быстро. А время, которое я тратил на разработку очередной функции сервака, в среднем равнялось нескольким минутам.

Основное время, конечно же, занимала Android-часть, причем в основном -- настройка внешнего вида формочек. Android -- неплохая платформа для пользователя, но очень сырая и недоделанная для разработчика. В отличие от ябловодов, нам, андроидам, нет возможности пользоваться WYSIWYG-редактором для построения GUI. А редактировать гигантские простыни xml-кода вручную -- сомнительное удовольствие...

Решение нашлось довольно быстро. Я разработал небольшой DSL на основе Clojure и Hiccup. С применением этого DSL формочку я целиком описывал на Clojure, а потом генерил из неё связку xml и java-кода (при этом генерился весь MVC на форму). В среднем, количество кода в DSL и количесство сгенеренного xml+java кода соотносились как 1:3 или 1:4, что уже очень неплохо. Еще один важный бонус, который я получил от этого DSL -- возможность использования нормального вменяемого языка для описания UI вместо XML. Появилась возможность выносить общую функциональность в функции, делать циклы и т.д. Понятно, что большинство повторно используемых компонент оформлялись как отдельные виджеты; но там, где для этого не было необходимости -- я просто объявлял функцию на Clojure. Еще важное замечание: код в стиле Hiccup читается гораздо проще, чем xml.

Дальше развивать свой DSL у меня уже не было времени, а повторяющийся код, который я не мог обобщить, все равно встречался. Например, код для работы с БД и вебсервисом состоял по большей части из извлечения-записи в хеш-таблицы по ключам, соответствующим именам полей в БД. Здесь мне на помощь пришел Emacs. Буквально пара десятков строк кода на elisp-е, и весь оставшийся boilerplate-код на java генерил Emacs.

Надо сказать, что в сроки я уложился, но с учетом, что в конце проекта на 2 недели мне дали в помощь товарища. Думаю, получилось очень даже хорошо.

воскресенье, 11 декабря 2011 г.

Впечатление о встрече разработчиков Scala #7

Вчера, в субботу, выступал с докладом на 7-й встрече любителей функционального программирования. Тема конференции -- "Инструменты, упрощающие разработку программ".
К организации встречи подошли довольно серьзено. Во-первых, мне удалось уговорить выступить с докладом Алекса Отта. Тема его доклада -- "Emacs -- универсальный комбайн". Было очень интересно послушать про Emacs от настоящего мастера ФП и знатока Emacs.
Во-вторых, мы с Алексом специально для встречи написали небольшое пособие по программированию Emacs. Компания Epam помогла нам его опубликовать и даже предоставила дизайнера, который красиво оформил обложку и текст. Спасибо тебе, Руслан!
На фотке -- я и Алекс Отт презентуем пособие "Программирование Emacs для редактирования и рефакторинга кода". Пособие, кстати, раздали бесплатно всем желающим. И много еще осталось. У меня на руках еще 4 штуки лишних, могу подарить.
Электронную версию пособия можно взять здесь.
Свой доклад я посвятил программированию Emacs под свои задачи. Моё личное мнение: Emacs надерет задницу всем текстовым редакторам и IDE только если вы сами будете его программировать для себя. В своем докладе я показал, как разрабатывать скрипты на Emacs Lisp и как автоматизировать нудную рутинную работу. Видео моего выступления можно посмотреть здесь.
Вопросов по программированию Emacs было много, так что мне явно удалось заинтересовать ребят этим текстовым редактором. Спасибо Василию Ременюку за организацию встречи Scala #7 и возможность выступить с докладом о Emacs!


понедельник, 12 сентября 2011 г.

Впечатления о встрече разработчиков Scala

В субботу выступал на небольшой встрече разработчиков Scala. Если в общем и целом: все было здорово, мне очень понравилось. Отдельное спасибо Василию Ременюку за классную организацию встречи. Было все, что нужно: удобное помещение, проектор, ноутбук и даже автомат с бесплатным кофе.

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

Правда, как ни странно, хотя я и попытался разжевать во всех подробностях, что такое лисп и как он используется, все равно в разных вариациях услышал вопрос: "Ну нафиг нам твой Lisp со всеми этими скобочками? Есть ведь JetBrains MPS, Xtext, antlr, бла-бла-бла..."

У меня встречный вопрос: а что вы чаще используете, паттерны или MPS? В Lisp-е я не задумываясь, влегкую, введу новые операторы, сделаю библиотеку паттернов и других общих архитектурных фрагментов; все будет DRY, никакого копи-пейста. И это будет все тот же самый язык, на котором написан основной код проекта.

А вы такое сможете со своей Java, C#, С++, даже с использованием этих дополнительных утилит? И даже если сможете, то почему не делаете?

Тут нет никакой загадки: любой external DSL всегда по определению сложнее в реализации и поддержке, чем аналогичный embedded. И чем сложнее DSL, тем заметнее разница в сложности реализации всей инфраструктуры external DSL (парсер, набор синтаксических правил и т.д.) и embedded DSL, для которого ничего дополнительно приделывать не нужно.

Спасибо всем присутствовавшим, мне было интересно с вами пообщаться. Надеюсь, я заинтересовал вас языком Clojure, и через какое-то время появится наша Belarussian Clojure Users Group.

Материалы моего выступления доступны здесь.

понедельник, 5 сентября 2011 г.

Доклад про Clojure

В эту субботу, 10.09.2011, впервые буду делать доклад по Clojure на небольшой коференции.

Тема доклада: "Предметно-ориентированные языки и Lisp как средство их построения".

Приходите, и вы узнаете:
1. Что такое предметно-ориентированные языки (Domain Specific Languages);
2. Зачем, когда и как применять DSL;
3. Что такое Lisp и зачем в нем столько скобочек;
4. За что лисперы презирают паттерны проектирования;
5. Почему почти невозможно похвастаться перед лиспером возможностями своего любимого языка программирования.

Приглашаем всех желающих!