Как стать автором
Обновить
10
0
Кирилл Лайонов 34g234 g24g 24g @JetMaster

Пользователь

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

Создаём правильный «мокрый пол» c перспективой изображения на Javascript

Время на прочтение1 мин
Количество просмотров1.8K
В контексте одного из моих текущих проектов была поставлена задача сделать «мокрый пол». Картинок на пол планировалось класть огромное количество (но всего по паре на страницу, с заменой). В перспективе. В перспективе, кстати, временной и пространственной.

Не найдя ничего стоящего, я взялся написать свой велосипед. И, по-сидев два с лишним вечера, сочинилась небольшая js-библиотека с generic-названием iWet.

UPD: Версия 0.2
  • Добавил белую маску. См. Демо.
  • Выложил исходик маски в .psd
  • Вылечил баг с мельканием картинки при загрузке страницы
  • Добавил readme.txt и licence.txt
  • Минимальные косметические изменения кода

Плюсы, минусы и примеры следуют
Всего голосов 83: ↑76 и ↓7+69
Комментарии67

Map/Reduce: решение реальных задач — TF-IDF — 2

Время на прочтение3 мин
Количество просмотров14K
Продолжая статью “Использование Hadoop для решения реальных задач”, хочу напомнить, что в прошлой статье мы остановились на том, что посчитали такую характеристику как tf(t,d), и сказали, что в следующем посте мы будем считать idf(t) и завершим процесс вычисления значения TF-IDF для данного документа и термина. Поэтому предлагаю долго не откладывать и переходить к этой задаче.

Важно заметить, что idf(t) не зависит от документа, потому как считается на всем корпусе. Это нетрудно увидеть, посмотрев на формулу:



Вероятно, она нуждается в некоторых пояснениях. Итак, |D| это мощность корпуса документов — иными словами, просто количество документов. Мы знаем его, поэтому считать ничего не надо. Знаменатель же логарифма — это количество таких документов d которые содержат интересующий нас токен t_i.

Читать дальше →
Всего голосов 44: ↑38 и ↓6+32
Комментарии13

Тюнинг nginx

Время на прочтение8 мин
Количество просмотров96K
Статья написана по материалам моего доклада на CodeCamp 2009.

Для многих из нас настает тот долгожданный день, когда аудитория сайта начинает стремительно расти. Каждое утро мы, затая дыхание, смотрим на графики google analitycs и расплываемся в улыбке, когда взят рубеж в очередную тысячу посетителей в день. Как правило, рост посещаемости не совпадает с ростом технической базы и сайт начинает тормозить. Тут в игру вступает сисадмин...

У любого проекта всегда есть что оптимизировать: можно почитать советы по оптимизации на webo.in, установить eaccelerator, memcache, проиндексировать поисковые поля в базе данных. Я предполагаю, что все это уже проделано, а сайт по прежнему тормозит.

Пришло время оптимизировать nginx...

Читать дальше →
Всего голосов 102: ↑100 и ↓2+98
Комментарии69

Работаем с Google Protocol Buffer в РНР

Время на прочтение9 мин
Количество просмотров14K
pb4php_logoВ проекте, который я сейчас разрабатываю, возникла необходимость смены протокола, который используется для обмена данными между частями приложения. Сейчас, на уровне внутренних сервисов, обмен происходит через передачу сериализированных массивов РНР поверх TCP сокетов. Так как по обе стороны находятся приложения на РНР, проблем не возникает, формат пакета данных также стандартный, поэтому особых сложностей нет. Разве что часто меня не удовлетворяет скорость обработки, а также то, что мы сильно завязаны на язык и платформу. Если придется стыковать с другой системой или же переписать что-либо, будут сложности — ведь сериализированный формат поймет лишь родной язык, а писать парсер мне не очень хочется. Первоначальный выбор был более чем оправданным — скорость разработки и отладки были приоритетными, сейчас есть немного времени и желания посмотреть на архитектуру с высока и другим взглядом.

Следует сказать, что данные передаются самые простые — строки (различной длины, на практике длинее килобайта или десятка почти нет, обычно это сотни байт), целые числа (в том числе и unix timestamp), некоторый набор констант, true/false флаги, только в одном случае передаются значения с плавающей точкой. В принципе, все сводится к трем типам данных — строка, целое число, число с плавающей точкой. Если хотеть, можно выделить еще поле кода команды, которое можно отнести к перечисляемому виду (количество команд ограничено и конечно, хоть и растет с ростом системы). В сериализированном виде такой пакет занимает достаточно много места, и хоть передаются данные по сокетах в пределах локальной машины, это все равно не выход — изначально система такая, что должна допускать динамическое расширение на несколько узлов кластера.

Узнать, что далее...
Всего голосов 33: ↑26 и ↓7+19
Комментарии83

Почему с нами остаются 90% клиентов

Время на прочтение2 мин
Количество просмотров18K
Это не шутка. 90% от числа позвонивших в нашу компанию остаются с нами и пользуются услугами нашей компании как минимум еще один раз. Я решил не мудрить с теорией и изложить основное тезисами. Уверен, кому-нибудь пригодится. Наш бизнес — такси, однако большинство «ноу-хау» применимы совершенно в любом бизнесе.
Читать дальше →
Всего голосов 351: ↑336 и ↓15+321
Комментарии336

Упорядочиваем диски скриптом весом меньше килобайта

Время на прочтение5 мин
Количество просмотров1.1K
Пока грипповирус подкашивает наши ряды (я уже выбыл из строя), страна празднует (у кого-нибудь стол таки был?) непонятные праздники, а Россия вот вот нападёт на Польшу (аааа), самое время упорядочить нашу коллекцию болванок %).
Итак, возьмём в руки всю силу cat'а, grep'а, sed'а и bash'а и напишем маленький но очень полезный скриптик.

Читать дальше →
Всего голосов 17: ↑10 и ↓7+3
Комментарии9

Установка SVN практически на любой хостинг (static svn)

Время на прочтение1 мин
Количество просмотров4.5K
0. Интро

Практически всегда хостинг не предусматривает поддержку svn для конечного пользователя или эта возможность идет в качестве дополнительной платной опции, а обновлять проект с большим количеством файлов — занятие не из легких. Тем более, когда изменения затронули много связанных между собой файлов. Старый вариант через фтп или закачка архива с последующей его распаковкой не особо подходит, так как влечет за собой вероятность возникновения ошибок. Будь-то недокачка какого-то файла (ftp) либо неверные права на папки\файлы (архивом). Все это для примера. Но есть более удобный способ решить эту проблему. Установить svn на хостинг.
Читать дальше →
Всего голосов 40: ↑33 и ↓7+26
Комментарии67

Используем jQuery в скриптах GreaseMonkey

Время на прочтение3 мин
Количество просмотров15K
Я хочу рассказать об удобных и неоправданно редко использующихся новшествах GreaseMonkey версии 0.8, которая доступна уже более года. Они помогут сделать пользовательские скрипты более модульными, а главное — дадут возможность без ухищрений использовать jQuery, что позволит нам «писать меньше, а делать больше». Речь идет о новых мета-параметрах пользовательских скриптов: @resource и @require.
Читать дальше →
Всего голосов 44: ↑39 и ↓5+34
Комментарии24

Ошибки конфигурирования nginx (или как правильно писать рерайты)

Время на прочтение4 мин
Количество просмотров99K
Привет, хабралюди!

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

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

Ошибка номер 1, самая фатальная.
Всего голосов 92: ↑88 и ↓4+84
Комментарии56

Готовим плагин для qutIM на дому

Время на прочтение6 мин
Количество просмотров863
Cегодня мы будем заниматься приготовлением плагина для qutIM'а, но не для того, который совсем недавно зарелизился, а для будущего, активная разработка которого сейчас идёт.
Для начала хотел бы сказать немного общих слов:
  1. В sdk03 мы постарались учесть все «ошибки бурной молодости»
  2. Оно полностью несовместимо со старым skd02
  3. Скорее всего, больше таких резких переходов в API между версиями не будет

И именно поэтому я рекомендую всем, кто ещё ни разу не писал плагины для Кутима, ориентироваться на sdk03
Хочу отметить немаловажный факт, что сейчас разработка ведется с использованием Qt 4.6, она предоставляет огромные дополнительные возможности, от которых просто грех отказываться.
Если вы горите желанием реализовать что-то интересное, но не знаете куда направить свою энергию, то эта статья для вас!
Поехали
Всего голосов 30: ↑20 и ↓10+10
Комментарии18

PHP: Реализация формальных грамматик

Время на прочтение7 мин
Количество просмотров2K
Недавно мне нужно было написать парсер для строки поиска, который приводит строки вида
(aa&bb)^(!cc^!(dd^ee)) в строку вида куска SQL: (?f LIKE "%aa%" AND ?f LIKE "%bb%") OR (?f NOT LIKE "%cc%" OR !((?f LIKE "%dd%" OR ?f LIKE "%ee%")) ). Я написал like и SQL для упращения, на самом деле там был SPHINX, да и не оптребовалось оно в конце концов, но разговор о том как я этого добился написав формальные грамматики и реализовав их на PHP.
Читать дальше →
Всего голосов 22: ↑12 и ↓10+2
Комментарии30

Как заработать на торговых автоматах: кофе, снеки и все-все-все

Время на прочтение7 мин
Количество просмотров8.4K
Блог им. Andorro при поддержке портала «Век Вендинга» продолжает серию публикаций (1, 2) про вендинговый бизнес в России. На сей раз мы расскажем вам о том, какие бывают торговые автоматы.

Предупреждение: в этой статье будет много матов — в частности, кофематов, снекоматов и прочих хотдогоагрегатов. А также парочка вредных советов и несколько картинок. Кому это надо — добро пожаловать под кат.

Читать дальше →
Всего голосов 100: ↑89 и ↓11+78
Комментарии98

Memcached и метки. Реализация для фреймворка Kohana

Время на прочтение4 мин
Количество просмотров3.2K
Приветствую всех.

Уже довольно давно разрабатываем проект на кохане и встала необходимость эффективного кэширования данных. Не то, чтобы вопрос производительности стоит очень остро в данный момент, но, хотелось бы подготовится заранее, а не писать систему кэширования в ночь после волны посетителей. Да и посещаемость постоянно растет, а в некоторые моменты бывают всплески до 3х раз по сравнению с обычным днем.

Собственно, в выборе системы кэширования особых вопросов не было — на ум сразу приходит всем известный memcached.

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

Итак, представим ситуацию, что мы храним в кэше данные записей блога под ключами post_. В определенный момент нам требуется сбросить все записи с постами, при этом не очищая кэш полностью (там могут хранится другие данные, значения которых все еще актуальны). Ситуация получается безвыходная. Мы не знаем список ключей постов, получить их нет возможности, сбросить ключи по паттерну тоже невозможно. Что же делать?

Решение есть.
Всего голосов 25: ↑20 и ↓5+15
Комментарии19

Подборка плагинов к jQuery

Время на прочтение2 мин
Количество просмотров5.8K
Вдогонку к этому посту, решил выложить еще одну неплохую и достаточно свежую подборку.

jReject — jQuery Browser Rejection

jReject

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

Еще плагины
Всего голосов 116: ↑98 и ↓18+80
Комментарии28

Работаем с SQLite в AIR приложениях

Время на прочтение7 мин
Количество просмотров4.1K


Здравствуйте ценители (и не только) Flash, Flex и AIR.

Сегодня я расскажу как работать с локальной базой данных (SQLite) в AIR приложениях.

Для работы нам понадобится Flex Builder, какой-нибудь, редактор SQLite (я использую приложение для FireFox SQLite Manager) и немного терпения.

Подробности под катом...
Всего голосов 34: ↑29 и ↓5+24
Комментарии46

Сборка Zend Framework

Время на прочтение5 мин
Количество просмотров1.8K
Для ускорения Zend Framework очень действенен такой финт: собираем все классы, которые нам нужны, в один фаил, а потом включаем eAccelerator и инклудим его в самом начале. Один фаил + еАкселератор круче, чем много фаилов.

Под катом — рассказ, как я это сделал. Это не самое умное, лучшее и красивое решение, поэтому я рад послушать ваши советы и замечания. В общем, топик этот — ради ваших советов и замечаний — тех, что по делу, а не по поводу всякой херни типа орфографических ошибок. Спасибо!

Читать дальше →
Всего голосов 34: ↑19 и ↓15+4
Комментарии41

Securelist.com — XSS и SQL Injection уязвимости

Время на прочтение3 мин
Количество просмотров19K
image image
Всем привет!
Securelist.com разрабатывается Лабораторией Касперского. На сайте есть блог, в котором постяться сотрудники ЛК, а простые пользователи, зарегистрировавшись, могут их комментировать. У комментраиев есть рейтинг. Как только рейтинг всех комментариев пользователя становится >=100, то пользователь получает статус блоггера и может постить в блог. И однажды я там зарегистрировался…
Что же случилось?
Всего голосов 165: ↑151 и ↓14+137
Комментарии52

Как заработать на торговых автоматах: законы и налоги

Время на прочтение4 мин
Количество просмотров2.6K
Это вторая статья цикла публикаций о вендинговом бизнесе в России, совместного проекта блога им. Andorro и онлайн-издания "Век Вендинга".

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

Поэтому в этой статье почти не будет IT, карточных игр и голых женщин, зато будет всё то, что нужно учитывать при старте вендингового бизнеса: сертификация, лицензирование, фискализация и ограничения на продажи некоторых видов товаров.

Итак, если вы уверены, что вам это нужно — добро пожаловать под хабракат.

Читать дальше →
Всего голосов 59: ↑49 и ↓10+39
Комментарии44

1001-ый способ вертикального выравнивания

Время на прочтение2 мин
Количество просмотров128K
О вертикальном выравнивании блока неизвестной высоты по центру или низу родителя сказано много. Есть способы, основанные на display:table-cell для хороших браузеров (без кавычек) и expression для IE, способы, основанные на относительном позиционировании (могут плохо работать при переполнении). В этой заметке будет описан способ, работающий на особенностях такого мощного отображения, как встроенный блок (display:inline-block).
Читать дальше →
Всего голосов 62: ↑51 и ↓11+40
Комментарии46

Как защитить сервер от посетителей из нежелаемых стран

Время на прочтение3 мин
Количество просмотров10K
Ко мне очень часто поступают довольно интересные и нестандартные задачи по настройке серверов.

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

В моем случае — надо было заблокировать CN полностью, на RU отдавать полный канал, а на остальные страны — в два раза меньше.

Разумеется, вбивать полностью все подсети руками неудобно, да и они часто меняются. Логичнее всего было сделать это с помощью geoip.
Решение на уровне ядра и на уровне приложения
Всего голосов 46: ↑41 и ↓5+36
Комментарии30

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность