Как стать автором
Обновить
5
0
Артемий Зайцев @arzai

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

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

Как обрабатывать Fatal Error в PHP

Время на прочтение4 мин
Количество просмотров20K
В одном из наших проектов (социальная генеалогическая сеть), о котором я писал в данном топике, мы используем очередь отложенных событий, реализованную на мемкеше. Ее архитектура такова: приложение записывает в эту очередь различные события и данные, относящиеся к ним (тип события, входящие параметры, и функция обработчик этого события). После чего менеджер(-ы) очереди разбирают эту очередь и выполняют отложенные события. В частности такая очередь используется для сбора статистики, но также и для других более критичных к выполнению задач.
Поэтому очень важно обеспечить high availability для менеджера(-ов) очереди.

Но т.к. ф-ия обработчик очереди к нам приходит из вне, то за качество этого обработчика события мы не отвечаем, т.е. если обработчик вдруг выбросит ошибку, то нам ее нужно обработать и продолжить работу менеджера очереди. Но иногда случается, что обработчики выбрасывают фатальные ошибки (Fatal Error), и это может стать проблемой…

Читать дальше →
Всего голосов 15: ↑8 и ↓7+1
Комментарии33

Демоны на PHP

Время на прочтение4 мин
Количество просмотров75K
Памятка начинающему экзорцисту.

Прежде, чем начать: я знаю, что такое phpDaemon и System_Daemon. Я читал статьи по этой тематике, и на хабре тоже.

Итак, предположим, что вы уже определились, что вам нужен именно демон. Что он должен уметь?
  • Запускаться из консоли и отвязываться от неё
  • Всю информацию писать в логи, ничего не выводить в консоль
  • Уметь плодить дочерние процессы и контролировать их
  • Выполнять поставленную задачу
  • Корректно завершать работу

Отвязываемся от консоли


// Создаем дочерний процесс
// весь код после pcntl_fork() будет выполняться двумя процессами: родительским и дочерним
$child_pid = pcntl_fork();
if ($child_pid) {
    // Выходим из родительского, привязанного к консоли, процесса
    exit();
}
// Делаем основным процессом дочерний.
posix_setsid();

// Дальнейший код выполнится только дочерним процессом, который уже отвязан от консоли

Читать дальше →
Всего голосов 188: ↑167 и ↓21+146
Комментарии125

PHP для маленьких. MVC по-своему

Время на прочтение4 мин
Количество просмотров14K
Хочу предложить легкий курс статей, который бы помог начинающим, а у старичков вызвал бы только теплую улыбку на лице за прожитые годы, направленный на простое освоение концепции MVC.

Концепция


Курс статей, призванный рассказать новичку о том, как же на самом деле устроены такие страшные гиганты, как PHP MVC Фреймворки.

Курс ни в коем случае не претендует на звание «Всеобъемлющее пособие: „Сделай сам все то, что уже давно изобретено“», но поможет понять самым маленьким и только начинающим программистам мира веб, каким образом все это написано, да еще и работает. Но прежде чем загружать вас тоннами кода, необходимо разобраться с самим понятием MVC. Что это такое?
Читать дальше →
Всего голосов 13: ↑8 и ↓5+3
Комментарии11

Бесплатные SSL-сертификаты — теперь на 3 года от WoSign

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


Вчера обнаружил, что WoSign дает бесплатно сертификат, теперь уже на 3 года.
Читать дальше →
Всего голосов 60: ↑54 и ↓6+48
Комментарии80

Обзор частых вопросов по тестированию ПО на собеседованиях и ответы на них

Время на прочтение21 мин
Количество просмотров653K
Главная цель данной статьи – помочь преодолеть страх, который возникает у тестировщиков ПО (как начинающих, так и опытных) к предстоящему интервью в связи с незнанием грядущего.

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

Перечень вопросов разумеется не окончательный и не претендует на образцовость, а выступает лишь своеобразным ориентиром при подготовке специалистов с тестирования ПО.
Читать дальше →
Всего голосов 24: ↑19 и ↓5+14
Комментарии24

Процесс разработки и тестирования демонов

Время на прочтение7 мин
Количество просмотров19K
Сегодня мы поговорим о «низкоуровневых» кирпичиках нашего проекта — о демонах.
Определение из Википедии:
«де́мон — компьютерная программа в системах класса UNIX, запускаемая самой системой и работающая в фоновом режиме без прямого взаимодействия с пользователем».

Хоть это и не очевидно, но практически весь функционал сайта во многом зависит от работы этих программ. Игра в “Знакомства”, поиск новых лиц, центр внимания, обмен сообщениями, статусы, геолокация и многие другие вещи завязаны на тот или иной демон. Так что можно сказать, что они помогают людям по всему миру общаться и находить новые знакомства. Одновременно на сайте могут работать и взаимодействовать между собой несколько десятков демонов. Их корректное поведение является очень важной задачей, поэтому мы решили покрывать основной функционал демонов автотестами.

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

В качестве VCS у нас используется Git, для непрерывной интеграции — TeamCity, а в роли баг-трекера выступает JIRA. Для тестирования мы используем PHPUnit. Разработка демонов, как и остального сайта, ведется по принципу «фича ― ветка». Для того чтобы понять, что это, мы рассмотрим проекции нашего flow на Git и на JIRA.
Читать дальше →
Всего голосов 36: ↑32 и ↓4+28
Комментарии14

О программировании на 1С Предприятие 8

Время на прочтение14 мин
Количество просмотров310K
Если пишешь ты на СИ
Будь хоть трижды ламер
Про такого говорят:
«Он — крутой программер!»
(Фидошные песни — «Что Такое Suxxx и Что Такое Rulezzz»)

Предисловие


Поводом к написанию данной статьи послужило негативное отношение профессионального сообщества к указанной платформе и программистам.

Как программист, выбравший 1С, считаю данное мнение необоснованным. Платформа 1С — далеко не идеал, но, на мой взгляд, — это лучший, а главное — отечественный продукт!

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

В данной статье я опишу те преимущества, которые нашел для себя в программе. Статья получится практически рекламой, поэтому сразу дисклеймер:
  • Прямого отношения к фирме 1С я не имею;
  • Данная статья не является заказной, и написана исключительно на добровольной основе;
  • В некоторых случаях высказано личное мнение, которое может не совпадать…;
  • Вся статья, за исключением пролога — авторская, любые совпадения — случайность;
  • Речь пойдет о платформе 1С Предприятие 8.2 (в настоящее время — актуальна версия 8.3, но я её ещё не изучал — очень много работы на 1С 8.2). Однако, большая часть сказанного применима как к платформе 8.3, так и к более ранним версиям, а часть — и к версии 7.7.

Итак, приступим.
Читать дальше →
Всего голосов 29: ↑15 и ↓14+1
Комментарии113

CHIP — Arduino-совместимый электронный обучающий конструктор для детей

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


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

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

10 уроков о том, как повысить продуктивность, которые я усвоил, работая по 90 часов в неделю целый месяц

Время на прочтение8 мин
Количество просмотров199K
image

Сколько часов в неделю вы тратите на работу? Около 40, не так ли? А как вы думаете, что будет, если работать 90 часов в неделю?

Автор сайта a Year of Productivity Chris Bailey решил провести такой эксперимент. К чему это привело? Читайте о 10 уроках, которые он извлек, в нашем переводе его статьи.
Читать дальше →
Всего голосов 97: ↑78 и ↓19+59
Комментарии72

Как доставлять e-mail уведомления клиентам в условиях невозможности прописать обратную DNS зону

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

Proof of Concept


Из такого заголовка довольно сложно понять, «а кому оно вообще нужно?», а потому для начала краткое предисловие.

Ни для кого не секрет, что интернет-провайдеры весьма агрессивно смотрят на малый бизнес. Условия обслуживания физических и юридических лиц примерно те же, а вот цена весьма существенно разнится. Ситуация монополии в какой-то мере исправилась с приходом таких стандартов, как LTE и 4G, но условия обслуживания и сейчас остаются весьма далекими от гуманности. Итак, это статья посвящается тем, кто по тем или иным условиям вынужден взаимодействовать с провайдером, который предоставляет внешний IP адрес, но не дает возможности редактировать соответствующие обратные DNS записи.

Наверняка многим известно, что в качестве требования к почтовым серверам, помимо DKIM записей и прочих проверок, предъявляется еще и обязательное наличие обратной DNS записи. В противном случае, письма либо не будут доходить вовсе, либо будут попадать в папку «Спам». С вышеозначенными фактами далее мы и будем разбираться.

Основная идея


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

Идея в том, чтобы избавиться от вашего IP, как от начального релея. В этом нам помогут службы Gmail Hosted. Процедура настройки вашего домена для использования Gmail Hosted довольно проста и хорошо задокументирована. За всеми подробностями сюда: Google Apps для бизнеса.

Настроив свой домен для работы со службами Gmail Hosted и зарегистрировав соответствующий почтовый ящик для связи с клиентами (предположим это noreply@yourdomain.com), очень хочется автоматически из кода вашего ресурса оповещать своих клиентов о событиях. Но если же в такой конфигурации попытаться воспользоваться учетной записью noreply@yourdomain.com, как релеем, то получим то же, от чего уходили. Нанимать сотрудника, который бы входил в веб-интерфейс и отправлял оповещения — неразумно.
Читать дальше →
Всего голосов 9: ↑7 и ↓2+5
Комментарии21

Блокировки сессий в веб-проектах — выбираем эффективное оружие

Время на прочтение4 мин
Количество просмотров20K
Всем привет!

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

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

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

В статье расскажу какие инструменты позволяют быстро диагностировать проблему, приведу работающий код и дам несколько боевых рекомендаций по выживанию :-)

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

Технические рекомендации к почтовым рассылкам

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


«Даже если вы получите какое-нибудь письмо, вы не сможете его прочитать»
(Марк Твен)

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

Итак, ваш проект набирает популярность и нравится пользователям, вы собираетесь оставаться с ними на связи. Вы ознакомились с административными требованиями (о которых мы писали ранее) и собираетесь ответственно и без спама организовать рассылку для тех пользователей, которые готовы ее получать. А может быть, вы просто собираетесь настроить корпоративную почту. Поднимаете из дистрибутива почтовый сервер, пишете скрипт, запускаете и… 70% получателей письмо не доставлено, у 15% оно попало в папку «Спам», а остальные не могут прочитать то, что в нем написано. О том, что делать, чтобы этого не случилось, я попробую рассказать в этой статье.
Читать дальше →
Всего голосов 54: ↑46 и ↓8+38
Комментарии25

Как автоматически создать резервную копию базы данных MySQL и Web-сервера в хранилище FTP

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

Эта статья содержит один из древнейших методов, предложенный NIX Craft в 2006 году. Статья, на мой взгляд, ценна тем, что содержит как бы базовое направление мысли, в котором может следовать начинающий или «случайный» (вынужденный заниматься администрированием баз данных в дополнение к другим задачам) сисадмин.
На мой взгляд, понимание базовых принципов, изложенных в этой статье, сродни пониманию принципов изготовления плова. Можно экспериментировать с пловом в достаточно широких пределах; главное — не разварить рис в клейкую кашу и не сунуть в плов вместо жирного мягкого мяса непонятно что. Точно так же и стратегия бэкапа баз данных MySQL может варьироваться в очень широких пределах, но основы — сочетание полного резервного копирования с инкрементальным, установление периодичности выполнения отдельных задач и контроль за их правильным выполнением — остаются неизменными вне зависимости от используемого инструментария.
Оригинал статьи взят здесь: http://www.cyberciti.biz/tips/how-to-backup-mysql-databases-web-server-files-to-a-ftp-server-automatically.html. Далее идёт сам текст перевода.
Читать дальше →
Всего голосов 14: ↑8 и ↓6+2
Комментарии9

Не стоит бояться использовать HandlerSocket

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

(пример работы протокола HandlerSocket на картинке)

Вступление


В предыдущем проекте возникла потребность в разгрузке базы данных, тогда жизнь и столкнула меня с HandlerSocket`ом.

HandlerSocket — это протокол, реализованный в одноимённом плагине для РСУБД MySQL, позволяющий использовать NoSQL методику для доступа к данным, хранящимся в InnoDB таблицах. Основная причина, по которой используют NoSQL решения — это очень быстрый поиск по первичному ключу.

Еще про HandlerSocket
HandlerSocket работает как демон внутри процесса mysql, принимая TCP соединения и выполняя запросы клиентов. Он не поддерживает SQL запросы, вместо этого он предоставляет простой язык запросов для CRUD операций с таблицами. Именно поэтому он гораздо быстрее mysqld/libmysql в некоторых случаях:

HandlerSocket оперирует данными без парсинга SQL запроса, что приводит к уменьшению загрузки процессора.
Он поддерживает пакетное выполнение запросов. Можно отправить несколько запросов сразу и получить результат за один раз, что опять же снижает нагрузку на процессор и на сеть.
Протокол HandlerSocket более компактный, чем у mysql/libmysql, что приводит к сокращению нагрузки на сеть.

Подробнее можно почитать здесь:



Под катом вас ожидает:
  • Новая библиотека для работы с HS, написанная на PHP;
  • Сравнение производительности существующих решений + нового;
  • Symfony2 bundle для работы с HS;
  • Плагины к Munin для мониторинга активности HS;
  • Разные мысли вслух и рассказы о «шишках».

Читать дальше →
Всего голосов 39: ↑38 и ↓1+37
Комментарии15

Как заставить Apache работать или как я реализую создание миниатюр изображений в своих проектах

Время на прочтение5 мин
Количество просмотров9.1K
Здравствуйте, хабровчане.

Занимаясь созданием различных интернет-проектов уже порядочное время, часто был просто возмущён одним фактом — не все элементы системы несут на себе равную нагрузку. Я всегда придерживался мнения, что каждый элемент системы, будь то интерпретатор того или иного языка для сайта, или база данных, или даже сам HTTP сервер, должен брать на себя максимально возможную нагрузку, дабы облегчить участь остальных элементов системы. Да и сами приложения для своих проектов всегда старался максимально разгрузить.

Сейчас же мне хотелось бы поделиться своим опытом в том, как «озадачить» Apache при создании миниатюр изображений (Thumbnails).
Читать дальше →
Всего голосов 11: ↑10 и ↓1+9
Комментарии19

Как вывести Яндекс-деньги на бесплатную карту Сбербанка

Время на прочтение2 мин
Количество просмотров95K
UPD 02.10.2014. Этот пост почти два года находился в песочнице. Но нашелся кто-то добрый, кто подарил мне за него инвайт. Значит пригодилось.

Теперь я могу его опубликовать, но предупреждаю, что многое уже поменялось. Многие сервисы уже работают с картами Maestro, больше не требуют только Visa или MasterCard. Банковский перевод с Яндекс-денег стал сложнее, теперь требуется пройти идентификацию.

UPD 03.10.2014. formasha подсказывает, что сейчас Яндекс может переводить на любую карту (включая Maestro) напрямую, а не банковским переводом. Страница платежей. Особой необходимости узнавать свои реквизиты для Яндекс-денег больше нет.



У меня оказалось две тысячи рублей на Яндекс-деньгах. Захотелось их вывести. Цена вопроса соизмерима со стоимостью владения VISA или Mastercard. Платную карту заводить не хотелось.

Ниже я расскажу, как:
  • получить бесплатную карту Сбербанк-Maestro «Momentum»;
  • подключить сбербанк-онлайн;
  • перевести Яндекс-деньги на карту.

Читать дальше →
Всего голосов 38: ↑21 и ↓17+4
Комментарии24

Как обрабатывать терабайты данных в 1000 потоков на PHP — Hadoop/MapReduce

Время на прочтение6 мин
Количество просмотров36K
Всем привет!

Уже слышали про Bigdata? Ну да, веб растет, данных становится больше и их нужно держать под контролем и периодически анализировать. Базы данных — лопаются под нагрузкой, реляционная теория не совсем справляется с задачей, нужно решение. Маркетинг активно давит сверху, а железо острыми углами — снизу и попахивает суицидом.

В этом посте постараюсь дать конкретные работающие рецепты и куски кода с краткими теоретическими выводами, как же обрабатывать >=терабайты в >=1000 потоков на PHP. Чтобы можно было взять и решить задачу, не теряя времени и не забивая голову теорией.

Однако, если вдруг стало подташнивать и закружилась голова, можно дальше не читать — а полюбоваться на прекрасных птичек и забыть о вышенаписанном. Но будьте на чеку, Bigdata может завтра взять и постучаться в дверь ;-)

Читать дальше →
Всего голосов 61: ↑37 и ↓24+13
Комментарии52

Быстрое веб-приложение — трепанация сети

Время на прочтение10 мин
Количество просмотров33K
Психология — интересная и иногда полезная наука. Многочисленные исследования показывают, что задержка в отображении веб-страницы дольше 300 мс заставляет пользователя отвлечься от веб-ресурса и задуматься: «что за хрень?». Поэтому УСКОРИВ веб-проект до психологически невоспринимаемых значений, можно ПРОСТО удерживать пользователей дольше. И именно поэтому бизнес готов тратиться на скорость: $80М — чтобы уменьшить latenсy всего на 1 мс.



Однако, чтобы ускорить современный веб-проект, придется кровушки пустить и основательно покопаться в этой теме — поэтому базовое знание сетевых протоколов приветствуется. Зная принципы, можно без особых усилий ускорить свою веб-систему на сотни миллисекунд всего за несколько подходов. Ну что, готовы сэкономить сотни миллионов? Наливайте кофе.
Читать дальше →
Всего голосов 83: ↑66 и ↓17+49
Комментарии42

Ускоряем PHP (с ReactPHP)

Время на прочтение11 мин
Количество просмотров80K
В этом посте я хотел бы поделиться не совсем обычным, для мира PHP, способе построения приложения, если угодно — архитектурой. Данный подход позволяет средствами PHP увеличить количество обрабатываемых запросов в разы. Так же я поделюсь своими наработками в этом направлении. Конечно данный подход не бесплатен, в плане требований к коду, но давайте всё по порядку.
Читать дальше →
Всего голосов 51: ↑44 и ↓7+37
Комментарии64

Информация

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