Записи с меткой "кодинг"


Java Thread. Прерываем ассинхронный поток правильно

Thread lifecycle

Постараюсь не разводить воду. Есть такая задача (реальная, но для статьи все совпадения вымышленные )): юзер через админку в нашу API запрашивает обновление статистики рассылки. Это сложная процедура, много собирать, взаимодействовать с чужой API, которая нестабильно работает. Короче - это время. Поэтому мы юзеру в браузер сразу отвечаем, что запрос приняли, а выполнять его будем в фоне. Когда закончим, пришлем уведомление в Slack.

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

Метки: java, кодинг

О чистоте речи

гастарбайтер

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

Я не граммар-наци, чтоб вы понимали, и у меня не болит душа за великий и могучий. Дело в том, как вы воспринимаетесь носителем языка со своей транслитерацией. Об этом и поговорим.

Организация и использование Dead Letter в RabbitMQ

Dead Letter в RMQ

Есть как минимум два повода, почему вы нашли эту статью:

  1. Вы хотите использовать фичу Dead Letter в RMQ, но лень читать английские мануалы
  2. Вы уже прочитали RMQ: Dead Letter Exchanges, RMQ: Policies и возможно эту статью. И теперь у вас такая же каша в понимании предмета, как было у меня.

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

Перехват управляющих сигналов в PHP. Graceful shutdown

Протест против SIGKILL :)

Речь про сигналы, передваемые в Linux любому процессу: SIGINT, SIGKILL и пр. Эти сигналы доступны только в nix-подобных системах, базовая фича таких ОС. На Windows не будет работать почти наверняка.

Я неправильно понимал, как работает, т.к. зашел не с той стороны. Сейчас разобрался, рассказываю.

Картинка кликабельна. Автор: Daniel StoriCC BY-NC-SA 4.0

Метки: PHP, кодинг

Как работать с XDebug

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

Вечная аутентификация на сайте

Постановка задачи: я хочу, чтобы юзер всегда был залогинен, пока сам не выйдет. И не надо ему предлагать "Запомнить меня", это тупо, имхо. Если юзер хочет, чтоб его забыли, пусть жмет "Выход".

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

PHP: парсинг и замена "short_open_tag"

Речь о тегах в php-скриптах. Согласно мануала при включенной опции разрешается короткая форма записи <? ?> тегов PHP. Если такая запись запрещена, то препроцессор PHP парсит только <?=...?>, что на самом деле не относится к коротким php-тегам, а является сокращенной записью инструкции <?php echo ...?>

Суть моей проблемы: перешел на новую версию PHP, при этом ставил его не из официальных репов, а в полуручном режиме из PPA. В новом конфиге опция short_open_tag оказалась отключена, у меня упало несколько сайтов и я подзаколебался искать причину. Учитывая, как я обновил PHP, мест для возможных багов стало более, чем достаточно.

Метки: PHP, кодинг

PHP сессия в базе данных

Хочу организовать хранение сессий на стороне сервера в базе данных. Зачем? "Just for fun!" ©. Вы можете найти для себя другие причины :)

Оказалось, свой велосипед не нужен, в PHP уже все есть. Нужно реализовать интерфейс php::SessionHandlerInterface и где-то назначить сессионным обработчиком объект моего класса. Для этого вызываем функцию php::session_set_save_handler(). Проще всего сделать вызов в bootstrap.php или index.php приложения.

Метки: PHP, кодинг

Unit-тестирование в PHP. Часть 3: углубление в PHPUnit

Продолжение статьи о модульных тестах в PHP. В этой части рассмотрим поставщики данных, фикстуры, подмену зависимостей, тесты с виртуальной файловой системой, тесты исключений и взаимодействия с базой данных.

Метки: PHP, кодинг

Unit-тестирование в PHP. Часть 2: знакомство с PHPUnit

Продолжение статьи о модульных тестах в PHP. В этой части займемся практикой тестирования и разберемся с базовым использованием PHPUnit.

Метки: PHP, кодинг

Unit-тестирование в PHP. Часть 1: теория

Данная статья (все ее части) - это лекция о модульном тестировании, которую мне нужно было провести среди PHP-разрабочиков компании, на которую я сейчас работаю.

Я не гуру тестирования и статья не претендует на полное руководство по модульным тестам или использованию PHPUnit. По первому вопросу целые книги пишут, да и у PHPUnit есть нормальный мануал. Цель статьи - объяснить на пальцах, как создавать unit-тесты, помочь разобраться с нуля в этой теме. Я подразумеваю ваше дальшнейшее самообразование. используя эту статью, как отправную точку.

Метки: PHP, кодинг

PHPUnit. Тестирование исключений

PHPUnit 5.6, метод expectException(), а так же директива @expectedException используются в тестах для указания ядру фреймворка "ожидать такое-то исключение". В итоге тест считается пройденным если исключение возникло.

И тут есть ньюансик: после того, как PHPUnit поймает ожидаемое исключение, выполнение тест-метода прекратится! Т.е. expectException() - это аналог assert-метода, только с прерыванием. Есть так же методы на проверку кода и сообщения исключения.

Метки: PHP, кодинг

ООП расширение класса php::Exception

В связи в повсеместным использованием ООП в PHP потребовалось запилить класс исключения с удобными плюшками. Их две: из экземпляра OOPException можно получить имя класса и метода, пробросившего исключение. Это удобно использовать в дополнение к Exception::getFile(), Exception::getLine().

Без ложки дегтя не обойдется: придется переписывать все свои вызовы исключений, и наплодить наследников от продвинутого класса для замены стандартных LogicException, RuntimeException и т.д.

Метки: PHP, кодинг

vQmod - зло! Применять в минимальных дозах

Есть такая веб-разработка - vQmod. Помню, как радовался такой полезной и удобной системе, когда только с ней познакомился и разобрался в деталях, как она работает. А потом стал находить "деготь в этой бочке меда", но было терпимо.. до текущего момента. Теперь же я считаю, что vQmod - зло, причем немалое. Погодите потрясать кулаками, давайте обсудим :)

Супервалидация пользовательских данных

Задача: обработать данные с формы обратной связи. А там полей штук 30(!), это форма запроса кредита. Решение в лоб - разбирать массив и валидировать каждое значение, - это жесть. Выход в использовании возможностей php-функций filter_*_array(). Там много заморочек, я более-менее разобрался с этим семейством. Пищу здесь, чтоб в следующий раз не шариться в исходниках.

MODx Evo: ошибки установки плагина transAlias

Скачал плагин TransliterateAlias v1.0 с оф.сайта MODx. Получил какой-то невнятный архивчик под именем repo-2340.zip Несмотря на странное имя, внутри все же оказался именно каталог [transalias]. Но это только начало.

Метки: MODx, кодинг

Создание сайта. Часть 7: PHP

Полное содержание серии - в конце статьи.

Когда-то давно я услышал от знакомого кодера фразу "PHP – легкий язык программирования". В то время я отнесся к этим словам скептически, но теперь полностью согласен. Этот язык гораздо легче изучить, чем многие другие, потому что, в первую очередь, он ограничен в возможностях. Это неплохо, просто от заточен под определенные функции и отлично справляется с ними. Грубо говоря от него требуется только собирать текст.

Вторым агрументом является документированность и популярность PHP. В инете чуть больше, чем дофига толковой информации по теме. Если вы ничего не знаете о создании кода, то начать именно с PHP – удачный выбор. И начать знакомство рекомендую в Викидепии.

Создание сайта. Часть 6: JavaScript

Очередная статья серии, посвященной сайтострою. Полное содержание серии - в конце статьи.

Теперь начинается реальный кодинг. Можно конечно отказаться от использования JavaScript на своих сайтах, тем более что браузеры по-разному понимают js-код (тут бардак не меньше, чем в дизайне). Но возможности, которые он дает, заставляют хотя бы попробовать с ним разобраться.

Выпадающее многоуровневое меню. CSS + javascript

Теоретическая задача: на Javascript создать единый код для обработки многоуровневых меню, выпадающих в любом направлении (слева/справа или снизу/сверху). Т.е. решить не частную задачу, а общий случай. Вообще задача изначально носила практический характер. Нужно было прикрутить менюшку к одному коммерческому проекту, причем времени на разработку не было. Пошарился в инете, найденные решения меня не устроили. Либо заточены под один вид меню, либо ограничения по уровням. Нашел даже совсем экзотический вариант, на дли-и-и-инном css-управлении. Все-таки пришлось делать свое, универсальное.

Ассемблер. Начало

В который раз пытаюсь освоить ассемблер и не знаю, на сколько меня хватит. Какими путями я опять пришел к нему, не буду рассказывать. Скажу просто - "надо" :) Вооружившись Гуглем и отбрасывая все, что на данный момент мне не нужно, принял за старт архив рассылки О. Калашникова "Ассемблер? Это просто! Учимся программировать (2001)". Есть еще одноименная книга, но мне пока достаточно chm-файла с выдержками из нее. Внимание! В этом архиве рассылка неполная! За продолжением нужно лезь на соответствующие сайты.

Метки: asm, кодинг
Первая<12>Последняя
Продвижение
Время
Метки
Щелкни мышей, чтобы закрыть