Pull to refresh
8
0
crazyprog @crazyprog

User

Send message

ОС и вебсервер — вместе веселей

Reading time3 min
Views6.1K
Привет всем. Сначала я думал, что лучше всего продолжить тему nginx на примере подчищенного и откомментированного конфига с одного из боевых серверов, но потом понял, что это потребует довольно большого объёма дополнительной информации. Поэтому, я решил попробовать, для затравки, рассказать в общих чертах о том, как nginx устроен, и почему он работает так быстро.

далее

«Виртуальная модель» или как нежно и аккуратно снять требования к проекту

Reading time3 min
Views2.4K
Жизнь — штука сложная, выкидывает порой такие забавные коленца, которые заставляют не то чтобы прыгать вперед с закрытыми глазами, скорее это похоже на попытку уехать на машине без ключей зажигания и с пустым баком. Но как показывает практика, многие веб-студии до сих пор толкают свои автомобили. Попробуем исправить это хотя бы частично.

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

Хлебнув несколько раз проблем с нехваткой данных для дальнейшей работы, я выработал для себя ряд мер, которые гордо назвал «виртуальной моделью» =)
П-п-п-помедленней, пожалуйста, я записываю!

Веб-аналитика: анализируй это! Часть 2. Сбор данных

Reading time5 min
Views18K
Перед тем, как анализировать данные статистики, нужно понимать, как они были собраны, какие из них могут быть неточными, и почему.

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

ServerSideJS: теперь проще просто. Встречайте v8cgi!

Reading time2 min
Views1.4K
v8cgi — обертка для JS-движка v8 от гугла. Меня попросили его поставить на сервер и он меня приятно удивил непредсказуемо малой прожорливостью и удобством эксплуатации.
Читать дальше →

EHcache RESTful сервер, РНР и просто эксперименты…

Reading time13 min
Views3.8K
logoСегодня мы продолжим исследования различных новых и не очень технологий, необычного их применения или просто оригинальных вещей. Возможно, вы вспомните, я когда-то писал о проекте распределённого кеша EHcache для платформы Java. Сегодня настало время продолжить эту тему, однако в другом ракурсе — в виде отдельного RESTful сервера.

читать дальше

Обновился сайт web-фреймвока Grails

Reading time1 min
Views775
image


Напомним, что не так давно компания SpringSource приобрела компанию G2One, занимавшуюся разработкой Groovy & Grails. Кроме нового приятного дизайна, появились ссылки на сайт с коммерческой информацией и обновился раздел плагинов, который получил более удобную навигацию.

Для тех, кто впервые слышит о Grails, пара слов о его особенностях:
  • Для разработки используется динамический язык Groovy, который является расширением языка Java в сторону Smalltalk, Ruby и работает поверх JVM
  • Фреймворк не написан с нуля, а представляет собой скорее DSL поверх Spring & Hibernate
  • Первые два пункта дают простую интеграцию с множеством библиотек и проектов на Java
  • Поддержкой проекта занимается компания SpringSource — один из технологических лидеров в Java-индустрии

Хочу коктейль! Сервис подборки коктейлей

Reading time1 min
Views2.4K
imageНа далее как вчера на хабре был анонсирован сервис Яндекса по поиску коктейлей.

На основе базы, которой пользуется этот сервис, предлагаю вашему вниманию сервис подборки коктейлей. Суть проста — выбираем ингредиенты, получаем результат. Отображаются все коктейли, в которые входят выбранные ингредиенты. Как все вместе, так и по одиночке. Коктейль с наибольшим количеством совпавших ингредиентов выводится выше (релевантность! =) )

В общем лучше один раз увидеть, чем сто раз услышать.

Хочу коктейль!

UPD: Сервис по сути оффлайновый. Может работать на локали без внешнего подключения. Разве что картинки не будут подгружаться. База коктейлей в статике (как и в оригинальном сервисе)

UPD: Основное отличие от, скажем, inshaker.ru — более релевантная выдача по запрошенным компонентам.

Реализация паттерна декоратор на JS

Reading time10 min
Views6.6K
Суть паттерна в том, что есть класс с фактической функциональностью (компонент) и опциональными классами-обертками, которые дополняют основной функционал (декораторы). А фишка в том, что декораторов может быть сколько угодно, совмещаться они могут в произвольном порядке и (поскольку требуют от компонента только интерфейса) — могут работать с разными компонентами.

Безусловно, реализовать что-то похожее можно даже за счет только лишь того, что функции в JS являются объектами первого уровня, но мне бы хотелось поделиться реализацией весьма близкой к ГОСТу GoF'у.

UPD: ссылка на рабочий пример, спасибо Barttos.

Перед хабракатом: в скрипте присутствует инкапсуляция, наследование (по сути) осуществляется через call, jQuery отсутствует — если Ваша идеология не позволяет принять такие ограничения, пожалуйста, не пишите об этом в комментах и, еще лучше, не читайте эту статью. Конструктивная критика и вопросы приветствуются.

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

Моя объединенная теория багов

Reading time6 min
Views6.3K

Этот перевод является продолжением серии статей про тестирование:

На очереди практические советы по построению тестопригодного кода и примеры применения изложенных знаний на реальных проектах.
P. S. Отдельное спасибо taxigy за корректуру русского перевода.


Я думаю, что баги можно разделить на три базовые категории:
  1. Логические. Логические баги наиболее популярны и часто встречающиеся. Это ваши if'ы, циклы и другая подобная логика в коде. (Мысли: это работает неверно).
  2. Баги взаимодействия. Баг взаимодействия — когда два разных объекта неправильно взаимодействуют между собой. Например, выход одного объекта является не тем, что ожидает следующий объект в цепочке. (Мысли: данные к месту назначения пришли испорченными).
  3. Баги отображения. Баг отображения — когда вывод (обычно некоторый пользовательский интерфейс, UI) отображается некорректно. Ключевой момент — в том, что это человек определяет, что есть правильно, а что — нет. (Мысли: это «выглядит» неправильно)

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

Дерево в выпадающем списке средствами XSLT

Reading time6 min
Views4.4K
Допустим, у нас на сайте есть у нас нечто иерархическое. Например, категории товаров. У категорий есть подкатегории и так далее. И пусть нам захотелось вывести эту иерархию в выпадающий список.
Далее

Переведите мне на VISA

Reading time1 min
Views6.7K
Не так давно оплачивая один небольшой проект который мне сделал другой хабраюзер я услышал следующую фразу — «У меня есть VISA, вы можете мне деньги на неё перевести?..»image
В этом топике я объясню как карточки типа Виза относятся к счетам и какие виды оплаты предпочтительнее принимать к западу от России
Читать дальше →

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

Reading time3 min
Views1.3K
Недавно на Хабре проскакивал топик вида "сделаю полезный интернет-проект за просто так, предлагайте идеи". Немножко подумав, предлагаю таковую.

Согласно экономическим исследованиям, коррупция является крупнейшим препятствием к экономическому росту и развитию, ставящим под угрозу любые позитивные преобразования в стране. Коррупцию никогда не истребить полностью. И какая-то минимальная коррупция всегда должна существовать — она будет служить индикатором того, что в каком-то месте государственной/экономической системе происходят сбои, и там пора что-то менять. Однако как её отследить?

Все наслышаны о коррупционных схемах: история со «школьным порталом», транслит в описании тендеров, и др. Широкая огласка помогла, как минимум, прекратить неоправданную трату государственных денег.
Однако существуют ещё сотни и тысячи возможностей для чиновников соблюсти «свой интерес» в ущерб государственному. Эти примеры реализуются каждый день во всех отраслях промышленности и государственного управления. Это и гос.закупки, и правоохранительные органы, таможня, строительство и т.д.

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

Организация среды веб-разработки

Reading time4 min
Views5.9K
Продуктивность коллектива веб-студии напрямую зависит от удобства среды разработки. У нас сложилась стройная система организации работы с проектами, включающая в себя набор таких неотъемлемых компонентов, как IDE, SCM, PM-система, багтрекер и development-сервер. Этим постом я бы хотел начать цикл статей, посвященных настройке и использованию этих компонентов в нашей студии.

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

Идеи

  1. Среда разработки должна быть единой для всех сайтов.
  2. Девелоперы не должны тратить время на настройку каждый своей серверной части.
  3. Работает ли над проектом один человек или несколько — контроль версий необходим.
  4. Если рабочий каталог (IDE workspace) находится на сервере, то можно поработать и дома, не тратя время на повторную настройку окружения на домашнем десктопе или ноуте.

Концепция и реализация

Жизненные советы от владельцев веб-студий: как повысить рентабельность и снизить риски. Часть 2

Reading time7 min
Views11K
Как и обещала, публикую вторую часть статьи, написанной на основе обсуждений, наблюдений и опыта партнеров UMI.CMS. Напомню, что было интересно собрать воедино и поделиться практическими рекомендациями и приемами владельцев веб-студий, позволяющими минимизировать риски и ускорить процессы на каждом этапе разработки интернет-проекта.

В первой части мы поговорили о «фишках» на этапе поиска клиентов и заключения договора. Сегодня — о дизайне, собственно разработке (внедрении) и сдаче проекта.
Читать дальше →

Канбан в IT (Kanban Development)

Reading time7 min
Views284K
Я собираюсь написать несколько статей про новую методологию гибкой разработки Канбан (Kanban Development) в целях подготовки к Scandinavian Agile Conference 2009, где я буду делать один из докладов (кстати, заодно приглашаю всех на конференцию).
Сегодня публикую первую из статей.
Основная задача первой статьи — это как можно проще описать основы Канбан: что это такое, в чем отличие от других гибких методологий и зачем это нужно.
Также я хотел бы собрать как можно больше вопросов и сомнений в комментариях, чтобы ответить на них в следующих статьях, так что пишите всё, что вам непонятно, или что ещё вы хотели бы узнать про Канбан.
Я не то, чтобы большой специалист по этой новой методологии, но мы внутри команды пришли к Канбану самостоятельно и последовательно прошли все этапы мутации от SCRUM до Канбан, так что практический опыт есть.

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

Использование составных ключей для манипуляции данными в memcached

Reading time7 min
Views3.3K
Часто, при работе с memcached, возникает ситуация, когда необходимо удалить данные в самых различных местах. Например, при добавлении нового комментария, необходимо обновить не только кеш самих комментариев этой страницы, но и ленты комментариев на главной странице, списока комментариев пользователя, счетчика комментариев пользователя, общего счетчика комментариев сайта, счетчика комментариев статьи и т.д. Можно запомнить все ключи этих данных и множество раз вызвать delete() с этими ключами.

<?php
$cache->delete('comments_art123');
$cache->delete('comments_tape');
$cache->delete('comments_user123');
$cache->delete('comments_counters_art123');
$cache->delete('comments_counters_user123');
......
?>


* This source code was highlighted with Source Code Highlighter.


Как известно, memсached хранит данные плоско, то есть одному ключу соответствует всегда одно значение. Вложенных ключей не существует. Так же нет возможности удалить группу ключей, скажем по маске. Хорошо бы было, если бы можно было сделать, например, так: $cache->delete('comments*'); Но так нельзя.

Но если нельзя, но очень хочется, то можно ;)
Читать дальше →

Redis — высокопроизводительное хранилище данных

Reading time2 min
Views102K
Бодрый день, хаброчеловеки!

Что такое Redis?


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

Чем Redis отличается от существующих решений?


API для работы с Memcached (MemcacheDB) позволяет хранить массивы, но эти массивы будут сериализованы и сохранены как строки, таким образом атомарные операции над такими массивами не возможны.
Redis позволяет хранить как строки, так и массивы, к которым можно применять атомарные операции pop / push, делать выборки из таких массивов, выполнять сортировку элементов, получать объединения и пересечения массивов.

Производительность


110000 запросов SET в секунду, 81000 запросов GET в секунду на Linux-сервере начального уровня (тесты).

Высокая скорость работы Redis обеспечивается тем, что данные хранятся в оперативной памяти и сохраняются на диск либо через равные промежутки времени, либо при превышении определённого количества не сохранённых запросов. Из этого вытекает, что используя Redis, вы можете потерять результаты нескольких последних запросов, что вполне приемлимо для большинства веб-приложений, учитывая, что обращение к Redis по скорости сравнимо с обращением к оперативной памяти. Тем не менее, потерь можно избежать через избыточность — Redis поддерживает неблокирующую master-slave репликацию.

Sharding


Redis, как и Memcached, может работать как распределённое хранилище на многих физических серверах. Такой функционал реализуется в клиентских библиотеках, и к сожалению, «из коробки» этот функционал реализован пока только в Ruby API, однако это не мешает вам хешировать ключ самостоятельно и получать ID сервера, к которому с этим ключом обращаться.

API


API доступно для следующих языков:
  • Ruby
  • Python
  • PHP
  • Erlang
  • Tcl
  • Perl
  • Lua
  • Java


API для PHP доступно как в виде модуля, написанного на C, так и в виде PHP5 класса, который общается с Redis-сервером через сокеты, таким образом не требуется устанавливать модуль.
Кроме того существует PHP5 класс от отечественного разрабочика (с именем, заслуживающим доверия. Я серьёзно.) — IMemcacheClient. (Спасибо DYPA за наводку)

Перспективы развития


Разработка ведётся очень активно, комиты происходят почти каждый день, сейчас доступна версия Redis 0.900 (1.0 release candidate 1), которая очень скоро станет версией 1.0
В ближайшем будущем авторы обещают внедрить разные интересные фичи, в том числе и сжатие данных.

Лицензия и поддерживаемые платформы


Redis — написан на ANSI C и работает на большинстве POSIX-систем (Linux, MacOS X). Это бесплатное открытое ПО под BSD лицензией =)

Up: Rediska — удобный PHP-клиент для key-value базы Redis. Оф.сайт.

Безопасность web-приложений

Reading time3 min
Views13K

Вступление.


Разрабатывая свой сайт на php, я стал задумываться о его безопасности. Веб-безопасности. Мне не хотелось бы, чтобы в одно прекрасное утро я увидел на сайте надпись «Hacked by %hackername%» на белом фоне или же чтобы все содержимое моего сайта, включая движок, на написание которого ушло немало времени, достались кому-то другому.

Разновидность web-уязвимостей.
Итак, я начал интересоваться уязвимостями и, конечно же, способами их устранения.
В основном все уязвимости классифицируются на несколько типов:
1) XSS атаки
    а)Пассивные XSS
    б)Активные XSS
2) SQL-инъекции
3) Инклуды
    а) Локальные
    б) Удаленные

Разведка боем.


Рассмотрим немного подробнее каждый из них.
Читать дальше →

nginx-catap, статус и разные

Reading time1 min
Views1.4K
Давно я тут не писал про развитие своего fork nginx.

С момента моего последнего рассказа тут, появилось много интересной функциональности.



Предвидя вопросы. Да, я этим пользуюсь. Этим пользуется еще несколько человек. Нет, это скорее всего никогда не войдет в оригинальный nginx.

Information

Rating
Does not participate
Location
Зеленоград, Москва и Московская обл., Россия
Registered
Activity