четверг, 8 августа 2013 г.

Опасности неправильных концов строк

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

Исторически так сложилось, что окончание строки в бинарной форме по умолчанию по-разному кодируется на разных платформах. На Windows — это CR+LF (ASCII 0x0D 0x0A), на Unix и подобных системах — LF (ASCII 0x0A), на Mac — CR (ASCII 0x0D). Копируя текст из исходников, которые писались для другой системы, есть опасность получить файл со смешанными концами строк. Пример такого файла показан на рисунке ниже.
Опасность таких файлов в том, что компилятор MSVC++ игнорирует CR и считает, что там все написано в одну строку. С другой стороны редактор Visual Studio вполне корректно отображает перенос. Проблемы начинаются при отладке полученных от кастомеров дампов. Пример показан на рисунке ниже.
Тут видно, что ошибка показана совсем не в той строке, в которой она произошла в реальности. При отладке больших проектов это становится огромной проблемой. Можно также отметить, что даже при показе специальных символов Visual Studio никак не выделяет «враждебные» концы строк. Единственное, чем помогает студия — это предупреждение, которое выдается при открытии подобных файлов.
Обратите внимание, что в диалоге можно снять галочку Always show this dialog и тогда студия больше никогда таких предупреждений не выдаст. Убедиться, что Visual Studio определяет файлы со смешанными концами строк можно в параметрах через меню Tools->Options в появившемся окне Environment->Documents и смотрим галку Check for consistent line endings on load.

среда, 7 августа 2013 г.

Новый адрес блога



В связи с тем, что Google стал упорно редиректить с blogspot.com на blogspot.ru, пришлось организовать более стабильный адрес для данного блога. Уже какое-то время он живет по адресу codeatcpp.com. Старые ссылки на статьи с адресом jia3ep.blogspot.com также корректно работают (да и jia3ep.blogspot.ru тоже работает).

К счастью, процесс прошел очень гладко с использованием регистрации домена прямо из настроек Blogger (через сервис Google Apps).

Как читать без Google Reader

В Google Reader этот блог читало подавляющее большинство подписчиков. После закрытия Reader можно очень легко продолжать читать этот и другие блоги через feedly.com. Там ребята приложили максимум усилий для миграции из Google Reader в один клик (они даже визуально сделали стиль похожим на Google Reader). Так что, кто еще не слышал про реальную альтернативу Google Reader — пользуйтесь.

Разницы, как пользователь, я практически не замечаю. У меня даже кнопочка в тулбаре Chrome есть, только она количество непрочитанных статей не показывает (пока, видимо).