• Вероятностный морфологический анализатор русского и украинского языков на PHP

      Перед каждым разработчиком сайтов рано или поздно становится вопрос о реализации поиска по сайту. Желательно чтобы поиск был по основе слова, т.е. не учитывал окончания слов. Для этой цели используются программы стеммеры, которые и выделяют из слова основу. Многие стеммеры работают на основе словаря, и вот чтобы не использовать огромные словари в небольших и средних проектах можно использовать вероятностный морфологический анализатор. Его отличительная особенность в относительно малом размере базы данных и соответственно в отсутствии нагрузки на базу. Без больших потерь в качестве выделения основы.

      Стемминг — это процесс нахождения основы слова для заданного исходного слова. Основа слова необязательно совпадает с морфологическим корнем слова. Алгоритм стемминга представляет собой давнюю проблему в области компьютерных наук. Данный процесс применяется в поиcковых системах для обобщения поискового запроса пользователя.
      Конкретные реализации стемминга называются алгоритм стемминга или просто стеммер.

      Заинтриговал?
    • Устранение помойки в /etc/hosts

        imageРазработчику, проекты которого так или иначе связаны с web, часто приходится запускать тестовую среду на своей основной машине. Для сопоставления доменных имён используют /etc/hosts. Однако, когда необходим доступ к сайту в интернете, который уже перенаправлен на localhost, приходится этот файл снова перелопачивать.
        У себя я решил эту проблему помещением браузеров для тестов в полувиртуальную среду. Различные виртуализаторы для этих целей использовать не особо удобно, поскольку они создают виртуальную машину со всеми вытекающими. Выбор пал на старый добрый chroot, который позволяет сделать систему со своим отдельным /etc/hosts, при этом её не сильно изолируя её от основной.

        Возможно, кому-то это покажется четырёхколёсным велосипедом, но для меня данное решение оказалось очень удобным.
        Итак, поехали
      • Ubuntu, fake DNS Server или настройка локального DNS сервера для веб-разработчика

          Зачем это надо.
          На рабочей станции разработчика есть NN локально поднятых проектов. Этот разработчик для каждого проекта проделывает следующее:
          1. Для работы с локальной копией проекта редактирует конфиг своего веб сервера (apache, lighttpd etc.) и указывает в конфиге имя хоста для этого локального проекта.
          2. Потом перезапускает веб сервер.
          3. Потом идет редактировать /etc/hosts Прописывает там имя нового хоста и локальный ip.
          4. Потом выясняет что этот прописанный хост перекрывает тот, что внезапно нужен в интернете, или он ошибся когда прописал имя в конфиге веб-сервера или в hosts.
          В итоге всего этого занудства как правило тратится драгоценная нервная энергия которую можно потратить более эффективно на что-то поинтереснее.

          Что я предлагаю сделать.
          Читать дальше →
        • Знакомство с библиотекой libevent на примере создания простейшего Web-сервера картинок

            В данной статье я покажу как используя библиотеку libevent, написать простейший Web-сервер, который будет по запросу клиентов выдавать файлы jpeg картинок.

            Библиотека libevent предоставляет программистам доступ к кроссплатформенному асинхронному сетевому API. На основе данной библиотеки можно создавать высокопроизводительные сетевые приложения. Например, libevent используется в таких известных приложениях как Memcached (распределённая система кэширования) и TOR (распределённая анонимная сеть).

            Читать дальше →
          • Шаблонизатор PHPTAL

              У данного шаблонизатора подход, который отличается от прочих типов шаблонизаторов. И это не может не заинтересовать.
              По запросу PHPTAL хабр выдает только одну ссылку,
              TAL — это Атрибутивный Язык Шаблонов. Он так называется, потому что команды языка являются атрибутами тегов.
              читать дальше
            • Редакторы кода с помощью javascript

                Очень часто в web-проектах надо использовать визуальный редактор кода (richtext code editor), похожий на существующие IDE, с номерами строк и подсветкой кода. Наиболее часто он используется в редактировании исходного кода статьи или шаблонов в админке. В этой статье я перечислю существующие скрипты по аналогии со списком WYSIWYG-редакторов.
                Практически все существующие визуальные редакторы создают iframe и генерируют внутри страницу в соответсвии с данными javascript-объекта, занимающимся всеми задачами по генерации кода и обработке клавиш.
                Основанные на iframe:
                • EditArea — наиболее популярный редактор благодаря табуляции, gzip, совместимость пространства имён с другими библиотеками
                • CodePress — парсит SQL, Perl, C#, XSL, ASP, VBscript. Отдельные движки для разных браузеров (gecko=firefox, ie, opera). Создаётся iframe со внутренним CodePress'объектом с обращением через contentWindow. Сразу внутри скрипта идёт поиск textarea-элементов по классу, так что с динамическими ajax-редакторами прийдётся изменять скрипт. Кроме того нумерация (до 1500) строк сделана при помощи одной картинки
                • CodeMirror — парсит JS, HTML, CSS

                Напомню что iframe не соответсвует XHTML спецификации, а с использовать
                предложенный тэг object с не сильно получится, из-за ограничения на
                доступ внутренних dom-элементов (поправьте если я неправ).
                Основанные на div'ах
                • MDK-editor — самый нормальный редактор, есть контекстное меню. В минусы можно отнести некрасивый скин, небольшую тормознутость и неизвестную лицензию на использование.
                • Helene — вместо iframe используется фоновый div и динамически позиционируемая textarea поверх. Поскольку изменяется только один ряд, то невозможно выделить нескольких строк сразу
                • 9ne — похож на консоль, но нет возможности выделения всей строки Shift+End. Эмулирует каретку мигающим div'ом.

                PS. Аннонсирую что в скором времени выйдет блог-движок моего производства…

                Оригинал
              • Морфологический поиск

                  Точный поиск, реализуемый в базах данных это очень хорошо, когда дело касается точных фраз. Но что делать, когда среди документов есть Киевская карта но нету Карты Киева? В дело включаются языковые фильтры.Во-первых уже на лексическом уровне становится сложно оперировать с монолитным блоком текста что-бы учитывать всевозможные перестановки слов и расстояния между ними. Во-вторых, чем глубже копать в язык, тем ясней становится то, что семантический web — невероятно сложная планка для автоматических анализаторов и генераторов каких-то образов и моделей, что уж говорить про то что-бы написать RDF вручную.Морфология изучает изменение формы объектов в разных областях науки (ботанике например). Поэтому есть два пути — либо
                  учитывать все формы при поиске, либо вырезать корень слова и искать
                  только по нему. Последний способ называется stemming, отличается
                  быстротой, простотой и не нуждается в словарях. Именно его используют Битрикс и MS Sharepoint, Sphinx. Проблемы возникают со словами где корень изменчив (бег-бежать, расти-прирост, лев-львица). Я не буду рассказывать про стемминг, посмотрите как это реализовано php с русской морфологией. Меня больше интересуют словари. Национальный корпус русского языка приводит примерно какие характеристики могут иметься у любого слова. Теперь мы плавно подходим к пониманию того что нам необходима современная морфологическая база слов (RMU, AOT), прототип для семантической сети.

                  Читать дальше →
                • Эффективный поиск по сайту. Постановка проблем — поиск решений.

                    Это перепечатка статьи Ивана Никитина, которая в сентябре была опубликованна на нашем сайте Nomagic.ru. Данная статья содержит только постановку задачи и обсуждению возможных решений. Ссылки на статьи с описанием решения поставленной задачи c помощью LiveSearch API на ASP и PHP можно найти в конце статьи.



                    У любого современного сайта, на котором присутствуют более 5 – 10 страниц с контентом, должна быть поисковая система. Как бы хорошо мы не планировали навигационную панель, или каталог товаров/разделов сайта, все равно любые наши попытки интуитивно-понятной систематизации, в конечном итоге, будут непонятны 101-му пользователю сайта.
                    Читать дальше →
                  • mod_rewrite — просто о сложном

                      Что это такое?


                      mod_rewrite — это модуль для веб-сервера Apache, предназначенный для преобразования URL-ов. Модуль использует в своей работе правила, которые могут быть описаны как в конфигурации сервера (httpd.conf), так и в файлах .htaccess непосредственно в файловой структуре Вашего сайта. Правила описываются в виде регулярных выражений PCRE

                      Hello world


                      Простейший пример. Допустим, Вы захотели, чтобы никто не знал, что Ваш сайт написан на PHP и решили замаскировать расширения файлов. Можно, конечно, внести соответствующую директиву в конфигурацию Apache и тогда все файлы с расширением ".msl" («My Super Language») будут обрабатываться интерпретатором PHP. Но можно поступить проще:
                      создаем в корне нашего сайта файл .htaccess со следующим содержимым
                      RewriteEngine On
                      RewriteBase /
                      RewriteRule ^(.*)\.msl$ $1.php [QSA,L]


                      Первая директива включает механизм mod_rewrite в текущей папке и во всех ее подпапках. Вторая указывает модулю mod_rewrite, что текущая папка в файловой системе соответствует корню сайта. Третья — непосредственно правило преобразования URL.

                      Прочесть его можно так:
                      Если сразу после начала строки ("^") идет произвольное количество любых символов ( "(.*)" ), причем мы хотим запомнить, что именно это за символы, окружая их скобками, затем идет точка ("\.") (экранируем точку, потому что одиночная точка — это просто любой символ), затем символы «msl» и на этом строка заканчивается ("$"), то заменим исходный URL на следующий: возьмем первую запомненную подстроку в скобках из правила, прибавим к ней ".php", добавим все дополнительные параметры адреса, которые могли быть "[QSA]" и на этом закончим, не будем применять дальнейшие преобразования, если они есть "[L]"

                      Все, теперь Вы можете смело менять все ссылки, заканчивающиеся на ".php" на ".msl" и писать в своем блоге, что изобрели новый скриптовый язык. Apache, встретив ссылку на «index.msl» с помощью mod_rewrite на лету преобразует ее в «index.php» и вызовет нужный скрипт.

                      А что еще умеет mod_rewrite?


                      Читать дальше →
                    • Свой минимальный grid CSS-фреймворк. Что в нем должно быть?

                        Сделав вид, что не знаю о холиварах вокруг css-фреймворков и ненависти к велосипедам, поделюсь своими мыслями («Еще один все понял» © Лепрозорий) по поводу надобности и удобства использования сабжа.

                        Их есть куча и они обладают своей идеологией, а, например 960gs, Blueprint, YUI grids — самые мне известные и опробованные на собственной коже.
                        Читать дальше →
                      • Кэшинг пакетов для Composer

                          Используя современный подход к разработке проектов начинаешь пользоваться прелестями менеджера пакетов, в случаe с разработкой на PHP это Composer. В данной статье мы кратко рассмотрим Composer и далее речь пойдёт о настройке локального кэша пакетов.
                          Читать дальше →
                          • +15
                          • 14,4k
                          • 9
                        • Symfony CMF. Часть 1, хранение данных

                            image

                            Вместо предисловия


                            Я программирую на Yii уже два года и в последнее время начал засматриваться на Symfony Framework 2. Отчасти меня привлекает продуманная архитектура, отчасти слабая связность компонентов, отчасти гибкость построенных приложений. Сразу после того, как я разобрался с основным устройством нового фреймворка, мне стало интересно, возможно ли на нем построить CMS, а может быть, даже воспользоваться готовой.

                            Коробочного решения пока не придумали, однако, каким-то образом я забрел на сайт проекта Symfony CMF и оказался сражен наповал методичным подходом к решению тех проблем, с которыми я сталкивался в бытность работы на конвеере по натягиванию дизайна на какой-нибудь Друпал. На Хабре публикаций про именно CMF нет, да и сам проект еще очень сырой, однако в перспективе выглядит все интересно, хоть местами и есть к чему придраться.

                            Symfony CMF


                            Проект Symfony CMF призван упростить разработку функционала, присущего CMS, для всех, кто использует в работе Symfony Framework 2.
                            Основные особенности проекта:

                            • слабая связность компонентов
                            • масштабируемость
                            • удобство
                            • тестируемость

                            Стоит сделать акцент на слове CMF — проект не является CMS сам по себе, это именно фреймворк. В отличие от CMS, где все компоненты жестко завязаны друг на друге, в Symfony CMF вы:

                            • используете все, что хочется
                            • заменяете то, что не нравится
                            • игнорируете то, что не требуется

                            То есть, вам дан набор модульных инструментов для разработки, а не готовое приложение «под ключ», хотя уже разработаны базовые бандлы, обеспечивающие CMS-функционал.
                            Зачем еще один CMF?
                          • Unix как IDE: Работа с текстом

                            • Перевод
                            Текстовый редактор — это основной инструмент для любого программиста, вот почему вопрос его выбора становится причиной яростных дебатов. Unix традиционно тесно связан с двумя своими многолетними фаворитами, Emacs и Vi, и их современными версиями GNU Emacs и Vim. Эти редакторы имеют очень разный подход к редактированию текста, но при этом сравнимы по мощи.

                            Поскольку я отношусь к секте Vim, далее мы обсудим неисчерпаемые возможности этого редактора, а также инструменты командной строки, вызываемые прямо из Vim для расширения встроенной функциональности. Некоторые из обсуждаемых дальше принципов могут быть применимы и для Emacs, но не для простых редакторов, вроде Nano.
                            Читать дальше →
                          • Архитектура форм в Symfony2

                            • Перевод
                            Картинка для привлечения внимания

                            В Symfony 2 появился совершенно новый компонент для работы с формами, который, насколько я знаю, легко заменит большинство подобных библиотек для PHP и по функционалу, и по возможности в расширении оного (конечно, если не брать в расчет небольшие недостатки при работе с JavaScript). Разработка этого компонента заняла более двух лет, хотя думать над ним я начал еще где-то в 2009-ом году или даже раньше. С каждой новой версией этот компонент становится все более и более стабильным, а полностью стабильная версия ожидается с выходом Symfony 2.2.

                            Данный пост приурочен к выходу Zend Framework 2 Form RFC, так как мне кажется, что его разработчики, по сути, сделали много того, что уже было сделано нами. Конечно же всем ясно, что Zend Framework 2 должен обладать прослойкой для работы с формами, который полностью учитывает особенности компонентов, поставляемых с фреймворком. Целью данного поста является попытка показать, что Symfony2 Forms прекрасно подходит под эти требования. Функционал, присущий Symfony2, может быть легко убран: код для обработки форм и все уровни абстракций полностью независимы. Привязать же поддержку особенностей компонентов Zend-а так же не составит труда.

                            Создание обобщенной библиотеки для работы с формами, которая покрывает все возможные сценарии использования, возникающие при разработке, было непростым испытанием, долгим и сложным делом, которое, к тому же, еще не завершено. Сотрудничество и дальнейшее совместное развитие должно помочь добиться более гибкого и простого управления формами из PHP.
                            Читать дальше →
                          • Завершён перевод книги «Pro Git»

                              Что может быть лучшим подарком на день знаний для программиста? Конечно, полезная книга ;) Поэтому команда переводчиков «Pro Git» поднапряглась и доделала перевод книги на русский язык.

                              «Pro Git» — это довольно обширная обучающая книга о Git от Скотта Шакона — активного участника разработки проектов Git и GitHub. Автор рассматривает в тексте всевозможные аспекты работы с Git'ом, начиная с установки программы и базовых принципов работы децентрализованных систем контроля версий, и заканчивая рассмотрением внутреннего устройства Git'а и созданием валидных объектов в базе Git'а собственными руками. Несмотря на довольно обширный материал и затрагивание довольно специфических тем, книга написана довольно простым языком, содержит массу примеров и иллюстраций, и поэтому должна быть понятна и новичкам, только начинающим знакомиться с системами контроля версий.

                              Последняя версия перевода книги доступна в форматах pdf, epub, mobi.
                              Также доступна онлайн-версия перевода, но она, к сожалению, не обновлялась с мая.
                              Читать дальше →
                            • Документация к cms Fine Cut Engine

                                Всем доброй пятницы!


                                Может быть кому-нибудь пригодится: Fine Cut Engine?

                                Это админка для сайта-визитки.

                                В настоящий момент документация Fine Cut Engine есть только на английском, топик предназначен для исправления этого недочета. Upd: для удобства ссылка на downloads.

                                Заявленные Фичи:
                                — Keep it Simple: настолько, насколько было возможно
                                Без базы данных o_0
                                — Free from Fat: практически отсутствует back-end
                                — Free to Use: MIT или GPL
                                — Хорошо интегрируется: можно включить всё что угодно в шаблон
                                — Без попкорна: это не кино
                                — Там нет ложки: мы помним The Matrix :)

                                UPD 1: элементарная файловая «CMS» с одно-страничным web 2.0 UI, ни малейшего намёка на излишества, и силу этой же специфики — весьма шустро отдающая запросы (как, впрочем, и множество подобных), спасибо heathen за комментарий. В работе с подобными движками лично меня постоянно не устраивала необходимость переходов по ссылкам при создании содержимого, а так же не хватало дерева в котором будет виден URL редактируемой страницы и структура сайта в целом.

                                UPD 2: в самой глубине документации есть ссылка на Google Grops.

                                UPD 3: сайт проекта это его же дефолтный шаблон (Twitter Bootstrap) с дефолтным же содержимым.
                                В админке используется jQuery с разными компонентами, а так же elFinder и ACE Editor (тот самый что и в Cloud9 IDE), knokout.js, замечательный плагин для JSON (перечень «всего» тут ).

                                Приступим ?
                                • +15
                                • 3,4k
                                • 8
                              • UICloud: Самая большая база пользовательских интерфейсов



                                  UICloud — это база бесплатных пользовательских интерфейсов с поисковой системой, рейтингом и каталогизатором в которой собрано все от исходников в формате PSD, до готовых решений на HTML, CSS или jQuery: формы, слайдеры, кнопки, календари, элементы и полноценные интерфейсы для мобильных и веб приложений. В проекте уже сейчас можно найти практически все что нужно для облегчения процесса разработки дизайнерам и разработчикам.

                                  На данный момент в базе 23586 элементов и почти тысяча UI-сэтов включающие в себя готовые решения в едином стиле. Проект создан Британской студией Double-J Design целью проекта является создание самой обширной UI базы.
                                  • +159
                                  • 32,5k
                                  • 40
                                • Реализация MVC паттерна на примере создания сайта-визитки на PHP

                                    mvc
                                    Как вы уже догадались из названия статьи, сегодня речь пойдет о самом популярном, разве что после Singleton, шаблоне проектирования MVC, хотя такое сравнение не совсем уместно. Понимание концепции MVC может помочь вам в рефакторинге и разрешении неприятных ситуаций в которые, возможно попал ваш проект. Дабы восполнить пробел, мы реализуем шаблон MVC на примере простого сайта-визитки.
                                    Читать дальше →
                                  • Скрипт мониторинга процессов MySQL на Perl

                                    Всем привет.

                                    Более пяти лет я работаю системным администратором в хостинговой компании, обслуживаю более сотни серверов с freebsd и centos. За это время накопилось много самописных скриптов, облегчающих мне жизнь. Этими скриптами хочу поделиться с сообществом, да и выслушать здоровую критику никогда не помешает.

                                    Предыстория.
                                    Читать дальше →