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

    • Перевод

    Введение

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

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

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

    Содержание

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

    Доброго времени суток!

    Недавно, начав изучать Haskell, несколько раз пытался подступиться к монадам, но всё никик не мог, что назывется, нить ухватить (м.б. дело в нехватке базовых знаний). Помогла замечательная книга Learn you a Haskell for great Good.
    Начитался, проникся, решил донести до коллег/друзей. Разрабатываем на Python, казалось бы, незачем сильно вникать во «всю эту функциональщину», по крайней мере дальше filter/map/reduce. Но расширение кругозора, штука, бесспорно, полезная, поэтому я решил реализовать пару монад на Python, да так чтобы это не вылилось в полный unpythonic. Конечно же, не я первый и не я последний, было и есть несколько реализаций монад на основе Python, но все те реализации, что встречались мне, либо полностью unpythonic, либо сложны для понимания далёкому от самой концепции человеку. Пришлось изобретать свой велосипед, который, впрочем, позволяет ухватить суть…
    Читать дальше →
  • Ограничение количества запросов — Raterlimiter

      Если вы опасаетесь, что ваш веб-сервис могут заDOSить нерадивые пользователи, или у вас просто слабенький сервер, то вы уже задумывались над ограничением количества запросов от каждого пользователя. По-хорошему — это только один из необходимых эшелонов обороны. Конечно, от серьёзной атаки такое ограничение не убережёт, но с точки зрения цена/качество вполне подходящее

      Недавно я начал активно заниматься Эрлангом. Ну и, как обычно, для закрепления материала реализовал несложный веб-сервис на Mochiweb. Mochiweb — вполне достойный фреймворк для создания веб-приложений, но возможности лимитировать количество запросов от одного клиента я не нашёл. Вот и сделал это самостоятельно.

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

      Задача

      Итак, имеем Erlang/OTP, Mochiweb, rebar. Хочется считать количество запросов от конкретного пользователя и отдавать ему 413 код ошибки, если запросы идут слишком часто. Клиент идентифицируется своим IP адресом. Тем самым, который отдает mochiweb_request:get(peer).

      Задача не такая сложная, но, возможно, готовое решение сэкономит кому-то время.
      Читать дальше →
    • Erlang. Рекомендации к оформлению кода

      Не так давно, в команду пришлось приглашать нового программиста и знакомить его с Erlang. Для ускорения процесса обучения я решил перевести уже давно лежавший у меня материал Erlang Programming Rules and Conventions. Чем в принципе и хочу поделиться с хабровчанами. Надеюсь что он будет полезен тем, кто собирается изучать или уже использует этот замечательный язык. Сразу скажу, что перевод вольный, так что не критикуйте сильно.
      Читать дальше →
    • Adobe Edge: редактор анимации HTML5/JavaScript

        Adobe сегодня выпустила новый инструмент Adobe Edge (public preview), который предназначен для создания простого анимированного контента на открытых стандартах: HTML5, JavaScript и CSS3. Предполагается, что для растущего числа мобильных устройств HTML5 более приемлем, чем Flash. В первую очередь для мобильного рынка и создан новый редактор. Впрочем, никто не мешает делать с его помощью любую веб-анимацию HTML5, а в будущем — HTML5-игры и другие приложения.

        Adobe Edge призван удачно дополнить Flash и сохранить позиции Adobe как лидера на рынке ПО для веб-дизайна. Эта компания заявляет, что давно продвигает технологии HTML, в качестве примеров можно привести такие продукты как Dreamweaver, Illustrator, Digital Publishing Suite и недавно вышедший Flash-to-HTML5 конвертер Wallaby.

        Редактор Adobe Edge распространяется бесплатно, скачать можно здесь. Версия 1.0 выйдет в следующем году.
        Функционал и интерфейс редактора Adobe Edge
      • Взлом капчи LostFilm (php)

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


        Капча показалась мне довольно простой (хоть и не лишена она дольки оригинальности).
        Читать дальше →
      • Как лучше всего поучаствовать в Imagine Cup Software Design, поехать в Австралию и победить

          Приближается 15 февраля 2012 г. – срок подачи заявок на конкурс программных проектов Imagine Cup. В этой связи мы всё чаще слышим от студентов примерно следующее: «Да, Imagine Cup – это очень интересно, и нам хотелось бы поехать на финал в Австралию, но мы совсем не знаем, с чего начать. Не можем придумать гениальную идею для проекта…» или «я по вечерам делаю отличный проект, но он совсем не подходит для Imagine Cup»



          Специально для того, чтобы помочь студентам избежать таких сомнений, придумать идею и поучаствовать в конкурсе наиболее эффективно — мы проводим мероприятия Imagine Cup Student Camp. Такое мероприятие уже прошло в Москве, а 11 февраля будет в Питере. Кроме того, специально для тех, кто живёт далеко — мы проведём сокращенную версию мероприятия, Imagine Cup Virtual Student Camp 26 января в 15:00 по Москве.

          Ниже я хотел бы поделиться своими соображениями по поводу того, как и с чего можно начать.
          Читать дальше →
          • +10
          • 3,6k
          • 3
        • Использование Rebar и GProc

            Использование Rebar



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

            При разработке на Erlang часто приходится собирать зависимости из разных источников, следить за их нужными версиями, создавать OTP-релизы для распространения проектов. Дела достаточно рутинные и неприятные. Для того, чтобы разработка меньше доставляла неприятных моментов, компанией Basho был создан очень удобный инструмент — Rebar. В этой статье я постараюсь раскрыть преимущества от его использования на реальном примере с использованием сторонних зависимостей и созданием конфигурируемых OTP-релизов.
            Читать дальше →
          • MapReduce для начинающих на Erlang'e

              Я продолжаю свое погружение в Эрланг. Уже есть хитрый план переписать один из наших сервисов для мониторинга на Эрланге. Мы тут осваиваем облака Windows Azure и Amazon EC2 в качестве платформы для некоторых продуктов и внутренних задач типа QA, поэтому возможность использовать много ядер и машин без переписывания кода выглядить перспективно.

              Итак, для начала простой, но реальный пример — есть проект ~2000 файлов. Надо составить список используемых переменных окружения. То есть найти вхождения строк «getenv(...)» и «GetVariable(...)» (это наш wrapper) и выдрать из них параметр.

              Задача незамысловатая и давно решается программой на C++, которая даже обход каталогов не делает, а просто вызывает юниксовый «find», генерирующий список файлов по маске, и затем по списку лопатит файлы. На 2000 файлах работает пару секунд в один поток.

              Теперь Эрланг. Тут хочется замутить что-нибудь более кучерявое, чем последовательный обход файлов. MapReduce как раз в тему — можно составить список файлов, затем анализ каждого файла делать параллельно (Map), аккумулируя найденных имена переменных, и в конце обработать все полученные входждение (Reduce), в нашем случае просто подсчитать количество вхождения каждой переменной.

              Далее
            • На парусах HTML5. Как новые технологии меняют современный веб

                Статья по следам моего доклада на концеренции User Experience`11.

                Что такое HTML5?



                Сегодня про HTML5 их числа тех, кто так или иначе связан с веб-разработкой, не слышал только ленивый. Вы не сильно прогадаете, предположив, что на каждой модной конференции, где есть что-то про веб, почти наверняка, звучит и что-то про HTML5. Практически каждая крупная компания, связанная с вебом, будь то Google, Apple, Microsoft, Amazon, Adobe, Oracle, Facebook, Яндекс, Mail.ru… говорит что-нибудь про HTML5, расписывается в любви на века и приверженности продвижению и развитию HTML5. Yeah! (Opera и Mozilla, безусловно, тоже в этом списке.)

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

                Огромные перспективы, новая волна развития веба, новое поколение веб-приложений! Круто.
                Читать дальше →