Я собрал и обобщил шесть самых распространённых ошибок, которые фрилансеры совершают, пытаясь получить заказ на фрилансерских биржах.
crazyprog @crazyprog
User
ОС и вебсервер — вместе веселей
3 min
6.1KПривет всем. Сначала я думал, что лучше всего продолжить тему nginx на примере подчищенного и откомментированного конфига с одного из боевых серверов, но потом понял, что это потребует довольно большого объёма дополнительной информации. Поэтому, я решил попробовать, для затравки, рассказать в общих чертах о том, как nginx устроен, и почему он работает так быстро.
+54
«Виртуальная модель» или как нежно и аккуратно снять требования к проекту
3 min
2.4KЖизнь — штука сложная, выкидывает порой такие забавные коленца, которые заставляют не то чтобы прыгать вперед с закрытыми глазами, скорее это похоже на попытку уехать на машине без ключей зажигания и с пустым баком. Но как показывает практика, многие веб-студии до сих пор толкают свои автомобили. Попробуем исправить это хотя бы частично.
Бывают такие проекты, когда нет возможности заниматься анализом и исследованиями так, как это принято в цивилизованном обществе. Это происходит по разным причинам: отпуска сотрудников, маленький бюджет, сжатые сроки, а иногда встречаются даже противники предварительного обследования. Практически как в известном анекдоте: «чего тут думать — трясти надо». Поэтому приходится собирать и формализовывать требования за очень короткий срок и одну-две встречи с заказчиком, который не всегда может рассказать о решаемых задачах в силу отсутствия опыта работы с сайтами.
Хлебнув несколько раз проблем с нехваткой данных для дальнейшей работы, я выработал для себя ряд мер, которые гордо назвал «виртуальной моделью» =)
Бывают такие проекты, когда нет возможности заниматься анализом и исследованиями так, как это принято в цивилизованном обществе. Это происходит по разным причинам: отпуска сотрудников, маленький бюджет, сжатые сроки, а иногда встречаются даже противники предварительного обследования. Практически как в известном анекдоте: «чего тут думать — трясти надо». Поэтому приходится собирать и формализовывать требования за очень короткий срок и одну-две встречи с заказчиком, который не всегда может рассказать о решаемых задачах в силу отсутствия опыта работы с сайтами.
Хлебнув несколько раз проблем с нехваткой данных для дальнейшей работы, я выработал для себя ряд мер, которые гордо назвал «виртуальной моделью» =)
+34
Веб-аналитика: анализируй это! Часть 2. Сбор данных
5 min
18KПеред тем, как анализировать данные статистики, нужно понимать, как они были собраны, какие из них могут быть неточными, и почему.
Сервер в интернете получает от браузера пользователя запросы и отдает данные. На каждый просмотр страницы сервер получает один запрос (на тело страницы), а затем несколько дополнительных (картинки, скрипты, таблицы стилей и другие дополнительные данные для отображения страницы). Скрипты на странице также могут генерировать запросы к серверу — в том числе, к отдельному серверу статистики.
Сервер в интернете получает от браузера пользователя запросы и отдает данные. На каждый просмотр страницы сервер получает один запрос (на тело страницы), а затем несколько дополнительных (картинки, скрипты, таблицы стилей и другие дополнительные данные для отображения страницы). Скрипты на странице также могут генерировать запросы к серверу — в том числе, к отдельному серверу статистики.
+22
+29
EHcache RESTful сервер, РНР и просто эксперименты…
13 min
3.8K
+18
Обновился сайт web-фреймвока Grails
1 min
775
Напомним, что не так давно компания SpringSource приобрела компанию G2One, занимавшуюся разработкой Groovy & Grails. Кроме нового приятного дизайна, появились ссылки на сайт с коммерческой информацией и обновился раздел плагинов, который получил более удобную навигацию.
Для тех, кто впервые слышит о Grails, пара слов о его особенностях:
- Для разработки используется динамический язык Groovy, который является расширением языка Java в сторону Smalltalk, Ruby и работает поверх JVM
- Фреймворк не написан с нуля, а представляет собой скорее DSL поверх Spring & Hibernate
- Первые два пункта дают простую интеграцию с множеством библиотек и проектов на Java
- Поддержкой проекта занимается компания SpringSource — один из технологических лидеров в Java-индустрии
+5
Хочу коктейль! Сервис подборки коктейлей
1 min
2.4K
На основе базы, которой пользуется этот сервис, предлагаю вашему вниманию сервис подборки коктейлей. Суть проста — выбираем ингредиенты, получаем результат. Отображаются все коктейли, в которые входят выбранные ингредиенты. Как все вместе, так и по одиночке. Коктейль с наибольшим количеством совпавших ингредиентов выводится выше (релевантность! =) )
В общем лучше один раз увидеть, чем сто раз услышать.
Хочу коктейль!
UPD: Сервис по сути оффлайновый. Может работать на локали без внешнего подключения. Разве что картинки не будут подгружаться. База коктейлей в статике (как и в оригинальном сервисе)
UPD: Основное отличие от, скажем, inshaker.ru — более релевантная выдача по запрошенным компонентам.
+2
Реализация паттерна декоратор на JS
10 min
6.6KСуть паттерна в том, что есть класс с фактической функциональностью (компонент) и опциональными классами-обертками, которые дополняют основной функционал (декораторы). А фишка в том, что декораторов может быть сколько угодно, совмещаться они могут в произвольном порядке и (поскольку требуют от компонента только интерфейса) — могут работать с разными компонентами.
Безусловно, реализовать что-то похожее можно даже за счет только лишь того, что функции в JS являются объектами первого уровня, но мне бы хотелось поделиться реализацией весьма близкой кГОСТу GoF'у.
UPD: ссылка на рабочий пример, спасибо Barttos.
Перед хабракатом: в скрипте присутствует инкапсуляция, наследование (по сути) осуществляется через call, jQuery отсутствует — если Ваша идеология не позволяет принять такие ограничения, пожалуйста, не пишите об этом в комментах и, еще лучше, не читайте эту статью. Конструктивная критика и вопросы приветствуются.
Безусловно, реализовать что-то похожее можно даже за счет только лишь того, что функции в JS являются объектами первого уровня, но мне бы хотелось поделиться реализацией весьма близкой к
UPD: ссылка на рабочий пример, спасибо Barttos.
Перед хабракатом: в скрипте присутствует инкапсуляция, наследование (по сути) осуществляется через call, jQuery отсутствует — если Ваша идеология не позволяет принять такие ограничения, пожалуйста, не пишите об этом в комментах и, еще лучше, не читайте эту статью. Конструктивная критика и вопросы приветствуются.
+32
Моя объединенная теория багов
6 min
6.3KTranslation

Этот перевод является продолжением серии статей про тестирование:
На очереди практические советы по построению тестопригодного кода и примеры применения изложенных знаний на реальных проектах.
P. S. Отдельное спасибо taxigy за корректуру русского перевода.
Я думаю, что баги можно разделить на три базовые категории:
- Логические. Логические баги наиболее популярны и часто встречающиеся. Это ваши if'ы, циклы и другая подобная логика в коде. (Мысли: это работает неверно).
- Баги взаимодействия. Баг взаимодействия — когда два разных объекта неправильно взаимодействуют между собой. Например, выход одного объекта является не тем, что ожидает следующий объект в цепочке. (Мысли: данные к месту назначения пришли испорченными).
- Баги отображения. Баг отображения — когда вывод (обычно некоторый пользовательский интерфейс, UI) отображается некорректно. Ключевой момент — в том, что это человек определяет, что есть правильно, а что — нет. (Мысли: это «выглядит» неправильно)
+3
Дерево в выпадающем списке средствами XSLT
6 min
4.4KДопустим, у нас на сайте есть у нас нечто иерархическое. Например, категории товаров. У категорий есть подкатегории и так далее. И пусть нам захотелось вывести эту иерархию в выпадающий список.
+28
Переведите мне на VISA
1 min
6.7KНе так давно оплачивая один небольшой проект который мне сделал другой хабраюзер я услышал следующую фразу — «У меня есть VISA, вы можете мне деньги на неё перевести?..»
В этом топике я объясню как карточки типа Виза относятся к счетам и какие виды оплаты предпочтительнее принимать к западу от России

В этом топике я объясню как карточки типа Виза относятся к счетам и какие виды оплаты предпочтительнее принимать к западу от России
+12
Идея стартапа: борьба с теневыми и коррупционными схемами
3 min
1.3KНедавно на Хабре проскакивал топик вида "сделаю полезный интернет-проект за просто так, предлагайте идеи". Немножко подумав, предлагаю таковую.
Согласно экономическим исследованиям, коррупция является крупнейшим препятствием к экономическому росту и развитию, ставящим под угрозу любые позитивные преобразования в стране. Коррупцию никогда не истребить полностью. И какая-то минимальная коррупция всегда должна существовать — она будет служить индикатором того, что в каком-то месте государственной/экономической системе происходят сбои, и там пора что-то менять. Однако как её отследить?
Все наслышаны о коррупционных схемах: история со «школьным порталом», транслит в описании тендеров, и др. Широкая огласка помогла, как минимум, прекратить неоправданную трату государственных денег.
Однако существуют ещё сотни и тысячи возможностей для чиновников соблюсти «свой интерес» в ущерб государственному. Эти примеры реализуются каждый день во всех отраслях промышленности и государственного управления. Это и гос.закупки, и правоохранительные органы, таможня, строительство и т.д.
Идея проекта: создать сайт, на котором люди смогут анонимно раскрыть какую-либо из действующих коррупционных/серых схем, описав принцип её работы с подробностями, и тем самым помочь данную схему ликвидировать.
Согласно экономическим исследованиям, коррупция является крупнейшим препятствием к экономическому росту и развитию, ставящим под угрозу любые позитивные преобразования в стране. Коррупцию никогда не истребить полностью. И какая-то минимальная коррупция всегда должна существовать — она будет служить индикатором того, что в каком-то месте государственной/экономической системе происходят сбои, и там пора что-то менять. Однако как её отследить?
Все наслышаны о коррупционных схемах: история со «школьным порталом», транслит в описании тендеров, и др. Широкая огласка помогла, как минимум, прекратить неоправданную трату государственных денег.
Однако существуют ещё сотни и тысячи возможностей для чиновников соблюсти «свой интерес» в ущерб государственному. Эти примеры реализуются каждый день во всех отраслях промышленности и государственного управления. Это и гос.закупки, и правоохранительные органы, таможня, строительство и т.д.
Идея проекта: создать сайт, на котором люди смогут анонимно раскрыть какую-либо из действующих коррупционных/серых схем, описав принцип её работы с подробностями, и тем самым помочь данную схему ликвидировать.
+63
Организация среды веб-разработки
4 min
5.9KПродуктивность коллектива веб-студии напрямую зависит от удобства среды разработки. У нас сложилась стройная система организации работы с проектами, включающая в себя набор таких неотъемлемых компонентов, как IDE, SCM, PM-система, багтрекер и development-сервер. Этим постом я бы хотел начать цикл статей, посвященных настройке и использованию этих компонентов в нашей студии.
В первой части я расскажу о самом основном — среде разработки (о том, как мы организовали совместный доступ к проектам).
В первой части я расскажу о самом основном — среде разработки (о том, как мы организовали совместный доступ к проектам).
Идеи
- Среда разработки должна быть единой для всех сайтов.
- Девелоперы не должны тратить время на настройку каждый своей серверной части.
- Работает ли над проектом один человек или несколько — контроль версий необходим.
- Если рабочий каталог (IDE workspace) находится на сервере, то можно поработать и дома, не тратя время на повторную настройку окружения на домашнем десктопе или ноуте.
+41
Жизненные советы от владельцев веб-студий: как повысить рентабельность и снизить риски. Часть 2
7 min
11KКак и обещала, публикую вторую часть статьи, написанной на основе обсуждений, наблюдений и опыта партнеров UMI.CMS. Напомню, что было интересно собрать воедино и поделиться практическими рекомендациями и приемами владельцев веб-студий, позволяющими минимизировать риски и ускорить процессы на каждом этапе разработки интернет-проекта.
В первой части мы поговорили о «фишках» на этапе поиска клиентов и заключения договора. Сегодня — о дизайне, собственно разработке (внедрении) и сдаче проекта.
В первой части мы поговорили о «фишках» на этапе поиска клиентов и заключения договора. Сегодня — о дизайне, собственно разработке (внедрении) и сдаче проекта.
+38
Канбан в IT (Kanban Development)
7 min
284KЯ собираюсь написать несколько статей про новую методологию гибкой разработки Канбан (Kanban Development) в целях подготовки к Scandinavian Agile Conference 2009, где я буду делать один из докладов (кстати, заодно приглашаю всех на конференцию).
Сегодня публикую первую из статей.
Основная задача первой статьи — это как можно проще описать основы Канбан: что это такое, в чем отличие от других гибких методологий и зачем это нужно.
Также я хотел бы собрать как можно больше вопросов и сомнений в комментариях, чтобы ответить на них в следующих статьях, так что пишите всё, что вам непонятно, или что ещё вы хотели бы узнать про Канбан.
Я не то, чтобы большой специалист по этой новой методологии, но мы внутри команды пришли к Канбану самостоятельно и последовательно прошли все этапы мутации от SCRUM до Канбан, так что практический опыт есть.
Сегодня публикую первую из статей.
Основная задача первой статьи — это как можно проще описать основы Канбан: что это такое, в чем отличие от других гибких методологий и зачем это нужно.
Также я хотел бы собрать как можно больше вопросов и сомнений в комментариях, чтобы ответить на них в следующих статьях, так что пишите всё, что вам непонятно, или что ещё вы хотели бы узнать про Канбан.
Я не то, чтобы большой специалист по этой новой методологии, но мы внутри команды пришли к Канбану самостоятельно и последовательно прошли все этапы мутации от SCRUM до Канбан, так что практический опыт есть.
+55
Использование составных ключей для манипуляции данными в memcached
7 min
3.3KЧасто, при работе с memcached, возникает ситуация, когда необходимо удалить данные в самых различных местах. Например, при добавлении нового комментария, необходимо обновить не только кеш самих комментариев этой страницы, но и ленты комментариев на главной странице, списока комментариев пользователя, счетчика комментариев пользователя, общего счетчика комментариев сайта, счетчика комментариев статьи и т.д. Можно запомнить все ключи этих данных и множество раз вызвать delete() с этими ключами.
Как известно, memсached хранит данные плоско, то есть одному ключу соответствует всегда одно значение. Вложенных ключей не существует. Так же нет возможности удалить группу ключей, скажем по маске. Хорошо бы было, если бы можно было сделать, например, так: $cache->delete('comments*'); Но так нельзя.
Но если нельзя, но очень хочется, то можно ;)
<?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*'); Но так нельзя.
Но если нельзя, но очень хочется, то можно ;)
+16
Redis — высокопроизводительное хранилище данных
2 min
102KБодрый день, хаброчеловеки!
Redis — это высокопроизводительное нереляционное распределённое хранилище данных. В отличие от Memcached, который может в любой момент удалить ваши данные, вытесняя старые записи новыми, Redis хранит информацию постоянно, таким образом он похож на MemcacheDB.
API для работы с Memcached (MemcacheDB) позволяет хранить массивы, но эти массивы будут сериализованы и сохранены как строки, таким образом атомарные операции над такими массивами не возможны.
Redis позволяет хранить как строки, так и массивы, к которым можно применять атомарные операции pop / push, делать выборки из таких массивов, выполнять сортировку элементов, получать объединения и пересечения массивов.
110000 запросов SET в секунду, 81000 запросов GET в секунду на Linux-сервере начального уровня (тесты).
Высокая скорость работы Redis обеспечивается тем, что данные хранятся в оперативной памяти и сохраняются на диск либо через равные промежутки времени, либо при превышении определённого количества не сохранённых запросов. Из этого вытекает, что используя Redis, вы можете потерять результаты нескольких последних запросов, что вполне приемлимо для большинства веб-приложений, учитывая, что обращение к Redis по скорости сравнимо с обращением к оперативной памяти. Тем не менее, потерь можно избежать через избыточность — Redis поддерживает неблокирующую master-slave репликацию.
Redis, как и Memcached, может работать как распределённое хранилище на многих физических серверах. Такой функционал реализуется в клиентских библиотеках, и к сожалению, «из коробки» этот функционал реализован пока только в Ruby API, однако это не мешает вам хешировать ключ самостоятельно и получать ID сервера, к которому с этим ключом обращаться.
API доступно для следующих языков:
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. Оф.сайт.
Что такое 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. Оф.сайт.
+71
Безопасность web-приложений
3 min
13KВступление.
Разрабатывая свой сайт на php, я стал задумываться о его безопасности. Веб-безопасности. Мне не хотелось бы, чтобы в одно прекрасное утро я увидел на сайте надпись «Hacked by %hackername%» на белом фоне или же чтобы все содержимое моего сайта, включая движок, на написание которого ушло немало времени, достались кому-то другому.
Разновидность web-уязвимостей.
Итак, я начал интересоваться уязвимостями и, конечно же, способами их устранения.
В основном все уязвимости классифицируются на несколько типов:
1) XSS атаки
а)Пассивные XSS
б)Активные XSS
2) SQL-инъекции
3) Инклуды
а) Локальные
б) Удаленные
Разведка боем.
Рассмотрим немного подробнее каждый из них.
+1
nginx-catap, статус и разные
1 min
1.4KДавно я тут не писал про развитие своего fork nginx.
С момента моего последнего рассказа тут, появилось много интересной функциональности.
Предвидя вопросы. Да, я этим пользуюсь. Этим пользуется еще несколько человек. Нет, это скорее всего никогда не войдет в оригинальный nginx.
С момента моего последнего рассказа тут, появилось много интересной функциональности.
- $mstimestamp
- альтернативный статус
- $loadavg_… и ‘<'/'>‘ в if
- ssi изменение поведение include
- статус по url
- случайное число в ответе
Предвидя вопросы. Да, я этим пользуюсь. Этим пользуется еще несколько человек. Нет, это скорее всего никогда не войдет в оригинальный nginx.
+6
Information
- Rating
- Does not participate
- Location
- Зеленоград, Москва и Московская обл., Россия
- Registered
- Activity