8 мая 2020 г.

Подарок от SAP: + 2 года поддержки для SAP ERP

В посте "Версии SAP ERP и SAP NetWeaver. А где же SAP S/4HANA?" я выкладывал таблицу с соответствиями версий основных продуктов компании SAP SE (S4/HANA, SAP ERP, SAP R/3) и технической платформы (NetWeaver, SAP WebAS, SAP_BASIS). Там же был затронут вопрос об окончании поддержки этих продуктов. 

Ни для кого не секрет, что на данный момент основным направлением компании является платформа SAP HANA и продукты, основанные на ней. Например, SAP S/4HANA. Это ERP-система, которая может работать только на базе данных SAP HANA. Обновления для S/4HANA выходят каждый год. На текущий момент последняя версия это 1909 (от 09.2019). 

Таким образом, предыдущий флагман - SAP ERP 6.0, система, в которой функционал обновлялся с помощью установки EHP, больше не продвигается компанией SAP. Соответственно это последняя версия системы, которая была в широком смысле кросс-платформенной, то есть поддерживала установку на большое количество платформ и баз данных. И в прошлый раз, я писал, что все версии систем SAP ERP 6.0, вне зависимости от EHP, будут поддерживаться компанией SAP до 31.12.2025. А потом только SAP S/4HANA.

Так вот есть новость. Помните, как в фильме "Джентльмены удачи"? 
- У тебя какой срок был? 
- Одииин год. 
- А теперь ещё три припаяют. 



В феврале 2020 года компания SAP SE опубликовала обновлённую версию "SAP Release and Maintenance Strategy". В документе есть изменения, касающиеся поддержки старой доброй SAP ERP 6.0. Теперь три последних версии EHP (это 6, 7 и 8) будут поддерживаться до 31.12.2027 года, а потом еще 3 года будет доступна поддержка в рамках Extended Maintenance. 

Информация из PAM это подтверждает (рис. 1 - 3).

Рис. 1. Дата окончания поддержки для SAP ERP 6.0 EHP6.

Рис. 2. Дата окончания поддержки для SAP ERP 6.0 EHP7.

Рис. 3. Дата окончания поддержки для SAP ERP 6.0 EHP8.

Таким образом, компания SAP даёт немного больше времени на переход на SAP S4/HANA. Скорее всего темпы перехода не такие бодрые, как компании бы этого хотелось. На Хабре есть перевод статьи 2017 года (статья на вышла из "Песочницы" из-за ужасного перевода, но суть можно ухватить), которая объясняет откуда растут ноги этого обновления условий поддержки. Я сейчас говорю про темпы обновления уже работающих систем, старых проектов. При новом внедрении и выборе из систем SAP - однозначно только решения на SAP HANA.

Кто недавно начинал новый проект? Можно SAP продавить и купить именно SAP ERP 6.0 или уже нет?

По S4/HANA ничего не изменилось. По основному продукту поддержка до 31.12.2040, но каждая отдельная версия поддерживается не дольше 5 лет. Поддержка, например, версии 1909 заканчивается 31.12.2024. То есть, живя на этой системе, обновляться надо постоянно.

Поживём, увидим, что будет дальше.

Где можно почитать подробности:
- SAP note # 2881788 - End of SAP Business Suite 7 mainstream maintenance,
- SAP note # 1648480 - Maintenance for SAP Business Suite 7 Software including SAP NetWeaver.

P.S. За наводку на эту новость спасибо Дмитрию Бондареву.


Автор: Шиболов Вячеслав Анатольевич

6 мая 2020 г.

Как поддержать автора, если нравится читать этот блог?

Данный блог я веду с 2008 года. За это время я опубликовал (на момент середины 2020 года) больше 360 постов и статей. Некоторые из них совсем короткие, а некоторые чуть больше и основательнее. Есть статьи не совсем про администрирование, а, например, личного характера и даже юмор. Как бы то не было, но я стараюсь делать качественные посты и максимально придерживаться выбранной тематики. А тема эта очень узкая. Я не пишу про психологию отношений, машины, путешествия и не выкладываю фотографии котиков (этот  не в счёт). Хотя в этом случае, наверняка, аудитория была бы гораздо больше. И котики есть у меня: :)

Рис. 1. Помощник SAP администратора.

Но кто-то же должен писать и про нашу узкую сферу. 

Были периоды, когда я выкладывал свои статьи стабильно. А иногда, из-за низкой мотивации или загруженности в других сферах жизни, мне не удавалось опубликовать ни одного поста в месяц или даже два. 

Попытка в 2017 году найти соавторов, кто мог бы мне помогать и также делился своим опытом, не увенчалась успехом. Перед наступлением 2018 года я провёл опрос среди читателей, думая, что может быть это всё никому не интересно. Но достаточное количество людей высказалось о том, что надо продолжать. Я понял, что придётся нести этот груз одному. :)

Ещё годом ранее я написал пост "Зачем я веду этот блог?", где попытался описать, что блог денег не приносит. Приносит только моральное удовлетворение от того, что ты делишься своими знаниями, помогаешь кому-то в работе. Ну и оттачиваешь свой навык "оформления мыслей в слова": сравните мои посты в начале ведения блога и сейчас. Мне кажется, что качество чуть-чуть повысилось.

К чему я это всё? :) Пожаловаться, наверное. Понятно, что после такого количества контента, который я написал и опубликовал, бросать блог жалко. Тянуть я это всё, в той или иной мере, буду. Но часто для поддержания личной мотивации мне не хватает обратной связи. Как я уже написал - аудитория читателей блога небольшая. 

Поэтому, если вам понравился мой блог или помогла какая-то статья, то можно сделать что-то из следующего.
  1. Поддержать автора рублём. Карта, на которую принимаются лучики поддержки: 2202 2061 7799 8247 (Сбербанк). Можно перевести небольшую сумму мне на кофе с зефиркой. Дело, конечно же, не в деньгах, на жизнь мне хватает. Дело в том, что так я пойму, что кто-то оценил мой труд и дал обратную связь, отдав часть своей энергии. Что будет мотивировать меня писать чаще и больше.

  2. На сайте почти нет рекламы. Но много лет назад я подключился к Google AdSence и в блоге появляется иногда пара рекламных баннеров. Никто из нас не любит рекламу в Интернете, почти все мы пользуемся расширениями типа AdBlock, и я не исключение. Но если что-то понравилось и вы хотите сделать мне приятное, то отключите на время AdBlock и щелкните по баннерам на странице блога. Может быть эти клики накопят мне когда-нибудь 100 долларов, которые мне пришлёт Google. И это произойдёт благодаря вам. :) Хотя этот способ после 2022 года уже не работает. 

  3. Напишите мне комментарий под постом, который вам помог или научил чему-то новому. Честно скажу, это чертовски приятно. Гораздо приятнее получить отклик, чем написать в пустоту, не зная, пригодилось ли это кому-то или нет.
Спасибо, что читаете мой блог. Всем хорошего дня!




27 апреля 2020 г.

Фоновые задания в SAP системе - II

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

Фоновое задание в системе может находится в нескольких статусах (рис. 1).

Рис. 1. Возможные статусы фонового задания.

Когда мы создаём задание в транзакции SM36 или в транзакции напрямую и ещё не указали ему условия для запуска, оно имеет статус "Запланировано". Как вы догадались, находящееся в этом статусе задание, выполняться в системе не будет. 

После того, как в задании было указано условие для запуска, оно переходит в статус "Деблокировано". На английском этот статус звучит более логично - Released. После этого планировщик заданий в SAP системе начинает видеть данное задание и может запланировать его выполнение, если условия для запуска будут выполнены.

Как только условия для запуска выполнились (например, наступили нужные дата и время), планировщик ставит задание в очередь на исполнение, меняя его статус на "Готово".

Если фоновый рабочий процесс берёт задание из очереди на исполнение, оно меняет свой статус на "Активно".

А в конце, у такого задания есть два выхода - "Завершено" в случае успешного выполнения всех шагов задания или "Отменено" в случае возникновения ошибки на каком-то этапе.

Отслеживать фоновые задания в системе можно через транзакцию SM37. На начальном экране можно задать фильтры, указав имя задания (или шаблон для имени), владельца, статус(ы) или временный период, за который мы хотим просмотреть задания (рис. 2).

Рис. 2. Пример начального экрана транзакции SM37.

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

Деблокированное задание нельзя изменить, но как вы можете видеть на рисунке 1, такое задание можно перевести обратно в статус "Запланировано". А после этого уже внести изменения, поменяв, например, шаги задания, условия запуска или периодичность. Далее, сохранив изменения, перевести задание в статус "Деблокировано".

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

Несколько слов про планировщик фоновых заданий. 

За планирование фоновых заданий в SAP системе отвечает ABAP-программа SAPMSSY2, которая запускается периодически через фиксированные интервалы времени. Эти интервалы регулируются через SAP переменную rdisp/btctime. Интервал устанавливается в секундах. Значение по умолчанию - 60 секунд. В случае изменения значения рекомендуется выбирать из интервала 30-60 секунд. Если в текущей системе несколько инстанций, то для повышения производительности рекомендуется выставлять разные значения на разных инстанциях - например, 57, 56, 59, 60 секунд. В таком случае программа SAPMSSY2 на разных инстанциях будет срабатывать асинхронно. Что улучшит работу механизма балансировки и производительность системы фоновой обработки.

В системах основанных на SAP NetWeaver 7.0 и выше планировщик дополнительно запускается ещё и при окончании любого фонового задания. Это также повышает общую производительность системы. После окончания фонового задания, как минимум, один фоновый рабочий процесс свободен и можно на нём сразу запускать следующее задание из очереди.

Дополнительную информацию про моменты старта планировщика можно найти в SAP note 923228 - Background job scheduler: Use of processes that have become free и SAP note 1508504 - Load balancing in background processing. 


Часто возникает вопрос: как приостановить на время выполнение какого-то запланированного задания, а потом опять запустить выполнение?

Здесь стоит иметь ввиду, что приостановить задание, которое уже выполняется на фоновом рабочем процессе и имеет статус "Активно", нельзя. Такое задание можно только прервать с ошибкой. А в вопросе выше речь идёт о заданиях, которые находятся в статусе "Деблокировано" и могут быть запущены планировщиком согласно их расписанию. 

Ответ: найдите данное задание в транзакции SM37, выделите его и измените его статус на "Запланировано", выбрав соответствующий пункт меню (рис. 3).

Рис. 3. Пример смены статуса фонового задания с "Деблокировано" на "Запланировано".

Для активации задания необходимо выполнить обратную операцию: сменить статус на "Деблокировано", нажав на панели в SM37 соответствующую кнопку (рис. 4). А после этого в диалоговом окне подтвердить условия запуска.

Рис. 4. Пример деблокирования фонового задания.

Так можно поступать с периодическими заданиями, которые необходимо временно приостановить.

Для централизованной приостановки всех фоновых заданий в системе существует отдельная программа - BTCTRNS1 (запуск через SE38). Приостановка всех фоновых заданий часто бывает нужна перед процедурой копирования или обновления (upgrade) системы. После выполнения отчёта все фоновые задания в системе имеют статус "дебл./ожид." (рис. 5).

Рис. 5. Статус фоновых заданий в системе после выполнения программы BTCTRNS1.

Для обратной активации всех фоновых заданий используется программа - BTCTRNS2.
Подробности про этот инструментарий можно найти в SAP note 37425 - Job reset for upgrade or system copy.

Ещё один интересный отчёт BTCAUX14 (присутствует в системах от SAP_BASIS 640 и свежее), который выдаёт список фоновых заданий согласно их частоте выполнения в системе в очень читабельном виде (рис. 6). Подробности в SAP note 1439806 - Listing jobs according to their frequency.

Рис. 6. Пример вывода отчёта BTCAUX14.

Дополнительно, напоминаю еще раз, в этом посте можно прочитать как выделяется память при фоновой обработке. А тут можно найти ещё один небольшой секретик про статусы фоновых заданий.

Ну и ещё можно заглянуть в SAP note 519059 - FAQ: Background processing system для получения дополнительных сведений про фоновую обработку.

Применить эту информацию на практике можно, приобретя мой курс практических заданий SAPADM 2.0. В курсе "Задание 7" из второго пакета полностью посвящено фоновой обработке.


Автор: Шиболов Вячеслав Анатольевич

21 апреля 2020 г.

Фоновые задания в SAP системе - I

Сегодня я хотел бы поговорить про фоновую обработку в SAP системе. 

Как вы уже знаете (например, из этого поста), работа пользователей в ABAP-части SAP системы возможна в двух режимах - диалоговом и фоновом. 

Фоновый (background) режим работы используется для запуска долгих тяжелых отчетов или стандартных периодических заданий для обслуживания SAP системы (задания, собирающие различную статистику, проводящие чистку и тому подобное). Для работы ABAP-программы в фоновом режиме используются фоновые задания. Особенностью фоновых заданий является то, что они не требуют постоянного коннекта пользователя с системой посредством SAP GUI. То есть пользователь планирует задание после чего может выйти из системы, а программа запустится и отработает без него. Этот факт некоторым образом ограничивает тип запускаемой программы - не работают функции связанные с рабочей станцией пользователя. Например, Frontend печать или загрузка данных с компьютера пользователя. Но в остальных случаях фоновая обработка это удобно. 

Сразу отмечу тот момент, что в целом ABAP-программа в фоне работает не быстрее и  не медленнее, чем в диалоговом режиме. Но благодаря особенностям фоновой обработки мы можем запланировать выполнение программы без нашего участия в тот момент, когда нагрузка на систему минимальна. И в этом сила фоновой обработки. Есть ещё небольшие особенности в выделении памяти рабочему процессу и в фиксировании/откате изменений в базе данных. Но они не значительны.

Планирование фоновых заданий производится в транзакции SM36 (рис. 1). 

Рис. 1.Транзакция SM36: пример планирования фонового задания.

Данная транзакция обладает широкими возможностями по планированию. 

Сначала необходимо определить имя фонового задания. Указать его класс и цель выполнения (рис. 1: поля области 1). 

Цель выполнения это конкретная инстанция данной системы, у которой есть хотя бы один фоновый процесс. 

Ведь вы помните, что за обработку фоновых заданий в системе отвечают рабочие процессы специального типа - фоновые (тип BTC). Количество рабочих процессов данного типа настраивается через SAP параметр rdisp/wp_no_btc.

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

А ещё в качестве цели выполнения можно указать группу серверов фоновой обработки. Управление группами серверов для фоновой обработки осуществляется в  транзакции SM61. Ситуация аналогичная Logon Group для диалоговой обработки (транзакция SMLG). Создаёте группу и включаете в неё инстанции. Причём, для исключения какого-то сервера из обработки можно создать группу с именем SAP_DEFAULT_BTC. После этого включаете в неё все инстанции кроме той (тех), что хотите исключить. В результате, если при планировании поле "Цель выполнения" оставить пустым, то планировщик выберет инстанцию из тех, что включены в группу SAP_DEFAULT_BTC. Подробности можно найти в SAP note 786412 - Determining execution server of jobs w/o target server. 

Теперь про классы. Классов заданий в системе 3: A, B и C. Классы имеют разный приоритет. A - самый высокий, C - самый низкий. Имейте в виду, что приоритеты используются только при запуске задания. Если при выборе очередного задания для старта в очереди окажется несколько заданий, которые уже можно запустить, то планировщик будет выбирать и запускать задания основываясь на приоритете (рис. 2).

Рис. 2. Приоритет фоновых заданий, используемый при планировании запуска.

При этом важно запомнить, что на скорость выполнения конкретного задания, приоритет влияния не имеет. Только на планирование. 

Дополнительно существует возможность выделить часть фоновых рабочих процессов инстанции для выполнения только заданий класса A. Сделать это можно при активации и настройки режимов работы инстанции (транзакция RZ04). В этом случае при планировании фоновых заданий данные рабочие процессы не будут участвовать в обработке фоновых заданий классов B и С. Но злоупотреблять этой возможностью не рекомендуется, так как можно получить обратный эффект и снизить общее время выполнения всех фоновых заданий в системе. Потому что большинство заданий в системе (70% и более) имеют приоритет C. Даже стандартные фоновые задания или системные задания, планируемые в календаре транзакции DB13.

Далее при создании фонового задания необходимо задать шаги задания (рис. 1: кнопка 3). Шагов может быть несколько. В качестве шага задания может выступать ABAP-программа, внешняя команда или внешняя программа. Если ABAP-программа имеет экран выбора, то предварительно необходимо создать вариант с заполненными полями экрана. Этот вариант экрана указывается вместе с ABAP-программой при планировании. Про внешние команды операционной системы у меня был отдельный пост.

После указания шагов задания необходимо зафиксировать условия запуска задания (рис. 1: кнопка 2). Выбор достаточно широкий (рис. 3).

Рис. 3. Условия запуска фонового задания.

Можно запустить задание сразу же после окончания процесса создания (кнопка "Немедл-но"). А можно задать точные дату и время запуска (кнопка "Дата/Время"). 

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

Также в качестве условия запуска задания можно указать время окончания другого фонового задания (кнопка "ПослеЗдн"). Таким образом, можно выстроить цепочку фоновых заданий, которые будут выполняться друг за другом. Причём, можно анализировать статус (указывается дополнительно), с которым выполнилось предыдущее задание. В этом случае последующее задание запустится лишь в том случае, если предыдущее выполнилось успешно (с кодом 0).

Кому и этого мало, то можно указать в качестве условия запуска - системное событие или смену режима работы системы (настройка в транзакции RZ04).

Ещё один нюанс в планировании заданий - можно создавать периодические задания, нажав на кнопку "Значения периодов" и выбрав нужный период (рис. 3).

Ну и последний нюанс при создании фонового задания. Просмотреть результаты работы фонового задания можно после его окончания через систему спула. Причем, если вы хотите чтобы другой пользователь системы получил вывод работы задания в свой запрос спула, то это можно отдельно указать (рис. 1: кнопка 4).


Создать фоновое задание можно так, как я только что описал, а можно вызвать Ассистента по заданиям (кнопка на панели начального экрана транзакции SM36) и пройти все шаги с его помощью.

Еще есть возможность запуска транзакции в фоновом режиме прямо из самой транзакции. Это можно сделать только в том случае, если на начальном экране транзакции есть пункт меню "Программа -> Фоновое выполнение" (рис. 4). Выбрав этот пункт, вы запланируете фоновое задание, в котором 
автоматически с текущей программой будет добавлен вариант экрана с уже введёнными значениями в полях.

Рис. 4. Пример фонового выполнения диалоговой программы.

На сегодня это всё. Продолжение можно прочитать тут.




13 апреля 2020 г.

Машинный перевод SAP notes и опрос на знание английского языка

Все знают что такое SAP notes. Кто не знает - может прочитать мои статьи про это.

Как вы знаете, SAP notes размещены на SAP Support Portal на двух языках - немецком и английском. Но недавно появилась новая возможность - перевод содержимого SAP note на ряд языков, включая наш родной, русский язык. Перевод правда машинный, то есть созданный программой.

Для доступа к этой возможности необходимо пролистать открытую в Web-браузере SAP note до конца и найти там раздел "Languages" (рис. 1).

Рис. Список доступных языков в SAP notes.

В этом разделе нажимаем на нужный язык и запускается (робот, ИИ, машинное обучение) (нужное подчеркнуть) (рис. 2), создавая нам перевод содержимого SAP note. :)

Рис. 2. Процесс перевода SAP note.

Перевод получается, на удивление, сносным. Я помню первые попытки написания систем автоматического перевода текстов в сети Интернет. Казалось их создавали в юмористических целях. Да и до сих пор, если вы совершаете, например, покупки на AliExpress.com, то можете наблюдать переведённые на русский язык ответы от продавцов или их комментарии. Смешно бывает чаще, чем верно. Наверное, "китайский - русский" слишком сложная пара языков для автоматического перевода. :)

Но вернёмся к SAP notes. Перевод сносный, но не более того. Не обращаясь к оригиналу, читать и применять не советую. :) 

Возьмём для примера SAP note 1763593 - Starting and stopping SAP system instances - startsap/stopsap are deprecated. Посмотрите на выделенные мною места (рис. 3).

Рис. 3. Пример машинного перевода SAP note.

Во-первых, программа пытается переводить команды и их опции. Во-вторых, как вам скрипт с названием "стартовала"? Не эта ли программа пишет тексты для русских героев в американских фильмах? :) В дальнейшем по ходу рассказа коверкается название скрипта stopsap. Причём, заметьте по разному. Такое ощущение, что программа переводит его на русский, а потом понимает, что не выходит, и возвращает на язык оригинала. Но так как было уже почему-то не получается. :)

В общем, скажу ещё раз, читать этот машинный перевод без сверки с оригиналом не рекомендую.

Для сравнения посмотрите, как переводит мой плагин для Web-браузера Google Chrome (рис. 4).

Рис. 4. Пример перевода SAP note через плагин Vimbox.

Совсем другое дело, согласитесь? Что не надо - не переводит, а перевод остального получается прям очень человеческим. Правда в названиях скриптов съедает букву "s" в словах sap, но это не критично.

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

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

А давайте проведем опрос. Отметьте на каком уровне вы владеет английским языком.

Спасибо всем за участие. Результаты опроса на рис. 5.

Рис. 5. Результаты опроса.

Большинство, кто участвовал в опросе, знают английский язык примерно на одном уровне - чтение технической литературы с разной степенью включения словаря. Без этого в любой IT-профессии никуда. Но надо стремиться к большему. От кого-то я слышал, что стыдно в XXI веке не знать английский язык. :)



8 апреля 2020 г.

Книга "Тайм-менеджмент для системных администраторов"


Продолжаю рассказ о книжной полке администратора SAP систем. 

Закончил чтение книги Томаса Лимончелли "Тайм-менеджмент для системных администраторов" и хочу поделиться своим мнением.

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

Книга небольшая, читается очень легко и быстро. Язык изложения простой, местами с юмором, есть даже комиксы. :) Не смотря на то, что книга написана в 2007 году, 80-90% советов актуальны и сейчас.

Автор рассказывает про то, как, не смотря на работу по реактивному принципу, когда мы обязаны реагировать на какие-то события и решать мелкие задачи, всё-таки уделять время крупным интересным проектам и при этом смочь максимально сосредоточиться на них. Делится своей собственной системой "Цикл", которая позволяет организовывать дела, планировать события и расставлять приоритеты. Дополнительно есть раздел про то, как избегать стрессов и вести документацию. Ну и, конечно же, про автоматизацию рутинных процессов. Всё это там можно найти.

Лично я для себя открыл несколько интересных моментов, которые обязательно постараюсь внедрить в свою жизнь и работу. 

Книгу настоятельно рекомендую как к прочтению, так и к добавлению в личную библиотеку. В сети книга ищется (и находится) легко. 

Книгу посоветовал Дмитрий Куликовский в своём рассказе о работе системного администратора Yandex. Если ещё не смотрели, то настоятельно рекомендую ознакомиться. 


Автор: Шиболов Вячеслав Анатольевич