Search
Write a publication
Pull to refresh
25
0

Пользователь

Send message

Монады с точки зрения теории категорий

Reading time9 min
Views36K

Введение

Кажется, монады в программировании стали загадкой века. И для этого есть две причины:
  • недостаточное знание теории категорий;
  • многие авторы стараюстся не упоминать категории вообще.
Это как говорить об электричестве не используя мат. анализ. Достаточно для замены предохранителя, не хватит, чтобы спроектировать усилитель.

Мы начнём с простого введения в категории и функторы, затем дадим определение монады, приведём простые примеры монад в категориях и в конце приведём монадическую терминологию используемую в языках программирования.

Я уверен, что монады с точки зрения категорий почти элементарны.

Содержание

  1. Категория
  2. Функтор
  3. Естественное преобразование
  4. Монада
  5. Монады исключения и состояния
  6. Монады в программировании
  7. Ссылки
Читать дальше →

Создаем match-3 игру при помощи Flash и ActionScript

Reading time32 min
Views62K
Всем коллегам, здравствуйте.
Я начинающий FlashGame-разработчик. Мне понравился урок по созданию игры на механике match-three. Сам урок я понял с первого раза, а для чего же я сделал перевод? Во-первых, надеюсь это поможет кому-то, кто не силен в «инглише». Во-вторых, перевод позволил мне разобрать весь код по косточкам, очень тщательно. Ну и в-третьих, отталкиваясь от этой механики вы можете начинать создавать мач-3 вашей мечты. И он необязательно должен быть на Flash.

Перед тем как я начну, выдам пару соглашений. Урок взят мной из книги Gary Rosenzweig — «ActionScript 3.0 Game Programming University». Я уже писал в своем личном блоге, что не все наши флеш-разработчики положительно относятся к этой книге. Перевод может показаться немного деревянным и не очень приятным на слух. Некоторые слова, выражения могут иметь более подходящие аналоги в русском языке. Если это будет критично, исправлю. В программе используется дополнительный класс PointBurst. Я не буду его сейчас описывать, а скорее всего сделаю это в личном блоге, т.к. это довольно интересный класс. Просто пока будем знать, что этот класс выдает эффект всплывающих очков в определенном месте.
И последнее, я не придумывал ничего нового, а просто сделал перевод, т.е. все благодарности автору книги Gary Rosenzweig.



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

NOC: Комплексный подход к управлению сетью

Reading time5 min
Views106K


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

Еще в начале 80-х комитет ISO выделил основные компоненты системы управления сетью. Модель получила название FCAPS. По версии ISO, для успешного управления сетью надо уметь управлять отказами (F), конфигурацией оборудования и сервисов (C ), собирать и обрабатывать статистику по потреблению услуг (A), оценивать производительность (P) и централизованно управлять безопасностью (S). Прошедшие три десятка лет не добавили ничего принципиально нового, и все задачи управления сетью так или иначе прыгают вокруг основных составляющих.

Коммерческие комплексы подобного рода весьма дороги и далеко не безгрешны, а среди open-source систем присутсвовал явный и откровенный пробел, что просто подталкивало на разработку своего велосипеда. В результате обобщения нашего личного опыта по созданию и эксплуатации сетей, после долгих проб и ошибок появилась система NOC
Читать дальше →

Gnome Applets. Введение

Reading time5 min
Views4.6K
Апплет — это небольшое приложение, которое интегрированно в Gnome панель и выполняет какие — либо поэтапные действия. В этой серии постов, я хочу рассказать как создаются эти самые gnome applets, от простого к чему-нибудь к более сложному и интересному. Для создания апплетов мы будем использовать PyGTK, но в принципе писать апплеты для Gnome можно и с помощью связки С + GTK+.
Продолжение

Свободный выбор предметов

Reading time2 min
Views15K
Сейчас российское высшее образование начало заимствовать некоторые вещи из западного. Многие заимствования весьма спорны, но есть в западных университетах очень полезная идея — свободный выбор предметов.

У специальности есть набор базовых предметов (физика, математика), которые должны сдать все (чтобы хоть как-то понимать современные знания или хоты бы смеяться над xkcd). Остальные предметы вы выбираете сами.

У каждого предмета есть набор кредитов (например, на IT-направлении история получит меньше кредитов, а ИИ или функциональное программирование больше). Студенты для получения специальности должны сдать все обязательные базовые предметы и набрать определённую сумму кредитов.

Плюсы:
  • Если студент уже решил, чем будет заниматься в будущем, то он может изучить нужные именно ему предметы.
  • Когда студент сам выбрает предмет, то его мотивация будет выше. «Неизбежность порождает сопротивление, выбор порождает ответственность».
  • Получение двойки не равносильно отчислению — можно сдать предмет просто в следующем году. Так что преподавателям не надо тянуть студентов на тройку по непрофильным предметам (типа психологии на IT-направлении).
  • По количеству выбравших курс у университета будет обратная связь по востребованности темы и способностям лектора.
  • Студент сразу учится сам выбирать, а не плыть по течению.

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

Мотивация удаленных сотрудников

Reading time4 min
Views12K
В IT индустрии все чаще встречаются проекты с распределенными командами. Это удобно — спецификация, код, баги, мануалы легко перемещаются из одного конца планеты в другой за доли секунд. Это выгодно — аутсорсинг проектных процессов, будь то разработка, тестирование или саппорт, в Индии или Китае обойдется в 3–5 раз дешевле аналогичных сервисов в странах Европы или США.

Никого не удивишь проектом, в котором сейлз, маркетинг и бизнес анализ находятся в Англии, разработка в России, тестирование и саппорт — в Индии. Компания, в которой я работал, специализировалась именно на таких проектах. Наиболее слабыми местами в них, я бы назвал коммуникации внутри проекта и мотивацию его участников. Эта статья описывает эффективный подход к решению этих проблем в проектах с распределенной командой.

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

Sun убрало Swing Application Framework из Java 7

Reading time2 min
Views8.1K
Я думаю на Хабре существует много разработчиков, которые так или иначе связаны с такой технологией как SWING. Недавно, я прочитал новость, означающую неопределенность его дальнейшего существования, и был удивлен, что здесь про это ничего не написали. Поэтому — читаем.
Читать дальше →

Узнаем параметр Generic-класса в Java

Reading time9 min
Views114K
Если вы не очень часто программируете на Java, то этот топик скорее всего будет для вас бесполезен. Не читайте его :)

Недавно понадобилось решить следующую задачу: определить класс, которым параметризован generic-класс.

Если кто-то сталкивался с подобной задачей, то наверное также сразу попробовал написать что-то вроде этого:
public class AbstractEntityFactory<E extends Entity> {
  public Class getEntityClass() {
    return E.class;
  }
}

Увы, IDE либо компилятор сразу укажут вам на ошибку («cannot select from a type variable» в стандартном компиляторе): " E.class" — не является допустимой конструкцией. Дело в том, что в общем случае во время исполнения программы информации о реальных параметрах нашего generic-класса может уже и не быть. Поэтому такая конструкция в Java не может работать.
Читать дальше →

Календарные типы данных в MySQL: особенности использования

Reading time6 min
Views83K
В MySQL 5 есть несколько типов данных для хранения даты и времени. Это TIMESTAMP, DATE, DATETIME, TIME и YEAR. Все они обладают своими особенностями, и выбор в пользу того или иного календарного типа должен производиться отдельно в каждой конкретной ситуации. Я хотел бы поделиться с вами результатом моего сегодняшнего миниисследования этих типов, в том числе в аспекте работы с временными зонами.


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

Установка Linux из iso-образа под Windows

Reading time2 min
Views161K
Эта статья поможет Вам установить любой дистрибутив Linux из под Windows машины прямо из iso-образа на жестком диске. Статья может помочь владельцам нетбуков, а также тем, кто по каким-либо причинам не может воспользоваться обычным установочным диском.
Читать дальше →

Архитектура предметной области в CMF/CMS системах

Reading time6 min
Views4K
Практически любая информационная система характеризуется наличием системы хранения и оперирования данными. Возьмем, к примеру, обычные веб-сайты. Для их создания обычно используются какие-либо готовые системы (фреймворки или уже готовые CMS), в которых изначально уже заложена какая-то концепция по работе с данными, установившаяся предметная область. Обычно, если разработчик хочется добавить на сайте раздел новостей, он добавляет в интерфейсе CMS компонент, информационный блок, шаблон и т.п. Суть всех этих конструкций одна — создать сущность в БД для хранения (либо каком-то ином хранилище). В итоге имеется реляционная база данных и, зачастую, какой-то объектно-ориентированный обвес, реализующий связку объект-атрибуты-свойства-методы — реализуется предметная область.

Ниже пойдет речь об одном из вариантов архитектуры предметной области. Статья базируется на опыте работы в компании ADV, которая применяет подобные методы в разработке веб-проектов. Сложность изложенного материала позволяет понять его не только разработчикам ПО, но и веб-мастерам, которым надо периодически дорабатывать существующие веб-проекты, добавляя в них новые данные.

Самые простые системы позволяют лишь организовать хранилище, к которому разработчик в дальнейшем обращается и делает всю необходимую работу по обработке данных сам. В таком хранилище есть лишь объект, поля и данные. В более продвинутых системах между объектами появляются связи. Следующий уровень развития — взаимодействие объектов (триггеры, методы и т.п.), а так же наличие программной подсистемы, снимающую с разработчика часть забот по обработке данных.
Читать дальше →

Information

Rating
Does not participate
Registered
Activity