Сердце Змеи - очень грустная история. Миры не совместимы, что логично, но автор передал это так, что действительно чувствуешь грусть. В отличие от Проект Аве Мария, где несовместимость двух миров спрятана за бравадой ученого-около-космонавта. Хотя в конце милота дружбы отчасти сохранена. В книге. А в фильме очень гиперболизирована.
У Снегова меня поразили и продолжают поражать две технические вещи. Первая - аннигиляторы пространства (кажется, придуманные раньше варп-двигателей из мира Стартрека). Вторая - необычная физика в окрестности центра Галактики, которой непонятно как, но весьма лихо управляли рамиры. Возможно, чуть притянуто, но снеговское описание находит параллели с современным пониманием физики в окрестности сильной гравитации черных дыр (романе этого термина нет).
"Эр-эс-а", "пэ-цэ-а", "пи-си-эй". Как это читается? Что это такое? Почему приведена аббревиатура, но нет ее расшифровки?
Хорошая и правильная практика любой статьи при использовании аббревиатур - раскрывать их при первом упоминании и далее использовать аббревиатуру. Исключение - общеизвестные сокращения.
Из 5 описанных ситуаций действительной проблемой является только третья с (( x++ )).
Остальные - особенности любого шелла или особенность баша, которая задокументирована. Но когда что-то работает не так как задумано, надо хоть чуть-чуть знать, что и где искать. Можно было бы сказать, что это проблема шелла, но это касается любого инструмента, даже питон, го и т.д..
1) конвейеры и циклы. Вообще не проблема - то специфика любого шелла
some_cmd | while ...
do
somevar=...
done
echo "$somevar"
Если переменная нужна по выходу из цикла, то лучше делать универсально (поддерживается большинством оболочек, включая posix shell):
while ...
do
somevar=...
done <!
$( some_cmd )
!
echo "$somevar"
Почему так? Потому что конструкуция < <( ... ) является башизмом и работает надежно только в bash. Но если очень хочется в баш, то можно порекомендовать herestring: ... <<<"$( some_cmd )".
А комбинация вида set -e ; risky_cmd || another_cmd работает именно так, как и задумал автор: если первая команда облажалась, то запустить вторую без падения в ошибку.
3) (( x++ ))
А это действительно глючная команда и ею лучше не пользоваться.
4) Trap не наследуется в subshell 5) Глобы без совпадений возвращают сами себя
Об это по началу спотыкаешься, пока внимательно не почитаешь мануал конкретно по trap, shopt, set.
Если мне не изменяет память shopt, set -E и trap ERR - это чистые башизмы, часть которых перетекли в другие оболочки.
Вроде бы, в английском есть generic you, который очень хорошо соответствует русскому "ты", который, как раз, тоже безликий, но более разговорный. Типа "и ты такой сидишь задумчивый".
Потом пропустить суровую нитку через отверстия туда-сюда, затянуть концы и связать (они будут торчать с одной стороны из двух соседних отверстий, поэтому проблем не будет)
Приклеить обложку
Другой вариант
Аккуратно снять обложку вместе с корешком
Закрепить книжный блок и сделать равномерно пропилы на глубину примерно 3-5 мм
Пропилы промазать клеем, суровую нитку нарезать по количеству пропилов, нарезку вкрутить в пропилы, натягивая нить с двух сторон, корешок зажать в пресс, смазать пропилы еще раз и дать подсохнуть
Отрезать излишки ниток, торчащих из пропилов
Приклеить обложку
Первый вариант крепче, но книгу будет не очень удобно читать (особенно толстую). Второй - чуть менее прочный, но вполне долговечный.
Второй вариант, кстати, упоминается в самом первом комментарии.
Озарения из прошлого, когда паскаль использовал: помню, что объявления переменных шли всегда вначале, отдельным блоком. Сейчас, наверно, уже можно смешивать в си-подобном стиле.
К сожалению у них ничего не получится. Уже давно очень, жарким летом 1972-го, один астрофизик из Ленинграда разрабатывал фундаментальное исследование структур звездных скоплений. Но сама вселенная воспротивилась его продвижению в работе. Пришлось остановиться.
Кстати - да. Стек и очередь - две структуры данных (точнее - типа данных), реализующих разный способ извлечения элементов. Правильнее было бы назвать массивами или списками.
Здесь в комментариях-описаниях неверно изложена логика. Начиная со строк 4 и 5 некорректно отражены действия и состояния стека.
# stack=()
<a> # push a; stack=(a)
<b> # push b; stack=(a b)
<c>meow</c> # push c; stack=(a b c)
<d>nya</d> # pop; push d; stack=(a b d)
</b> # pop; stack=(a b)
</a> # pop; stack=(a)
# pop; stack=()
Логичнее было бы так: каждому <tag> соответствует свой push tag , и каждому </tag> соответствует свой pop. Тогда состояние стека, выражаемое stack=(...), точно соотвествовало бы действиям.
# stack=()
<a> # push a; stack=(a)
<b> # push b; stack=(a b)
<c>meow</c> # push c; pop; stack=(a b c) stack=(a b)
<d>nya</d> # push d; pop; stack=(a b d) stack=(a b)
</b> # pop; stack=(a)
</a> # pop; stack=()
В одной из сцен на агента Илью Курякина нападают два робота. Они методично стреляют в него ракетами, а герой отбивается крышкой от мусорного бака. Для современного зрителя сцена может показаться комичной, но для своего времени это был серьезный экшн.
Да ладно! Самая что ни на есть современная сцена - только представьте на их месте каких-нибудь роботов-доставщиков.
радиус порядка 1—5 ферми, что составляет миллионные доли нанометра
Как сложно-то для читателя. "Милионная" это 6, "нано" - 9, потом сложить. Не проще было бы сказать сразу про 10^-15 м? Или сказать, что сравнимо с размерами атомных ядер, что составляет порядка 10^-15 м?
Сомнительно. Чем вам пара set -x/set +x не угодила? И название длинное.
xtrace() {
set -x
"$@"
set +x
}
Конечно же будет выводится лишняя отладочная строка + set +x. Но это мелочи. Зато можно так писать, а отладку включать/выключать комметированием первой строки:
xtrace \
какая-то команда с кучей --разных --ключей и разных параметров
По п5. Все верно. Редактируете /etc/apt/sources.list и /etc/apt/sources.list.d/* - пишете туда все, что вам требуется, а потом apt update ; apt dist-upgrade -y ; apt install все что надо для счастья . Или вендор рекомендует другой путь?
Получается на второй машине почему-то игнорируется обновление системы. И вообще в целом, обновление репозиториев выстроено нелогично. Лучше прописать все источники в sources.list и//или sources.list.d/, а потом выполнить обновления репо, системы и установку нужных пакетов.
Сердце Змеи - очень грустная история. Миры не совместимы, что логично, но автор передал это так, что действительно чувствуешь грусть. В отличие от Проект Аве Мария, где несовместимость двух миров спрятана за бравадой ученого-около-космонавта. Хотя в конце милота дружбы отчасти сохранена. В книге. А в фильме очень гиперболизирована.
У Снегова меня поразили и продолжают поражать две технические вещи. Первая - аннигиляторы пространства (кажется, придуманные раньше варп-двигателей из мира Стартрека). Вторая - необычная физика в окрестности центра Галактики, которой непонятно как, но весьма лихо управляли рамиры. Возможно, чуть притянуто, но снеговское описание находит параллели с современным пониманием физики в окрестности сильной гравитации черных дыр (романе этого термина нет).
"Эр-эс-а", "пэ-цэ-а", "пи-си-эй". Как это читается? Что это такое? Почему приведена аббревиатура, но нет ее расшифровки?
Хорошая и правильная практика любой статьи при использовании аббревиатур - раскрывать их при первом упоминании и далее использовать аббревиатуру. Исключение - общеизвестные сокращения.
Из 5 описанных ситуаций действительной проблемой является только третья с
(( x++ )).Остальные - особенности любого шелла или особенность баша, которая задокументирована. Но когда что-то работает не так как задумано, надо хоть чуть-чуть знать, что и где искать. Можно было бы сказать, что это проблема шелла, но это касается любого инструмента, даже питон, го и т.д..
1) конвейеры и циклы. Вообще не проблема - то специфика любого шелла
Если переменная нужна по выходу из цикла, то лучше делать универсально (поддерживается большинством оболочек, включая posix shell):
Почему так? Потому что конструкуция
< <( ... )является башизмом и работает надежно только в bash. Но если очень хочется в баш, то можно порекомендовать herestring:... <<<"$( some_cmd )".2) И снова не проблема.
set -eработает так потому, что так определено (см. https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#set)А комбинация вида
set -e ; risky_cmd || another_cmdработает именно так, как и задумал автор: если первая команда облажалась, то запустить вторую без падения в ошибку.3)
(( x++ ))А это действительно глючная команда и ею лучше не пользоваться.
4) Trap не наследуется в subshell
5) Глобы без совпадений возвращают сами себя
Об это по началу спотыкаешься, пока внимательно не почитаешь мануал конкретно по trap, shopt, set.
Если мне не изменяет память
shopt,set -Eиtrap ERR- это чистые башизмы, часть которых перетекли в другие оболочки.Вроде бы, в английском есть generic you, который очень хорошо соответствует русскому "ты", который, как раз, тоже безликий, но более разговорный. Типа "и ты такой сидишь задумчивый".
С самого начала статьи разброд в терминах. Первое верно, второе - лишено смысла.
Вот это красивше будет:
Но еще проще писать и читать в родных идиомах языка, например:
Интересно, как отработает следующая команда? И аналогичные ей.
Без шампуров аккуратнее будет )))
Первый вариант
Аккуратно снять обложку вместе с корешком
Просверлить, как у вас, но без обложки
Потом пропустить суровую нитку через отверстия туда-сюда, затянуть концы и связать (они будут торчать с одной стороны из двух соседних отверстий, поэтому проблем не будет)
Приклеить обложку
Другой вариант
Аккуратно снять обложку вместе с корешком
Закрепить книжный блок и сделать равномерно пропилы на глубину примерно 3-5 мм
Пропилы промазать клеем, суровую нитку нарезать по количеству пропилов, нарезку вкрутить в пропилы, натягивая нить с двух сторон, корешок зажать в пресс, смазать пропилы еще раз и дать подсохнуть
Отрезать излишки ниток, торчащих из пропилов
Приклеить обложку
Первый вариант крепче, но книгу будет не очень удобно читать (особенно толстую). Второй - чуть менее прочный, но вполне долговечный.
Второй вариант, кстати, упоминается в самом первом комментарии.
Озарения из прошлого, когда паскаль использовал: помню, что объявления переменных шли всегда вначале, отдельным блоком. Сейчас, наверно, уже можно смешивать в си-подобном стиле.
А у вас молоко убежало...
К сожалению у них ничего не получится. Уже давно очень, жарким летом 1972-го, один астрофизик из Ленинграда разрабатывал фундаментальное исследование структур звездных скоплений. Но сама вселенная воспротивилась его продвижению в работе. Пришлось остановиться.
Кстати - да. Стек и очередь - две структуры данных (точнее - типа данных), реализующих разный способ извлечения элементов. Правильнее было бы назвать массивами или списками.
Здесь в комментариях-описаниях неверно изложена логика. Начиная со строк 4 и 5 некорректно отражены действия и состояния стека.
Логичнее было бы так: каждому
<tag>соответствует свойpush tag, и каждому</tag>соответствует свойpop. Тогда состояние стека, выражаемоеstack=(...), точно соотвествовало бы действиям.Вас тоже тревожит тайна сего реквизита?
https://habr.com/ru/articles/187332/comments/#comment_6519116
Да ладно! Самая что ни на есть современная сцена - только представьте на их месте каких-нибудь роботов-доставщиков.
Как сложно-то для читателя. "Милионная" это 6, "нано" - 9, потом сложить. Не проще было бы сказать сразу про 10^-15 м? Или сказать, что сравнимо с размерами атомных ядер, что составляет порядка 10^-15 м?
Сомнительно. Чем вам пара
set -x/set +xне угодила? И название длинное.Конечно же будет выводится лишняя отладочная строка
+ set +x. Но это мелочи. Зато можно так писать, а отладку включать/выключать комметированием первой строки:Разве этот код не вылетает по переполнению стека?
По п5. Все верно. Редактируете
/etc/apt/sources.listи/etc/apt/sources.list.d/*- пишете туда все, что вам требуется, а потомapt update ; apt dist-upgrade -y ; apt install все что надо для счастья. Или вендор рекомендует другой путь?Несколько замечаний
1.
В первом листинге: коммент не соответствует действию
2.
Во втором листинге используется необъявленная переменная PC_NAME
3.
это можно упростить до
4.
Чтобы не мучиться с экранированием кавычек в кавычках, лучше вызвать
catв субшелле, например:5.
обновление ОС - первый скрипт
обновление ОС - второй скрипт
Получается на второй машине почему-то игнорируется обновление системы. И вообще в целом, обновление репозиториев выстроено нелогично. Лучше прописать все источники в sources.list и//или sources.list.d/, а потом выполнить обновления репо, системы и установку нужных пакетов.
Дальше уже читал по диагонали.