Обновить
51
0
Леонид Святов@Svyatov

Веб-разработчик

Отправить сообщение

Ajenti — полгода спустя

Время на прочтение2 мин
Охват и читатели11K
Казалось бы, не так давно я представлял Хабру свой проект.
Откликнулось много людей, некоторые пришли и оставили свой след в исходниках и истории коммитов, некоторые исчезли, кто-то все еще с нами.
Я хочу выразить всем им свою благодарность, потому что без них у меня вряд ли что-нибудь получилось.
А сегодня я наконец выпускаю альфа-версию проекта.

Под катом вас ждет много интересного, а сейчас дохабракатный мотивационный скриншот:

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

Использование коэффициента Танимото для поиска людей с одинаковыми предпочтениями

Время на прочтение3 мин
Охват и читатели13K
Решая упражнения к книге «Программируем коллективный разум», я решил поделиться реализацией одного из алгоритмов упомянутого в этой книге (Глава 2 — Упражнение 1).

Исходные условия следующие: пусть мы имеем словарь с оценками критиков:

critics={'Lisa Rose'{'Superman Returns'3.5'You, Me and Dupree'2.5'The Night Listener'3.0}
           'Gene Seymour'
{'Superman Returns'5.0'The Night Listener'3.5'You, Me and Dupree'3.5}}

Чем выше оценка, тем больше нравится фильм.
Надо вычислить: насколько схожи интересы критиков для того, например, чтобы можно было на основе оценок одного рекомендовать фильмы другому?

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

Ловушка “группомыслия” и другие эффекты работы в команде

Время на прочтение4 мин
Охват и читатели14K
Возможно многие сталкивались с подобным парадоксом: почему от увеличения числа участников в команде, эффективность ее работы не только не увеличивалась, но, наоборот, снижалась? Я начал изучать данный вопрос, т.к. по ходу своей управленческой деятельности сталкивался с подобной ситуацией несколько раз.

Тем, кто непосредственно связан с организацией работы в команде и использует коллективный способ принятия решения, следует знать о таком явлении как «групповые эффекты»
Читать дальше →

Система непересекающихся множеств и её применения

Время на прочтение10 мин
Охват и читатели88K
Добрый день, Хабрахабр. Это еще один пост в рамках моей программы по обогащению базы данных крупнейшего IT-ресурса информацией по алгоритмам и структурам данных. Как показывает практика, этой информации многим не хватает, а необходимость встречается в самых разнообразных сферах программистской жизни.
Я продолжаю преимущественно выбирать те алгоритмы/структуры, которые легко понимаются и для которых не требуется много кода — а вот практическое значение сложно недооценить. В прошлый раз это было декартово дерево. В этот раз — система непересекающихся множеств. Она же известна под названиями disjoint set union (DSU) или Union-Find.

Условие


Поставим перед собой следующую задачу. Пускай мы оперируем элементами N видов (для простоты, здесь и далее — числами от 0 до N-1). Некоторые группы чисел объединены в множества. Также мы можем добавить в структуру новый элемент, он тем самым образует множество размера 1 из самого себя. И наконец, периодически некоторые два множества нам потребуется сливать в одно.

Формализируем задачу: создать быструю структуру, которая поддерживает следующие операции:

MakeSet(X) — внести в структуру новый элемент X, создать для него множество размера 1 из самого себя.
Find(X) — возвратить идентификатор множества, которому принадлежит элемент X. В качестве идентификатора мы будем выбирать один элемент из этого множества — представителя множества. Гарантируется, что для одного и того же множества представитель будет возвращаться один и тот же, иначе невозможно будет работать со структурой: не будет корректной даже проверка принадлежности двух элементов одному множеству if (Find(X) == Find(Y)).
Unite(X, Y) — объединить два множества, в которых лежат элементы X и Y, в одно новое.

На рисунке я продемонстрирую работу такой гипотетической структуры.


Как такое сделать и зачем оно нужно

Как работают алгоритмы сортировки

Время на прочтение1 мин
Охват и читатели22K
Иногда для понимания того, как работает та или иная вещь, лучше один раз увидеть, чем сто раз услышать.

Замечательный сайт www.sorting-algorithms.com позволяет увидеть, как сортируются данные разными алгоритмами. Вы сможете посмотреть анимацию в зависимости от алгоритма, исходных данных.



Все это бегает и сортируется прямо на ваших глазах!

Работает на Google App Engine, видимо, поэтому и лежит от посетителей с «Хабра».

Windows Aero эффект на чистом HTML+CSS+JS

Время на прочтение1 мин
Охват и читатели7.6K
Вдогонку к посту «jQuery → Впечатляющие анимационные эффекты» решил показать свою поделку, созданную скорее для развлечения, а не для реального внедрения. Я попытался сделать эффект размытия заднего фона как в Windows Aero.



Вот пример, вместе с картинками весит 200 Кб. Довольно много.

Следующий шаг — использовать одну картинку для заднего фона, а размывать с помощью SVG. Пример с SVG почему-то работает только в Опере (как написано в комментариях, в других браузерах тоже работает) и грузит процессор на 100%.

Вывод: с помощью существующих технологий этот эффект реализовать можно, но либо картинки будут много весить, либо процессор будет загружен на все сто. До реального внедрения ещё далеко, но может быть кто-то знает более изящное решение?

Впечатляющие анимационные эффекты

Время на прочтение2 мин
Охват и читатели115K
С появлением jQuery, у веб-программистов появилась возможность создавать впечатляющие визуальные эффекты, не прибегая к использованию технологии flash. В данной статье представлено несколько ярких примеров того, каких потрясающих результатов можно достичь, используя стандартные средства браузера и свое воображение.
Читать дальше →

Разворачивание широкой таблицы в столбец (EAV pattern)

Время на прочтение3 мин
Охват и читатели31K

Задача


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

Прикручиваем клевые шрифты с помощью @font-face

Время на прочтение3 мин
Охват и читатели43K
Недавно столкнулся с задачей прикручивания достаточно необычного шрифта для мобильного веб клиента. Так как работа была под айфон, то я решил, что в этой задаче мне поможет css 3 и такая штука как @font-face. Пользу от такого способа решения задачи, я думаю, видят все, потому что:
  • сохраняется поиск по тексту, потому что это текст, а не картинка;
  • появляется возможность использовать онлайн-переводчики и разные фишки связанные с текстом;
  • никто не отменяет для нас использование line-height, letter-spacing, text-shadow,text-align, и селекторов вида ::first-letter и ::first-line

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

База изображений в любых форматах и разрешениях

Время на прочтение3 мин
Охват и читатели4.6K
заказчик: Пусть аватарки пользователей у нас будут в 50×50 и 100×100, в JPEG
разработчик: Готово

заказчик: Надо переделать, чтобы аватарки были в PNG
разработчик: Сделал

заказчик: Пусть аватарки будут в GIF, 25×25 и 40×40
разработчик: Ага, проверяй
заказчик: Уже? Как ты это так быстро делаешь???
разработчик: …
Читать дальше

Правильный захват контекста в Javascript

Время на прочтение5 мин
Охват и читатели37K
Довольно часто во многих статьях я вижу, как люди захватывают контекст this для использования в анонимной функции и удивляюсь — то, что уже стало стандартом — просто ужасная практика, которая противоречит всем канонам программирования. Вам знакома такая запись?
var self this;
Может вам тоже стоит переосмыслить этот аспект?
Читать дальше →

Getting Started with MongoDB and PHP

Время на прочтение18 мин
Охват и читатели63K
Generation Next
За последний год произошла небольшая революция в мире СУБД, связанная с появлением безсхемных (безструктурных) СУБД таких как Apache CouchDB. В этих базах данных используется другой подход нежели в реляционных БД. Они достаточно быстро становятся популярны среди Web-разрабочиков из-за своей гибкости, простоты и легкой интеграции с современными технологиями такими как JSON.
В данной статье изложен краткий обзор MongoDB, одной из новых поколений безсхемных СУБД, которая получила большое внимание разработчиков.
Let's get started!

Обзор нескольких новых плагинов jQuery

Время на прочтение4 мин
Охват и читатели6.5K
Довольно часто я наступаю на одни и те же грабли. Стараясь выполнить какой-нибудь проект побыстрее, я с головой ухожу в реализацию необходимой функциональности. А через неделю, мне на глаза обязательно попадается описание библиотеки, фреймворка или плагина, воспользовавшись которыми, я мог бы выполнить свою часть работы в разы быстрее. В общем, сейчас я стараюсь быть в курсе готовых решений в интересующих меня областях. В последнее время мне часто приходится работать с javascript и поэтому, сейчас я уделяю особое внимание библиотеке jQuery и ее плагинам. Должен сказать, что упускать из виду такое разнообразие готовых решений просто нельзя. Данная статья сделана на основе обзора «50 Awesome New jQuery Plugins», который я прочитал пару дней назад.
Читать дальше →

MapReduce: более продвинутые примеры, попробуем без зауми

Время на прочтение9 мин
Охват и читатели35K
Чтобы не откладывать в долгий ящик сразу порассказываю несколько других примеров для MapReduce, обещанные в топике "MapReduce без зауми". (Если не понимаете полностью что такое MapReduce — прочитайте тот топик сначала! Без него не разберетесь)

Поговорим тут о подсчетах национальностей в городах, средних оценках и приводах учеников, ТИЦ, PageRank, входящих ссылках, нишевых ключевых словах, словах-синонимах, социальных сетях и общих друзьях. Постараемся обойтись без математических знаков и зауми.

Однако тема сама по себе сложная и все же напрячь мозги придется. Когда поймете — будет очень просто.

Входящие ссылки


Допустим у нас есть Интернет. В Интернете есть исходящие ссылки.

Допустим на входе у нас есть такие данные об ИСХОДЯЩИХ ссылках, собранные нашим паучком:

habrahabr.ru -> thematicmedia.ru, apple.ru, microsoft.com, ubuntu.com, yandex.ru
thematicmedia.ru -> habrahabr.ru, autokadabra.ru
autokadabra.ru -> habrahabr.ru, yandex.ru


Т.е. мы знаем, что Хабр ссылается на Apple, MS, Ubuntu и Яндекс но кто ссылается на Хабр? Да, вопрос примитивный, но все же разложим на MapReduce. Дальше будет интереснее и этот пример понадобится.

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

MapReduce или подсчеты за пределами возможностей памяти и процессора (попробую без зауми)

Время на прочтение8 мин
Охват и читатели94K
Давно хотел рассказать про MapReduce, а то как ни взгляшешь на подобное — такая заумь, что просто ужас берет, а на самом деле очень простой и полезный подход для многих целей. И реализовать самому — не так уж и сложно.

Сразу скажу — топик — для тех, кто не разобрался что такое MapReduce. Для тех, кто разобрался — полезного тут ничего не будет.

Начнем с того как собственно родилась лично у меня идея MapReduce (хотя я и не знал, что он так называется, и, разумеется, пришла она мне куда позже чем Гугловсцам).

Сначала опишу как она рождалась (подход был неправильный), а потом как надо правильно делать.

Как посчитать все слова в Википедии (неправильный подход)


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

В самом простом случае мы можем завести хеш (dict, map, hash, ассоциативный массив, array() в PHP) и считать в нем слова.

$dict['word1'] += 1

Но что делать когда память под хеш кончится, а мы посчитали только одну сотую всех слов?

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

Fugue Icons 3.0

Время на прочтение1 мин
Охват и читатели5.1K
Fugue Icons 3.0

Всеми любимый набор иконок — Fugue, обновился (16 июля) до версии 3.0. Изменения небольшие, были добавлены 32 гипер-маленькие иконки.

Мега-превью! (3Mb)
Иконки
Иконки + исходники

А вот и сами изменения...

Деловая репутация в интернете

Время на прочтение13 мин
Охват и читатели6.9K
Деловая репутация — крайне уязвимый нематериальный актив, и особенно легко нанести ей ущерб в интернете — виртуальном пространстве, механизмы регулирования которого в России находятся лишь в стадии становления. Можно годами наращивать производство и увеличивать продажи, тратить миллионы на собственный имидж, но один материал на посещаемом сайте или негативный отзыв более-менее знаменитого блоггера, а порой и бесславного анонима на каком-нибудь форуме могут привести к катастрофе.

Главное свойство интернета — копипаст — позволяет бесконечно тиражировать любое попавшее туда информационное сообщение. Стоит продать «тысячнику» товар, качество которого его не удовлетворяет, как спустя пару часов это событие может стать центральным в интернет-СМИ с миллионной аудиторией. А что если претензии к продукту или услуге надуманны, а информация об их плохом качестве не соответствует действительности или, по крайней, так думает производитель?

В таком случае этот производитель пойдет в суд. Исков о защите репутации становится все больше. По данным справочно-правовой системы Право.ru, в 2009 году в арбитражные суды поступило 98 таких заявлений, а в 2010 году 107 — только за восемь месяцев (подсчитывались дела, связанные с интернетом). Право.ru представляет рейтинг самых крупных исков о защите деловой репутации, связанных с российским сегментом интернета, и подробно разбирает первую десятку.
Читать дальше →

Декодирование JPEG для чайников

Время на прочтение9 мин
Охват и читатели293K

[FF D8]


Вам когда-нибудь хотелось узнать как устроен jpg-файл? Сейчас разберемся! Прогревайте ваш любимый компилятор и hex-редактор, будем декодировать это:


Jpeg file in hex editor


Специально взял рисунок поменьше. Это знакомый, но сильно пережатый favicon Гугла: Google favicon


Последующее описание упрощено, и приведенная информация не полная, но зато потом будет легко понять спецификацию.


Даже не зная, как происходит кодирование, мы уже можем кое-что извлечь из файла.


[FF D8] — маркер начала. Он всегда находится в начале всех jpg-файлов.


Следом идут байты [FF FE]. Это маркер, означающий начало секции с комментарием. Следующие 2 байта [00 04] — длина секции (включая эти 2 байта). Значит в следующих двух [3A 29] — сам комментарий. Это коды символов ":" и ")", т.е. обычного смайлика. Вы можете увидеть его в первой строке правой части hex-редактора.

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

F3: маленький PHP-фреймворк с огромными возможностями

Время на прочтение7 мин
Охват и читатели27K


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

Fat-Free чем-то похож на известный Ruby-фреймворк Sinatra. Автор Fat-Free помешан на минимализме и чистоте кода, что положительно отразилось на этом простом каркасе для разработки самых разнообразных приложений.

Fat-Free состоит из одного файла и весит всего 55KB. При этом фреймворк обладает таким функционалом: специфический и довольно удобный шаблонизатор, гибкое кеширование, автоматическая защита от спама, интегрированные средства для юнит тестов, профайлер кода.

Он настолько маленький и быстрый, что даже может использоваться для контроля траффика Web-сервера.

Это, также, единственный фреймворк, который защищает Ваше приложение от хотлинкинга и DoS атак.
Читать дальше →

Обзор NoSQL систем

Время на прочтение5 мин
Охват и читатели56K
Беспрецедентные объемы данных заставляют разработчиков и бизнес приглядываться к альтернативам реляционных баз данных, используемым вот уже более тридцати лет. В совокупности все эти технологии известны как «NoSQL базы данных».


Основной проблемой является то, что реляционные базы данных не могут справляться с нагрузками актуальными в наше время (мы говорим о high-load проектах). Есть три конкретные проблемных области:
  • горизонтальное масштабирование при больших объемах данных, например как в случае Digg (3 терабайта для зеленых значков, отображаемых, если ваш друг сделал dugg на статье) или Facebook (50 терабайт для поиска по входящим сообщениям) или eBay (2 петабайта в целом)
  • производительность каждого отдельного сервера
  • не гибкий дизайн логической структуры.
Читать дальше →

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Зарегистрирован
Активность

Специализация

Фулстек разработчик, Веб-разработчик
Ведущий
Git
PostgreSQL
Docker
Redis
Ruby on Rails
Ruby
Nginx
Linux
SQL
Английский язык