• Что такое Томита-парсер, как Яндекс с его помощью понимает естественный язык, и как вы с его помощью сможете извлекать факты из текстов

      Мечта о том, чтобы машина понимала человеческий язык, завладела умами еще когда компьютеры были большими, а их производительность – маленькой. Главная проблема на пути к этому заключается в том, что грамматика и семантика естественных языков слабо поддаются формализации. Кроме того, от языков программирования их отличает присутствие многозначности.

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

      image

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

      Называется технология Томита-парсер, и по большому счету, любой желающий может воспользоваться ей уже сейчас: бинарные файлы доступны для скачивания. Однако прежде чем пользоваться технологией, нужно научиться ее правильно готовить.
      Читать дальше →
    • Эксплуатация литий-ионных аккумуляторов

        Ранее тема обсуждалась в следующих постах:

        Как продлить жизнь (ресурс) литий-ионной аккумуляторной батареи
        Почему литий-ионные батареи умирают так рано?
        5 практических советов по эксплуатации литий-ионных аккумуляторов
        Допустимые диапазоны температур при заряде и разряде литий-ионных аккумуляторов

        Далее приведены данные, полученные по результатам экспериментов над аккумуляторами различных производителей.
        Читать дальше →
      • Как обуздать усиление записи в SSD?



          Когда-то я уже писал о том, что LSI помимо контроллеров SAS выпускает микросхемы для современных жестких дисков и SSD, так же я писал о том, что флэш-память требует более сложного подхода к операциям ввода-вывода. В чем состоит эта сложность, и какую именно проблему решают наши чипы я и хочу рассказать в этой статье. Речь пойдет о Write amplification. Разумеется, профессионалы и так знакомы с WA, поэтому статья рассчитана скорее на начинающих.
          Читать дальше →
        • Небольшой обзор Ingress или как приватизировать достопримечательности

          Вступление


          Проснувшись сегодня утром я увидел на телефоне приглашение поучаствовать в эксклюзивном бета тестировании Ingress. По оформлению письма и имени отправителя «Niantic Project Operations» я сразу вспомнил про этот пост и подумал, что пригласили всех желающих. Первым делом я скопировал пригласительный код и отправился в маркет за приложением. При первом запуске он предлагает выбрать учетную запись из уже существующих на телефоне. Код у меня нигде не спрашивали, что поставило под сомнение ограниченность данного мероприятия. После этого начинается обучение, но нигде об этом не говорится, что меня моментально запутало. На этот момент мне показалось, что вся суть игры в миссиях «сходить туда-то, сделать то-то». Когда до меня дошло, что это режим «тренировка», я уже начинал открывать данный пост, комментарии к которому натолкнули меня на написание данного обзора.
          Читать дальше →
        • Поиск работы за рубежом

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

            Итак, вы задумались о поиске новой работы.
            Читать дальше →
          • Погружаемся в Docker: Dockerfile и коммуникация между контейнерами

              В прошлой статье мы рассказали, что такое Docker и как с его помощью можно обойти Vendor–lock. В этой статье мы поговорим о Dockerfile как о правильном способе подготовки образов для Docker. Также мы рассмотрим ситуацию, когда контейнерам нужно взаимодействовать друг с другом.


              В InfoboxCloud мы сделали готовый образ Ubuntu 14.04 с Docker. Не забудьте поставить галочку «Разрешить управление ядром ОС» при создании сервера, это требуется для работы Docker.
              Читать дальше →
            • Не стоит бояться использовать HandlerSocket


              (пример работы протокола HandlerSocket на картинке)

              Вступление


              В предыдущем проекте возникла потребность в разгрузке базы данных, тогда жизнь и столкнула меня с HandlerSocket`ом.

              HandlerSocket — это протокол, реализованный в одноимённом плагине для РСУБД MySQL, позволяющий использовать NoSQL методику для доступа к данным, хранящимся в InnoDB таблицах. Основная причина, по которой используют NoSQL решения — это очень быстрый поиск по первичному ключу.

              Еще про HandlerSocket
              HandlerSocket работает как демон внутри процесса mysql, принимая TCP соединения и выполняя запросы клиентов. Он не поддерживает SQL запросы, вместо этого он предоставляет простой язык запросов для CRUD операций с таблицами. Именно поэтому он гораздо быстрее mysqld/libmysql в некоторых случаях:

              HandlerSocket оперирует данными без парсинга SQL запроса, что приводит к уменьшению загрузки процессора.
              Он поддерживает пакетное выполнение запросов. Можно отправить несколько запросов сразу и получить результат за один раз, что опять же снижает нагрузку на процессор и на сеть.
              Протокол HandlerSocket более компактный, чем у mysql/libmysql, что приводит к сокращению нагрузки на сеть.

              Подробнее можно почитать здесь:



              Под катом вас ожидает:
              • Новая библиотека для работы с HS, написанная на PHP;
              • Сравнение производительности существующих решений + нового;
              • Symfony2 bundle для работы с HS;
              • Плагины к Munin для мониторинга активности HS;
              • Разные мысли вслух и рассказы о «шишках».

              Читать дальше →
            • Как на самом деле работает mod_rewrite. Пособие для продолжающих

                image
                Эта статья выросла из идеи продвинутого обучения наших сотрудников технической поддержки работе с mod_rewrite. Практика показала, что после изучения имеющихся в большом количестве учебников на русском языке саппортам хорошо дается решение шаблонных задач, но вот самостоятельное составление правил происходит методом проб и большого количества ошибок. Проблема заключается в том, что для хорошего понимания работы mod_rewrite требуется изучение оригинальной англоязычной документации, после чего — либо дополнительные разъяснения, либо часы экспериментов с RewriteLog.

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

                Я предполагаю, что читатель уже знаком с тем, что такое mod_rewrite, и не буду описывать его основы, которые легко найти в интернете. Также нужно отметить, что в статье освещается работа mod_rewrite при использовании его директив в файле .htaccess. Отличия при работе в контексте <VirtualHost> изложены в конце статьи.

                Итак, вы изучили mod_rewrite, составили несколько RewriteRule и успели столкнуться с бесконечными перенаправлениями, со случаем, когда правило почему-то не ловит ваш запрос, а также с непредсказуемой работой группы правил, когда последующее правило неожиданно изменяет запрос, кропотливо подготовленный правилами предыдущими.

                Почему так происходит?
                Читать дальше →
              • Проектирование интернет-магазина: личный кабинет, корзина, доставка-оплата, рассылка и другое

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

                Прошлые статьи серии можно найти тут:


                «Серьезное проектирование серьезного магазина. Часть 1. Исследования»
                «Серьезное проектирование серьезного магазина. Часть 2. Модули интернет-магазина»
                «Серьезное проектирование серьезного магазина. Часть 3. Карточка товара и не только»
                «Серьезное проектирование серьезного магазина. Часть 4. Субституты, комплементы, сравнение и другие инструменты увеличения конверсии»

                Регистрация / личный кабинет


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

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

                Рис. 1. Личный кабинет.

                image

                Читать дальше →
              • Разработка векторного редактора на JavaScript (сложности и идеи)

                  Предыстория:


                  Имя большой опыт в разработке веб-сайтов (около 15 лет) и являясь программистом, я очень не люблю рутинную работу, стараюсь ее либо избегать, либо каким-то образом оптимизировать. Другими словами, если мне в какой-то момент необходимо заниматься наполнением контентом сайта (да, знаю, не царское дело программисту наполнять сайт, но случаи разные бывают), то я предпочту потратить пару часов на написание парсера входящих данных, чем часа 4 вколачивать эти данные вручную. И давно меня терзала проблема отсутствия удобного редактора для создания карт изображения. Конечно, можно нарисовать карту в Corel Draw или подобном, выгрузить в SVG и по быстрому переконвертировать в нужный формат, но меня давно интересовала возможность создания некоего редактора, который позволит, не загружая сторонние программы, прямо на сайте, по-быстрому загрузить изображение и выделить на нем нужную карту. Например, есть некое изображение здания, на котором необходимо выделить контур этажа и привязать к нему какие-то JavaScript-события или просто ссылку, вот как здесь:


                  Читать дальше →
                • Создание аудиоплагинов, часть 14

                  • Tutorial
                  Все посты серии:
                  Часть 1. Введение и настройка
                  Часть 2. Изучение кода
                  Часть 3. VST и AU
                  Часть 4. Цифровой дисторшн
                  Часть 5. Пресеты и GUI
                  Часть 6. Синтез сигналов
                  Часть 7. Получение MIDI сообщений
                  Часть 8. Виртуальная клавиатура
                  Часть 9. Огибающие
                  Часть 10. Доработка GUI
                  Часть 11. Фильтр
                  Часть 12. Низкочастотный осциллятор
                  Часть 13. Редизайн
                  Часть 14. Полифония 1
                  Часть 15. Полифония 2
                  Часть 16. Антиалиасинг



                  Приступим к созданию полифонического синтезатора из тех компонентов, которые у нас имеются!

                  В прошлый раз мы работали над параметрами и пользовательским интерфейсом, сегодня мы начнем работу над лежащей в основе плагина полифонической обработкой аудио. В нашем случае мы сможем играть до 64-х нот одновременно. Это требует основательных изменений в структуре плагина, но мы сможем использовать уже написанные нами классы Oscillator, EnvelopeGenerator, MIDIReceiver и Filter.

                  В этом посте мы напишем класс Voice (голос), представляющий одну звучащую ноту. Затем создадим класс VoiceManager, следящий за тем, чтобы все ноты звучали и заглушались вовремя.
                  В следующем посте мы почистим код от ненужных устаревших частей, добавим модуляцию тона и приведем элементы управления интерфейса в рабочее состояние. На первый взгляд, работы полно. Но во-первых, у нас уже есть практически все нужные компоненты, а во-вторых, в конце у нас будет настоящий-полифонический-субстрактивный-блин-синтезатор!

                  Читать дальше →
                • Руководство по проектированию реляционных баз данных (7-9 часть из 15) [перевод]

                  • Перевод
                  Продолжение.
                  Предыдущие части: 1-3, 4-6

                  7. Связь один-ко-многим.


                  Я уже показал вам как данные из разных таблиц могут быть связаны при помощи связи по внешнему ключу. Вы видели как заказы связываются с клиентами путем помещения customer_id в качестве внешнего ключа в таблице заказов.

                  Другой пример связи один-ко-многим – это связь, которая существует между матерью и ее детьми. Мать может иметь множество детей, но каждый ребенок может иметь только одну мать.

                  (Технически лучше говорить о женщине и ее детях вместо матери и ее детях потому, что, в контексте связи один-ко-многим, мать может иметь 0, 1 или множество потомков, но мать с 0 детей не может считаться матерью. Но давайте закроем на это глаза, хорошо?)

                  Когда одна запись в таблице А может быть связана с 0, 1 или множеством записей в таблице B, вы имеете дело со связью один-ко-многим. В реляционной модели данных связь один-ко-многим использует две таблицы.

                  image
                  Схематическое представление связи один-ко-многим. Запись в таблице А имеет 0, 1 или множество ассоциированных ей записей в таблице B.
                  Читать дальше →
                • Установка расширений OCI8 и PDO_OCI для PHP5

                  В настоящее время я работаю в компании, которая очень любит использовать в проектах на PHP СУБД Oracle, причем иногда версии 11g.

                  Большая часть разработчиков этой компании работает под ОС Windows. За последний месяц несколько из них решили приобщиться к Linux и поставили себе Ubuntu. По прошествии нескольких дней после установки самой ОС, ребята столкнулись с задачей установки драйверов PHP для работы с СУБД Oracle — OCI8 и PDO_OCI на базе Oracle instant client 11.2, которую не смогли решить самостоятельно.

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

                  Мануал написан для пользователей Ubuntu Linux, но с некоторыми изменениями подойдет для пользователей большинства Linux'ов.

                  Читать дальше →
                • Иерархические структуры данных и Doctrine

                    Введение



                    Хранение иерархических данных (или попросту — деревьев) в реляционных структурах задача довольно нетривиальная и вызывает некоторые проблемы, когда разработчики сталкиваются с подобной задачей.

                    В первую очередь, это связано с тем, что реляционные базы не приспособлены к хранению иерархических структур (как, например, XML-файлы), структура реляционных таблиц представляет из себя простые списки. Иерархические же данные имеют связь «родитель-наследники», которая не реализована в реляционной структуре.

                    Тем не менее, задача «хранить деревья в базе данных» рано или поздно возникает перед любым разработчиком.

                    Ниже мы подробно рассмотрим, какие существуют подходы в организации хранения деревьев в реляционных БД, а также рассмотрим инструментарий, который нам предоставляет ORM Doctrine для работы с такими структурами.
                    Читать дальше →
                  • Что такое Excel Mashup, и кому это может пригодиться?

                    Резюме поста в нескольких предложениях


                    • Возможности Excel в части удаленного доступа и совместной работы с документами на сегодняшний день по меньшей мере сопоставимы с Google Docs;
                    • Excel-документ может быть интегрирован в html-страницы с сохранением значительной части функциональности, т.е. формулы и pivot tables будут работать;
                    • Я, равно как и любой другой человек, могу опубликовать свой Excel-документ таким образом, что ваше, равно как и чье-либо еще, веб-приложение сможет:
                      1. отрисовать и открыть его для ручного ввода значений в ячейки,
                      2. напрямую взаимодействовать с ним через JavaScript;
                    • У Microsoft есть сайт, посвященный интеграции Excel-документов в веб-приложения; также в природе существуют jQuery плагины, позволяющие сделать эту интеграцию быстрой и безболезненной;
                    • С практической точки зрения пользователь получает следующие плюшки:
                      1. JavaScript представляет широкие возможности для визуализации и анимации Excel-таблиц, а также создания на их базе интерактивных приложений и дэшбордов;
                      2. Возможность работы с Excel-документами на планшетах и мобильных устройствах;
                      3. Удобный инструмент для создания рабочих прототипов систем управленческой отчетности.

                    Читать дальше →
                    • +21
                    • 14,2k
                    • 6
                  • Браузерный мультиплеер без сервера


                      Про технологию WebRTC в последнее время пишут много. Она позволяет обеспечить взаимодействие двух клиентов без специализированного сервера между ними, но нужда в сервере отпадает только после установки соединения. А на этапе установки самого соединения некоторые серверные ресурсы все еще нужны. Можно ли избавиться от потребности в сервере? Небольшой эксперимент в этом направлении под катом.
                      Читать дальше →
                    • Как устроены Яндекс.Карты. Лекция Владимира Зайцева в Яндексе

                        Яндекс.Карты – это высоконагруженный картографический портал, который работает с огромными объемами данных. В своей лекции Владимир Зайцев рассказывает старшеклассникам – студентам Малого ШАДа – о том, как создавать и поддерживать такие ресурсы, и о технологиях, которые для этого используются. А также на примерах объясняет, какие можно разрабатывать инструменты и проводить исследования на базе полученных данных.



                        Попробуем разобраться в том, что такое Яндекс.Карты так, как если бы мы ничего о них не знали, и слышим о них впервые. Если смотреть на них в общем, то это большой сайт, на котором собрано несколько сервисов:
                        • Спутниковые снимки и карта
                        • Народная карта
                        • Поиск
                        • Пробки
                        • Маршрутизатор и навигация
                        • Панорамы
                        • API
                        Конспект лекции
                        • +70
                        • 31,6k
                        • 3
                      • Kenju форк Kendo UI Web (GPL3)

                          Несколько дней назад произошло одно важное событие в развитии JS фреймворка Kendo UI от компании Telerik. Они выпустили OpenSource версию продукта, под лицензией Apache v2 — Kendo UI Core. На деле же всё оказалось не так просто и однозначно.

                          Ранее вся библиотека Kendo UI выпускалась под лицензией GPL v3, что не разрешало использовать её бесплатно в коммерческих продуктах, для коммерческих приложений на основе этой библиотеки была разработана Kendo UI commercial license. Но для OpenSource же эта библиотека была настоящим подарком. Конечно же есть и другие аналогичные библиотеки и у них огромное количество своих поклонников. Плюсами Kendo можно считать:
                          1) Полная поддержка JQuery
                          2) Большое количество виджетов, что позволяет обойтись одной JS библиотекой (не считая jquery) в большинстве случаев
                          3) Качественные и приятные темы оформления
                          4) Отличная поддержка Twitter Bootstrap. Для kendo даже есть своя тема оформления bootstrap, для одновременной работы с CSS фреймворком.

                          Читать дальше →
                          • +22
                          • 17,5k
                          • 7
                        • Несколько интересностей и полезностей для веб-разработчика #16

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

                            PourOver


                            image
                            Библиотека для реально быстрой фильтрации и сортировки огромных коллекций, где речь идет о сотне тысяч элементов. PourOver построен на идеально простых запросах, которые могут произвольно формироваться друг с другом. Вы сможете объединять, скрещивать и разделять запросы. PourOver будет помнить как были построены ваши запросы и по-умному обновлять их, если появятся новые элементы или будут изменены старые. Работает на IE7+, Firefox 4+, Safari 5+, Opera 9+, Chrome 1+.

                            Стоит также заметить, что это проект от New York Times, на корпоративном Гитхабе которого есть еще популярный backbone.stickit плагин для датабиндинга и Tamper — serialization protocol for categorical data. В последнее время гики из западных СМИ прямо раскочегарились — вот недавно я писал про классные проекты от The Guardian и Financial Times.

                            Читать дальше →
                            • +33
                            • 29,6k
                            • 9