понедельник, 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 годом Желтой Собаки. Желаю вам здоровья, удачи и семейного благополучия. Чтобы все у вас было хорошо.  Даю вам установку на добро )
С праздниками, друзья!



вторник, 20 июня 2017 г.

Интересная вероятностная задача

Недавно обнаружил интересную задачу. Итак.
Имеется некоторая функция one_two(), которая возвращает равномерно распределенные значения 1 или 2. То есть, вероятность появления 1 или 2-ки равна 50% (1/2).
Задача. Написать такую функцию one_two_three(), которая бы возвращала равномерно распределенные случайные значения 1, 2 или 3 (то есть, вероятность появления каждого числа - 33%, или 1/3). Важный момент. Использовать при этом можно только функцию one_two().
То есть, никаких вызовов random() и все такое.  Пока не могу сообразить, как решить. Но интересно )

Обновление от 21.06.2017:  Удалось решить (кое-как =)) Два дня думал ))) 

четверг, 11 мая 2017 г.

Git for Windows и старые проблемы

Ранее писал уже о том, что git log с какой-то версии Git выводит в консоли под Windows русские (utf-8) символы в таком виде:

<d0><b9><d0><b8>.....

В версии 2.11.0.3 это было исправлено, то есть, символы русского языка стали отображаться нормально. Но затем (внезапно! =) все снова поломалось. И до сих пор (а уже на дворе версия Git 2.13.0) ничего в плане улучшения этой ситуации не меняется.
Зверски загуглил на тему того, что же делать с этой проблемой. И в одном из тредов на stackoverflow нашел вот такое решение.
Необходимо перед использованием git log явно в консоли прописать команду:
===
SET LC_ALL=C.UTF-8
===
Попробовал это дело под Windows 7 и... помогло! ))
Ну а далее уже просто прописал установку этой переменной среды в Environment Setup настроек ConsoleZ, и вуаля )
В общем, если кто еще столкнется с той же проблемой, то, возможно, мой пост окажется полезным.

пятница, 30 декабря 2016 г.

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

Совсем немного осталось до начала Нового 2017 года. Хочется всем пожелать, чтобы всё то не очень хорошее, что имело место быть в текущем году, ушло в небытие и забытие (кануло в Лету =), а все хорошее бы сохранилось в нашей памяти (Ctrl+S) и автоматически бы перенеслось (вставилось по Ctrl+V :) в следующий, уже 2017-ый, год.
Чтобы этот шлейф позитивных эмоций дарил вам радость и в будущем. В общем, желаю никогда не унывать и всегда находить положительное там, где никто другой его не может найти. С наступающим всех! (тут звон бокалов шампанского :)
 

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

Git 2.11.0 и Windows: новые проблемы

Не так давно обновился Git for Windows до версии 2.11.0.  Установил новую версию на работе (Windows 7 64 bits). И после этого, например, при вызове git log вижу все русскоязычные комментарии в следующем виде:
===

<D0><B2><D0><BE> .... и т.д.

===
То есть, видно, что кодировка оригинального сообщения - UTF-8, но вот почему оно выводится таким странным образом в консоль ? Пробовал менять кодировку консоли в UTF-8 (из стандартной Windows-1251) через 'CHCP 65001', но это ничего не дало.
Самое интересное, что предыдущая версия Git 2.10.2 с тем же самым файлом конфигурации выводит русские комментарии в нормальном читаемом виде.
Дома под Убунтой стоит Git 2.11.0 и никаких проблем с комментариями тоже нет. То есть, предположительно, в 2.11.0 под Windows было введено нечто, что "поломало" вывод русских букв. Или же был введен какая-то новый параметр...
В общем, пока проблему так и не решил (пришлось откатиться на 2.10.2). Так что, если кто из читателей столкнулся с тем же и знает, в чем подвох, буду рад прочитать ваши рекомендации по устранению вышеописанной проблемы.

UPDATE от  23.01.2017:
Только что обновился на минорную версию 2.11.0.3 и, о чудо, вывод в консоль работает нормально. То есть, русские буковки отображаются в приемлемом виде. Что радует )

пятница, 18 ноября 2016 г.

Microsoft, Skype и все-все-все

Небольшая заметка о вчерашних приключениях, пока не забыл ) В общем, вчера утром на работе обнаружил, что не грузится десктопный виндовый клиент Skype. То есть, при первом запуске он, видимо, обновился автоматически и далее на странице входа логин ввести удается, а затем выводится сообщение "Данная страница содержит ошибки", и все стопорится. В общем, не грузится. Попробовал деинсталлировать Skype, удалил все данные локального профиля и переустановил Skype заново, скачав свежую версию. Безрезультатно. Попробовал залогиниться через веб-клиент Скайпа - все нормально проходит. То есть, проблема где-то на клиентской стороне.  Полез, разумеется, гуглить и наткнулся на эпический тред на сайте Skype-сообщества, где зарубежные пользователи, столкнувшиеся с этой же проблемой, вопрошают в пустоту, как им теперь жить без скайпа, не имея возможности "общаться с друзьями". Оказалось, что веб-клиент Skype из под MS Explorer тоже не заводится (я-то проверял из Firefox). В общем, в итоге рекомендуемое решение свелось ко следующему:

You must update your Internet Explorer to the latest IE11 version for Windows 7.


Занятно. Порадовал идущий следом риторический вопрос:

What does IE has to do with Skype and why should I care about it?!?!  

=))
Были и более пикантные ситуации:

IE 11 Does not support for windows 8

То есть, IE 11 вовсе не предназначен для 8-ой винды.

Большинство, конечно, полезло в Skype через веб-интерфейс:

Thank god there are other browsers than IE, so that i can login to web skype.

В общем, дико порадовавшись, что винда у меня на работе все еще 7-ая, начал я смотреть на свою машину более детально. Внезапно обнаружил, что у меня уже установлен IE 11 и находится он в режиме автоматического обновления до последней версии, так что просто установка свежескачанного IE 11 приводила к выводу сообщения о том, что "обновление приложения невозможно, так как на данной машине установлена более свежая версия" .  Пришлось качать специальное виндовое обновление за номером KB3058515, которое довело установленный IE 11 до нужной кондиции. После этого десктопный клиент таки запустился.
В общем, весело и интересно провел время )