Pull to refresh
2
0
Hamlet Muradyan @m_hamlet

Senior Software Developer

Send message

Алгоритм парсинга арифметических выражений

Reading time12 min
Views59K

Общие сведения


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

Парсер — это программа, анализирующая входное арифметическое выражение. Программы подобного класса, иногда называют так же «распознавателями».

Парсинг — процесс разбора входного арифметического выражения на более простые составляющие.

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

Описание алгоритма распознавания приводится без привязки к какому-либо языку программирования. В заключении статьи приведен пример реализации данного алгоритма на PHP. Возможна реализация алгоритма практически на любом языке программирования (даже без поддержки ООП).
Читать дальше →

Реализация поискового движка с ранжированием на Python (Часть 1)

Reading time5 min
Views35K
Просматривая ленту новостей я наткнулся на рекомендацию от Типичного Программиста на статью «Implementing a Search Engine with Ranking in Python», написанную Aakash Japi. Она меня заинтересовала, подобного материала в рунете не очень много, и я решил перевести её. Так как она довольно большая, я разделю её на 2-3 части. На этом я заканчиваю своё вступление и перехожу к переводу.

Каждый раз как я использую Quora, я в конечном итоге вижу по крайней мере вопрос вроде этого: кто-нибудь спрашивает, как работает Google и как они могли бы превзойти его по поиску информации. Большинство вопросов не настолько смелые и дезинформирующие, как этот, но все они выражают подобное чувство, и в этом они передают значительное непонимание того, как работают поисковые системы.

Но в то время как Google является невероятно сложным, основная концепция поисковой системы, которые ищут соответствия и оценивают (ранжируют) результаты относительно поискового запроса не представляет особой сложности, и это может понять любой с базовым опытом программирования. Я не думаю, что в данный момент возможно превзойти Google в поиске, но сделать поисковой движок — вполне достижимая цель, и на самом деле это довольно поучительное упражнение, которое я рекомендую попробовать.

Это то, что я буду описывать в этой статье: как сделать поисковую систему для локальных текстовых файлов, для которых можно обрабатывать стандартные запросы (по крайней мере, одно из слов в запросе есть в документе) и фразу целиком (появляется вся фраза в тексте) и может ранжировать с использованием базовой TF-IDF схемы.

Есть два основный этапа в разработке поискового движка: построение индекса, а затем, используя индекс, ответить на запрос. А затем мы можем добавить результат рейтинга (TF-IDF, PageRank и т.д.), классификацию запрос/документ, и, возможно, немного машинного обучения, чтобы отслеживать последние запросы пользователя и на основе этого выбрать результаты для повышения производительности поисковой системы.

Итак, без дальнейших церемоний, давайте начнем!
Читать дальше →

Опрос: как у вас решается проблема синхронизации параллельных запросов на PHP?

Reading time4 min
Views19K
Долгое время я пытаюсь понять, сколько места отведено вопросам параллельности и конкурентности выполнения кода в повседневной практике среднестатистического PHP-программиста. С одной стороны, разрабатывая серверное приложение, программист автоматически пишет код, который будет выполняться параллельно. С другой, на практике в PHP все проблемы этой области решались инструментами, которыми все пользовались — веб-сервер, сессия и СУБД.

Обращают ли на ваших проектах внимание на на проблемы синхронизации параллельно обрабатывающихся HTTP-запросов? Они решаются через транзакции, блокировки? Какие способы блокирования вы используете? Да и вообще, нужно об этом париться, или тема бесполезная? Узнаем мнение аудитории. Этот пост не дает ответов на вопросы. Здесь ведется разведка.
Читать дальше →

Как Evernote находит текст в изображениях

Reading time6 min
Views15K
image

Поиск текста в изображениях — достаточно популярная функция Evernote. Мы бы хотели рассказать, как она работает и ответить на некоторые частые вопросы.

Как происходит обработка изображений



Когда в процессе синхронизации заметка отправляется в Evernote, любые ресурсы, включенные в эту заметку, с MIME-типами PNG, JPG или GIF пересылаются на отдельный набор серверов, занятых исключительно распознаванием текста во вложенных изображениях и возвращением найденных результатов. Эти результаты добавляются в заметку в виде скрытого (точнее не видимого при просмотре заметки) набора метаданных под названием recoIndex. Весь recoIndex можно посмотреть, если экспортировать заметку в файл ENEX.

Например, вот старая заметка в одном из наших аккаунтов со снимком пивной бутылки.
Читать дальше →

Как использовать API сайта, у которого нет API?

Reading time4 min
Views81K
У меня достаточно часто появляется задача получить данные от стороннего сайта, при этом далеко не всегда этот сайт предоставляет возможность удобно получить эти данные через API. Единственное решение в таком случае — парсить html содержимое страниц. Когда-то я писал регэкспы, потом появились библиотеки, позволяющие получить нужное содержимое по css-селектору, а сейчас и это кажется сложной задачей, которую хотелось бы упростить.

Сегодня я хочу рассказать вам о моей небольшой библиотеке, позволяющей описать в API-стиле http-запросы и парсить ответ сервера в нужный вам формат.
Читать дальше →

Если бы языки программирования были девушками…

Reading time2 min
Views81K
Image #1602564, 172.6 KB

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

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

«Плотность времени» (с) Н.А.Козырев

Reading time9 min
Views169K
Эпиграф:
— А чем вам не нравится Второй Закон Термодинамики?
— Ну, хотя бы тем, что Больцман повесился. И сын Циолковского тоже.
ответ приписывают Н.Козыреву

Кто такой Николай Александрович Козырев?
— обладатель «алмазной звезды» Международной Академии Астронавтики (МАА) — высочайшей награды среди астрономов (только двое советских граждан имели такую награду — Ю.Гагарин и Н.Козырев).
— автор теории протяженных звёздных атмосфер
— автор теории солнечных пятен
— создатель «Несимметричной причинной механики» одной из интереснейших научных теорий о свойствах времени.

О последнем пункте и пойдет речь.
Читать дальше →

Призраки в ROM

Reading time3 min
Views19K


Старый компьютер иногда хранит совершенно неожиданные секреты. Ребята с сайта NYResistor опубликовали историю, как они героическими усилиями восстановили несколько цифровых фотографий из флэш-памяти доисторического компьютера Macintosh SE, который валялся на обочине дороги в Бруклине. Неизвестных людей на этих снимках они назвали «призраками в ROM».
Читать дальше →

Вышли Windows 8 Release Preview, Visual Studio 2012 RC, Windows Server 2012 RC и TFS 2012 RC

Reading time1 min
Views7.3K


Сегодня Windows 8 Release Preview доступен для загрузки на 14 языках, в том числе и на русском. Как пишет Стив Синофски, за ней уже будет следовать RTM, так что ждать осталось совсем немного. Напомню, что выход Release Preview был запланирован на первую неделю июня этого года соответственно. Windows Server 2012 RC и Visual Studio 2012 RC стали доступны чуть раньше.
Читать дальше →

Большие изображения на сайте для пользователей с Retina Display — retina.js

Reading time2 min
Views3.6K
Новый iPad уже появился в магазинах, не говоря уже про братьев iPhone 4S и iPhone 4, которыми многие давно и успешно пользуются, а вот сайтов, учитывающих возможности отображения дисплеями этих устройств картинок в высоком разрешении, пока не так много. Но есть простой вариант, как сделать свой сайт соответственно тренду «отзывчивым», или на их манер: responsive.

Как-то, примерно год назад, один знакомый фотограф жаловался, мол, приходится уменьшать фотографии, теряя детали, в которых кроется вся соль, мол разрешение экранов таково, что точки слишком заметны. iPhone 4 он отверг по причине «кропа» — несмотря на достойное физическое разрешение, на таком дисплейчике помещается лишь часть фотографии. Дальше он переключился на камеры с кропнутыми матрицами и тем, что получается даже при использовании хороших объективов, но меня зацепила та часть, которая касалась отображения картинок, а именно отсутствием возможности качественно показать изображение с экрана, не уменьшая размеров картинки до лилипутских.

И вот пришёл большой iPad!
Счастливая девочка Карли держит ГрушеПад

Show me your boobs

Индексация AJAX-сайтов поисковым роботом Яндекса

Reading time2 min
Views2K
Рады сообщить, что улучшения индексации AJAX-сайтов Яндекс поддержал изменения в поисковом роботе и правилах обработки им URL таких сайтов.

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

При создании AJAX-сайтов могут использоваться URL с #, но такой URL не используется поисковым роботом. Как правило, часть URL после # отсекается. Поэтому вместо URL вида site.ru/#example он обращается к главной странице сайта, расположенной по адресу site.ru. Это значит, что контент страницы может не проиндексироваться и, как следствие, не попасть в результаты поиска.

Теперь вебмастер AJAX-сайта может указать поисковому роботу Яндекса на необходимость индексации, поддержав соответствующую схему в структуре сайта. Для этого нужно:

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

«Умный дом» собственными руками. Часть 3. Синтез и распознавание голоса с помощью Google

Reading time9 min
Views83K
В прошлой статье мы смогли добиться получения изображения с наших веб-камер в виде снимков раз в секунду. Теперь пришла пора взяться за обещанное — распознавание и синтез голоса.
Читать дальше →

Несколько интересных особенностей Windows 8

Reading time6 min
Views259K
Так получилось, что в последнюю неделю сентября и первые две недели октября я провёл 6 мастер-классов по Windows 8 для «Кампус-экспертов» — студентов немецких ВУЗов, которые оказывают техподдержку по основным пользовательским продуктам Майкрософт (операционная система, офис и пр.) у себя в ВУЗах. В рамках подготовки к этим мастер-классам я составил небольшой список «особенностей» или фич, показавшихся мне интересными и несколько неочевидными. Еще несколько фич мне подсказали сами студенты. Этот небольшой список со скриншотами я решил оформить в виде небольшого обзора. Конечно, не каждая из этих фич является новой или совсем неизвестной, но я постарался выбрать то. что мне показалось интересным.
Читать дальше →

Как создается операционная система

Reading time7 min
Views8.8K
По докладу Ивана Рузанова «Windows – как создается операционная система» с конференции «Платформа 2009».

Как уже писал antonms, стали доступны записи докладов с Платформы. Несколько из них я посмотрел и хочу поделиться наиболее понравившимся. Учитывая занятость рядового хабра-юзера и продолжительность исходной записи доклада (1 час 20 мин.), ниже привожу развернутое изложение материала.
  • История Windows
  • Windows сегодня
  • Разработка Windows
  • Изменения ядра Windows 7
  • Сопровождение Windows, обновления/исправления
Читать дальше →

Ввод пароля или похитители времени

Reading time5 min
Views52K


Не знаю, как вам, но мне в течении дня приходится часто отходить от рабочего места и блокировать мак. Чтобы не совершать несколько кликов мышкой, блокировку своего мака я «повесил» на клавиши «shift + cmd + l», но по приходу к рабочему месту опять же приходилось вводить пароль (который в силу моей параноидальности не так-то прост). И вот, ошибившись в спешке в очередной раз при его вводе, задумался автоматизировать процесс блокировки/разблокировки. Так как все двери нашего офиса открываются по карте, решил повесить на RFID-метку (всё равно всё время болтается на шее) и эту функцию. Итак, задача на словах выглядела так: авторизовавшись единожды в начале рабочего дня иметь возможность блокировки/разблокировки мака по RFID-метке, при этом все функции проверки валидности метки и т.п. должны происходить на стороне мака.

Начало — уже половина дела, да и как раз под рукой освободился стенд на базе Arduino UNO.
Читать дальше →

Транслируем видеопоток с IP-камеры с помощью WebRTC

Reading time9 min
Views265K
Решение задачи онлайн-вещания с IP-камеры, вообще говоря, не требует применения WebRTC. Камера сама является сервером, обладает IP-адресом и может быть подключена напрямую к маршрутизатору с целью раздачи видео-контента. Так зачем же применять технологию WebRTC?

image

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

Сверхбыстрое распознавание речи без серверов на реальном примере

Reading time10 min
Views334K

В этой статье я подробно расскажу и покажу, как правильно и быстро прикрутить распознавание русской речи на движке Pocketsphinx (для iOS порт OpenEars) на реальном Hello World примере управления домашней техникой.
Почему именно домашней техникой? Да потому что благодаря такому примеру можно оценить ту скорость и точность, которой можно добиться при использовании полностью локального распознавания речи без серверов типа Google ASR или Яндекс SpeechKit.
К статье я также прилагаю все исходники программы и саму сборку под Android.

Прикручиваем Pocketsphinx к своему Андроиду

Полезные инструменты для разработки на Laravel

Reading time8 min
Views78K


Несколько месяцев назад наша компания решила выбрать корпоративный PHP-фреймворк, который мы бы использовали для большинства проектов. До этого у нас был целый зоопарк: Symfony, Zend Framework, Yii — кому что больше нравилось. После рассмотрения популярных фреймворков мы решили попробовать Laravel. Результатом нескольких обучающих дней стал конспект, в котором строится простенькое приложение, но так как подробный туториал уже присутствует на хабре, то я решил написать только о четырёх инструментах, которые будут полезны при разработке и о которых почему-то не упоминают в туториалах:

  1. Laravel IDE Helper Generator
  2. Laravel 4 Debugbar
  3. Faker
  4. Homestead
Читать дальше →

Умный дом — дешево и сердито, часть 2

Reading time2 min
Views171K
В жизни каждого умного дома возникает закономерный вопрос – как маленький нежный микроконтроллер своими пятью вольтами сможет коммутировать 220 вольт переменного тока?

Самый простой вариант – реле. Тут вам и гальваническая развязка, и замыкаешь что хочешь, хоть постоянный, хоть переменный, мало, много. Но и минусы у реле очень неприятные.

Первый – щелкает. Раздражает. Да, человек – штука такая, ко всему приспособится, и можно привыкнуть, но зачем привыкать к плохому?

Второй – коммутируя большой ток, в момент включения, да еще и при длинных проводах от реле до коммутируемого устройства проходит очень немаленькая помеха. Согласитесь, когда ночью включаешь свет в туалете и параллельно включается компьютер и свет в спальне – неприятно.

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

Information

Rating
Does not participate
Location
Yerevan, Yerevan, Армения
Date of birth
Registered
Activity