Andrey Stolyarov

Андрей Викторович Столяров: сайт автора

ПРОГРАММИРОВАНИЕ: ВВЕДЕНИЕ В ПРОФЕССИЮ

краудфандинговый проект

Программирование: введение в профессию. Издание второе, в трёх томах.

1st volume cover 2nd volume cover 3rd volume cover

Аннотация

Учебник «Программирование: введение в профессию» ориентирован на самостоятельное изучение и предполагает использование систем семейства Unix (в т.ч. Linux) в роли сквозной среды для обучения.

Публикация в бумажном варианте

Первое издание публиковалось издательством МАКС Пресс (Москва) с 2016 по 2020 г.

Второе издание опубликовано издательством МАКС Пресс в 2021 году.

  • ISBN 978-5-317-06573-7 (книга в целом)
  • ISBN 978-5-317-06574-4 (том I)
  • ISBN 978-5-317-06575-1 (том II)
  • ISBN 978-5-317-06576-8 (том III)

Электронная версия

Электронные версии каждого из трёх томов, идентичные печатному изданию, доступны по следующим адресам:

Статус бумажной версии

Тираж распродан.

Архив примеров программ

Архив, содержащий примеры программ, можно скачать здесь: progintro_e2_examples.tgz. Напоминаем, что раскрыть этот архив можно командой
   tar -xzf progintro_e2_examples.tgz

Файл stud_io.inc, используемый в начальных примерах третьей («ассемблерной») части, можно взять здесь: http://www.stolyarov.info/books/extra/stud_io_inc. Не забудьте переименовать файл! Это делается так:

  mv stud_io_inc stud_io.inc

Errata

Список найденных в тексте ошибок и опечаток находится здесь.

From Павел Савкин (panchous) (unverified) Tue Oct 29 14:46:32 2024 UTC pencil

Том 2, стр. 316

Здравствуйте! Чувствую, что разобрался я поверхностно и нарываюсь на критику, но попробую рискнуть... Вы указываете, что если umask установлен 022, то для создаваемых файлов права на запись для всех, кроме владельца, сбрасываются (666 минус 022 равно 644). Тут всё верно. А вот что "возможность читать и ВЫПОЛНЯТЬ предоставляется всем желающим", вот тут я не пойму, вроде 644 это rw-r--r--, а не rwx-r-x-r-x? Конечно, если рассмотреть пример, что мы вычитаем из 777 022, то да, но вроде по-умолчанию в linux umask вычитается из 666? p.s. отправляю дрожащей рукой с чувством предстоящего бана =)

parent From Andrey V. Stolyarov profile Tue Oct 29 14:57:47 2024 UTC pencil

userpic

Re: Том 2, стр. 316

Ну да, бан уже близок.

umask вычитается не из 666, а из того, что указано в вызове open (или creat, или mkdir, или где там ещё есть этот параметр). В книге это написано. А индивидуальные консультации я предоставляю только в рамках менторинга.

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

From Савкин Павел (panchous) (unverified) Mon Oct 21 12:58:08 2024 UTC pencil

Том 2, стр. 333

Если убрать #include sys/types.h ничего не изменится, возможно этот заголовочный файл не нужен?

parent From Andrey V. Stolyarov profile Mon Oct 21 13:56:20 2024 UTC pencil

userpic

Re: Том 2, стр. 333

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

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

From Павел Савкин (panchous) (unverified) Thu Oct 10 15:00:02 2024 UTC pencil

Том 2, стр. 249

#include curses.h заменить на ncurses.h? (хотя работает и так и так, но вдруг опечатка)

parent From Andrey V. Stolyarov profile Thu Oct 10 15:40:00 2024 UTC pencil

userpic

Re: Том 2, стр. 249

Спасибо, на этот момент мне действительно стоило обратить внимание. Как я сейчас посмотрел, в тексте используется то одно, то другое. В целом это действительно не ошибка, поскольку работают оба имени, но заменять-то, наверное, надо наоборот ncurses на curses, это более универсально. В общем внёс этот момент в TODO, к третьему изданию что-то с этим сделаю.

parent From Павел Савкин (panchous) (unverified) Sun Oct 13 10:22:50 2024 UTC pencil

Re: Re: Том 2, стр. 249

Возможно только у меня такая проблема (уже на двух системах Ubuntu и Astra Linux): при компиляции $ gcc -Wall -g main.c -o main -lcurses выдается ошибка: fatal error: curses.h: No such file or directory. Проблема решается установкой libncurses5-dev.

parent From Andrey V. Stolyarov profile Sun Oct 13 11:21:02 2024 UTC pencil

userpic

Re: Том 2, стр. 249

Ага, прекрасно — попытался писать с использованием ncurses, только без ncurses, что-то как-то не очень получилось, пришлось поставить ncurses.

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

From panch0us (unverified) Wed Sep 25 09:43:33 2024 UTC pencil

про scanf (том 2, стр. 117).

Здравствуйте! Вы написали, что по мнению многих программистов применять scanf в полноценных программах не стоит. Если есть возможность - расскажите, пожалуйста, а как лучше делать, есть нужно получить форматированый ввод из стандартного потока ввода?

parent From Andrey V. Stolyarov profile Wed Sep 25 09:56:45 2024 UTC pencil

userpic

Re: про scanf (том 2, стр. 117).

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

From Владимир (unverified) Mon Sep 16 20:09:29 2024 UTC pencil

Третье издание

Здравствуйте. Когда планируется выход третьего издания?

parent From Andrey V. Stolyarov profile Mon Sep 16 20:41:16 2024 UTC pencil

userpic

Re: Третье издание

Надеюсь ближе к новому году сделать, но не гарантирую. К сожалению, оно будет чисто электронное.

From Вася (unverified) Tue Aug 27 09:52:17 2024 UTC pencil

Том 1 ДМК Пресс, п. 2.8.4 - 2.8.5

Я новичок, и строчка write(#27'[Om') в примере в п 2.8.5 на с.356, где экран случайным образом заполняется звездочками, меня изрядно смутила. У меня бумажная книжка от ДМК Пресс, и там ничего про нее не сказано - во всем тексте параграфа 2.8.

Догадался полезть в издание макс пресс, и там в том же самом месте значение оператора объяснено. Оказывается, в издании от ДМК используется способ восстановления настроек терминала с помощью TextAttr (п.2.8.4, с.351), а в макспрессе объясняется (п. 2.8.4, с.378), и в тексте примеров для этого всюду используется эта крякозябля.

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

parent From Andrey V. Stolyarov profile Tue Aug 27 11:52:35 2024 UTC pencil

userpic

Re: Том 1 ДМК Пресс, п. 2.8.4 - 2.8.5

Действительно так, это рудимент, в версии от ДМК уже предлагается (в тексте) использовать другой способ восстановления терминала, но вроде бы в одном из примеров (или в двух?) я забыл это поменять.

В третьем издании всё будет единообразно.

From panchous (unverified) Tue Aug 13 20:11:25 2024 UTC pencil

Том 2, стр. 123

Заранее прошу прощение за, возможно, глупый вопрос: в файле fgetcputc.c не нужно выполнить закрытие файлов?

parent From Andrey V. Stolyarov profile Tue Aug 13 20:31:01 2024 UTC pencil

userpic

Re: Том 2, стр. 123

В рукописи и в файле примера эти два fclose уже добавлены. Если же по существу вопроса, то непосредственно перед завершением программы файл, который открыт на чтение, можно закрывать разве что "для красоты", это тупо лишний системный вызов; но вот файл, открытый на запись, с учётом буферизации, не закрывать — это совсем некрасиво. Ну то есть libc справится, конечно, exit со всеми его хуками никто не отменял, но лучше на них не закладываться.

Собственно, поэтому я туда и согласился эти два fclose вставить; вставлять только один было бы как-то совсем странно.

From panchous (unverified) Sat Aug 10 08:42:38 2024 UTC pencil

Том 2, стр. 76

В последней строке отсутствует фигурная скобка для обозначения начала тела функции.

parent From Andrey V. Stolyarov profile Sat Aug 10 09:52:32 2024 UTC pencil

userpic

Re: Том 2, стр. 76

Как это отсутствует? Очень даже присутствует.

parent From panchous (unverified) Sat Aug 10 20:11:15 2024 UTC pencil

Re: Re: Том 2, стр. 76

Прошу прощения, это я не заметил, как моя электронная книга съела фигурную скобку...

From Тимур (unverified) Wed Aug 7 13:17:09 2024 UTC pencil

*

Здравствуйте, уважаемый Андрей Викторович. Хочу поблагодарить вас за столь ценный труд и вклад, как по мне, это невероятное достижение в современных реалиях преподнести интересующимся людям такое, да еще и бесплатно! Давно искал подобный материал без псевдонаучного изложения (сам я никак пока не связан напрямую с программированием, но очень к этому стремлюсь и ваши книги помогают эту мотивацию сохранить и развить). Хочу задать вопрос, как человеку, мнение которого могу считать авторитетным и компетентным (не знаю, уместно ли его тут задавать). Могли бы вы посоветовать какую-либо литературу помимо ваших трудов, которая одновременно могла бы быть полезна для всех программистов и при этом вы и сами доверяли авторам этих книг? P.S. при прочтении ваших книг возникает ощущение пробелов в собственных знаниях, в той же математике. Понятно, что некоторые примеры приводятся в ознакомительных целях и пр., но все же есть интерес и необходимость разобраться в вопросе глубже.

parent From Andrey V. Stolyarov profile Wed Aug 7 15:09:02 2024 UTC pencil

userpic

Увы

Ага, стал бы я три тома такой толщины писать сам, если бы было что порекомендовать.

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

From Алексей (unverified) Mon Aug 5 09:59:36 2024 UTC pencil

Том 1, стр. 216, рис. 1.14

Опечатка. Символ с кодом 39 это не вопросительный знак (?), а одинарная кавычка (').

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

parent From Andrey V. Stolyarov profile Mon Aug 5 10:12:21 2024 UTC pencil

userpic

Re: Том 1, стр. 216, рис. 1.14

А ведь факт. Интересно, как мне это удалось, учитывая, что таблицу я тупо содрал из man ascii.

А вот по поводу словоформы одинарный — см. сюда :-) Не будем уподобляться полуграмотным писарям XIX века.

From asb (unverified) Sat Aug 3 17:00:17 2024 UTC pencil

забавный факт

При присваивании в условии тернарного оператора не выдает предупреждения ни gcc (с -Wall), ни clang.

parent From Andrey V. Stolyarov profile Sat Aug 3 17:15:34 2024 UTC pencil

userpic

Re: забавный факт

Это вполне логично. У присваивания ниже приоритет, чем у тернарной операции, так что, чтобы его использовать в условии, в скобки его взять придётся по-любому. Сравнение (двойное равенство) в той же ситуации брать в скобки не требуется. Соответственно сам факт наличия скобок убеждает компилятор, что программист знает, что делает.

From panch0us (unverified) Wed Jul 31 14:20:50 2024 UTC pencil

Том 1, стр. 666

“Все три сообщения об ошибках" заменить на "Все сообщения", так как в приведенном примере два сообщения об ошибках, а одно информативное.

parent From Andrey V. Stolyarov profile Thu Aug 1 10:42:25 2024 UTC pencil

userpic

Re: Том 1, стр. 666

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

From Anonymous (unverified) Mon Jul 22 11:41:05 2024 UTC pencil

Непонимание кнопок в графических интерфейсах

В томе 3 на странице 264 во 2 абзаце нашел интересное предложение, приведу его часть:

"Между прочим, автор лично видел людей, не понимающих, что "кнопка" на экране на самом деле вовсе не кнопка, что она нарисована..."

Можете, пожалуйста, подробнее раскрыть этот момент? Не очень понимаю, как можно не догадываться, что кнопка на экране нарисована. Люди, которых вы упоминаете, думали, что кнопка, например, прирастает к экрану, и при смене интерфейса надо менять весь экран?

parent From Andrey V. Stolyarov profile Mon Jul 22 13:35:02 2024 UTC pencil

userpic

Re: Непонимание кнопок в графических интерфейсах

Я что, телепат по-вашему? Понятия не имею, что у этого имбецила реально в голове творилось, но когда человек не верит тому, что ему говорят -- это видно по глазам, особенно когда и скрывать не пытаются.

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

From panchous (unverified) Thu Jul 18 10:47:08 2024 UTC pencil

Второе издание, том 1, 3.3.6

Наверно моё предложение странное, но, возможно, вместо "мы изобразили верхний край стека как нечто нечёткое", использовать "я изобразил..."?

parent From Andrey V. Stolyarov profile Thu Jul 18 10:54:11 2024 UTC pencil

userpic

Re: Второе издание, том 1, 3.3.6

Такое в книге встречается, подозреваю, несколько сотен раз, так что переделывать это даже чисто технически было бы сложно. Это раз. А два — повторяю в миллионный раз: я не принимаю никакие советы по содержанию книги, только сообщения о явных ошибках.

From Никита (unverified) Wed Jul 10 09:44:31 2024 UTC pencil

Второе издание, том 1, 3.2.5

"Процессор i386 позволяет для косвенной адресации использовать только значения, хранимые в регистрах". Использование операнда типа "память"; через метку: mov ebx, [count] не является косвенной адресацией?

parent From Andrey V. Stolyarov profile Wed Jul 10 13:28:16 2024 UTC pencil

userpic

Re: Второе издание, том 1, 3.2.5

Разумеется, не является. Самая что ни на есть прямая адресация, адрес указан в явном виде в команде. Суть косвенной адресации в том, что адрес хранится где-то ещё (для i386 это только регистры, но бывали в истории и такие процессоры, которые могли сам адрес взять откуда-то из памяти) и, соответственно, вычисляется во время работы программы, тогда как во время её написания, компиляции и сборки адрес неизвестен.

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

From asb (unverified) Mon Jun 24 13:19:54 2024 UTC pencil

while((c = getchar()) != EOF)

В &4.4.1 Вы рассказываете о двух вариантах написания цикла с getchar и отмечаете, что оба имеют недостатки - дублирование кода в первом и побочный эффект в заголовке во втором.

Чуть позже, в &4.8.3 Вы отмечаете, что в идеале должна быть отдельная конструкция для таких циклов - выборка, проверка условия, тело цикла.

А если переписать через бесконечный цикл? Навеяно виртовским отдельным оператором для бесконечных циклов loop-exit-end из Модулы/Оберона, который используется в примерах именно в таком варианте (выборка, условие, обработка).

for(;;){
    c = getchar();
    if (c == EOF) then
        break;
    /* do something */
} 

Тоже криво (бесконечный цикл с брейком), но нет ни дублирования кода, ни побочного эффекта в заголовке цикла. Что скажете?

parent From Andrey V. Stolyarov profile Mon Jun 24 14:16:59 2024 UTC pencil

userpic

Re: while((c = getchar()) != EOF)

См. в третьем томе параграф 9.3.2, там этот вариант разобран. Понять бы ещё, почему этот вариант людям покоя не даёт.

From Andrey (unverified) Mon May 13 15:49:01 2024 UTC pencil

Количество страниц в книках

Так специально получилось, что все 3 книги по 707 страниц?

parent From Andrey V. Stolyarov profile Mon May 13 17:40:07 2024 UTC pencil

From Андрей (unverified) Tue Apr 9 23:10:04 2024 UTC pencil

CMS на NASM

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

Но есть пару моментов, к которым я не понимаю, как подступиться:

1). По поводу архитектуры. Идея такая: запущена серверная программа со слушающим сокетом. Как только приходит запрос, она порождает процесс и отдаёт в работу запрос ему, а сама возвращается к слушанию сокета. Дочерний процесс делает все проверки, обработки и отправляет необходимый ответ, после чего закрывает соединение и завершается. Это так работает в общих чертах?

2). Библиотеки и модули. Я понимаю, что надо будет написать свои библиотеки для работы. Правильно ли я понимаю, что я создаю библиотеки по общему принципу (работа со строками, работа с памятью, работа с файлами и т.д.), каждый файл *.asm будет содержать в себе одну подпрограмму, потом всё это компилируется, и все получившиеся объектные модули одного типа я собираю в библиотеку? Или в одном файлике *.asm может быть больше одной подпрограммы? Как будет правильнее?

3). Имеет ли смысл некотрые константы вынести в сегмент кода? Вы писали в книгах, что сегмент кода неизменен, он копируется в оперативную память один раз и используется для всех порождённых процессов. Будет ли эффективнее, например, вынести туда номера системных вызовов, просто сделав условную компиляцию для linux и freebsd? Тогда можно в качестве аргументов подпрограмме давать sys_read, sys_brk. Так и понятнее код будет, и в порождённых процессах не будет копироваться лишняя информация в сегмент данных.

4). Хочу сделать всё максимально UNIX'овым, по философии. Есть такое соглашение, что каждая программа должна делать что-то одно и делать это хорошо, и программы должны взаимодейстовать друг с другом, используя принцип конвейера. Насколько крупными могут быть эти программы? Надо ли дробить функционал на множество мелких программ, перенаправляя на них потоки ввода/вывода? Я так понимаю, что надо будет сперва создать текстовый интерфейс для взаимодействия с CMS с помощью терминала, а потом уже прикручивать окошки. Как не усложнить это всё, ведь CMS пишется для какого-то пользователя, который не всегда хорошо подкован? Если сделать линейку конвейров, не запутается ли потом конечный пользователь в комбинациях?

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

parent From Andrey V. Stolyarov profile Wed Apr 10 23:01:32 2024 UTC pencil

userpic

Re: CMS на NASM

Про то, как работают сокеты, см. второй том Введения в профессию, часть 6. Вот только CMS не работают с сокетами. Никогда.

Про то, как работать с ассемблером — см. первый том, часть 3. Отвечать на частные вопросы я не буду, это я делаю только в рамках менторинга, но вариант писать на асме CMSку в рамках менторинга полностью исключён (впрочем, всё равно мест нет).

Ну и последнее: если у вас рука поднялась написать что-то про "окошки" в применении к CMS, то вы вообще не понимаете, куда попали.

From Василий Ильич (unverified) Wed Mar 6 20:50:54 2024 UTC pencil

IOResult

ДМК Пресс. На странице 359 указано, что IOResult -- переменная, из-за чего я не понимал, почему следующий код выводил в стандартный поток 0:

Var
	TextFile : Text;
Begin
	{$I-}
	Assign(TextFile, 'Filename'); {File with name 'Filename' doesn't exist}
	Reset(TextFile);
	If IOResult <> 0 then
		WriteLn(IOResult);
End.

В остальных местах правильно указано, что это функция. :)

parent From Andrey V. Stolyarov profile Wed Jul 31 12:58:32 2024 UTC pencil

userpic

Re: IOResult

Да, факт. Спасибо.

From Anonymous (unverified) Tue Jan 16 17:17:10 2024 UTC pencil

Вычисление выражений

Андрей Викторович, здравствуйте!

Какое-то время назад поставил себе задачу при работе с LaTeX, сделать "вычислитель выражений", т.к. во время написания курсовых бывает очень много выражений в духе:

R = \frac{1.2\cdot1.0}{1}
	(0.39\cdot1\cdot4.061[\ru{м}]\cdot2.14[\ru{т/м}^3]+
	2.57\cdot11.5[\ru{м}]\cdot2.14[\ru{т/м}^3]+
	5.15\cdot4.0[\ru{т/м}^2]) = ???

Единственное, что я в итоге сделал, это простейший преобразователь на Паскале, который превращал выражение из TeX-нотации во что-то понятное для уже существующих калькуляторов. Но вот как подступиться к вычислению самого выражения... Полнейший ветер в голове. Иногда возвращаюсь к этой задаче, но каждый раз не знаю как подступиться. Паскаль и даже ассемблер (п. 3.4.5) умеют это делать при компиляции! Но как?.. Подскажите, пожалуйста, как к этой задаче поступиться! Уже не знаю, это нетривиальная задача или я глупенький?

P.s. я знаю, что во всяких скриптовых языках есть что-то в духе:

execute(StringExpression);

Что выполнит код в содержащейся строке, но: а) это не даёт понимания КАК оно вычисляет выражения. б) ну, как-то неспортивно. :)

parent From Andrey V. Stolyarov profile Tue Jan 16 17:29:14 2024 UTC pencil

userpic

Re: Вычисление выражений

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

parent From Anonymous (unverified) Wed Jun 19 09:54:54 2024 UTC pencil

Re: Вычисление выражений

Про алгоритм Дейкстры не читал но осуждаю. На самом деле читал, но давно и не помню.

Но в юниксовой утилите bc использовался движок dc ранее. В версии GNU они правда уже независимы, хотя и на базе одной и той же библиотеки.

В общем, проще всего сделать вычислитель выражений для обратной польской записи, чем пользуются в таких замечательных языках программирования, как, например Forth, ну и в том же dc, старых калькуляторах от HP и так далее. Там всего-то нужен стек.

Не знаю, облегчит ли как-то предварительное преобразование в ОПЗ задачу или нет, но в любом случае я полагаю, что можно использовать не-хвостовую рекурсию.

Например, видим открывающую скобку — вызываем ту же функцию, которой передаётся указатель на начало выражения за скобкой, видим закрывающую скобку - возвращаем вычисленное значение.

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

Не знаю, совпадает ли моя идея с алгоритмом Дейкстры или нет.

parent From Andrey V. Stolyarov profile Wed Jun 19 13:03:49 2024 UTC pencil

userpic

Re: Вычисление выражений

Алгоритм Дейкстры как раз и есть алгоритм перевода арифметического выражения из традиционной инфиксной нотации в RPN (кстати, аббревиатуру ОПЗ вижу впервые, как-то привычнее выглядит ПОЛИЗ — "польская инверсная запись"). С вашим он не совпадает хотя бы в том, что в нём не применяется рекурсия, а у вас тут получилось скорее на рекурсивный спуск похоже.

Мне, честно говоря, другое интересно: вот какова мотивация людей, оставляющих такие комментарии? Это чтобы что?

parent From Anonymous (unverified) Wed Jun 19 22:20:41 2024 UTC pencil

Re: Re: Вычисление выражений

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

А вот как преобразовать выражение в RPN что-то я так и не придумал сходу. Разве что то ли возникла, то ли вспомнилась идея сформировать структуру-дерево.

parent From Andrey V. Stolyarov profile Thu Jun 20 08:59:36 2024 UTC pencil

userpic

Re: Вычисление выражений

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

From anonymous (unverified) Fri Jan 12 21:27:15 2024 UTC pencil

Программы на Ассемблере

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

parent From Andrey V. Stolyarov profile Fri Jan 12 22:11:18 2024 UTC pencil

userpic

Re: Программы на Ассемблере

См. задачник, раздел 3.

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

А ещё слово "ассемблер" — нарицательное, писать его с большой буквы — грубая ошибка.

parent From Anonymous (unverified) Sat Jan 13 23:26:20 2024 UTC pencil

Re: Re: Программы на Ассемблере

А что делать если после Паскаля уже не хочется переходить на Си? :_)

parent From Andrey V. Stolyarov profile Sun Jan 14 01:22:50 2024 UTC pencil

userpic

Re: Программы на Ассемблере

А зачем что-то делать?

parent From Anonymous (unverified) Wed Jan 24 06:31:39 2024 UTC pencil

Re: Re: Программы на Ассемблере

Если это философский вопрос: не отвечу. :)

А если не философски, на моём текущем этапе вижу следующие проблемы:

1. Как показывается ваша история SeekEoF, непонятно что творят мейнтейнеры.

2. Не работает флаг -v. Чтобы скомпилировать что-то на предыдущей версии компилятора, нужно лезть в интернет и искать старый релиз. Полгода назад хотел проверить кое-что с релизом 3.2.0, пошёл качать с официального сайта, а там раздел со старыми релизами не работает, пришлось искать на других сайтах. (Самое смешное, что я прямо сейчас проверил. Он или до сих пор не работает или опять не работает. :) )

3. С точки зрения дальнейшего трудоустройства вариантов немного куда пойти. Хотя вот Delphi до сих пор жив. Буквально вчера в университете была лекция про GIS, нам показали несколько сайтов, на одном из них были размещены вакансии. Я полистал вакансии и как-то удивительно много нужно Delphi программистов.

parent From Andrey V. Stolyarov profile Wed Jan 24 09:45:57 2024 UTC pencil

userpic

Re: Программы на Ассемблере

Писать всю жизнь под форточки — так себе идейка.

А что на FreePascal в его нынешнем состоянии невозможно всерьёз полагаться — ну да, это довольно очевидно.

parent From Anonymous (unverified) Thu Jan 25 17:03:50 2024 UTC pencil

Re: Re: Программы на Ассемблере

>>Писать всю жизнь под форточки — так себе идейка.

Вы тут имеете ввиду Delphi? У меня есть 3-4 книги конца 90-ых, начала 00-ых, они про то как окошки в форточках рисовать. А так, если смотреть вакансии, обычно к Delphi требуют опыт работы с Linux.

parent From Andrey V. Stolyarov profile Thu Jan 25 17:19:16 2024 UTC pencil

userpic

Re: Программы на Ассемблере

> обычно к Delphi требуют опыт работы с Linux

Крайне странно — я не вполне понимаю, что между ними общего.

From Anonymous (unverified) Wed Dec 20 19:26:36 2023 UTC pencil

Идея по оптимизации работы в терминале: Паскаль или Bash?

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

Мне часто приходится взаимодействовать с консольными программами, которые получают информацию из переменных окружения – это может быть путь к конфигу для программы или различные ключи и параметры. Я часто сталкиваюсь с ситуацией, когда у меня есть несколько окружений, и мне приходится переключаться между ними. Однако не всегда удобно искать параметры для конкретного окружения или вводить путь к конфигурационному файлу заново. Использование нескольких конфигурационных файлов с командой source в Bash также не всегда оказывается удобным.

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

parent From Andrey V. Stolyarov profile Wed Dec 20 19:50:34 2023 UTC pencil

userpic

Re: Идея по оптимизации работы в терминале: Паскаль или Bash?

Зависит от ваших приоритетов. Понятно, что такое на Воurne Shell пишется без особых проблем, этот язык специально под такие задачи заточен. В пользу Паскаля в данном случае можно высказать два соображения: во-первых, это может быть полезнее в качестве учебного этюда, а во-вторых, может просто процесс написания оказаться приятнее :-)

parent From Anonymous (unverified) Thu Dec 21 20:59:25 2023 UTC pencil

Re: Re: Идея по оптимизации работы в терминале: Паскаль или Bash?

Единственный метод установки переменных окружения в языке Pascal, который мне удалось обнаружить, - это использование функции setEnv из модуля libc. Однако мне кажется, что это не самый оптимальный способ реализации.

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

Буду благодарен за помощь или подсказки по этому вопросу.

parent From Andrey V. Stolyarov profile Thu Dec 21 22:27:32 2023 UTC pencil

userpic

Re: Идея по оптимизации работы в терминале: Паскаль или Bash?

У-ууууу, ну тут у вас явно проблемы. Откуда вы вообще взяли информацию о getenv и зачем вы его пишете смешанным регистром? Си, в отличие от Паскаля, к регистру чувствителен, как, кстати, и bash, так что в большинстве источников getenv будет написан на нижнем регистре.

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

Как до всего этого добраться — ну, оно на момент старта программы всё целиком лежит в стеке, там сначала указатели на параметры командной строки, потом в каком-то виде указатели на окружение, а потом (там же, в стеке) собственно параметры командной строки (надо же вышеупомянутым указателям куда-то указывать) и, наконец, содержимое окружения. Надо сказать, что внесение изменений в ЭТО потребует какой-то работы с динамической памятью (ибо в стеке новая версия может просто не поместиться), для этюдов на асме это уже, я бы сказал, малость перебор.

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

Видимо, тот случай, когда проще будет на bash'е сделать. Си вам изучать, полагаю, рано.

parent From Anonymous (unverified) Fri Dec 22 06:29:42 2023 UTC pencil

Re: Re: Идея по оптимизации работы в терминале: Паскаль или Bash?

> Откуда вы вообще взяли информацию о getenv

https://www.freepascal.org/daily/packages/libc/libc/setenv.html

Понял, благодарю за пояснения. Видимо, придется оставить написание этой программы до изучения Си.

From Alejandro profile Fri Dec 8 18:58:47 2023 UTC pencil

Пустые строки

На этой странице в дисклеймере для тех, кто "ищет второй том", не хватает пустой строки :)

PS: Надеюсь, это единственный такой момент на сайте...

parent From Andrey V. Stolyarov profile Fri Dec 8 21:28:26 2023 UTC pencil

userpic

Re: Пустые строки

Искал, не нашёл. Ну то есть там много где можно абзац разорвать, но где конкретно это предлагаете сделать вы?

parent From Alejandro profile Sat Dec 9 12:18:25 2023 UTC pencil

Re: Re: Пустые строки

Я имею ввиду это

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

parent From Andrey V. Stolyarov profile Sat Dec 9 17:20:22 2023 UTC pencil

userpic

Re: Пустые строки

Э-мммм, да, согласен :-) Спасибо.

Там проблема в том, что я в какой-то момент включил blockquote в список тегов, внутри которых пустые строки (и опционально переводы строк, зависит от заданного формата) ни во что не превращаются, а открытые (автоматически) абзацы перед ним закрываются. Так же, например, как внутри <p>, <ul> и всякое прочее такое. На принудительное закрытие абзцев и запрет абзацев внутри список сейчас один.

Короче, ща поправлю :)

From Ivan (unverified) Fri Dec 1 14:58:37 2023 UTC pencil

Ссылки как семантический феномен

Здраствуйте. В части по Си++ вы указали такую особенность, что идентификатор например типа int, МОЖНО рассматривать как int&. Я попробовал тернарный условный оператор в качестве lvalue для обычных идентификаторов и все сработало. Так вот напрашивается два предположения: обычные идентификаторы не просто МОЖНО рассматривать как ссылки, они ими и являются; либо же это просто особенность операции, она возвращает ссылку. Вопрос в том существует ли разница между обычными идентификаторами и ссылками? Ведь если это две разные сущности, как МОЖНО одну рассматривать как эквивалент другой... Не совсем понимаю где граница между этими понятиями( Спасибо вам большое за ваш труд)

parent From Andrey V. Stolyarov profile Fri Dec 1 15:26:14 2023 UTC pencil

userpic

Re: Ссылки как семантический феномен

Ну, если уж лезть в такие терминологические дебри, то, пардон, что такое "идентификатор типа int"?! Имя переменной типа int — ну, это понятно что такое, и, видимо, вы это и имели в виду, но ваше вот это "идентификатор типа int", чтоб было понятно, это же и enum'овые элементы могут быть, и даже имя макроса, который превращается в целочисленный литерал, например.

А вот являются ли обычные переменные ссылками — тут, извините, ответ однозначный: конечно нет. Ссылка реализуется как отдельная область памяти, где содержится адрес. Когда вы описываете обычную переменную типа int, ничего подобного не возникает.

Так что речь тут может идти только вот именно что о семантической эквивалентности.

parent From Ivan (unverified) Fri Dec 1 15:52:26 2023 UTC pencil

Re: Re: Ссылки как семантический феномен

Спасибо за ответ У меня есть еще один вопрос. Как тернарная условная операция сработала для обычных переменных в качестве lvalue? То есть она в таком случае возвращает переменную и это уже никак не относится к ссылкам, а скорее к реализации этой операции в Си++?

parent From Andrey V. Stolyarov profile Fri Dec 1 16:01:23 2023 UTC pencil

userpic

Re: Ссылки как семантический феномен

Как можно "вернуть переменную"? Ни в C++, ни в чистом Си не существует такого типа выражения, как "переменная". Разумеется, результатом тернарной операции в данном случае становится ссылка.

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

  int damn_global_var;

Теперь берём и пишем вот такую функцию:

  int &function_that_returns_reference()
  {
      return damn_global_var;
  }

Теперь можно сделать, например, что-нибудь вроде function_that_returns_reference() = 25;, и это занесёт число 25 в переменную damn_global_var. В операторе return здесь фигурирует леводопустимое выражение, самый простой вариант такового — тупо имя переменной. А возвращается, как и написано в заголовке функции, ссылка. То есть семантический синоним этой переменной.

В машинном коде мы, впрочем, увидим занесение адреса переменной в аккумулятор (EAX или RAX в зависимости от платформы).

parent From Ivan (unverified) Sat Dec 2 08:45:47 2023 UTC pencil

Re: Re: Ссылки как семантический феномен

Это я как раз понимаю. Просто я не совсем понял связь между операцией которая по факту возвращает ссылку (в этом случае понятно почему оно lvalue) и тем что какие-то выражения которые были в Си lvalue в Си++ можно воспринимать как ссылки. То есть получается, что это фактически особенность операции, а не точки зрения которую вы предлагаете. Я извиняюсь за такую предирчивость) Просто выходит, что есть операции которые в Си не были lvalue, а в Си++ ими являются и что это не просто особенность восприятия, а фактическое отличие языков на уровне реализации.

parent From Andrey V. Stolyarov profile Sat Dec 2 12:55:10 2023 UTC pencil

userpic

Re: Re: Re: Ссылки как семантический феномен

> это фактически особенность операции

Нет. С return'ом происходит абсолютно то же самое явление, так что оно обусловлено не свойствами тернарной операции (и не свойствами return), а свойствами ссылочного типа.

> фактическое отличие языков на уровне реализации.

Ну это вообще-то очевидно: в чистом Си ссылок вообще нет, как у этих двух языков может быть одинаковая реализация?

parent From Ivan (unverified) Sat Dec 2 14:02:31 2023 UTC pencil

Re: Re: Re: Re: Ссылки как семантический феномен

Очевидно, что реализация разная. Спасибо вам большое за обратную связь) Очень хорошо, что есть возможность задавать вам вопросы)

From rebus_x (unverified) Fri Dec 1 14:37:17 2023 UTC pencil

Адрес сети в IPv4

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

Поэтому я стал искать, а почему рекомендуют не использовать первый адрес, и для чего его резервируют - по аналогии с широковещанием на последнем, - и не нашёл внятных ответов. По тому, что есть, предполагаю что ответ таков - «потому что разные системы и сетевое ПО могут реагировать на него по-своему», то есть в силу разных исторических причин его советуют не трогать от греха подальше.

Вам об этом что-нибудь известно? Мне ответ интересен чисто для понимания.

parent From Andrey V. Stolyarov profile Fri Dec 1 15:03:09 2023 UTC pencil

userpic

Re: Адрес сети в IPv4

Честно? А фиг его поймёт. Например, до сих пор существуют сети, использующие реальные адреса на соединениях "точка-точка" (хотя там можно вообще без адресов, можно применять интранетные, можно много чего, но уж точно не реальные, которые на вес золота), причём на каждое такое соединение расходуется "подсетка" /30, т.е. четыре адреса (два из которых, как мы понимаем, вообще никак не задействованы).

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

From Anonymous (unverified) Sat Oct 21 08:54:13 2023 UTC pencil

Функции или процедуры?

Здравствуйте, Андрей Викторович!

Во втором издании от МАКС Пресс нашел следующую опечатку (т.1, стр. 387, первый абзац):

Точно так же применяются знакомые на функции eof и SeekEof (...): при работе с файлами эти процедуры ...

Так все-таки функции или процедуры?

parent From Andrey V. Stolyarov profile Wed Jul 31 20:27:56 2024 UTC pencil

userpic

Re: Функции или процедуры?

Факт, конечно функции. Спасибо.

From Anonymous (unverified) Sun Oct 15 01:56:17 2023 UTC pencil

Ошибочка?

Здравствуйте! На 531 странице 1 тома написано, что в 32-разрядных системах максимальный размер физической памяти составляет 4 GB, то есть 2^35 бит, хотя в действительности это 4 GBit. Поправьте, если не прав.

parent From Andrey V. Stolyarov profile Sun Oct 15 02:03:11 2023 UTC pencil

userpic

Re: Ошибочка?

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

Между прочим, в книге это всё есть, но мы же так не умеем, смотрим в книгу, видим фигу, чо.

parent From Anonymous (unverified) Sun Oct 15 02:14:03 2023 UTC pencil

Re: Re: Дурак.

Совсем забыл про момент, что ячейка памяти состоит из 8 бит, а 2^32 и есть это число этих ячеек. В следующие разы буду более внимателен, спасибо!

parent From Andrey V. Stolyarov profile Sun Oct 15 11:21:04 2023 UTC pencil

userpic

На самом деле всё не так просто

Вообще говоря, если речь идёт о физической памяти, то её количество определяется разрядностью шины, а не разрядностью системы команд процессора. Поскольку везде и всюду используется виртуальная память, причём её страничная модель, в которой у каждого процесса своё виртуальное пространство, вот это ваше 2^32 -- это предельное количество виртуальной памяти на каждый процесс.

Ну а адресная шина может быть и пошире. Я больше того скажу, она и была шире, начиная ещё с Pentium Pro, у неё разрядность была 36 бит, потом стала ещё больше, вроде 40. В какой момент она стала 40-битной — не помню, но ощущение такое, что это ещё были 32-разрядные процессоры.

Я в вашем исходном комменте ухитрился не заметить слово "физическая".

From Anonymous (unverified) Fri Oct 6 08:27:56 2023 UTC pencil

Ошибка в коде в издании ДМК

Здравствуйте, Андрей Викторович.

В параграфе 2.10.6, проход по списку указателем на указатель, в издании ДМК на странице 397 содержится ошибка. Для списка, состоящего только из отрицательных чисел, следующий код не отловит ситуацию конца списка и попробует разыменовать nil:

if first <> nil then
begin
    while first^.data < 0 do
    begin
        tmp := first;
        first := first^.next;
        dispose(tmp);
    end
end;

parent From Andrey V. Stolyarov profile Wed Jul 31 15:32:14 2024 UTC pencil

userpic

Re: Ошибка в коде в издании ДМК

Есть такое, да. В следующем издании поправлю.

From savage (unverified) Wed Aug 23 06:16:18 2023 UTC pencil

Ошибка в тексте

На стр.560 Тома 1, слово "Примененив" в третьем абзаце.

parent From Andrey V. Stolyarov profile Mon Jul 29 10:31:14 2024 UTC pencil

From Anonymous (unverified) Tue Aug 8 17:18:33 2023 UTC pencil

Возможно ошибка на стр 634, том 1.

Добрый день, Андрей Викторович! Читал листинг макроса для системного вызова в главе 3.6.9. и не совсем понял, почему проверка на корректность выполнения выполняется так:

and ecx, 0fffff000h cmp ecx, 0fffff000h jne %%

Ранее на стр. 655 говорится, что если системный вызов возвращает ошибку, то в eax попадает значение в диапазоне от 0fffff000h до 0ffffffffh. Но ведь после выполнение команды and значение в регистре ecx будет равно 0fffff000h только если там до этого было значение 0ffffffffh. Как будто нужен оператор jl или аналогичный по смыслу. Или я что-то упускаю?

parent From admin profile Tue Aug 8 17:49:15 2023 UTC pencil

userpic

Re: Возможно ошибка на стр 634, том 1.

Вот это ваше утверждение:

> Но ведь после выполнение команды and значение в регистре ecx будет равно 0fffff000h только если там до этого было значение 0ffffffffh

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

parent From Anonymous (unverified) Wed Aug 9 17:08:07 2023 UTC pencil

Re: Re: Возможно ошибка на стр 634, том 1.

Прошу прощения, вы абсолютно правы. Я все время путаю логическое И с эквивалентностью, т.е. когда 0 и 0 или 1 и 1 дают единицу. Кстати, хотел уточнить насчет возврата системного вызова read - если во время очередной операции чтения наступает ситуация конца файла и в eax помещается 0, то как узнать сколько байтов было прочитано? И прочитаны ли они были вообще?

parent From Andrey V. Stolyarov profile Wed Aug 9 18:37:14 2023 UTC pencil

userpic

Re: Возможно ошибка на стр 634, том 1.

Если read вернул ноль — значит, не прочитано ничего, упёрлись в конец файла. Если там что-то ещё есть до конца файла, то сначала оно будет прочитано как обычно, и read вернёт не ноль, а сколько прочитано; а ноль будет, когда мы read вызовем ещё раз.

Вообще вроде из текста книги это должно быть понятно, не?

From Anonymous (unverified) Sun Aug 6 13:25:43 2023 UTC pencil

Стандартные возможности Паскаля

Здравствуйте! Что делать, если возможностей стандартного Паскаля уже не хватает, но ещё не написано пару программ на 2-3 тыс. строк. Дело в том, что указатели и рекурсия уже освоены на достаточно хорошем уровне, и стандартных возможностей Паскаля уже не хватает (хочется взаимодействовать с операционной системой, сетью и т.д), из-за чего пропадает всякий интерес писать программы на Паскале.

parent From admin profile Sun Aug 6 13:32:38 2023 UTC pencil

userpic

Re: Стандартные возможности Паскаля

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

Во-вторых, любое взаимодействие с операционкой и сетью возможно, естественно, и на Паскале тоже, Free Pascal содержит реально прорву разнообразных модулей на эту тему; но вообще-то я бы не рекомендовал туда лезть.

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

Вынужден повторить фразу, которую постоянно говорю начинающим: схватитесь за Си раньше времени — мозгам кранты.

parent From Anonymous (unverified) Sun Aug 6 13:51:24 2023 UTC pencil

Re: Re: Стандартные возможности Паскаля

> Если вы не написали ни одной серьёзной программы

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

parent From admin profile Sun Aug 6 14:30:29 2023 UTC pencil

userpic

Re: Re: Re: Стандартные возможности Паскаля

> (змейка, программа для эффективного управления своими задачами и какие-то подобие консольного текстового редактора)

Какие же это серьёзные программы, вы о чём вообще? Это всё как максимум учебные этюды.

> но к сожалению не одну из них смог завершить.

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

Кстати,

> Программы были написаны ради забавы

программу нельзя считать "написанной", если она не завершена.

> Как не терять интерес к программе?

Я бы посоветовал попытаться избавиться вот это этого вот фактора:

> не были расчитаны принести кому-либо пользу

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

parent From Anonymous (unverified) Sun Aug 6 14:37:41 2023 UTC pencil

Re: Стандартные возможности Паскаля

> которая будет полезна лично вам

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

parent From admin profile Sun Aug 6 14:56:36 2023 UTC pencil

userpic

Re: Re: Стандартные возможности Паскаля

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

parent From Anonymous (unverified) Sun Aug 6 15:31:48 2023 UTC pencil

Re: Re: Re: Стандартные возможности Паскаля

> Как раз для этого не хватает тех возможностей Паскаля

Возможно.

> так и не сделали командую строку основным инструментом работы с компьютером и продолжаете гонять всякие DE.

К счастью, нет. Уже больше двух лет командная строка является моим основным инструментом. Я работаю системным администратором, преимущественно занимаюсь администрированием Linux, и, конечно же, делаю это без использования DE.

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

parent From admin profile Sun Aug 6 16:18:48 2023 UTC pencil

userpic

Re: Стандартные возможности Паскаля

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

parent From Anonymous (unverified) Sun Aug 6 16:21:22 2023 UTC pencil

Re: Стандартные возможности Паскаля

Возникает. Но обычно для этого уже создано множество утилит, а если нет, то возможностей Паскаля изложенных в книге уже не хватает.

parent From admin profile Sun Aug 6 18:21:43 2023 UTC pencil

userpic

Re: Стандартные возможности Паскаля

Ну посмотрите на модули тогда. Я их обычно не советую, потому что они кривые все, в команде Free Pascal напряжёнка с адекватными юниксоидами. Да и с нормальными паскалистами, как ни странно, тоже — те же сокеты сделаны чисто по-сишному, на функциях с побочными эффектами. Но это по-любому лучше, чем раньше времени перейти на Си целиком.

P.S. Между прочим, вы зачем хотите информацию серверу отдавать по HTTP? Очень хочется поиметь веб головного мозга? Из всех протоколов, какие есть, этот для данной задачи самый неадекватный. То есть вот даже не то чтобы "не самый правильный", а именно что самый последний, который в задачах такого рода вообще следует вспоминать.

Кстати, если не упираться в то, что машина должна сама информацию о себе послать на сервер, то есть такая дивная штука inetd — этакий метасервер для не слишком загруженных сервисов. Там в роли серверных программ может выступать что угодно, имеющее стандартный ввод и стандартный вывод; inetd (или одна из его реализаций xinetd), приняв TCP-соединение на заданном порту, запускает программу, указанную для этого порта в конфигурационном файле, и у этой программы "тот конец" оказывается на стандартных потоках: что пришло из сети, читается с stdin, а что она выдаёт на stdout — уходит в сеть. Как вы понимаете, этакие сервисы можно писать буквально на чём угодно, и Паскаль не исключение.

parent From Anonymous (unverified) Mon Aug 7 09:08:16 2023 UTC pencil

Re: Re: Стандартные возможности Паскаля

> Между прочим, вы зачем хотите информацию серверу отдавать по HTTP?

Сервер мониторинга может работать только через HTTP. Видимо, стоит писать и свой сервер мониторинга.

> Очень хочется поиметь веб головного мозга?

А чего не так с HTTP? Где можно подробно почитать об этом?

> Кстати, если не упираться в то, что машина должна сама информацию о себе послать на сервер, то есть такая дивная штука inetd — этакий метасервер для не слишком загруженных сервисов. Там в роли серверных программ может выступать что угодно, имеющее стандартный ввод и стандартный вывод; inetd (или одна из его реализаций xinetd), приняв TCP-соединение на заданном порту, запускает программу, указанную для этого порта в конфигурационном файле, и у этой программы "тот конец" оказывается на стандартных потоках: что пришло из сети, читается с stdin, а что она выдаёт на stdout — уходит в сеть. Как вы понимаете, этакие сервисы можно писать буквально на чём угодно, и Паскаль не исключение.

Спасибо, попробую.

parent From admin profile Mon Aug 7 10:36:09 2023 UTC pencil

userpic

Re: Стандартные возможности Паскаля

> А чего не так с HTTP? Где можно подробно почитать об этом?

Блин, зачем об этом "подробно читать", что тут вообще может быть не очевидно? Это протокол, придуманный, чтобы с сервера забирать гипертекстовые документы. Ну, вот лежит на сервере гипертекст, а пользователь по нему, гипертексту этому, бродит. Где тут вообще, с какого боку, каким способом хоть рядом лежала эта ваша задача системного мониторинга? Заметим, для систем мониторинга придуманы свои протоколы, SNMP, например — не скажу, что он идеален, но уж всяко лучше, чем шурупы в доску кирпичом заколачивать. Придумать, что для этого сбора мониторинговой информации с инфраструктурных машин следует (или даже не следует, а вообще просто возможно) использовать HTTP, могла только конченная, обдолбаная, башкой ударенная обезьяна, у которой не хватает мозгов понять, что компьютерные сети — это отнюдь не только вся вот эта идиотская хрень, именуемая "вебом".

parent From Anonymous (unverified) Mon Aug 7 15:02:50 2023 UTC pencil

Re: Re: Стандартные возможности Паскаля

Самое печальное, что сейчас большая часть недопрограмм взаимодействует по сети только через HTTP.

parent From admin profile Mon Aug 7 15:42:16 2023 UTC pencil

userpic

Re: Стандартные возможности Паскаля

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

parent From Anonymous (unverified) Mon Aug 7 15:17:33 2023 UTC pencil

Re: Re: Стандартные возможности Паскаля

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

Есть IP-телефония, которая записывает данные о каждом звонке в базу данных (PostgreSQL). Мне нужно прочитать данные из этой базы данных и сделать на основе их разные отчёты. Сильно ли вредит работа с базами начинающим? Учитывая, что мне нужно всего лишь один раз просто их прочитать в односвязный список, а потом уже все действия проводить над ними при помощи Паскаля.

parent From admin profile Mon Aug 7 15:44:18 2023 UTC pencil

userpic

Re: Стандартные возможности Паскаля

Сделайте средствами самого PostgreSQL выгрузку в нормальный текстовый файл, уже его разбирайте программой. А ещё передайте тем дебилам, которые в такой задаче применили PostgreSQL, что они дебилы.

parent From Anonymous (unverified) Mon Aug 7 15:56:02 2023 UTC pencil

Re: Re: Стандартные возможности Паскаля

Понял. Спасибо большое за помощь!

parent From admin profile Mon Aug 7 16:13:25 2023 UTC pencil

userpic

Re: Стандартные возможности Паскаля

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

From Anonymous (unverified) Wed Aug 2 09:54:31 2023 UTC pencil

svn

В приложении есть CVS и git. В следующем издании будет svn?

parent From admin profile Wed Aug 2 10:50:11 2023 UTC pencil

userpic

Re: svn

Нет, разумеется. И darks, например, тоже не будет. К моменту первого издания книги SVN существовал уже полтора десятилетия, если я его тогда в книгу не включил, то с какого бодуна стану это делать сейчас?

parent From Anonymous (unverified) Fri Aug 4 10:03:50 2023 UTC pencil

Re: svn

Кажется, нет глубокой необходимости рассказывать про SVN, т.к. если вы научились пользоваться одной системой контроля версий по учебнику, то легко сможете научиться пользоваться другой системой самостоятельно (учебник - не справочник). Единственный момент в том, что вряд ли вы захотите пользоваться SVN, когда есть git.

parent From admin profile Fri Aug 4 11:32:05 2023 UTC pencil

userpic

Re: Re: svn

> вряд ли вы захотите пользоваться SVN, когда есть git.

> вы захотите

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

На самом деле я вполне представляю себе людей, которые захотят использовать SVN вместо git. И даже CVS. Потому что git, конечно, замечательная программа, только интерфейс у неё, мягко говоря, замороченный, а если говорить прямо — то просто кошмарно сложный. Соответственно и барьер вхождения оказывается высоковат-с, помню свои мучения с ней в первые год-полтора — ну в общем не так чтоб это было просто, прямо скажем. Это при том, что я всегда точно знал, чего хочу, опыт работы с тем же CVS у меня на тот момент был лет пятнадцать.

В принципе это частично объясняется её распределённой сущностью, распределённые системы контроля версий все простотой не отличаются, но по мне так git даже для распределённой системы просто-таки мрачен.

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

В этом плане, кстати, в книжке заменить CVS на SVN — с педагогической точки зрения так себе идея. На CVSе всё-таки мало кто задержится, так же как и на Паскале. А вот тех, кто, получив в руки SVN, осваивать git просто не захочет, может оказаться намного больше. В CVS'е ведь даже файл переименовать нельзя, приходится старый стирать и новый добавлять, SVN всё-таки не настолько тупой. Ну а прелесть распределённой модели и бранчей, которые ничего не весят и не стоят — всё то, что может предоставить git — ну, тут ещё нужен определённый опыт, чтобы понять, насколько это всё может быть важно.

From Anonymous (unverified) Sat Jun 10 00:27:03 2023 UTC pencil

GUI

Андрей Викторович, что вы думаете насчёт того, чтобы добавить к разделу о GUI небольшой рассказ об Immediate Mode? Это такой способ построения GUI, когда содержимое окна создаётся заново на каждом проходе главного цикла.

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

Кроме того, этот рассказ может дать стимул к написании первой по-настоящему своей программы: очень многим хочется сделать графическую игру, а именно в них Immediate Mode обычно и используется. Ну и в целом в программах, где виджеты - незначительный вспомогательный элемент, а не центр вселенной.

parent From admin profile Sat Jun 10 07:42:55 2023 UTC pencil

userpic

Re: GUI

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

From Anonymous 11 (unverified) Sat May 20 12:13:22 2023 UTC pencil

Оптимизация хвостовой рекурсии в компиляторах Си

Здравствуйте

В третьем томе, на 57 странице утверждается: "...оптимизация остаточных вызовов снизила бы быстродействие получаемого машинного кода, ведь значения параметров для вызываемой функции пришлось бы копировать в начало области памяти, занимаемой текущим фреймом, перед выполнением остаточного вызова." Hо ведь нам даже и без оптимизации остаточного вызова нужно записывать аргументы в стек.

Также 13-й gcc проводит оптимизацию хвостовой рекурсии в программе match_rec.c (страница 54) так, чтобы количество стековых фреймов равнялось количеству не до конца обработанных звёздочек.

parent From Andrey V. Stolyarov profile Wed Jul 31 13:18:48 2024 UTC pencil

userpic

Re: Оптимизация хвостовой рекурсии в компиляторах Си

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

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

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

А что там творят компиляторы gcc после версии 4.1, меня трогает крайне мало :-) лишь бы не ломали обратную совместимость. Хотя здесь это к делу и не относится.

From Alejandro profile Wed May 10 19:19:33 2023 UTC pencil

Побочные эффекты в заголовке if

В параграфе про побочные эффекты приведена как нежелательная конструкция вида

    if((a = f()) > 0)
        /* ... */

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

    if((a = f()) > 0) {
        /* ... */
    } else if((a = g()) > 0) {
        /* ... */
    } else if((a = h()) > 0) {
        /* ... */
    } else {
        a = 42;
    }

с учётом того, что не хотелось бы (например, из соображений наглядности) выносить эту конструкцию в отдельную функцию, а также плодить отступы (как в $2.12.5)?

parent From admin profile Wed May 10 22:46:22 2023 UTC pencil

userpic

re: Побочные эффекты

Это тот случай, когда "не плодить отступы" означает искажение действительности. Сие НЕ является "обобщением switch/case".

From Alejandro profile Sun May 7 19:37:29 2023 UTC pencil

Bourne Shell и ООП

К примеру несовместимости языка и парадигмы (с. 68) — видимо, упомянутые в конце параграфа люди имели ввиду что-то вроде этого :-)

parent From admin profile Sun May 7 19:46:07 2023 UTC pencil

userpic

Ух ё

Всё же иногда восхищаюсь мощью и потенциалом человеческого больного воображения.

parent From Alejandro profile Mon May 8 14:53:46 2023 UTC pencil

Воображение воображением...

Но заметьте, таки кое-что у них получилось :D

Кстати, могу предложить новое звено этой цепочки — языки без локальных переменных и рекурсия :)

parent From admin profile Mon May 8 15:56:51 2023 UTC pencil

userpic

Да ладно,

я по молодости сваял вот это вот, меня теперь трудно чем-то всерьёз удивить.

parent From Alejandro profile Sun May 14 03:44:09 2023 UTC pencil

К слову...

Недавно наткнулся на такую штуку и, отойдя от удивления, вспомнил про ваш коммент :-)

parent From admin profile Sun May 14 11:48:02 2023 UTC pencil

userpic

Бывает и такое

У меня студенты пару раз в качестве дипломов делали Shell на выражениях C++, перегружая всякие <, >, >>, & и прочее.

Вообще серьёзная штука перегрузка инфиксных операций. И недооцененная.

From Anonymous (unverified) Sun May 7 17:26:31 2023 UTC pencil

Режимы работы терминалов

Андрей Викторович, добрый день!

Во втором томе меня заинтересовала глава про терминалы, и после прочтения у меня родился вопрос.

Я взял Debian, вошел в систему в первом терминале (который /dev/tty1), запустил там vim и оставил его висеть включенным. Затем я переключился во второй терминал (/dev/tty2), там вошел в систему под рутом и командой kill послал сигнал SIGKILL открытому vim, узнав предварительно его pid командой ps (да, знаю, что в нормальной жизни таким образом останавливать vim не следует).

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

Вопрос в следующем: почему так происходит? Ясно, что открытый vim переводит терминал в неканонический режим, и мне казалось, что убиение его через SIGKILL должно соответствующий терминал в неканоническом режиме и оставить (SIGKILL - это все же убиение топором), и в дальнейшем при работе с интерпретатором я должен видеть в терминале разные странные вещи. Но нет, интерпретатор с терминалом живут и здравствуют, и дают работать дальше.

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

parent From admin profile Sun May 7 17:34:08 2023 UTC pencil

userpic

Мне почему-то кажется, что всё очень просто

Если я правильно понимаю, что в таких случаях происходит, то это командный интерпретатор вернул терминал в исходное состояние. Точнее, даже не сам интерпретатор, а библиотека GNU Readline, входящая в него составной частью. У неё-то режим работы с терминалом свой (и тоже неканонический, поскольку она как-то должна реагировать на стрелочки).

Проверить очень просто, напишите свой собственный простенький аналог Shell'а (это в любом случае полезно сделать), запустите vim уже из-под него и повторите эксперимент.

parent From Anonymous (unverified) Tue May 9 10:31:09 2023 UTC pencil

Интересно получается

Если современные командные интерпретаторы по факту пользуются неканоническим режимом терминала, а "каноничность" эмулируется библиотеками типа GNU Readline, то это дает ответ на многие вопросы.

Я, к примеру, гадал, как интерпретатор в каноническом режиме терминала должен обеспечить реакцию на стрелки вверх-вниз для прокрутки истории введенных команд. Думал, что это происходит так: пользователь нажимает стрелку, терминал посылает ОС код символа (фиг знает какой), затем драйвер терминала посылает интерпретатору сигнал (опять же, фиг знает какой), интерпретатор в ответ на сигнал ищет нужную строку в файле history в домашнем каталоге пользователя и отдает ее в stdout (может быть, отправив предварительно в stdout некоторое число управляющих символов - чтоб существующую строку очистить).

Спасибо за рекомендацию, поиграюсь с рукописным shell-ом.

parent From admin profile Tue May 9 14:37:41 2023 UTC pencil

userpic

С пониманием картины мира у вас по-прежнему всё так себе

Вот этот ваш абзац:

Если современные командные интерпретаторы по факту пользуются неканоническим режимом терминала, а "каноничность" эмулируется библиотеками типа GNU Readline,

представляет собой абсолютную чушь, и это стоит понимать. GNU Readline как раз обеспечивает и редактирование вводимой строки (стрелки влево-вправо), и поиск в истории (не только вверх-вниз, Ctrl-R тоже от неё), и автодополнение по Tab'у, и чтобы всё это делать, ей, разумеется, приходится перевести терминал в неканон. В каноническом режиме оперативно реагировать на стрелки и Tab невозможно, на то он и канонический. А вот сам интерпретатор (за вычетом собственно Readline) работает точно так же, как он работал бы в каноническом режиме, только он вместо всяких getchar/fgets использует функцию ввода строки из Readline. И совершенно не парится о том, что там эта функция будет делать.

From Арсений (unverified) Sat May 6 09:35:26 2023 UTC pencil

Вопрос по унификации

Здравствуйте!

Подскажите, пожалуйста, почему на стр. 464 абзац 2 при унификации переменная A3 получает значение [] (разве должно быть не [H2 | []])?

parent From admin profile Sat May 6 11:51:50 2023 UTC pencil

userpic

Похоже на правду.

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

Странно, что с момента первой публикации этого текста в начале 2020 года никто до сих пор этого жирного косяка не заметил.

parent From Арсений (unverified) Sun May 7 12:03:55 2023 UTC pencil

Спасибо

+Это всё благодаря правильному питанию+

Благодарю! А то уж боялся, что что-то упускаю.

Я бы в сообщениях об ошибках добавил про накопление в третьем параметре (ну или линк на это объяснение), чтоб проще было понять, почему рассуждение неверно.

From Anonymous (unverified) Wed Apr 19 14:57:52 2023 UTC pencil

Почему не Fortran, Pascal?

Здравствуйте, Андрей Викторович, а почему на роль первого языка был выбран именно Паскаль, а не Фортран?

Фортран (тот который 90 года и выше) очень даже простой и предсказуемый ЯП. Указатели также в наличии.

parent From admin profile Wed Apr 19 22:30:16 2023 UTC pencil

userpic

Да откуда ж столько вас, а?

Подробный ответ на вопрос, почему именно Паскаль выбран в роли первого языка, содержится в предисловиях к книге. Откровенное враньё про то, что якобы в Фортране есть указатели, здесь уже разбирали в комментариях, я не горю желанием сейчас искать то обсуждение, если хотите — ищите сами. Кроме того, если вы считаете, что нужно языки для обучения выбирать как-то иначе, нежели это сделано в моих книгах, у вас остаётся ещё одна опция — написать свою книгу.

Засим настоятельно прошу забыть дорогу на мой сайт. Учить начинающих Фортрану — это преступление, и коль скоро вы этого не понимаете, то обсуждать нам с вами нечего.

From Skyler2k (unverified) Wed Apr 12 02:28:52 2023 UTC pencil

Полноэкранные программы curses

Здравствуйте, дошёл до Полноэкранных программ на Си во втором томе второго издания. Возникла проблема в отсутствии curses.h в системе. Установил ncurses. Но программа не компилируется.
Проверил после установки наличие curses, файл есть.
Вот листинг:
skyler2k@skyler2k-PC-Kubuntu:~/Start_C/16_prog$ gcc -Wall -g curses_hello.c -o curses_hello
/usr/bin/ld: /tmp/ccWesdg3.o: warning: relocation against `COLOR_PAIRS' in read-only section `.text'
/usr/bin/ld: /tmp/ccWesdg3.o: в функции «main»:
/home/skyler2k/Start_C/16_prog/curses_hello.c:10: неопределённая ссылка на «initscr»
/usr/bin/ld: /home/skyler2k/Start_C/16_prog/curses_hello.c:11: неопределённая ссылка на «start_color»
/usr/bin/ld: /home/skyler2k/Start_C/16_prog/curses_hello.c:12: неопределённая ссылка на «stdscr»
/usr/bin/ld: /home/skyler2k/Start_C/16_prog/curses_hello.c:12: неопределённая ссылка на «stdscr»
/usr/bin/ld: /home/skyler2k/Start_C/16_prog/curses_hello.c:12: неопределённая ссылка на «stdscr»
/usr/bin/ld: /home/skyler2k/Start_C/16_prog/curses_hello.c:12: неопределённая ссылка на «stdscr»
/usr/bin/ld: /home/skyler2k/Start_C/16_prog/curses_hello.c:13: неопределённая ссылка на «stdscr»
/usr/bin/ld: /home/skyler2k/Start_C/16_prog/curses_hello.c:13: неопределённая ссылка на «wmove»
/usr/bin/ld: /home/skyler2k/Start_C/16_prog/curses_hello.c:15: неопределённая ссылка на «COLOR_PAIRS»
/usr/bin/ld: /home/skyler2k/Start_C/16_prog/curses_hello.c:15: неопределённая ссылка на «printw»
/usr/bin/ld: /home/skyler2k/Start_C/16_prog/curses_hello.c:16: неопределённая ссылка на «curs_set»
/usr/bin/ld: /home/skyler2k/Start_C/16_prog/curses_hello.c:17: неопределённая ссылка на «stdscr»
/usr/bin/ld: /home/skyler2k/Start_C/16_prog/curses_hello.c:17: неопределённая ссылка на «wrefresh»
/usr/bin/ld: /home/skyler2k/Start_C/16_prog/curses_hello.c:19: неопределённая ссылка на «endwin»
/usr/bin/ld: warning: creating DT_TEXTREL in a PIE
collect2: error: ld returned 1 exit status

Может и не важно, но сижу на Кубунте, до этого момента проблем никаких не было

parent From admin profile Wed Apr 12 11:10:02 2023 UTC pencil

userpic

Что, первый том пропустили?

И где, простите, у вас подключение библиотеки?

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

Ещё и диагностика по-русски, как вы это терпите?

А в довершение — это ваше утверждение, что программа, видите ли, "не компилируется". Как раз-таки она прекрасно откомпилировалась без единого предупреждения, а диагностику вывалил уже линкер. И я его вполне понимаю, я бы на его месте то же самое вывалил. Библиотеку-то вы ему не дали. Только пообещали (подключив заголовочник), но не дали.

parent From Anonymous (unverified) Wed Apr 12 12:49:13 2023 UTC pencil

Похоже действительно упустил

Да действительно, подключил библиотеку к gcc и всё заработало. По видимому упустил такой момент, но нашел упоминание библиотек, буду теперь помнить что просто хидера недостаточно.
Спасибо (=^・ェ・^=)

parent From admin profile Wed Apr 12 13:26:41 2023 UTC pencil

userpic

Тут, знаете ли, возникает парочка вопросов

Первый вопрос очевидный: а ничего, что я это вообще-то весьма настойчиво пытаюсь вбить читателю в голову ещё в параграфе 4.2.3, который озаглавлен "Квадратное уравнение" и входит в главу "Первые впечатления", то есть это самое начало части про Си?

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

И вот отсюда второй вопрос, скорее риторический, поскольку лично мне ваш ответ на него не шибко интересен. Тем не менее, вопрос такой: вы случайно первый том не перепрыгнули? Если да, то не тратьте время на мои книжки, толку от них вам никакого не будет. Мой подход к обучению не работает по кусочкам, только весь целиком.

parent From Skyler2k (unverified) Thu Apr 13 04:45:42 2023 UTC pencil

Нет причин для беспокойства

Нет, первый том не перепрыгивал, ушло немало времени чтобы понять как организованы вызовы функций и сопряженная с этим работа со стеком. И это было интересно.
В целом программирование не входит в сферу моей работы, но всегда было интересно в чём заключается само это программирование, вот и изучаю понемногу. Момент который не находил объяснения очень прост, как имея такие простые "кирпичи"(условно), пишутся монументальные прикладные программы? Шаг за шагом становится ясно что к чему.
Было ещё немало вопросов, но ваши книги дают исчерпывающие ответы. Ещё раз спасибо.

From Anonymous (unverified) Sat Apr 8 03:28:58 2023 UTC pencil

Оглавление

Было бы конечно намного удобнее, если бы у pdf-ок было оглавление.

parent From admin profile Sat Apr 8 09:30:17 2023 UTC pencil

userpic

re: оглавление

Оглавление там есть. А кликабельных ссылок нет и не будет, при их наличии PDF выглядит уродливо и не вполне предсказуемо — между тем, все PDFы, которые тут выложены, представляют собой оригинал-макеты, с которых печатались бумажные книги. Как-то менять эту практику в мои планы не входит.

From Anonymous (unverified) Thu Apr 6 17:28:32 2023 UTC pencil

clisp?

Что думаете о этой реализации Common Lisp?

parent From admin profile Fri Apr 7 12:46:54 2023 UTC pencil

userpic

re: clisp

Когда-то давно она мне нравилась, но сейчас-то какая разница, что я по её поводу думаю? Она лет пятнадцать как unsupported.

parent From Anonymous (unverified) Fri Apr 7 16:32:03 2023 UTC pencil

Вроде clisp актуален

По крайней мере в Debian / Devuan пакетируется, используется во многих курсках и учебниках по CL.

parent From admin profile Fri Apr 7 21:56:29 2023 UTC pencil

userpic

а ещё говорят, например, что кур доЯт

Специально слазил на википедию, последний релиз clisp'а был в 2010 году, уносите мертвеца. Что касается термина "актуален", то никакая реализация Common Lisp не может быть актуальна в принципе. Этот бегемот комитетского изготовления сдох под собственным весом задолго до того, как начали протухать его отдельные реализации.

From Leonid profile Sun Mar 26 16:29:43 2023 UTC pencil

Намеренное упрощение?

Третий том, пример со страницы 166 (ДМК). В конструкторе класса FileException дважды вызывается функция strdup. В случае, если первый раз new отработает успешно, а во второй -- выбросит исключение, то объект FileException создан не будет -- деструктор не вызовется. Произойдет утечка памяти, выделенной при первом вызове strdup.

parent From admin profile Sun Mar 26 17:52:24 2023 UTC pencil

userpic

Да, намеренное

Прежде всего отмечу, что я в книге ни разу не упоминаю про умение new кидаться исключениями. Причина очень проста. Механизм исключений — штука крайне сомнительная, настолько, что его можно выключить флагом компилятора, то есть даже мракобесы из gcc признают, что исключения штука сомнительная. На фоне этого очень хочется ту безответственную мразь, которая придумала на исключения повязать new, то есть базовую возможность языка, — ну, не знаю, четвертовать. Или на кол посадить. Просто пристрелить — для такой мрази это слишком лёгкая смерть.

Но, к счастью, это тот случай, когда дебилизм спецификации компенсируется возможностью его игнорировать. Да что там new, я даже malloc в программах на чистом Си никогда на NULL не проверяю. Между прочим, судя по моему опыту, подавляющее большинство утверждающих, что я тут не прав, при этом не знают, как сделать, чтобы такая проверка сработала. В смысле, как сделать так, чтобы реально malloc, вызванный с ненулевым (и не супергигантским) аргументом, вернул NULL. В обычных обстоятельствах, когда реально в системе кончается память, процесс об этом уже не узнаёт, поскольку ядро его просто пришибает — причём не во время работы malloc, а позже, при обращении к странице, которую система процессу вроде бы выдала, но, когда до дела дошло, реально выделить не может.

Один способ, впрочем, всё-таки есть. Я его даже знаю.

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

parent From Leonid profile Sun Mar 26 18:04:26 2023 UTC pencil

Рассказать про "умный указатель"

И все же, в реальных проектах так делать нельзя (а это же как-никак учебник).

Может все-таки имеет смысл показать как написать аналог класса std::unique_ptr<T>, благо пишется он в 5 строчек (если забить на потокобезопаность, правда тогда это скорее std::auto_ptr<T>).

parent From admin profile Sun Mar 26 18:53:25 2023 UTC pencil

userpic

Только так и можно, и нужно

Давайте вы всё-таки куда-нибудь ещё пойдёте? Интернет большой, а непрошенные советы по содержанию книги мне не нужны. Не нравится книга — пишите свою.

parent From Alejandro profile Sun Mar 26 21:05:44 2023 UTC pencil

Та же тема ...

с немного другим примером :)

соус

From Anon (unverified) Thu Mar 23 15:08:07 2023 UTC pencil

Snake

Добрый день, Андрей Викторович! При реализации змейки возникла двоякая ситуация. При смене направления змейки каждый её сегмент должен на определенных координатах менять направление. Где лучше всего хранить эти данные? С одной стороны, изменений направлений может быть неопределенное количество и нужно использовать динамическую структуру данных, но с другой стороны, это усложнение на ровном месте.

parent From admin profile Thu Mar 23 18:14:00 2023 UTC pencil

userpic

Какое ещё "направление"

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

From Горностай (unverified) Sun Mar 19 11:54:30 2023 UTC pencil

Неблокирующий вывод в программах-серверах

Добрый день!

Делаю сетевой этюд по типу программы из 6.4. Решил добавить туда неблокирующий вывод и использовать параметр writefds в вызове select. Я даю себе отчёт в том, что это ни к чему, но, как мне кажется, этюды - это наиболее подходящее место, чтобы посмотреть, как решение могло бы выглядеть в задаче, в которой возникнет потребность в неблокирующей записи.

У меня возникла такая проблема: оно, похоже, работает, но часть состояния сеанса утекает в главный цикл, чтобы можно было понять, в какой fd_set добавить дескриптор этой сеанса. Можно ли этого избежать?

Спасибо

parent From admin profile Sun Mar 19 12:41:28 2023 UTC pencil

userpic

Хрень какая-то

Что куда утекает, что за чушь? Главному циклу нужна информация о потребностях каждого из сеансов, ну вот сделайте там (в абстрактном классе сеанса) чисто виртуальный метод вроде

    virtual void Needs(bool &need_read, bool &need_write) const = 0;

Откровенно говоря, складывается ощущение, что проблема у вас совершенно не в этом.

parent From Alejandro profile Sun Mar 19 13:42:39 2023 UTC pencil

(-)

Андрей Викторович, а вдруг человек свой этюд пишет на чистом Си, а вы ему такое советуете!? :)

Более того, это человек ещё не попробовал совместить неблокирующий вывод с неблокирующим connect к какой-нибудь другой программе :-)

parent From admin profile Sun Mar 19 14:05:36 2023 UTC pencil

userpic

Сомневаюсь

Вот это вот "часть состояния утекает" — на чистом Си такое обычно не приходит в голову, там же нет защиты, так что ничто не стимулирует мышление в стиле "кто к чему имеет доступ".

Хотя, конечно, я тут могу ошибаться, вы правы. Ну, сейчас автор вопроса вернётся и, я думаю, нам всё станет понятно :-)

parent From Alejandro profile Sun Mar 19 14:16:02 2023 UTC pencil

Странно

там же нет защиты, так что ничто не стимулирует мышление в стиле "кто к чему имеет доступ"

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

parent From admin profile Sun Mar 19 18:12:26 2023 UTC pencil

userpic

Ну, э...

Вы бы видели, как на чистом Си пишут те, кто программистами не являются — например, электронщики.

Потребность разделять и властвовать появляется не сразу, а осознаётся, увы, ещё позже и не всеми.

Впрочем, ждём, когда вернётся автор вопроса :-)

UPD: Вы таки были правы. Согласен, тут я погорячился.

parent From Горностай (unverified) Sun Mar 19 16:47:12 2023 UTC pencil

...

Да, этюд на C.

Состояние сеанса (которая является конечным автоматом) у меня описывается двумя переменными, одна из которых отвечает за направление ввода-вывода. Эта переменная используется в главном цикле, и это меня беспокоило.

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

parent From admin profile Sun Mar 19 18:37:23 2023 UTC pencil

userpic

Инкапсуляция

Вообще говоря, не так чтоб тут совсем не было проблемы :-) И то обстоятельство, что вы, несмотря на использование чистого Си, этим озаботились — это прямо-таки очень хорошо, то есть это мысль в нужном направлении, причём в таком, о котором многие начинающие просто не догадываются и приходится их туда буквально запинывать.

Теперь о том, как поступить, чтобы было всё совсем чисто. Нужно осознать, что есть две части представления сеанса: та, которая интересна главному циклу, и та, которая ему не интересна.

В ту часть, которая напрямую касается главного цикла, следует включить, во-первых, дескриптор сокета — он же хранится у вас где-то, правильно? И, во-вторых, добавить к этому два флажка, вот буквально или два int'а, или один int с отдельными битами под каждый флажок, тут уж сами смотрите, как вам больше нравится. А вот для всей остальной функциональности сеанса придётся применить небезызвестные функции обратного вызова (a.k.a. callback-функции). Ну и плюс понятное дело, что с сеансом будет связана какая-то ещё информация, до которой главному циклу, конечно, дела нет, но которая от этого не исчезает. А поскольку ему до неё дела нет, пусть она будет представлена абстрактным указателем, т.е. void*.

Вытанцовывается что-то типа следующего. Каждый сеанс с точки зрения главного цикла представляется структуркой, в которой есть дескриптор сокета, два флажка, два указателя на функции — одну дёргаем, когда есть готовность на чтение, другую — когда есть готовность на запись, обеим передаём в качестве параметра адрес самой этой структуры; и плюс к этому указатель void *userdata;

Чтобы уж точно ничего никуда не "утекало", сами эти функции, а равно и описание "верхней" части состояния сеанса уносим в другой модуль. Там, когда надо создать сеанс, создаём сразу две структуры — одну для главного цикла, другую для хранения той информации, которая в главном цикле не нужна. Адрес этой второй записываем в userdata от первой. Ну а адрес первой отдаём обвеске главного цикла.

Есть, разумеется, и другие варианты решения, но идею, я думаю, вы уловили.

Прошу прощения, что мой первый ответ оказался не по делу, я почему-то был совершенно уверен, что вы пишете на C++.

parent From Горностай (unverified) Sun Mar 19 19:08:01 2023 UTC pencil

Во, то что надо

Спасибо за идею, попробую реализовать!

> о котором многие начинающие...
Не то что бы я начинающий...

parent From Alejandro profile Sun Mar 19 19:31:04 2023 UTC pencil

А тут уже у меня возник вопрос

обеим передаём в качестве параметра адрес самой этой структуры; и плюс к этому указатель void *userdata

Если я ничего не упустил, то сеанс с т.з. главного цикла представляется примерно такой структурой:

struct session {
    int sd;
    int r, w;
    void *userdata;
    void (*read_cb)(struct session*, void*);
    void (*write_cb)(struct session*, void*);
};

Но зачем для этих callback'ов параметр userdata, если он и так есть в той структуре, которую мы в этот самый callback передаём? (Не говоря уже о том, что данные, которые хранятся по адресу userdata, создаёт не главный цикл, а объект сеанса). Или так чисто для удобства стоит делать?

PS: Вы таки были правы
Мою интуицию таки не проведёшь :-)

PSS: И, кстати, с вызовами callback'ов поосторожнее надо быть :)

    if(FD_ISSET(sess->sd, &rds))
        if(sess->read_cb)
            (*(sess->read_cb))(sess, sess->userdata);
    /*  Здесь сессия может оказаться завершённой!!  */
    if(FD_ISSET(sess->sd, &wrs))
        if(sess->write_cb)
            (*(sess->write_cb))(sess, sess->userdata);

parent From admin profile Sun Mar 19 21:48:05 2023 UTC pencil

userpic

Факт :-)

> Но зачем для этих callback'ов параметр userdata,

Нафиг не нужен. Смотрим мой текст:

обеим передаём в качестве параметра адрес самой этой структуры

В том контексте совершенно однозначно "самой этой структуры" указывает на struct session, никакой userdata.

> Мою интуицию таки не проведёшь :-)

Снимаю шляпу.

> Здесь сессия может оказаться завершённой!!

Известный прикол. Там ещё с циклом просмотра клиентов могут начаться трудности, если из-под него клиентов удалять.

parent From Alejandro profile Sun Mar 19 22:23:02 2023 UTC pencil

Невнимательность :)

обеим передаём в качестве параметра адрес самой этой структуры; и плюс к этому указатель void *userdata

Из-за этого я подумал, что у функции 2 параметра, а поле userdata посчитал чем-то вроде самим собой разумеющимся (в свете предыдущей части комментария).

Там ещё с циклом просмотра клиентов могут начаться трудности, если из-под него клиентов удалять

Особенно если их в односвязном списке хранить :-) Лишний раз убедился, что решение держать указатели на сеансы в массиве, как в том самом примере из книги, куда практичнее.

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

parent From Alejandro profile Tue Mar 21 13:12:26 2023 UTC pencil

Неприятная обратная связь

Кстати, я тут задумался над этим:

>> Здесь сессия может оказаться завершённой
> Известный прикол

А какой, на ваш взгляд, лучший выход из такой ситуации? Если таковой вообще есть.

parent From admin profile Tue Mar 21 15:17:16 2023 UTC pencil

userpic

Сложного тут ничего нет

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

Ну, я во всяком случае всегда делаю так.

Есть ещё один вариант: одна итерация главного цикла — одно событие. Т.е. если событие какое-то уже обнаружено, его обработать и на этом немедленно закончить итерацию главного цикла, дальше все эти списки не просматривать. Но это, во-первых, неэффективно, а во-вторых, если неаккуратно всё сделать, можно устроить ресурсное голодание тем из объектов, которые оказались в конце списков.

From Andrei (unverified) Thu Feb 3 22:17:00 2022 UTC pencil

Первый том, посимвольный ввод

Добрый вечер, Андрей Викторович. Спасибо вам за ваш труд, вы - просто кладезь! =) Не кидайте только в меня тапками, я начал программированием заниматься в январе 2020, опыта ещё мало.

Вопрос касается стр. 322 (324 в поиске), процедура ReadLongint.
Я не понимаю до конца, что происходит внутри оператора read.


repeat
    read(c);
    pos := pos + 1
until (c <> ' ') and (c <> #10)

Здесь всё понятно. Мы читаем в переменную с: char каждый символ до тех пор, пока выражение не станет истиным. С позицией тоже понятно. А вот дальше вопрос:

1). Как происходит это чтение? Оно происходит в буфер куда-то? Ведь мы считываем посимвольно. Допустим, вводим число 12. Сперва вводим 1, у нас в "с" заносится цифра 1 (точнее код, который потом как-то обрабатывается, написал грубо), а когда мы вводим 2, разве не должна быть перезапись этой переменной? Как мы потом можем во втором цикле работать? Это же ведь не массив чаров.

Я попытался почитать и на freepascal про оператор read, и так погуглить. Либо я не могу сформировать вопрос грамотно, либо там только базовая информация есть.

2). И ещё вопрос: как у нас символ может одновременно быть = SPC и #10? Вроде же enter делает перенос на новую строку и возврат каретки. Это у нас двухбайтовый символ, состоящий как бы из 2 частей?

Можно просто ссылками на источники, либо кто-то из читателей откликнется и поможет.

Спасибо. Успехов вам и крепкого здоровья.

P.S. спасибо вам ещё отдельное за гостевую книгу. Я почитываю её периодически. Вчера вот допёр, как кое-что в линуксе настроить =).

parent From admin profile Fri Feb 4 11:47:00 2022 UTC pencil

userpic

По поводу

По поводу вопроса "как происходит чтение" — это тот случай, когда американцы обычно говорят "вы не хотите этого знать". Если на стандартном вводе у вас терминал -- это одна история, если там файл -- другая, если сетевой сокет -- третья, и, кстати, после второго тома скорее всего вы все эти "истории" сможете рассказать сами. Пока что факт тот, что операционная система предоставляет пользовательским программам удобную абстракцию, именуемую "поток ввода", и ваша программа работает с этой абстракцией, а не с чем-то ещё. Всё, что можно сделать с потоком ввода -- это изъять из него очередной байт. Всё, точка. Вот read именно это и делает. Когда чтение делается посимвольно -- то по одному байту, когда как-то ещё -- то не по одному.

На самом деле, конечно, паскалевская runtime library к операционке обращается сразу за порцией данных, операционка в ответ отдаёт всё, что есть (если только хватает того буфера, который для этого использует RTL), а read потом вызов за вызовом эти данные использует, не обращаясь к системе, пока они не кончатся, и только потом снова обращается к ядру. НО это чистая оптимизация, т.е. не будь её, программа работала бы точно так же, просто медленнее.

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

Ну а по поводу "одновременно" -- а ничего, что там неравенство, а вовсе не равенство? Вот, например, символ 'A' не равен ни пробелу, ни переводу строки, представляете? И символ '@' тоже. И вообще любой символ, кроме собственно пробела и перевода строки. Между прочим, если с ЭТИМ проблемы -- то стоит, по-видимому, вернуться к первой части, где рассматривается логика. Она там не просто так рассматривается. Вот уж чего там нет -- так это всякой странной магии насчёт двух символов сразу или что вы там удумали. Если бы там такая магия была, в книге про это было бы написано.

parent From Andrei (unverified) Fri Feb 4 15:55:00 2022 UTC pencil

Затупил.

С логикой я разобрался. Про оператор while всё понятно. Допустим конкретный пример: берётся 1 байт из потока ввода, пусть будет число 5, сравнивается с пробелом - неравно, сравнивается с переводом строки - неравно. Оба уловия правдивы, значит итог - true. Следующая итерация.
А вот repeat ... until работает же пока условие ложно. Цитирую из книги (стр. 270/272): "... после слова until записывается условие выхода из цикла - логическое выражение, ложное значение которого указывает на необходимость продолжать цикл, а истиное - на то, что цикл пора прекращать".
Далее код первого цикла:


repeat
    read(c);
    pos := pos + 1
until c <> ' ' and c <> #10

Берём то же самое число 5, вводим его. Увеличивается позиция на 1, переходим к условию: '5' <> ' ' - true, '5' <> #10 - true. Должен быть выход из цикла после первой же итерации. Или я туплю жёстко? Вроде же условия работы первого цикла должны быть такими:


repeat
    read(c);
    pos := pos + 1
until c = ' ' or c = #10

Тогда то же самое число сравнивается с пробелом, потом с переводом строки, везде false - следующая итерация.
Я понимаю где-то на задворках сознаня, что вы, скорее всего, правы, но что-то не вяжется, не понимаю, где я ошибся.

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

Асм изучал самостоятельно, но масм32 под винду и по ютубу и немного учебнику Пильщикова (пусть там и 16-разрядный асм). Есть некоторое понятие, но сами понимаете, самостоятельно познавать сложнее, хоть и увлекательнее.

Спасибо за ваш ответ и труд. + в карму.

parent From admin profile Fri Feb 4 16:19:34 2022 UTC pencil

userpic

По поводу цикла

По поводу цикла — а вы хорошо понимаете, что он делает? Он ведь, если вы не заметили, символы жрёт и ни черта с ними не делает, вот просто жрёт, ну, там, жрёт и не давится, жрёт и спасибо не говорит, жрёт как не в себя, можете сами синоним подобрать. Если условие вывернуть наизнанку, как это предлагаете вы, он начнёт так поступать со значащими символами, и я прямо даже тогда уже не знаю, как итоговое число-то вычислить. Если этот цикл все значащие символы прочитает и благополучно похерит проигнорирует.

Если же таки оставить, как есть, то он пропустит все пробелы и переводы строк, сколько их там ему встретится, прежде чем начнётся что-то интересное. Для этого он там, собственно, и есть. А как только очередной прочитанный символ окажется чем угодно, только не пробелом и не переводом строки, цикл завершится, понимаете? А в переменной ch останется как раз этот символ. Первый встреченный значащий символ. Обрабатывать этот символ будет уже следующий цикл, вернитесь к тексту примера и посмотрите. Собственно говоря, если мы ввели ЦИФРУ (!!! а вовсе никакое не "число") '5', то из ЭТОГО цикла нужно уже вылетать как ошпаренным, потому что цифру надо обрабатывать, а не игнорить. А обработка не здесь, обработка (точнее, обработка и чтение) не здесь, а в следующем цикле.

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

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

parent From Uko1ove profile Fri Feb 4 18:46:00 2022 UTC pencil

Осознал.

Спасибо, я вас услышал. Буду работать дальше над собой. Теперь мне стало понятно. Я ещё обратил внимание на всю программу целиком, и меня как обухом по голове ударило))). Да, над терминологией надо поработать, а то свои мысли ясно и коротко не могу выразить.

По поводу асма под винду - я пока не до конца понимаю, о чём вы. Не тот уровень ещё. Для меня было прогресом, что я сумел откопать в аудио редакторе, где и как генерится серийный номер. Мне он нафиг был не нужен, просто было интерено, как устроено внутри. Настолько глбоко и масштабно я не мыслю пока. Линукс уже оценил, очень удобно и быстро, vim освоил на уровне вимтутора и дальше по главе в день стараюсь мануал читать и осваивать, но настолько далеко в отношении ОС ещё не продвинулся, чтобы судить. До 2020-го я даже html читать не умел и был обычным юзером =).

Спасибо за ваше время, больше не отвлекаю.

parent From Anonymous (unverified) Mon Feb 7 19:28:00 2022 UTC pencil

Тоже сегодня

Тоже сегодня дошел до этого места и появились вопросы. Кажется по логике понятно, но ни код из книги, ни файл из архива с примерами char2num.pas не получается заставить работать как положено. Версия fpc 3.2.2
И капча тут ну очень сложная

parent From admin profile Mon Feb 7 19:42:05 2022 UTC pencil

userpic

Даже интересно

Даже интересно стало, как выглядит работа char2num "не как положено". Показать можете?

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

parent From Anonymous (unverified) Mon Feb 7 20:02:00 2022 UTC pencil

Как я понимаю,

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

Please type the first number: 4
'' in pos: 2`
Please type the first number: 5
'' in pos: 2`
Please type the first number:

parent From admin profile Tue Feb 8 12:51:11 2022 UTC pencil

userpic

А, винду

А, винду используем? Ну так выбросьте мои книжки и валите нахрен с моего сайта. Перейдёте под Unix -- можете возвращаться.

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

parent From Anonymous (unverified) Mon Feb 7 21:16:00 2022 UTC pencil

Версия free pascal

Версия free pascal для windows похоже компилирует неверно. С версией для linux работает нормально. Я понял, книгу использовать только с линукс.

parent From admin profile Tue Feb 8 12:52:45 2022 UTC pencil

userpic

Дело не в

Дело не в версии паскаля, просто под виндой строки в тексте, в том числе и на вводе с клавиатуры, разделяются двумя байтами -- #13 и #10 (CR, LF). Программа, которую мы обсуждаем, на это не рассчитана, и символом #13 она благополучно давится.

From Anonymous (unverified) Mon Jan 24 01:42:00 2022 UTC pencil

fb2 формат

Здравствуйте!

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

Уважаемый автор, можно ли узнать исходную кодировку или иную полезную инфу, о том как сконвертировать 3 книги в fb2 или epub?

С уважением, человек.

parent From admin profile Wed Jan 26 19:54:03 2022 UTC pencil

userpic

Ещё один не

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

parent From Anonymous (unverified) Wed Feb 9 16:01:00 2022 UTC pencil

Добрый день,

Добрый день, Андрей Викторович!

Дело в том, что я достаточно давно сконвертировал ваши книги в fb2 и успел прочитать уже больше половины. Естественно, никому сконвертированные файлы я не давал и никоим образом не распространял. Просто при чтении с компьютера у меня очень устают глаза, и электронная читалка на E-Ink для меня стала настоящим спасением.

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

С уважением, Василий.

PS. В любом случае, спасибо за ваши книги.

parent From admin profile Thu Feb 10 10:28:47 2022 UTC pencil

userpic

К моему

К моему глубочайшему сожалению, я не могу вам этого запретить. Согласно действующему ГК РФ, в личных целях вы с объектами авторских прав можете делать что вам в голову взбредёт, если только это не программа для ЭВМ (там специальное исключение прописано). Нарушение авторских прав можно будет зафиксировать не раньше, чем оно от вас куда-то утечёт.

А вот утечь оно, увы, может. Потому я и не приветствую (мягко говоря) любые конверсии, даже если распространение не предполагается.

parent From Anonymous (unverified) Wed Sep 18 18:57:46 2024 UTC pencil

Re: К моему

Здравия, Андрей Викторович!

Хотелось бы уточнить, вы за отмену авторского права или за то, чтобы его нельзя было передавать издателю или кому бы то ни было? Если первое, то почему ссылаетесь на ГК РФ? А также не считаете ли вы действующий ГК РФ ограничением свободы распоряжаться своим компьютером и информацией, хранящейся на нем, в том числе программами для ЭВМ? Смею предположить, что каждый волен в личных целях распоряжаться любой информацией на ПК как ему угодно, независимо от того, является информация исполняемой программой или нет.

Заранее спасибо за ответ!

parent From Andrey V. Stolyarov profile Wed Sep 18 19:41:30 2024 UTC pencil

userpic

Re: Re: К моему

> вы за отмену авторского права

Я за отмену любых имущественных прав в области интеллектуальной собственности.

> то почему ссылаетесь на ГК РФ

Потому что он пока ещё не отменён, а отменять авторское право в одностороннем порядке — только для моих произведений — я не собираюсь.

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

From Eager dude with math problems (unverified) Sun Jan 2 01:49:00 2022 UTC pencil

Необходимый уровень математики?

Здравствуйте.
Подскажите, пожалуйста, какая конкретно математика нужна (и желательна) для максимальной пользы новичку от этих книг?

Ситуация такая. У меня нет даже нормальной школьной алгебры, сейчас я подтягиваюсь по старым учебникам по математике Киселева ("Элементарная алгебра", "Элементарная геометрия"), но я слабо представляю, что делать после них. Я слышал, в программировании нужны дискретка, линал, матан, комбинаторика, но нужны ли они конкретно для старта по этим книгам? Спрашиваю не для того, чтобы с чистой совестью пытаться в программирование, отказываясь при этом подтягивать математику, а потому, что мне крайне сложно проглатывать тонны теории без каких-то веселеньких проектов, где все это можно применить на практике и что-то работающее получить - без отдачи. Если, например, при изучении интерфейса ЯП сразу можно пойти и что-то попробовать, поиграться, на ходу идеи рождаются, что можно с этим сделать и как применить с пользой для каждодневных задач, то с математикой я такого не видел и не знаю, где искать, кроме как посредством перемежения ее с программированием. Кроме того, я несколько скептически отношусь к современной программе образования по математике, поскольку сам ее испытывал и именно из-за этого сейчас учусь заново по Киселеву, который объясняет куда понятнее и интереснее. И частично из-за этого скептицизма я не уверен, что следует по современным программам тупо проглатывать школьные математики подряд - например, потому, что после алгебры там идет сразу резкий скачок в абстрактном мышлении к основам матана.

В общем, в итоге два вопроса:

  1. Можете ли подсказать, какие разделы математики, а не пути ее освоения ("школьный курс", например, есть путь ее освоения, а не раздел) нужны или даже просто желательны для старта по этим учебникам, помимо упомянутых? Или даже так: будь ваша воля, вы бы какую математику давали детям и студентам, чтобы в итоге к вам они пришли такими, которых не пришлось бы подтягивать или переучивать?
  2. Если не затруднит, можете посоветовать хорошие именно что учебники/самоучители по этим разделам для людей с практическим складом ума, не способных быстро и в больших объемах заглатывать одну теорию? Пощупать математику, причем не просто на задачках, а желательно на каких-то маленьких проектах с практическим применением, чтобы из теоретического знания, закрепленного задачниками, она превратилась в жизненный опыт, стала инструментом.

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

---

И сразу, чтоб не тратить коммент:

  1. Меня воспитали javascript-волки в диких лесах веб-разработки, но я сбежал раньше, чем все вот это выжглось у меня в мозгу навечно. Есть какие-то советы касательно того, как переучиваться на правильное мышление, когда доберусь до Паскаля в книге, раз уж уже не получилось с него именно начать свой путь в программирование?

parent From admin profile Sun Jan 2 09:51:41 2022 UTC pencil

userpic

Очевидно, что я

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

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

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

parent From fluorine profile Sun Jan 2 17:02:00 2022 UTC pencil

userpic

Я пробовал

Я пробовал писать калькулятор, сначала обычный, потом сделал её в стиле GDB (с командной строкой и т.п.) для умножения матриц, нахождения определителей и тому подобного.

Теория в итоге ушла в подкорку.

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

Во первых у большой части математики нет практического применения! ДА! Буквально. Много чего создавалось для развлечения. Можно построить формальную теорию по которой 2+2 будет равно 5, но от неё может не быть никакой практической пользы.

Ну так вот, изучайте математику для "прокачки мозгов" прямо как с гантелями в спортзале. И здесь подойдёт любой её раздел, берите что больше нравится. И решайте на скорость, на нахождение наиболее изяшного решения и т.д. и т.п.

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

На этом пожалуй всё.

И да, чем дольше останетесь писать на паскале тем лучше. Вон я 3 месяца одну и ту же змейку переписывал (с перерывами). Конечный результат меня удовлетворил в достаточной степени, здесь цель именно в получении правильных привычек.

parent From Anonymous (unverified) Mon Jan 24 20:17:00 2022 UTC pencil

Трудно писать

Трудно писать змейку?

parent From admin profile Sat Jan 29 15:04:02 2022 UTC pencil

userpic

Смотря кому

Ваш вопрос в такой его формулировке лишён смысла. Кому-то змейка — на один вечер потоптать кнопки, не особенно напрягаясь, а кому-то — недостижимая вершина. Дело здесь не в змейке, а в том, кто её пытается писать.

parent From fluorine profile Mon Jan 31 08:39:00 2022 UTC pencil

userpic

гм, не то чтобы

гм, не то чтобы трудно.. Я, когда на ней учился указателям на простую змейку я потратил недели два, схватив десятки сегфолтов. И я не пытался её 3 месяца подряд писать (отвлекался на другие задачки), дальше добавлял разные фишки (настройки, конфиг-файл, карта, сохранение, разные предметы, возможность играть вдвоём), приходило на ум как делать её лучше, появилось несколько реализаций. Вот так 3 месяца. А простая змейка проще пареной репы так-то (реально кнопкотоптание на вечер, но такая змейка скучная :) ).

Пока не реализовал, но хочу добавить ботов, сделать её серверную версию (что-то типа slither.io), чем не "сложно"?

parent From radix (unverified) Mon Jan 17 20:14:00 2022 UTC pencil

Могу

Могу посоветовать арифметику малинина и буренина и алгебру Маракуева, можешь почитать, что об этом говорят на этом сайте:
https://ask.profi.ru/q/kakoi-samyi-silnyi-i-interesnyi-shkolnyi-38422/

From Павел (unverified) Wed Dec 1 23:42:00 2021 UTC pencil

ЗдравствуйтеСп

Здравствуйте

Спасибо за книги. Все также как и в первом издании невозможно скопировать текст из книги, чтобы вставить себе в конспект.

ПУБЛИЧНАЯ ЛИЦЕНЗИЯ копируется: "Учебное пособие Андрея Викторовича Столярова «Программирование: введение в профессию» в трёх томах".

А после нее со всех страниц вместо текста что-то подобное:

"DhVR^Y[ @ݷa_TaQ]]Ya_SQ^YVC SSVUV^YV S `a_eVbbYo_ ݷaYV^cY6
a_SQ^ ^Q bQ]_bc_pcV\m^_V YXdhV^YV Y `aVU`_\QTQVc Yb`_\mX_SQ^YV bY6
bcV] bV]VZbcSQ ^>9H 1S c7 h7 U9>EH2 S a_\Y b[S_X^_Z baVUl U\p _RdhV6
^Yp7 @VaSlZ c_] dhVR^Y[Q b_UVaWYc caY hQbcY5 _fSQclSQojYV RQXYb
X^Q^YZ _ `a_TaQ]]Ya_SQ^YY [Q[ SYUV UVpcV\m^_bcY7"

Пробовал в Windows 10 (работаю c 3d-редакторами) в Foxit reader, браузеры и т д. Везде так. Это у вас такая защита от копирования?

Наверное, как и с первым изданием придется прогонять pdf через распознавание текста (

parent From admin profile Fri Dec 3 21:34:00 2021 UTC pencil

userpic

Слушайте, ну

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

И да, к защите от копирования это никакого отношения не имеет. Копировать файлы, как можно заметить, никто и ничто не мешает.

parent From Anonymous (unverified) Fri Dec 17 03:23:00 2021 UTC pencil

А смысл? Если

А смысл? Если верить автору, то в Windows всё равно не получится научиться программированию. По крайней мере по его методике.

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

From Андрей Кодинцев (unverified) Fri Nov 12 12:36:00 2021 UTC pencil

Шрифт в PDF

Здравствуйте, Андрей Викторович!
Пробую читать Ваши книги в PDF. Некомфортный шрифт. Возможно он оптимизирован под бумагу, но на экране смотрится жестко, на глаза давит. Какие-то зазубрины и неровности на буквах. Причем меняющиеся при изменении масштаба. Если возможно, в следующем издании сделайте, пожалуйста, более гладкий шрифт.
С уважением, Андрей Кодинцев.

parent From admin profile Fri Nov 12 15:04:45 2021 UTC pencil

userpic

Здесь проблема

Здесь проблема не в шрифте, а в выборе программы для чтения. Используйте, например, atril, всё будет намного приятнее.

И да, шрифты семейства Computer Modern предназначены для бумаги, а те PDF-файлы, которые есть здесь на сайте — это оригинал-макеты книг, то есть прямо те файлы, с которых книги печатались в типографии. Только спереди добавлены странички с обложкой и лицензией.

From Anonymous (unverified) Mon Nov 8 14:51:00 2021 UTC pencil

Добрый день,

Добрый день, Андрей Викторович! На данный момент я пишу свою первую программу превышающую объём в 300 строк. Но проблема в том, что реализация моей программы мне кажется неправильной, не в плане оформления, а в плане эффективности. Стоит ли по этому поводу переживать?

parent From admin profile Mon Nov 8 15:11:47 2021 UTC pencil

userpic

Переживать по

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

parent From Anonymous (unverified) Fri Dec 17 03:40:00 2021 UTC pencil

Ну кстати тут

Ну кстати тут есть пунктик, прочитал в статьях этого товарища https://randomascii.wordpress.com/

Оказывается, есть такая ерунда — квадратичная сложность алгоритма O(n²) — это как раз такая производительность, которая достаточно небольшая, чтобы пройти тестирование и выйти в production, но зато достаточно значительная, чтобы в реальном использовании вызывать проблемы.

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

From Anonymous (unverified) Sun Oct 10 16:02:00 2021 UTC pencil

Здравствуйте!

Здравствуйте! Остановился на Паскале, есть идея написать одну программу, но... Уже как месяц (вместе с учебой) пытаюсь соблюсти все принципы адекватного кода + чтобы все это было понятным (не более 4 параметров, подпрограмма решает одну, независимую от других подпрограмм, задачу и т.д.).
Так вот вопрос: я параноик (месяц обдумываю, пишу, а никакого рабочего прототипа нет)?

P.S. Сама задача - перевод числа из одной системы счисления в другую. Делаю примерный план и тут же появляются проблемы (здесь речь идет о буквах и числах одновременно, т.к. их тоже нужно правильно переводить) по типу: "Можно считать все символы в строку, а потом перевести в нужную систему" или "можно читать символы по одному, и сразу их переводить"; У одного свои нюансы, у другого еще какие-нибудь, и из-за этого не могу соблюсти какие-либо правила в процедурах и т.д.

parent From admin profile Mon Oct 11 08:11:45 2021 UTC pencil

userpic

> вопрос: я

> вопрос: я параноик (месяц обдумываю, пишу, а никакого рабочего прототипа нет)?

Сложный вопрос :-) точнее, вопрос простой, а ответ на него сложный.

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

Во-вторых, месяц обдумывать — это в целом нормально.

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

Да, ещё один момент:

> речь идет о буквах и числах одновременно

Мне почему-то кажется, что вы путаете "числа" и "цифры".

parent From Anonymous (unverified) Tue Oct 12 05:23:00 2021 UTC pencil

Ок, спасибо)>

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

Читал комментарии, где вы говорили про systemd:
> Вообще если уж залезли так глубоко, попробуйте сразу сползти с systemd, эта штука мертворожденная и неизбежно в какой-то момент начинает жутко мешать
Почитал про инициализаторы в интернете; Узнал, что один инициализатор прост в использовании и следует философии UNIX (init), а другой - в точности наоборот - сложен и не следует философии UNIX;
В этом ли все дело? То есть это является причиной, из-за которой люди не любят systemd?
Возможно, лезу вперед, но стало интересно, почему все сложилось именно так.

parent From admin profile Tue Oct 12 09:57:00 2021 UTC pencil

userpic

Философия - фигня

Философия — фигня, хотя, конечно, всё именно так. Но — за всех, конечно, не поручусь, а лично я systemd "не люблю" (если быть точным, с удовольствием пристрелил бы всех, кто имеет отношение к его созданию и раскрутке) по одной простой причине: его навязывают. Если дистрибутив переходит на systemd, в нём вся основа, всё то, что мы называем "системой", становится повязана на systemd, то есть выкинуть его оказывается невозможно; при этом systemd от пользователей требует усилий на переобучение и траты времени на это, но не решает никаких реально существующих проблем. Попросту говоря, эта публика — RedHat и все, кто за ними последовали — решили, что они вправе отнимать моё время. Как мы понимаем, такое понравиться не может.

Ну и плюс к тому — решать-то проблем systemd не решает, а вот создавать — создаёт. Если моя система на старте работает как-то не так, я минут за десять разберусь, почему это происходит, поскольку у меня SysVinit, в котором всё, что происходит, задано простыми shell-скриптами. Если система на основе systemd "работает как-то не так", разобраться нереально: нужно лезть в потроха самого systemd, а там, пардон, многобукв и контринтуитивное построение архитектуры.

parent From Anonymous (unverified) Wed Oct 13 14:24:00 2021 UTC pencil

Более того, в

Более того, в дистрибутивах, где "нет systemd", он таки есть. Просто не весь. udev например.

parent From admin profile Wed Oct 13 14:41:28 2021 UTC pencil

userpic

udev, заметим,

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

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

parent From Anonymous (unverified) Thu Oct 14 13:17:00 2021 UTC pencil

О нужности udev

Прошу не думать, что я являюсь фанатом udev или чем-то вроде, но, он делает вот это вот:

1. При втыкании устройства создаёт файлы в /dev, а при вытыкании удаляет. В той же OpenBSD приходится каждый раз писать cd /dev; sh MAKEDEV sd или что-то такое.

Как предложите это делать без udev?

2. Предположим у меня есть устройство и при каждом его втыкании я хочу выполнить команду. Как это сделать без udev? Например подключить кастомную раскладку клавиатуры но только к одной конкретной клавиатуре.

parent From admin profile Thu Oct 14 15:15:00 2021 UTC pencil

userpic

При втыкании

При втыкании устройства создаёт файлы в /dev,

Вообще-то нет, в Linux'ах нынче devfs, в ней ядро само показывает файлы всех имеющхся в наличии устройст. Но даже если бы не она, да, все эти вещи прекрасно скриптуются, во-первых, а во-вторых, до нашествия udev и devfs в /dev просто присутствовали файлы для большинства возможных устройств, и крайне редко случалось так, что их не хватало.

Предположим у меня есть устройство и при каждом его втыкании я хочу выполнить команду

А давайте без "предположим"? Мне за всю мою практику использования Linux (т.е. с 1994 года) ни разу ничего подобного не хотелось, нахрен мне нужен тогда ваш udev?! Пусть его тогда ставят себе те, кому вот такое вот надо, (и если бы лично мне вдруг потребовалось именно команды выполнять по втыканию дивайса, то я бы тоже поставил), а по умолчанию чтоб его не было. Так ведь нет же, вяжут на него половину системы зачем-то, только время отнимают у нормальных людей.

Это вот ваше "предположим" и есть то, что я крайне не люблю во всём этом дерьме: решать проблемы, которых в действительности нет и никогда не было, но при этом создавать проблемы, которые вполне реальны, и попусту отнимать у пользователей время и силы. В этом весь systemd, и udev, и dbus, и прочие подобные сущности.

parent From Anonymous (unverified) Sat Oct 16 05:00:00 2021 UTC pencil

udev или не udev

> Вообще-то нет, в Linux'ах нынче devfs

Ну, честно говоря, я не очень понимаю как эта фигня работает. Мне казалось, что файлы в ней создаёт именно udev, но может я и не прав. Да, она называется devtmpfs, а не devfs, по крайней мере у меня.

> Но даже если бы не она, да, все эти вещи прекрасно скриптуются

Нужто, чтобы скрипт запускался при каждом вставлении устройства и получал через переменные окружения или параметры информацию об устройстве. Для этого в любом случае нужен какой-то демон. Может можно взять mdev вместо udev, но я в этом не разбирался.

> Пусть его тогда ставят себе те, кому вот такое вот надо

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

Кроме того я сделал экспериментальную клавиатуру с кастомной раскладкой, переставив клавиши. Хотелось чтобы на этой клавиатуре была кастомная раскладка, а на всех остальных обычная qwerty. С тем как сделать свою раскладку я разобрался, а с тем как сделать правило udev, которое бы выполняло команду установки раскладки при её втыкании (setxkbmap something) — пока нет. Но вроде не особо сложно.

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

Ну, кроме случаев когда меня не устраивали автоматически создаваемые файлы устройств, с udev мне пришлось столкнуться в ситуации, когда я переставил жесткий диск из одного ноутбука в другой. Тогда у меня появились устройства eth1 и wlan1, а все настройки были на eth0 и wlan0. Пришлось удалить пару файлов udev, чтобы он про эти устройства забыл и назначил им имена с нулём. А потом при переставлении обратно ещё раз так сделал.

Ещё пришлось погуглить и вернуть классические имена устройств вместо неудобочитаемых. У меня всего одна проводная сетевуха, та которая встроена в материнку ноута. Гораздо удобнее когда она называется eth0, а не какой-то там esp1s2 или как там было. Тоже делалось через правила udev но я забыл как.

parent From admin profile Sat Oct 16 13:25:00 2021 UTC pencil

userpic

она называется

она называется devtmpfs

С этим согласен :-) А работает она очень просто: ядро там создаёт файлы для всех устройств, которые есть, а когда устройство исчезает, файл автоматически пропадает. Их можно создавать из userspace обычным способом (mknod'ом), тогда devtmpfs сей факт запоминает и данный файл устройства больше не трогает. Вот тут оригинальное, как я понял, описание: https://lwn.net/Articles/345480/

Нужто, чтобы скрипт запускался при каждом вставлении устройства

Нет, не нужно. То есть само по себе, во всяком случае, не нужно, если и нужно, то зачем-то. В частности, у меня чёткое ощущение, что это нахрен не нужно было в вашем случае.

> Правда я не понял, как в udev это сделать толком

Это, заметим, тоже проблема. Как тут уже отмечали, наркоманский синтаксис, плюс косноязычная документация и просто-таки адски навороченный функционал.

> чтобы при втыкании некоторых устройств, права на них были у простых юзеров

Если это про флешки, то решается соответствующими строчками в fstab'е. Если не про флешки, то для своих дивайсов я специальную программу написал как-то раз (вот тут вот: http://www.unicontrollers.com/downloads сама программка называется unc_chown, там архив исходников есть, можете глянуть, если интересно). Обычный suid'ный бинарник, который юзер может руками дёрнуть, либо те программы, которые с дивайсами работают, могут, не видя дивайса, сначала дёрнуть эту штуку.

Кроме того я сделал экспериментальную клавиатуру с кастомной раскладкой, переставив клавиши. Хотелось чтобы на этой клавиатуре была кастомная раскладка, а на всех остальных обычная qwerty. С тем как сделать свою раскладку я разобрался, а с тем как сделать правило udev, которое бы выполняло команду установки раскладки при её втыкании (setxkbmap something) — пока нет. Но вроде не особо сложно.

Это, пардон, в таком виде не получится. setxkbmap работает только с иксами и должен знать, какие из иксов окучивать (ибо X-серверов может быть больше одного). У udev средства работы с раскладкой свои — и да, по мне так тоже наркоманские.

Что характерно, я в своё время убил не меньше часа, разбираясь, куда делась возможность пришибать X-сервер по Ctrl-Alt-Backspace, и почему закомментаривание опции DontZap в конфиге иксов теперь не даёт ровно никакого эффекта. Точнее, час ушёл просто на то, чтобы осознать, что оно тепербь в конфигах udev. Вопрос, кому классическое поведение X-сервера не давало покоя, наверное, всё-таки риторический (собственно, от таких вот "улучшателей" все проблемы в IT и есть).

появились устройства eth1 и wlan1, а все настройки были на eth0 и wlan0

Вот-вот, это пример проблемы, которую udev создаёт, у меня тоже аналогичное возникало.

классические имена устройств вместо неудобочитаемых

Это не в udev'е дело, это ядро так сконфигурено. Убунту, что ли, используете? Так или иначе, где проблема, там должно быть и решение — их не udev'ом надо переименовывать, а параметрами ядра в загрузчике. Если у вас grub, то вот так: GRUB_CMDLINE_LINUX="net.ifnames=0"

parent From Anonymous (unverified) Sat Oct 16 16:20:00 2021 UTC pencil

Это не в udev'е

Это не в udev'е дело, это ядро так сконфигурено. Убунту, что ли, используете? Так или иначе, где проблема, там должно быть и решение — их не udev'ом надо переименовывать, а параметрами ядра в загрузчике. Если у вас grub, то вот так: GRUB_CMDLINE_LINUX="net.ifnames=0"

Всё так, но хочу отметить, что таки udev определённо имеет отношение к этому именованию устройств. Вот, на одной из линукс-систем, которые я поддерживаю (а на основной машине у меня по-прежнему OpenBSD), есть такой файлик:

$ cat /lib/udev/rules.d/80-net-name-slot.rules
# do not edit this file, it will be overwritten on update

ACTION!="add", GOTO="net_name_slot_end"
SUBSYSTEM!="net", GOTO="net_name_slot_end"
NAME!="", GOTO="net_name_slot_end"

IMPORT{cmdline}="net.ifnames"
ENV{net.ifnames}=="0", GOTO="net_name_slot_end"

NAME=="", ENV{ID_NET_NAME_ONBOARD}!="", NAME="$env{ID_NET_NAME_ONBOARD}"
NAME=="", ENV{ID_NET_NAME_SLOT}!="", NAME="$env{ID_NET_NAME_SLOT}"
NAME=="", ENV{ID_NET_NAME_PATH}!="", NAME="$env{ID_NET_NAME_PATH}"

LABEL="net_name_slot_end"

Мне не хочется разбираться в тонкостях этого, как я уже говорил, наркоманского синтаксиса, но на первый взгляд именно udev отлавливает параметр ядра net.ifnames и переименовывает устройства в зависимости от него. То есть, если это правило удалить нахер, то параметр ядру передавать не понадобится.

parent From admin profile Sat Oct 16 18:16:00 2021 UTC pencil

userpic

То есть, если

То есть, если это правило удалить нахер, то параметр ядру передавать не понадобится.

К сожалению, это не так. Эти неудобоваримые имена вместо традиционных eth0, eth1 и т.п. — это именно конфигурируемая "фича" ядра (называется, если не ошибаюсь, predictable network interface names), и пресловутый параметр её отключает, если она была включена при сборке. Единственный дистр, в котором она включена, из тех, что я лично трогал-щупал-пользовал — таки убунту, в остальных (в том числе в дебиане) этот идиотизм, судя по всему, не прижился.

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

parent From Anonymous (unverified) Sat Oct 16 18:32:00 2021 UTC pencil

К сожалению,

К сожалению, это не так. Эти неудобоваримые имена вместо традиционных eth0, eth1 и т.п. — это именно конфигурируемая "фича" ядра

Жаль. Я надеялся, что хотя бы в ядре этой фигни нет.

Но убирать "нахер" надо не правило, а весь udev целиком, это как-то правильнее, что ли.

Да, конечно. У меня даже были планы разобраться с mdev, когда ещё на линуксе жил, но руки так и не дошли. Оказалось проще перейти на OpenBSD, где всего этого дерьма изначально нет.

parent From Anonymous (unverified) Tue Oct 19 05:45:00 2021 UTC pencil

udev

> Но убирать "нахер" надо не правило, а весь udev целиком, это как-то правильнее, что ли.

Может кто-то и осудит такое мнение, но мне как-то пофиг. Он есть и работает, так что пусть будет. А вот если его убирать, наверняка что-то отвалиться, придётся разбираться, возможно пересобирать код с патчами, а может вообще самому эти патчи писать. Это тяжело а в итоге, ну, будет опять работать. А в чём польза, если и так работает и так работает? Какой бы не был наркоманский синтаксис у правил udev, проще разобраться с ним, чем с целой кучей программ, которые нужно править, чтобы избавиться от udev.

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

Впрочем не вижу ничего особо ужасного и в systemd. Приходилось пользоваться на устройстве к которому других готовых дистров не было (одноплатник). Поправить/написать юнит-файлы не намного сложнее, чем шелл-скрипты. Ну и команды нужны другие для остановки/запуска демона — systemctl какой-то. Так разве трудно прочитать man systemctl? По-моему это гораздо проще, чем разбираться в том как адаптировать без-systemd-шный дистрибутив под тот одноплатник. И я знаю, о чём говорю, поскольку ранее его и использовал, когда готового образа под тот комп не было.

parent From admin profile Wed Oct 20 08:56:47 2021 UTC pencil

userpic

Ваше

Ваше рассуждение имеет серьёзную дыру: вы наличие udev рассматриваете как исходную ситуацию, как если бы он "всегда был", и оцениваете его с точки зрения сложностей по слезанию с него. Я же начал использовать Linux за девять лет до первого релиза udev (каковой состоялся в 2003 году) и, соответственно, лет за 15 до его широкого распространения; вполне логично, что я скорее буду оценивать шаг по его внедрению (что было, что стало, чего стоило) — и тут всё очень плохо: было всё нормально, стало отвратительно, и на это ещё и потрачены силы и время.

Ну а ваша лояльность к systemd вообще ни в какие ворота не лезет. Мне не трудно прочитать man systemctl, и уже пришлось это сделать. И, увы, не раз, поскольку там контринтуитивно всё и не запоминается. Что я за это получил? А ничего — возможность справиться с треклятыми systemd'шными дистрами, которые теперь только и есть на любом VPS-хостинге, то есть де-факто я вынужден был потратить своё время на то, чтобы побороть проблему, которую мне, собственно говоря, как раз внедрение systemd и создало. Как запускать, останавливать, включать и выключать сервисы на sysVinit, я разобрался ещё тогда, в 1994 году, и писать скриптики для исходно дебиановской скриптоты, лежащей в /etc/init.d, тоже научился очень быстро, ибо там всё понятно и логично, а вот юнит для systemd — он, может, и короче чисто текстуально, но что там за мумба-юмба написана, при взгляде внутрь совершенно непонятно, приходится это всё как-то обходить, поскольку врубаться в эти поттеринговские высеры у меня нет ни малейшего желания — эта мерзость мне и так уже стоила несуразно дорого.

Потрудитесь освободить мой сайт от своего присутствия, мне тут такие не нужны.

parent From fluorine profile Wed Oct 20 12:47:43 2021 UTC pencil

userpic

Есть хостинги - достаточно их

> треклятыми systemd'шными дистрами, которые теперь только и есть на любом VPS-хостинге
==
https://www.vultr.com/

есть freebsd и openbsd

может кому нибудь понадобиться, и ни копейки больше за не-системдшность не просят.

UPD: Очень был тогда очень удивлен тем что там были BSD, что даже забыл добавить, что ещё можно загрузить свой образ, это думаю ещё интереснее.

parent From Владислав (unverified) Fri Oct 29 12:11:00 2021 UTC pencil

Не подскажете,

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

parent From fluorine profile Wed Nov 3 20:24:00 2021 UTC pencil

userpic

На данный

На данный момент как пишет: самое слабое железо - High Frequency 32 GB NVMe $6/month $0.009/hour 1 CPU 1 GB Memory 1 TB Bandwidth; думаю справедливо. сам лично этим хостингом не пользуюсь, пользуюсь другим. стоит дебиан с 10GB за 3$, но мне много и не нужно, запросы у меня небольшие, не приходится мараться много об выверты systemd, раз nginx зарелоадить, раз tinyproxy также, ну и git.

parent From Anonymous (unverified) Sun Nov 14 23:51:00 2021 UTC pencil

В Дебиане

В Дебиане прижился. Причём вроде то ли с 9 версии, то ли с 10

parent From Anonymous (unverified) Thu Oct 14 18:03:00 2021 UTC pencil

В той же OpenBSD

В той же OpenBSD приходится каждый раз писать cd /dev; sh MAKEDEV sd или что-то такое.

Не вводите в заблуждение несведущих, для создания нового файла устройства MAKEDEV нужно написать лишь один раз.

Ну и да, если кому-то действительно нужно динамично создавать/удалять файлы устройств (и/или выполнять какие-то ещё команды, вроде вашего примера с клавиатурой), то нормальные шелл-скрипты смотрелись бы на месте udev (с его откровенно наркоманским синтаксисом) гораздо лучше.

parent From Anonymous (unverified) Sat Oct 16 04:44:00 2021 UTC pencil

OpenBSD

Ну, мне часто приходилось загружаться с bsd.rd и что-то там делать и там нужно было вводить эти команды именно каждый раз. В то же время в LiveCD с гнутым линуксом это было не нужно.

parent From admin profile Sat Oct 16 13:31:07 2021 UTC pencil

userpic

Подозреваю, в

Подозреваю, в исходном комментарии про "один раз" речь шла всё-таки о системе, инсталлированной на жёсткий диск. Что все эти "live" ничего не запоминают из того, что было сделано — не новость.

parent From Anonymous (unverified) Sat Oct 16 15:54:00 2021 UTC pencil

Безусловно, в

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

parent From Anonymous (unverified) Mon Nov 29 01:52:00 2021 UTC pencil

без udev

Откройте для себя сборку ядер Linux с CONFIG_DEVTMPFS=y и CONFIG_DEVTMPFS_MOUNT=y

parent From Anonymous (unverified) Mon Oct 25 12:11:00 2021 UTC pencil

Аудио в Linux

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

parent From admin profile Mon Oct 25 14:53:05 2021 UTC pencil

userpic

Я такого

Я такого никогда не пробовал (и не только на Паскале, вообще ни на каких языках), но точно знаю, что можно. Вот, например: https://wiki.freepascal.org/Audio_libraries

Только я сомневаюсь, что нужно. Разобраться с любой из этих библиотек довольно трудно, там задействуются нетривиальные части FreePascal, которые я в книге не рассматриваю принципиально (например, часть из них объектно-ориентированные, а я ООП отнюдь не случайно отложил до третьего тома). В общем это всё не для начинающих. Тот же модуль crt для начинающих вполне годится, но во FreePascal'е есть существенно более навороченные юниты для тех же целей — угадайте, чего это я про них ни слова не говорю. Всё-таки FreePascal я рассматриваю как учебное пособие, а не как инструмент.

parent From Anonymous (unverified) Mon Oct 25 16:00:00 2021 UTC pencil

То есть эту

То есть эту затею лучше отложить до Си/Си++?

parent From admin profile Mon Oct 25 16:20:39 2021 UTC pencil

userpic

Да, где-то так.

Да, где-то так. Не потому. что это лучше писать на Си или Си++, а просто потому, что к тому времени у вас мозги уже будут натренированы в нужную сторону и менее подвержены влиянию, извините за выражение, говнокода, которого в "профессиональных" библиотеках Free Pascal в избытке.

parent From Anonymous (unverified) Mon Oct 25 17:02:00 2021 UTC pencil

Понял, спасибо

Понял, спасибо

From unch profile Fri Sep 17 09:08:00 2021 UTC pencil

"(*p).next" vs "p->next"

на стр. 141 можно еще предложить пример с указателем на указатель в качестве аргумента в пользу "стрелки". Получается вообще клинопись:
"(*pp)->next" vs "(*(*pp)).next";

parent From admin profile Fri Sep 17 09:45:08 2021 UTC pencil

userpic

Вот как будто

Вот как будто без этого не клинопись. А в вашем примере вторые скобки вообще-то не нужны, так что получается не так уж и страшно, всего лишь (**pp).next.

From Anonymous (unverified) Mon Sep 13 12:19:00 2021 UTC pencil

виртуальная машина

Андрей Викторович можно узнать как переползти на другую ОС.
Просто я пользуюсь виндовс 10 и у меня много всего что на линксе работать не будет. Я прочитал что можно использовать virtualbox(все через виртуализацию ставят линукс или как ?)

parent From admin profile Mon Sep 13 13:51:00 2021 UTC pencil

userpic

Поскольку мы

Поскольку мы тут, по-видимому, обсуждаем обучение по моим книгам, я вынужден вас огорчить: если вы Linux поставите в виртуалке, ничего у вас не получится, жить вы в нём не станете и он не сыграет той роли, которая ему отведена в моей методике.

От этого "много всего", что "не будет работать", придётся отказаться. Либо отказаться от моих книг, всё равно толку не будет. Отказываться от привычного софта, впрочем, можно постепенно — например, загружать Win только в случаях, когда вот совсем никак не получается прямо здесь и сейчас что-то сделать без неё. И частота возникновения таких случаев должна постепенно падать. Linux (или другой Unix, скажем, FreeBSD или OpenBSD) следует воспринимать как основную систему, а не "учебную", в противном случае можно даже и не начинать дёргаться. Ну, или другие книги поискать, во всяком случае. Мои книги с повседневным использованием систем линейки Windows несовместимы.

parent From Anonymous (unverified) Mon Sep 13 15:12:00 2021 UTC pencil

ОК понял

ОК понял спасибо.

parent From Anonymous (unverified) Wed Sep 15 05:04:00 2021 UTC pencil

Windows

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

SSD (причём можно прошить даже тот с которого загружена ОС), флешки (если сдохли их иногда можно оживить утилитой от производителя), кнопочные мобильные телефоны (андроидовские прошиваются просто копированием zip-файла в определенный каталог на карте памяти и загрузкой в режиме Recovery).

Ещё есть класс задач типа — подсказать виндузятнику как что-то там сделать в Windows. Тут тоже желательно иметь её у себя на компе.

Ну и наконец — тестирование разных программ. Например проверить воспроизводится тот или иной баг в свободной программе в Windows и добавить это в баг-репорт. Не обязательно, но почему бы и нет?

parent From admin profile Wed Sep 15 09:35:13 2021 UTC pencil

userpic

Да у меня тоже

Да у меня тоже вообще-то есть ноутбук с XP :-) Правда, задача ровно одна: запускать софтины для генерации отчётов в налоговую и ПФР. Под wine они вроде тоже запускаются, но возникают странные проблемы с русским вводом (не разбирался, скорее всего это из-за того, что у меня koi8), а тот ноут всё равно больше мне ни подо что не нужен.

Дело не в том, что Windows нужно полностью изжить и не прикасаться к ней под страхом расстрела. Дело (если речь идёт об обучении по моим книжкам) в том, что _жить_ нужно под *nix'ом, и не просто жить, а обязательно использовать в роли основного инструмента управления машиной командную строку.

parent From Parthen profile Mon Sep 13 16:09:00 2021 UTC pencil

userpic

>много всего

>много всего что на линксе работать не будет
Прям уж?)
Просто есть такая программа, wine, и с помощью нее все прекраснейшим образом работает. Играл на ней в OSU, старые флеш игры и прочую фигню, работало *быстрее* чем на винде.
Ну и да, в это сложно поверить, но на Линуксе программ *гораздо* больше, банально потому, что консольные программы крайне просто писать.
По делу -- ставьте какой-нибудь дистр для чайников, там разберется даже домохозяйка. Можно в дуалбут (будете при загрузке ПК выбирать куда грузиться -- в Линукс или Винду), но скорее всего вы просто плюните, перезагружать каждый раз комп дело не быстрое.

parent From unch profile Mon Sep 13 18:21:00 2021 UTC pencil

мне кажется, вы

мне кажется, вы несколько категоричны ("...все прекраснейшим образом работает"), а ваш совет может навредить новичку:
1. далеко не каждый софт запустится под wine. Часто даже разные версии одной программы ведут себя по-разному при эмуляции.
2. даже запустившись, программа часто падает и ведет себя не стабильно.
3. базовая настройка wine требует определенных усилий.
PS: лично мне сложно найти альтернативы в *nix для систем сканирования-распознавания документов и программ для редактирования специфичной документации. И, пожалуй, стоит быть готовым к тому, что половина игр для винды не запустится под *nix.
PSS: я не очень понял, что значит "дистр для чайников"? Отдает снобизмом, не находите? Думаю, проблема не в конкретной *nix системе, а в отсутствии привычки читать мануалы (RTFM). Новичок, вооружившись мануалом и соответствующим настроением, поставит любую систему: от Linux Mint до OpenBSD. И, скорее всего, на первых порах, будет делать это несколько раз подряд.

parent From Parthen profile Tue Sep 14 16:40:00 2021 UTC pencil

userpic

>далеко не

>далеко не каждый софт запустится под wine. Часто даже разные версии одной программы ведут себя по-разному при эмуляции.
Каждый запустится, не каждый будет работать :)
А вообще я перечислил выше, что у меня работает хорошо.
> базовая настройка wine требует определенных усилий
На минте работало из коробки, на дебиане да.
>И, пожалуй, стоит быть готовым к тому, что половина игр для винды не запустится под *nix.
Вообще да, но тут внезапно приходит осознание, что к чертям большинство игр не нужно. Я даже в OSU не играю, осталось только 0 A.D (кстати никто больше не играет?), без стратегий жить не могу, а шахматы надоели.
>дистр для чайников
Дистр, который сложно поломать, и на котором минимально нужно что-то чинить.
>Новичок, вооружившись мануалом и соответствующим настроением, поставит любую систему: от Linux Mint до OpenBSD
Ага, щас :)
Это работает если человек а) умеет читать на английском б) хорошо понимает устройство ПК, читай знает CS.
Я несколько раз не мог осилить Арч, из-за отсутствия вообще какого-либо представления о разметке диска и незнания что такое GRUB.

parent From Anonymous (unverified) Wed Sep 15 13:01:00 2021 UTC pencil

хорошо

хорошо понимает устройство ПК, читай знает CS.

Я бы не стал обобщать "понимание устройства ПК" до "знания CS". CS -- это ещё и, например, дискретная математика, алгоритмы, теория вычислимости, теория категорий, и проч. Всего этого точно не нужно, чтобы установить ОС, пусть даже это и OpenBSD с текстовым инсталлятором.

parent From admin profile Wed Sep 15 13:53:16 2021 UTC pencil

userpic

Кстати да.

Кстати да. Больше того, я неоднократно видел людей, вроде бы знающих CS, но которые про DPT, например, не в курсе, и компьютер разобрать-собрать не могут.

parent From Anonymous (unverified) Fri Sep 17 00:15:00 2021 UTC pencil

DPT

Что такое DPT? Если аббревиатура, то можно полностью словами? Гуглится что-то невнятное.

parent From admin profile Fri Sep 17 08:40:09 2021 UTC pencil

userpic

Disk Partition Table

Disk Partition Table https://en.wikipedia.org/wiki/Disk_partitioning

parent From Anonymous (unverified) Fri Sep 17 15:04:00 2021 UTC pencil

DPT

Это странная аббревиатура. например MBR или GPT я бы понял, а так нет

Я как-то пробовал создавать флешку с бесконечным количеством разделов. Extended Partition может ссылаться сама на себя.

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

parent From admin profile Sat Sep 18 10:03:13 2021 UTC pencil

userpic

MBR не про то, это

MBR не про то, это скорее тот машинный код, который занимает начало того же (самого первого на диске) сектора, в конце которого располагается таблица разделов.

А GPT, кстати, вот я бы уже не понял. Во всяком случае, без обращения к поисковикам.

parent From Anonymous (unverified) Fri Nov 26 01:06:00 2021 UTC pencil

> MBR не про то,

> MBR не про то, это скорее тот машинный код

От какой машины код в карте памяти, которая вставлена в фотокамеру или портативную колонку?

parent From admin profile Fri Nov 26 10:23:45 2021 UTC pencil

userpic

От x86, причём

От x86, причём 16-битный. Если, конечно, код там есть; при создании загрузочного носителя этот кусок кода в любом случае обычно перезаписывают.

От того, куда эта карта вставлена, сие, понятным образом, никак не зависит.

parent From Parthen profile Wed Sep 15 16:12:00 2021 UTC pencil

userpic

Справедливо, не

Справедливо, не знаю как назвать дисциплину, разбирающую устройство ПК.
И не просто устройство, мол, вот это диск, а это ОЗУ, а именно что такое раздел, BIOS, шина, и проч.

parent From Anonymous (unverified) Wed Sep 15 13:11:00 2021 UTC pencil

>дистр для


>дистр для чайников
Дистр, который сложно поломать, и на котором минимально нужно что-то чинить.

Неоднозначное определение. Мне, например, поломать Ubuntu проще, чем поломать Slackware. А починить поломанное, наоборот, гораздо труднее.

Про "минимально нужно чинить" то же самое. В свежеустановленной Ubuntu мне с ходу хочется починить вообще всё.

parent From admin profile Wed Sep 15 13:54:00 2021 UTC pencil

userpic

> поломать Ubuntu

поломать Ubuntu проще

А ведь верно, причём в самом буквальном смысле. Там ведь по умолчанию есть sudo, и оно юзеру доступно без ограничений.

починить вообще всё

Видимо, самая главная неисправность заключается в неправильном выборе дистра перед установкой :-)

parent From Anonymous (unverified) Wed Sep 15 14:09:00 2021 UTC pencil

Видимо, самая

Видимо, самая главная неисправность заключается в неправильном выборе дистра перед установкой :-)
Дык! :-)

Справедливости ради, последний раз такая проблема возникала когда я ещё работал в офисе, на предустановленной убунте. Помучившись какое-то время, решил проблему именно что установкой другого дистра.

parent From Parthen profile Wed Sep 15 16:09:00 2021 UTC pencil

userpic

Поломать -- это

Поломать -- это и к установке относится :)
Хотя про Slackware я ничего не знаю.
Ну и да, убунта ни разу не для чайников.
Насчет поломать... Целенарпавленно ломать никто не будет, поломать можно что-то когда будешь настраивать, а значит настраивать нужно как можно меньше.

parent From admin profile Thu Sep 16 10:24:06 2021 UTC pencil

userpic

Да ладно, что

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

parent From Parthen profile Thu Sep 16 17:27:00 2021 UTC pencil

userpic

Вот у меня,

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

parent From admin profile Thu Sep 16 19:29:32 2021 UTC pencil

userpic

А если его

А если его зелёным сделать, как на очень многих исторических терминалах? Или вот амберным (таким приятно-оранжевым, действительно чуток на янтарь похоже), как на моём vt420? Или тут всё-таки не в цветах дело?

parent From Parthen profile Fri Sep 17 03:18:00 2021 UTC pencil

userpic

Нет не в цвете,

Нет не в цвете, именно что боязнь терминала.

parent From admin profile Fri Sep 17 08:41:07 2021 UTC pencil

userpic

Странно, за

Странно, за собой такого не помню. Ну хотя я с ДВК начинал :-)

parent From Oliver (unverified) Fri Sep 17 14:38:00 2021 UTC pencil

> боязнь

> боязнь терминала.

Часто у этого нет оснований, ибо какая разница, выбирать диск для установки в GUI и нажимать на кнопку "Далее" или установливать систему в текстовом режиме и, вместо кнопки "Далее", нажать предлагаемую кнопку на клавиатуре, чтоб выбрался нужный диск для установки? Но начинающий, разумеется, об этом и не догадывается... Но боится... Да, во время установки, например, OpenBSD есть свои особенности, но если в компе - один диск и делать авто разметку диска, ну тогда там все достаточно таки просто!

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

parent From lake (unverified) Fri Sep 17 19:10:00 2021 UTC pencil

Насчёт боязни

Я вот просто таки ненавижу если не боюсь графических установщиков. Можно галочку какую-то где то забыть или не увидеть или оно не сможет там отобразиться мало что там бывает.

А в терминале все можно зажурналировать и хоть 1000 раз потом перепроверить текстовый файл. Только терминал спасает меня от моей "ОКР", паранои и перфекционизма. И ещё я могу 2 часа выбирать имя переменной.

Привожу как просто альтернативную точку зрения.

Неужели нужно лечится и зарядится пофигизмом? И плохие ли это привычки для разработчика?

parent From admin profile Sat Sep 18 10:28:53 2021 UTC pencil

userpic

плохие ли это

плохие ли это привычки

Всё, что вы про терминал сказали, вполне себе так и есть. Что до двух часов на выбор имени переменной, то это, конечно, перебор; её же потом можно переименовать, вы её не на скрижалях высекаете.

parent From Anonymous (unverified) Wed Sep 15 14:00:00 2021 UTC pencil

немного оффтопа про игры, если уважаемый хозяин не против

Есть, кстати, сильно облегчённый опенсорсный клон OSU: https://github.com/fmang/oshu
Я сам, правда, на нём почти не играл. Только собрал себе под OpenBSD и попробовал запустить пару битмапов, чтобы убедиться, что всё работает.

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

без стратегий жить не могу, а шахматы надоели.
Wesnoth?

parent From Parthen profile Wed Sep 15 16:06:00 2021 UTC pencil

userpic

За OSU большое

За OSU большое спасибо, попробую
>Wesnoth
Да мне как раз пошаговость в том числе и наскучила. Хотя выглядит интересно, тоже попробую

parent From Anonymous (unverified) Wed Sep 15 04:54:00 2021 UTC pencil

OpenBSD для чайников

Пробовал я поставить OpenBSD на старый комп с одно-гигабайтным IDE-диском. Если не ставить иксовые группы и компиляторы — то оно, конечно работает. А вот если ставить (для чего применить внешний USB-диск) — то вот фиг вам:

BIOS загрузчик OpenBSD с него грузит, но загрузчик не видит файлов с ядром.

Тогда я попробовал для файлов с ядром создать на IDE-диске небольшой раздел OpenBSD.

В этом случае, загрузчик файлы видит, грузит ядро, но ядро думает, что корневой раздел — это тот, откуда его загрузили, маленький на несколько мегабайт.

Если дать ядру параметр -a, то оно будет спрашивать какой взять корневой раздел, но когда оно это спрашивает, оно не видит USB-клавиатуру. Хотя в BIOS и в загрузчике OpenBSD и даже после загрузки она работает.

При этом в Slackware грузится с USB-диска и работает штатно причём с ядром 5.x на древнем компе начала 2000-х, да.

parent From admin profile Wed Sep 15 09:30:11 2021 UTC pencil

userpic

По моим

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

parent From Anonymous (unverified) Sat Sep 18 11:52:00 2021 UTC pencil

IDE-диск

Там он нестандартного типа. Другой достать можно, но это того не стоит

parent From Anonymous (unverified) Wed Nov 10 17:41:00 2021 UTC pencil

Я в подобном

Я в подобном случае ставил систему на диск, а загружался с загрузочной дискеты, которая указывала диск с системой

parent From admin profile Wed Nov 10 18:46:21 2021 UTC pencil

userpic

Вот с живыми

Вот с живыми дискетами и дисководами реально сейчас могут быть проблемы.

parent From Alejandro (unverified) Mon Sep 13 18:21:00 2021 UTC pencil

> wineА как он с

> wine
А как он с современными программами справляется, не знаете?

> консольные программы крайне просто писать
Не согласен. Под unix проще и приятнее писать любые программы :)

Можно, кстати, как советует Андрей Викторович, найти или купить старый ноутбук и поставить туда linux. Если ноутбук совсем дряхлый, то это ему может буквально вторую жизнь дать.

parent From Parthen profile Tue Sep 14 16:29:00 2021 UTC pencil

userpic

> А как он с

> А как он с современными программами справляется, не знаете?
Смотря какими. ААА игры -- плохо без настройки, лучши стимовский протон использовать. Всякая хрень с DRM туда же. Ну а все остальное сносно :)
>Под unix проще и приятнее писать любые программы
Я с UI программ под Линукс не писал, так что говорить не буду.

parent From admin profile Tue Sep 14 18:05:06 2021 UTC pencil

userpic

Я и писал, и под

Я и писал, и под Win/* перетаскивал. И нативные виндовые когда-то тоже писал. Подтверждаю, под *nix GUI программировать намного менее противно, чем под win :-)

parent From Oliver (unverified) Thu Sep 16 09:34:00 2021 UTC pencil

> много всего

> много всего что на линксе работать не будет

Что в это "много всего" входит?

Разумеется, есть программы, которых нет под Линукс, но все-таки часто оказывается, что пользователь Виндовс запускает в своей системе программы, которые можно запустить либо на Wine под Линукс, либо для которых есть альтернатива на Линукс, либо которые на самом деле не шипко то и нужны ему, но привычка делает свое дело. Я не утверждаю, что это - именно Ваш случай, но... Я в свое время жил в Виндовс и мне казалось, что вот без некоторых программ, которые я на нем запускал, будет не просто. Я разумеется заблуждался, и когда совершал переход на Линукс, нашел для своих задач альернативу на Линукс. Оказалось, что все дело - в привычке и в моем заблуждении, что мол на Виндовс есть все, а на Линукс - нет ничего. Еще раз замечу: не берусь утверждать, что это - именно Ваш случай, я лишь делюсь своим опытом... Во всяком случае, я - очень доволен, что слез с Виндовс, потратив на это сравнительно не так уж и много усилий, чтоб изменить привычкам и отбросить свое заблуждение: потраченные усилия и время стоят того!

From baoLuck (unverified) Thu Sep 9 14:06:00 2021 UTC pencil

небольшое замечание

Добрый день. в третьем томе в примере на странице 194 не нужно ли передавать в качестве параметров координаты в функцию Hide(), я понимаю, что на общее восприятие примера это не влияет, но все же, откуда функция узнает, откуда ей стирать точку или окружность?

п. с.: с уважением и огромной признательностью за ваш невообразимый труд и прекрасное пособие

parent From admin profile Thu Sep 9 20:33:47 2021 UTC pencil

userpic

Ну здрасссте.

А ничего, что эта функция — метод объекта, вызывается для объекта и имеет доступ к полям объекта?

Вообще когда такие вопросы возникают, обычно это значит, что за ООП вы схватились слишком рано.

From Uko1ove (unverified) Mon Sep 6 09:20:00 2021 UTC pencil

2 книга предыдущего издания

Спасибо вам огромное за ваши труды. У меня вопрос: второй том про низкоуровневое программирование не вошёл во 2-е издание. А почему так? Разве его теперь не стоит изучать, чтобы пойти дальше в сети и парадигмы? Спасибо =)
P.S. ну и капчи у вас, я и сам далеко не с первого раза отправил).

parent From admin profile Mon Sep 6 11:58:00 2021 UTC pencil

userpic

ёлки-моталки,

ёлки-моталки, смотрим сюда: http://www.stolyarov.info/books/programming_intro проматываем полэкрана вниз, видим текст, выделенный фоном и жирным шрифтом:

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

У меня встречный вопрос, а какая вам разница, что там и куда вошло или не вошло, зачем вам вообще книги, если вы читать не умеете?

From Anonymous (unverified) Mon Aug 30 13:18:00 2021 UTC pencil

Язык ассемблера, побитовые операции, оператор and

В вашей книге есть примеры с оператором and:
Так, с помощью команды and можно получить остаток от деления беззнакового числа на степень двойки (от 1 до 32 степени); например, "and eax, 3" оставит в eax остаток от деления его исходного значения на 4, а "and eax, 1fh" - остаток от деления на 32.
Не могу понять, как это получается;
Возьмем число 255 (1111 1111 в двоичной системе) и выполним операцию and с той же тройкой (0000 0011). В регистре останется тройка, так как только на первых двух позициях в обоих числах есть единицы. Также с числом 31. Или я что-то путаю?

parent From admin profile Mon Aug 30 15:33:14 2021 UTC pencil

userpic

Конечно,

Конечно, путаете:

Возьмем число 255 (1111 1111 в двоичной системе) и выполним операцию and с той же тройкой (0000 0011). В регистре останется тройка,

Ну так остаток-то мы искали не от деления на три, а от деления на четыре. И ага, остаток от деления 255 на четыре составляет таки три, тут всё верно.

Также с числом 31

Абсолютно верно, и получается остаток от деления на 32. Как это и написано в книге, собственно говоря.

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

Кстати, and никакой не оператор. В ассемблере вообще нет операторов.

parent From Anonymous (unverified) Tue Jan 25 12:36:00 2022 UTC pencil

А можете,

А можете, пожалуйста, подсказать, как это получается (математически), то есть откуда пошло правило ("чтобы получить остаток от деления на степень двойки, надо взять эту степень двойки, вычесть из неё единицу и полученное число наложить на первый операнд в качестве маски с помощью and")?

parent From admin profile Sat Jan 29 15:21:08 2022 UTC pencil

userpic

Ну вот

Ну вот смотрите, начнём с понятной всем десятичной системы. Чтобы получить остаток от деления на N-ю степень основания системы счисления, надо тупо и цинично взять младшие N цифр, в десятичном случае остаток от деления на 10 -- одна младшая циферка, от деления на 100 -- две младшие циферки, от деления на 1000 -- три циферки и т.д. Например, для числа 453781 соответствующие остатки будут 1, 81, 781, 3781, 53781 и (при делении на миллион и все бОльшие степени десятки) 453781.

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

Далее, в системе счисления по любому основанию B запись числа вида B^k-1 (т.е. берём основание системы, возводим в k-ю степень, вычитаем единичку) будет состоять из k максимальных цифр. Например, в десятичной системе максимальная цифра -- девятка, соответсвующие числа будут 9, 99, 999, 9999 и т.д., например 10 возвести в шестую и вычесть один будет, натурально, шесть девяток.

А вот теперь, собственно, особенность именно двоичной системы. Максимальная цифра тут -- единица. Так что два в k-й степени и вычесть единицу -- это прямо-таки k единиц. Вот прямо такая маска, которая нам нужна, чтобы выделить k младших разрядов, т.е. k младших цифр числа, которые, как мы уже разобрались, и есть остаток от деления на два а k-й степени.

Уж не знаю, насколько это "математически" :-)

parent From Anonymous (unverified) Sun Jan 30 08:22:00 2022 UTC pencil

Теперь понял.

Теперь понял. Огромное вам спасибо!

parent From Anonymous (unverified) Sat Feb 12 18:28:00 2022 UTC pencil

and никакой не

and никакой не оператор. В ассемблере вообще нет операторов.

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

parent From admin profile Mon Feb 14 09:28:02 2022 UTC pencil

userpic

Рекомендую

Рекомендую уяснить разницу между английским термином operator и русским словом оператор, который, если речь идёт о программировании, по-английски будет statement. Английское operator переводится словом «операция».

From Anonymous (unverified) Sun Aug 15 09:58:00 2021 UTC pencil

Здравствуйте!

Здравствуйте! Очень заинтересовал ваш трехтомник ("Программирование: введение в профессию"). Вопрос: можно ли начать восьмикласснику его читать?

parent From admin profile Sun Aug 15 12:50:00 2021 UTC pencil

userpic

Странная постановка вопроса

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

С другой стороны, вам тогда надлежить быть готовыми к обеспечению материальной базы. Вряд ли обычный восьмиклассник (если только это не совсем особый случай) самостоятельно поставит на компьютер Linux. Ну а без этого мои книжки, опять-таки, бесполезны.

parent From Anonymous (unverified) Mon Aug 16 05:43:00 2021 UTC pencil

А чем в этом

А чем в этом вопросе взрослый, но никогда линукса не видевший отличается от восьмиклассника?

Мне кажется, я бы поставил, если бы мне предоставили диск с линуксом и мануал на русском, где написано что и как и какие команды что значат. Но на самом деле нет, так как я вообще не знал где взять диск с ОС в то время. Вот дисков с играми для приставок, компа, музыкой, фильмами было полно — на каждом углу, а вот почему-то диск с линуксом первый я добыл только на заказ, в три раза дороже чем если бы он был с виндой и к тому же, как оказалось, устаревшей на 5 лет версии. Но сейчас-то с этим легче, не нужно искать именно с линуксом, достаточно любую флешку купить и скачать любой дистр по широкополосному инету за 20 минут.

parent From admin profile Mon Aug 16 11:50:36 2021 UTC pencil

userpic

А чёрт знает,

А чёрт знает, может, и ничем не отличается. Я не так много общаюсь с восьмиклассниками.

parent From Parthen profile Mon Aug 16 17:37:00 2021 UTC pencil

userpic

>мануал на

>мануал на русском
"Это все фигня на самом деле" (с)
Я, десятиклассник возился с арчем и несчастной его вики, но вечно возникает проблема отсутствия опыта ПК, когда ты в принципе не знаешь некоторых элементарных знаний о ПК.
И таки да, научился я по роликам на ютубе, смотря как другие делают, а к вики обращался только для уточнения.
Вообще, имхо, идеальный способ -- поставить Devuan (netinstall) без DE, поставить иксы, i3wm и терминальчик по вкусу. Это все крайне просто, при этом не ставится ничего лишнего.

parent From Anonymous (unverified) Tue Aug 17 01:18:00 2021 UTC pencil

Slackware

Начинающему наоборот лучше поставить побольше всего, чтобы было что изучать. Я бы предложил full install Slackware, тем более что как раз 15-й релиз заморозили.

А там есть несколько DE и оконных менеджеров на выбор.

parent From admin profile Tue Aug 17 13:43:02 2021 UTC pencil

userpic

Когда-то очень

Когда-то очень давно, в 1994 году, Slackware стала моей первой Linux-дистрибуцией (да, блин, ставил с дискет! да!) Но тогда и железо было попроще, и в соседней лабе присутствовал линуксовый гуру, периодически выдававший мне пинка в нужном направлении. Сейчас, я бы сказал, Slackware — это по-прежнему один из лучших дистров, но всё-таки не для новичка, да ещё восьмиклассника.

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

parent From Anonymous (unverified) Sat Aug 21 11:47:00 2021 UTC pencil

> А выбор из

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

Да, но обычно ставится один, например третий гном, и для других надо специально их ставить.

> Но тогда и железо было попроще, и в соседней лабе присутствовал линуксовый гуру, периодически выдававший мне пинка в нужном направлении.

Ну да, гуру не помешает на первых порах. Но насчёт железа — оно конечно было попроще, но установка и настройка железа была сложнее. Сейчас например иксы в 95% случаев просто запустятся в нужном разрешении и с 3D-ускорением по команде startx без всяких modeline-в в xorg.conf. Никаких IRQ не нужно настраивать (а я даже толком не знаю что это такое), всё автоматом.

> но всё-таки не для новичка, да ещё восьмиклассника.

Ну не знаю. Не сложнее Debian с netinstall, а на мой взгляд даже намного проще. Единственная сложность — разметка диска, но она в любом дистрибутиве есть. На мой взгляд, размечать диск отдельно от установки с помощью fdisk, cfdisk или parted куда удобнее.

Ну и да, надо по-английски уметь читать.

parent From admin profile Sat Aug 21 16:26:00 2021 UTC pencil

userpic

"Специально

"Специально ставить" — это обычно одна команда.

Вообще если уж залезли так глубоко, попробуйте сразу сползти с systemd, эта штука мертворожденная и неизбежно в какой-то момент начинает жутко мешать. Если уже более-менее освоились с Debian, попробуйте вместо него Devuan взгромоздить — всё то же самое, только никакого systemd. Ну а если уже сидите на Slackware, то на ней и оставайтесь, лучше, пожалуй, сейчас мало что есть.

parent From Anonymous (unverified) Tue Aug 24 11:27:00 2021 UTC pencil

Slackware

Подозреваю, что лучше нет вообще ничего. По крайней мере, когда я пробовал Debian (до перехода на systemd), он был хуже. Там например сегфолтилась графическая фигня из гнома для настройки Wi-Fi, тогда как в Slackware Wi-Fi настраивался через прямое редактирование /etc/wpa_supplicant.conf и там было просто нечему сегфолтиться. Потом поставил Ubuntu 10.04 и она оказалась стабильнее чем дебиан, ничего не падало, не смотря на те же примерно версии софта. Инсталлятор дебиана тоже какой-то кривой и неудобный.

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

install-system --root /dev/sda1 --root-size 12G --swap /dev/sda2 --swap-size 2G --home /dev/sda3 --filesystem /tmp --filesystem-size 1G --filesystem-type tmpfs --install full --save-log /root/install.log && reboot

И уходишь пить чай, например, а когда возвращаешься — всё уже установлено, перезагружено, и можно работать в уже установленной системе. Размер /home не указан, значит он займёт всё свободное место после swap-раздела.

Как вариант, можно сделать полу-интерактивный инсталлятор, где все настройки задаются в одном окошке, а затем нажимаешь кнопку install и всё. Нет, надо почему-то всем надо было сделать "Мастер установки" как в Windows. Хорошо хоть обычный софт ставится одной командой без "мастеров". Но почему саму систему нельзя тоже ставить одной командой с загрузочного носителя — это мне не ясно. Всё что можно без потерь настроить уже после установки — в инсталляторе не нужно. В дебиане же сделали крайне навороченный и развесистый инсталлер который сам по себе состоит из множества динамических подгружаемых модулей в пакетах формата udeb... Ну вот зачем?

Slackware правда этому идеалу не очень соответствует в плане установщика, но подобный установщик я видел только у CRUX, а там свои проблемы. главным образом в том что мейнтенеров и пакетов мало и почти весь софт нужно собирать, вникая в детали сборки из исходников. А так он бы был лучше чем Slackware. А у всяких kiss-дистров проблемы те же — пакетов мало.

parent From admin profile Tue Aug 24 17:45:44 2021 UTC pencil

userpic

Я вот одного не

Я вот одного не понял, а кто вам мешает в дебиане снести ко всем чертям NetworkManager и редактировать /etc/wpa_supplicant.conf руками? Я, в общем, так и делаю, с той разницей, что у меня Devuan.

parent From Oliver (unverified) Sat Aug 21 07:46:00 2021 UTC pencil

Вообще, имхо,

Вообще, имхо, идеальный способ -- поставить Devuan (netinstall) без DE, поставить иксы, i3wm и терминальчик по вкусу. Это все крайне просто, при этом не ставится ничего лишнего.

-------------------------------------------------------

Самому начинающему ничего более Минта/Убунту/MX Linux, например, не надо для создания соответствуюущей операционной среды, чтоб изучать программирование по книгам уважаемого автора сайта! На первых шагах пугать людей не надо!

А чтоб не было проблем с установкой дистра типо Арч, да, пригодится знать заранее некоторые вещи. Есть бесплатная книжка от Пола Коббаута: она так же состоит из несколько частей. Так вот в ней Вы и любой другой желающий найдет те базовые вещи, которые очень упростили бы лично Вам установку того же Арча.

parent From Parthen profile Sat Aug 21 11:03:00 2021 UTC pencil

userpic

>Самому

>Самому начинающему ничего более Минта/Убунту/MX Linux, например, не надо для создания соответствуюущей операционной среды, чтоб изучать программирование по книгам уважаемого автора сайта! На первых шагах пугать людей не надо!
Да я не спорю, но потом-то надо привыкать к нормальному.

parent From Oliver (unverified) Sun Aug 22 04:57:00 2021 UTC pencil

>Да я не спорю,

>Да я не спорю, но потом-то надо привыкать к нормальному.

Ну это уже будет зависить от каждого конкретного человек.

parent From Anonymous (unverified) Wed Aug 25 18:29:00 2021 UTC pencil

диск с линуксом

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

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

А чуть позже в местном гнезде линуксоидов (они гнездились на центральном узле телефонной связи тогда у нас) мне "нарезали" (записали на CD, согласно тогдашнему жаргону) очередную свежую версию дебиана. А я в благодарность поставил им литровую пачку сока, по фидошной традиции.

А ещё позже, вроде бы, убунту рассылали по почте тоже безвозмездно, то есть даром.

parent From Anonymous (unverified) Sat Aug 21 13:39:00 2021 UTC pencil

Простите, неправильно объяснился

Простите, неправильно объяснился; я (восьмиклассник) смог поставить linux. Сижу на нем уже как 3 месяца, но со стороны родителей и друзей идет некое "давление", мол в 21 веке нечего делать на Unix-системах ("скачай delphi и делай программы под windows, консольный интерфейс - никуда не годится"). Поэтому и был вопрос, можно ли начать изучение программирования с этих книг в этот период (может, еще рановато). Определенно, к книгам я вернусь; хотел узнать вашего мнения по этому поводу.

parent From admin profile Sat Aug 21 16:17:00 2021 UTC pencil

userpic

А, ну тогда

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

Что до интерфейсов — то это как раз графические интерфейсы никуда не годятся, и в книге написано, почему. На всякий случай добавлю, что видел своими глазами, как людей брали на работу на неплохие (для них на тот момент) деньги только лишь за то, что они могли справиться с командной строкой. Человек, знающий *nix-системы и умеющий с ними обращаться, справится с чем угодно, а вот люди, уверенные, что "знают" Windows, очень часто не могут справиться и с Windows тоже, про другие системы и говорить нечего. А от Unix на самом деле сейчас совершенно некуда деваться, серверные машины, обслуживающие Интернет — это практически всегда тот или иной Unix, и когда персонаж, позиционирующий себя как "крутой айтишник", приходит в ужас и впадает в ступор от необходимости что-то сделать удалённо с серверной машиной — это было бы смешно, когда бы не было так грустно.

Так что могу только пожелать успехов. Будут вопросы — заходите сюда и задавайте :-)

parent From Anonymous (unverified) Sat Aug 21 16:33:00 2021 UTC pencil

Понял, спасибо)

Понял, спасибо)

parent From 8Class (unverified) Sun Aug 22 05:38:00 2021 UTC pencil

Куда выкладывать программы

Снова я. Хотел уточнить, куда именно можно выкладывать свои работы (исходный код + откомпилированная программа)? Может какой сайт для этого есть?
Github? Или пока в облачном хранилище (по типу Google disk) размещать, потом кому-нибудь скинуть на него ссылку?

parent From admin profile Sun Aug 22 11:56:21 2021 UTC pencil

userpic

А с какой целью

А с какой целью вы их хотите выкладывать? Вы уже сделали что-то такое, что для других пользователей может представлять ценность? Если так, то стоит, наверное, завести свой сайт.

По поводу Google Drive, Yandex Disk и прочих подобных "файлопомоек" — ну кто как, а лично я на них принципиально не хожу. Google Drive у меня вообще заблокирован на домашнем роутере вместе с Google Docs, чтобы не попасть туда даже случайно.

parent From Oliver (unverified) Sun Aug 22 04:59:00 2021 UTC pencil

> Сижу на нем

> Сижу на нем уже как 3 месяца, но со стороны родителей и друзей идет некое "давление", мол в 21 веке нечего делать на Unix-системах

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

parent From 8Class (unverified) Fri Aug 27 11:14:00 2021 UTC pencil

Отец (по

Отец (по профессии - инжинер) в юности делал программы на Delphi, говорит зарабатывал (сам я пока не преследую таких целей, да и опыта нет). По его мнению, бесплатный Linux никому не сдался, ведь большая часть сидит на винде; + по книгам программированию не учатся (бери язык и гугли проблемы).
Я знаю, что просто читать книги - бессмысленно, поэтому тренеруюсь;
В итоге, отцу не нравится интерфейс программы (а где нормальное ОКНО?).

parent From admin profile Fri Aug 27 15:49:00 2021 UTC pencil

userpic

Ага, конечно

Действительность устроена с точностью до наоборот; если что, программисты, умеющие *nix, ценятся раза в три выше чисто по размеру зарплаты, для дельфиста сейчас 100тыр потолок, а когда в резюме имеет место, например, сочетание Linux, C++ и Qt, это запросто может быть и 350, и выше (лично я Qt люто ненавижу, как и всех монстров, но реальности это не меняет). Принципиальная разница между такими людьми в том, что вот этот вот спец по Linux, C++ и Qt, если припрёт, за дельфи сядет и всё, что надо, сваяет, потратив от силы пару дней на "освоиться", а вот в обратную сторону переход, как мы понимаем, практически нереален.

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

За вас вашу жизнь никто не проживёт, стройте её сами.

parent From Oliver (unverified) Mon Aug 30 07:25:00 2021 UTC pencil

> ...бесплатный

> ...бесплатный Linux никому не сдался, ведь большая часть сидит на винде...

Сервера в мире в основном работают на именно что бесплатном Линуксе. Так что уже по этой одной причине утверждение о том, что мол бесплатный Линукс никому не нужен - не верно в корне. Да и, кроме серверов, в мире - миллионы пользвателей Линукса на десктопах. И не зря: на десктопах Линукс - также превосходит винду. Так что, это - как раз тот случай, когда бесплатный Линукс - лучше платной винды. Но среди людей бытует заблуждение, что платность винды каким-то образом делает ее лучше бесплатного Линукса. И это - одна из причин, по которой люди не спешат для себя открывать Линукс (другая - Виндовс тупо насаждается пользователям компов начиная со школьного возвраста).

parent From admin profile Mon Aug 30 15:21:00 2021 UTC pencil

userpic

Кстати, the majority

Кстати, the majority is always wrong. Конкретно в применении к инфотехнологиям -- обсуждалось тут http://stolyarov.info/guestbook/archive/2#comment-1896 А так вообще рекомендую фразу "the majority is always wrong" забить в поисковик.

parent From Anonymous (unverified) Wed Sep 1 13:11:00 2021 UTC pencil

majority is always wrong

“Whenever you find yourself on the side of the majority, it is time to reform (or pause and reflect).”
― Mark Twain

parent From Parthen profile Wed Sep 1 14:21:00 2021 UTC pencil

userpic

Интересно

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

parent From Anonymous (unverified) Wed Sep 1 14:55:00 2021 UTC pencil

Хотя, конечно,

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

PS. Если что, это я оставлял ссылку на Юдковского тут два года назад. Надо бы уже зарегистрироваться, что ли...

parent From admin profile Wed Sep 1 15:16:18 2021 UTC pencil

userpic

Насчёт двух ног

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

parent From Anonymous (unverified) Wed Sep 1 15:26:00 2021 UTC pencil

Насчёт одежды

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

parent From admin profile Wed Sep 1 16:14:08 2021 UTC pencil

userpic

Я вполне

Я вполне допускаю, что они правы.

parent From Anonymous (unverified) Thu Sep 2 11:42:00 2021 UTC pencil

"Допускаю, что

"Допускаю, что они правы" -- это не совсем тот вывод, который логически вытекает из тезиса "the majority is always wrong". Правильным выводом, если уж мы приняли этот тезис, будет то, что я или вы, находясь в том большинстве, которое носит обувь, заведомо и однозначно ошибаемся.

parent From admin profile Fri Sep 3 11:21:43 2021 UTC pencil

userpic

Мне почему-то

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

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

Только не надо задавать вопрос, чего же это я тогда за ними не последовал. Вот, скажем, сторонники ЗОЖ правы вообще без вариантов, видел я, какие они здоровые :-) но лично мне, увы, силы воли не хватит отказаться от бОльшей части привычной еды и ежедневно круглый год тратить минимум полтора-два часа на физические нагрузки. Да и на DVORAK я не перешёл и вряд ли перейду, это же не один месяц переучиваться надо.

parent From Anonymous (unverified) Fri Sep 3 16:03:00 2021 UTC pencil

Да и на DVORAK я не

Да и на DVORAK я не перешёл и вряд ли перейду, это же не один месяц переучиваться надо.

Я, когда решил перейти с qwerty на colemak, тоже готовился несколько месяцев страдать. А на самом деле через пару недель уже не испытывал особого дискомфорта.

parent From Parthen profile Sat Sep 4 16:40:00 2021 UTC pencil

userpic

Меня даже

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

parent From admin profile Sun Sep 5 07:18:41 2021 UTC pencil

userpic

Это, как ни

Это, как ни странно, может даже не быть проблемой. Когда я учился на первом курсе (давно дело было), в какой-то момент приходилось работать с тремя (!) разными раскладками латиницы, причём бывало так, что в один день приходилось потрогать все три, и ничего, как-то выжил. Правда, я тогда всё-таки на клавиатуру смотрел.

parent From Anonymous (unverified) Sun Sep 5 15:45:00 2021 UTC pencil

Я на colemak'е

Я на colemak'е печатаю вслепую touch typing'ом. А на qwerty беспорядочно и подгядывая иногда на клавиатуру. На qwerty, конечно, получается медленнее. Но всё равно быстрее среднестатистического пользователя, печатающего двумя с половиной пальцами. И да, раскладки у меня в голове не путаются, и друг другу не мешают, лежат отдельно друг от друга.

parent From Anonymous (unverified) Sun Sep 5 15:35:00 2021 UTC pencil

Мозги -- очень

Мозги -- очень мощная и гибкая штука. По отзывам людей, умеющих печатать вслепую и на qwerty, и на какой-нибудь более приличной раскладке, полное переключение раскладки в мозге у них происходит максимум через несколько минут после начала печати. (Думаю, не нужно говорить, что переходить на альтернативную раскладку, но не использовать на ней touch typing, никакого смысла не имеет.)

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

Меня даже больше не переход пугает, а то, что на остальных компах не моя раскладка будет.

А вообще, конечно, это вот "меня пугает, что у меня будет не как у всех" -- один из основных тормозов прогресса.

parent From Anonymous (unverified) Sun Jan 9 16:55:00 2022 UTC pencil

Dvorak

Кстати, если посмотреть на Dvorak, то будет очевидно, что на ней исключительно неудобно набирать команду ls, а уж с ls -l и вовсе какое-то извращение получается.

parent From admin profile Sun Jan 9 17:04:00 2022 UTC pencil

userpic

Вот прям как

Вот прям как будто сейчас (в смысле на qwerty) удобно набирать cd.

parent From Anonymous (unverified) Sun Jan 9 18:46:00 2022 UTC pencil

cd на qwerty таки не

cd на qwerty таки не настолько неудобно.

На colemak'е, кстати, и ls, и cd вполне удобно набираются. Была у меня мысль, что dvorak, с его принципом чредования рук, лучше чем colemak. Но вот, видимо, для привычной работы в юниксовой консоли всё-таки не лучше.

parent From Alejandro (unverified) Thu Jan 27 08:42:00 2022 UTC pencil

cd на qwerty

cd на qwerty неудобно набирать, серьёзно? У меня (в силу привычек) при работе с клавиатурой пальцы левой руки почти всегда находятся в районе клавиш wasd, cd набирается указательным и средним почти мгновенно.

parent From admin profile Sat Jan 29 16:02:01 2022 UTC pencil

userpic

Дык это, по

Дык это, по канонам слепой печати их обе нужно набирать средним, вот в чём проблема :-) Так-то я и сам их указательным и средним набираю, и в таком виде никаких неудобств это не доставляет.

parent From Parthen profile Thu Sep 2 18:29:00 2021 UTC pencil

userpic

И они в

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

parent From Anonymous (unverified) Fri Sep 3 01:13:00 2021 UTC pencil

Мне кажется,

Мне кажется, что правило «Majority is always wrong» имеет исключения, то есть всё-таки не всегда большинство не право.

Оно действует если у альтернативы есть какое-то более-менее значительное число последователей. Если же их какие-то сотые или тысячные доли процента или меньше, то их альтернатива не обязательно лучше.

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

parent From admin profile Fri Sep 3 11:13:23 2021 UTC pencil

userpic

Вообще говоря,

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

parent From Anonymous (unverified) Sat Sep 4 12:54:00 2021 UTC pencil

<бери язык и

<бери язык и гугли проблемы>
С таким подходом будет специалист уровня "знаю, когда какие кнопки нажимать"

parent From Anonymous (unverified) Wed Aug 25 18:11:00 2021 UTC pencil

но со стороны

но со стороны родителей и друзей идет некое "давление"

Держитесь!

Я не говорю "никого не слушайте", но слушая кого-либо, всегда подвергайте услышанное сомнению и дальнейшему критическому осмыслению.

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

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

parent From 8Class (unverified) Fri Aug 27 12:09:00 2021 UTC pencil

Вас понял,

Вас понял, спасибо за совет!

From Anonymous (unverified) Sat Aug 7 05:03:00 2021 UTC pencil

том 1, 416-417

Довольно короткий код разорван на две страницы. Это не очень красиво.

parent From admin profile Sat Aug 7 06:46:11 2021 UTC pencil

userpic

При имеющемся

При имеющемся объёме книги выловить все подобные ситуации нереально. Окружение verbatim — штука особая и всяким clubpenalty/widowpenalty не подчиняется.

From Anonymous (unverified) Tue Aug 3 12:44:00 2021 UTC pencil

rust

Очень интересно узнать мнение автора о ЯП rust. Стоит ли на него время тратить или C++ он не заменит?

parent From admin profile Tue Aug 3 13:19:22 2021 UTC pencil

userpic

Ничего он не

Ничего он не заменит и вообще ни на что не годен, только мозги изуродуете.

parent From Anonymous (unverified) Mon Aug 30 10:06:00 2021 UTC pencil

Rust вроде сейчас

Rust вроде сейчас активно продвигают и даже внедряют как ЯП для разработки ядра Linux наряду с C?

parent From admin profile Mon Aug 30 15:26:19 2021 UTC pencil

userpic

Не "продвигают",

Не "продвигают", а конкретно гугл продвигает. Одновременно прогрессивная общественность гадает, чего это Торвальдс молчит и сколько ему за это заплатили, и готовится отступать на заранее подготовленные позиции в виде BSD-систем. Поскольку ядро Linux после внедрения туда раста станет тоже ни на что не годно.

Что-то сдаётся мне, зря вы на мой сайт забрели, в интернете много других сайтов.

From Anonymous (unverified) Fri Jul 16 03:54:00 2021 UTC pencil

Том 1, страница

Том 1, страница 191
> Рассмотрим теперь функцию g(n)=f_n(n) + 1. Ясно, что в любом разумном смысле такая функция вычислима

А вот не ясно. То есть, +1-то конечно вычислимо, но мы тут используем ещё одну операцию — индексацию, то есть выбор функции из множества вычислимых функций по её номеру.

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

Если же мы возьмём дырявую индексацию, которая точно вычислима (например каждый алгоритм представим в виде 256-ричного числа, соответствующего байтам его записи в UTF-8), то далеко не всякому натуральному числу будет соответствовать осмысленный алгоритм, поскольку мы нумеруем все возможные последовательности байт, соответственно для многих n, посчитать g(n) будет невозможно, поскольку мы как правило не сможем скомпилировать какие-то случайные байты.

То есть, даже если все f_n вычислимы и их множество счётное, g() не вычислимо, и не входит в последовательность f_n. То есть не вижу никакого противоречия.

parent From admin profile Fri Jul 16 16:23:00 2021 UTC pencil

userpic

Никаких

Никаких "дырявых индексаций". Я вообще в этой области не бог весть какой спец, но множество алгоритмов относится не просто к счётным, а к рекурсивно перечислимым, что заведомо означает разрешимость задачи о вычислении номера заданного алгоритма — в смысле, существует такое ВЗАИМНО ОДНОЗНАЧНОЕ (!) соответствие между натуральными числами и алгоритмами, что по любому алгоритму можно установить его номер. Например, тупо запустив ту "рекурсивную перечислялку", из-за которой алгоритмы рекурсивно перечислимы, и дождаться, пока она выплюнет нужный алгоритм, одновременно пересчитав все, которые она успеет выплюнуть до него. Ждать, конечно, придётся долго, но в ЭТОЙ части теории "долго ждать" никого не смущает.

Про перечислимые множества — например, тут.

UPD: пардон, вы про функции, я про алгоритмы — но сути это не меняет, вычислимые функции тоже рекурсивно перечислимы.

parent From Anonymous (unverified) Sat Jul 17 08:55:00 2021 UTC pencil

Вычислимые функции

> но сути это не меняет, вычислимые функции тоже рекурсивно перечислимы.

Вычислимые функции в определении (которое вы пытаетесь опровергнуть) должны быть определены на любом аргументе принадлежащем N.

А вот насчёт того что можно перечислить все такие функцию по порядку — вот тут мне кажется, что не выйдет. Множество-то их счётное, но как вы их проиндексируете? Именно функции, определенные на всём множестве N и при этом вычислимые.

Пример функции которую будет трудно проиндексировать — функция first_twin(n), возвращающая первое число из n-ой пары простых чисел близнецов. До сих пор математики не знают, конечно количество близнецов или бесконечно, значит мы не знаем, входит ли эта функция в нашу последовательность {f_n}. Например, модифицированное решето Эратосфена, которое отсеивает не-близнецов может на каком-то n зависнуть, если окажется, что близнецов больше нет.

А если уж мы даже про конкретную функцию не знаем, входит ли она в {f_n}, то как мы можем быть уверены в вычислимости индекса какой-то следующей функции среди {f_n}? Если перечислялка столкнётся с first_twin(), поместит она её в {f_n} или пропустит? В зависимости от этого сдвинутся индексы всех прочих функций выше. Или перечислялка вообще не будет рассматривать first_twin()?

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

То есть, ваша g() действительно невычислима, и +1 тут непричём.

parent From admin profile Sat Jul 17 11:15:38 2021 UTC pencil

userpic

Вообще, ещё раз

Вообще, ещё раз повторю, вы тут неудачно выбрали, кому вопросы задавать. Одна фактическая ошибка в книге, конечно, есть: сказано, что вычислимых функций счётное множество, следовательно есть конструктивная нумерация; это неверно, поскольку не всякое счётное множество перечислимо, так что нужно добавить немножечко подробностей. Но дело в том, что суть от этого не изменится, поскольку любой конструктивно заданный класс/подкласс вычислимых функций будет перечислимым.

Кратко говоря, что такое вычислимые функции — неизвестно, но есть тезис Чёрча, предполагающий, что класс вычислимых совпадает с классом частично рекурсивных, а эти последние строятся через суперпозицию нескольких крайне простых операций и операторов (операторы в данном случае из одних функций делают другие). Поскольку базовых операций там меньше чем пальцев на руках (впрочем, это пофигу, достаточно того факта, что их конечное число), очевидным образом можно выстроить дерево всех возможных Ч/Р-функций и в этом дереве ввести некую нумерацию, а дальше запустить алгоритм, который это дерево будет обходить и, зайдя в очередную вершину, выплёвывать соответствующую формулу. Это ваше "индексирование" на базе такого алгоритма строится очевидным образом: функцию по номеру получаем, запустив алгоритм и проигнорировав первые N функций, а обратную операцию -- номер по функции (!) -- получаем, запустив алгоритм и дождавшись, пока он выплюнет нужную функцию. Ещё раз: да, практического смысла эти построения не имеют, поскольку для любой мало-мальски интересной с практической точки зрения функции ждать придётся, вероятно, не один миллион лет, но здесь (в теории вычислимости) такие мелочи никого не беспокоят. Так вот, точно так же будет обстоять дело и с гипотетической последовательностью всюду определённых функций, которые хочется "подставить" вместо Ч/Р в роли модели вычислимой функции, чтобы не было всей этой "фигни" с частичной неопределённостью: если мы что-то конструктивно делаем, то у нас есть вычислитель, на котором мы это делаем, а у него -- базовый набор операций, далее см. выше.

Кстати, чего я с ходу не знаю — так это как соотносится класс примитивно-рекурсивных функций к классом функций всюду определённых. Это к специалистам.

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

parent From Anonymous (unverified) Sat Jul 17 13:05:00 2021 UTC pencil

Машина Тьюринга и вычислимость

> вы тут неудачно выбрали, кому вопросы задавать.

Может быть. Я, честно говоря, эту главу из книги хоть и прочитал, но ощущения понимания у меня не возникло. Если не вдумываться, то вроде понятно, что в общем случае нельзя проверить, зависает программа или не зависает, что есть какие-то что-то-там рекурсивные функции, которые как-то связаны с лямбда-исчислением и эквивалентны машине Тьюринга и машине Поста, а так же алгорифмам Маркова и представляют на настоящий момент теоретический максимум того, что можно вычислить с помощью физического устройства... А тезис Чёрча-Тьюринга состоит в том, что ничего круче придумать нельзя, но он не доказан.

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

> очевидным образом можно выстроить дерево всех возможных Ч/Р-функций и в этом дереве ввести некую нумерацию

Не, это-то мне и раньше было понятно. Но вы же обходите вообще все ч/р-функции, так? А нам требуются не все, а только те, которые определены на всём N.

То есть, вашему алгоритму нужно добавить проверку: если функция определена на всём множестве N, значит добавить её в индекс, а если есть натуральные числа, для которых она не определена — не добавлять. Так?

Вот с этой проверкой как раз у меня и затык — а не будет ли она эквивалентна той самой программе, S( ) из проблемы останова?

>Так вот, точно так же будет обстоять дело и с гипотетической последовательностью всюду определённых функций, которые хочется "подставить" вместо Ч/Р в роли модели вычислимой функции, чтобы не было всей этой "фигни" с частичной неопределённостью: если мы что-то конструктивно делаем, то у нас есть вычислитель, на котором мы это делаем, а у него -- базовый набор операций, далее см. выше.

Выше-то понятно всё. А вот это — нет. С чего вы взяли, что вычислитель, который позволяет вычислить все те и только те Ч/Р функции, которые определены на всём N в принципе можно конструктивно описать?

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

Надеюсь, теперь понятнее стало, в каком конкретно месте затык?

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

На самом деле не настолько. Как писать программы мне вроде и без этого понятно.

Или всё-таки надо разбираться? Насколько это важно?

----

Кстати про факториал одно из ваших объяснений мне показалось непонятным. Зато я предлагаю другой вывод формулы, который, по-моему, получше:

Предположим у нас уже расставлено (k-1) объектов и мы добавляем k-й. Добавить его можно перед первым элементом (в самое начало), перед вторым, перед третьим, перед (k-1)-м и после (k-1)-го, то есть всего k возможных позиций. И каждую эту позицию можно применить к любой перестановке (k-1) элементов, то есть k!=k*(k-1)!. Ну а один объект, понятное дело, можно расставить только одним способом.

parent From admin profile Tue Aug 3 13:35:23 2021 UTC pencil

userpic

Вообще я весь

Вообще я весь сыр-бор с этой главой затеял ради одной простой цели: донести до читателя, что определения алгоритма не существует и существовать не может. Ну вот просто достали меня авторы учебников, пытающиеся друг дружку перещеголять такими "определениями". Систематически излагать теорию алгоритмов и теорию вычислимости я не планировал и не планирую, я же говорю — я в этой области сам плаваю.

То есть, вашему алгоритму нужно добавить проверку: если функция определена на всём множестве N, значит добавить её в индекс, а если есть натуральные числа, для которых она не определена — не добавлять. Так?

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

Вот с этой проверкой как раз у меня и затык — а не будет ли она эквивалентна той самой программе, S( ) из проблемы останова?

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

С чего вы взяли, что вычислитель, который позволяет вычислить все те и только те Ч/Р функции, которые определены на всём N в принципе можно конструктивно описать?

Вроде как раз и доказывается, что нельзя.

parent From Anonymous (unverified) Sat Jul 17 13:50:00 2021 UTC pencil

Кажется понял

Кажется понял.

Вы как раз и пытаетесь доказать, что перечислить все вычислимые всюду определенные функции невозможно, потому что если бы это удалось сделать, то получилась бы фигня с g( ). А раз их нельзя перечислить, значит и придумать формальную модель, которая их описывает, нельзя, потому что, если бы такая модель была, то их можно было бы перечислить.

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

Чем-то это мне теорему Гёделя напоминает. Вроде как система аксиом не может быть одновременно полна и непротиворечива.

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

parent From Alejandro profile Wed Mar 15 11:54:16 2023 UTC pencil

Ссылки

Андрей Викторович, оберните ссылку на вики в тег a-href. Она (1) за форму с комментарием выползает и (2) страницу вширь растягивает.

parent From admin profile Wed Mar 15 12:48:59 2023 UTC pencil

userpic

done

Обернул, заодно нашёл багу в своей CMSке :-)

Справедливости ради надо сказать, что у меня она никуда не вылезала и ничего не растягивала. Видимо, browser-specific, как водится.

parent From Alejandro profile Wed Mar 15 14:28:05 2023 UTC pencil

-

> заодно нашёл багу в своей CMSке

А, если не секрет, что за баг? :-)

parent From admin profile Wed Mar 15 15:25:53 2023 UTC pencil

userpic

Вот уж совершенно не секрет

Рабочая кодировка на сайте koi8-r, она же используется в конфигурационных файлах CMSки, и в ней же CGI-программа сохраняет комментарии, полученные через web-интерфейс.

Но старый сайт был на Друпале, а там рабочая кодировка utf8. Можно было, конечно, всё сконвертировать при вытаскивании из MySQL, но на сайте на момент перехода было около 200 страниц и больше семи тысяч комментариев, я побоялся где-нибудь что-нибудь упустить, всё-таки при конверсии из utf8 в koi8-r очевидным образом возможны потери данных. Дело тут ещё и в том, что, скорее всего, после окончательного слезания с Друпала (на котором у меня сейчас остался один полудохлый сайт) у меня в хозяйстве естественным образом кончатся развёрнутые экземпляры MySQL, и если где-то что-то будет упущено, а потом (скажем, через год) найдено или заподозрено, то вернуться к "первоисточнику" в виде содержимого MySQL'ной базы будет слишком трудоёмко.

В итоге у меня комменты, а также те страницы, которые генерируются из отдельных файлов (такие не все, некоторые генерятся из конфигов) — в общем, такие куски контента, которые живут в отдельных файлах, получили кроме прочего атрибут кодировки, а генератор контента производит перекодирование. Чем я особенно горд, так это что символы из utf, которые не могут быть сконвертированы в целевую кодировку (это не обязательно koi8), превращаются в html entities, причём те, которые были в спецификации html 4.1, обзываются своими именами, а не клятыми числовыми кодами (например, всякие laquo, raquo, mdash и вот это вот всё).

Ну а бага состояла в том, что при редактировании коммента CGI "забывала" сбросить признак кодировки. В итоге если коммент был вытащен из Друпала, а потом отредактирован средствами CGI, то он сохранялся в koi8, но генератор этого не знал и продолжал его пытаться сконвертить из utf в koi8 с соответствующим результатом.

Забавно тут разве что то, что за всё время тестирования я ни разу не догадался попробовать отредактировать какой-нибудь из старых комментов.

From Anonymous (unverified) Tue Jun 29 18:15:00 2021 UTC pencil

По ссылке или значению?

Здравствуйте, читая 145 страницу третьего тома (о переопределении операции присваивания), наткнулся на примеры для класса Complex.

Здесь в параметрах метода вы используете константную ссылку для операнда:


  1 class Complex {
  2     // ...
  3     const Complex& operator=(const Complex& c) 
  4         { re = c.re; im = c.im; return *this; }
  5     const Complex& operator+=(const Complex& c)
  6         { re += c.re; im += c.im; return *this; }
  7     // ...
  8 } 

На этой же странице, ниже, вы уточняете, что то же (переопределение) можно сделать и с операциями для других типов:


  1 class Complex {
  2     // ...
  3     void operator=(double x) { re = x; im = 0; }
  4     // ...
  5 }   

Но на этот раз вы передаёте в функцию параметр по значению, почему? Есть же возможность сделать его константной ссылкой, чтобы избежать копирования (как в предыдущих двух случаях), или я что-то упускаю?

parent From admin profile Wed Jun 30 09:00:00 2021 UTC pencil

userpic

Здесь стоит

Здесь стоит применить здравый смысл. Если примерно прикинуть, как всё это работает на уровне машинных команд (а именно для этого в первом томе имеется часть про программирование на языке ассемблера) и не забывать, что ссылка — это вовсе не пустое место, а аж целый адрес, то можно заметить, что накладные расходы даже на копирование 16-байтной структуры (то есть всего объекта типа Complex) могут оказаться меньше, чем косвенные обращения по адресу (в данном случае по ссылке) внутри тела функции. Что касается типа double, то на современных (читай — 64-битных) машинах он и вовсе занимает столько же места, сколько адрес, так что экономии не будет вообще никакой, при этом потери на передаче по ссылке — будут. Кроме того, стоит учесть, что компилятор эти методы, естественно, заинлайнит, и прикинуть, что и как с этим сможет сделать оптимизатор; ощущение такое, что при передаче double по значению в итоговом коде вообще получится один mov, тогда как по ссылке — может, и получится, но не факт; я не проверял, просто понимаю, что такая оптимизация сложнее.

parent From Anonymous (unverified) Wed Jun 30 10:41:00 2021 UTC pencil

В случае

В случае инлайнинга и оптимизаций компиляторы получат одинаковый код для передачи и по ссылке, и по значению. Как ни странно, подобная оптимизация при современном устройстве компиляторов происходит "сама собой" как побочный эффект построения SSA формы и устранения промежуточных копий.

From Anonymous (unverified) Sun Jun 13 13:09:00 2021 UTC pencil

Уточнение по практике на языке assembler'a (NASM)

Читаю первый том, часть по языку assembler. На странице 656 сказано, что программы для практического применения лучше писать на языке Си. Есть ли смысл писать большие программы (такие как "Задача о ханойской башне", "Сопоставление с образцом") на NASM? Или достаточно посмотреть как работает та или иная команда и потом перейти ко второму тому?

parent From admin profile Mon Jun 14 11:05:00 2021 UTC pencil

userpic

Минуточку, это

Минуточку, это вы задачу о ханойских башнях называете "большой программой"?!

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

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

From Anonymous (unverified) Thu Jun 3 09:30:00 2021 UTC pencil

Применение термина "память"

Здравствуйте, Андрей Викторович,

Во втором издании на странице 281 есть сноска под номером 6. В ней обсуждается противоречивость использования термина "память" в тексте выше. Непосредственно в тексте сноски утверждается, что памятью следует называть лишь те ЗУ, с которыми ЦП может работать "через шину без применения контроллеров".

Однако, насколько мне известно, с любым ЗУ ЦП общается именно через контроллер, и device path любого диска на шине на самом деле - путь до контроллера этого устройства. Наоборот, контроллеры могут общаться без процессора, если поддерживают DMA :)

Буду рад получить Ваш ответ и огромное спасибо за книги.

parent From admin profile Thu Jun 3 10:06:00 2021 UTC pencil

userpic

> с любым ЗУ ЦП

> противоречивость

там нет никакой противоречивости

> с любым ЗУ ЦП общается именно через контроллер,

Плюньте в глаза тому, кто вам сказал такую ахинею. Оперативная память, она же "оперативное запоминающее устройство", т.е. ОЗУ, по-английски RAM (random access memory) — разумеется, никаких контроллеров не требует и не может их требовать. ПЗУ, собственно говоря, тоже (процессор их вообще обычно не различает).

> device path

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

> любого диска на шине

Ещё раз, и медленно: диски — не память. Сноска, собственно говоря, об этом.

parent From Anonymous (unverified) Thu Jun 3 11:26:00 2021 UTC pencil

Почему я об этом вообще заговорил

Разработка аппаратуры процессора идет обычно по двум направлениям - собственно, ядро (core) и все остальное (uncore, общепринятый профессиональный сленг, если позволите). Я даже перепроверил: по запросу вроде "chip die layout of a cpu" можно посмотреть "планировку" кристалла процессора. И на этой планировке почти всегда будут ядро/ядра, система кэшей и периферийный блок.

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

P.S.
"Противоречивость" - не совсем подходящее слово, согласен

parent From admin profile Thu Jun 3 12:08:00 2021 UTC pencil

userpic

Если под

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

Внутреннее устройство процессора, тем паче многоядерного, в книге не рассматривается.

parent From Anonymous (unverified) Fri Jun 4 11:52:00 2021 UTC pencil

Влезу, с вашего

Влезу, с вашего позволения. Всё же без контроллера вообще голое процессорное ядро может работать только со статической памятью, как в старых компьютерах вроде Спектрума или какой-нибудь Амиги. То есть вот, натурально, микросхема с памятью на статических регистрах, организованной в виде одномерного массива, индексируемого числом, заданным на шине адреса. Хотим читать или писать - дергаем один из двух стробов, в ответ на это микросхема либо считывает значение с шины данных, либо выдаёт. Шины процессора и памяти соединяются напрямую, без посредников. В динамической же памяти, как минимум, адресное пространство нелинейное, требуется выставлять на шине адреса сначала индекс банка и строки в нем, делать строку активной, затем выставлять индекс столбца, периодически обновлять содержимое, т.к. ячейки постепенно теряют заряд, при этом запрещать доступ к памяти либо переключать банк, засылать в микросхему служебные команды типа PRECHARGE или REFRESH, etc. Это уж точно не забота ядра, у него шины адреса и данных в "классическом" смысле, которые подключается именно к контроллеру, преобразующему запросы к себе как к памяти в команды оперативке и выдающему в обратную сторону данные (опять же, ядро вообще не при делах, для него это работа со статической памятью - выставили адрес, прочитали/записали). Другое дело, что это контроллер специфический и шина, на которой он сидит, за пределы кристалла не выходит. Но, конечно, если строго ограничить определение контроллера по принципу "не висит на общей шине и не плюётся в порты - не контроллер", то да, можем считать, что работа с памятью идёт напрямую.

parent From admin profile Fri Jun 4 17:38:00 2021 UTC pencil

userpic

Сказанного

Сказанного мной всё это никак не отменяет и ему не противоречит. В книге под термином "контроллер" подразумевается вполне определённая сущность, никоим образом не находящаяся в процессоре. Вынужден повторить два момента:

1) тонкости взаимодействия процессора с памятью, как и внутреннее устройство процессора, в книге не рассматриваются вообще;

2) не следует смешивать терминологию из разных предметных областей.

У топик-стартера, если вы не заметили, в голове полнейший бардак, он к ОЗУ пытается device path применить, а вы тут про какое-то там ядро (процессора, гм...)

parent From Anonymous (unverified) Sat Jun 5 05:26:00 2021 UTC pencil

Сказанного

Сказанного мной всё это никак не отменяет и ему не противоречит
Я не собирался вступать в полемику - разумеется, противоречия нет. Комментарий, скорее, в догонку к ответу на вопрос топик-стартера, просто не очень люблю добавлять комментарии перед вашим, т.к. потом трудно найти начало обсуждения, если N-ое количество человек подключается к дискуссии.

From Валерий (unverified) Sun May 16 00:58:00 2021 UTC pencil

Почему Tcl?

Здравствуйте.

В третьем томе есть раздел о Tcl. Я пытался найти в вашей книге объяснение, почему именно он, а не Python, Perl? Какие у него есть преимущества?

parent From admin profile Mon May 17 12:37:00 2021 UTC pencil

userpic

Python, Perl, Ruby, даже

Python, Perl, Ruby, даже Lua (хотя, возможно, в меньшей степени) — это безобразно раздутые монстры, напрочь лишённые внутренней логики, и, самое главное, сделанные без понимания границ скриптового программирования.

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

Кстати, об этом в книжке написано — в части, посвящённой скриптингу.

From akado (unverified) Sun Apr 25 18:05:00 2021 UTC pencil

shell

том 1 стр 81 конструкция с фигурными скобками не работает

 
[ "$1" = "" ] && { echo "No dir name" ; exit 1 }

работает с круглыми скобками

[ "$1" == "" ] && ( echo "No dir name" ; exit 1 )

П.С. Сравнение лучше делать двумя знаками равно ==, один знак равно это присваивание.

parent From admin profile Sun Apr 25 21:57:00 2021 UTC pencil

userpic

Для начала не

Для начала не надо путать скрипты на shell'е с Си и его наследниками, это совершенно разные языки; аналога сишной "операции присваивания" в скриптовых языках нет, так что знак равенства использовать можно и нужно (а двойное равенство в команде test поддерживается только для тех, у кого Си выжжен прямо на коре головного мозга).

А что не работает — ну да, там точка с запятой пропущена перед фигурной скобкой, должно быть так:

 
[ "$1" = "" ] && { echo "No dir name" ; exit 1 ; }

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

From Богдан К. (unverified) Thu Apr 15 17:00:00 2021 UTC pencil

sparse_t.cpp

Здравствуйте. В примере программы шаблона класса разреженного массива, переопределенные операторы инкремента оставлены "не шаблонными", то есть в строках 121-122 и 131-132:

int& location = Provide();
int res = ++location;

вместо "T" оставлен "int". Это сделано намеренно? Я понимаю, что для некоторых типов операция инкремента может быть не определена, но из-за этого программа не компилируется даже при использовании операции инкремента с инстанцированым типом double.

parent From admin profile Thu Apr 15 17:45:00 2021 UTC pencil

userpic

Вот не везёт же

Вот не везёт же этому примеру, а...

Нет, разумеется, это не было сделано намеренно, это эффект от преобразования обычного класса в шаблон. Ну и, увы, недостаточно серьёзного тестирования.

UPD: Выложил архив примеров с исправленным sparse_t.cpp. К счастью, в книжках (что в этой, что во "Введении в Си++") методы этого шаблона в тексте не воспроизводятся.

From Anonymous (unverified) Tue Apr 13 18:18:00 2021 UTC pencil

Про неизменяемые указатели

Если вам это понадобилось, свяжитесь с автором книги и расскажите, как вы дошли до такой жизни (речь о неизменяемых указателях из ¶4.3.15 второго тома)
Связываюсь, рассказываю :) В самом деле, для "больших компьютеров" с ходу предложить вариант использования такой конструкции довольно проблематично, но есть ведь еще и компьютеры поменьше — микроконтроллеры. Там имеет смысл использовать такие указатели для работы с регистрами отображенной в память периферии, они-то уж точно никуда не убегут и не сменят место жительства. Конечно, в стандартных заголовочниках адреса таких регистров чаще всего "дефайнят" в духе

#define PERIPH_REG *((volatile uint32_t *)(0xDEADBEEF))

и некоторые тащат в свой код подобные вещи. Но, например, возникает задача подключения к микроконтроллеру чего-либо с большим количеством ног - скажем, нескольких разрядов семисегментного индикатора без специализированного драйвера или внешней памяти (хотя для памяти, конечно, лучше взять специально заточенный под это дело контроллер). Хардкодить работу с индикатором, естественно, не с руки - завтра может понадобиться увеличить число разрядов или перейти с общего катода на общий анод. Разумнее использовать т.н. "виртуальные порты". Линия GPIO представляется в виде структуры с двумя полями - адресом регистра, запись в который приведет к изменению уровня на лапке МК, и собственно номера бита в регистре, за нее отвечающего. Порт - массив таких структур. Линии в ходе эксплуатации меняться не будут, поэтому логично снабдить указатели в этих структурах модификатором const и проинициализировать сразу в описании, т.е. получается конструкция в стиле (код под 32-битный контроллер, не пугайтесь)

typedef struct vport_line_td {
    volatile uint32_t * const port;
    const uint32_t line_number;
} vport_line;

typedef struct vport_td {
    vport_line * const lines;
    const uint32_t width;
} vport;

А где-то в пользовательском коде крутятся

    void vport_write(vport *p, uint32_t data);
    uint32_t vport_read(vport *p);

, "растаскивающие" или, наоборот, собирающие data по линиям порта.
Конечно, по памяти и скорости работы такой способ несколько проигрывает "захардкоженной" работе с линиями GPIO, но гораздо более гибкий: тот же семисегментник - это один восьмибитный порт на сегменты и один на общие линии разрядов; завтра нужно поменять схему его подключения - переписали инициализатор в одном месте. Если говорить об ARM Cortex-M, например (а это "сердце" подавляющего большинства современных контроллеров), то gcc-шный компилятор такие "константы" кладет во флеш-память без посторонней помощи (в отличие от AVR, кстати, но кому они сейчас впились где приходится извращаться с макросами из pgmspace.h); в оперативке они не хранятся, а пожертвовать сотней байт во флешке уже на контроллере с 8+ КБ ПЗУ ради удобства вполне можно.

parent From admin profile Wed Apr 14 17:57:08 2021 UTC pencil

userpic

Супер, спасибо :-)

Получил эстетическое наслаждение :-)

parent From Anonymous (unverified) Fri Apr 23 13:30:00 2021 UTC pencil

Не вполне

Не вполне понятно, почему не сделать "иначе":

typedef struct vport_line_td {
    volatile uint32_t * port;
    uint32_t line_number;
} vport_line;

typedef struct vport_td {
    const vport_line * lines;
    uint32_t width;
} vport;

void vport_write(const vport *p, uint32_t data);
uint32_t vport_read(const vport *p);

parent From Anonymous (unverified) Sat Apr 24 14:44:00 2021 UTC pencil

Так никто,

Так никто, вроде, не запрещал, делайте "иначе" на здоровье, оба варианта вполне валидны. Другой вопрос, что адрес MMIO принципиально неизменяем, и в первом случае это его свойство явно закреплено за соответствующим типом; во втором - просто указан адрес области памяти, ответственность за неизменяемость которого где-то и когда-то возьмёт на себя какой-то код. Ну да о вкусах не спорят. Вот чего точно первому варианту не хватает, так это const vport в заголовках функций - "порты" по-любому будут описаны с const, и компилятор ругнется, что функции снимают этот модификатор. Здесь косяк, согласен, но пример был не о функциях.

parent From Anonymous (unverified) Sat Apr 24 17:52:00 2021 UTC pencil

Любое

Любое использование const это именно что "где-то и кто-то что-то имел в виду", а "принципиально неизменными" можно считать разве что константы в enum. Отбросив полемику, пожалуй, остаются стилевые предпочтения: лично мне описание "неизменяемой" области памяти вида const vport_line[] vport_name = { ... }; кажется более... идиоматичным?

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

parent From admin profile Sat Apr 24 18:38:27 2021 UTC pencil

userpic

> кажется

> кажется более... идиоматичным?

ну кому как, мне оно кажется синтаксической ошибкой

parent From Anonymous (unverified) Sat Apr 24 18:47:00 2021 UTC pencil

Ёлки-палки const

Ёлки-палки const vport_line vport_name[] = { ... };

From Владислав (unverified) Thu Apr 1 11:50:00 2021 UTC pencil

Может ли мое

Может ли мое непонимание большей части теории про перевод двоичный дробей в десятичные, кроме первого примера, и того, что такое область определения и область значений функции (со школы этого не помню) из части про двоичную логику повлиять на дальнейшее понимание материала и материала по программированию на Паскале? Могу ли я, если пока что мне это непонятно, пропустить вышеописанный материал, и освоить его позже, например, на практике, когда я с ним столкнусь? Или я все-таки обязан это освоить прямо сейчас?

В целом, почти весь материал про двоичную логику мне понятен, так как данный предмет был в колледже. Нужно только еще раз объяснить для себя "Это происходит так, потому что...". "Виды бесконечности" я на время пропущу и начну читать главу "Программы и данные".

parent From admin profile Thu Apr 1 13:36:50 2021 UTC pencil

userpic

Может-может.

Может-может. Увы.

Ничего вы, впрочем, не обязаны, просто когда во что-то упрётесь, вернитесь к математической главе и попробуйте её осилить ещё раз.

parent From Anonymous (unverified) Sat Apr 3 07:08:00 2021 UTC pencil

Область

Область определения функции — множество значений, которые может принимать её аргумент (аргументы), область значений функции — множество значений, которые может принимать результат функции. Вроде просто же.

parent From admin profile Sat Apr 3 08:33:38 2021 UTC pencil

userpic

В такой

В такой формулировке это "просто" только для тех, кто знает, о чём идёт речь.

From Anonymous (unverified) Tue Mar 23 22:27:00 2021 UTC pencil

Редактор

Здравствуйте, Я начал постигать emacs и уже более менее в нем ориентироваться, а потом начал читать вас и думаю, есть ли смысл пересаживаться на vim? Либо же вообще spacevim, у меня знакомый говорит, что выучи горячие клавиши емакса и потом можешь их в любую ide перенести и горя не знать

parent From admin profile Wed Mar 24 06:52:54 2021 UTC pencil

userpic

На вкус и цвет...

... все фломастеры разные.

Вот IDE лучше вообще не применять, ибо гадость. А vim или emacs — вопрос скорее религиозный :-)

Есть только один момент. Нужно уметь хотя бы базовые вещи делать в классическом vi (не в vim'е). Рано или поздно вы столкнётесь с ситуацией удалённого доступа к системе, в которой ничего другого не окажется, и лучше, если это не приведёт к полной беспомощности.

parent From Anonymous (unverified) Sat Apr 3 07:10:00 2021 UTC pencil

Вообще, в vi

Вообще, в vi который в busybox достаточно помнить в начале нажать i, а в конце Esc, :wq и всё. А в режиме редактирования работают стрелки и бекспейс, так что всё точно так же как в nano или notepad-е.

parent From admin profile Sat Apr 3 09:44:05 2021 UTC pencil

userpic

реализации разные бывают

В этой версии так, да. А в классическом vi, например, удалить backspace'ом можно только то, что введено в ходе последней операции ввода (то есть после нажатия того самого i, или a, или o, или O).

From Anonymous (unverified) Mon Mar 22 16:08:00 2021 UTC pencil

Том1 старой ревизии

Здравствуйте Андрей Викторович, я где то в середине первого тома уже нахожусь, по сути почти в самом начале практики, недалеко ушел, занимаюсь в свободное время после дел и работы, пытаюсь перейти в линукс, очень больно конечно иногда, особенно при установке свежих версий пакетов некомпилированных версий программ в деб пакеты и без баш скрипта инсталл и тд, прям вызывает боль и ступор иногда, с пакетом fpc 3.2.0 с оф сайта например были трудности, в репозитории убунту была версия но только старая, а у новой не поймешь толи установилась, толи нет, но компиляцию из командной строки не делала, может не туда установилась куда нужно было, потом что то нагуглил и установил из фтп какого то командой и ручной простановкой папок и пути вроде, короче пока очень больно в линукс. Учу команды сд рм пердж лс судо эко и тд, распечатал листов чит шитов с командами чтобы иногда поглядывать, чуток еле еле узнал про настройки vimrc и выбрал прекрасную тему с гитхаба, добавил нумерацию строк и тд. Убунту выбрал англ версию естественно, может поэтому мне чуть чуть сложнее чем на русской, технический англ где то около 0 уровня, чисто кино и общаться могу. Все это печатал слепым набором(пока в процессе изучения тоже, правый мизинец плачет иногда), относительно медленно правда, но я стараюсь, почему то у меня на ноутбуке не работает в убунту прямая черта которая у вас в примере была про ввод и вывод данных когда перенаправляли ввод на текстовый файл кажется, у меня она чуток наклонена почему то вправо, а так | в виндовс красивая прямая черта, в линукс как с наклоном, так и не исправил эту уродину. Еще пока что не очень верится вам про супер дружелюбность линукс систем и удобство =)) где то в ютуб прочитал фразу - Линукс это очень дружелюбная юзер-френдли система, просто она очень тщательно выбирает себе друзей, думаю эту фразу можно было бы добавить в вашу книгу, смеялся аж с нее. Ну это вводные данные были, да и просто поделиться с другими читателями вашего сайта, теперь
begin
Заметил что вы новые издания книг выпустили, а я дурак скачал старую еще до выпуска новых или не заметил в тот раз, даже не знаю теперь, хочу спросить совет что делать, ну и про отличие первой версии тома 1 от переиздания, я читал давно о ваших планах про переиздание мол вы совершили ошибку создавая сишность мозга что то такое, но по идее язык си же во втором томе появится, если новый том лучше, то перечитаю, просто хотелось бы узнать у автора, ну и заодно сказать спасибо вам за пинок в сторону линукс(хоть я пока и не согласен с тем что он дофига удобный), все таки учитывая то, что все сервера на нем, знать его на базовом уровне все таки обязательно. Ну и отдельное спасибо за референсы в книге !!! Очень юзер френдли кстати, например если вы тут не поняли то шуруйте в параграф № x.y. и перечитайте. Ну и если я закончу первый том 1 издания, то переходить на второй том 1 издания или уже второго свежего издания, не потеряю ли связь?

parent From admin profile Mon Mar 22 16:27:26 2021 UTC pencil

userpic

Бросьте нафиг

Бросьте нафиг старую редакцию, скачайте новую и читайте с того места, где остановились в старой. Естественно, новая намного лучше и правильнее.

А что до линукса и "user friendly", так не, Linux не дружит с пользователем. Linux подчиняется пользователю. И проявляет практически 100% лояльность к пользователю. Ну, конкретно для случая Убунты, может, не 100%, но близко.

А то, как винда с пользователем "дружит" — видали мы таких друзей, ага...

parent From Anonymous (unverified) Sun Mar 28 12:56:00 2021 UTC pencil

Иногда бывает,

Иногда бывает, что при последующих изданиях из книг что-нибудь убирается, иногда что-нибудь интересное/важное по тем или иным соображениям; в ситуации с вашими книгами это не так?

parent From admin profile Sun Mar 28 17:16:23 2021 UTC pencil

userpic

Вроде ничего не

Вроде ничего не убирал, по крайней мере во "Введении в профессию". Новое добавлял, параграфы местами переставлял и менял рубрикацию, материал перекидывал из одного места в другое, кое-что переделывал, но не выкидывал вроде бы ничего.

parent From Oliver (unverified) Mon Apr 12 12:50:00 2021 UTC pencil

Терпение, только терпение!

Я тоже в свое время переполз на Линукс с Виндовс. По своему опыту могу сказать, что Линукс (лично для меня) - в разы проще чем Виндовс. И дружелюбнее.

Для чего Вам понадобилось искать новую версию FPC, при изучении книги уважаемого автора сайта? Были проблемы с компиляцией программ, использую старую версию?

По поводу команд в Линукс, название каждой команды (она же - утилита Линукс) расшифровывается. Ну, например, cd - change directory, cp - copy и.т.д. Мне, на первых порах, это помогало их проще запомнить. Да и сегодня помогает! А еще есть такая утитила apropos: советую освоить ее, и тогда проблем с командами в Линукс у Вас будет меньше.

А по поводу вот этой | черты, у меня на Линукс с ней никогда не было проблем. Я устанавливал и пробовал зарличные Линукс дистртибутивы, но вот этой проблемы не имел.

На последок могу посоветовать пару книг по Линукс. Для фундаментов мне не плохой кажется книга Пола Коббаута "Фундаментальные основы Linux": она доступна бесплатно и на английском, и на русском языках. Кроме нее, если вы используете систему с пакетами формата .deb, также бесплатно доступна книга "Настольная книга администаратора Debian": ее перевод правда выполнен не полностью, но тем не менее читать можно.

From Anonymous (unverified) Mon Mar 22 15:33:00 2021 UTC pencil

Пробелы в конце строк в stud_io_inc

В stud_io_inc, доступном по ссылке на этой странице, присутствуют пробельные символы в конце некоторых строк

$ curl -s http://www.stolyarov.info/books/extra/stud_io_inc | grep -c '\s$'
4

parent From admin profile Mon Mar 22 16:23:39 2021 UTC pencil

userpic

Спасибо

Вот чёрт, в архиве примеров поправил, а про эту копию забыл. Исправлено.

From Raip (unverified) Sun Mar 21 14:00:00 2021 UTC pencil

хочу учиться

Здравствуйте. Я полный ноль в этом деле, но мне безумно интересна эта сфера и хочу начать обучаться. Эти книги предназначены для таких людей как я? И был бы рад какому нибудь совету, для того кто делает первые шаги в эту сферу, от человека который проделал огромный путь.

parent From admin profile Sun Mar 21 14:20:00 2021 UTC pencil

userpic

Да, именно для

Да, именно для таких и предназначены.

Что до советов, то их, пожалуй, дам два: (1) прочитайте в первом томе "напутственное" предисловие (стр.39--43) и (2) установите Linux и переползите на него со всеми делами, которые вы делаете с помощью компьютера.

parent From Anonymous (unverified) Sun Apr 4 09:33:00 2021 UTC pencil

А 39 летнему с

А 39 летнему с нуля есть ли смысл их прочитать? Хотелось бы переучится на программиста.

parent From admin profile Sun Apr 4 09:50:09 2021 UTC pencil

userpic

Будет тяжело.

Будет тяжело. Но может и получиться, почему нет.

Только учтите, что это всё — на несколько лет. Сколько конкретно лет потребуется — зависит от индивидуальных особенностей, но меньше двух, по-моему, получиться не может принципиально. Верхнего предела нет вообще, поскольку может и вообще ничего не получиться.

parent From Anonymous (unverified) Mon Apr 5 11:09:00 2021 UTC pencil

Почитаю Ваши

Почитаю Ваши книги,хоте меня отговаривали,время зря в свои года теряешь.Лучше,мол переходить на C++ с нуля,есть хорошие учебники.Но мое мнение,полезно и эти книги почитать,потом дополнительно поизучать язык C и потом переходить на C++ изучать,ну не один год уйдет,за то интересно для меня.Не знаю появился интерес в 40 лет к этой области,каждый день думаю об этом.Пыталмя сразу начинать с C++,но наверное не верно,надо именно с начинать с Ваших учебников.Образования у меня нет в этой области,а интерес есть.

parent From admin profile Mon Apr 5 18:00:52 2021 UTC pencil

userpic

Вот если

Вот если пытаться начать с Си++, то точно ничего не выйдет, это я вам гарантирую. Причём в любом возрасте.

"Дополнительно" ничего изучать не надо, Си рассматривается во втором томе, Си++ — в третьем. Начинать ни с того, ни с другого нельзя категорически. И, самое главное, если эти или любые другие книги по программированию просто "читать", то время будет потрачено впустую. К Си можно притрагиваться не раньше, чем у ваших программ на Паскале появятся сторонние пользователи, а к Си++ — не раньше, чем объёмы ваших программ (в смысле, каждой отдельно) не выкатятся за пару тысяч строк.

parent From Anonymous (unverified) Mon Apr 5 18:06:00 2021 UTC pencil

Так что

Так что получается,уже не стоит даже начинать.

parent From admin profile Mon Apr 5 18:23:26 2021 UTC pencil

userpic

Почему не

Почему не стоит-то? Что жизнь после сорока есть — это вы уже и сами на своём опыте знаете, а я вам ещё могу сказать (на моём опыте), что она есть даже после сорока шести :-)

parent From Anonymous (unverified) Mon Apr 5 20:34:00 2021 UTC pencil

Спасибо

Спасибо большое за ответы,я просто начал раньше читать Вашу книгу 1-й том,установил Линукс.Отговорили,говорили чтобы быстрее в эту область войти,мол не нужно тебе это,сразу изучай C++.Послушал и закинул,в итоге не тут,не там,как говорят).

parent From admin profile Tue Apr 6 12:19:38 2021 UTC pencil

userpic

Ну да, добрые

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

parent From Anonymous (unverified) Sat Apr 10 06:27:00 2021 UTC pencil

В общем

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

parent From Anonymous (unverified) Fri Jul 9 13:38:00 2021 UTC pencil

А что делать тем, у кого уже есть опыт программирования?

> К Си можно притрагиваться не раньше, чем у ваших программ на Паскале появятся сторонние пользователи

В моём случае не получится. Я уже успел пописать и на паскале в школе, на C в институте, хотя там был странный гибрид с С++, причём из последнего только cout, cin и строчные комменты. Там же был курс по ассемблеру, только почему-то преподавался он на фигне, встроенной в трупный паскаль. То есть чтение данных с клавиатуры и вывод были на паскале, а алгоритм их обработки на асме.

А вот с последнего мой переход на линукс и начался. Но у меня это всё оставляло чувство неправильности. Если уж программа на ассемблере, то она вся должна быть на нём. После пары работающих hello world-ов на DOS мне захотелось написать что-нибудь на уровне голого железа, для чего нужно было после каждой пересборки записать нулевой и несколько следующих секторов на дискету, а потом перезагрузиться. Программы для этого под Windows я не нашел, но, так как интересовался другими системами, из купленной мной криво переведённой книги "юникс для чайников", я знал что там есть dd для записи произвольных секторов диска.

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

Другие студенты, скопировавшие у меня програмки для решения лаб, кстати, считаются сторонними пользователями?

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

В общем, я уже не могу начать с паскаля и не трогать C, потому что уже трогал.

parent From admin profile Sun Jul 11 18:35:27 2021 UTC pencil

userpic

Другие

Другие студенты, скопировавшие у меня програмки для решения лаб, кстати, считаются сторонними пользователями?

нет.

один преподаватель даже заплатил мне деньги за написание программы для его диссертации. Но программа там тоже уровня хелловорда.

это тоже не то.

В общем, я уже не могу начать с паскаля и не трогать C, потому что уже трогал.

И что? :-) Паскаль-то вы трогали раньше, чем Си, и определённое эстетическое чутьё у вас есть, вон вкрапления ассемблера в Паскаль вам не понравились (и это совершенно правильно, ибо нефиг).

Читать мои книжки или не читать — подозреваю, вы разберётесь сами. Только один момент: лучше всё-таки начните с начала, а не сразу с середины второго тома, как некоторые пытаются сделать, и пытаются, замечу, совершенно зря.

From Anonymous (unverified) Fri Mar 12 18:30:00 2021 UTC pencil

Что делать

Что делать после прочтения второго тома книги? Предлагается полтора года-два заниматься написанием на си, получить конечного пользователя, и по сути стать полноценным программистом. Вот и вопрос: а что делать то? Есть желание, но идей нет банально, какие на нынешний момент реально можно написать программы на си, которые будут актуальны и реально нужны кому-то кроме друзей, которые попользовались ей потому-что я попросил?

parent From admin profile Fri Mar 12 19:22:00 2021 UTC pencil

userpic

Ну так пишите

Ну так пишите не то, что актуально, а то, что лично вам прикольно. Рано или поздно само собой получится что-то актуальное.

Кстати, странно, что того же вопроса не возникло после первого тома.

From Anonymous (unverified) Fri Mar 12 02:08:00 2021 UTC pencil

В задаче на

В задаче на странице 142 тома I точно ответ 340? У меня не получается этот ответ. Забавно, что с усложнённой версией у меня проблем нет.

parent From admin profile Fri Mar 12 09:23:25 2021 UTC pencil

userpic

стопудов (tm)

4+16+64+256 по-вашему сколько будет?

From ртуть (unverified) Mon Mar 8 15:41:00 2021 UTC pencil

Линукс

Современный линуксовый GUI уже ни чем не уступает другим операционным системам, читая книги предполагается отказаться от GUI совсем и использовать консоль? В линксе тоже можно копировать файлы мышкой :)

parent From admin profile Mon Mar 8 19:05:00 2021 UTC pencil

userpic

> Современный

> Современный линуксовый GUI уже

"Уже"? Вообще-то лет двадцать как.

> ни чем не уступает другим операционным системам

Совершенно верно, и это позволяет на линукс пересаживать всяких секретарш и прочих гуманитарных девочек, даже не говоря им, что это линукс. Сам такое делал :-)

> читая книги предполагается отказаться от GUI совсем и использовать консоль?

Несомненно. Если быть точным, не "консоль", а командную строку. Графический режим как таковой вполне полезен, ну там фотки смотреть, видосики. GUI при использовании графики совершенно не обязателен. А что касается DE (вот эти вот иконочки для изображения файлов, папочки и прочее дерьмище), то для профессионала их использование неприемлемо вообще, вот то есть категорически.

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

> В линксе тоже можно копировать файлы мышкой :)

А зачем делать мышкой то, что можно сделать без мышки в разы быстрее и без вреда для правого плечевого сустава?

Кстати, вы сайтом-то не ошиблись? Может, надо куда-нибудь в другое место пойти?

parent From Ртуть (unverified) Tue Mar 9 01:52:00 2021 UTC pencil

GUI

Иначе я не считаю, я с вами согласен.
А как относитесь к тайловым оконным менеджерам(i3, xmonad, и т.д)

parent From admin profile Tue Mar 9 17:29:07 2021 UTC pencil

userpic

Тайловые

Тайловые оконники вот только что обсуждались:
http://www.stolyarov.info/guestbook#comment-3437
Кратко -- не знаю, не пробовал. Пробовать некогда :-)

parent From Drel (unverified) Sun Jun 23 12:57:05 2024 UTC pencil

Re: Тайловые

Заметил, что ссылка ведет не туда, правильная ссылка: http://www.stolyarov.info/guestbook/archive/4/#comment-3437 (добавлено указание гостевой).

Много ли ещё таких ссылок на сайте, которые ведут не туда? Или это случилось случайно?

parent From Andrey V. Stolyarov profile Sun Jun 23 13:04:22 2024 UTC pencil

userpic

Re: Тайловые

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

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

parent From shpinog (unverified) Sat Mar 13 16:18:00 2021 UTC pencil

>А зачем делать

>А зачем делать мышкой то, что можно сделать без мышки в разы быстрее и без вреда для правого плечевого сустава?

Не всегда. Один кейс я так и не нашёл, как эффективно делать в консоли.

Есть куча фоток в директории, много дубликатов и "неудачных" - стандартная картина при копировании с фотика.

Удобно иметь искизы всего этого, выделять ненужное и удалять. В командной строке бы пришлось каждый файл открывать-rm name.

Там где нужно не текстовая, а визуальная фильтрация с командной строкой не всё так хорошо.

parent From admin profile Sat Mar 13 17:24:42 2021 UTC pencil

userpic

Ну и?

Для сортировки фоток я сам применяю konqueror, и это единственный случай, для которого я его применяю. Но моей фразе, которую вы цитируете, сие не противоречит:

зачем делать мышкой то, что можно сделать без мышки

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

parent From Anonymous (unverified) Sat Apr 3 07:21:00 2021 UTC pencil

А вот на

А вот на андроиде я копирую и перемещаю файлы с помощью файлового менеджера. Хотя у меня там установлен терминал в приложениях. Зря?

parent From admin profile Sat Apr 3 09:46:55 2021 UTC pencil

userpic

Зря вы вообще

Зря вы вообще андроидом пользуетесь, вот это точно.

А так — когда нет клавиатуры, работа с терминалом превращается в пытку. Так что тут не вполне понятно, что зря, а что не зря.

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

parent From Anonymous (unverified) Sat Apr 3 14:48:00 2021 UTC pencil

А нафига нужна

А нафига нужна клавиатура для чтения электронных книг? Ну кроме двух боковых клавиш (по умолчанию громкости, но в книге они листают страницы).
Специальная читалка книг оказалась неудобной из-за медленного экрана. У мобильника хоть и нет такой продолжительности работы без подзарядки, зато экран гораздо контрастнее и откликается на листание страниц почти мгновенно.
При работе в режиме музыкального плеера, кнопки управления как правило вынесены на гарнитуру (play/pause, next, previous)
Но да, работа с терминалом на андроиде — мазохизм, хотя команды вроде ifconfig иногда ввожу что бы IP-адрес посмотреть.
Кстати даже клавиатура бы не особенно помогла, в андроиде сейчас нет не busybox, ни coreutils, к тому на половине команд permission denied, если не от рута.

parent From admin profile Sat Apr 3 23:31:48 2021 UTC pencil

userpic

Вот я и говорю,

Вот я и говорю, зря вы андроидом пользуетесь. Всем изделиям от Google место в мусорном баке.

parent From Владислав (unverified) Sun Apr 4 20:44:00 2021 UTC pencil

Получается, что

Получается, что если выбросить android и iOS, остается только "кнопочная звонилка", "городской телефон" (его вроде бы правильно называть ip-телефония) и, может быть, рация, так? Других ОС на смартфонах, вроде как, нет. Да и нужны ли они (смартфоны)?

Я, честно говоря, не против такого исхода и для меня лично смартфон и планшет никогда не заменит ноутбук или ПК.

А вы, Андрей Викторович, еще пользуетесь "городским телефоном" или "звонилка" заменяет его?

parent From admin profile Sun Apr 4 22:00:17 2021 UTC pencil

userpic

Совершенно

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

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

parent From Oliver (unverified) Thu Apr 8 17:00:00 2021 UTC pencil

Пользуюсь

Пользуюсь кнопочными мобильниками всю жизнь. И пока что не собираюсь менять привычку. После долгих лет, недавно сменил телефон, купив кнопочник Nokia 2720 Flip: это - смартфон, который работает на KaiOS - свободной ОС. Правда вот не знаю пока что о том, какие возможности у пользователя в ней менять тот же IMEI. Моэет Вас заинтересует.

From Anonymous (unverified) Mon Mar 8 12:03:00 2021 UTC pencil

Качество печати

Здравствуйте.
Меня интересует качество печати данных книг. Каково оно?
Просто, для сложных (для меня) книг, я предпочитаю их бумажное воплощение. Но крайне не приятно держать в руках и работать с книгой с плохой бумагой и полиграфией.

parent From admin profile Mon Mar 8 14:15:00 2021 UTC pencil

userpic

Странный вопрос, честно говоря

Мне вот что интересно, вы на какой ответ рассчитываете? В каком виде? Книги вышли в твёрдом полноцветном переплёте, корешок плоский, скрепление клеевое (да, не шитое, звиняйте), бумага, если не ошибаюсь, 65 гр/м2. Печать типографская, тип печатного станка мне не известен (но это не ризограф, если вас этот момент интересует, а вот офсет это или что-то другое -- извините, понятия не имею). Что вас может не устроить -- ну, базовый шрифт 10й, можете любую страницу из PDFок распечатать, посмотреть, подходит вам такой шрифт или нет. Больше мне ничего в голову не приходит, что можно было бы ответить, но если у вас конкретные вопросы есть, задайте их.

From Drobagh (unverified) Sat Mar 6 07:58:00 2021 UTC pencil

Здравствуйте,

Здравствуйте, очень сильно замотивирован в прочтении данных пособий, но сразу возник общий опрос по поводу того, когда лучше это собственно сделать:
1) Прямо сейчас, без выпущенного задачника (хотя бы по первому тому), придумывая себе задачки, закрепляя знания (По моему мнению, в таком случае можно опустить важные детали и как результат не понять какую-либо ключевую концепцию)
2) Дождаться полноценного задачника и после этого приступать к прочтению

Ясное дело что ответ зависит от временных рамок выпуска самого задачника. Хотелось бы узнать Ваше мнение по этому поводу )

Заранее Спасибо!

parent From admin profile Sat Mar 6 11:05:02 2021 UTC pencil

userpic

Вообще-то я

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

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

parent From Anonymous (unverified) Sat Apr 3 07:28:00 2021 UTC pencil

А как насчёт

А как насчёт https://projecteuler.net ?

Есть и другие подобные сайты, но этот первым в голову приходит.

parent From admin profile Sat Apr 3 09:51:52 2021 UTC pencil

userpic

Это не о том

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

Не скажу, что в практическом программировании так не бывает — бывает, конечно. Просто редко. Зато намного чаще приходится бить себя по рукам, вспоминая словосочетание "преждевременная оптимизация".

parent From Anonymous (unverified) Sat Apr 3 14:50:00 2021 UTC pencil

А у меня и

А у меня и брутфорс на тех задачах срабатывает. Ну подумаешь подожду 2 минуты вместо 0.02 секунд, зато потрачу на написание 20 минут вместо 2 часов.

parent From admin profile Sat Apr 3 23:35:18 2021 UTC pencil

userpic

Я давно туда не

Я давно туда не лазил, но если правильно помню, то отбрутфорсить там можно первые примерно полсотни задач, а дальше уже лобовые решения получаются на год машинного времени или что-нибудь вроде того.

В любом случае, если задачи из projecteuler брутфорсить, то зачем на них вообще время терять? Польза-то от них где? Между прочим, где-то в сети валяются ответы на все тамошние задачи, ну вот вбить их по одному и всё, чего там.

parent From Anonymous (unverified) Fri Jul 9 15:34:00 2021 UTC pencil

Брутфорс

Польза от решения брутфорсом в том, что бы потом сделать diff вывода с "правильным" решением, и узнать, действительно ли оно правильное.

parent From admin profile Sun Jul 11 18:38:04 2021 UTC pencil

userpic

Там нет

Там нет "правильных" решений, в смысле они там не опубликованы, а если бы и были, diff бы не помог.

parent From Anonymous (unverified) Mon Jul 12 06:24:00 2021 UTC pencil

projecteuler

> Там нет "правильных" решений, в смысле они там не опубликованы, а если бы и были, diff бы не помог.

Вы просто не поняли, что я имел в виду. Попробую ещё раз:

В любом случае, написать решение брутфорсом имеет смысл до того как думать над "правильным" решением. Когда "правильное" решение будет готово, можно сделать вот так:

diff <(./bruteforce) <(./good_solution)

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

parent From admin profile Mon Jul 12 07:11:24 2021 UTC pencil

userpic

Ответом на

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

From Alejandro (unverified) Thu Mar 4 13:39:00 2021 UTC pencil

Поздравляю Вас,

Поздравляю Вас, Андрей Викторович! Блестящее достижение! А ведь еще говорили в анонсе 2-го издания, что через год ждать ничего не следует. Но нет, дождались :)

P.S.: Перечитывать то, что уже много раз читал в первом издании и находить новый текст, новые мысли - это удивительное удовольствие! Отдельное спасибо за это.

From qupear (unverified) Thu Mar 4 13:20:00 2021 UTC pencil

Спасибо

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

From Anonymous (unverified) Wed Mar 3 23:11:00 2021 UTC pencil

Cпасибо!

+ в карму и спасибо!


pencil

пояснение


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

Если вы искали сайт замечательного писателя-фантаста Андрея Михайловича Столярова, то вам, к сожалению, не сюда.

Андрей Михайлович Столяров в библиотеке Мошкова

Авторские права © Андрей Викт. Столяров, 2009 — 2024