Pull to refresh
0
1amer @1amerread⁠-⁠only

User

Send message

Фонетические алгоритмы

Reading time9 min
Views46K
Фонетические алгоритмы сопоставляют двум словам со схожим произношением одинаковые коды, что позволяет осуществлять сравнение и индексацию множества таких слов на основе их фонетического сходства.

Часто довольно трудно найти в базе нетипичную фамилию, например:
— Леха, поищи в нашей базе Адольфа Швардсенеггера,
Шворцинегира? Нет такого!
В этом случае использование фонетических алгоритмов (особенно в сочетании с алгоритмами нечеткого сопоставления) может значительно упростить задачу.

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

В этой статье я рассмотрю наиболее известные алгоритмы, такие как Soundex, Daitch-Mokotoff Soundex, NYSIIS, Metaphone, Double Metaphone, русский Metaphone, Caverphone.
Читать дальше →

Обобщение медианного фильтра

Reading time3 min
Views39K

Аннотация


В данной статье рассказывается об уникальном фильтре, статья о котором появилась в 1990 году: Маслов А.М., Сергеев В.В. Идентификация линейной искажающей системы с использованием ранговой обработки сигналов // Компьютерная оптика. — М., 1990. — Вып.6. — С.97-102. Данный алгоритм получил название «Алгоритм ранговой обработки» и по факту является обобщением медианного фильтра.
Применение данного фильтра оправдано в двух случая — для подавления шума и для уменьшения смаза.
image
Рисунок 1 — исходное изображение, 2 — смазанное и зашумленное солью.
Читать дальше →

Пример Makefile

Reading time7 min
Views76K
Написание makefile иногда становится головной болью. Однако, если разобраться, все становится на свои места, и написать мощнейший makefile длиной в 40 строк для сколь угодно большого проекта получается быстро и элегантно.

Внимание! Предполагаются базовые знания утилиты GNU make.
Читать дальше →

Пишем свой промежуточный драйвер. Часть 1

Reading time5 min
Views25K
Здравствуйте, уважаемые хабраюзеры!
Интересовались ли Вы когда-нибудь как работает снифер и что он из себя представляет? Или как Ваш любимый фаервол защищает Вас от троянов и прочей гадости на сетевом уровне? Да и вообще, как он работает? Я уверен, что Вы задавали себе такого рода вопросы, но все же, если нет, то я от части Вам про это расскажу. Начиная с этой статьи мы будем постепенно осваивать написание своего сниферо-подобного драйвера. Сегодня мы рассмотрим некоторые общие положения, которые нам будут необходимы для понимая всего того, что будет происходить в последующих статьях. Перед прочтением этой статьи, дабы у Вас началась складываться более или менее ясная картина, я рекомендую Вам прочтение прошлого топика Краткий обзор драйверов спецификации NDIS

Всем кому это интересно прошу под кат.
Читать дальше →

Алгоритмы поиска в строке

Reading time4 min
Views191K

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


Часто приходится сталкиваться со специфическим поиском, так называемым поиском строки (поиском в строке). Пусть есть некоторый текст Т и слово (или образ) W. Необходимо найти первое вхождение этого слова в указанном тексте. Это действие типично для любых систем обработки текстов. (Элементы массивов Т и W – символы некоторого конечного алфавита – например, {0, 1}, или {a, …, z}, или {а, …, я}.)

Наиболее типичным приложением такой задачи является документальный поиск: задан фонд документов, состоящих из последовательности библиографических ссылок, каждая ссылка сопровождается «дескриптором», указывающим тему соответствующей ссылки. Надо найти некоторые ключевые слова, встречающиеся среди дескрипторов. Мог бы иметь место, например, запрос «Программирование» и «Java». Такой запрос можно трактовать следующим образом: существуют ли статьи, обладающие дескрипторами «Программирование» и «Java».

Поиск строки формально определяется следующим образом. Пусть задан массив Т из N элементов и массив W из M элементов, причем 0<M≤N. Поиск строки обнаруживает первое вхождение W в Т, результатом будем считать индекс i, указывающий на первое с начала строки (с начала массива Т) совпадение с образом (словом).
Пример. Требуется найти все вхождения образца W = abaa в текст T=abcabaabcabca.

Образец входит в текст только один раз, со сдвигом S=3, индекс i=4.
Читать дальше →

Эмулятор игры «жизнь» на языке GLSL

Reading time5 min
Views7.6K
Для начала небольшой ликбез: раз, два, три.

Наверное, многие хоть раз в жизни писали эмулятор игры «жизнь».
Может быть для обучения программированию, может быть для интереса, экспериментов…
В любом случае, реализация на многих популярных языках программирования — несложное упражнение для обучения этому языку.

Но сегодня мы попробуем реализовать такой эмулятор при помощи видеокарты, так как алгоритм самой игры хорошо реализовывается при помощи параллельных вычислений.
Используем OpenGL, соответственно, язык шейдеров — GLSL. Основная программа будет написана на С++
Читать дальше →

Про сжатие видео — Введение

Reading time7 min
Views85K
Идут дни, требования к качеству видео постоянно растут. При этом ширина каналов и емкость носителей не могла бы поспевать за этим ростом, если бы не совершенствовались алгоритмы сжатия видео.
Далее пойдет речь именно о некоторых базовых понятиях сжатия видео. Некоторые из них несколько устарели или описаны слишком просто, но при этом дают минимальное представление о том, как все работает.

image
Поиск векторов движения для компенсации движения (-: Об этом далее...
Читать дальше →

Увеличение поисковых способностей генетических алгоритмов с помощью прогнозирования временных рядов

Reading time2 min
Views5K
На написание статьи, подтолкнула публикация Прогнозирование временных рядов.

Здесь я покажу, как прогнозирование временных рядов может быть применено для увеличения поисковых способностей (ПС) генетических алгоритмов (ГА).

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

Автоматизированный поиск фактов в тексте (метод «окон-фактов»)

Reading time5 min
Views3.7K
Сегодня мы будем говорить о том, как автоматизировать процесс анализа методом «Окон-Фактов». Об этом методе, к сожалению, достаточно мало информации, однако он остается одним из ключевых методов обработки информационных потоков. Более детально об анализе текста можно почерпнуть, например, тут. В общих чертах задача метода «Окон-фактов» сводится к поиску в тексте неоспоримых фактов. Но уточним, что же именно стоит понимать под фактом. 
Читать дальше →

Rock Music Inside

Reading time6 min
Views4.8K
Когда-то давно начал писать для одного интернет журнала цикл статей про то, как устроена рок музыка, так сказать, «изнутри». Увидев статью Основы звукозаписи от любителя для любителей решил поделиться и своими наработками. Надеюсь, это кому-то будет интересно.

Рок-музыка – музыка жизни для очень и очень многих, это музыка, которая несет в себе сильнейшую энергетику: от мрачной и темной, до пафосно возвышенной и каждый может найти в ней что-то для себя. Утонченная красота рок-баллад и невероятный драйв «боевиков» сносит мозг огромному количеству людей вот уже около 50ти лет. Но мы не будем углубляться в историю, не будем пытаться доказать, кто же все-таки был первым рокером: битлз или блек саббат – оставим это музыковедам. Также мы не будем пытаться разграничить её на стили, говоря «это фиговая попса, а это – труъ», ведь, на мой взгляд, МУЗЫКА не может быть заключена в какие-либо рамки. Задача этой статьи несколько иная – я хочу попытаться пролить свет на то, чем является рок-музыка изнутри. На то, что для большинства глаз скрыто, и то, что волнует многих: «а как он это сделал?», «а что это такое торчит?» — то, что разграничивает слушателя и музыканта. Я хочу попытаться пролить свет на те вещи, на которых в большинстве своем базируется рок-музыка: инструменты, техники игры, технологическая сторона вопроса, однако хочется сделать это как можно проще и понятнее. Это как раз то, чего не хватало мне в свое время и, надеюсь, станет для вас интересным и занимательным. Так же я попытаюсь провести небольшой экскурс в искусство звукозаписи и то, как можно сделать РОК у себя дома:).
Заранее попрошу простить меня за некоторую заангажированность, необъективность и необразованность по некоторым вопросам – я лишь любитель, а не профессионал, кроме этого – музыка является искусством, на которое всегда найдется как минимум 2 разные точки зрения.
Читать дальше →

Ускоряем раздачу фоток

Reading time8 min
Views14K

С проблемой медленной отдачи статического контента рано или поздно сталкивается каждый сисадмин.

Проявляется это приблизительно так: иногда 3Kb картинка грузится так, как будто бы она весит 3Mb, на ровном месте начинают «залипать» (отдаваться очень медленно) css-ы и JavaScript-ы. Вы нажимаете ctrl + reload — и уже, вроде, проблемы нет, потом спустя всего несколько минут все повторяется опять.

Не всегда истинная причина «тормозов» очевидна и мы косо поглядываем то на nginx, то на хостера, то на «забитый» канал, то на «тормозной» или «глючный» браузер :)

На самом деле проблема в несовершенстве современного винчестера, который до сих пор не расстался с механическими подсистемами вращения шпинделя и позиционирования головок.

В этой статье я предложу Вам свое решение этой проблемы, основанное на практическом опыте использования SSD дисков совместно с web-сервером nginx.
Читать дальше →

Приложения, которые «сами себе на уме» или что такое «Opinionated Software»

Reading time2 min
Views1.7K
Итак, джентльмены, прошу минуточку внимания!

В последнее время, обсуждая какие-нибудь технологические или архитектурные штукенции, в спорах приходилось частенько упоминать, что «это же просто opinion», и давать ссылку на статью из Getting Real под названием Make Opinionated Software (по ссылке можно не ходить, ниже перевод той самой статьи).

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

В свое время тоже (и не раз) пройдя испытания в велосипедостроении, я уже давно придерживаюсь того же мнения, что и «37 сигналов». И они говорят нам:

Делайте приложения, которые сами себе на уме

Kernel Pool Overflow: от теории к практике

Reading time10 min
Views41K
Ядро Windows всегда было лакомым кусочком для хакера, особенно при наличии законченных методик его эксплуатирования, приводящих к повышению прав. Учитывая тот факт, что за последние несколько лет количество уязвимостей, связанных с переполнением динамической памяти ядра, резко возросло, я активно заинтересовался данным направлением и, к собственному удивлению, в конечном итоге накопал столько материала, что его хватит не на один 0day-баг.

Наглядный ядерный шеллкод :)
Читать дальше →

Большие потоки трафика и управление прерываниями в Windows

Reading time3 min
Views22K
Мне очень понравился топик про распределение нагрузки от прерываний сетевого адаптера по процессорам, поэтому я решил описать как это делается в Windows.

Disclaimer: судя по некоторым комментариям в предыдущих постах, мне стоит повторить то, с чего я начал первый пост: я не даю (и не могу давать) общеприменимых рецептов. Особенно это касается производительности, где мельчайшая неучтенная деталь может катастрофически повлиять на результат. Вернее рекомендацию то я даю: ТЕСТИРОВАНИЕ И АНАЛИЗ. Смысл моей писанины в том, чтобы дать людям как можно больше информации для анализа, ведь, чем больше понимаешь в том, как что либо работает, тем легче находить пути устранения боттлнеков.

Итак, масштабируемость пропускной способности сети. Потребуется Windows Server 2003 SP2+. Сетевая карта, поддерживающая Receive Side Scaling (можно с достаточной долей уверенности сказать, что подойдет любая серверная сетевая карта, выпущенная в последние 5 лет или любая вообще 1Gb+ NIC, хотя частенько можно увидеть RSS и на 100Mb). Устанавливаем Windows Server и драйвера на карту…

Настройка...

Создание приложений на GTK+ с использованием среды Glade

Reading time10 min
Views47K
Данный пост посвящен созданию приложений с использованием кроссплатформенной библиотеки GTK+. Ориентирован он в основном на новичков? поэтому какие-то вещи возможно для многих покажутся очень простыми и банальными, но я постарался максимально подробнее всё описать, чтобы было понятно для всех.

Немалым достоинством этой библиотеки является то, что она бесплатна для коммерческого использования. В интернете не так много документации и действительно качественных статей по работе с GTK+. В очень многих примерах интерфейс программы пишется «ручками», что порой очень неудобно. Я сам с этим столкнулся и довольно часто больше времени тратил на то, чтобы правильно расположить виджеты (объекты) на форме, в контейнеры, а не сосредоточиться на решении поставленной задачи.

Я продемонстрирую как можно очень быстро создать интерфейс для GTK+ с помощью приложения для визуального создания графических интерфейсов Glade и интегрировать его в вашу программу. Glade не является ни компилятором, ни отладчиком. Он позволяет лишь описать интерфейс и представить его в файлах XML-формата GladeXML.

Базовым интерфейсом для библиотеки GTK+ является язык C. Но я в данном примере буду ипользовать C++. Соответственно появятся небольшие особенности, о которых я обязательно расскажу. Дистрибутив Linux я использую Ubuntu 10.04.

Задача будет такая: написать небольшое приложение состоящее из холста, бокового меню (выбора того, что нарисовать на холсте), главного меню и строки состояния. При этом боковое меню и холст при изменении размера всего окна приложения должны оставаться постоянного размера. Но тот контейнер, в котором находится холст может изменять свой размер в зависмости от увеличения/уменьшения размеров главного окна. И при необходимости должны появляться полосы прокрутки.
Читать дальше →

Kademlia DHT: Основы

Reading time7 min
Views39K
Здравствуйте!
В этой статье, как и, надеюсь, в последующих, я хочу рассказать об одной из современных структурированных пиринговых сетей. Данный материал включает в себя мою переработку документаций, описаний и статей, найденных по теме. В качестве введения представлена общая краткая теория p2p-сетей, DHT, а уж затем следует основная часть, которой посвящена заметка.

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

Хостинг провайдер Server4You

Reading time2 min
Views3.9K
imageНа хабре не раз поднимался вопрос поиска подходящего VPS хостинга. Среди прочих провайдеров был упомянут server4you.com. Нам он показался одним из лучших в соотношении цена-качество и было решено перенести наш проект на этот хостинг. Далее описаны результаты переноса.

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

Классификация данных методом опорных векторов

Reading time4 min
Views151K
Добрый день!

В данной статье я хочу рассказать о проблеме классификации данных методом опорных векторов (Support Vector Machine, SVM). Такая классификация имеет довольно широкое применение: от распознавания образов или создания спам-фильтров до вычисления распределения горячих аллюминиевых частиц в ракетных выхлопах.

Сначала несколько слов об исходной задаче. Задача классификации состоит в определении к какому классу из, как минимум, двух изначально известных относится данный объект. Обычно таким объектом является вектор в n-мерном вещественном пространстве . Координаты вектора описывают отдельные аттрибуты объекта. Например, цвет c, заданный в модели RGB, является вектором в трехмерном пространстве: c=(red, green, blue).

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

Кастомайзим INPUT FILE.

Reading time3 min
Views63
Когда-то давно видел подобное действо на хабре ( спасибо elfiki за линк habrahabr.ru/blog/la_france/24341.html ), но, недавно, пришлось столкнуться с этим самому. Старое решение мне не понравилось количеством javascript, решил попробовать реализовать, по возможности, с минимальным JS. Пара просмотренных воркэраундов не подошла, так как задать размер в пикселях для input file мне не удалось (если это вообще реально), а даже при фиксированном шрифте в разных браузерах «пиксели», почему-то, «разные» получились. Особенно ИЕ удивил, уместив в DIV размером 400px два дива размером по 200 и еще половину третьего.

в итоге получилось примерно такое решение:



Итого, мое доработанное, может кому пригодится.

продолжение дальше

Динамические поддомены с использованием nginx+apache

Reading time3 min
Views29K
Этот топик — очередной топик про реализацию динамических поддоменов на сайте, коих много в интернете и даже есть пара топиков на хабре.

Проблема в том, что этот вопрос везде освещается только с точки зрения перенаправления с поддомена в папку и вся динамичность поддомена заключается в том, что ты создал папку — поддомен у тебя заработал.

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

Например, у нас есть готовый сайт, на котором работают профили по такому url: www.example.com/users/username, и есть всякие дополнительные возможности (например www.example.com/users/username/contact и другие страницы, связанные с этим юзером).

И мы теперь хотим вынести все, что связано с юзером, на поддомен, например username.example.com, username.example.com/contact и т.д.)

Решения, которые были найдены в интернете, меня не удовлетворили по 2 причинам:
  • Не нашел решения как заставить ее работать, сохранив работоспособность домена www.example.com
  • Все найденные решения подходят только для перенаправления в папку и не работают если дальше должны работать какие то правила


На нашем сайте стоит nginx над апачем (как и на многих других), поэтому пришлось изобретать велосипед самому, используя эту связку (nginx+ apache, благо сейчас почти на всех крупных сайтах стоит проксирующий nginx над апачем)

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

Information

Rating
Does not participate
Date of birth
Registered
Activity