Pull to refresh
35
0
Андрей @sylvio

User

Send message

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

Reading time 9 min
Views 34K

Введение

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

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

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

Содержание

  1. Категория
  2. Функтор
  3. Естественное преобразование
  4. Монада
  5. Монады исключения и состояния
  6. Монады в программировании
  7. Ссылки
Читать дальше →
Total votes 126: ↑105 and ↓21 +84
Comments 150

Просто о Хиндли-Милнере

Reading time 5 min
Views 20K

Введение


Robert MilnerЕсли вы когда-нибудь интересовались не слишком популярными языками, то должно быть слышали о «Хиндли-Милнере». Этот алгоритм вывода типов используются в F# и Haskell и OCaml, как и в их предшественнике ML. Некоторые исследователи даже пытаются использовать ХМ для оптимизации динамических языков вроде Ruby, JavaScript и Clojure.

И не смотря на его распространенность, до сих пор не было простого и понятного объяснения, что же это такое. Как же эта магия работает? Всегда ли выводимые типы будут верными? Или чем Хиндли-Милнер лучше, скажем, Java? И пока те, кто действительно знает что такое ХМ будут восстанавливаться от очередного умственного перенапряжения, мы попробуем разобраться в этом сами.
Читать дальше →
Total votes 65: ↑62 and ↓3 +59
Comments 12

Pathogen. Организуем плагины

Reading time 3 min
Views 14K

Проблема


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

Решение


Pathogen позволяет устанавливать плагины в отдельные директории совершенно прозрачно для вима, причем плагины размещенные «по-старому» продолжат работать (например коллекция цветовых схем).

Пример директорий на рабочей машине:
$ ls ~/.vim/bundle/
eclim          nerdtree             vim-align     vim-haml      vim-ruby           vim-vividchalk
gist           PreciseJump          VimCalc       vim-markdown  vim-ruby-debugger  wombat256mod
IndexedSearch  snipmate.vim         vim-cucumber  vim-rails     vim-shoulda
jquery         SuperTab-continued.  vim-fugitive  vim-repeat    vim-surround
matchit.zip    textile.vim          vim-git       Vim-R-plugin  vim-tcomment

Читать дальше →
Total votes 26: ↑21 and ↓5 +16
Comments 23

Вкладки

Reading time 2 min
Views 32K

Открываем


VIM Tabs
Открыть вкладку можно тремя разными способами, самый простой и интуитивный :tabnew в нормальном режиме, он откроет новую вкладку с пустым буфером. Можно сразу открыть вкладку с файлом, передав его имя как параметр

:tabnew futuri.co

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

vim -p habra.sh habr.py
Читать дальше →
Total votes 72: ↑59 and ↓13 +46
Comments 21

Масштабируемость реляционных БД

Reading time 2 min
Views 9.8K

Q:


В Facebook используют MySQL зная, что он плохо масштабируется (или здесь какая-то особая магия?). Я хотел спросить, из каких соображений они выбрали MySQL? Используют ли JOIN'ы? И не планируют ли перейти на другую БД?


A:


Отвечает Adam D'Angelo, бывший CTO Facebook, сейчас он развивает свой стартап Quora:
  1. Если разбивать данные по разным серверам на уровне приложения, то масштабируемость MySQL не такая уж и большая проблема. На 2008 год, в Facebook [1] у нас было 1800 MySQL серверов для которых требовалось всего два администратора. Конечно, вы не сможете сделать JOIN с данными с разных серверов, но NoSQL-базы вам тоже этого не позволят. Нет никаких данных о том, что в Facebook используют Cassandr'у как основное хранилище, и, кажется, что единственное, для чего она там нужна — это поиск по входящим сообщениям. [2]

Читать дальше →
Total votes 78: ↑74 and ↓4 +70
Comments 34

Пишем свой XML-парсер

Reading time 9 min
Views 71K

Предыстория


Решив запустить небольшой сервис на подаренном мне хостинге, оказалось, что там нету ни одного xml-парсера: ни SimpleXML, ни DOMXML, а только libxml и xml-rpc. Недолго думая, я решил написать свой. Мне требовался разбор не сложных rss-лент, поэтому хватило достаточно просто класса xml => array.[1]

Но для интересной статьи этого было явно не достаточно, поэтому сейчас мы напишем свою замену для SimpleXML. А заодно пробежимся по многим интересным возможностям PHP 5.

Постановка задачи


Доступ к элементам у нас будет осуществляться как доступ к свойствам класса, например $xml->element, а доступ к атрибутам элемента, как к массиву, те $xml->element['attr'], также реализуем проверку на существование атрибута при помощи isset() и итерацию по элементам при помощи foreach. И так, начнем.
Читать дальше →
Total votes 1: ↑1 and ↓0 +1
Comments 42

Самый недооцененный язык в мире

Reading time 5 min
Views 8.5K
JavaScript logo
JavaScript, также известный как Mocha, или LiveScript, или JScript или ECMAScript один из самых популярных языков программирования. Фактически каждый персональный компьютер имеет его интерпретатор и активно им пользуется. JavaScript всецело обязан своей популярностью тому, что он стал основным скриптовым языком для веба.

Несмотря на его популярность, немногие знают, что JavaScript — это очень хороший объектно-ориентированный язык с множеством возможностей. Почему многие этого не понимают? Почему этот язык настолько не понят?

Читать дальше →
Total votes 101: ↑95 and ↓6 +89
Comments 144

Глючные комментарии

Reading time 1 min
Views 620
При ответе на комментарий, иногда он добавляется как ответ к топику, а когда комментишь еще раз — добавляется именно к тому комментарию, на который хотел ответить в первый раз.
Судя по-всему такая ошибка не только у меня.
[XP SP2, Firefox 2.0.0.12]
Total votes 41: ↑39 and ↓2 +37
Comments 34

Information

Rating
Does not participate
Location
Санкт-Петербург и область, Россия
Registered
Activity