За время работы разработчиком Access набралась куча полезностей, которую считаю своим долгом выложить на Хабр. Многие из этих сниппетов находятся в сети, а некоторые находятся с трудом или безнадежно затеряны.


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

Комбинаторные (монадические) парсеры достаточно хорошо известны (wikibooks). Они представляют из себя библиотеку маленьких парсеров, которые распознают простые элементы грамматики, и способы объединять несколько парсеров в один (комбинировать — от сюда и название). Монадические они потому что один из способов комбинирования, порождения парсера остатка текста на основе результата разбора начала, удовлетворяет условиям, накладываемым на математический объект «монада». В языке Haskell это позволяет воспользоваться мощным сервисом, предоставляемым языком и библиотеками. В других языках название «монадические» можно смело игнорировать — это не будет мешать их реализации и использованию, включая упомянутую выше операцию «bind».

Проще всего комбинаторные парсеры реализуются в языках с поддержкой замыканий, но можно воспользоваться и классическим ООП (пример описан Rebecca Parsons в книге Мартина Фаулера «Предметно-ориентированные языки»).
К преимуществам комбинаторных парсеров относится простота использования (запись на языке программирования практически не отличается от обычного описания грамматики), независимость от препроцессора (как yacc/bison, happy или ocamlyacc), возможность реализовать некоторые элементы, плохо укладывающиеся в контекстно-свободную грамматику, прямо на языке программирования общего назначения.

К недостаткам — сложность составления сообщений об ошибке, неспособность работать с леворекурсивной грамматикой (приводит к зацикливанию), а так же то, что очень легко сделать этот парсер не эффективным по быстродействию и памяти. (Одна из причин — компилятор не может произвести оптимизацию в терминах грамматики, так как работает на уровне языка программирования. Но есть и другие тонкости, требующие внимания, если требуется эффективность.)
Как альтернативу можно рассмотреть реализации в виде макросов (например OCaml streams parsers). В Perl6 поддержка грамматик встроена в язык.

Наследование

Персер конкретного языка состоит из множества более специализированных парсеров, ссылающихся друг на друга. В этом отношении парсеры напоминают методы некого объекта. Возникает желание порождать парсеры новых версий языков, подменяя отдельные подпарсеры (как это делается в паттерне проектирования «шаблонный метод» из ООП). Для экспериментов с этим подходом (а так же в порядке изучения очередного языка) я выбрал язык Julia — динамически-типизированном с особым подходом к наследованию (подобному CLOS из Common Lisp и R).
В отличие от обычных комбинаторных парсеров, подход с наследованием является экспериментальным (хотя в некотором виде поддерживается библиотекой макросов OCaml и языком Perl6). Пока он порождает не очень читабельный код. Исходный код доступен на Github.
Читать дальше →

Введение


Всем привет, в этой статье я постараюсь кратко рассказать о компонентах, которые составляют архитектуру CMS, их много (думаю все они не поместятся в статью), контроллерах, модулях, плагинах и организации подключения css, js файлов.
Читать дальше →

Всем привет, на Хабре уже вот как 6 лет и только сейчас решился написать свой первый пост, хотя до сих пор не уверен что это хорошая идея.

Предисловие


Уже более 6 лет я занимаюсь разработкой web приложений, начинал с верстки, javascript, php, python и т.д., в общем за все время я прошел все этапы создания сайта от дизайна в фотошопе и заканчивая созданием полноценного сайта.

Краткий рассказ о том как я разрабатывал CMS

Лирическое вступление


В связи с недавним отпочкованием от Хабрахабра нового ресурса, у меня возникла нужда обустроить удобный способ чтения обоих ресурсов. Первая мысль, разумеется, была об RSS, благо движок у обоих сайтов его поддерживает. Оставались сущие пустяки — найти хороший RSS-агрегатор, который можно было бы установить на малосильную VPS (поскольку участь Google Reader'а несколько охладила желание полагаться на сторонний сервис).
Читать дальше →



Когда мы объявили, что ищем новый дом для CodeIgniter, нас практически смыло волной электронных писем от потенциальных кандидатов (кстати, письма до сих пор продолжают поступать). Перед нами возник на первый взгляд простой вопрос: кому мы можем доверить поддержку фреймворка? Но найти верный ответ оказалось сложнее — нам нельзя было ошибиться.

Мы быстро отбросили тех, у кого не было опыта, отклонили заявки тех, у кого не было достаточных средств или времени на поддержку столь крупного проекта. Мы также отказали тем, с кем не сошлись в видении будущего фреймворка. И всё равно осталось много хороших кандидатов с достаточными силами, возможностями и с хорошими идеями. Но один кандидат всё же выделялся на фоне остальных. Читать дальше →

Здравствуйте, уважаемые читатели. В данной статье хотелось бы написать о новой версии CakePHP и возродить интерес к этому замечательному PHP фреймворку. Последняя заметка в блоге о CakePHP датирована почти годом назад и многие могли подумать, что фреймворк прекратил своё существование, однако это не так. Он очень активно развивается и весьма популярен в западных странах и его используют такие компании, как BMW и Hyundai.

Текущая стабильная версия CakePHP – 2.5.5. Давайте кратко посмотрим, какие возможности предоставляет этот фреймворк сейчас, а затем подробно остановимся на новинках, которые появятся в 3.0.0.
Читать дальше →



Партнерам Apple пришлось изменить планы по выпуску нового iPad с увеличенной диагональю экрана — дата сместилась на начало следующего года. Как сообщил WSJ осведомленный источник, это связано с большими заказами на новые смартфоны iPhone.

По словам представителя индустрии, поставщики Apple изначально планировали приступить к полномасштабному выпуску больших планшетов в декабре этого года.
Читать дальше →

Универсальный механизм для многих браузеров для работы с XML и его трансформация с помощью XSLT прям на странице.


Этот вопрос решают разными средствами и многие из них вряд ли нормально работают в доброй половине бродилок (браузеров). Моему глазу попался JSXML и с того момента и до сегодняшнего дня я стал его использовать. Что в нем понравилось — так это необходимый минимум для работы, выполняющий свою работу без излишеств. Да, он не является «Монстром-комбайном», только самое необходимое по конкретной задаче и это работает без нареканий.
Читать дальше →