Search
Write a publication
Pull to refresh
40
0

User

Send message

Краткий обзор membase — нового NoSQL решения от авторов memcached

Reading time3 min
Views5.6K
MemBase — открытое, распределенное персистентное хранилище ключ-значение оптимизированное для хранения данных веб-приложений.

  • персистентен
  • имеет квази-постоянное (quasi-deterministic) малое время отклика
  • высокая скорость работы
  • линейно масштабируется с одного сервера до тысяч
  • не имеет схемы данных (только ключ-значение)
  • совместим по протоколу с memcached


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

Redis 2.0

Reading time2 min
Views5.9K
3 сентября 2010 незаметно вышел Redis 2.0. Появилось много интересных возможностей. Некоторые из них расширяют границы продвинутого key-value хранилища до организации очередей и не только. Перевод списка новых возможностей с сайта Redis:

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

Стоит упомянуть, что Redis 2.0 только достиг своего первого стабильного релиза, Redis 2.2 близок к замораживанию новых возможностей, поэтому будьте готовы к новым восхитительным штукам уже скоро!

MULTI/EXEC

Семейство MULTI/EXEC команд было добавлено, чтобы заполнить необходимость выполнять несколько команд, как один атомарный блок (от переводчика: в общем-то это аналог транзакций в обычных базах данных). Потому что все команды внутри блока MULTI/EXEC сериализуются и выполняются последовательно, то невозможно, чтобы другой клиентский запрос был выполнен в середине выполнения этого блока. Все команды выполняются одна за другой, когда вызывается EXEC. Это гарантирует, что либо выполняются все команды, либо ни одна, независимо от состояния соединения с клиентом.
Читать дальше →

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

Reading time3 min
Views13K
Решая упражнения к книге «Программируем коллективный разум», я решил поделиться реализацией одного из алгоритмов упомянутого в этой книге (Глава 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}}

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

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

Achtung: DDoS

Reading time1 min
Views2.1K
Сегодня вечером на Хабр началась DDos-атака. Так что сайт время от времени может «уходить в себя». Посмотрим, как проживем ночь, если завтра будет продолжаться — будем подключать тяжёлую артиллерию. DDoS'ят ботнетом с разных адресов, от Китая до Мексики тупым UDP-флудом, который временами забивает канал целиком (а в проводе пока всего 100 мегабит). Мы, конечно, догадываемся, кто заказчик атаки, но пока об этой информации распространяться не будем. Можно только выразить сожаление, что некоторые не совсем адекватные личности только так, исподтишка могут решать споры.
Читать дальше →

cut и grep или awk?

Reading time2 min
Views79K
Часто в скриптах можно встретить что-то вроде foobar|awk '{print $1}' («часто» — это действительно часто).

Такой вызов awk всего лишь вывходит первую (n-ную) колонку из вывода предыдущей команды. Но это явный оверкилл! awk — довольно мощный язык потоковой обработки данных, и применение его как простого field-separator не есть хорошо.

Для вырезания из строки указанного поля лучше использовать команду cut. Она умеет меньше, а потому проще в использовании и быстрее.

В современном линуксе обработка вызова awk куда более сложна, чем вызов cut. В дебиане, например, awk — линк на /etc/alternatives/awk, который ведёт (чаще всего) на gawk. Который почти в 10 раз больше по размеру, чем cut. Разумееся, cut загружаеся быстрее.

cut умеет вырезать не только байты, но и нужные поля (опция -f). Поле — это текст между разделителями. По-умолчанию разделитель пробел/табуляция, но он легко меняется опцией -d.

Второй подход — использовать опцию -o у grep. Эта опция выводит не всю строку, а только совпадающее с критерием поиска grep. Очевидно бесполезно при поиске точной подстроки, но очень полезно при использовании регулярных выражений.

Например,
grep -v "#" /etc/inittab |cut -f 4 -d : -s
выведет список программ, запускающихся init'ом (четвёртое поле, поля разделяются двоеточием).

Или
grep http://\\S\\+ -o /var/log/apache2/error.log
выдаст список URL'ов из файла с ошибками (первый урл в строке).

… и никакого awk.

UPD: В комментариях подсказывают ещё более интересную конструкцию без запуска внешнего файла (команда read реализуеся средствами bash'а):
foobar | (read p1 p2; echo p1)

P.S. Речь не о единичном вызове (тут нет разницы awk, grep или даже python/perl). Речь о множестве вызовов в цикле в скрипте. Все примеры сравнивайте в цикле с сотнями (лучше тысячами) вызовов.

Создание ознакомительного поискового движка на Sphinx + php

Reading time5 min
Views105K

Предыстория


Раньше для поиска по сайту мы использовали обычный fulltext поиск. Но в определенный момент он перестал нас устраивать и мы решили опробовать альтернативную технологию поиска: Sphinx. К сожалению, у сфинкса совсем нет русской документации, поэтому эта статья — аналог статьи Build a custom search engine with PHP, только на русском языке и для моего локального окружения (windows 7, mysql/php)
Статья состоит из 4 частей:
  1. Краткий рассказ про подготовку базы для поиска.
  2. Рассказ про первоначальную установку и настройку сфинкса
  3. Индексирование базы и тестовый поиск из командной строки
  4. Тестовый поиск из php

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

Использование git во Flash разработке

Reading time10 min
Views5.9K
Я давно уже начал писать эту статью, но меня опередили (8.
Основная задумка была объяснить братьям флэшерам как работать с git. В статье я попытался описать свой личный опыт, а не просто перечислить очевидные плюсы git. Поэтому она будет полезна всем.

В первую очередь буду рад дополнениям и исправлениям. И конечно же вопросам.

Что такое git


git — это распределенная система контроля версий. Отличается от SVN отсутствием необходимости в центральном репозитории (который все же хорошо было бы держать) и легкостью работы с ветками (branch). Изначально я решил попробовать его в работе прочитав эту статью, что всем рекомендую.

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

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

Шаблонизация на стороне клиента — уже реальность

Reading time2 min
Views27K

Предыстория


Я занимаюсь разработкой IFrame приложений для социальной сети ВКонтакте. Самый удобный способ навигации по приложению — это динамическая подгрузка данных, без перезагрузки всей страницы. Раньше я генерил html код который нужно отобразить на сервере, пока не встретил EJS — JavaScript Templates…

EJS — Embedded JavaScript


EJS оказался одним из самых удобных и подходящих мне шаблонизаторов. Он работает, как с одиночными переменными, так и с массивами (читай объектами), присутствует логика (if...else...).
Читать дальше →

И javascript шаблонизатор

Reading time3 min
Views2.4K
В наше время существует уже немалое количество таковых, не правда ли? Они даже неплохо справляются со своей работой, если надо, к примеру, сформировать HTML за сотые доли секунды – это довольно быстро, и пользователь не чувствует этой задержки. И почему же мы все не кидаемся вовсю использовать шаблонизацию на стороне клиента? Ну вот к примеру несколько пунктов:
– генерировать страницу (бОльшую её часть) становится таки уже накладно;
– если у вас используется смешанная шаблонизация (шаблоны и на javascript, и на вашем любимом скриптовом языке), то возникнет ситуация, когда они у вас дублируются;

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

Защита от DDOS атаки случайными аргументами при помощи Nginx

Reading time1 min
Views3.4K
Я встретился с новым типом ботнета. Если старый долбил только в главную, то новый действует иначе. Он посылает множество запросов вида
GET someurl/?t1555ss5326=5326, где someurl — найденный ботом php скрипт.
Но если атакуемый сайт поддерживает ЧПУ, то такие запросы к нему должны отсутствовать в принципе. ЧПУ сейчас является стандартом де-факто, по этому можно смело отрезать такие запросы, логируя IP ботов.
Для этого очень удобен nginx, и его переменная is_args, которая имеет значение "?", если в URI идут аргументы. Базовая конструкция выглядит так:

if ($is_args = "?") {
return 403 444;
}

Очень просто и красиво, правда?
Вот как выглядит LA после включения этой защиты:
load average: 1.50, 3.09, 6.96
Текущий ботнет из ~20000 зомби, делают 5-8k одновременных запросов.

GRUB: Получаем полный доступ к системе

Reading time3 min
Views99K
GRUB, безусловно, является самым продвинутым загрузчиком на сегодняшний день, и за это любим админами и разработчиками по всему миру. Его функционал настолько широк, что он практически монополизировал рынок загрузчиков в мире *NIX, а некоторые вообще говорили, что GRUB2 — это скорее маленькая операционная система, чем просто загрузчик. Эдакий швейцарский нож в мире загрузчиков.

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

How To настроки репликации в MySQL с использованием шифрования SSL на Debian Lenny

Reading time7 min
Views14K
Это руководство описывает, как настроить репликацию базы данных в MySQL с использованием SSL соединение для шифрования.
MySQL репликация синхронизирует базу данных, что позволяет иметь точную копию БД на другом сервере. Все обновления БД на главном сервере автоматически реплицируются на другой сервер, что позволяет защитить базу от аппаратных сбоев. В этой статье будет показано, как реализовать репликации БД exampledb с сервера server1.example.com(ip адресом 192.168.0.100) на сервер server2.example.com(ip адресом 192.168.0.101) с использованием SSL соединения
Читать дальше →

Распараллеливание длительных операций

Reading time2 min
Views12K
Мне часто приходится сталкиваться с задачами, требующими от базы данных очень большой производительности при обработке больших массивов данных. Сегодня я расскажу об очень простом, но действенном приеме, который может вас выручить, если база уже не поспевает за тем количеством данных, которые скапливаются и должны быть обработаны. Метод не зависит от базы данных, но по привычке публикую в блог PostgreSQL, и пример будет именно на ней. Давайте сразу перейдем к примеру.
Читать дальше →

Высокодоступное отказоустойчивое web-приложение на Apache2 и MySQL

Reading time7 min
Views18K

HA-Apache2 Web-Site and HA-MySQL


Цель: обеспечить высокую доступность web-приложения и минимальное время простоя при отказе одного как web-сервера, так и сервера баз данных.
Замечание! Схема предполагает, что web-приложение и база данных находится на разных серверах.
Для примера будем устанавливать wordpress.

Вариант решения:
Поскольку web-приложение должно быть постоянно доступно, то необходимо минимум два сервера с установленным приложением. Серверы будут отслеживать состояние друг друга, при этом в каждый момент времени ведущим будет только один из них. В случае отказа ведущего сервера его роль принимает второй. Когда первый сервер будет вновь доступен, к нему опять вернется роль ведущего.
Читать дальше →

И ещё про «домашний» Asterisk

Reading time4 min
Views19K
Прочитав этот пост, решил поделиться и своим опытом.

В данный момент решены 2 простые задачи:
  • все звонки, поступающие на PSTN номер (обычный городской), переадресовываются на мобильный телефон, который у меня всегда в кармане и, одновременно, на SIP телефон, который стоит дома
  • с SIP телефона я могу звонить как по России, так и в некоторые нужные мне страны по минимальным тарифам.

Как это сделано?
Читать дальше →

Новый Redis 2.0 и Rediska 0.5.0!

Reading time5 min
Views7.4K
RediskaДорогие друзья! На прошлой неделе вышел стабильный релиз чудесной key-value базы Redis версии 2.0 с внушающим количеством нововведений. Эта новость особенно нас обрадовала, так как мы уже год используем Redis в наших нагруженных проектах и впечатления только положительные. Мы обновили PHP клиент Rediska, добавив поддержку новых возможностей.

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

Ревью кода в mercurial

Reading time3 min
Views4.6K

hg review — полезная плюшка для mercurial'а


У git'а есть GitHub, а у Mercurial'а есть hg review. На самом деле я сравнил козу с бояном.
image
Ревью кода.

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

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

Почему Git

Reading time8 min
Views69K
Было время, когда я ничего не знал про VCS, ни что это такое, ни тем более зачем это мне. И верхом своих достижений считал папочку с архивами версий. К моменту осознания необходимости системы контроля версий я уже набил шишек и прочувствовал необходимость такого инструмента. Но борландовский аналог CVS меня не впечатлил. У каждого файла свой номер версии. Как мне получить срез определенного релиза я так и не разобрался. А в это время SVN победоносно шла сквозь умы разработчиков. Черт, это было то, чего мне так не хватало. Прочитав доку и начав работать я просто влюбился в нее. Да, были трудности и определенные неудобства, но куда без них.
Так я и работал бы в SVN, но ничего не стоит на месте. В интернете уже потекли тонкие ручейки новостей про Git. Я не кидаюсь за каждой новой технологией, и прошло уже достаточно много времени, пока мне не прожужжали этим Git’ом все мозги. Мне стало любопытно, я вначале присматривался, примерялся, а потом плюнул и начал новый проект на Git. Мучался с ребятами 2 недели, накачал литературы, написал шпаргалку… ничего, привыкли, … а потом меня поперло.

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

Understanding node.js

Reading time4 min
Views10K
Node.js обычно вызывал у людей, которым я о нём рассказывал, две различные реакции. В основном они воспринимали его «как есть», однако многие были сбиты с толку.

Если вы относитесь ко второй группе, я попробую объяснить, что же такое Node.js:
  • Это инструмент командной строки. Вы скачиваете архив, компилируете и устанавливаете его.
  • Это позволит вам выполнять программы на JavaScript, набрав 'node my_app.js' в терминале.
  • JavaScript выполняется движком V8 (тем самым, благодаря которому так быстро работает Google Chrome).
  • Node.js предоставляет API для доступа к сети и файловой системе из JavaScript.
Вам хочется чего-то большего? Тогда прошу заглянуть под кат и продолжить чтение

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

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

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

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Date of birth
Registered
Activity