Обновить
13
0

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

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

Быстрое восстановление пароля по MD5-хешу методом брутфорса

Время на прочтение3 мин
Охват и читатели28K
Наверное каждый из нас хоть раз забывал пароль от какого-нибудь важного сайта, а потом пытался расшифровать его по сохранившимся кукам в браузере. Возможно это были даже не Ваши куки, но это не важно — если Вам интересна тема скоростного брутфорса, то добро пожаловать под кат!

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

Еще один взгляд на кэширование на Drupal

Время на прочтение3 мин
Охват и читатели3.7K
На хабре недавно была опубликована статья под названием "Кэширование на Drupal". Хотелось бы добавить несколько соображений по теме.

Ни для кого не секрет, что Drupal голоден до ресурсов, а кэширование это чуть ли не первое что приходит в голову. Расскажу как выстроена общая схема кэширования на нашем сайте.

Первая линия обороны — мы используем CDN (Content Delivery Network), в нашем случае это AKAMAI. AKAMAI настроен на кэширование всего. Картинки, CSS, JavaScript, ответы на все GET запросы, все это кешируется в не зависимости от того аноним пользователь или зарегистрирован. Интервал кэширования от 1 до 5 минут для страниц, 45 минут для CSS и JavaScript, и час для остальных ресурсов. Такое распределение позволяет существенно уменьшить нагрузку на сервера.
Читать дальше →

nginx + apache. Кеширование

Время на прочтение4 мин
Охват и читатели20K
Привет, %username%
Тут я хочу рассказать о том, как я настраивал кеширование на одном сервере, точнее VDS. Характеристики сервера: 2000MHz, 2GB RAM, 80Gb HDD, технология виртуализации — OpenVZ.
Было решено использовать Nginx версии 0.7.64. На сервере находилось около 200 сайтов. И несколько высоко нагруженных проектов. Вот эти самые проекты и давали ощутимые тормоза и нагрузку на сервер. Мы будем рассматривать DLE в этом примере.
Читать дальше →

Применение алгоритмов нечеткого поиска в PHP

Время на прочтение7 мин
Охват и читатели31K
Вдохновленный топиками о нечетком поиске и фонетических алгоритмах, захотел попытаться реализовать нечто подобное похожее на гугловское «Возможно, вы имели в виду: ...» средствами PHP.

Для исправления опечаток в словах понадобится:
Расстояние Левенштейна (или расстояние Дамерау-Левенштейна — разница будет незначительной) — levenshtein()
Metaphonemetaphone()
Алгоритм Оливера — similar_text()
База русских слов (с падежами, учетом времен и т.д.).
Читать дальше →

Юзабилити веб-форм или онлайн-заказ по-человечески

Время на прочтение7 мин
Охват и читатели5.5K
Сегодня мне пришел заказ от весьма крупной компании. Они просят реализовать на одном из их сайтов вот такое решение (орфография оригинала, названия изменены):

Пользователь на сайте заходит в «Калькулятор стоимости решения „ЗАО Рога и Копыта“.
Там он отвечает на 11 вопросов для расчета стоимости решения. После этого пользователю должно быть предложено заполнить свои ФИО, должность, название организации и email.
На указанный email должно быть отправлено уведомление: „По указанному адресу в скором времени Вам будет выслана стоимости решения “ЗАО Рога и Копыта», на основе заполненной на сайте rogaiko.pyta анкеты".
На нашу почту должены прийти контакты пользователя и ответы на вопросы. В течении суток мы рассчитываем решение и высылаем на указанный адрес.

(прим.авт. — средняя стоимость решения более миллиона рублей).

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

1. «Калькулятор» означает устройство, которое выполняет расчет и выдает результат сразу.
Называя онлайн-сервис «калькулятором», мы как бы обещаем пользователю, что после того, как он потратит свое время и заполнит анкету, он сразу получит важный для него результат.
Если это не так, если над ответом будут трудиться живые люди, и придет он через пару дней, то мы не должны обманывать пользователя, называя этот сервис «калькулятором». Этот сервис правильнее назвать «запрос ценового предложения». Это операция совершенно иного характера, и заниматься такими запросами будут совсем иные люди с иной целью.
Особенно вызовет раздражение пользователя ситуация, когда о том, что это на самом деле не калькулятор, он узнает лишь после того, как заполнит и отправит анкету.

2. Большинство пользователей настоящих онлайн-калькуляторов подсчитывают на них что-то, в основном, ради любопытства, пусть и не праздного. Для них это быстрый способ узнать, стоит ли им тратить время на общение с этой компанией, или нет, а если да, то можно ли как-то сэкономить на том или ином решении. Для этого они могут пользоваться калькулятором несколько раз, вводя разные параметры и сравнивая результаты. Делается это, как правило, без особой предварительной подготовки, и некоторые параметры пользователь может ввести с изрядной погрешностью, что называется, «от фонаря». Заниматься этим будет, вероятно, сотрудник невысокой должности и квалификации, либо просто частное лицо.
Факт использования калькулятора совершенно не означает готовности пользователя пойти дальше и сделать заказ. Калькулятор лишь облегчает ему процесс принятия решения. И возможность быстро, навскидку, сравнить несколько результатов ему в этом сильно помогает.
Читать дальше →

Введение в Cappuccino

Время на прочтение10 мин
Охват и читатели5.1K
Фреймворк Cappuccino – уникальная технология, позволяющая создавать веб-приложения десктопного качества. Он абстрагирует DOM и вместо него предоставляет Cocoa-подобный API. Вместо того, чтобы возиться с CSS-версткой и кроссбраузерными проблемами, вы используете интерфейсы, специально созданные для разработки приложений, а не статических страниц, интерфейсы, взятые с платформ Mac OS X и iOS.

Я заметил, что на русском языке почти нет обучающих материалов о Cappuccino, и решил восполнить пробел. Этот очерк рассчитан на то, чтобы прочитав его, можно было сразу приступать к разработке своего первого Cappuccino приложения. Я познакомился с фреймворком, когда искал средство для реализации онлайновой среды разработки для своего проекта Akshell. Мне нужно было сделать полнофункциональную IDE, работающую в окне браузера, и Cappuccino отлично справился с поставленной задачей.
Читать дальше →

Заглушка для IE6 под Drupal 7

Время на прочтение1 мин
Охват и читатели3.1K
Поскольку в своих проектах мы перестали по умолчанию поддерживать IE6, сделав эту поддержку для клиентов платной — возникла необходимость в своей заглушке.



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

12 навыков создания защищенных веб-приложений

Время на прочтение8 мин
Охват и читатели22K
Данная статья не содержит никаких откровений. В первую очередь информация о типовых уязвимостях и методах их решения будет полезна начинающим. Опытные разработчики все это знают, или должны знать, если считают себя таковыми.

Большинство примеров кода не привязаны к какому-либо конкретному языку программирования, но для наглядности я буду использовать PHP.

Итак, поехали.

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

Копируем исходный код без нумерации строк

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

Бывает при выводе информации требуется ее декорировать для лучшего восприятия, нередко оформление сопровождается в том числе и текстом. При выделении и копировании этой информации, оформление копировать не нужно, т.к. нужна только сама информация, и желательно в исходном виде. То есть при копировании часть выделенного текста не должна попадать в буфер обмена.
В моем случае это исходный код, который сопровождается нумерацией строк, так нагляднее и есть возможность сослаться на строку кода. Однако, если мы хотим скопировать часть кода, то он должен копироваться без номера строки.
Многие highlighter'ы этим грешат, при копировании кода копируют в том числе и номера строк. Выходят из ситуации по разному: либо используют хитрую верстку, при которой возможно несовпадении нумерации со строками (можно заметить на github например), или используют специальную кнопку, которая показывает в отдельном окне код без форматирования. Мне показались эти подходы неудовлетворительными, потому решил найти другое решение.
В данной заметке я опишу решение, к которому в итоге пришел. Решение, конечно, частное, но может кому то оказаться полезным в решении собственных задач.
Читать дальше →

Отладка REST-сервиса на коленке — готовое решение

Время на прочтение1 мин
Охват и читатели5.7K
В процессе писания REST-сервиса уткнулся в странную проблему — не нашел приличного инструмента для отладки jsonp ответа от сервера.
За пол-дня накидал приемлемый вариант — одна html страница, которую можно хоть прямо с диска загрузить и кучка чужих js-либ, чтобы вся эта красота работала.
Выглядит примерно так:



Все бобро выложено на github, если кому-то нужно — пожалуйста!

Disclaimer: может оказаться полезным в случае если вам нужен кросс-платформенный и кросс-браузерный нативный «ajax-клиент имитатор» для кросс-доменных запросов с малым потреблением памяти и наглядным вводом и выводом ответа сервера.

Все что нужно для JSONP

Время на прочтение1 мин
Охват и читатели15K
Если вам хочется работать с JSONP, но нет желания подключать для этого большие фреймворки, то JSONP.js ваш выбор.
Либа весит 216 байт и имеет всего одну функцию, которой мы передаем url и callback.
Читать дальше →

Apache Traffic Server — уникальный кеширующий прокси-сервер для CDN

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

Однажды возникла идея запустить русско-язычную версию популярного американского сайта. После недолгих размышлений было решено реализовать полностью интерактивную схему вида examplesite.com — > examplesite-ru.com и заставить машину делать как можно больше работы.

Некоторое изучение и эксперименты с различными прокси-серверами привели к интересному продукту — Apache Traffic Server, о котором я и хочу рассказать.
Читать дальше →

UTF-8 в PHP. Часть 1

Время на прочтение14 мин
Охват и читатели24K
Здравствуйте, этим постом я хотел бы попытаться приблизить светлое будущее, в котором все используют «кошерную» кодировку UTF-8. В частности это касается наиболее близкой мне среды – веба и языка программирования – PHP, а в конце серии мы подойдём к практической части и разработаем ещё одну велосипедную библиотеку.
Читать дальше →

С чего начать разработку бизнес процессов

Время на прочтение2 мин
Охват и читатели37K
Специалисты знают, что прежде, чем автоматизировать бизнес процессы приходится эти самые процессы разрабатывать заново или оптимизировать, потому как автоматизация хаоса дело неблагодарное да, по сути, и не возможное.

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

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

Набор инструментов для построения графиков, блок-схем и диаграмм

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


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

RubyConf 2010: настоящее и будущее Руби (II)

Время на прочтение4 мин
Охват и читатели1.1K
Я предлагаю вам прочитать перевод третьей части доклада автора Руби, Yukihiro Matsumoto, на RubyConf 2010, опубликованных в его блоге на японском языке, в которой он рассказывает о Rite, минималистичной и модульной реализации Ruby, предназначенной для встраиваемых систем — «умного дома», телевизора или роботов.

Перевод дополнен материалом презентации.

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

Особенности хранения сессий PHP в memcached

Время на прочтение6 мин
Охват и читатели34K
Данная статья рассматривает одну из проблем хранения PHP-сессий в memcached: отсутствие их блокировки.

Введение

Ни для кого не секрет, что одним из самых популярных способов повышения производительности сайта является использование memcached. Об этом неоднократно говорили и приводили многочисленные примеры. Самый простой способ сделать это — использовать memcached для хранения сессий PHP. Для этого нет необходимости переписывать весь код, достаточно нескольких простых действий. Я не буду рассказывать, почему надо хранить сессии в memcached. Я расскажу о том, почему хранение сессий в memcached опасно.
Читать дальше →

Кэширование и memcached

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

Этим постом хочу открыть небольшую серию постов по материалам доклада на HighLoad++-2008. Впоследствии весь текст будет опубликован в виде одной большой PDF-ки.



Введение


Для начала, о названии серии постов: посты будут и о кэшировании в Web’е (в высоконагруженных Web-проектах), и о применении memcached для кэширования, и о других применениях memcached в Web-проектах. То есть все три составляющие названия в различных комбинациях будут освещены в этой серии постов.
Читать дальше →

Нерекурсивная выборка всего дерева Adjacency List

Время на прочтение4 мин
Охват и читатели4.2K
Вообще, чем мне не нравится Adjacency List, так это рекурсией, особенно, когда нужно выбрать дерево, без каких либо ограничений, например:
  • Все дерево комментариев;
  • Карта сайта;
  • Навигационное меню;
  • и т.д.;
Предлагаемые решения формирования массива дерева с помощью указателей, конечно, позволяют избавиться от лишних запросов к базе, но увы не исключают рекурсию, пусть по массиву, но все же. А у нас…
Читать дальше →

Иерархические структуры данных и Doctrine

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

Введение



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

В первую очередь, это связано с тем, что реляционные базы не приспособлены к хранению иерархических структур (как, например, XML-файлы), структура реляционных таблиц представляет из себя простые списки. Иерархические же данные имеют связь «родитель-наследники», которая не реализована в реляционной структуре.

Тем не менее, задача «хранить деревья в базе данных» рано или поздно возникает перед любым разработчиком.

Ниже мы подробно рассмотрим, какие существуют подходы в организации хранения деревьев в реляционных БД, а также рассмотрим инструментарий, который нам предоставляет ORM Doctrine для работы с такими структурами.
Читать дальше →

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность