HowTo, linux

Fedora: гибернация

Вы закрываете крышку ноутбука и он выключается. «Но то не то что я ожидаю!» — воскликните вы. Да. Так и есть. Потому что уже много времени подряд гибернация работает из рук вон плохо. Эдакое бедствие в линупсе.

Сначала рассмотрим теорию, а после — практику сна базе дистрибутива Fedora 26.

Основные режимы энергосбережения, которые чаще всего упоминаются пользователями::

  • ждущий режим — это когда отключается питание внешних устройств, но при этом сохраняется питание памяти, что позволяет относительно быстро восстанавливать рабочее состояние системы  В спецификации аппаратного обеспечения указано пять уровней энергосохранения. И разработчики различных операционных систем часто выбирают различающиеся между собой уровни.
  • Спящий режим — это особая разновидность выключения компьютера при котором слепок содержимого оперативной памяти сохраняется на диске. При повторной загрузке ОС проверяет, есть ли слепок памяти. И если да, то восстанавливает слепок в оперативную память и начинает с того места, на котором вы остановились ранее.
  • гибридный спящий режим — это тот же ждущий режим при котором содержимое оперативной памяти сохраняется в энергонезависимой памяти на случай отключения питания (windows-only)

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

Предупреждение: все описанные ниже манипуляции требуют физической перезагрузки компьютера для того, чтобы ядро восприняло новые параметры.

Читать далее

HowTo, linux

No Bootable Device после обновления дистрибутива

1 - no bootable deviceИменно таким неприятным сообщением может встретить вас ноутбук или стационарный компьютер после казалось бы удачно прошедшего обновления дистрибутива.

Почему? Потому что обновился grub-efi, а скрипт, который добавит запись о новом образе для загрузки не записал должным образом.

$ efibootmgr -v
BootCurrent: 0001
Timeout: 0 seconds
BootOrder: 0001,2001,2002,2003
Boot0001* Linux	PciRoot(0x0)/Pci(0x1c,0x4)/Pci(0x0,0x0)/NVMe(0x1,00-00-00-00-00-00-00-00)/HD(1,GPT,f627bf87-5440-4997-8310-aa80dba7e383,0x800,0x64000)/File(\EFI\fedora\shimx64-fedora.efi)A01 ..
Boot0002* Unknown Device: 	HD(1,GPT,f627bf87-5440-4997-8310-aa80dba7e383,0x800,0x64000)/File(\EFI\fedora\shim.efi)RC
Boot2001* EFI USB Device	RC
Boot2002* EFI DVD/CDROM	RC
Boot2003* EFI Network	RC

Увы, снять показания я смог только после восстановления работоспособности системы, поэтому на листинге, который приведен выше, мы видим корректный образ под меткой Boot0001 и тот, который был перед обновлением под меткой Boot0002. На разных системах это может выглядеть совершенно различным образом.

Что делать в случае, когда система совершенно не хочет загружаться?

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

  • зайти в BIOS
  • найти пункт выбора доверенного uefi-файла
  • указать нужный файл на диске (в случае с fedora — это shimx64-fedora.efi)

 

Разработка, HowTo

Печать в Chrome без подтверждения

Снимок экрана от 2017-10-28 01-07-21Существует задача для pos-систем печатать что-либо автоматически: чеки, квитанции и т.п. Хочется, чтобы печать можно было инициировать из скриптов, но по дефолту все браузеры показывают диалог печати или предварительный просмотр.

Это неудобно при создании киосков.

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

Что нам предлагают:

  • Использовать опцию —disable-print-preview (или включать аналогичную настройку в about:flags)
  • Вместе с ней включать опцию —kiosk-printing, которая в теории должна избавить нас от диалога выбора принтера.

А вот и нет. Эти опции нельзя использовать совместно. В чем суть: —disable-print-preview передает управление на диалог выбора принтера в системе, а это лишает нас контроля над выбором пользователя. Во многих (во всех) конфигурациях windows и linux нельзя избавиться от шага выбора принтера, а предварительный просмотр в хроме подменяет диалог выбора принтера.

Опция —kiosk-printing воздействует только на диалог предварительного просмотра chrome сразу печатая просматриваемый документ, а если мы его отключим, то и смысла в установке этого параметра нет.

Отсюда вывод: если вы хотите делать автоматическую печать, то используйте только —kiosk-printing.

Из минусов стоит отметить, что окошко предварительного просмотра все же на некоторое мгновение появляется на экране.

<!DOCTYPE html>
<html>
<head>
<title>autoprint</title>
</head>
<body>
data
<script>
    window.addEventListener('load', function() {
      window.print()
    })
  </script>
</body>
</html>

И это сработает — принтер начнет печатать.

UPD:

Chromium, issue 169004: баг с окном предварительного просмотра в режиме kiosk-printing (непофикшено)

Разработка, HowTo

Часть 9: Codeception. Настройка. Unit-тесты (Тестирование ПО)

codeceptionОглавление

Продолжаем цикл статей Тестирование ПО. В этой части рассмотрим установку и настройку фреймворка codeception. Попутно перенесем все ранее написанные тесты на новую платформу.

Прежде, чем двигаться дальше нам необходимо познакомиться с таким фреймворком как codeception. На базе PHPUnit можно делать лишь блочные и модульные тесты. Его предназначение полностью расшифровывается в названии. Поскольку изначально он был заточен под применение исключительно для юнит-тестирования (и модульного конечно же).

PHPUnit никуда не делся, но так как найти абсолютно все ошибки лишь модульными тестами нельзя, то со временем стали появляться различные инструменты для проведения функционального или приемочного тестирования — одни из них это selenium, который открывает браузер при проверяет соответствие сгенерированной страницы том, что ожидает пользователь и имеет возможность заполнять формы и отправлять запросы.

Появилась потребность в инструментах более высокого уровня, которые могли бы позволить манипулировать всем этим разнообразием консольных команд, приложений и всем тем, что позволяет искать ошибки в приложениях. Одним из таких инструментов стал Codeception — надстройка над PHPUnit, которая помимо прочего умеет выполнять тесты в браузере, осуществлять сетевые запросы, заполнять формы и много чего еще.

Читать далее

Разработка, HowTo

Часть 8: DBUnit (Тестирование ПО)

dbОглавление

Продолжаем серию статей Тестирование ПО, которая посвящена разработке ПО с применением методологии TDD.

В этой части будет рассматривать полезное дополнение к PHPUnit под названием DBUnit. Оно позволяет тестировать базу данных.

Читать далее

Разработка, HowTo

Часть 7: PHPUnit (Тестирование ПО)

php-unit-logo-bigОглавление

Продолжаем цикл статей по разработке веб-приложений с использованием методологии TDD.

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

В предыдущей части мы попытались создать собственный минималистичный код, который осуществляет тестирование проекта. Если продолжать и дальше, то в конечном счете можно довести имеющиеся наработки до вида, годного для использования в маленьких или не очень проектах. Но так делать не стоит ибо современная индустрия разработки требует высокой скорости создания продуктов и высокого их качества. Тратить усилия на поддержание уже не раз придуманного и реализованного, но своего — это не совсем хорошая идея. Поэтому в этой главе мы познакомимся с PHPUnit и научимся правильно его применять вместе с yii.

Читать далее

Разработка, HowTo

Часть 6: Самописный тестовый фреймворк (Тестирование ПО)

00-introОглавление

Продолжаем цикл статей Тестирование ПО в котором рассказывается о разработке программного обеспечения с применением методологии TDD.

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

Читать далее