пятница, 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 до нужной кондиции. После этого десктопный клиент таки запустился.
В общем, весело и интересно провел время )

вторник, 21 июня 2016 г.

Отличный образчик "индусского" PHP-кода

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

Итак, имеется view-ка с большим объемом лапшекода, который схематически имеет следующую структуру (совпадения имен переменных случайны =):
====
...
for ($i = 0; $i < count($data); ++$i) {
     foreach ($data as $data) {
...
...
...

     }
}
====
Внутри данной конструкции  около 100 строк черт знает чего.  Логично предположить, что $data представляет собой массив. При выполнении этой конструкции я (почему-то) ожидал, что она выполнится ровно N^2 раз, где N - размерность массива $data. Но на удивление массив был обработан ровно 1 раз. И именно такое поведение и было правильным.
Я, конечно, стал искать внутри цикла какие-либо присвоения в переменную $i или выходы из цикла по инструкции break, но ни того, ни другого обнаружено не было. Стало интересно... )
И только через какое-то (весьма продолжительное =) время сообразил, почему код ведет себя именно так. Запускается внешний цикл, затем при первом запуске внутреннего цикла внешняя переменная $data перезаписывается присваиванием в нее внутреннего значения (при этом в самом foreach внешняя переменная корректно замыкается и хранит указатель на первоначальный массив $data).
По выходу из foreach() мы имеем в $data последний элемент внешнего массива, который у нас массивом не является, поэтому при проверке условия перед входом во вторую итерацию цикла внешнего for count() возвращает единицу (я так понял, что это стандартное поведение для переменных, не являющихся массивами). В итоге, вход во вторую итерацию внешнего цикла не выполняется (1 не меньше 1) и происходит выход из внешнего цикла. Просто и красиво.
Разумеется, внешний цикл был сразу мной удален и затем произведен небольшой рефакторинг по переименованию переменных для их мало-мальского различия между собой.
Ну и, конечно, остался легкий осадок в виде риторического вопроса: Зачем было писать _так_, если сразу можно было писать понятно ? )




четверг, 18 февраля 2016 г.

Задача о минимальном числе, составленном из множителей разбиения

На днях наткнулся на небольшую, но интересную задачку. Условие звучит так:
Задано целое десятичное число N такое, что 9 < N < 10^5. Требуется найти такое минимальное положительное десятичное целое число, произведение цифр которого равно числу N. Если такое число найти не удается, требуется вернуть 0.

Например, задано число 20. Его можно разбить на множители несколькими способами, которые подходят под условие задачи (исключаем множители 10 и 20, так как они не являются цифрами, плюс исключаем единицу, так как в данном случае она будет лишь способствовать увеличению числа-результата за счет дополнительного разряда):
1. цифры 4 и 5
2. цифры 2, 2 и 5
Из найденных цифр можно составить несколько чисел. Решением будет число 45, так как оно будет наименьшим среди всех возможных вариантов.

воскресенье, 24 января 2016 г.

Книга "Путь разработчика" Джона Сонмеза

В данный момент читаю книгу "Путь разработчика" Джона Сонмеза
(она же "Soft Skills: The software developer's life manual").

Книга о, так называемых, "мягких навыках" программиста: социальном взаимодействии, воспитании силы духа, воли, укреплении тела, умении правильно распоряжаться деньгами и т.д.

Книга не содержит какой бы то ни было технической начинки и читается достаточно легко.

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

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

четверг, 14 января 2016 г.

Первый опыт с PHP 7

Как уже, наверное, всем (ну или почти всем) известно, недавно вышла 7-ая версия PHP.
Установил себе ее на локальную машину для тестирования. Кое-что было добавлено нового (возможность явного указания типа данных, строгий режим, кое-какие изменения в приоритетах операций, новые операторы). Для себя пока отметил, что в генераторах стало возможным, используя конструкцию yield from <..>, выполнять рекурсивные вызовы генераторной функции, что, в общем, весьма удобно, если нужно, например, выполнять обход какой-либо древовидной структуры с генерацией промежуточных значений.
Обращаюсь к немногочисленным читателям.  Пробовал ли кто-либо из вас уже полноценно использовать PHP 7 на каких-либо проектах, и если да, то какие ее новые особенности вам наиболее запали в душу и почему ?