понедельник, 31 декабря 2018 г.

С наступающим Новым 2019 годом!

Друзья, вот и подходит к концу 2018 год - год Собаки. На смену ему идет 2019 - год Свиньи (маленького доброго Поросенка =)

Хочется пожелать вам всем в новом году здоровья, удачи и положительных перемен в жизни.

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

С наступающим Новым 2019 годом! Ура! )


суббота, 29 декабря 2018 г.

Apache for Windows и двоеточие: страшная сказка на ночь

Расскажу одну интересную историю, которая приключилась не так давно.

Изучаю написание ботов в Telegram. В Telegram API можно выставить webhook, который будет дергаться при поступлении событий с серверов Telegram. На одной машине стоит Vagrant и под ним все нормально работает. То есть, моя серверная часть успешно получает события от Telegram. На другой - LAMP под Windows. И на ней, соответственно, все то же самое уже не работает. То есть, ровно тот же самый код.

Разбирался пару часов, наверное, пока не нашел, в чем же дело.

Под Vagrant'ом была VirtualBox c Убунтой внутри. На которой веб-сервером был Nginx.
В Windows стоял OpenServer, в котором запускался Apache под то же самое.

Теперь самое интересное. Дока по Telegram API советует скрывать URL веб-хука, используя для этого выданный токен (никому, кроме пользователя API, неизвестный).  То есть, строить URL как-то так:

https://www.example.com/[token]

Сама строка токена где-то в середине содержит символ двоеточия (:).
Так вот. Так как в Windows символ ':' является значимым для файловой системы, любые URLы, его содержащие, в целях безопасности блокируются апачем под Windows. Нашел интересный тред в буржунете, где люди предлагали даже сделать какой-то флаг при запуска апача, чтобы можно было выключить эту функциональность под свою ответственность, но что-то там дело так и не сдвинулось, как я понял. 
Ну а под другие оси Apache таких ограничений не имеет, если я правильно понял.
В общем, весьма интересная ситуация, знание о которой иногда может быть полезным )

понедельник, 5 марта 2018 г.

Пара забавных ситуаций или вести с полей

Вообщем, хочу рассказать о трудовых буднях п(р)ограммиста. Всего 2 случая из моей личной практики, которые имели место быть не так давно. И в обоих случаях пришлось по дурости потупить немного ) Итак.

1. Есть некий сервис A, который принимает HTTP-запрос, обрабатывает его особым образом и выдает некий результат.  В некоторых (достаточно редких) случаях сервис A в процессе обработки обращается к сервису B.  Эти случаи задаются комбинацией полей в БД для заданной учетной записи. Так вот, тестировал работу сервиса А локально. И долго не мог понять, почему данный конкретный запрос отваливается по таймауту. Пока через NN минут не догадался посмотреть, какова комбинация полей для локальной учетки в БД, от которой выполнется запрос. Разумеется, именно для этой записи требовалось обрашение к сервису B. А сервис B у меня на локальной машине не был запущен по определенным причинам. В общем, ситуация простая, но я долго не мог сообразить, что происходит.  В какой-то момент даже была мысль, что что-то случилось с апачом )

2. Нужно сделать запись некоторой информации в БД. Использую PHP-расширение MySQL PDO. Чтобы не изобретать велосипед, просто скопировал код процесса  инициализации/создания экзмпляра класса PDO из другого проекта. Всего несколько строк. Все, вроде бы, идет хорошо. И тут в какой-то момент понимаю, что данные в БД не пишутся. То есть, все действия выполняются правильно, PHP-функции возвращают корректные результаты и правильное количество обработанных строк, но в phpMyAdmin вижу, что совершенно нет никаких изменений в БД ! Попробовал выполнить запрос из консоли phpMyAdmin - все работает. То есть, проблема где-то в коде.. Была мысль, что просто не в ту БД пишу. Проверил конфиг, который использовался для подключения к БД. Все данные правильные, то есть, правильный сервер, БД, правильная таблица. Потихоньку начал сходить с ума ) Теперь развязка: в скопированном мной коде был такой фрагмент среди прочих параметров настройки подключения:

    $opt = array(
       [..]
        \PDO::ATTR_AUTOCOMMIT         => false,
      [...]
    );
Обратите внимание, что выключен автокоммит в БД. Когда я добавил использование транзакций и выполнил коммит для текущей транзакции после всех своих манипуляций с БД, все заработало.  !!! )))

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

понедельник, 8 января 2018 г.

C Новым 2018 годом и Рождеством!

В этом году я немного припозднился с поздравлениями, но лучше позже, чем никогда :)
Поздравляю всех своих читателей с Новым 2018 годом Желтой Собаки. Желаю вам здоровья, удачи и семейного благополучия. Чтобы все у вас было хорошо.  Даю вам установку на добро )
С праздниками, друзья!