четверг, 21 декабря 2017 г.

LibreOffice в администрации Тюменской области

Андрей Чемякин из Государственного казенного учреждения Тюменской области "Центр информационных технологий Тюменской области" предоставил информацию о том, что в структуре администрации Тюменской области успешно реализован проект по переводу компьютеров органов государственной власти на использование свободного программного обеспечения, в том числе и на использование LibreOffice. С 2016 года переведено более 2000 рабочих мест по всему региону.
Вот ссылка с постулатами перехода на OpenSource http://citto.ru/citto/actions/open_software.htm.
Удачи тебе в нелегкой борьбе, Андрей =)

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

Условное форматирование в LibreOffice Calc. Копирование форматирования

Условное форматирование ячеек в LibreOffice Calc - это автоматическое форматирование ячейки (назначение цвета ячейки, цвета шрифта, размера и типа шрифта, различных эффектов и дополнительных элементов в ячейке) в зависимости от некоего условия. Подробнее о настройках условного форматирования я писал ранее вот здесь.
А в этой заметке я хочу рассказать о такой штуке, как копирование условного форматирования. Какие варианты у нас могут быть? Мы можем настроить условное форматирование для одной ячейки и затем захотеть растянуть форматирование на диапазон ячеек. Также у нас может быть диапазон ячеек с настроенным условным форматированием, а мы хотим либо расширить диапазон, либо скопировать форматирование в новый диапазон, например, на соседний лист.
Как же скопировать условное форматирование или расширить его диапазон?
Вариант №1. Используйте значок "Копировать формат".
Выделите ячейку с нужным условным форматированием. Дважды щелкните по указанному значку на панели инструментов. Щелкайте мышкой по нужным ячейкам. После завершения операции копирования формата нажмите клавишу Esc на клавиатуре.
Плюсы этого варианта - это очень быстро делается.
Минусы этого варианта - если ячеек, куда копируется форматирование, очень много, то есть шанс, что вы ошибетесь в диапазонах или просто устанете тыкать мышкой.
Вариант №2. Используйте возможности диалога "Вставить как".
Выделите ячейку с нужным условным форматированием. Скопируйте ее, используя любой удобный вам вариант (контекстное меню, значок на панели инструментов или меню "Правка"). Выделите нужную ячейку или диапазон ячеек. Нажмите на нём правой кнопкой мыши и выберите пункт контекстного меню "Вставить как > Вставить как...". В открывшемся одноимённом диалоге снимите со всех пунктов галочки в разделе "Выбор" кроме пункта "Форматы":
Нажмите кнопку ОК. Не смотря на то, что вы скопировали всю ячейку целиком вместе с возможными данными, вы вставите в выделенный диапазон только формат ячейки, в том числе и условное форматирование.
Вариант №3. Используйте диалог "Управление условным форматированием".
Выберите пункт меню "Формат > Условное форматирование > Управление". Откроется указанный диалог.
В этом диалоге показываются все настроенные условные форматирования на текущем листе. Выберите в диалоге нужное условное форматирование. Нажмите в нижней части диалога на кнопку "Изменить". Откроется еще одно окно с настройками выбранного условного форматирования:
Обратите внимание на нижнюю часть диалога, строку "Диапазон". Вы можете в этой строке задать диапазон ячеек вместо одной ячейки, используя запись такого вида А1:А50 или А1:В40, либо несколько диапазонов вида А1:А10;В5:В25, либо диапазон и отдельные ячейки вида А1:А10;В4;С4:С15.
Внимание! При попытке в строке "Диапазон" задать несколько диапазонов, используя точку с запятой ";" в качестве разделителя, обращайте внимание на то, что после знака точка с запятой не должно быть пробела! На сегодня в LibreOffice есть ошибка, которая приводит к потере условного форматирования, если после точки с запятой есть пробел. При этом в ОС Windows поле подсвечивается красным цветом, если диапазоны заданы не правильно, а в ОС на основе ядра Linux не подсвечивается! А задать диапазон все равно можно, кнопка ОК даже при неправильном вводе значений доступна для действий!

среда, 13 декабря 2017 г.

Используем bisect для поиска регрессий в коде LibreOffice

Регрессия в программном коде - это, когда после внесения изменений в программу, перестаёт работать то, что должно было продолжать работать. Например, разработчик написал код, добавляющий новую фичу (или исправляющий ошибку) в одном месте программы, а в другом месте программы из-за этого возникла другая ошибка, например стал неправильно отображаться формат ячейки или некорректно стало считаться некое вычисляемое значение, да и вообще всё, что угодно.
Когда обнаруживается такая регрессия (в 7.0. работало, в 7.1 перестало работать или работает с ошибками), то для облегчения жизни кодерам (и для сокращения затрат их времени) люди из QA команды делают bisecting.
Bisect - это инструмент из Git, который используется для определения момента, когда ошибка впервые появилась в LibreOffice. То есть мы будем искать первый коммит, который привел к появлению некой ошибки.
В вики проекта есть страничка с описанием процесса для ОС Windows (на английском языке), а также для Linux и для macOS.
Итак, начнем:
Шаг № 1. Скачиваем Git for Windows и устанавливаем его.
Шаг №2. Для корректной работы LibreOffice в Windows необходимы библиотеки типа msvcrXXX.dll от Visual C++ Redistributable Packages for Visual Studio соответствующих версий. Скачать их можно с сайта MicroSoft. Если вы ищете ошибку в той версии офиса, которая уже установлена и работает, то скорее всего нужные библиотеки от MS уже установлены. Если решили проверить альфу или бету версию офиса, то нужно уточнить у разработчиков, какие библиотеки нужны и нужны ли вообще.
Шаг №3. Нужно скачать репозиторий бинарников для той версии офиса, в которой вы собираетесь искать регрессию. Создаем каталог, где будут храниться репы, например E:\libo. Запускаем наш Git for Windows, откроется окно терминала:

нужно перейти в наш рабочий каталог, выполнив команду cd /e/libo, приглашение командной строки изменится на соответствующий путь.
Далее выполняем команду git clone https://bibisect.libreoffice.org/win64-7.1.git (последние две цифры 7.1 означают номер версии LibreOffice, которую мы будем исследовать, если вы работаете с иной версией LibreOffice измените последние две цифры на нужную версию).
Ждем достаточно долгое время, пока сформируется архив на сервере, пока он выкачается к Вам на компьютер, а затем распакуется. В терминале все эти шаги будут отражаться.
Есть и альтернативный способ получения репозитория: переходим по ссылке типа https://bibisect.libreoffice.org/win64-7.1, где win64 - это операционная система и разрядность, а 7.1 - это версия LibreOffice. Там на страничке есть фраза "Download the 5.81Gb bundl...". со ссылкой, щёлкаете по этой ссылке, скачиваете этот самый bundle в (нашем примере) каталог E:/libo и даете в терминале команду git clone -o bundle win64-7.1.git-bundle win64-7.1. Естественно вы должны в этот момент находится в каталоге, куда скачали bundle. По сути это архив, а команда выше распаковывает его в подкаталог win64-7.1.
Внимание! Сборки в bisect repo не содержат русского языка для интерфейса пользователя! А иногда бывает, что проблема проявляется с русским UI и не проявляется с английским UI.
Чтобы добавить русский интерфейс в сборку LibreOffice из bisect repo, необходимо скопировать некоторые каталоги и отдельные файлы из установленного стандартного LibreOffice в те же места в bisect экземпляр:
\LibreOffice\program\resource\ru - копировать весь каталог
\LibreOffice\share\registry\res\registry_ru.xcd
\LibreOffice\share\registry\res\fcfg_langpack_ru.xcd
\LibreOffice\share\registry\Langpack-ru.xcd
Шаг №4. Начинаем собственно процесс поиска плохого коммита. Переходим в каталог с репой бисектинга для нужной версии, даем команду cd win64-7.1.
Приглашение командной строки соответственно изменится на /e/libo/win64-7.1.
Теоретически, нужно проделать 12 итераций (но по факту их может быть и на один или два больше!) - запусков сборок LibreOffice из репы-bisect, для каждой из которых нужно проверить наличие или отсутствие ошибки. Git сам в итоге выведет итоговый коммит, который приводит к сбою.
Сначала нужно убедиться, что мы используем нужную репу для поиска нашей регрессии. Мы проверим, что в последнем билде в данной ветке наша ошибка уже присутствует, а в первой еще нет. Для этого введите команду git checkout master, оно чуть подумает и выведет некий результат:
Если вывод в терминале будет раскрашен в красный цвет или будет пестрить фразами типа error, значит что-то пошло не так и нужно разбираться и просить помощи (как это делал я, когда мучался в начале процесса).
Следующая команда instdir/program/soffice (в macOS выполните команду open LibreOffice.app/) запустит последнюю сборку (или билд - от английского build) LibreOffice в данной версии bisect-репозитория. Теперь в этом запущенном экземпляре LibreOffice вы делаете те действия, которые приводят к Вашей ошибке. Это нужно, чтобы убедиться, что ошибка УЖЕ есть в данном билде.
ВНИМАНИЕ! Часто бывает, что команда instdir/program/soffice не запускает LibreOffice и ничего не выводит в консоль. Дайте эту команду повторно. И только если и после второй попытки запуска LibreOffice не запустился, то можно говорить о том, что есть проблема либо с репозиторием, либо с git, либо что-то ещё.
ПРИМЕЧАНИЕ: если в последнем билде Вашей ошибки нет, это значит, что вы ищете регрессию не в той версии!
ПРИМЕЧАНИЕ: Вы должны искать только Вашу ошибку, на иные ошибки не обращайте внимание, за один цикл итераций (см.ниже) вы находите одну конкретную регрессию, которая привела именно к Вашей ошибке.
Убедились, что ошибка есть? Хорошо. Следующая команда будет git checkout oldest. И следом за ней сразу instdir/program/soffice. Эта последовательность запустит самый первый билд в версии. Выполните снова действия, которые приводят к Вашей ошибке. Убедитесь, что ошибки ЕЩЁ НЕТ! Если это так (в последнем билде есть ошибка, а в первом нет), то регрессия была внесена где-то между этими билдами. И мы начинаем самое главное.
Даем команду git bisect start master oldest.
И начинаем выполнять следующие действия раз за разом:
1. Вводим команду instdir/program/soffice - запускаем LibreOffice, проверяем на наличие ошибки, просто закрываем LibreOffice (либо, если ошибка критическая, то он сам закроется), и
2. - если ошибка есть, даем команду git bisect bad
    - если ошибки нет, даем команду git bisect good
3. Возвращаемся к пункту 1.
ВНИМАНИЕ! Обратите внимание на то, что ошибка обязательно должна проявиться при выполнении этих итераций хотя бы пару раз. Если у вас все время ответ будет good, это значит, что что-то пошло не так и нужно разбираться со знающими людьми! 
ВНИМАНИЕ! Может случится так, что LibreOffice не будет стартовать вовсе или с какими-то ошибками, это может означать, что билд был неработоспособный. В таком случае необходимо дать команду git bisect skip, и вернуться к пункту 1.
По мере выполнения этих шагов git будет писать нечто вроде "Осталось 11 (10, 9......2, 1) шагов до конца". Может писать и "Осталось 0 шагов до конца, но при этом не покажет финальный результат (о нем чуть ниже), поэтому процесс нужно продолжать до тех пор, пока git не покажет примерно такой вывод в консоли:
sourse-sha: 531eaa9b92090606efdb8c04dfd6de591e93842b
Это sha хэш проблемного коммита для нашей регрессии. Это то, что мы должны показать в багзилле в качестве результата проведенной операции bibisecting'a.
Теперь нужно найти собственно коммит и автора коммита.
Открываем браузер и в адресной строке пишем gerrit.libreoffice.org и жмём энтер.
Справа вверху будет поле для поиска (со значком лупы), копируем и вставляем в это поле полученный хэш - 531eaa9b92090606efdb8c04dfd6de591e93842b и жмём энтер.
Сайт покажет коммит, в левой части которого будут строки Owner и Committer. Чаще всего, это один человек, но иногда бывает, что патч написал один человек, у нет прав на принятие патчей и тогда другой человек, опытный разработчик с правами, делает код ревью и вливает патч в исходники. Соответственно автора и коммиттера надо подписать в багзилле на баг, добавив их в поле СС.
В багзиллу проекта, помимо описания бага, Вы должны после bisecting'a написать нечто вроде: "I bisected this bug. First bad commit is 531eaa9b92090606efdb8c04dfd6de591e93842b." И в доказательство привести вывод из вашей консоли git с результатом bibisecting'a.
Также жедательно в баг репорте оставить ссылку на патч, который вы нашли в геррит. 
В конце в терминале дайте команду git bisect reset и затем git checkout master чтобы выйти из режима.

среда, 6 декабря 2017 г.

LibreOffice в государственной экспертизе Липецкой области

Зашёл по служебной надобности на сайт госэкспертизы Липецкой области http://lipeksp.ru/dokumenty/formy-zayavleniy/, и там в разделе документы увидел замечательное:
Хотелось бы надеяться, что документы в формате ODT созданы все же в LibreOffice. Да и советуют они использовать именно Либру.
Так что дело продвижения и использования свободного офисного пакета движется тихой сапой и в госорганах.