Программирование: введение в профессию. Издание второе, в трёх томах.АннотацияУчебник «Программирование: введение в профессию» ориентирован на самостоятельное изучение и предполагает использование систем семейства Unix (в т.ч. Linux) в роли сквозной среды для обучения. Публикация в бумажном вариантеПервое издание публиковалось издательством МАКС Пресс (Москва) с 2016 по 2020 г.Второе издание опубликовано издательством МАКС Пресс в 2021 году.
Электронная версияЭлектронные версии каждого из трёх томов, идентичные печатному изданию, доступны по следующим адресам:
Статус бумажной версииТираж распродан.Архив примеров программАрхив, содержащий примеры программ, можно скачать здесь: progintro_e2_examples.tgz. Напоминаем, что раскрыть этот архив можно командойtar -xzf progintro_e2_examples.tgz Файл mv stud_io_inc stud_io.inc ErrataСписок найденных в тексте ошибок и опечаток находится здесь. |
Программирование: введение в профессиюпояснениеВы находитесь на официальном сайте Андрея Викторовича Столярова, автора учебных пособий по программированию и информационным технологиям. Если вы искали сайт замечательного писателя-фантаста Андрея Михайловича Столярова, то вам, к сожалению, не сюда. Андрей Михайлович Столяров в библиотеке Мошкова |
☞ From Павел Савкин (panchous) (unverified) Tue Oct 29 14:46:32 2024 UTC
Том 2, стр. 316
Здравствуйте! Чувствую, что разобрался я поверхностно и нарываюсь на критику, но попробую рискнуть... Вы указываете, что если umask установлен 022, то для создаваемых файлов права на запись для всех, кроме владельца, сбрасываются (666 минус 022 равно 644). Тут всё верно. А вот что "возможность читать и ВЫПОЛНЯТЬ предоставляется всем желающим", вот тут я не пойму, вроде 644 это rw-r--r--, а не rwx-r-x-r-x? Конечно, если рассмотреть пример, что мы вычитаем из 777 022, то да, но вроде по-умолчанию в linux umask вычитается из 666? p.s. отправляю дрожащей рукой с чувством предстоящего бана =)
ответить
From Andrey V. Stolyarov Tue Oct 29 14:57:47 2024 UTC
Re: Том 2, стр. 316
Ну да, бан уже близок.
umask вычитается не из 666, а из того, что указано в вызове open (или creat, или mkdir, или где там ещё есть этот параметр). В книге это написано. А индивидуальные консультации я предоставляю только в рамках менторинга.
А кроме того, уясните разницу между частицей "по" и предлогом "по". Когда вижу подобное этому вашему "по-умолчанию", рука сама тянется к банхаммеру.
ответить
☞ From Савкин Павел (panchous) (unverified) Mon Oct 21 12:58:08 2024 UTC
Том 2, стр. 333
Если убрать #include sys/types.h ничего не изменится, возможно этот заголовочный файл не нужен?
ответить
From Andrey V. Stolyarov Mon Oct 21 13:56:20 2024 UTC
Re: Том 2, стр. 333
Прежде чем подобное тащить на сайт, сделайте man на те функции, которые используются в программе. В данном случае, например, opendir. Список необходимых инклудников там показан в самом начале.
А потом попробуйте подобные упражнения с убиранием хидеров проделать, например, на FreeBSD, или в любом другом месте, где, в отличие от Linux, системные заголовочники друг дружку не включают.
ответить
☞ From Павел Савкин (panchous) (unverified) Thu Oct 10 15:00:02 2024 UTC
Том 2, стр. 249
#include curses.h заменить на ncurses.h? (хотя работает и так и так, но вдруг опечатка)
ответить
From Andrey V. Stolyarov Thu Oct 10 15:40:00 2024 UTC
Re: Том 2, стр. 249
Спасибо, на этот момент мне действительно стоило обратить внимание. Как я сейчас посмотрел, в тексте используется то одно, то другое. В целом это действительно не ошибка, поскольку работают оба имени, но заменять-то, наверное, надо наоборот ncurses на curses, это более универсально. В общем внёс этот момент в TODO, к третьему изданию что-то с этим сделаю.
ответить
From Павел Савкин (panchous) (unverified) Sun Oct 13 10:22:50 2024 UTC
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.
ответить
From Andrey V. Stolyarov Sun Oct 13 11:21:02 2024 UTC
Re: Том 2, стр. 249
Ага, прекрасно — попытался писать с использованием ncurses, только без ncurses, что-то как-то не очень получилось, пришлось поставить ncurses.
Ну так я больше скажу, если gcc не поставить, вообще ни один пример из второго тома не заработает.
ответить
☞ From panch0us (unverified) Wed Sep 25 09:43:33 2024 UTC
про scanf (том 2, стр. 117).
Здравствуйте! Вы написали, что по мнению многих программистов применять scanf в полноценных программах не стоит. Если есть возможность - расскажите, пожалуйста, а как лучше делать, есть нужно получить форматированый ввод из стандартного потока ввода?
ответить
From Andrey V. Stolyarov Wed Sep 25 09:56:45 2024 UTC
Re: про scanf (том 2, стр. 117).
Единственный способ чтения, дающий стопроцентный контроль за происходящим (и, соответственно, возможность выдать пользователю полноценную диагностику на некорректные данные) — это посимвольное чтение. Между прочим, в книге это сказано явным образом. Прежде чем тащить на сайт подобные вопросы, научитесь читать.
ответить
☞ From Владимир (unverified) Mon Sep 16 20:09:29 2024 UTC
Третье издание
Здравствуйте. Когда планируется выход третьего издания?
ответить
From Andrey V. Stolyarov Mon Sep 16 20:41:16 2024 UTC
Re: Третье издание
Надеюсь ближе к новому году сделать, но не гарантирую. К сожалению, оно будет чисто электронное.
ответить
☞ From Вася (unverified) Tue Aug 27 09:52:17 2024 UTC
Том 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), и в тексте примеров для этого всюду используется эта крякозябля.
Пишу это не на странице опечаток, потому что как будто бы эта ошибка (или не ошибка, не знаю даже) в класс опечаток не входит. В эррате упоминаний про это нет - или я слепой, простите, если об этом известно и где-то указано, почему в разных изданиях оно по-разному выглядит.
ответить
From Andrey V. Stolyarov Tue Aug 27 11:52:35 2024 UTC
Re: Том 1 ДМК Пресс, п. 2.8.4 - 2.8.5
Действительно так, это рудимент, в версии от ДМК уже предлагается (в тексте) использовать другой способ восстановления терминала, но вроде бы в одном из примеров (или в двух?) я забыл это поменять.
В третьем издании всё будет единообразно.
ответить
☞ From panchous (unverified) Tue Aug 13 20:11:25 2024 UTC
Том 2, стр. 123
Заранее прошу прощение за, возможно, глупый вопрос: в файле fgetcputc.c не нужно выполнить закрытие файлов?
ответить
From Andrey V. Stolyarov Tue Aug 13 20:31:01 2024 UTC
Re: Том 2, стр. 123
В рукописи и в файле примера эти два fclose уже добавлены. Если же по существу вопроса, то непосредственно перед завершением программы файл, который открыт на чтение, можно закрывать разве что "для красоты", это тупо лишний системный вызов; но вот файл, открытый на запись, с учётом буферизации, не закрывать — это совсем некрасиво. Ну то есть libc справится, конечно, exit со всеми его хуками никто не отменял, но лучше на них не закладываться.
Собственно, поэтому я туда и согласился эти два fclose вставить; вставлять только один было бы как-то совсем странно.
ответить
☞ From panchous (unverified) Sat Aug 10 08:42:38 2024 UTC
Том 2, стр. 76
В последней строке отсутствует фигурная скобка для обозначения начала тела функции.
ответить
From Andrey V. Stolyarov Sat Aug 10 09:52:32 2024 UTC
Re: Том 2, стр. 76
Как это отсутствует? Очень даже присутствует.
ответить
From panchous (unverified) Sat Aug 10 20:11:15 2024 UTC
Re: Re: Том 2, стр. 76
Прошу прощения, это я не заметил, как моя электронная книга съела фигурную скобку...
ответить
☞ From Тимур (unverified) Wed Aug 7 13:17:09 2024 UTC
*
Здравствуйте, уважаемый Андрей Викторович. Хочу поблагодарить вас за столь ценный труд и вклад, как по мне, это невероятное достижение в современных реалиях преподнести интересующимся людям такое, да еще и бесплатно! Давно искал подобный материал без псевдонаучного изложения (сам я никак пока не связан напрямую с программированием, но очень к этому стремлюсь и ваши книги помогают эту мотивацию сохранить и развить). Хочу задать вопрос, как человеку, мнение которого могу считать авторитетным и компетентным (не знаю, уместно ли его тут задавать). Могли бы вы посоветовать какую-либо литературу помимо ваших трудов, которая одновременно могла бы быть полезна для всех программистов и при этом вы и сами доверяли авторам этих книг? P.S. при прочтении ваших книг возникает ощущение пробелов в собственных знаниях, в той же математике. Понятно, что некоторые примеры приводятся в ознакомительных целях и пр., но все же есть интерес и необходимость разобраться в вопросе глубже.
ответить
From Andrey V. Stolyarov Wed Aug 7 15:09:02 2024 UTC
Увы
Ага, стал бы я три тома такой толщины писать сам, если бы было что порекомендовать.
Ну то есть по математике-то, конечно, есть хорошая литература, и много, а в моей книжке математики почти что и нет. Только я тут не силён, что там зачем и кому рекомендовать, математику другие люди умеют преподавать намного лучше, чем я. А вот по программированию, честно говоря, мне вообще нечего вам посоветовать. Ну то есть какие-то книжки есть в списках литературы в трёхтомнике, но это чтобы можно было провентилировать такие вопросы, которые я в своей книге упоминаю, но не разбираю (поскольку даже такой толстый трёхтомник всё-таки не резиновый).
ответить
☞ From Алексей (unverified) Mon Aug 5 09:59:36 2024 UTC
Том 1, стр. 216, рис. 1.14
Опечатка. Символ с кодом 39 это не вопросительный знак (?), а одинарная кавычка (').
А ещё, спасибо огромное за Ваши книги, это лучшее (на мой взгляд) учебное пособие по программированию.
ответить
From Andrey V. Stolyarov Mon Aug 5 10:12:21 2024 UTC
Re: Том 1, стр. 216, рис. 1.14
А ведь факт. Интересно, как мне это удалось, учитывая, что таблицу я тупо содрал из man ascii.
А вот по поводу словоформы одинарный — см. сюда :-) Не будем уподобляться полуграмотным писарям XIX века.
ответить
☞ From asb (unverified) Sat Aug 3 17:00:17 2024 UTC
забавный факт
При присваивании в условии тернарного оператора не выдает предупреждения ни gcc (с -Wall), ни clang.
ответить
From Andrey V. Stolyarov Sat Aug 3 17:15:34 2024 UTC
Re: забавный факт
Это вполне логично. У присваивания ниже приоритет, чем у тернарной операции, так что, чтобы его использовать в условии, в скобки его взять придётся по-любому. Сравнение (двойное равенство) в той же ситуации брать в скобки не требуется. Соответственно сам факт наличия скобок убеждает компилятор, что программист знает, что делает.
ответить
☞ From panch0us (unverified) Wed Jul 31 14:20:50 2024 UTC
Том 1, стр. 666
“Все три сообщения об ошибках" заменить на "Все сообщения", так как в приведенном примере два сообщения об ошибках, а одно информативное.
ответить
From Andrey V. Stolyarov Thu Aug 1 10:42:25 2024 UTC
Re: Том 1, стр. 666
Там все три сообщения выдаются именно что при ошибке. Но вообще этот фрагмент текста довольно тяжеловесный получился, попробую переформулировать.
ответить
☞ From Anonymous (unverified) Mon Jul 22 11:41:05 2024 UTC
Непонимание кнопок в графических интерфейсах
В томе 3 на странице 264 во 2 абзаце нашел интересное предложение, приведу его часть:
"Между прочим, автор лично видел людей, не понимающих, что "кнопка" на экране на самом деле вовсе не кнопка, что она нарисована..."
Можете, пожалуйста, подробнее раскрыть этот момент? Не очень понимаю, как можно не догадываться, что кнопка на экране нарисована. Люди, которых вы упоминаете, думали, что кнопка, например, прирастает к экрану, и при смене интерфейса надо менять весь экран?
ответить
From Andrey V. Stolyarov Mon Jul 22 13:35:02 2024 UTC
Re: Непонимание кнопок в графических интерфейсах
Я что, телепат по-вашему? Понятия не имею, что у этого имбецила реально в голове творилось, но когда человек не верит тому, что ему говорят -- это видно по глазам, особенно когда и скрывать не пытаются.
Избавляйтесь от лишней веры в человечество. Просто смиритесь с тем, что вас окружают дебилы, и их гораздо больше, чем могло бы показаться.
ответить
☞ From panchous (unverified) Thu Jul 18 10:47:08 2024 UTC
Второе издание, том 1, 3.3.6
Наверно моё предложение странное, но, возможно, вместо "мы изобразили верхний край стека как нечто нечёткое", использовать "я изобразил..."?
ответить
From Andrey V. Stolyarov Thu Jul 18 10:54:11 2024 UTC
Re: Второе издание, том 1, 3.3.6
Такое в книге встречается, подозреваю, несколько сотен раз, так что переделывать это даже чисто технически было бы сложно. Это раз. А два — повторяю в миллионный раз: я не принимаю никакие советы по содержанию книги, только сообщения о явных ошибках.
ответить
☞ From Никита (unverified) Wed Jul 10 09:44:31 2024 UTC
Второе издание, том 1, 3.2.5
"Процессор i386 позволяет для косвенной адресации использовать только значения, хранимые в регистрах". Использование операнда типа "память"; через метку: mov ebx, [count] не является косвенной адресацией?
ответить
From Andrey V. Stolyarov Wed Jul 10 13:28:16 2024 UTC
Re: Второе издание, том 1, 3.2.5
Разумеется, не является. Самая что ни на есть прямая адресация, адрес указан в явном виде в команде. Суть косвенной адресации в том, что адрес хранится где-то ещё (для i386 это только регистры, но бывали в истории и такие процессоры, которые могли сам адрес взять откуда-то из памяти) и, соответственно, вычисляется во время работы программы, тогда как во время её написания, компиляции и сборки адрес неизвестен.
Мне вот интересно, какого размера должно быть самомнение, чтобы подобные вопросы не задавать в качестве вопросов, а пытаться сразу репортить как якобы ошибку в книге.
ответить
☞ From asb (unverified) Mon Jun 24 13:19:54 2024 UTC
while((c = getchar()) != EOF)
В &4.4.1 Вы рассказываете о двух вариантах написания цикла с getchar и отмечаете, что оба имеют недостатки - дублирование кода в первом и побочный эффект в заголовке во втором.
Чуть позже, в &4.8.3 Вы отмечаете, что в идеале должна быть отдельная конструкция для таких циклов - выборка, проверка условия, тело цикла.
А если переписать через бесконечный цикл? Навеяно виртовским отдельным оператором для бесконечных циклов loop-exit-end из Модулы/Оберона, который используется в примерах именно в таком варианте (выборка, условие, обработка).
Тоже криво (бесконечный цикл с брейком), но нет ни дублирования кода, ни побочного эффекта в заголовке цикла. Что скажете?
ответить
From Andrey V. Stolyarov Mon Jun 24 14:16:59 2024 UTC
Re: while((c = getchar()) != EOF)
См. в третьем томе параграф 9.3.2, там этот вариант разобран. Понять бы ещё, почему этот вариант людям покоя не даёт.
ответить
☞ From Andrey (unverified) Mon May 13 15:49:01 2024 UTC
Количество страниц в книках
Так специально получилось, что все 3 книги по 707 страниц?
ответить
From Andrey V. Stolyarov Mon May 13 17:40:07 2024 UTC
Re: Количество страниц в книках
См. новость номер 302 и к ней комменты.
ответить
☞ From Андрей (unverified) Tue Apr 9 23:10:04 2024 UTC
CMS на NASM
Добрый день, Андрей Викторович. Захотел я тут написать CMS на ассемблере. Да, месье знает толк в извращениях. Да, я понимаю, что делаю, что будет долго и т.п. Просто мне реально очень нравится язык ассемблера, и я хочу понять, как всё функционирует на низком уровне. Я поиграл с сокетами, много куда залез, поиграл с brk, посмотрел разные варианты аллокации памяти, некоторые её реализации, стало сильно больше понимания. А в си-шке всё же многое скрыто при написании кода и не "пощупать".
Но есть пару моментов, к которым я не понимаю, как подступиться:
1). По поводу архитектуры. Идея такая: запущена серверная программа со слушающим сокетом. Как только приходит запрос, она порождает процесс и отдаёт в работу запрос ему, а сама возвращается к слушанию сокета. Дочерний процесс делает все проверки, обработки и отправляет необходимый ответ, после чего закрывает соединение и завершается. Это так работает в общих чертах?
2). Библиотеки и модули. Я понимаю, что надо будет написать свои библиотеки для работы. Правильно ли я понимаю, что я создаю библиотеки по общему принципу (работа со строками, работа с памятью, работа с файлами и т.д.), каждый файл *.asm будет содержать в себе одну подпрограмму, потом всё это компилируется, и все получившиеся объектные модули одного типа я собираю в библиотеку? Или в одном файлике *.asm может быть больше одной подпрограммы? Как будет правильнее?
3). Имеет ли смысл некотрые константы вынести в сегмент кода? Вы писали в книгах, что сегмент кода неизменен, он копируется в оперативную память один раз и используется для всех порождённых процессов. Будет ли эффективнее, например, вынести туда номера системных вызовов, просто сделав условную компиляцию для linux и freebsd? Тогда можно в качестве аргументов подпрограмме давать sys_read, sys_brk. Так и понятнее код будет, и в порождённых процессах не будет копироваться лишняя информация в сегмент данных.
4). Хочу сделать всё максимально UNIX'овым, по философии. Есть такое соглашение, что каждая программа должна делать что-то одно и делать это хорошо, и программы должны взаимодейстовать друг с другом, используя принцип конвейера. Насколько крупными могут быть эти программы? Надо ли дробить функционал на множество мелких программ, перенаправляя на них потоки ввода/вывода? Я так понимаю, что надо будет сперва создать текстовый интерфейс для взаимодействия с CMS с помощью терминала, а потом уже прикручивать окошки. Как не усложнить это всё, ведь CMS пишется для какого-то пользователя, который не всегда хорошо подкован? Если сделать линейку конвейров, не запутается ли потом конечный пользователь в комбинациях?
Буду признателен за любой ответ. Можно не разворачивать, дать ссылки либо просто назвать источник, где почитать и посмотреть. Благодарю за ваш труд.
ответить
From Andrey V. Stolyarov Wed Apr 10 23:01:32 2024 UTC
Re: CMS на NASM
Про то, как работают сокеты, см. второй том Введения в профессию, часть 6. Вот только CMS не работают с сокетами. Никогда.
Про то, как работать с ассемблером — см. первый том, часть 3. Отвечать на частные вопросы я не буду, это я делаю только в рамках менторинга, но вариант писать на асме CMSку в рамках менторинга полностью исключён (впрочем, всё равно мест нет).
Ну и последнее: если у вас рука поднялась написать что-то про "окошки" в применении к CMS, то вы вообще не понимаете, куда попали.
ответить
☞ From Василий Ильич (unverified) Wed Mar 6 20:50:54 2024 UTC
IOResult
ДМК Пресс. На странице 359 указано, что IOResult -- переменная, из-за чего я не понимал, почему следующий код выводил в стандартный поток 0:
В остальных местах правильно указано, что это функция. :)
ответить
From Andrey V. Stolyarov Wed Jul 31 12:58:32 2024 UTC
Re: IOResult
Да, факт. Спасибо.
ответить
☞ From Anonymous (unverified) Tue Jan 16 17:17:10 2024 UTC
Вычисление выражений
Андрей Викторович, здравствуйте!
Какое-то время назад поставил себе задачу при работе с LaTeX, сделать "вычислитель выражений", т.к. во время написания курсовых бывает очень много выражений в духе:
Единственное, что я в итоге сделал, это простейший преобразователь на Паскале, который превращал выражение из TeX-нотации во что-то понятное для уже существующих калькуляторов. Но вот как подступиться к вычислению самого выражения... Полнейший ветер в голове. Иногда возвращаюсь к этой задаче, но каждый раз не знаю как подступиться. Паскаль и даже ассемблер (п. 3.4.5) умеют это делать при компиляции! Но как?.. Подскажите, пожалуйста, как к этой задаче поступиться! Уже не знаю, это нетривиальная задача или я глупенький?
P.s. я знаю, что во всяких скриптовых языках есть что-то в духе:
Что выполнит код в содержащейся строке, но: а) это не даёт понимания КАК оно вычисляет выражения. б) ну, как-то неспортивно. :)
ответить
From Andrey V. Stolyarov Tue Jan 16 17:29:14 2024 UTC
Re: Вычисление выражений
Обратите внимание на алгоритм Дейкстры, изложенный в параграфе 3.8.4 мелким шрифтом (да, это часть про ассемблер, но сам алгоритм к ассемблерному программированию отношения не имеет).
ответить
From Anonymous (unverified) Wed Jun 19 09:54:54 2024 UTC
Re: Вычисление выражений
Про алгоритм Дейкстры не читал но осуждаю. На самом деле читал, но давно и не помню.
Но в юниксовой утилите bc использовался движок dc ранее. В версии GNU они правда уже независимы, хотя и на базе одной и той же библиотеки.
В общем, проще всего сделать вычислитель выражений для обратной польской записи, чем пользуются в таких замечательных языках программирования, как, например Forth, ну и в том же dc, старых калькуляторах от HP и так далее. Там всего-то нужен стек.
Не знаю, облегчит ли как-то предварительное преобразование в ОПЗ задачу или нет, но в любом случае я полагаю, что можно использовать не-хвостовую рекурсию.
Например, видим открывающую скобку — вызываем ту же функцию, которой передаётся указатель на начало выражения за скобкой, видим закрывающую скобку - возвращаем вычисленное значение.
Для выражений без скобок, содержащих четыре основных действия можно завести три числовых буфера (сумма, произведение и текущее число) и три флага, тип последней операции (мультипликативная или аддитивная) и направление последних мультипликативной и аддитивной операции. Затем читать выражение, и как только прочитано число, добавлять его к сумме (с плюсом или минусом) или к произведению (с умножением или делением) в зависимости от типа последней операции. Затем, если тип операции при чтении следующего знака менятся на аддитивный, добавлять произведение к сумме с соответствующим знаком, ну и таким образом в зависимости от последнего знака и предыдущего знака действия решать, что делать с последним прочитанным числом. Как результат возвращать сумму.
Не знаю, совпадает ли моя идея с алгоритмом Дейкстры или нет.
ответить
From Andrey V. Stolyarov Wed Jun 19 13:03:49 2024 UTC
Re: Вычисление выражений
Алгоритм Дейкстры как раз и есть алгоритм перевода арифметического выражения из традиционной инфиксной нотации в RPN (кстати, аббревиатуру ОПЗ вижу впервые, как-то привычнее выглядит ПОЛИЗ — "польская инверсная запись"). С вашим он не совпадает хотя бы в том, что в нём не применяется рекурсия, а у вас тут получилось скорее на рекурсивный спуск похоже.
Мне, честно говоря, другое интересно: вот какова мотивация людей, оставляющих такие комментарии? Это чтобы что?
ответить
From Anonymous (unverified) Wed Jun 19 22:20:41 2024 UTC
Re: Re: Вычисление выражений
После чтения исходного комментария мне стало интересно, как бы я стал решать задачу вычисления произвольного выражения, не зная (точнее не помня) готовый алгоритм. Вот как-то так, без RPN.
А вот как преобразовать выражение в RPN что-то я так и не придумал сходу. Разве что то ли возникла, то ли вспомнилась идея сформировать структуру-дерево.
ответить
From Andrey V. Stolyarov Thu Jun 20 08:59:36 2024 UTC
Re: Вычисление выражений
Этот алгоритм Дейкстры туп как пробка, в книжке его описание занимает чуть больше странички. С деревом, впрочем, идея тоже не нова — написать грамматику арифметического выражения с учётом приоритетов операций, написать по этой грамматике методом рекурсивного спуска анализатор (парсер, разборщик, как хотите назовите), в него вставить действия по вычислению выражения. Колхозить непойми что на эту тему можно разве что из спортивного интереса, да и то сомнительно.
ответить
☞ From anonymous (unverified) Fri Jan 12 21:27:15 2024 UTC
Программы на Ассемблере
Поделитесь, пожалуйста, идеями программ на языке ассемблера, которые могут помочь достичь понимания на достаточно хорошем уровне для последующего изучения языка программирования Си.
ответить
From Andrey V. Stolyarov Fri Jan 12 22:11:18 2024 UTC
Re: Программы на Ассемблере
См. задачник, раздел 3.
Впрочем, "для последующего изучения Си" намного, ну то есть во много раз важнее освоить Паскаль, а не ассемблерное программирование. Работе с указателями вы на асме не научитесь (есть много людей, прямо утверждающих обратное; они либо не понимают, что несут, либо просто врут). Ну и сишности головного мозга вам ассемблер избежать не поможет.
А ещё слово "ассемблер" — нарицательное, писать его с большой буквы — грубая ошибка.
ответить
From Anonymous (unverified) Sat Jan 13 23:26:20 2024 UTC
Re: Re: Программы на Ассемблере
А что делать если после Паскаля уже не хочется переходить на Си? :_)
ответить
From Andrey V. Stolyarov Sun Jan 14 01:22:50 2024 UTC
Re: Программы на Ассемблере
А зачем что-то делать?
ответить
From Anonymous (unverified) Wed Jan 24 06:31:39 2024 UTC
Re: Re: Программы на Ассемблере
Если это философский вопрос: не отвечу. :)
А если не философски, на моём текущем этапе вижу следующие проблемы:
1. Как показывается ваша история SeekEoF, непонятно что творят мейнтейнеры.
2. Не работает флаг -v. Чтобы скомпилировать что-то на предыдущей версии компилятора, нужно лезть в интернет и искать старый релиз. Полгода назад хотел проверить кое-что с релизом 3.2.0, пошёл качать с официального сайта, а там раздел со старыми релизами не работает, пришлось искать на других сайтах. (Самое смешное, что я прямо сейчас проверил. Он или до сих пор не работает или опять не работает. :) )
3. С точки зрения дальнейшего трудоустройства вариантов немного куда пойти. Хотя вот Delphi до сих пор жив. Буквально вчера в университете была лекция про GIS, нам показали несколько сайтов, на одном из них были размещены вакансии. Я полистал вакансии и как-то удивительно много нужно Delphi программистов.
ответить
From Andrey V. Stolyarov Wed Jan 24 09:45:57 2024 UTC
Re: Программы на Ассемблере
Писать всю жизнь под форточки — так себе идейка.
А что на FreePascal в его нынешнем состоянии невозможно всерьёз полагаться — ну да, это довольно очевидно.
ответить
From Anonymous (unverified) Thu Jan 25 17:03:50 2024 UTC
Re: Re: Программы на Ассемблере
>>Писать всю жизнь под форточки — так себе идейка.
Вы тут имеете ввиду Delphi? У меня есть 3-4 книги конца 90-ых, начала 00-ых, они про то как окошки в форточках рисовать. А так, если смотреть вакансии, обычно к Delphi требуют опыт работы с Linux.
ответить
From Andrey V. Stolyarov Thu Jan 25 17:19:16 2024 UTC
Re: Программы на Ассемблере
> обычно к Delphi требуют опыт работы с Linux
Крайне странно — я не вполне понимаю, что между ними общего.
ответить
☞ From Anonymous (unverified) Wed Dec 20 19:26:36 2023 UTC
Идея по оптимизации работы в терминале: Паскаль или Bash?
Здравствуйте! В процессе работы с терминалом передо мной встала интересная задача, которую, как мне кажется, можно было бы решить с использованием Паскаля. Однако у меня есть сомнения относительно того, насколько разумным решением будет использование Паскаля в данном случае.
Мне часто приходится взаимодействовать с консольными программами, которые получают информацию из переменных окружения – это может быть путь к конфигу для программы или различные ключи и параметры. Я часто сталкиваюсь с ситуацией, когда у меня есть несколько окружений, и мне приходится переключаться между ними. Однако не всегда удобно искать параметры для конкретного окружения или вводить путь к конфигурационному файлу заново. Использование нескольких конфигурационных файлов с командой source в Bash также не всегда оказывается удобным.
Я подумал о том, чтобы создать программу, позволяющую мне легко переключаться между окружениями одной командой. И хотя я рассматриваю использование Паскаля, задаюсь вопросом, стоит ли вообще реализовывать это на Паскале, или, возможно, стоит рассмотреть возможность написания скрипта на Bash.
ответить
From Andrey V. Stolyarov Wed Dec 20 19:50:34 2023 UTC
Re: Идея по оптимизации работы в терминале: Паскаль или Bash?
Зависит от ваших приоритетов. Понятно, что такое на Воurne Shell пишется без особых проблем, этот язык специально под такие задачи заточен. В пользу Паскаля в данном случае можно высказать два соображения: во-первых, это может быть полезнее в качестве учебного этюда, а во-вторых, может просто процесс написания оказаться приятнее :-)
ответить
From Anonymous (unverified) Thu Dec 21 20:59:25 2023 UTC
Re: Re: Идея по оптимизации работы в терминале: Паскаль или Bash?
Единственный метод установки переменных окружения в языке Pascal, который мне удалось обнаружить, - это использование функции setEnv из модуля libc. Однако мне кажется, что это не самый оптимальный способ реализации.
Возникла идея написать программу на языке ассемблера в качестве учебного этюда. Я задумался, как можно вызывать системный вызов SetEnv в языке ассемблера. К сожалению, мои поиски в Интернете не привели к нужной информации.
Буду благодарен за помощь или подсказки по этому вопросу.
ответить
From Andrey V. Stolyarov Thu Dec 21 22:27:32 2023 UTC
Re: Идея по оптимизации работы в терминале: Паскаль или Bash?
У-ууууу, ну тут у вас явно проблемы. Откуда вы вообще взяли информацию о getenv и зачем вы его пишете смешанным регистром? Си, в отличие от Паскаля, к регистру чувствителен, как, кстати, и bash, так что в большинстве источников getenv будет написан на нижнем регистре.
Проблема в том, что это никоим образом не системный вызов, ядро за вас не станет делать работу, которая может быть выполнена вне ядра, а это в данном случае просто поиск внутри хитрой структуры данных, содержащей обыкновенные строки.
Как до всего этого добраться — ну, оно на момент старта программы всё целиком лежит в стеке, там сначала указатели на параметры командной строки, потом в каком-то виде указатели на окружение, а потом (там же, в стеке) собственно параметры командной строки (надо же вышеупомянутым указателям куда-то указывать) и, наконец, содержимое окружения. Надо сказать, что внесение изменений в ЭТО потребует какой-то работы с динамической памятью (ибо в стеке новая версия может просто не поместиться), для этюдов на асме это уже, я бы сказал, малость перебор.
А самое интересное, что менять окружение бессмысленно, если после этого не делать execve, и вот это уже да, системный вызов, одним из трёх параметров он как раз получает окружение. А перед execve ещё обычно делают fork, и там ещё есть wait, как со всей этой машинерией обращаться — во втором томе написано, но с расчётом на работу на Си.
Видимо, тот случай, когда проще будет на bash'е сделать. Си вам изучать, полагаю, рано.
ответить
From Anonymous (unverified) Fri Dec 22 06:29:42 2023 UTC
Re: Re: Идея по оптимизации работы в терминале: Паскаль или Bash?
> Откуда вы вообще взяли информацию о getenv
https://www.freepascal.org/daily/packages/libc/libc/setenv.html
Понял, благодарю за пояснения. Видимо, придется оставить написание этой программы до изучения Си.
ответить
☞ From Alejandro Fri Dec 8 18:58:47 2023 UTC
Пустые строки
На этой странице в дисклеймере для тех, кто "ищет второй том", не хватает пустой строки :)
PS: Надеюсь, это единственный такой момент на сайте...
ответить
From Andrey V. Stolyarov Fri Dec 8 21:28:26 2023 UTC
Re: Пустые строки
Искал, не нашёл. Ну то есть там много где можно абзац разорвать, но где конкретно это предлагаете сделать вы?
ответить
From Alejandro Sat Dec 9 12:18:25 2023 UTC
Re: Re: Пустые строки
Я имею ввиду это
ответить
From Andrey V. Stolyarov Sat Dec 9 17:20:22 2023 UTC
Re: Пустые строки
Э-мммм, да, согласен :-) Спасибо.
Там проблема в том, что я в какой-то момент включил blockquote в список тегов, внутри которых пустые строки (и опционально переводы строк, зависит от заданного формата) ни во что не превращаются, а открытые (автоматически) абзацы перед ним закрываются. Так же, например, как внутри <p>, <ul> и всякое прочее такое. На принудительное закрытие абзцев и запрет абзацев внутри список сейчас один.
Короче, ща поправлю :)
ответить
☞ From Ivan (unverified) Fri Dec 1 14:58:37 2023 UTC
Ссылки как семантический феномен
Здраствуйте. В части по Си++ вы указали такую особенность, что идентификатор например типа int, МОЖНО рассматривать как int&. Я попробовал тернарный условный оператор в качестве lvalue для обычных идентификаторов и все сработало. Так вот напрашивается два предположения: обычные идентификаторы не просто МОЖНО рассматривать как ссылки, они ими и являются; либо же это просто особенность операции, она возвращает ссылку. Вопрос в том существует ли разница между обычными идентификаторами и ссылками? Ведь если это две разные сущности, как МОЖНО одну рассматривать как эквивалент другой... Не совсем понимаю где граница между этими понятиями( Спасибо вам большое за ваш труд)
ответить
From Andrey V. Stolyarov Fri Dec 1 15:26:14 2023 UTC
Re: Ссылки как семантический феномен
Ну, если уж лезть в такие терминологические дебри, то, пардон, что такое "идентификатор типа int"?! Имя переменной типа int — ну, это понятно что такое, и, видимо, вы это и имели в виду, но ваше вот это "идентификатор типа int", чтоб было понятно, это же и enum'овые элементы могут быть, и даже имя макроса, который превращается в целочисленный литерал, например.
А вот являются ли обычные переменные ссылками — тут, извините, ответ однозначный: конечно нет. Ссылка реализуется как отдельная область памяти, где содержится адрес. Когда вы описываете обычную переменную типа int, ничего подобного не возникает.
Так что речь тут может идти только вот именно что о семантической эквивалентности.
ответить
From Ivan (unverified) Fri Dec 1 15:52:26 2023 UTC
Re: Re: Ссылки как семантический феномен
Спасибо за ответ У меня есть еще один вопрос. Как тернарная условная операция сработала для обычных переменных в качестве lvalue? То есть она в таком случае возвращает переменную и это уже никак не относится к ссылкам, а скорее к реализации этой операции в Си++?
ответить
From Andrey V. Stolyarov Fri Dec 1 16:01:23 2023 UTC
Re: Ссылки как семантический феномен
Как можно "вернуть переменную"? Ни в C++, ни в чистом Си не существует такого типа выражения, как "переменная". Разумеется, результатом тернарной операции в данном случае становится ссылка.
Ну, э... чтобы было понятно, то же самое происходит и при возврате ссылок из функций. Простейший пример: пусть у нас есть глобальная (для простоты картины) переменная:
Теперь берём и пишем вот такую функцию:
Теперь можно сделать, например, что-нибудь вроде
function_that_returns_reference() = 25;
, и это занесёт число 25 в переменнуюdamn_global_var
. В оператореreturn
здесь фигурирует леводопустимое выражение, самый простой вариант такового — тупо имя переменной. А возвращается, как и написано в заголовке функции, ссылка. То есть семантический синоним этой переменной.В машинном коде мы, впрочем, увидим занесение адреса переменной в аккумулятор (EAX или RAX в зависимости от платформы).
ответить
From Ivan (unverified) Sat Dec 2 08:45:47 2023 UTC
Re: Re: Ссылки как семантический феномен
Это я как раз понимаю. Просто я не совсем понял связь между операцией которая по факту возвращает ссылку (в этом случае понятно почему оно lvalue) и тем что какие-то выражения которые были в Си lvalue в Си++ можно воспринимать как ссылки. То есть получается, что это фактически особенность операции, а не точки зрения которую вы предлагаете. Я извиняюсь за такую предирчивость) Просто выходит, что есть операции которые в Си не были lvalue, а в Си++ ими являются и что это не просто особенность восприятия, а фактическое отличие языков на уровне реализации.
ответить
From Andrey V. Stolyarov Sat Dec 2 12:55:10 2023 UTC
Re: Re: Re: Ссылки как семантический феномен
> это фактически особенность операции
Нет. С return'ом происходит абсолютно то же самое явление, так что оно обусловлено не свойствами тернарной операции (и не свойствами return), а свойствами ссылочного типа.
> фактическое отличие языков на уровне реализации.
Ну это вообще-то очевидно: в чистом Си ссылок вообще нет, как у этих двух языков может быть одинаковая реализация?
ответить
From Ivan (unverified) Sat Dec 2 14:02:31 2023 UTC
Re: Re: Re: Re: Ссылки как семантический феномен
Очевидно, что реализация разная. Спасибо вам большое за обратную связь) Очень хорошо, что есть возможность задавать вам вопросы)
ответить
☞ From rebus_x (unverified) Fri Dec 1 14:37:17 2023 UTC
Адрес сети в IPv4
Здравствуйте! Читаю 6.2.3 (том 2), абзац про первый и последний адреса в подсети. Вы пишете, что если очень хочется использовать их для хостов, то нужно перенастроить остальные хосты, чтобы они не реагировали на последний адрес как на широковещательный. Но не пишете про необходимые меры, чтобы можно было использовать первый адрес.
Поэтому я стал искать, а почему рекомендуют не использовать первый адрес, и для чего его резервируют - по аналогии с широковещанием на последнем, - и не нашёл внятных ответов. По тому, что есть, предполагаю что ответ таков - «потому что разные системы и сетевое ПО могут реагировать на него по-своему», то есть в силу разных исторических причин его советуют не трогать от греха подальше.
Вам об этом что-нибудь известно? Мне ответ интересен чисто для понимания.
ответить
From Andrey V. Stolyarov Fri Dec 1 15:03:09 2023 UTC
Re: Адрес сети в IPv4
Честно? А фиг его поймёт. Например, до сих пор существуют сети, использующие реальные адреса на соединениях "точка-точка" (хотя там можно вообще без адресов, можно применять интранетные, можно много чего, но уж точно не реальные, которые на вес золота), причём на каждое такое соединение расходуется "подсетка" /30, т.е. четыре адреса (два из которых, как мы понимаем, вообще никак не задействованы).
Честно говоря, я сильно подозреваю, что это из серии "тут так принято". На интранетных адресах экономить смысла особого нет, никто и не заморачивается. Ну а реальные адреса в наше время для физических сетевых интерфейсов используются редко (в большинстве случаев в старых сетях, где все боятся что-то переконфигурить), а так всё больше их вешают как алиасы, для VPSок применяют и т.п., при таком применении, если сисадмин не совсем тупой, никаких "специальных ролей" у адресов не возникает.
ответить
☞ From Anonymous (unverified) Sat Oct 21 08:54:13 2023 UTC
Функции или процедуры?
Здравствуйте, Андрей Викторович!
Во втором издании от МАКС Пресс нашел следующую опечатку (т.1, стр. 387, первый абзац):
Точно так же применяются знакомые на функции eof и SeekEof (...): при работе с файлами эти процедуры ...
Так все-таки функции или процедуры?
ответить
From Andrey V. Stolyarov Wed Jul 31 20:27:56 2024 UTC
Re: Функции или процедуры?
Факт, конечно функции. Спасибо.
ответить
☞ From Anonymous (unverified) Sun Oct 15 01:56:17 2023 UTC
Ошибочка?
Здравствуйте! На 531 странице 1 тома написано, что в 32-разрядных системах максимальный размер физической памяти составляет 4 GB, то есть 2^35 бит, хотя в действительности это 4 GBit. Поправьте, если не прав.
ответить
From Andrey V. Stolyarov Sun Oct 15 02:03:11 2023 UTC
Re: Ошибочка?
Ага, ну расскажите, с каких пор у нас каждый бит памяти отдельно адресуется. А заодно попытайтесь вспомнить, каков изначальный смысл слова "байт".
Между прочим, в книге это всё есть, но мы же так не умеем, смотрим в книгу, видим фигу, чо.
ответить
From Anonymous (unverified) Sun Oct 15 02:14:03 2023 UTC
Re: Re: Дурак.
Совсем забыл про момент, что ячейка памяти состоит из 8 бит, а 2^32 и есть это число этих ячеек. В следующие разы буду более внимателен, спасибо!
ответить
From Andrey V. Stolyarov Sun Oct 15 11:21:04 2023 UTC
На самом деле всё не так просто
Вообще говоря, если речь идёт о физической памяти, то её количество определяется разрядностью шины, а не разрядностью системы команд процессора. Поскольку везде и всюду используется виртуальная память, причём её страничная модель, в которой у каждого процесса своё виртуальное пространство, вот это ваше 2^32 -- это предельное количество виртуальной памяти на каждый процесс.
Ну а адресная шина может быть и пошире. Я больше того скажу, она и была шире, начиная ещё с Pentium Pro, у неё разрядность была 36 бит, потом стала ещё больше, вроде 40. В какой момент она стала 40-битной — не помню, но ощущение такое, что это ещё были 32-разрядные процессоры.
Я в вашем исходном комменте ухитрился не заметить слово "физическая".
ответить
☞ From Anonymous (unverified) Fri Oct 6 08:27:56 2023 UTC
Ошибка в коде в издании ДМК
Здравствуйте, Андрей Викторович.
В параграфе 2.10.6, проход по списку указателем на указатель, в издании ДМК на странице 397 содержится ошибка. Для списка, состоящего только из отрицательных чисел, следующий код не отловит ситуацию конца списка и попробует разыменовать nil:
ответить
From Andrey V. Stolyarov Wed Jul 31 15:32:14 2024 UTC
Re: Ошибка в коде в издании ДМК
Есть такое, да. В следующем издании поправлю.
ответить
☞ From savage (unverified) Wed Aug 23 06:16:18 2023 UTC
Ошибка в тексте
На стр.560 Тома 1, слово "Примененив" в третьем абзаце.
ответить
From Andrey V. Stolyarov Mon Jul 29 10:31:14 2024 UTC
Re: Ошибка в тексте
Спасибо
ответить
☞ From Anonymous (unverified) Tue Aug 8 17:18:33 2023 UTC
Возможно ошибка на стр 634, том 1.
Добрый день, Андрей Викторович! Читал листинг макроса для системного вызова в главе 3.6.9. и не совсем понял, почему проверка на корректность выполнения выполняется так:
and ecx, 0fffff000h cmp ecx, 0fffff000h jne %%
Ранее на стр. 655 говорится, что если системный вызов возвращает ошибку, то в eax попадает значение в диапазоне от 0fffff000h до 0ffffffffh. Но ведь после выполнение команды and значение в регистре ecx будет равно 0fffff000h только если там до этого было значение 0ffffffffh. Как будто нужен оператор jl или аналогичный по смыслу. Или я что-то упускаю?
ответить
From admin Tue Aug 8 17:49:15 2023 UTC
Re: Возможно ошибка на стр 634, том 1.
Вот это ваше утверждение:
> Но ведь после выполнение команды and значение в регистре ecx будет равно 0fffff000h только если там до этого было значение 0ffffffffh
я бы сказал, вызывающе неверно. Я не знаю, где у вас остались проблемы с восприятием — в двоичной логике или ещё где — но на таком уровне, пожалуй, подозревать наличие ошибки в тексте учебника стоит в самую последнюю очередь.
ответить
From Anonymous (unverified) Wed Aug 9 17:08:07 2023 UTC
Re: Re: Возможно ошибка на стр 634, том 1.
Прошу прощения, вы абсолютно правы. Я все время путаю логическое И с эквивалентностью, т.е. когда 0 и 0 или 1 и 1 дают единицу. Кстати, хотел уточнить насчет возврата системного вызова read - если во время очередной операции чтения наступает ситуация конца файла и в eax помещается 0, то как узнать сколько байтов было прочитано? И прочитаны ли они были вообще?
ответить
From Andrey V. Stolyarov Wed Aug 9 18:37:14 2023 UTC
Re: Возможно ошибка на стр 634, том 1.
Если read вернул ноль — значит, не прочитано ничего, упёрлись в конец файла. Если там что-то ещё есть до конца файла, то сначала оно будет прочитано как обычно, и read вернёт не ноль, а сколько прочитано; а ноль будет, когда мы read вызовем ещё раз.
Вообще вроде из текста книги это должно быть понятно, не?
ответить
☞ From Anonymous (unverified) Sun Aug 6 13:25:43 2023 UTC
Стандартные возможности Паскаля
Здравствуйте! Что делать, если возможностей стандартного Паскаля уже не хватает, но ещё не написано пару программ на 2-3 тыс. строк. Дело в том, что указатели и рекурсия уже освоены на достаточно хорошем уровне, и стандартных возможностей Паскаля уже не хватает (хочется взаимодействовать с операционной системой, сетью и т.д), из-за чего пропадает всякий интерес писать программы на Паскале.
ответить
From admin Sun Aug 6 13:32:38 2023 UTC
Re: Стандартные возможности Паскаля
Во-первых, и в-главных: никаких "стандартных возможностей Паскаля" не существует в природе. Единственный официально принятый стандарт Паскаля, к счастью, никогда не применялся на практике.
Во-вторых, любое взаимодействие с операционкой и сетью возможно, естественно, и на Паскале тоже, Free Pascal содержит реально прорву разнообразных модулей на эту тему; но вообще-то я бы не рекомендовал туда лезть.
Ну а ваша фраза "указатели и рекурсия уже освоены на достаточно хорошем уровне", извините, просто нелепа. Если вы не написали ни одной серьёзной программы, то ни о каком "хорошем уровне" не может идти речи, вы, скорее всего, просто не подозреваете, насколько ваша оценка собственного уровня далека от реальности.
Вынужден повторить фразу, которую постоянно говорю начинающим: схватитесь за Си раньше времени — мозгам кранты.
ответить
From Anonymous (unverified) Sun Aug 6 13:51:24 2023 UTC
Re: Re: Стандартные возможности Паскаля
> Если вы не написали ни одной серьёзной программы
Я пытался писать серьёзные программы (змейка, программа для эффективного управления своими задачами и какие-то подобие консольного текстового редактора), но к сожалению не одну из них смог завершить. Проблема в том, что после реализации основных функций (в основном это какие-то сложные для меня вещи, которые мне хотелось попробовать) программы, я терял к ней интерес и начинал писать новую. Программы были написаны ради забавы и не были расчитаны принести кому-либо пользу, возможно поэтому не получилось довести из до конца. Как не терять интерес к программе?
ответить
From admin Sun Aug 6 14:30:29 2023 UTC
Re: Re: Re: Стандартные возможности Паскаля
> (змейка, программа для эффективного управления своими задачами и какие-то подобие консольного текстового редактора)
Какие же это серьёзные программы, вы о чём вообще? Это всё как максимум учебные этюды.
> но к сожалению не одну из них смог завершить.
Тогда ваш текущий уровень равен нулю, не обманывайте себя. Вы пока ещё ничего (вообще ничего, совсем, никак) не освоили, как вы выразились, "на достаточно хорошем уровне" (вообще, пардон, "достаточном" — это для чего достаточном? для самоуспокоения? так для самоуспокоения "достаточно" текст книжки один раз по диагонали прочитать и заявить, что вы теперь программист). Между этюдами и реальным программированием — гигантское расстояние, но вы-то и до уровня этюдов пока не дошли, раз ни одного из них не завершили.
Кстати,
> Программы были написаны ради забавы
программу нельзя считать "написанной", если она не завершена.
> Как не терять интерес к программе?
Я бы посоветовал попытаться избавиться вот это этого вот фактора:
> не были расчитаны принести кому-либо пользу
Начните с программы, которая будет полезна лично вам, и, возможно, больше никому, но вот лично вам она должна быть реально полезна, без каких бы то ни было натяжек. Иначе опять интерес потеряете. Это даже может быть игрушка, но такая, которой больше нигде нет (т.е. не змейка уж точно, змейку только ленивый не написал), и в которую лично вам будет интересно играть — не писать её, чтобы что-то там попробовать, а именно что сделать и играть в неё.
ответить
From Anonymous (unverified) Sun Aug 6 14:37:41 2023 UTC
Re: Стандартные возможности Паскаля
> которая будет полезна лично вам
Как раз для этого не хватает тех возможностей Паскаля, которые изложены в книге, а использовать модули (по вашей рекомендации) не хочется.
ответить
From admin Sun Aug 6 14:56:36 2023 UTC
Re: Re: Стандартные возможности Паскаля
Подозреваю, что вы или плохо ищете, или, несмотря на все увещевания, так и не сделали командую строку основным инструментом работы с компьютером и продолжаете гонять всякие DE.
ответить
From Anonymous (unverified) Sun Aug 6 15:31:48 2023 UTC
Re: Re: Re: Стандартные возможности Паскаля
> Как раз для этого не хватает тех возможностей Паскаля
Возможно.
> так и не сделали командую строку основным инструментом работы с компьютером и продолжаете гонять всякие DE.
К счастью, нет. Уже больше двух лет командная строка является моим основным инструментом. Я работаю системным администратором, преимущественно занимаюсь администрированием Linux, и, конечно же, делаю это без использования DE.
Почти все задачи требующие автоматизации успешно решаются через bash. Часто возникает задача мониторинга серверов и мне хотелось бы написать своего агента, который собирает какую-либо информацию с операционной системы и отдаёт её серверу мониторинга по протоколу HTTP. Конечно, я бы мог использовать агентов предоставляемых разработчиками сервера мониторинга. Но обычно они очень раздуты и мне не требуется даже половина их возможностей. К тому же, они полностью написаны на каком-нибудь питоне, а это уже мерзость.
ответить
From admin Sun Aug 6 16:18:48 2023 UTC
Re: Стандартные возможности Паскаля
И что, при написании скриптов на bash нигде не возникает потребности сделать что-то такое, чего bash не может? Я когда сисадмином трудился, постоянно такое вылезало, буквально каждый день.
ответить
From Anonymous (unverified) Sun Aug 6 16:21:22 2023 UTC
Re: Стандартные возможности Паскаля
Возникает. Но обычно для этого уже создано множество утилит, а если нет, то возможностей Паскаля изложенных в книге уже не хватает.
ответить
From admin Sun Aug 6 18:21:43 2023 UTC
Re: Стандартные возможности Паскаля
Ну посмотрите на модули тогда. Я их обычно не советую, потому что они кривые все, в команде Free Pascal напряжёнка с адекватными юниксоидами. Да и с нормальными паскалистами, как ни странно, тоже — те же сокеты сделаны чисто по-сишному, на функциях с побочными эффектами. Но это по-любому лучше, чем раньше времени перейти на Си целиком.
P.S. Между прочим, вы зачем хотите информацию серверу отдавать по HTTP? Очень хочется поиметь веб головного мозга? Из всех протоколов, какие есть, этот для данной задачи самый неадекватный. То есть вот даже не то чтобы "не самый правильный", а именно что самый последний, который в задачах такого рода вообще следует вспоминать.
Кстати, если не упираться в то, что машина должна сама информацию о себе послать на сервер, то есть такая дивная штука inetd — этакий метасервер для не слишком загруженных сервисов. Там в роли серверных программ может выступать что угодно, имеющее стандартный ввод и стандартный вывод; inetd (или одна из его реализаций xinetd), приняв TCP-соединение на заданном порту, запускает программу, указанную для этого порта в конфигурационном файле, и у этой программы "тот конец" оказывается на стандартных потоках: что пришло из сети, читается с stdin, а что она выдаёт на stdout — уходит в сеть. Как вы понимаете, этакие сервисы можно писать буквально на чём угодно, и Паскаль не исключение.
ответить
From Anonymous (unverified) Mon Aug 7 09:08:16 2023 UTC
Re: Re: Стандартные возможности Паскаля
> Между прочим, вы зачем хотите информацию серверу отдавать по HTTP?
Сервер мониторинга может работать только через HTTP. Видимо, стоит писать и свой сервер мониторинга.
> Очень хочется поиметь веб головного мозга?
А чего не так с HTTP? Где можно подробно почитать об этом?
> Кстати, если не упираться в то, что машина должна сама информацию о себе послать на сервер, то есть такая дивная штука inetd — этакий метасервер для не слишком загруженных сервисов. Там в роли серверных программ может выступать что угодно, имеющее стандартный ввод и стандартный вывод; inetd (или одна из его реализаций xinetd), приняв TCP-соединение на заданном порту, запускает программу, указанную для этого порта в конфигурационном файле, и у этой программы "тот конец" оказывается на стандартных потоках: что пришло из сети, читается с stdin, а что она выдаёт на stdout — уходит в сеть. Как вы понимаете, этакие сервисы можно писать буквально на чём угодно, и Паскаль не исключение.
Спасибо, попробую.
ответить
From admin Mon Aug 7 10:36:09 2023 UTC
Re: Стандартные возможности Паскаля
> А чего не так с HTTP? Где можно подробно почитать об этом?
Блин, зачем об этом "подробно читать", что тут вообще может быть не очевидно? Это протокол, придуманный, чтобы с сервера забирать гипертекстовые документы. Ну, вот лежит на сервере гипертекст, а пользователь по нему, гипертексту этому, бродит. Где тут вообще, с какого боку, каким способом хоть рядом лежала эта ваша задача системного мониторинга? Заметим, для систем мониторинга придуманы свои протоколы, SNMP, например — не скажу, что он идеален, но уж всяко лучше, чем шурупы в доску кирпичом заколачивать. Придумать, что для этого сбора мониторинговой информации с инфраструктурных машин следует (или даже не следует, а вообще просто возможно) использовать HTTP, могла только конченная, обдолбаная, башкой ударенная обезьяна, у которой не хватает мозгов понять, что компьютерные сети — это отнюдь не только вся вот эта идиотская хрень, именуемая "вебом".
ответить
From Anonymous (unverified) Mon Aug 7 15:02:50 2023 UTC
Re: Re: Стандартные возможности Паскаля
Самое печальное, что сейчас большая часть недопрограмм взаимодействует по сети только через HTTP.
ответить
From admin Mon Aug 7 15:42:16 2023 UTC
Re: Стандартные возможности Паскаля
На самом деле их не так много, уж точно не "бОльшая часть", с HTTP справляться умеют далеко не все обезьянки и прочие недоумки, мнящие себя программистами — большинство не может, даже если есть готовая реализация, как в каком-нибудь пыхтоне. Но, с другой стороны, это как раз тот случай, когда даже одна — это слишком много. Я бы сказал, что апофеоз массового разжижения мозга — это "протокол" ActivityPub, ну и всё, что на нём построено, естественно, тоже (там нет вообще ни одной программы, написанной хоть на чём-то пристойном, во всяком случае я не видел).
ответить
From Anonymous (unverified) Mon Aug 7 15:17:33 2023 UTC
Re: Re: Стандартные возможности Паскаля
Есть ещё одна задача, которую я мог бы решить при помощи Паскаля и программой даже пользовались бы несколько человек.
Есть IP-телефония, которая записывает данные о каждом звонке в базу данных (PostgreSQL). Мне нужно прочитать данные из этой базы данных и сделать на основе их разные отчёты. Сильно ли вредит работа с базами начинающим? Учитывая, что мне нужно всего лишь один раз просто их прочитать в односвязный список, а потом уже все действия проводить над ними при помощи Паскаля.
ответить
From admin Mon Aug 7 15:44:18 2023 UTC
Re: Стандартные возможности Паскаля
Сделайте средствами самого PostgreSQL выгрузку в нормальный текстовый файл, уже его разбирайте программой. А ещё передайте тем дебилам, которые в такой задаче применили PostgreSQL, что они дебилы.
ответить
From Anonymous (unverified) Mon Aug 7 15:56:02 2023 UTC
Re: Re: Стандартные возможности Паскаля
Понял. Спасибо большое за помощь!
ответить
From admin Mon Aug 7 16:13:25 2023 UTC
Re: Стандартные возможности Паскаля
К сожалению, я сомневаюсь, что вообще вам помог. Общее направление, в котором вы предпочитаете двигаться, крайне рискованное. Паскаль ещё ладно, тут есть шанс что-то серьёзное написать, а вот дальше там язык ассемблера, там что-то реальное получить намного сложнее.
ответить
☞ From Anonymous (unverified) Wed Aug 2 09:54:31 2023 UTC
svn
В приложении есть CVS и git. В следующем издании будет svn?
ответить
From admin Wed Aug 2 10:50:11 2023 UTC
Re: svn
Нет, разумеется. И darks, например, тоже не будет. К моменту первого издания книги SVN существовал уже полтора десятилетия, если я его тогда в книгу не включил, то с какого бодуна стану это делать сейчас?
ответить
From Anonymous (unverified) Fri Aug 4 10:03:50 2023 UTC
Re: svn
Кажется, нет глубокой необходимости рассказывать про SVN, т.к. если вы научились пользоваться одной системой контроля версий по учебнику, то легко сможете научиться пользоваться другой системой самостоятельно (учебник - не справочник). Единственный момент в том, что вряд ли вы захотите пользоваться SVN, когда есть git.
ответить
From admin Fri Aug 4 11:32:05 2023 UTC
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
GUI
Андрей Викторович, что вы думаете насчёт того, чтобы добавить к разделу о GUI небольшой рассказ об Immediate Mode? Это такой способ построения GUI, когда содержимое окна создаётся заново на каждом проходе главного цикла.
Мне кажется, это может быть полезно, как минимум, для понимания, что в мире GUI тоже есть место кардинально иным парадигмам. И как ещё одна, на этот раз очень наглядная, иллюстрация того, что императивная парадигма может быть медленной, а процессорное время и память невозможно экономить одинаково хорошо.
Кроме того, этот рассказ может дать стимул к написании первой по-настоящему своей программы: очень многим хочется сделать графическую игру, а именно в них Immediate Mode обычно и используется. Ну и в целом в программах, где виджеты - незначительный вспомогательный элемент, а не центр вселенной.
ответить
From admin Sat Jun 10 07:42:55 2023 UTC
Re: GUI
Я не учу тому, чего не умею сам. Чтобы раскрыть всё, что вы тут наговорили про парадигмы, нужно иметь практический опыт непосредственной работы с графикой, вот то есть не через виджеты, а прямо рисовать. Увы, компьютерная графика — это одна из немногих областей программирования, которая целиком прошла мимо меня. Не может один человек уметь всё.
ответить
☞ From Anonymous 11 (unverified) Sat May 20 12:13:22 2023 UTC
Оптимизация хвостовой рекурсии в компиляторах Си
Здравствуйте
В третьем томе, на 57 странице утверждается: "...оптимизация остаточных вызовов снизила бы быстродействие получаемого машинного кода, ведь значения параметров для вызываемой функции пришлось бы копировать в начало области памяти, занимаемой текущим фреймом, перед выполнением остаточного вызова." Hо ведь нам даже и без оптимизации остаточного вызова нужно записывать аргументы в стек.
Также 13-й gcc проводит оптимизацию хвостовой рекурсии в программе match_rec.c (страница 54) так, чтобы количество стековых фреймов равнялось количеству не до конца обработанных звёздочек.
ответить
From Andrey V. Stolyarov Wed Jul 31 13:18:48 2024 UTC
Re: Оптимизация хвостовой рекурсии в компиляторах Си
"Вы таки не поняли" (tm). Когда вычисляются параметры остаточного вызова, текущий стековый фрейм пока ещё нужен, поскольку значения новых параметров могут зависеть от значений локальных переменных (в том числе и тех значений, которые были переданы аргументами в текущую функцию). Выстроить вычисление так, чтобы всё, что надо, было вычислено сразу на нужном месте во фрейме, и при этом ничего не было затёрто до того, как оно перестанет быть нужным — я не уверен, что такое вообще решается в общем виде. Поэтому параметры для остаточного вызова по-любому придётся размещать в свободной области фрейма точно так, как если бы мы готовились к обыкновенному вызову, не остаточному, и потом, чтобы сделать вызов остаточным, их придётся скопировать поверх существующего фрейма (непосредственно перед командой call или что там будет вместо неё, возможно, что и jmp). Вот это копирование и будет лишним в сравнении с вариантом без оптимизации.
Плюс там ещё будут интересные эффекты с той частью фрейма, за очистку которой отвечает вызывающий (тот, кто вызвал исходную функцию). Если у вызываемого параметров столько же, то нам повезло, а вот если их больше или меньше, рекурсия может перестать быть остаточной только из-за того, что нам придётся как-то учитывать эту разницу. У меня такое ощущение, что её придётся где-то хранить, и то ли как-то помечать фреймы, которые уже "остаточные", то ли что-то ещё делать, тут пока не попробуешь реализовать — до конца не поймёшь.
Но вообще да, тех, кто "не поймёт" точно так же, как вы, может быть достаточно много, так что текстик того абзаца я, пожалуй, переформулирую.
А что там творят компиляторы gcc после версии 4.1, меня трогает крайне мало :-) лишь бы не ломали обратную совместимость. Хотя здесь это к делу и не относится.
ответить
☞ From Alejandro Wed May 10 19:19:33 2023 UTC
Побочные эффекты в заголовке if
В параграфе про побочные эффекты приведена как нежелательная конструкция вида
Но что, на ваш взгляд, стоит делать в ситуациях, когда имеет смысл подобная конструкция
с учётом того, что не хотелось бы (например, из соображений наглядности) выносить эту конструкцию в отдельную функцию, а также плодить отступы (как в $2.12.5)?
ответить
From admin Wed May 10 22:46:22 2023 UTC
re: Побочные эффекты
Это тот случай, когда "не плодить отступы" означает искажение действительности. Сие НЕ является "обобщением switch/case".
ответить
☞ From Alejandro Sun May 7 19:37:29 2023 UTC
Bourne Shell и ООП
К примеру несовместимости языка и парадигмы (с. 68) — видимо, упомянутые в конце параграфа люди имели ввиду что-то вроде этого :-)
ответить
From admin Sun May 7 19:46:07 2023 UTC
Ух ё
Всё же иногда восхищаюсь мощью и потенциалом человеческого больного воображения.
ответить
From Alejandro Mon May 8 14:53:46 2023 UTC
Воображение воображением...
Но заметьте, таки кое-что у них получилось :D
Кстати, могу предложить новое звено этой цепочки — языки без локальных переменных и рекурсия :)
ответить
From admin Mon May 8 15:56:51 2023 UTC
Да ладно,
я по молодости сваял вот это вот, меня теперь трудно чем-то всерьёз удивить.
ответить
From Alejandro Sun May 14 03:44:09 2023 UTC
К слову...
Недавно наткнулся на такую штуку и, отойдя от удивления, вспомнил про ваш коммент :-)
ответить
From admin Sun May 14 11:48:02 2023 UTC
Бывает и такое
У меня студенты пару раз в качестве дипломов делали Shell на выражениях C++, перегружая всякие <, >, >>, & и прочее.
Вообще серьёзная штука перегрузка инфиксных операций. И недооцененная.
ответить
☞ From Anonymous (unverified) Sun May 7 17:26:31 2023 UTC
Режимы работы терминалов
Андрей Викторович, добрый день!
Во втором томе меня заинтересовала глава про терминалы, и после прочтения у меня родился вопрос.
Я взял Debian, вошел в систему в первом терминале (который /dev/tty1), запустил там vim и оставил его висеть включенным. Затем я переключился во второй терминал (/dev/tty2), там вошел в систему под рутом и командой kill послал сигнал SIGKILL открытому vim, узнав предварительно его pid командой ps (да, знаю, что в нормальной жизни таким образом останавливать vim не следует).
После этого vim, как ожидалось, выключился, и в первом терминале управление вернулось интерпретатору, и стало возможно в нем дальше вводить команды.
Вопрос в следующем: почему так происходит? Ясно, что открытый vim переводит терминал в неканонический режим, и мне казалось, что убиение его через SIGKILL должно соответствующий терминал в неканоническом режиме и оставить (SIGKILL - это все же убиение топором), и в дальнейшем при работе с интерпретатором я должен видеть в терминале разные странные вещи. Но нет, интерпретатор с терминалом живут и здравствуют, и дают работать дальше.
Может оказаться, что я невнимательно что-то прочитал в ваших книгах, в таком случае прошу указать на необходимую главу.
ответить
From admin Sun May 7 17:34:08 2023 UTC
Мне почему-то кажется, что всё очень просто
Если я правильно понимаю, что в таких случаях происходит, то это командный интерпретатор вернул терминал в исходное состояние. Точнее, даже не сам интерпретатор, а библиотека GNU Readline, входящая в него составной частью. У неё-то режим работы с терминалом свой (и тоже неканонический, поскольку она как-то должна реагировать на стрелочки).
Проверить очень просто, напишите свой собственный простенький аналог Shell'а (это в любом случае полезно сделать), запустите vim уже из-под него и повторите эксперимент.
ответить
From Anonymous (unverified) Tue May 9 10:31:09 2023 UTC
Интересно получается
Если современные командные интерпретаторы по факту пользуются неканоническим режимом терминала, а "каноничность" эмулируется библиотеками типа GNU Readline, то это дает ответ на многие вопросы.
Я, к примеру, гадал, как интерпретатор в каноническом режиме терминала должен обеспечить реакцию на стрелки вверх-вниз для прокрутки истории введенных команд. Думал, что это происходит так: пользователь нажимает стрелку, терминал посылает ОС код символа (фиг знает какой), затем драйвер терминала посылает интерпретатору сигнал (опять же, фиг знает какой), интерпретатор в ответ на сигнал ищет нужную строку в файле history в домашнем каталоге пользователя и отдает ее в stdout (может быть, отправив предварительно в stdout некоторое число управляющих символов - чтоб существующую строку очистить).
Спасибо за рекомендацию, поиграюсь с рукописным shell-ом.
ответить
From admin Tue May 9 14:37:41 2023 UTC
С пониманием картины мира у вас по-прежнему всё так себе
Вот этот ваш абзац:
Если современные командные интерпретаторы по факту пользуются неканоническим режимом терминала, а "каноничность" эмулируется библиотеками типа GNU Readline,
представляет собой абсолютную чушь, и это стоит понимать. GNU Readline как раз обеспечивает и редактирование вводимой строки (стрелки влево-вправо), и поиск в истории (не только вверх-вниз, Ctrl-R тоже от неё), и автодополнение по Tab'у, и чтобы всё это делать, ей, разумеется, приходится перевести терминал в неканон. В каноническом режиме оперативно реагировать на стрелки и Tab невозможно, на то он и канонический. А вот сам интерпретатор (за вычетом собственно Readline) работает точно так же, как он работал бы в каноническом режиме, только он вместо всяких getchar/fgets использует функцию ввода строки из Readline. И совершенно не парится о том, что там эта функция будет делать.
ответить
☞ From Арсений (unverified) Sat May 6 09:35:26 2023 UTC
Вопрос по унификации
Здравствуйте!
Подскажите, пожалуйста, почему на стр. 464 абзац 2 при унификации переменная A3 получает значение [] (разве должно быть не [H2 | []])?
ответить
From admin Sat May 6 11:51:50 2023 UTC
Похоже на правду.
Очень похоже, что вы правы. Причём это не опечатка, это именно ошибка в выкладках, там ведь весь текст этого абзаца оказывается невалиден — авария-то, конечно, будет, и даже по переполнению стека, но утверждение, что связи те же, только уровень другой — неверное, там в третьем параметре будет накапливаться список.
Странно, что с момента первой публикации этого текста в начале 2020 года никто до сих пор этого жирного косяка не заметил.
ответить
From Арсений (unverified) Sun May 7 12:03:55 2023 UTC
Спасибо
+Это всё благодаря правильному питанию+
Благодарю! А то уж боялся, что что-то упускаю.
Я бы в сообщениях об ошибках добавил про накопление в третьем параметре (ну или линк на это объяснение), чтоб проще было понять, почему рассуждение неверно.
ответить
☞ From Anonymous (unverified) Wed Apr 19 14:57:52 2023 UTC
Почему не Fortran, Pascal?
Здравствуйте, Андрей Викторович, а почему на роль первого языка был выбран именно Паскаль, а не Фортран?
Фортран (тот который 90 года и выше) очень даже простой и предсказуемый ЯП. Указатели также в наличии.
ответить
From admin Wed Apr 19 22:30:16 2023 UTC
Да откуда ж столько вас, а?
Подробный ответ на вопрос, почему именно Паскаль выбран в роли первого языка, содержится в предисловиях к книге. Откровенное враньё про то, что якобы в Фортране есть указатели, здесь уже разбирали в комментариях, я не горю желанием сейчас искать то обсуждение, если хотите — ищите сами. Кроме того, если вы считаете, что нужно языки для обучения выбирать как-то иначе, нежели это сделано в моих книгах, у вас остаётся ещё одна опция — написать свою книгу.
Засим настоятельно прошу забыть дорогу на мой сайт. Учить начинающих Фортрану — это преступление, и коль скоро вы этого не понимаете, то обсуждать нам с вами нечего.
ответить
☞ From Skyler2k (unverified) Wed Apr 12 02:28:52 2023 UTC
Полноэкранные программы 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
Может и не важно, но сижу на Кубунте, до этого момента проблем никаких не было
ответить
From admin Wed Apr 12 11:10:02 2023 UTC
Что, первый том пропустили?
И где, простите, у вас подключение библиотеки?
Не, ну, допустим, в тексте книги нет явного указания, как надо запускать компилятор, чтобы он подцепил библиотеку ncurses. Но это же "звёздочный" параграф в самом конце части про Си — я как бы предполагал, что у людей, добравшихся до этого места, уже не должно быть неясностей с компилятором.
Ещё и диагностика по-русски, как вы это терпите?
А в довершение — это ваше утверждение, что программа, видите ли, "не компилируется". Как раз-таки она прекрасно откомпилировалась без единого предупреждения, а диагностику вывалил уже линкер. И я его вполне понимаю, я бы на его месте то же самое вывалил. Библиотеку-то вы ему не дали. Только пообещали (подключив заголовочник), но не дали.
ответить
From Anonymous (unverified) Wed Apr 12 12:49:13 2023 UTC
Похоже действительно упустил
Да действительно, подключил библиотеку к gcc и всё заработало. По видимому упустил такой момент, но нашел упоминание библиотек, буду теперь помнить что просто хидера недостаточно.
Спасибо (=^・ェ・^=)
ответить
From admin Wed Apr 12 13:26:41 2023 UTC
Тут, знаете ли, возникает парочка вопросов
Первый вопрос очевидный: а ничего, что я это вообще-то весьма настойчиво пытаюсь вбить читателю в голову ещё в параграфе 4.2.3, который озаглавлен "Квадратное уравнение" и входит в главу "Первые впечатления", то есть это самое начало части про Си?
Но это ладно, мало ли кто где что прое... э... упустил "в самом начале". Проблема в том, что это же вовсе не начало, это второй том, а вся эта машинерия с библиотеками, линкером, объектными файлами и неотрезолвленными ссылками подробно разбирается, на минуточку, в первом томе, в части, посвящённой ассемблеру.
И вот отсюда второй вопрос, скорее риторический, поскольку лично мне ваш ответ на него не шибко интересен. Тем не менее, вопрос такой: вы случайно первый том не перепрыгнули? Если да, то не тратьте время на мои книжки, толку от них вам никакого не будет. Мой подход к обучению не работает по кусочкам, только весь целиком.
ответить
From Skyler2k (unverified) Thu Apr 13 04:45:42 2023 UTC
Нет причин для беспокойства
Нет, первый том не перепрыгивал, ушло немало времени чтобы понять как организованы вызовы функций и сопряженная с этим работа со стеком. И это было интересно.
В целом программирование не входит в сферу моей работы, но всегда было интересно в чём заключается само это программирование, вот и изучаю понемногу. Момент который не находил объяснения очень прост, как имея такие простые "кирпичи"(условно), пишутся монументальные прикладные программы? Шаг за шагом становится ясно что к чему.
Было ещё немало вопросов, но ваши книги дают исчерпывающие ответы. Ещё раз спасибо.
ответить
☞ From Anonymous (unverified) Sat Apr 8 03:28:58 2023 UTC
Оглавление
Было бы конечно намного удобнее, если бы у pdf-ок было оглавление.
ответить
From admin Sat Apr 8 09:30:17 2023 UTC
re: оглавление
Оглавление там есть. А кликабельных ссылок нет и не будет, при их наличии PDF выглядит уродливо и не вполне предсказуемо — между тем, все PDFы, которые тут выложены, представляют собой оригинал-макеты, с которых печатались бумажные книги. Как-то менять эту практику в мои планы не входит.
ответить
☞ From Anonymous (unverified) Thu Apr 6 17:28:32 2023 UTC
clisp?
Что думаете о этой реализации Common Lisp?
ответить
From admin Fri Apr 7 12:46:54 2023 UTC
re: clisp
Когда-то давно она мне нравилась, но сейчас-то какая разница, что я по её поводу думаю? Она лет пятнадцать как unsupported.
ответить
From Anonymous (unverified) Fri Apr 7 16:32:03 2023 UTC
Вроде clisp актуален
По крайней мере в Debian / Devuan пакетируется, используется во многих курсках и учебниках по CL.
ответить
From admin Fri Apr 7 21:56:29 2023 UTC
а ещё говорят, например, что кур доЯт
Специально слазил на википедию, последний релиз clisp'а был в 2010 году, уносите мертвеца. Что касается термина "актуален", то никакая реализация Common Lisp не может быть актуальна в принципе. Этот бегемот комитетского изготовления сдох под собственным весом задолго до того, как начали протухать его отдельные реализации.
ответить
☞ From Leonid Sun Mar 26 16:29:43 2023 UTC
Намеренное упрощение?
Третий том, пример со страницы 166 (ДМК). В конструкторе класса FileException дважды вызывается функция strdup. В случае, если первый раз new отработает успешно, а во второй -- выбросит исключение, то объект FileException создан не будет -- деструктор не вызовется. Произойдет утечка памяти, выделенной при первом вызове strdup.
ответить
From admin Sun Mar 26 17:52:24 2023 UTC
Да, намеренное
Прежде всего отмечу, что я в книге ни разу не упоминаю про умение new кидаться исключениями. Причина очень проста. Механизм исключений — штука крайне сомнительная, настолько, что его можно выключить флагом компилятора, то есть даже мракобесы из gcc признают, что исключения штука сомнительная. На фоне этого очень хочется ту безответственную мразь, которая придумала на исключения повязать new, то есть базовую возможность языка, — ну, не знаю, четвертовать. Или на кол посадить. Просто пристрелить — для такой мрази это слишком лёгкая смерть.
Но, к счастью, это тот случай, когда дебилизм спецификации компенсируется возможностью его игнорировать. Да что там new, я даже malloc в программах на чистом Си никогда на NULL не проверяю. Между прочим, судя по моему опыту, подавляющее большинство утверждающих, что я тут не прав, при этом не знают, как сделать, чтобы такая проверка сработала. В смысле, как сделать так, чтобы реально malloc, вызванный с ненулевым (и не супергигантским) аргументом, вернул NULL. В обычных обстоятельствах, когда реально в системе кончается память, процесс об этом уже не узнаёт, поскольку ядро его просто пришибает — причём не во время работы malloc, а позже, при обращении к странице, которую система процессу вроде бы выдала, но, когда до дела дошло, реально выделить не может.
Один способ, впрочем, всё-таки есть. Я его даже знаю.
И его наличие совершенно не убеждает меня, что ради этого надо во всех программах вокруг каждого malloc наворачивать проверки.
ответить
From Leonid Sun Mar 26 18:04:26 2023 UTC
Рассказать про "умный указатель"
И все же, в реальных проектах так делать нельзя (а это же как-никак учебник).
Может все-таки имеет смысл показать как написать аналог класса std::unique_ptr<T>, благо пишется он в 5 строчек (если забить на потокобезопаность, правда тогда это скорее std::auto_ptr<T>).
ответить
From admin Sun Mar 26 18:53:25 2023 UTC
Только так и можно, и нужно
Давайте вы всё-таки куда-нибудь ещё пойдёте? Интернет большой, а непрошенные советы по содержанию книги мне не нужны. Не нравится книга — пишите свою.
ответить
From Alejandro Sun Mar 26 21:05:44 2023 UTC
Та же тема ...
с немного другим примером :)
соус
ответить
☞ From Anon (unverified) Thu Mar 23 15:08:07 2023 UTC
Snake
Добрый день, Андрей Викторович! При реализации змейки возникла двоякая ситуация. При смене направления змейки каждый её сегмент должен на определенных координатах менять направление. Где лучше всего хранить эти данные? С одной стороны, изменений направлений может быть неопределенное количество и нужно использовать динамическую структуру данных, но с другой стороны, это усложнение на ровном месте.
ответить
From admin Thu Mar 23 18:14:00 2023 UTC
Какое ещё "направление"
Никто там не должен ничего менять, сегмент змейки как появился на поле (будучи в первый момент своего существования, собственно, головой змейки), так там и находится без изменений, пока не станет её кончиком хвоста и не исчезнет.
ответить
☞ From Горностай (unverified) Sun Mar 19 11:54:30 2023 UTC
Неблокирующий вывод в программах-серверах
Добрый день!
Делаю сетевой этюд по типу программы из 6.4. Решил добавить туда неблокирующий вывод и использовать параметр writefds в вызове select. Я даю себе отчёт в том, что это ни к чему, но, как мне кажется, этюды - это наиболее подходящее место, чтобы посмотреть, как решение могло бы выглядеть в задаче, в которой возникнет потребность в неблокирующей записи.
У меня возникла такая проблема: оно, похоже, работает, но часть состояния сеанса утекает в главный цикл, чтобы можно было понять, в какой fd_set добавить дескриптор этой сеанса. Можно ли этого избежать?
Спасибо
ответить
From admin Sun Mar 19 12:41:28 2023 UTC
Хрень какая-то
Что куда утекает, что за чушь? Главному циклу нужна информация о потребностях каждого из сеансов, ну вот сделайте там (в абстрактном классе сеанса) чисто виртуальный метод вроде
Откровенно говоря, складывается ощущение, что проблема у вас совершенно не в этом.
ответить
From Alejandro Sun Mar 19 13:42:39 2023 UTC
(-)
Андрей Викторович, а вдруг человек свой этюд пишет на чистом Си, а вы ему такое советуете!? :)
Более того, это человек ещё не попробовал совместить неблокирующий вывод с неблокирующим connect к какой-нибудь другой программе :-)
ответить
From admin Sun Mar 19 14:05:36 2023 UTC
Сомневаюсь
Вот это вот "часть состояния утекает" — на чистом Си такое обычно не приходит в голову, там же нет защиты, так что ничто не стимулирует мышление в стиле "кто к чему имеет доступ".
Хотя, конечно, я тут могу ошибаться, вы правы. Ну, сейчас автор вопроса вернётся и, я думаю, нам всё станет понятно :-)
ответить
From Alejandro Sun Mar 19 14:16:02 2023 UTC
Странно
там же нет защиты, так что ничто не стимулирует мышление в стиле "кто к чему имеет доступ"
Почему? По-моему, даже без защиты вполне естественно стремится к тому, чтобы функция(-и), реализующая(-ие) главный цикл, знали о как можно меньшем количестве полей структуры сеанса (и, соответственно, не трогали их). Видимо, автора вопроса волнует именно это.
ответить
From admin Sun Mar 19 18:12:26 2023 UTC
Ну, э...
Вы бы видели, как на чистом Си пишут те, кто программистами не являются — например, электронщики.
Потребность разделять и властвовать появляется не сразу, а осознаётся, увы, ещё позже и не всеми.
Впрочем, ждём, когда вернётся автор вопроса :-)
UPD: Вы таки были правы. Согласен, тут я погорячился.
ответить
From Горностай (unverified) Sun Mar 19 16:47:12 2023 UTC
...
Да, этюд на C.
Состояние сеанса (которая является конечным автоматом) у меня описывается двумя переменными, одна из которых отвечает за направление ввода-вывода. Эта переменная используется в главном цикле, и это меня беспокоило.
Ладно, понял, проблемы здесь, похоже, нет, прошу прощения за беспокойство.
ответить
From admin Sun Mar 19 18:37:23 2023 UTC
Инкапсуляция
Вообще говоря, не так чтоб тут совсем не было проблемы :-) И то обстоятельство, что вы, несмотря на использование чистого Си, этим озаботились — это прямо-таки очень хорошо, то есть это мысль в нужном направлении, причём в таком, о котором многие начинающие просто не догадываются и приходится их туда буквально запинывать.
Теперь о том, как поступить, чтобы было всё совсем чисто. Нужно осознать, что есть две части представления сеанса: та, которая интересна главному циклу, и та, которая ему не интересна.
В ту часть, которая напрямую касается главного цикла, следует включить, во-первых, дескриптор сокета — он же хранится у вас где-то, правильно? И, во-вторых, добавить к этому два флажка, вот буквально или два int'а, или один int с отдельными битами под каждый флажок, тут уж сами смотрите, как вам больше нравится. А вот для всей остальной функциональности сеанса придётся применить небезызвестные функции обратного вызова (a.k.a. callback-функции). Ну и плюс понятное дело, что с сеансом будет связана какая-то ещё информация, до которой главному циклу, конечно, дела нет, но которая от этого не исчезает. А поскольку ему до неё дела нет, пусть она будет представлена абстрактным указателем, т.е. void*.
Вытанцовывается что-то типа следующего. Каждый сеанс с точки зрения главного цикла представляется структуркой, в которой есть дескриптор сокета, два флажка, два указателя на функции — одну дёргаем, когда есть готовность на чтение, другую — когда есть готовность на запись, обеим передаём в качестве параметра адрес самой этой структуры; и плюс к этому указатель void *userdata;
Чтобы уж точно ничего никуда не "утекало", сами эти функции, а равно и описание "верхней" части состояния сеанса уносим в другой модуль. Там, когда надо создать сеанс, создаём сразу две структуры — одну для главного цикла, другую для хранения той информации, которая в главном цикле не нужна. Адрес этой второй записываем в userdata от первой. Ну а адрес первой отдаём обвеске главного цикла.
Есть, разумеется, и другие варианты решения, но идею, я думаю, вы уловили.
Прошу прощения, что мой первый ответ оказался не по делу, я почему-то был совершенно уверен, что вы пишете на C++.
ответить
From Горностай (unverified) Sun Mar 19 19:08:01 2023 UTC
Во, то что надо
Спасибо за идею, попробую реализовать!
> о котором многие начинающие...
Не то что бы я начинающий...
ответить
From Alejandro Sun Mar 19 19:31:04 2023 UTC
А тут уже у меня возник вопрос
обеим передаём в качестве параметра адрес самой этой структуры; и плюс к этому указатель void *userdata
Если я ничего не упустил, то сеанс с т.з. главного цикла представляется примерно такой структурой:
Но зачем для этих callback'ов параметр userdata, если он и так есть в той структуре, которую мы в этот самый callback передаём? (Не говоря уже о том, что данные, которые хранятся по адресу userdata, создаёт не главный цикл, а объект сеанса). Или так чисто для удобства стоит делать?
PS: Вы таки были правы
Мою интуицию таки не проведёшь :-)
PSS: И, кстати, с вызовами callback'ов поосторожнее надо быть :)
ответить
From admin Sun Mar 19 21:48:05 2023 UTC
Факт :-)
> Но зачем для этих callback'ов параметр userdata,
Нафиг не нужен. Смотрим мой текст:
обеим передаём в качестве параметра адрес самой этой структуры
В том контексте совершенно однозначно "самой этой структуры" указывает на struct session, никакой userdata.
> Мою интуицию таки не проведёшь :-)
Снимаю шляпу.
> Здесь сессия может оказаться завершённой!!
Известный прикол. Там ещё с циклом просмотра клиентов могут начаться трудности, если из-под него клиентов удалять.
ответить
From Alejandro Sun Mar 19 22:23:02 2023 UTC
Невнимательность :)
обеим передаём в качестве параметра адрес самой этой структуры; и плюс к этому указатель void *userdata
Из-за этого я подумал, что у функции 2 параметра, а поле userdata посчитал чем-то вроде самим собой разумеющимся (в свете предыдущей части комментария).
Там ещё с циклом просмотра клиентов могут начаться трудности, если из-под него клиентов удалять
Особенно если их в односвязном списке хранить :-) Лишний раз убедился, что решение держать указатели на сеансы в массиве, как в том самом примере из книги, куда практичнее.
Offtop: кстати, наверно, никогда не задумывался над тем, что осознание потребности может появится раньше самой потребности. Удивительно.
ответить
From Alejandro Tue Mar 21 13:12:26 2023 UTC
Неприятная обратная связь
Кстати, я тут задумался над этим:
>> Здесь сессия может оказаться завершённой
> Известный прикол
А какой, на ваш взгляд, лучший выход из такой ситуации? Если таковой вообще есть.
ответить
From admin Tue Mar 21 15:17:16 2023 UTC
Сложного тут ничего нет
Когда объекты, отвечающие за обработку событий, могут исчезать в результате обработки очередного события, проще всего их не удалять, а помечать как подлежащие удалению. Для удаления сделать ещё один цикл по объектам — в самом конце итерации главного цикла.
Ну, я во всяком случае всегда делаю так.
Есть ещё один вариант: одна итерация главного цикла — одно событие. Т.е. если событие какое-то уже обнаружено, его обработать и на этом немедленно закончить итерацию главного цикла, дальше все эти списки не просматривать. Но это, во-первых, неэффективно, а во-вторых, если неаккуратно всё сделать, можно устроить ресурсное голодание тем из объектов, которые оказались в конце списков.
ответить
☞ From Andrei (unverified) Thu Feb 3 22:17:00 2022 UTC
Первый том, посимвольный ввод
Добрый вечер, Андрей Викторович. Спасибо вам за ваш труд, вы - просто кладезь! =) Не кидайте только в меня тапками, я начал программированием заниматься в январе 2020, опыта ещё мало.
Вопрос касается стр. 322 (324 в поиске), процедура ReadLongint.
Я не понимаю до конца, что происходит внутри оператора read.
Здесь всё понятно. Мы читаем в переменную с: char каждый символ до тех пор, пока выражение не станет истиным. С позицией тоже понятно. А вот дальше вопрос:
1). Как происходит это чтение? Оно происходит в буфер куда-то? Ведь мы считываем посимвольно. Допустим, вводим число 12. Сперва вводим 1, у нас в "с" заносится цифра 1 (точнее код, который потом как-то обрабатывается, написал грубо), а когда мы вводим 2, разве не должна быть перезапись этой переменной? Как мы потом можем во втором цикле работать? Это же ведь не массив чаров.
Я попытался почитать и на freepascal про оператор read, и так погуглить. Либо я не могу сформировать вопрос грамотно, либо там только базовая информация есть.
2). И ещё вопрос: как у нас символ может одновременно быть = SPC и #10? Вроде же enter делает перенос на новую строку и возврат каретки. Это у нас двухбайтовый символ, состоящий как бы из 2 частей?
Можно просто ссылками на источники, либо кто-то из читателей откликнется и поможет.
Спасибо. Успехов вам и крепкого здоровья.
P.S. спасибо вам ещё отдельное за гостевую книгу. Я почитываю её периодически. Вчера вот допёр, как кое-что в линуксе настроить =).
ответить
From admin Fri Feb 4 11:47:00 2022 UTC
По поводу
По поводу вопроса "как происходит чтение" — это тот случай, когда американцы обычно говорят "вы не хотите этого знать". Если на стандартном вводе у вас терминал -- это одна история, если там файл -- другая, если сетевой сокет -- третья, и, кстати, после второго тома скорее всего вы все эти "истории" сможете рассказать сами. Пока что факт тот, что операционная система предоставляет пользовательским программам удобную абстракцию, именуемую "поток ввода", и ваша программа работает с этой абстракцией, а не с чем-то ещё. Всё, что можно сделать с потоком ввода -- это изъять из него очередной байт. Всё, точка. Вот read именно это и делает. Когда чтение делается посимвольно -- то по одному байту, когда как-то ещё -- то не по одному.
На самом деле, конечно, паскалевская runtime library к операционке обращается сразу за порцией данных, операционка в ответ отдаёт всё, что есть (если только хватает того буфера, который для этого использует RTL), а read потом вызов за вызовом эти данные использует, не обращаясь к системе, пока они не кончатся, и только потом снова обращается к ядру. НО это чистая оптимизация, т.е. не будь её, программа работала бы точно так же, просто медленнее.
На самом деле не должно было такого вопроса возникнуть, вот в чём проблема. Для освоения паскалевской части ответ на него не требуется. Несколько позже -- как я уже сказал, во втором томе, а может даже и раньше, при освоении ассемблера -- всё станет ясно, но это другой уровень, нельзя сразу всё постичь на всех уровнях, мозг так не умеет.
Ну а по поводу "одновременно" -- а ничего, что там неравенство, а вовсе не равенство? Вот, например, символ 'A' не равен ни пробелу, ни переводу строки, представляете? И символ '@' тоже. И вообще любой символ, кроме собственно пробела и перевода строки. Между прочим, если с ЭТИМ проблемы -- то стоит, по-видимому, вернуться к первой части, где рассматривается логика. Она там не просто так рассматривается. Вот уж чего там нет -- так это всякой странной магии насчёт двух символов сразу или что вы там удумали. Если бы там такая магия была, в книге про это было бы написано.
ответить
From Andrei (unverified) Fri Feb 4 15:55:00 2022 UTC
Затупил.
С логикой я разобрался. Про оператор while всё понятно. Допустим конкретный пример: берётся 1 байт из потока ввода, пусть будет число 5, сравнивается с пробелом - неравно, сравнивается с переводом строки - неравно. Оба уловия правдивы, значит итог - true. Следующая итерация.
А вот repeat ... until работает же пока условие ложно. Цитирую из книги (стр. 270/272): "... после слова until записывается условие выхода из цикла - логическое выражение, ложное значение которого указывает на необходимость продолжать цикл, а истиное - на то, что цикл пора прекращать".
Далее код первого цикла:
Берём то же самое число 5, вводим его. Увеличивается позиция на 1, переходим к условию: '5' <> ' ' - true, '5' <> #10 - true. Должен быть выход из цикла после первой же итерации. Или я туплю жёстко? Вроде же условия работы первого цикла должны быть такими:
Тогда то же самое число сравнивается с пробелом, потом с переводом строки, везде false - следующая итерация.
Я понимаю где-то на задворках сознаня, что вы, скорее всего, правы, но что-то не вяжется, не понимаю, где я ошибся.
По поводу первого пункта - понял в общих чертах. Понимаю, что для освоения паскалевской части это знать не обзательно, но я всё же должен понимать в общем, как это происходит, иначе тогда получается чёрный ящик, и я не могу двигаться дальше.
Асм изучал самостоятельно, но масм32 под винду и по ютубу и немного учебнику Пильщикова (пусть там и 16-разрядный асм). Есть некоторое понятие, но сами понимаете, самостоятельно познавать сложнее, хоть и увлекательнее.
Спасибо за ваш ответ и труд. + в карму.
ответить
From admin Fri Feb 4 16:19:34 2022 UTC
По поводу цикла
По поводу цикла — а вы хорошо понимаете, что он делает? Он ведь, если вы не заметили, символы жрёт и ни черта с ними не делает, вот просто жрёт, ну, там, жрёт и не давится, жрёт и спасибо не говорит, жрёт как не в себя, можете сами синоним подобрать. Если условие вывернуть наизнанку, как это предлагаете вы, он начнёт так поступать со значащими символами, и я прямо даже тогда уже не знаю, как итоговое число-то вычислить. Если этот цикл все значащие символы прочитает и благополучно
похеритпроигнорирует.Если же таки оставить, как есть, то он пропустит все пробелы и переводы строк, сколько их там ему встретится, прежде чем начнётся что-то интересное. Для этого он там, собственно, и есть. А как только очередной прочитанный символ окажется чем угодно, только не пробелом и не переводом строки, цикл завершится, понимаете? А в переменной ch останется как раз этот символ. Первый встреченный значащий символ. Обрабатывать этот символ будет уже следующий цикл, вернитесь к тексту примера и посмотрите. Собственно говоря, если мы ввели ЦИФРУ (!!! а вовсе никакое не "число") '5', то из ЭТОГО цикла нужно уже вылетать как ошпаренным, потому что цифру надо обрабатывать, а не игнорить. А обработка не здесь, обработка (точнее, обработка и чтение) не здесь, а в следующем цикле.
И вот что. Я категорически настаиваю, чтобы вы привели в порядок свою терминологию. Число, цифра и символ — это три разных термина, у них совершенно разные значения, особенно недопустимо путать цифры и числа; а значение прочитанного байта вдобавок совершенно никак не равно численному значению цифры, даже если очередной прочитанный символ оказался цифрой. Бардак с терминологией всегда ведёт к бардаку в мыслях.
А вот чего я никогда не понимал, так это как можно изучать ассемблерное программирование -- под виндой с её принципиальной невозможностью статической сборки, с её системными вызовами, похороненными настолько глубоко, что никто не знает, какие они, с её окошками и прочим навязчивым хламом. Вот уж где попытки писать на асме не просто бессмысленны, они там, я бы сказал, оскорбляют здравый смысл.
ответить
From Uko1ove Fri Feb 4 18:46:00 2022 UTC
Осознал.
Спасибо, я вас услышал. Буду работать дальше над собой. Теперь мне стало понятно. Я ещё обратил внимание на всю программу целиком, и меня как обухом по голове ударило))). Да, над терминологией надо поработать, а то свои мысли ясно и коротко не могу выразить.
По поводу асма под винду - я пока не до конца понимаю, о чём вы. Не тот уровень ещё. Для меня было прогресом, что я сумел откопать в аудио редакторе, где и как генерится серийный номер. Мне он нафиг был не нужен, просто было интерено, как устроено внутри. Настолько глбоко и масштабно я не мыслю пока. Линукс уже оценил, очень удобно и быстро, vim освоил на уровне вимтутора и дальше по главе в день стараюсь мануал читать и осваивать, но настолько далеко в отношении ОС ещё не продвинулся, чтобы судить. До 2020-го я даже html читать не умел и был обычным юзером =).
Спасибо за ваше время, больше не отвлекаю.
ответить
From Anonymous (unverified) Mon Feb 7 19:28:00 2022 UTC
Тоже сегодня
Тоже сегодня дошел до этого места и появились вопросы. Кажется по логике понятно, но ни код из книги, ни файл из архива с примерами char2num.pas не получается заставить работать как положено. Версия fpc 3.2.2
И капча тут ну очень сложная
ответить
From admin Mon Feb 7 19:42:05 2022 UTC
Даже интересно
Даже интересно стало, как выглядит работа char2num "не как положено". Показать можете?
Про капчу — если не нравится, регайте себе аккаунт, аутентифицированным пользователям капчу не показывают.
ответить
From Anonymous (unverified) Mon Feb 7 20:02:00 2022 UTC
Как я понимаю,
Как я понимаю, вводишь одно число, вводишь другое, получаешь произведение.
У меня же диалог с программой такой
Please type the first number: 4
'' in pos: 2`
Please type the first number: 5
'' in pos: 2`
Please type the first number:
ответить
From admin Tue Feb 8 12:51:11 2022 UTC
А, винду
А, винду используем? Ну так выбросьте мои книжки и валите нахрен с моего сайта. Перейдёте под Unix -- можете возвращаться.
Ещё раз: если вы продолжаете использовать Windows, от моих книг вам никакого толку не будет. Это я вам гарантирую.
ответить
From Anonymous (unverified) Mon Feb 7 21:16:00 2022 UTC
Версия free pascal
Версия free pascal для windows похоже компилирует неверно. С версией для linux работает нормально. Я понял, книгу использовать только с линукс.
ответить
From admin Tue Feb 8 12:52:45 2022 UTC
Дело не в
Дело не в версии паскаля, просто под виндой строки в тексте, в том числе и на вводе с клавиатуры, разделяются двумя байтами -- #13 и #10 (CR, LF). Программа, которую мы обсуждаем, на это не рассчитана, и символом #13 она благополучно давится.
ответить
☞ From Anonymous (unverified) Mon Jan 24 01:42:00 2022 UTC
fb2 формат
Здравствуйте!
Спасибо вам за книги! Хочется уточнить один момент: пытаюсь сконвертировать в fb2, дабы разглядеть буквы на смартфоне и не могу понять кодировку. При выборе utf8 первый абзац читается по русски, но после далее уже на 2 странице после логотипа с лосем идут кракозябры.
Уважаемый автор, можно ли узнать исходную кодировку или иную полезную инфу, о том как сконвертировать 3 книги в fb2 или epub?
С уважением, человек.
ответить
From admin Wed Jan 26 19:54:03 2022 UTC
Ещё один не
Ещё один не умеет лицензии читать. Слышь, найду -- урою. Я с такими вещами готов бороться вообще любыми доступными способами, и ни малейших сомнений у меня не возникнет.
ответить
From Anonymous (unverified) Wed Feb 9 16:01:00 2022 UTC
Добрый день,
Добрый день, Андрей Викторович!
Дело в том, что я достаточно давно сконвертировал ваши книги в fb2 и успел прочитать уже больше половины. Естественно, никому сконвертированные файлы я не давал и никоим образом не распространял. Просто при чтении с компьютера у меня очень устают глаза, и электронная читалка на E-Ink для меня стала настоящим спасением.
Но сейчас я прочитал ваш комментарий и несколько даже испугался. Собственно, вопрос, а вернее даже просьба: разрешите ли вы мне дочитать уже сконвертированные книги до конца?
С уважением, Василий.
PS. В любом случае, спасибо за ваши книги.
ответить
From admin Thu Feb 10 10:28:47 2022 UTC
К моему
К моему глубочайшему сожалению, я не могу вам этого запретить. Согласно действующему ГК РФ, в личных целях вы с объектами авторских прав можете делать что вам в голову взбредёт, если только это не программа для ЭВМ (там специальное исключение прописано). Нарушение авторских прав можно будет зафиксировать не раньше, чем оно от вас куда-то утечёт.
А вот утечь оно, увы, может. Потому я и не приветствую (мягко говоря) любые конверсии, даже если распространение не предполагается.
ответить
From Anonymous (unverified) Wed Sep 18 18:57:46 2024 UTC
Re: К моему
Здравия, Андрей Викторович!
Хотелось бы уточнить, вы за отмену авторского права или за то, чтобы его нельзя было передавать издателю или кому бы то ни было? Если первое, то почему ссылаетесь на ГК РФ? А также не считаете ли вы действующий ГК РФ ограничением свободы распоряжаться своим компьютером и информацией, хранящейся на нем, в том числе программами для ЭВМ? Смею предположить, что каждый волен в личных целях распоряжаться любой информацией на ПК как ему угодно, независимо от того, является информация исполняемой программой или нет.
Заранее спасибо за ответ!
ответить
From Andrey V. Stolyarov Wed Sep 18 19:41:30 2024 UTC
Re: Re: К моему
> вы за отмену авторского права
Я за отмену любых имущественных прав в области интеллектуальной собственности.
> то почему ссылаетесь на ГК РФ
Потому что он пока ещё не отменён, а отменять авторское право в одностороннем порядке — только для моих произведений — я не собираюсь.
А ещё есть вот какой момент. Конкретно эту информацию можно найти прямо тут на сайте на странице, посвящённой моей публичной лицензии на книги. А ещё тут на сайте есть страница, поясняющая мой подход к премодерации комментариев, где явным образом сказано, что я не нуждаюсь в том, чтобы меня кто-то в чём-то пытался убеждать. Посему вон с моего сайта, и быстро.
ответить
☞ From Eager dude with math problems (unverified) Sun Jan 2 01:49:00 2022 UTC
Необходимый уровень математики?
Здравствуйте.
Подскажите, пожалуйста, какая конкретно математика нужна (и желательна) для максимальной пользы новичку от этих книг?
Ситуация такая. У меня нет даже нормальной школьной алгебры, сейчас я подтягиваюсь по старым учебникам по математике Киселева ("Элементарная алгебра", "Элементарная геометрия"), но я слабо представляю, что делать после них. Я слышал, в программировании нужны дискретка, линал, матан, комбинаторика, но нужны ли они конкретно для старта по этим книгам? Спрашиваю не для того, чтобы с чистой совестью пытаться в программирование, отказываясь при этом подтягивать математику, а потому, что мне крайне сложно проглатывать тонны теории без каких-то веселеньких проектов, где все это можно применить на практике и что-то работающее получить - без отдачи. Если, например, при изучении интерфейса ЯП сразу можно пойти и что-то попробовать, поиграться, на ходу идеи рождаются, что можно с этим сделать и как применить с пользой для каждодневных задач, то с математикой я такого не видел и не знаю, где искать, кроме как посредством перемежения ее с программированием. Кроме того, я несколько скептически отношусь к современной программе образования по математике, поскольку сам ее испытывал и именно из-за этого сейчас учусь заново по Киселеву, который объясняет куда понятнее и интереснее. И частично из-за этого скептицизма я не уверен, что следует по современным программам тупо проглатывать школьные математики подряд - например, потому, что после алгебры там идет сразу резкий скачок в абстрактном мышлении к основам матана.
В общем, в итоге два вопроса:
Математику я в любом случае продолжу подтягивать, в любом случае докопаюсь по маленьким шажкам, что там где нужно и как все работает. Вопрос только в том, как быстро и с каким итоговым отношением к математике я этого достигну.
---
И сразу, чтоб не тратить коммент:
ответить
From admin Sun Jan 2 09:51:41 2022 UTC
Очевидно, что я
Очевидно, что я не смогу оценить ваш уровень математики на основании одного этого комментария — но вы можете сделать это сами. В первом томе есть глава 1.3, целиком посвящённая математике. Первые три её параграфа посвящены комбинаторике, системам счисления и двоичной логике; если с их освоением будут сложности, то и со всем последующим тоже будет тяжело. Остальные четыре параграфа той же главы могут показаться "заумными", и без них в принципе можно на первых порах обойтись, но насовсем от них отказываться нехорошо — их целью является осознание самых-самых азов теории алгоритмов, причём вся эта теория вообще-то на практике не слишком критична, но без понимания именно базовых вещей программирование превращается в бездумное кнопкодавство.
Как изучать математику — вопрос не ко мне, есть много людей, умеющих её преподавать (в отличие от меня, я математику преподавать не умею).
Насчёт правильного мышления — тут всё довольно просто. Попробуйте на Паскале написать какую-то игровую программу, в которую станет играть кто-то кроме вас, причём добровольно. И постарайтесь при этом обойтись тем подмножеством средств Паскаля, которое описано в книжке (например, FreePascal поддерживает динамические массивы, вот их не трогайте, успеете ещё). Скорее всего, по итогам написания игрушки возникнет ощущение "это всё надо было с самого начала писать по-другому", вот это очень правильное ощущение — ни в чём себе не отказывайте, перепишите по-другому. Чем дольше вы провозитесь с Паскалем и чем больше кода на нём напишете, тем лучше.
ответить
From fluorine Sun Jan 2 17:02:00 2022 UTC
Я пробовал
Я пробовал писать калькулятор, сначала обычный, потом сделал её в стиле GDB (с командной строкой и т.п.) для умножения матриц, нахождения определителей и тому подобного.
Теория в итоге ушла в подкорку.
Дальше про то как изучать, я не преподователь, но у меня были хорошие учителя в школе, но всё равно какие-то советы "от товарища" смогут вам помочь в дальнейшем направлении.
Во первых у большой части математики нет практического применения! ДА! Буквально. Много чего создавалось для развлечения. Можно построить формальную теорию по которой 2+2 будет равно 5, но от неё может не быть никакой практической пользы.
Ну так вот, изучайте математику для "прокачки мозгов" прямо как с гантелями в спортзале. И здесь подойдёт любой её раздел, берите что больше нравится. И решайте на скорость, на нахождение наиболее изяшного решения и т.д. и т.п.
Ни в коем случае не нужно зубрить формулы, понимайте их! Представляйте себя вектором там, ложитесь на плоскость, делайте всё что помогает представлять, а не зубрить.
На этом пожалуй всё.
И да, чем дольше останетесь писать на паскале тем лучше. Вон я 3 месяца одну и ту же змейку переписывал (с перерывами). Конечный результат меня удовлетворил в достаточной степени, здесь цель именно в получении правильных привычек.
ответить
From Anonymous (unverified) Mon Jan 24 20:17:00 2022 UTC
Трудно писать
Трудно писать змейку?
ответить
From admin Sat Jan 29 15:04:02 2022 UTC
Смотря кому
Ваш вопрос в такой его формулировке лишён смысла. Кому-то змейка — на один вечер потоптать кнопки, не особенно напрягаясь, а кому-то — недостижимая вершина. Дело здесь не в змейке, а в том, кто её пытается писать.
ответить
From fluorine Mon Jan 31 08:39:00 2022 UTC
гм, не то чтобы
гм, не то чтобы трудно.. Я, когда на ней учился указателям на простую змейку я потратил недели два, схватив десятки сегфолтов. И я не пытался её 3 месяца подряд писать (отвлекался на другие задачки), дальше добавлял разные фишки (настройки, конфиг-файл, карта, сохранение, разные предметы, возможность играть вдвоём), приходило на ум как делать её лучше, появилось несколько реализаций. Вот так 3 месяца. А простая змейка проще пареной репы так-то (реально кнопкотоптание на вечер, но такая змейка скучная :) ).
Пока не реализовал, но хочу добавить ботов, сделать её серверную версию (что-то типа slither.io), чем не "сложно"?
ответить
From radix (unverified) Mon Jan 17 20:14:00 2022 UTC
Могу
Могу посоветовать арифметику малинина и буренина и алгебру Маракуева, можешь почитать, что об этом говорят на этом сайте:
https://ask.profi.ru/q/kakoi-samyi-silnyi-i-interesnyi-shkolnyi-38422/
ответить
☞ From Павел (unverified) Wed Dec 1 23:42:00 2021 UTC
ЗдравствуйтеСп
Здравствуйте
Спасибо за книги. Все также как и в первом издании невозможно скопировать текст из книги, чтобы вставить себе в конспект.
ПУБЛИЧНАЯ ЛИЦЕНЗИЯ копируется: "Учебное пособие Андрея Викторовича Столярова «Программирование: введение в профессию» в трёх томах".
А после нее со всех страниц вместо текста что-то подобное:
"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 через распознавание текста (
ответить
From admin Fri Dec 3 21:34:00 2021 UTC
Слушайте, ну
Слушайте, ну достали уже одно и то же спрашивать. Текстовый слой сломан намеренно, а любая конверсия и вообще любое изменение тех файлов, которые здесь опубликованы — прямое и грубое нарушение лицензии. Найду — урою.
И да, к защите от копирования это никакого отношения не имеет. Копировать файлы, как можно заметить, никто и ничто не мешает.
ответить
From Anonymous (unverified) Fri Dec 17 03:23:00 2021 UTC
А смысл? Если
А смысл? Если верить автору, то в Windows всё равно не получится научиться программированию. По крайней мере по его методике.
Кстати, а что за конспект такой? И разве назначение конспектов не в том, чтобы запомнить материал в процессе его написания? Тогда будет более эффективно прочитать нужную часть текста, затем написать своими словами, причём в идеале сверив с другими источниками и дополнив ещё и оттуда.
ответить
☞ From Андрей Кодинцев (unverified) Fri Nov 12 12:36:00 2021 UTC
Шрифт в PDF
Здравствуйте, Андрей Викторович!
Пробую читать Ваши книги в PDF. Некомфортный шрифт. Возможно он оптимизирован под бумагу, но на экране смотрится жестко, на глаза давит. Какие-то зазубрины и неровности на буквах. Причем меняющиеся при изменении масштаба. Если возможно, в следующем издании сделайте, пожалуйста, более гладкий шрифт.
С уважением, Андрей Кодинцев.
ответить
From admin Fri Nov 12 15:04:45 2021 UTC
Здесь проблема
Здесь проблема не в шрифте, а в выборе программы для чтения. Используйте, например, atril, всё будет намного приятнее.
И да, шрифты семейства Computer Modern предназначены для бумаги, а те PDF-файлы, которые есть здесь на сайте — это оригинал-макеты книг, то есть прямо те файлы, с которых книги печатались в типографии. Только спереди добавлены странички с обложкой и лицензией.
ответить
☞ From Anonymous (unverified) Mon Nov 8 14:51:00 2021 UTC
Добрый день,
Добрый день, Андрей Викторович! На данный момент я пишу свою первую программу превышающую объём в 300 строк. Но проблема в том, что реализация моей программы мне кажется неправильной, не в плане оформления, а в плане эффективности. Стоит ли по этому поводу переживать?
ответить
From admin Mon Nov 8 15:11:47 2021 UTC
Переживать по
Переживать по поводу эффективности следует не раньше, чем вы её запустите и она вам покажет неприемлемую скорость работы. Всё остальное — ну, есть даже название: преждевременная оптимизация.
ответить
From Anonymous (unverified) Fri Dec 17 03:40:00 2021 UTC
Ну кстати тут
Ну кстати тут есть пунктик, прочитал в статьях этого товарища https://randomascii.wordpress.com/
Оказывается, есть такая ерунда — квадратичная сложность алгоритма O(n²) — это как раз такая производительность, которая достаточно небольшая, чтобы пройти тестирование и выйти в production, но зато достаточно значительная, чтобы в реальном использовании вызывать проблемы.
В винде, например, квадратичную сложность имеет алгоритм выравнивания значков на рабочем столе. Причём применяется он даже тогда, когда показ этих значков отключен. Из-за этого те кто захламляют рабочий стол потом удивляются что у них меню "пуск" открывается по двадцать секунд. И как обнаружил автор, в винде таких мест полно.
ответить
☞ From Anonymous (unverified) Sun Oct 10 16:02:00 2021 UTC
Здравствуйте!
Здравствуйте! Остановился на Паскале, есть идея написать одну программу, но... Уже как месяц (вместе с учебой) пытаюсь соблюсти все принципы адекватного кода + чтобы все это было понятным (не более 4 параметров, подпрограмма решает одну, независимую от других подпрограмм, задачу и т.д.).
Так вот вопрос: я параноик (месяц обдумываю, пишу, а никакого рабочего прототипа нет)?
P.S. Сама задача - перевод числа из одной системы счисления в другую. Делаю примерный план и тут же появляются проблемы (здесь речь идет о буквах и числах одновременно, т.к. их тоже нужно правильно переводить) по типу: "Можно считать все символы в строку, а потом перевести в нужную систему" или "можно читать символы по одному, и сразу их переводить"; У одного свои нюансы, у другого еще какие-нибудь, и из-за этого не могу соблюсти какие-либо правила в процедурах и т.д.
ответить
From admin Mon Oct 11 08:11:45 2021 UTC
> вопрос: я
> вопрос: я параноик (месяц обдумываю, пишу, а никакого рабочего прототипа нет)?
Сложный вопрос :-) точнее, вопрос простой, а ответ на него сложный.
Во-первых, и в-главных, слово "параноик" у программистов (и вообще компьютерщиков) ругательным не считается; напротив, НЕ быть параноиком (ну, скажем, всё-таки скорее в бытовом смысле параноиком, не в медицинском) — для IT-специалиста означает профнепригодность. Паранойя для нас обязательное свойство.
Во-вторых, месяц обдумывать — это в целом нормально.
Но есть ещё и в-третьих. Что-то у вас задачка уж больно простая :-) чтобы её месяц обдумывать и так и не сделать ничего. Чтобы здесь сдвинуть дело с мёртвой точки, попробуйте её написать сугубо как попало, вообще без обдумывания архитектуры, имея в виду за кадром, что первую версию (пусть даже рабочую) вы выбросите и напишете программу снова, только уже "правильно".
Да, ещё один момент:
> речь идет о буквах и числах одновременно
Мне почему-то кажется, что вы путаете "числа" и "цифры".
ответить
From Anonymous (unverified) Tue Oct 12 05:23:00 2021 UTC
Ок, спасибо)>
Ок, спасибо)
> Мне почему-то кажется, что вы путаете "числа" и "цифры"
Да, простите.
> Чтобы здесь сдвинуть дело с мёртвой точки, попробуйте её написать сугубо как попало, вообще без обдумывания архитектуры, имея в виду за кадром, что первую версию (пусть даже рабочую) вы выбросите и напишете программу снова, только уже "правильно".
Окей, попробую.
Читал комментарии, где вы говорили про systemd:
> Вообще если уж залезли так глубоко, попробуйте сразу сползти с systemd, эта штука мертворожденная и неизбежно в какой-то момент начинает жутко мешать
Почитал про инициализаторы в интернете; Узнал, что один инициализатор прост в использовании и следует философии UNIX (init), а другой - в точности наоборот - сложен и не следует философии UNIX;
В этом ли все дело? То есть это является причиной, из-за которой люди не любят systemd?
Возможно, лезу вперед, но стало интересно, почему все сложилось именно так.
ответить
From admin Tue Oct 12 09:57:00 2021 UTC
Философия - фигня
Философия — фигня, хотя, конечно, всё именно так. Но — за всех, конечно, не поручусь, а лично я systemd "не люблю" (если быть точным, с удовольствием пристрелил бы всех, кто имеет отношение к его созданию и раскрутке) по одной простой причине: его навязывают. Если дистрибутив переходит на systemd, в нём вся основа, всё то, что мы называем "системой", становится повязана на systemd, то есть выкинуть его оказывается невозможно; при этом systemd от пользователей требует усилий на переобучение и траты времени на это, но не решает никаких реально существующих проблем. Попросту говоря, эта публика — RedHat и все, кто за ними последовали — решили, что они вправе отнимать моё время. Как мы понимаем, такое понравиться не может.
Ну и плюс к тому — решать-то проблем systemd не решает, а вот создавать — создаёт. Если моя система на старте работает как-то не так, я минут за десять разберусь, почему это происходит, поскольку у меня SysVinit, в котором всё, что происходит, задано простыми shell-скриптами. Если система на основе systemd "работает как-то не так", разобраться нереально: нужно лезть в потроха самого systemd, а там, пардон, многобукв и контринтуитивное построение архитектуры.
ответить
From Anonymous (unverified) Wed Oct 13 14:24:00 2021 UTC
Более того, в
Более того, в дистрибутивах, где "нет systemd", он таки есть. Просто не весь. udev например.
ответить
From admin Wed Oct 13 14:41:28 2021 UTC
udev, заметим,
udev, заметим, тоже умеет исключительно мешаться, т.е. вся "польза" от него — трата нескольких часов на то, чтоб с ним начать хоть как-то справляться, когда эта дрянь начинает творить очередную дичь вроде переименования сетевых карточек, или когда оказывается, что иксы настройку клавиатуры "теперь" берут из udev.
Если помножить потерянные лично мной несколько часов на количество пользователей Linux, которых не удовлетворяет ванильная функциональность из коробки, получится, я бы сказал, такое, за что не просто убивают, а как минимум сажают на кол.
ответить
From Anonymous (unverified) Thu Oct 14 13:17:00 2021 UTC
О нужности udev
Прошу не думать, что я являюсь фанатом udev или чем-то вроде, но, он делает вот это вот:
1. При втыкании устройства создаёт файлы в /dev, а при вытыкании удаляет. В той же OpenBSD приходится каждый раз писать cd /dev; sh MAKEDEV sd или что-то такое.
Как предложите это делать без udev?
2. Предположим у меня есть устройство и при каждом его втыкании я хочу выполнить команду. Как это сделать без udev? Например подключить кастомную раскладку клавиатуры но только к одной конкретной клавиатуре.
ответить
From admin Thu Oct 14 15:15:00 2021 UTC
При втыкании
При втыкании устройства создаёт файлы в /dev,
Вообще-то нет, в Linux'ах нынче devfs, в ней ядро само показывает файлы всех имеющхся в наличии устройст. Но даже если бы не она, да, все эти вещи прекрасно скриптуются, во-первых, а во-вторых, до нашествия udev и devfs в /dev просто присутствовали файлы для большинства возможных устройств, и крайне редко случалось так, что их не хватало.
Предположим у меня есть устройство и при каждом его втыкании я хочу выполнить команду
А давайте без "предположим"? Мне за всю мою практику использования Linux (т.е. с 1994 года) ни разу ничего подобного не хотелось, нахрен мне нужен тогда ваш udev?! Пусть его тогда ставят себе те, кому вот такое вот надо, (и если бы лично мне вдруг потребовалось именно команды выполнять по втыканию дивайса, то я бы тоже поставил), а по умолчанию чтоб его не было. Так ведь нет же, вяжут на него половину системы зачем-то, только время отнимают у нормальных людей.
Это вот ваше "предположим" и есть то, что я крайне не люблю во всём этом дерьме: решать проблемы, которых в действительности нет и никогда не было, но при этом создавать проблемы, которые вполне реальны, и попусту отнимать у пользователей время и силы. В этом весь systemd, и udev, и dbus, и прочие подобные сущности.
ответить
From Anonymous (unverified) Sat Oct 16 05:00:00 2021 UTC
udev или не udev
> Вообще-то нет, в Linux'ах нынче devfs
Ну, честно говоря, я не очень понимаю как эта фигня работает. Мне казалось, что файлы в ней создаёт именно udev, но может я и не прав. Да, она называется devtmpfs, а не devfs, по крайней мере у меня.
> Но даже если бы не она, да, все эти вещи прекрасно скриптуются
Нужто, чтобы скрипт запускался при каждом вставлении устройства и получал через переменные окружения или параметры информацию об устройстве. Для этого в любом случае нужен какой-то демон. Может можно взять mdev вместо udev, но я в этом не разбирался.
> Пусть его тогда ставят себе те, кому вот такое вот надо
Ну, мне было надо. Правда я не понял, как в udev это сделать толком. Но мне например нужно было, чтобы при втыкании некоторых устройств, права на них были у простых юзеров (а по умолчанию только у рута)
Кроме того я сделал экспериментальную клавиатуру с кастомной раскладкой, переставив клавиши. Хотелось чтобы на этой клавиатуре была кастомная раскладка, а на всех остальных обычная qwerty. С тем как сделать свою раскладку я разобрался, а с тем как сделать правило udev, которое бы выполняло команду установки раскладки при её втыкании (setxkbmap something) — пока нет. Но вроде не особо сложно.
> а по умолчанию чтоб его не было. Так ведь нет же, вяжут на него половину системы зачем-то, только время отнимают у нормальных людей.
Ну, кроме случаев когда меня не устраивали автоматически создаваемые файлы устройств, с udev мне пришлось столкнуться в ситуации, когда я переставил жесткий диск из одного ноутбука в другой. Тогда у меня появились устройства eth1 и wlan1, а все настройки были на eth0 и wlan0. Пришлось удалить пару файлов udev, чтобы он про эти устройства забыл и назначил им имена с нулём. А потом при переставлении обратно ещё раз так сделал.
Ещё пришлось погуглить и вернуть классические имена устройств вместо неудобочитаемых. У меня всего одна проводная сетевуха, та которая встроена в материнку ноута. Гораздо удобнее когда она называется eth0, а не какой-то там esp1s2 или как там было. Тоже делалось через правила udev но я забыл как.
ответить
From admin Sat Oct 16 13:25:00 2021 UTC
она называется
она называется 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"
ответить
From Anonymous (unverified) Sat Oct 16 16:20:00 2021 UTC
Это не в udev'е
Это не в udev'е дело, это ядро так сконфигурено. Убунту, что ли, используете? Так или иначе, где проблема, там должно быть и решение — их не udev'ом надо переименовывать, а параметрами ядра в загрузчике. Если у вас grub, то вот так: GRUB_CMDLINE_LINUX="net.ifnames=0"
Всё так, но хочу отметить, что таки udev определённо имеет отношение к этому именованию устройств. Вот, на одной из линукс-систем, которые я поддерживаю (а на основной машине у меня по-прежнему OpenBSD), есть такой файлик:
Мне не хочется разбираться в тонкостях этого, как я уже говорил, наркоманского синтаксиса, но на первый взгляд именно udev отлавливает параметр ядра net.ifnames и переименовывает устройства в зависимости от него. То есть, если это правило удалить нахер, то параметр ядру передавать не понадобится.
ответить
From admin Sat Oct 16 18:16:00 2021 UTC
То есть, если
То есть, если это правило удалить нахер, то параметр ядру передавать не понадобится.
К сожалению, это не так. Эти неудобоваримые имена вместо традиционных eth0, eth1 и т.п. — это именно конфигурируемая "фича" ядра (называется, если не ошибаюсь, predictable network interface names), и пресловутый параметр её отключает, если она была включена при сборке. Единственный дистр, в котором она включена, из тех, что я лично трогал-щупал-пользовал — таки убунту, в остальных (в том числе в дебиане) этот идиотизм, судя по всему, не прижился.
udev к именованию (точнее, к ПЕРЕименованию) устройств, несомненно, тоже имеет отношение, в нём соответствующая функциональность присутствует. Но убирать "нахер" надо не правило, а весь udev целиком, это как-то правильнее, что ли.
ответить
From Anonymous (unverified) Sat Oct 16 18:32:00 2021 UTC
К сожалению,
К сожалению, это не так. Эти неудобоваримые имена вместо традиционных eth0, eth1 и т.п. — это именно конфигурируемая "фича" ядра
Жаль. Я надеялся, что хотя бы в ядре этой фигни нет.
Но убирать "нахер" надо не правило, а весь udev целиком, это как-то правильнее, что ли.
Да, конечно. У меня даже были планы разобраться с mdev, когда ещё на линуксе жил, но руки так и не дошли. Оказалось проще перейти на OpenBSD, где всего этого дерьма изначально нет.
ответить
From Anonymous (unverified) Tue Oct 19 05:45:00 2021 UTC
udev
> Но убирать "нахер" надо не правило, а весь udev целиком, это как-то правильнее, что ли.
Может кто-то и осудит такое мнение, но мне как-то пофиг. Он есть и работает, так что пусть будет. А вот если его убирать, наверняка что-то отвалиться, придётся разбираться, возможно пересобирать код с патчами, а может вообще самому эти патчи писать. Это тяжело а в итоге, ну, будет опять работать. А в чём польза, если и так работает и так работает? Какой бы не был наркоманский синтаксис у правил udev, проще разобраться с ним, чем с целой кучей программ, которые нужно править, чтобы избавиться от udev.
Кстати то же самое относится и к systemd: если бы готовых дистрибутивов, где мейнтейнеры уже позаботились о том, чтобы всё работало без systemd не существовало, я бы сидел на дистрибутиве с systemd. Но, к счастью, такие дистрибутивы есть и я использую один из них.
Впрочем не вижу ничего особо ужасного и в systemd. Приходилось пользоваться на устройстве к которому других готовых дистров не было (одноплатник). Поправить/написать юнит-файлы не намного сложнее, чем шелл-скрипты. Ну и команды нужны другие для остановки/запуска демона — systemctl какой-то. Так разве трудно прочитать man systemctl? По-моему это гораздо проще, чем разбираться в том как адаптировать без-systemd-шный дистрибутив под тот одноплатник. И я знаю, о чём говорю, поскольку ранее его и использовал, когда готового образа под тот комп не было.
ответить
From admin Wed Oct 20 08:56:47 2021 UTC
Ваше
Ваше рассуждение имеет серьёзную дыру: вы наличие udev рассматриваете как исходную ситуацию, как если бы он "всегда был", и оцениваете его с точки зрения сложностей по слезанию с него. Я же начал использовать Linux за девять лет до первого релиза udev (каковой состоялся в 2003 году) и, соответственно, лет за 15 до его широкого распространения; вполне логично, что я скорее буду оценивать шаг по его внедрению (что было, что стало, чего стоило) — и тут всё очень плохо: было всё нормально, стало отвратительно, и на это ещё и потрачены силы и время.
Ну а ваша лояльность к systemd вообще ни в какие ворота не лезет. Мне не трудно прочитать man systemctl, и уже пришлось это сделать. И, увы, не раз, поскольку там контринтуитивно всё и не запоминается. Что я за это получил? А ничего — возможность справиться с треклятыми systemd'шными дистрами, которые теперь только и есть на любом VPS-хостинге, то есть де-факто я вынужден был потратить своё время на то, чтобы побороть проблему, которую мне, собственно говоря, как раз внедрение systemd и создало. Как запускать, останавливать, включать и выключать сервисы на sysVinit, я разобрался ещё тогда, в 1994 году, и писать скриптики для исходно дебиановской скриптоты, лежащей в /etc/init.d, тоже научился очень быстро, ибо там всё понятно и логично, а вот юнит для systemd — он, может, и короче чисто текстуально, но что там за мумба-юмба написана, при взгляде внутрь совершенно непонятно, приходится это всё как-то обходить, поскольку врубаться в эти поттеринговские высеры у меня нет ни малейшего желания — эта мерзость мне и так уже стоила несуразно дорого.
Потрудитесь освободить мой сайт от своего присутствия, мне тут такие не нужны.
ответить
From fluorine Wed Oct 20 12:47:43 2021 UTC
Есть хостинги - достаточно их
> треклятыми systemd'шными дистрами, которые теперь только и есть на любом VPS-хостинге
==
https://www.vultr.com/
есть freebsd и openbsd
может кому нибудь понадобиться, и ни копейки больше за не-системдшность не просят.
UPD: Очень был тогда очень удивлен тем что там были BSD, что даже забыл добавить, что ещё можно загрузить свой образ, это думаю ещё интереснее.
ответить
From Владислав (unverified) Fri Oct 29 12:11:00 2021 UTC
Не подскажете,
Не подскажете, сколько там стоит самый простой тариф? А то взлянуть на цены можно только после регистрации.
ответить
From fluorine Wed Nov 3 20:24:00 2021 UTC
На данный
На данный момент как пишет: самое слабое железо - High Frequency 32 GB NVMe $6/month $0.009/hour 1 CPU 1 GB Memory 1 TB Bandwidth; думаю справедливо. сам лично этим хостингом не пользуюсь, пользуюсь другим. стоит дебиан с 10GB за 3$, но мне много и не нужно, запросы у меня небольшие, не приходится мараться много об выверты systemd, раз nginx зарелоадить, раз tinyproxy также, ну и git.
ответить
From Anonymous (unverified) Sun Nov 14 23:51:00 2021 UTC
В Дебиане
В Дебиане прижился. Причём вроде то ли с 9 версии, то ли с 10
ответить
From Anonymous (unverified) Thu Oct 14 18:03:00 2021 UTC
В той же OpenBSD
В той же OpenBSD приходится каждый раз писать cd /dev; sh MAKEDEV sd или что-то такое.
Не вводите в заблуждение несведущих, для создания нового файла устройства MAKEDEV нужно написать лишь один раз.
Ну и да, если кому-то действительно нужно динамично создавать/удалять файлы устройств (и/или выполнять какие-то ещё команды, вроде вашего примера с клавиатурой), то нормальные шелл-скрипты смотрелись бы на месте udev (с его откровенно наркоманским синтаксисом) гораздо лучше.
ответить
From Anonymous (unverified) Sat Oct 16 04:44:00 2021 UTC
OpenBSD
Ну, мне часто приходилось загружаться с bsd.rd и что-то там делать и там нужно было вводить эти команды именно каждый раз. В то же время в LiveCD с гнутым линуксом это было не нужно.
ответить
From admin Sat Oct 16 13:31:07 2021 UTC
Подозреваю, в
Подозреваю, в исходном комментарии про "один раз" речь шла всё-таки о системе, инсталлированной на жёсткий диск. Что все эти "live" ничего не запоминают из того, что было сделано — не новость.
ответить
From Anonymous (unverified) Sat Oct 16 15:54:00 2021 UTC
Безусловно, в
Безусловно, в live-системе, где файлы не сохраняются на диск, придётся делать это каждый раз. Но в вашем исходном комментарии было совсем не очевидно, что речь идёт именно о таких системах. Поэтому я и попросил вас не вводить в заблуждение людей, не знакомых с OpenBSD. Прочитав ваш комментарий они легко могли получить неверное представление.
ответить
From Anonymous (unverified) Mon Nov 29 01:52:00 2021 UTC
без udev
Откройте для себя сборку ядер Linux с CONFIG_DEVTMPFS=y и CONFIG_DEVTMPFS_MOUNT=y
ответить
From Anonymous (unverified) Mon Oct 25 12:11:00 2021 UTC
Аудио в Linux
Я снова здесь. Наконец, закончил "переводчик", добрался до полноэкранных программ (ваш совет изменил дело в лучшую сторону, спасибо). Встал вопрос о... Воспроизведении звука; могу ли я проигрывать аудио (mp3 - хотя, без разницы, можно любой формат) на Паскале? Уж очень хочется добавить звуки в свою будущую игру. Заранее спасибо.
ответить
From admin Mon Oct 25 14:53:05 2021 UTC
Я такого
Я такого никогда не пробовал (и не только на Паскале, вообще ни на каких языках), но точно знаю, что можно. Вот, например: https://wiki.freepascal.org/Audio_libraries
Только я сомневаюсь, что нужно. Разобраться с любой из этих библиотек довольно трудно, там задействуются нетривиальные части FreePascal, которые я в книге не рассматриваю принципиально (например, часть из них объектно-ориентированные, а я ООП отнюдь не случайно отложил до третьего тома). В общем это всё не для начинающих. Тот же модуль crt для начинающих вполне годится, но во FreePascal'е есть существенно более навороченные юниты для тех же целей — угадайте, чего это я про них ни слова не говорю. Всё-таки FreePascal я рассматриваю как учебное пособие, а не как инструмент.
ответить
From Anonymous (unverified) Mon Oct 25 16:00:00 2021 UTC
То есть эту
То есть эту затею лучше отложить до Си/Си++?
ответить
From admin Mon Oct 25 16:20:39 2021 UTC
Да, где-то так.
Да, где-то так. Не потому. что это лучше писать на Си или Си++, а просто потому, что к тому времени у вас мозги уже будут натренированы в нужную сторону и менее подвержены влиянию, извините за выражение, говнокода, которого в "профессиональных" библиотеках Free Pascal в избытке.
ответить
From Anonymous (unverified) Mon Oct 25 17:02:00 2021 UTC
Понял, спасибо
Понял, спасибо
ответить
☞ From unch Fri Sep 17 09:08:00 2021 UTC
"(*p).next" vs "p->next"
на стр. 141 можно еще предложить пример с указателем на указатель в качестве аргумента в пользу "стрелки". Получается вообще клинопись:
"(*pp)->next" vs "(*(*pp)).next";
ответить
From admin Fri Sep 17 09:45:08 2021 UTC
Вот как будто
Вот как будто без этого не клинопись. А в вашем примере вторые скобки вообще-то не нужны, так что получается не так уж и страшно, всего лишь (**pp).next.
ответить
☞ From Anonymous (unverified) Mon Sep 13 12:19:00 2021 UTC
виртуальная машина
Андрей Викторович можно узнать как переползти на другую ОС.
Просто я пользуюсь виндовс 10 и у меня много всего что на линксе работать не будет. Я прочитал что можно использовать virtualbox(все через виртуализацию ставят линукс или как ?)
ответить
From admin Mon Sep 13 13:51:00 2021 UTC
Поскольку мы
Поскольку мы тут, по-видимому, обсуждаем обучение по моим книгам, я вынужден вас огорчить: если вы Linux поставите в виртуалке, ничего у вас не получится, жить вы в нём не станете и он не сыграет той роли, которая ему отведена в моей методике.
От этого "много всего", что "не будет работать", придётся отказаться. Либо отказаться от моих книг, всё равно толку не будет. Отказываться от привычного софта, впрочем, можно постепенно — например, загружать Win только в случаях, когда вот совсем никак не получается прямо здесь и сейчас что-то сделать без неё. И частота возникновения таких случаев должна постепенно падать. Linux (или другой Unix, скажем, FreeBSD или OpenBSD) следует воспринимать как основную систему, а не "учебную", в противном случае можно даже и не начинать дёргаться. Ну, или другие книги поискать, во всяком случае. Мои книги с повседневным использованием систем линейки Windows несовместимы.
ответить
From Anonymous (unverified) Mon Sep 13 15:12:00 2021 UTC
ОК понял
ОК понял спасибо.
ответить
From Anonymous (unverified) Wed Sep 15 05:04:00 2021 UTC
Windows
Мне до сих пор приходится иногда его загружать, правда на отдельном компе физически не подключенном к интернету. Правда задачи, для которых нужен Windows почти все типа что-нибудь перепрошить:
SSD (причём можно прошить даже тот с которого загружена ОС), флешки (если сдохли их иногда можно оживить утилитой от производителя), кнопочные мобильные телефоны (андроидовские прошиваются просто копированием zip-файла в определенный каталог на карте памяти и загрузкой в режиме Recovery).
Ещё есть класс задач типа — подсказать виндузятнику как что-то там сделать в Windows. Тут тоже желательно иметь её у себя на компе.
Ну и наконец — тестирование разных программ. Например проверить воспроизводится тот или иной баг в свободной программе в Windows и добавить это в баг-репорт. Не обязательно, но почему бы и нет?
ответить
From admin Wed Sep 15 09:35:13 2021 UTC
Да у меня тоже
Да у меня тоже вообще-то есть ноутбук с XP :-) Правда, задача ровно одна: запускать софтины для генерации отчётов в налоговую и ПФР. Под wine они вроде тоже запускаются, но возникают странные проблемы с русским вводом (не разбирался, скорее всего это из-за того, что у меня koi8), а тот ноут всё равно больше мне ни подо что не нужен.
Дело не в том, что Windows нужно полностью изжить и не прикасаться к ней под страхом расстрела. Дело (если речь идёт об обучении по моим книжкам) в том, что _жить_ нужно под *nix'ом, и не просто жить, а обязательно использовать в роли основного инструмента управления машиной командную строку.
ответить
From Parthen Mon Sep 13 16:09:00 2021 UTC
>много всего
>много всего что на линксе работать не будет
Прям уж?)
Просто есть такая программа, wine, и с помощью нее все прекраснейшим образом работает. Играл на ней в OSU, старые флеш игры и прочую фигню, работало *быстрее* чем на винде.
Ну и да, в это сложно поверить, но на Линуксе программ *гораздо* больше, банально потому, что консольные программы крайне просто писать.
По делу -- ставьте какой-нибудь дистр для чайников, там разберется даже домохозяйка. Можно в дуалбут (будете при загрузке ПК выбирать куда грузиться -- в Линукс или Винду), но скорее всего вы просто плюните, перезагружать каждый раз комп дело не быстрое.
ответить
From unch Mon Sep 13 18:21:00 2021 UTC
мне кажется, вы
мне кажется, вы несколько категоричны ("...все прекраснейшим образом работает"), а ваш совет может навредить новичку:
1. далеко не каждый софт запустится под wine. Часто даже разные версии одной программы ведут себя по-разному при эмуляции.
2. даже запустившись, программа часто падает и ведет себя не стабильно.
3. базовая настройка wine требует определенных усилий.
PS: лично мне сложно найти альтернативы в *nix для систем сканирования-распознавания документов и программ для редактирования специфичной документации. И, пожалуй, стоит быть готовым к тому, что половина игр для винды не запустится под *nix.
PSS: я не очень понял, что значит "дистр для чайников"? Отдает снобизмом, не находите? Думаю, проблема не в конкретной *nix системе, а в отсутствии привычки читать мануалы (RTFM). Новичок, вооружившись мануалом и соответствующим настроением, поставит любую систему: от Linux Mint до OpenBSD. И, скорее всего, на первых порах, будет делать это несколько раз подряд.
ответить
From Parthen Tue Sep 14 16:40:00 2021 UTC
>далеко не
>далеко не каждый софт запустится под wine. Часто даже разные версии одной программы ведут себя по-разному при эмуляции.
Каждый запустится, не каждый будет работать :)
А вообще я перечислил выше, что у меня работает хорошо.
> базовая настройка wine требует определенных усилий
На минте работало из коробки, на дебиане да.
>И, пожалуй, стоит быть готовым к тому, что половина игр для винды не запустится под *nix.
Вообще да, но тут внезапно приходит осознание, что к чертям большинство игр не нужно. Я даже в OSU не играю, осталось только 0 A.D (кстати никто больше не играет?), без стратегий жить не могу, а шахматы надоели.
>дистр для чайников
Дистр, который сложно поломать, и на котором минимально нужно что-то чинить.
>Новичок, вооружившись мануалом и соответствующим настроением, поставит любую систему: от Linux Mint до OpenBSD
Ага, щас :)
Это работает если человек а) умеет читать на английском б) хорошо понимает устройство ПК, читай знает CS.
Я несколько раз не мог осилить Арч, из-за отсутствия вообще какого-либо представления о разметке диска и незнания что такое GRUB.
ответить
From Anonymous (unverified) Wed Sep 15 13:01:00 2021 UTC
хорошо
хорошо понимает устройство ПК, читай знает CS.
Я бы не стал обобщать "понимание устройства ПК" до "знания CS". CS -- это ещё и, например, дискретная математика, алгоритмы, теория вычислимости, теория категорий, и проч. Всего этого точно не нужно, чтобы установить ОС, пусть даже это и OpenBSD с текстовым инсталлятором.
ответить
From admin Wed Sep 15 13:53:16 2021 UTC
Кстати да.
Кстати да. Больше того, я неоднократно видел людей, вроде бы знающих CS, но которые про DPT, например, не в курсе, и компьютер разобрать-собрать не могут.
ответить
From Anonymous (unverified) Fri Sep 17 00:15:00 2021 UTC
DPT
Что такое DPT? Если аббревиатура, то можно полностью словами? Гуглится что-то невнятное.
ответить
From admin Fri Sep 17 08:40:09 2021 UTC
Disk Partition Table
Disk Partition Table https://en.wikipedia.org/wiki/Disk_partitioning
ответить
From Anonymous (unverified) Fri Sep 17 15:04:00 2021 UTC
DPT
Это странная аббревиатура. например MBR или GPT я бы понял, а так нет
Я как-то пробовал создавать флешку с бесконечным количеством разделов. Extended Partition может ссылаться сама на себя.
Кстати эта структура данных напоминает односвязный список. Так что можно и бесконечный односвязный список сделать.
ответить
From admin Sat Sep 18 10:03:13 2021 UTC
MBR не про то, это
MBR не про то, это скорее тот машинный код, который занимает начало того же (самого первого на диске) сектора, в конце которого располагается таблица разделов.
А GPT, кстати, вот я бы уже не понял. Во всяком случае, без обращения к поисковикам.
ответить
From Anonymous (unverified) Fri Nov 26 01:06:00 2021 UTC
> MBR не про то,
> MBR не про то, это скорее тот машинный код
От какой машины код в карте памяти, которая вставлена в фотокамеру или портативную колонку?
ответить
From admin Fri Nov 26 10:23:45 2021 UTC
От x86, причём
От x86, причём 16-битный. Если, конечно, код там есть; при создании загрузочного носителя этот кусок кода в любом случае обычно перезаписывают.
От того, куда эта карта вставлена, сие, понятным образом, никак не зависит.
ответить
From Parthen Wed Sep 15 16:12:00 2021 UTC
Справедливо, не
Справедливо, не знаю как назвать дисциплину, разбирающую устройство ПК.
И не просто устройство, мол, вот это диск, а это ОЗУ, а именно что такое раздел, BIOS, шина, и проч.
ответить
From Anonymous (unverified) Wed Sep 15 13:11:00 2021 UTC
>дистр для
>дистр для чайников
Дистр, который сложно поломать, и на котором минимально нужно что-то чинить.
Неоднозначное определение. Мне, например, поломать Ubuntu проще, чем поломать Slackware. А починить поломанное, наоборот, гораздо труднее.
Про "минимально нужно чинить" то же самое. В свежеустановленной Ubuntu мне с ходу хочется починить вообще всё.
ответить
From admin Wed Sep 15 13:54:00 2021 UTC
> поломать Ubuntu
поломать Ubuntu проще
А ведь верно, причём в самом буквальном смысле. Там ведь по умолчанию есть sudo, и оно юзеру доступно без ограничений.
починить вообще всё
Видимо, самая главная неисправность заключается в неправильном выборе дистра перед установкой :-)
ответить
From Anonymous (unverified) Wed Sep 15 14:09:00 2021 UTC
Видимо, самая
Видимо, самая главная неисправность заключается в неправильном выборе дистра перед установкой :-)
Дык! :-)
Справедливости ради, последний раз такая проблема возникала когда я ещё работал в офисе, на предустановленной убунте. Помучившись какое-то время, решил проблему именно что установкой другого дистра.
ответить
From Parthen Wed Sep 15 16:09:00 2021 UTC
Поломать -- это
Поломать -- это и к установке относится :)
Хотя про Slackware я ничего не знаю.
Ну и да, убунта ни разу не для чайников.
Насчет поломать... Целенарпавленно ломать никто не будет, поломать можно что-то когда будешь настраивать, а значит настраивать нужно как можно меньше.
ответить
From admin Thu Sep 16 10:24:06 2021 UTC
Да ладно, что
Да ладно, что такого страшного в том, чтобы сломать свежую инсталляцию? Придётся, конечно, потратить время на переустановку, но зато появится некий опыт. Вот какой-нибудь сервак в продакшне, к которому к тому же нет физического доступа, сломать реально страшно :-)
ответить
From Parthen Thu Sep 16 17:27:00 2021 UTC
Вот у меня,
Вот у меня, вроде как всего 3 года назад, был панический страх белого текста на черном фоне. Прям страшно, без шуток.
Новичку я думаю также будет страшно
ответить
From admin Thu Sep 16 19:29:32 2021 UTC
А если его
А если его зелёным сделать, как на очень многих исторических терминалах? Или вот амберным (таким приятно-оранжевым, действительно чуток на янтарь похоже), как на моём vt420? Или тут всё-таки не в цветах дело?
ответить
From Parthen Fri Sep 17 03:18:00 2021 UTC
Нет не в цвете,
Нет не в цвете, именно что боязнь терминала.
ответить
From admin Fri Sep 17 08:41:07 2021 UTC
Странно, за
Странно, за собой такого не помню. Ну хотя я с ДВК начинал :-)
ответить
From Oliver (unverified) Fri Sep 17 14:38:00 2021 UTC
> боязнь
> боязнь терминала.
Часто у этого нет оснований, ибо какая разница, выбирать диск для установки в GUI и нажимать на кнопку "Далее" или установливать систему в текстовом режиме и, вместо кнопки "Далее", нажать предлагаемую кнопку на клавиатуре, чтоб выбрался нужный диск для установки? Но начинающий, разумеется, об этом и не догадывается... Но боится... Да, во время установки, например, OpenBSD есть свои особенности, но если в компе - один диск и делать авто разметку диска, ну тогда там все достаточно таки просто!
Вообще же, все на самом деле просто: нужно только разобраться. Ведь все придумали такие же люди как и мы с Вами, и у них, как ни странно, тоже 1 голова...
ответить
From lake (unverified) Fri Sep 17 19:10:00 2021 UTC
Насчёт боязни
Я вот просто таки ненавижу если не боюсь графических установщиков. Можно галочку какую-то где то забыть или не увидеть или оно не сможет там отобразиться мало что там бывает.
А в терминале все можно зажурналировать и хоть 1000 раз потом перепроверить текстовый файл. Только терминал спасает меня от моей "ОКР", паранои и перфекционизма. И ещё я могу 2 часа выбирать имя переменной.
Привожу как просто альтернативную точку зрения.
Неужели нужно лечится и зарядится пофигизмом? И плохие ли это привычки для разработчика?
ответить
From admin Sat Sep 18 10:28:53 2021 UTC
плохие ли это
плохие ли это привычки
Всё, что вы про терминал сказали, вполне себе так и есть. Что до двух часов на выбор имени переменной, то это, конечно, перебор; её же потом можно переименовать, вы её не на скрижалях высекаете.
ответить
From Anonymous (unverified) Wed Sep 15 14:00:00 2021 UTC
немного оффтопа про игры, если уважаемый хозяин не против
Есть, кстати, сильно облегчённый опенсорсный клон OSU: https://github.com/fmang/oshu
Я сам, правда, на нём почти не играл. Только собрал себе под OpenBSD и попробовал запустить пару битмапов, чтобы убедиться, что всё работает.
В OSU я поигрываю иногда на смартфоне. Как телефоном я им давно не пользуюсь, симки переставил в дешёвый кнопочный телефон, а вот под музыку пальцем потыкать оказалось прикольно. Тоже, кстати, на опенсорсном клоне, называется OPSU.
без стратегий жить не могу, а шахматы надоели.
Wesnoth?
ответить
From Parthen Wed Sep 15 16:06:00 2021 UTC
За OSU большое
За OSU большое спасибо, попробую
>Wesnoth
Да мне как раз пошаговость в том числе и наскучила. Хотя выглядит интересно, тоже попробую
ответить
From Anonymous (unverified) Wed Sep 15 04:54:00 2021 UTC
OpenBSD для чайников
Пробовал я поставить OpenBSD на старый комп с одно-гигабайтным IDE-диском. Если не ставить иксовые группы и компиляторы — то оно, конечно работает. А вот если ставить (для чего применить внешний USB-диск) — то вот фиг вам:
BIOS загрузчик OpenBSD с него грузит, но загрузчик не видит файлов с ядром.
Тогда я попробовал для файлов с ядром создать на IDE-диске небольшой раздел OpenBSD.
В этом случае, загрузчик файлы видит, грузит ядро, но ядро думает, что корневой раздел — это тот, откуда его загрузили, маленький на несколько мегабайт.
Если дать ядру параметр -a, то оно будет спрашивать какой взять корневой раздел, но когда оно это спрашивает, оно не видит USB-клавиатуру. Хотя в BIOS и в загрузчике OpenBSD и даже после загрузки она работает.
При этом в Slackware грузится с USB-диска и работает штатно причём с ядром 5.x на древнем компе начала 2000-х, да.
ответить
From admin Wed Sep 15 09:30:11 2021 UTC
По моим
По моим наблюдениям сейчас живых IDE-дисков по окрестностям бегает больше, чем компов, которые их умеют и которые ещё не осыпались ржавым прахом. Неужто так трудно побольше винт найти? :-)
ответить
From Anonymous (unverified) Sat Sep 18 11:52:00 2021 UTC
IDE-диск
Там он нестандартного типа. Другой достать можно, но это того не стоит
ответить
From Anonymous (unverified) Wed Nov 10 17:41:00 2021 UTC
Я в подобном
Я в подобном случае ставил систему на диск, а загружался с загрузочной дискеты, которая указывала диск с системой
ответить
From admin Wed Nov 10 18:46:21 2021 UTC
Вот с живыми
Вот с живыми дискетами и дисководами реально сейчас могут быть проблемы.
ответить
From Alejandro (unverified) Mon Sep 13 18:21:00 2021 UTC
> wineА как он с
> wine
А как он с современными программами справляется, не знаете?
> консольные программы крайне просто писать
Не согласен. Под unix проще и приятнее писать любые программы :)
Можно, кстати, как советует Андрей Викторович, найти или купить старый ноутбук и поставить туда linux. Если ноутбук совсем дряхлый, то это ему может буквально вторую жизнь дать.
ответить
From Parthen Tue Sep 14 16:29:00 2021 UTC
> А как он с
> А как он с современными программами справляется, не знаете?
Смотря какими. ААА игры -- плохо без настройки, лучши стимовский протон использовать. Всякая хрень с DRM туда же. Ну а все остальное сносно :)
>Под unix проще и приятнее писать любые программы
Я с UI программ под Линукс не писал, так что говорить не буду.
ответить
From admin Tue Sep 14 18:05:06 2021 UTC
Я и писал, и под
Я и писал, и под Win/* перетаскивал. И нативные виндовые когда-то тоже писал. Подтверждаю, под *nix GUI программировать намного менее противно, чем под win :-)
ответить
From Oliver (unverified) Thu Sep 16 09:34:00 2021 UTC
> много всего
> много всего что на линксе работать не будет
Что в это "много всего" входит?
Разумеется, есть программы, которых нет под Линукс, но все-таки часто оказывается, что пользователь Виндовс запускает в своей системе программы, которые можно запустить либо на Wine под Линукс, либо для которых есть альтернатива на Линукс, либо которые на самом деле не шипко то и нужны ему, но привычка делает свое дело. Я не утверждаю, что это - именно Ваш случай, но... Я в свое время жил в Виндовс и мне казалось, что вот без некоторых программ, которые я на нем запускал, будет не просто. Я разумеется заблуждался, и когда совершал переход на Линукс, нашел для своих задач альернативу на Линукс. Оказалось, что все дело - в привычке и в моем заблуждении, что мол на Виндовс есть все, а на Линукс - нет ничего. Еще раз замечу: не берусь утверждать, что это - именно Ваш случай, я лишь делюсь своим опытом... Во всяком случае, я - очень доволен, что слез с Виндовс, потратив на это сравнительно не так уж и много усилий, чтоб изменить привычкам и отбросить свое заблуждение: потраченные усилия и время стоят того!
ответить
☞ From baoLuck (unverified) Thu Sep 9 14:06:00 2021 UTC
небольшое замечание
Добрый день. в третьем томе в примере на странице 194 не нужно ли передавать в качестве параметров координаты в функцию Hide(), я понимаю, что на общее восприятие примера это не влияет, но все же, откуда функция узнает, откуда ей стирать точку или окружность?
п. с.: с уважением и огромной признательностью за ваш невообразимый труд и прекрасное пособие
ответить
From admin Thu Sep 9 20:33:47 2021 UTC
Ну здрасссте.
А ничего, что эта функция — метод объекта, вызывается для объекта и имеет доступ к полям объекта?
Вообще когда такие вопросы возникают, обычно это значит, что за ООП вы схватились слишком рано.
ответить
☞ From Uko1ove (unverified) Mon Sep 6 09:20:00 2021 UTC
2 книга предыдущего издания
Спасибо вам огромное за ваши труды. У меня вопрос: второй том про низкоуровневое программирование не вошёл во 2-е издание. А почему так? Разве его теперь не стоит изучать, чтобы пойти дальше в сети и парадигмы? Спасибо =)
P.S. ну и капчи у вас, я и сам далеко не с первого раза отправил).
ответить
From admin Mon Sep 6 11:58:00 2021 UTC
ёлки-моталки,
ёлки-моталки, смотрим сюда: http://www.stolyarov.info/books/programming_intro проматываем полэкрана вниз, видим текст, выделенный фоном и жирным шрифтом:
У меня встречный вопрос, а какая вам разница, что там и куда вошло или не вошло, зачем вам вообще книги, если вы читать не умеете?
ответить
☞ From Anonymous (unverified) Mon Aug 30 13:18:00 2021 UTC
Язык ассемблера, побитовые операции, оператор and
В вашей книге есть примеры с оператором and:
Так, с помощью команды and можно получить остаток от деления беззнакового числа на степень двойки (от 1 до 32 степени); например, "and eax, 3" оставит в eax остаток от деления его исходного значения на 4, а "and eax, 1fh" - остаток от деления на 32.
Не могу понять, как это получается;
Возьмем число 255 (1111 1111 в двоичной системе) и выполним операцию and с той же тройкой (0000 0011). В регистре останется тройка, так как только на первых двух позициях в обоих числах есть единицы. Также с числом 31. Или я что-то путаю?
ответить
From admin Mon Aug 30 15:33:14 2021 UTC
Конечно,
Конечно, путаете:
Возьмем число 255 (1111 1111 в двоичной системе) и выполним операцию and с той же тройкой (0000 0011). В регистре останется тройка,
Ну так остаток-то мы искали не от деления на три, а от деления на четыре. И ага, остаток от деления 255 на четыре составляет таки три, тут всё верно.
Также с числом 31
Абсолютно верно, и получается остаток от деления на 32. Как это и написано в книге, собственно говоря.
В общем случае, чтобы получить остаток от деления на степень двойки, надо взять эту степень двойки, вычесть из неё единицу и полученное число наложить на первый операнд в качестве маски с помощью and.
Кстати, and никакой не оператор. В ассемблере вообще нет операторов.
ответить
From Anonymous (unverified) Tue Jan 25 12:36:00 2022 UTC
А можете,
А можете, пожалуйста, подсказать, как это получается (математически), то есть откуда пошло правило ("чтобы получить остаток от деления на степень двойки, надо взять эту степень двойки, вычесть из неё единицу и полученное число наложить на первый операнд в качестве маски с помощью and")?
ответить
From admin Sat Jan 29 15:21:08 2022 UTC
Ну вот
Ну вот смотрите, начнём с понятной всем десятичной системы. Чтобы получить остаток от деления на 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-й степени.
Уж не знаю, насколько это "математически" :-)
ответить
From Anonymous (unverified) Sun Jan 30 08:22:00 2022 UTC
Теперь понял.
Теперь понял. Огромное вам спасибо!
ответить
From Anonymous (unverified) Sat Feb 12 18:28:00 2022 UTC
and никакой не
and никакой не оператор. В ассемблере вообще нет операторов.
Ассемблеры, которые сами умеют вычислять выражения, позволяют использовать в них арифметические, побитовые и ещё какие-нибудь полезные операторы.
ответить
From admin Mon Feb 14 09:28:02 2022 UTC
Рекомендую
Рекомендую уяснить разницу между английским термином operator и русским словом оператор, который, если речь идёт о программировании, по-английски будет statement. Английское operator переводится словом «операция».
ответить
☞ From Anonymous (unverified) Sun Aug 15 09:58:00 2021 UTC
Здравствуйте!
Здравствуйте! Очень заинтересовал ваш трехтомник ("Программирование: введение в профессию"). Вопрос: можно ли начать восьмикласснику его читать?
ответить
From admin Sun Aug 15 12:50:00 2021 UTC
Странная постановка вопроса
С одной стороны, я в целом не вижу, почему восьмикласснику может быть "нельзя" что-то читать. Если восьмикласснику не понравится, он чтение сам бросит. Возможно, позже вернётся. Единственное, что тут реально "нельзя" -- это заставлять; попытаетесь заставить (или уговорить, или "убедить", в общем любой вариант, при котором условный обучаемый книжку читает не потому, что хочет сам, а потому что "надо") -- получите ненависть к предмету, и уж точно не будет никакого толка. Мои книжки написаны в расчёте на читателя, которому интересно и который хочет это всё освоить. Сам хочет, а не кто-то "его хочет". Но здесь есть беспроигрышный вариант -- подсуньте ему первый том, станет читать -- хорошо, не станет -- значит, не надо.
С другой стороны, вам тогда надлежить быть готовыми к обеспечению материальной базы. Вряд ли обычный восьмиклассник (если только это не совсем особый случай) самостоятельно поставит на компьютер Linux. Ну а без этого мои книжки, опять-таки, бесполезны.
ответить
From Anonymous (unverified) Mon Aug 16 05:43:00 2021 UTC
А чем в этом
А чем в этом вопросе взрослый, но никогда линукса не видевший отличается от восьмиклассника?
Мне кажется, я бы поставил, если бы мне предоставили диск с линуксом и мануал на русском, где написано что и как и какие команды что значат. Но на самом деле нет, так как я вообще не знал где взять диск с ОС в то время. Вот дисков с играми для приставок, компа, музыкой, фильмами было полно — на каждом углу, а вот почему-то диск с линуксом первый я добыл только на заказ, в три раза дороже чем если бы он был с виндой и к тому же, как оказалось, устаревшей на 5 лет версии. Но сейчас-то с этим легче, не нужно искать именно с линуксом, достаточно любую флешку купить и скачать любой дистр по широкополосному инету за 20 минут.
ответить
From admin Mon Aug 16 11:50:36 2021 UTC
А чёрт знает,
А чёрт знает, может, и ничем не отличается. Я не так много общаюсь с восьмиклассниками.
ответить
From Parthen Mon Aug 16 17:37:00 2021 UTC
>мануал на
>мануал на русском
"Это все фигня на самом деле" (с)
Я, десятиклассник возился с арчем и несчастной его вики, но вечно возникает проблема отсутствия опыта ПК, когда ты в принципе не знаешь некоторых элементарных знаний о ПК.
И таки да, научился я по роликам на ютубе, смотря как другие делают, а к вики обращался только для уточнения.
Вообще, имхо, идеальный способ -- поставить Devuan (netinstall) без DE, поставить иксы, i3wm и терминальчик по вкусу. Это все крайне просто, при этом не ставится ничего лишнего.
ответить
From Anonymous (unverified) Tue Aug 17 01:18:00 2021 UTC
Slackware
Начинающему наоборот лучше поставить побольше всего, чтобы было что изучать. Я бы предложил full install Slackware, тем более что как раз 15-й релиз заморозили.
А там есть несколько DE и оконных менеджеров на выбор.
ответить
From admin Tue Aug 17 13:43:02 2021 UTC
Когда-то очень
Когда-то очень давно, в 1994 году, Slackware стала моей первой Linux-дистрибуцией (да, блин, ставил с дискет! да!) Но тогда и железо было попроще, и в соседней лабе присутствовал линуксовый гуру, периодически выдававший мне пинка в нужном направлении. Сейчас, я бы сказал, Slackware — это по-прежнему один из лучших дистров, но всё-таки не для новичка, да ещё восьмиклассника.
А выбор из нескольких DE и оконных менеджеров, насколько я вижу, есть практически везде.
ответить
From Anonymous (unverified) Sat Aug 21 11:47:00 2021 UTC
> А выбор из
> А выбор из нескольких DE и оконных менеджеров, насколько я вижу, есть практически везде.
Да, но обычно ставится один, например третий гном, и для других надо специально их ставить.
> Но тогда и железо было попроще, и в соседней лабе присутствовал линуксовый гуру, периодически выдававший мне пинка в нужном направлении.
Ну да, гуру не помешает на первых порах. Но насчёт железа — оно конечно было попроще, но установка и настройка железа была сложнее. Сейчас например иксы в 95% случаев просто запустятся в нужном разрешении и с 3D-ускорением по команде startx без всяких modeline-в в xorg.conf. Никаких IRQ не нужно настраивать (а я даже толком не знаю что это такое), всё автоматом.
> но всё-таки не для новичка, да ещё восьмиклассника.
Ну не знаю. Не сложнее Debian с netinstall, а на мой взгляд даже намного проще. Единственная сложность — разметка диска, но она в любом дистрибутиве есть. На мой взгляд, размечать диск отдельно от установки с помощью fdisk, cfdisk или parted куда удобнее.
Ну и да, надо по-английски уметь читать.
ответить
From admin Sat Aug 21 16:26:00 2021 UTC
"Специально
"Специально ставить" — это обычно одна команда.
Вообще если уж залезли так глубоко, попробуйте сразу сползти с systemd, эта штука мертворожденная и неизбежно в какой-то момент начинает жутко мешать. Если уже более-менее освоились с Debian, попробуйте вместо него Devuan взгромоздить — всё то же самое, только никакого systemd. Ну а если уже сидите на Slackware, то на ней и оставайтесь, лучше, пожалуй, сейчас мало что есть.
ответить
From Anonymous (unverified) Tue Aug 24 11:27:00 2021 UTC
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-дистров проблемы те же — пакетов мало.
ответить
From admin Tue Aug 24 17:45:44 2021 UTC
Я вот одного не
Я вот одного не понял, а кто вам мешает в дебиане снести ко всем чертям NetworkManager и редактировать /etc/wpa_supplicant.conf руками? Я, в общем, так и делаю, с той разницей, что у меня Devuan.
ответить
From Oliver (unverified) Sat Aug 21 07:46:00 2021 UTC
Вообще, имхо,
Вообще, имхо, идеальный способ -- поставить Devuan (netinstall) без DE, поставить иксы, i3wm и терминальчик по вкусу. Это все крайне просто, при этом не ставится ничего лишнего.
-------------------------------------------------------
Самому начинающему ничего более Минта/Убунту/MX Linux, например, не надо для создания соответствуюущей операционной среды, чтоб изучать программирование по книгам уважаемого автора сайта! На первых шагах пугать людей не надо!
А чтоб не было проблем с установкой дистра типо Арч, да, пригодится знать заранее некоторые вещи. Есть бесплатная книжка от Пола Коббаута: она так же состоит из несколько частей. Так вот в ней Вы и любой другой желающий найдет те базовые вещи, которые очень упростили бы лично Вам установку того же Арча.
ответить
From Parthen Sat Aug 21 11:03:00 2021 UTC
>Самому
>Самому начинающему ничего более Минта/Убунту/MX Linux, например, не надо для создания соответствуюущей операционной среды, чтоб изучать программирование по книгам уважаемого автора сайта! На первых шагах пугать людей не надо!
Да я не спорю, но потом-то надо привыкать к нормальному.
ответить
From Oliver (unverified) Sun Aug 22 04:57:00 2021 UTC
>Да я не спорю,
>Да я не спорю, но потом-то надо привыкать к нормальному.
Ну это уже будет зависить от каждого конкретного человек.
ответить
From Anonymous (unverified) Wed Aug 25 18:29:00 2021 UTC
диск с линуксом
диск с линуксом первый я добыл только на заказ, в три раза дороже чем если бы он был с виндой и к тому же, как оказалось, устаревшей на 5 лет версии.
В конце 90-х (когда дисков с игрушками, музыкой и софтом было на каждом углу) я заказывал себе дебиан по почте, если мне не изменяет память, совершенно бесплатно. Отчётливо помню, что распаковав тощую бандерольку, увидел вдребезги разбитую коробочку для диска (как раз в том месте, в котором почтовые бабушки-молотобойцы поставили на бандерольку сургучную печать), но сам диск уцелел.
А чуть позже в местном гнезде линуксоидов (они гнездились на центральном узле телефонной связи тогда у нас) мне "нарезали" (записали на CD, согласно тогдашнему жаргону) очередную свежую версию дебиана. А я в благодарность поставил им литровую пачку сока, по фидошной традиции.
А ещё позже, вроде бы, убунту рассылали по почте тоже безвозмездно, то есть даром.
ответить
From Anonymous (unverified) Sat Aug 21 13:39:00 2021 UTC
Простите, неправильно объяснился
Простите, неправильно объяснился; я (восьмиклассник) смог поставить linux. Сижу на нем уже как 3 месяца, но со стороны родителей и друзей идет некое "давление", мол в 21 веке нечего делать на Unix-системах ("скачай delphi и делай программы под windows, консольный интерфейс - никуда не годится"). Поэтому и был вопрос, можно ли начать изучение программирования с этих книг в этот период (может, еще рановато). Определенно, к книгам я вернусь; хотел узнать вашего мнения по этому поводу.
ответить
From admin Sat Aug 21 16:17:00 2021 UTC
А, ну тогда
А, ну тогда вообще никаких вариантов — книги читать можно, а если они вам ещё и нравятся — то, я бы сказал, даже нужно. Именно для таких, как вы, эти книги и написаны. А юный возраст — это такой недостаток, который очень быстро проходит.
Что до интерфейсов — то это как раз графические интерфейсы никуда не годятся, и в книге написано, почему. На всякий случай добавлю, что видел своими глазами, как людей брали на работу на неплохие (для них на тот момент) деньги только лишь за то, что они могли справиться с командной строкой. Человек, знающий *nix-системы и умеющий с ними обращаться, справится с чем угодно, а вот люди, уверенные, что "знают" Windows, очень часто не могут справиться и с Windows тоже, про другие системы и говорить нечего. А от Unix на самом деле сейчас совершенно некуда деваться, серверные машины, обслуживающие Интернет — это практически всегда тот или иной Unix, и когда персонаж, позиционирующий себя как "крутой айтишник", приходит в ужас и впадает в ступор от необходимости что-то сделать удалённо с серверной машиной — это было бы смешно, когда бы не было так грустно.
Так что могу только пожелать успехов. Будут вопросы — заходите сюда и задавайте :-)
ответить
From Anonymous (unverified) Sat Aug 21 16:33:00 2021 UTC
Понял, спасибо)
Понял, спасибо)
ответить
From 8Class (unverified) Sun Aug 22 05:38:00 2021 UTC
Куда выкладывать программы
Снова я. Хотел уточнить, куда именно можно выкладывать свои работы (исходный код + откомпилированная программа)? Может какой сайт для этого есть?
Github? Или пока в облачном хранилище (по типу Google disk) размещать, потом кому-нибудь скинуть на него ссылку?
ответить
From admin Sun Aug 22 11:56:21 2021 UTC
А с какой целью
А с какой целью вы их хотите выкладывать? Вы уже сделали что-то такое, что для других пользователей может представлять ценность? Если так, то стоит, наверное, завести свой сайт.
По поводу Google Drive, Yandex Disk и прочих подобных "файлопомоек" — ну кто как, а лично я на них принципиально не хожу. Google Drive у меня вообще заблокирован на домашнем роутере вместе с Google Docs, чтобы не попасть туда даже случайно.
ответить
From Oliver (unverified) Sun Aug 22 04:59:00 2021 UTC
> Сижу на нем
> Сижу на нем уже как 3 месяца, но со стороны родителей и друзей идет некое "давление", мол в 21 веке нечего делать на Unix-системах
Сколько эти Ваши друзья и родители (при всем уважении к именно родителям) понимают из того, что советуют? Вопрос, наверное риторический, так что поступайте, как сам сочтете нужным
ответить
From 8Class (unverified) Fri Aug 27 11:14:00 2021 UTC
Отец (по
Отец (по профессии - инжинер) в юности делал программы на Delphi, говорит зарабатывал (сам я пока не преследую таких целей, да и опыта нет). По его мнению, бесплатный Linux никому не сдался, ведь большая часть сидит на винде; + по книгам программированию не учатся (бери язык и гугли проблемы).
Я знаю, что просто читать книги - бессмысленно, поэтому тренеруюсь;
В итоге, отцу не нравится интерфейс программы (а где нормальное ОКНО?).
ответить
From admin Fri Aug 27 15:49:00 2021 UTC
Ага, конечно
Действительность устроена с точностью до наоборот; если что, программисты, умеющие *nix, ценятся раза в три выше чисто по размеру зарплаты, для дельфиста сейчас 100тыр потолок, а когда в резюме имеет место, например, сочетание Linux, C++ и Qt, это запросто может быть и 350, и выше (лично я Qt люто ненавижу, как и всех монстров, но реальности это не меняет). Принципиальная разница между такими людьми в том, что вот этот вот спец по Linux, C++ и Qt, если припрёт, за дельфи сядет и всё, что надо, сваяет, потратив от силы пару дней на "освоиться", а вот в обратную сторону переход, как мы понимаем, практически нереален.
Ну а ваш отец, как мы понимаем, не программист (это ладно) и не обладает знаниями в области usability, это в данном случае намного хуже, иначе он знал бы, что оконные интерфейсы, в особенности иерархические — это такие специальные пожиратели человеческого времени и энергии.
За вас вашу жизнь никто не проживёт, стройте её сами.
ответить
From Oliver (unverified) Mon Aug 30 07:25:00 2021 UTC
> ...бесплатный
> ...бесплатный Linux никому не сдался, ведь большая часть сидит на винде...
Сервера в мире в основном работают на именно что бесплатном Линуксе. Так что уже по этой одной причине утверждение о том, что мол бесплатный Линукс никому не нужен - не верно в корне. Да и, кроме серверов, в мире - миллионы пользвателей Линукса на десктопах. И не зря: на десктопах Линукс - также превосходит винду. Так что, это - как раз тот случай, когда бесплатный Линукс - лучше платной винды. Но среди людей бытует заблуждение, что платность винды каким-то образом делает ее лучше бесплатного Линукса. И это - одна из причин, по которой люди не спешат для себя открывать Линукс (другая - Виндовс тупо насаждается пользователям компов начиная со школьного возвраста).
ответить
From admin Mon Aug 30 15:21:00 2021 UTC
Кстати, the majority
Кстати, the majority is always wrong. Конкретно в применении к инфотехнологиям -- обсуждалось тут http://stolyarov.info/guestbook/archive/2#comment-1896 А так вообще рекомендую фразу "the majority is always wrong" забить в поисковик.
ответить
From Anonymous (unverified) Wed Sep 1 13:11:00 2021 UTC
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
ответить
From Parthen Wed Sep 1 14:21:00 2021 UTC
Интересно
Несколько месяцев назад, у меня в голове появилась мысль -- что угодно популярное не может быть лучшим из своих альтернатив. Тогда она мне показалась глупой, но сейчас я начинаю убеждаться в ее правоте.
ответить
From Anonymous (unverified) Wed Sep 1 14:55:00 2021 UTC
Хотя, конечно,
Хотя, конечно, если брать утверждение "большинство всегда ошибается" без оговорок, то его легко довести до абсурда. Например, большинство людей ходят на двух ногах или одеваются, когда им холодно.
PS. Если что, это я оставлял ссылку на Юдковского тут два года назад. Надо бы уже зарегистрироваться, что ли...
ответить
From admin Wed Sep 1 15:16:18 2021 UTC
Насчёт двух ног
Насчёт двух ног и одеваться, когда холодно — это от мнения не зависит, и от чьей-то правоты тоже, просто иначе не получается. Вот если бы было где-нибудь сообщество людей, которые ходят как-то иначе и утверждают, что это удобнее, чем на двух ногах, или которые нашли альтернативу одежде и вообще никогда не одеваются, и тоже говорят, что так удобнее — то, возможно, тут стоило бы задуматься.
ответить
From Anonymous (unverified) Wed Sep 1 15:26:00 2021 UTC
Насчёт одежды
Насчёт одежды не знаю, но точно есть сообщество людей, которые ходят повсюду босиком и утверждают, что так удобнее.
ответить
From admin Wed Sep 1 16:14:08 2021 UTC
Я вполне
Я вполне допускаю, что они правы.
ответить
From Anonymous (unverified) Thu Sep 2 11:42:00 2021 UTC
"Допускаю, что
"Допускаю, что они правы" -- это не совсем тот вывод, который логически вытекает из тезиса "the majority is always wrong". Правильным выводом, если уж мы приняли этот тезис, будет то, что я или вы, находясь в том большинстве, которое носит обувь, заведомо и однозначно ошибаемся.
ответить
From admin Fri Sep 3 11:21:43 2021 UTC
Мне почему-то
Мне почему-то кажется, что всё проще: не всякую фразу следует рассматривать как формальное утверждение. Кроме формальных утверждений, бывают ещё литературные приёмы. А среди них есть такая штука "гипербола".
Но вот что касается конкретно отказа от обуви, то тут сторонники такого варианта могут реально быть правы. Дискомфорт от отсутствия обуви довольно быстро преодолевается, дальше на подошвах нарастает слой ороговевшей кожи, имеющей такую толщину, что обувь становится реально не нужна. При этом убирается масса проблем медицинского характера.
Только не надо задавать вопрос, чего же это я тогда за ними не последовал. Вот, скажем, сторонники ЗОЖ правы вообще без вариантов, видел я, какие они здоровые :-) но лично мне, увы, силы воли не хватит отказаться от бОльшей части привычной еды и ежедневно круглый год тратить минимум полтора-два часа на физические нагрузки. Да и на DVORAK я не перешёл и вряд ли перейду, это же не один месяц переучиваться надо.
ответить
From Anonymous (unverified) Fri Sep 3 16:03:00 2021 UTC
Да и на DVORAK я не
Да и на DVORAK я не перешёл и вряд ли перейду, это же не один месяц переучиваться надо.
Я, когда решил перейти с qwerty на colemak, тоже готовился несколько месяцев страдать. А на самом деле через пару недель уже не испытывал особого дискомфорта.
ответить
From Parthen Sat Sep 4 16:40:00 2021 UTC
Меня даже
Меня даже больше не переход пугает, а то, что на остальных компах не моя раскладка будет. Я и так торможу постоянно, а тут еще и мозги на старую раскладку возвращать.
ответить
From admin Sun Sep 5 07:18:41 2021 UTC
Это, как ни
Это, как ни странно, может даже не быть проблемой. Когда я учился на первом курсе (давно дело было), в какой-то момент приходилось работать с тремя (!) разными раскладками латиницы, причём бывало так, что в один день приходилось потрогать все три, и ничего, как-то выжил. Правда, я тогда всё-таки на клавиатуру смотрел.
ответить
From Anonymous (unverified) Sun Sep 5 15:45:00 2021 UTC
Я на colemak'е
Я на colemak'е печатаю вслепую touch typing'ом. А на qwerty беспорядочно и подгядывая иногда на клавиатуру. На qwerty, конечно, получается медленнее. Но всё равно быстрее среднестатистического пользователя, печатающего двумя с половиной пальцами. И да, раскладки у меня в голове не путаются, и друг другу не мешают, лежат отдельно друг от друга.
ответить
From Anonymous (unverified) Sun Sep 5 15:35:00 2021 UTC
Мозги -- очень
Мозги -- очень мощная и гибкая штука. По отзывам людей, умеющих печатать вслепую и на qwerty, и на какой-нибудь более приличной раскладке, полное переключение раскладки в мозге у них происходит максимум через несколько минут после начала печати. (Думаю, не нужно говорить, что переходить на альтернативную раскладку, но не использовать на ней touch typing, никакого смысла не имеет.)
Ну и вовсе не проблема включить нужную раскладку на компе, на котором предполагается работать дольше пяти минут или чаще раза в месяц. (А уж если регулярно, то и не только раскладку. На таком компе неплохо бы завести собственный аккаунт с привычными настройками.) Реальная проблема с раскладками, наверное, будет только у офисного эникейщика.
Меня даже больше не переход пугает, а то, что на остальных компах не моя раскладка будет.
А вообще, конечно, это вот "меня пугает, что у меня будет не как у всех" -- один из основных тормозов прогресса.
ответить
From Anonymous (unverified) Sun Jan 9 16:55:00 2022 UTC
Dvorak
Кстати, если посмотреть на Dvorak, то будет очевидно, что на ней исключительно неудобно набирать команду
ls
, а уж сls -l
и вовсе какое-то извращение получается.ответить
From admin Sun Jan 9 17:04:00 2022 UTC
Вот прям как
Вот прям как будто сейчас (в смысле на qwerty) удобно набирать cd.
ответить
From Anonymous (unverified) Sun Jan 9 18:46:00 2022 UTC
cd на qwerty таки не
cd на qwerty таки не настолько неудобно.
На colemak'е, кстати, и ls, и cd вполне удобно набираются. Была у меня мысль, что dvorak, с его принципом чредования рук, лучше чем colemak. Но вот, видимо, для привычной работы в юниксовой консоли всё-таки не лучше.
ответить
From Alejandro (unverified) Thu Jan 27 08:42:00 2022 UTC
cd на qwerty
cd на qwerty неудобно набирать, серьёзно? У меня (в силу привычек) при работе с клавиатурой пальцы левой руки почти всегда находятся в районе клавиш wasd, cd набирается указательным и средним почти мгновенно.
ответить
From admin Sat Jan 29 16:02:01 2022 UTC
Дык это, по
Дык это, по канонам слепой печати их обе нужно набирать средним, вот в чём проблема :-) Так-то я и сам их указательным и средним набираю, и в таком виде никаких неудобств это не доставляет.
ответить
From Parthen Thu Sep 2 18:29:00 2021 UTC
И они в
И они в принципе правы. Если бы я плевал на общественные нормы, холодную погоду и грязные улицы, я бы ходил босиком.
ответить
From Anonymous (unverified) Fri Sep 3 01:13:00 2021 UTC
Мне кажется,
Мне кажется, что правило «Majority is always wrong» имеет исключения, то есть всё-таки не всегда большинство не право.
Оно действует если у альтернативы есть какое-то более-менее значительное число последователей. Если же их какие-то сотые или тысячные доли процента или меньше, то их альтернатива не обязательно лучше.
В принципе, это понятно из рассуждения из которого выведено это правило — какая-то небольшая группа людей могут предпочесть альтернативу не потому что она чем-то лучше, а из-за общей глупости.
ответить
From admin Fri Sep 3 11:13:23 2021 UTC
Вообще говоря,
Вообще говоря, фраза представляет собой литературный приём, известный как "гипербола". То есть да, имеет место (если совсем формально к делу подходить) некое небольшое преувеличение. Ну так мы тут не матлогом занимаемся вроде.
ответить
From Anonymous (unverified) Sat Sep 4 12:54:00 2021 UTC
<бери язык и
<бери язык и гугли проблемы>
С таким подходом будет специалист уровня "знаю, когда какие кнопки нажимать"
ответить
From Anonymous (unverified) Wed Aug 25 18:11:00 2021 UTC
но со стороны
но со стороны родителей и друзей идет некое "давление"
Держитесь!
Я не говорю "никого не слушайте", но слушая кого-либо, всегда подвергайте услышанное сомнению и дальнейшему критическому осмыслению.
Даже собственные устоявшиеся взгляды или воспоминания следует регулярно подвергать сомнению и критическому анализу, чего уж там.
Но уж если, поразмыслив, приходите к выводу, что вы не ошибаетесь, то действуйте без оглядки на назойливых советчиков!
ответить
From 8Class (unverified) Fri Aug 27 12:09:00 2021 UTC
Вас понял,
Вас понял, спасибо за совет!
ответить
☞ From Anonymous (unverified) Sat Aug 7 05:03:00 2021 UTC
том 1, 416-417
Довольно короткий код разорван на две страницы. Это не очень красиво.
ответить
From admin Sat Aug 7 06:46:11 2021 UTC
При имеющемся
При имеющемся объёме книги выловить все подобные ситуации нереально. Окружение verbatim — штука особая и всяким clubpenalty/widowpenalty не подчиняется.
ответить
☞ From Anonymous (unverified) Tue Aug 3 12:44:00 2021 UTC
rust
Очень интересно узнать мнение автора о ЯП rust. Стоит ли на него время тратить или C++ он не заменит?
ответить
From admin Tue Aug 3 13:19:22 2021 UTC
Ничего он не
Ничего он не заменит и вообще ни на что не годен, только мозги изуродуете.
ответить
From Anonymous (unverified) Mon Aug 30 10:06:00 2021 UTC
Rust вроде сейчас
Rust вроде сейчас активно продвигают и даже внедряют как ЯП для разработки ядра Linux наряду с C?
ответить
From admin Mon Aug 30 15:26:19 2021 UTC
Не "продвигают",
Не "продвигают", а конкретно гугл продвигает. Одновременно прогрессивная общественность гадает, чего это Торвальдс молчит и сколько ему за это заплатили, и готовится отступать на заранее подготовленные позиции в виде BSD-систем. Поскольку ядро Linux после внедрения туда раста станет тоже ни на что не годно.
Что-то сдаётся мне, зря вы на мой сайт забрели, в интернете много других сайтов.
ответить
☞ From Anonymous (unverified) Fri Jul 16 03:54:00 2021 UTC
Том 1, страница
Том 1, страница 191
> Рассмотрим теперь функцию g(n)=f_n(n) + 1. Ясно, что в любом разумном смысле такая функция вычислима
А вот не ясно. То есть, +1-то конечно вычислимо, но мы тут используем ещё одну операцию — индексацию, то есть выбор функции из множества вычислимых функций по её номеру.
А вот вычислимость индексации у меня вызывает серьёзные сомнения. То, что множество вычислимых функций счётно не означает, что выстраивание этих функций по порядку само по себе вычислимо. Даже напротив, из-за проблемы останова, мы не сможем сказать заранее, является ли та или иная функция вычислимой, а значит нужно ли ей выделять номер в последовательности f_n.
Если же мы возьмём дырявую индексацию, которая точно вычислима (например каждый алгоритм представим в виде 256-ричного числа, соответствующего байтам его записи в UTF-8), то далеко не всякому натуральному числу будет соответствовать осмысленный алгоритм, поскольку мы нумеруем все возможные последовательности байт, соответственно для многих n, посчитать g(n) будет невозможно, поскольку мы как правило не сможем скомпилировать какие-то случайные байты.
То есть, даже если все f_n вычислимы и их множество счётное, g() не вычислимо, и не входит в последовательность f_n. То есть не вижу никакого противоречия.
ответить
From admin Fri Jul 16 16:23:00 2021 UTC
Никаких
Никаких "дырявых индексаций". Я вообще в этой области не бог весть какой спец, но множество алгоритмов относится не просто к счётным, а к рекурсивно перечислимым, что заведомо означает разрешимость задачи о вычислении номера заданного алгоритма — в смысле, существует такое ВЗАИМНО ОДНОЗНАЧНОЕ (!) соответствие между натуральными числами и алгоритмами, что по любому алгоритму можно установить его номер. Например, тупо запустив ту "рекурсивную перечислялку", из-за которой алгоритмы рекурсивно перечислимы, и дождаться, пока она выплюнет нужный алгоритм, одновременно пересчитав все, которые она успеет выплюнуть до него. Ждать, конечно, придётся долго, но в ЭТОЙ части теории "долго ждать" никого не смущает.
Про перечислимые множества — например, тут.
UPD: пардон, вы про функции, я про алгоритмы — но сути это не меняет, вычислимые функции тоже рекурсивно перечислимы.
ответить
From Anonymous (unverified) Sat Jul 17 08:55:00 2021 UTC
Вычислимые функции
> но сути это не меняет, вычислимые функции тоже рекурсивно перечислимы.
Вычислимые функции в определении (которое вы пытаетесь опровергнуть) должны быть определены на любом аргументе принадлежащем N.
А вот насчёт того что можно перечислить все такие функцию по порядку — вот тут мне кажется, что не выйдет. Множество-то их счётное, но как вы их проиндексируете? Именно функции, определенные на всём множестве N и при этом вычислимые.
Пример функции которую будет трудно проиндексировать — функция first_twin(n), возвращающая первое число из n-ой пары простых чисел близнецов. До сих пор математики не знают, конечно количество близнецов или бесконечно, значит мы не знаем, входит ли эта функция в нашу последовательность {f_n}. Например, модифицированное решето Эратосфена, которое отсеивает не-близнецов может на каком-то n зависнуть, если окажется, что близнецов больше нет.
А если уж мы даже про конкретную функцию не знаем, входит ли она в {f_n}, то как мы можем быть уверены в вычислимости индекса какой-то следующей функции среди {f_n}? Если перечислялка столкнётся с first_twin(), поместит она её в {f_n} или пропустит? В зависимости от этого сдвинутся индексы всех прочих функций выше. Или перечислялка вообще не будет рассматривать first_twin()?
А если бы вычислимая перечислялка вычислимых функций, определенных на всём N существовала, можно было бы почти любую математическую гипотезу о бесконечности множества тех или иных чисел проверить за конечное время на компе. Что-то интутивно мне кажется, что нифига не выйдет из этого.
То есть, ваша g() действительно невычислима, и +1 тут непричём.
ответить
From admin Sat Jul 17 11:15:38 2021 UTC
Вообще, ещё раз
Вообще, ещё раз повторю, вы тут неудачно выбрали, кому вопросы задавать. Одна фактическая ошибка в книге, конечно, есть: сказано, что вычислимых функций счётное множество, следовательно есть конструктивная нумерация; это неверно, поскольку не всякое счётное множество перечислимо, так что нужно добавить немножечко подробностей. Но дело в том, что суть от этого не изменится, поскольку любой конструктивно заданный класс/подкласс вычислимых функций будет перечислимым.
Кратко говоря, что такое вычислимые функции — неизвестно, но есть тезис Чёрча, предполагающий, что класс вычислимых совпадает с классом частично рекурсивных, а эти последние строятся через суперпозицию нескольких крайне простых операций и операторов (операторы в данном случае из одних функций делают другие). Поскольку базовых операций там меньше чем пальцев на руках (впрочем, это пофигу, достаточно того факта, что их конечное число), очевидным образом можно выстроить дерево всех возможных Ч/Р-функций и в этом дереве ввести некую нумерацию, а дальше запустить алгоритм, который это дерево будет обходить и, зайдя в очередную вершину, выплёвывать соответствующую формулу. Это ваше "индексирование" на базе такого алгоритма строится очевидным образом: функцию по номеру получаем, запустив алгоритм и проигнорировав первые N функций, а обратную операцию -- номер по функции (!) -- получаем, запустив алгоритм и дождавшись, пока он выплюнет нужную функцию. Ещё раз: да, практического смысла эти построения не имеют, поскольку для любой мало-мальски интересной с практической точки зрения функции ждать придётся, вероятно, не один миллион лет, но здесь (в теории вычислимости) такие мелочи никого не беспокоят. Так вот, точно так же будет обстоять дело и с гипотетической последовательностью всюду определённых функций, которые хочется "подставить" вместо Ч/Р в роли модели вычислимой функции, чтобы не было всей этой "фигни" с частичной неопределённостью: если мы что-то конструктивно делаем, то у нас есть вычислитель, на котором мы это делаем, а у него -- базовый набор операций, далее см. выше.
Кстати, чего я с ходу не знаю — так это как соотносится класс примитивно-рекурсивных функций к классом функций всюду определённых. Это к специалистам.
Вообще там в сноске упоминается книга В.Босса, из которой я, собственно, и взял эту последовательность f_n и прибавление единички. Подозреваю, что если вас этот предмет столь сильно интересует, стоит обратиться хотя бы к этой книжке, пусть даже она скорее из категории научпоп, чем из числа "совсем серьёзных", но уж я-то в своей книге реально рассказать теорию вычислимости даже не пытался, я сам её толком не знаю, это довольно глухая и зубодробительная математика.
ответить
From Anonymous (unverified) Sat Jul 17 13:05:00 2021 UTC
Машина Тьюринга и вычислимость
> вы тут неудачно выбрали, кому вопросы задавать.
Может быть. Я, честно говоря, эту главу из книги хоть и прочитал, но ощущения понимания у меня не возникло. Если не вдумываться, то вроде понятно, что в общем случае нельзя проверить, зависает программа или не зависает, что есть какие-то что-то-там рекурсивные функции, которые как-то связаны с лямбда-исчислением и эквивалентны машине Тьюринга и машине Поста, а так же алгорифмам Маркова и представляют на настоящий момент теоретический максимум того, что можно вычислить с помощью физического устройства... А тезис Чёрча-Тьюринга состоит в том, что ничего круче придумать нельзя, но он не доказан.
А если задуматься — вообще не понятно... Если это не будет наглостью, то у меня возникло впечатление что эту главу стоило бы вообще переписать как-то по-другому. А то для того, кто и так это всё понимает, глава бесполезна, а для того кто в первый раз читает — что-то понять сверх описанного мной выше из неё толком не выйдет.
> очевидным образом можно выстроить дерево всех возможных Ч/Р-функций и в этом дереве ввести некую нумерацию
Не, это-то мне и раньше было понятно. Но вы же обходите вообще все ч/р-функции, так? А нам требуются не все, а только те, которые определены на всём N.
То есть, вашему алгоритму нужно добавить проверку: если функция определена на всём множестве N, значит добавить её в индекс, а если есть натуральные числа, для которых она не определена — не добавлять. Так?
Вот с этой проверкой как раз у меня и затык — а не будет ли она эквивалентна той самой программе, S( ) из проблемы останова?
>Так вот, точно так же будет обстоять дело и с гипотетической последовательностью всюду определённых функций, которые хочется "подставить" вместо Ч/Р в роли модели вычислимой функции, чтобы не было всей этой "фигни" с частичной неопределённостью: если мы что-то конструктивно делаем, то у нас есть вычислитель, на котором мы это делаем, а у него -- базовый набор операций, далее см. выше.
Выше-то понятно всё. А вот это — нет. С чего вы взяли, что вычислитель, который позволяет вычислить все те и только те Ч/Р функции, которые определены на всём N в принципе можно конструктивно описать?
А если новый вычислитель не описывать, а взять скажем МТ или МП или ещё что-то такое, то нам при индексации нужно отфильтровать зависающие программы от независающих. Понятно что зависающие при хотя бы одном значении входного аргумента в индекс включать нельзя. А отфильтровать не получится из-за проблемы останова.
Надеюсь, теперь понятнее стало, в каком конкретно месте затык?
> Подозреваю, что если вас этот предмет столь сильно интересует, стоит обратиться хотя бы к этой книжке
На самом деле не настолько. Как писать программы мне вроде и без этого понятно.
Или всё-таки надо разбираться? Насколько это важно?
----
Кстати про факториал одно из ваших объяснений мне показалось непонятным. Зато я предлагаю другой вывод формулы, который, по-моему, получше:
Предположим у нас уже расставлено (k-1) объектов и мы добавляем k-й. Добавить его можно перед первым элементом (в самое начало), перед вторым, перед третьим, перед (k-1)-м и после (k-1)-го, то есть всего k возможных позиций. И каждую эту позицию можно применить к любой перестановке (k-1) элементов, то есть
k!=k*(k-1)!
. Ну а один объект, понятное дело, можно расставить только одним способом.ответить
From admin Tue Aug 3 13:35:23 2021 UTC
Вообще я весь
Вообще я весь сыр-бор с этой главой затеял ради одной простой цели: донести до читателя, что определения алгоритма не существует и существовать не может. Ну вот просто достали меня авторы учебников, пытающиеся друг дружку перещеголять такими "определениями". Систематически излагать теорию алгоритмов и теорию вычислимости я не планировал и не планирую, я же говорю — я в этой области сам плаваю.
То есть, вашему алгоритму нужно добавить проверку: если функция определена на всём множестве N, значит добавить её в индекс, а если есть натуральные числа, для которых она не определена — не добавлять. Так?
Насколько я понимаю, нигде и не утверждается, что с такими функциями можно работать.
Вот с этой проверкой как раз у меня и затык — а не будет ли она эквивалентна той самой программе, S( ) из проблемы останова?
Такая программа, по крайней мере, невозможна — и да, это доказывается именно через проблему останова, ибо уж если на отдельно взятом входном слове нельзя предсказать, остановится алгоритм или нет, то сказать, применим ли он ко всем возможным входным словам, тем более нельзя. А вот "эквивалентны" ли проблемы — сказать не могу, не знаю. Вполне возможно, что проблема "применимости ко всем словам" в каком-нибудь смысле "ещё хуже", чем проблема останова.
С чего вы взяли, что вычислитель, который позволяет вычислить все те и только те Ч/Р функции, которые определены на всём N в принципе можно конструктивно описать?
Вроде как раз и доказывается, что нельзя.
ответить
From Anonymous (unverified) Sat Jul 17 13:50:00 2021 UTC
Кажется понял
Кажется понял.
Вы как раз и пытаетесь доказать, что перечислить все вычислимые всюду определенные функции невозможно, потому что если бы это удалось сделать, то получилась бы фигня с g( ). А раз их нельзя перечислить, значит и придумать формальную модель, которая их описывает, нельзя, потому что, если бы такая модель была, то их можно было бы перечислить.
Значит, формальная модель вычислимых функций обязана содержать в себе глючные (не везде определенные, зависающие и тд) алгоритмы/функции, иначе простым прибавлением единицы и индексацией можно будет выйти за пределы этой модели.
Чем-то это мне теорему Гёделя напоминает. Вроде как система аксиом не может быть одновременно полна и непротиворечива.
А тут получается, что формальная модель вычислимых функций не может быть одновременно полной, то есть содержать все полностью определенные функции, и при этом непротиворечивой.
ответить
From Alejandro Wed Mar 15 11:54:16 2023 UTC
Ссылки
Андрей Викторович, оберните ссылку на вики в тег a-href. Она (1) за форму с комментарием выползает и (2) страницу вширь растягивает.
ответить
From admin Wed Mar 15 12:48:59 2023 UTC
done
Обернул, заодно нашёл багу в своей CMSке :-)
Справедливости ради надо сказать, что у меня она никуда не вылезала и ничего не растягивала. Видимо, browser-specific, как водится.
ответить
From Alejandro Wed Mar 15 14:28:05 2023 UTC
-
> заодно нашёл багу в своей CMSке
А, если не секрет, что за баг? :-)
ответить
From admin Wed Mar 15 15:25:53 2023 UTC
Вот уж совершенно не секрет
Рабочая кодировка на сайте 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
По ссылке или значению?
Здравствуйте, читая 145 страницу третьего тома (о переопределении операции присваивания), наткнулся на примеры для класса Complex.
Здесь в параметрах метода вы используете константную ссылку для операнда:
На этой же странице, ниже, вы уточняете, что то же (переопределение) можно сделать и с операциями для других типов:
Но на этот раз вы передаёте в функцию параметр по значению, почему? Есть же возможность сделать его константной ссылкой, чтобы избежать копирования (как в предыдущих двух случаях), или я что-то упускаю?
ответить
From admin Wed Jun 30 09:00:00 2021 UTC
Здесь стоит
Здесь стоит применить здравый смысл. Если примерно прикинуть, как всё это работает на уровне машинных команд (а именно для этого в первом томе имеется часть про программирование на языке ассемблера) и не забывать, что ссылка — это вовсе не пустое место, а аж целый адрес, то можно заметить, что накладные расходы даже на копирование 16-байтной структуры (то есть всего объекта типа Complex) могут оказаться меньше, чем косвенные обращения по адресу (в данном случае по ссылке) внутри тела функции. Что касается типа double, то на современных (читай — 64-битных) машинах он и вовсе занимает столько же места, сколько адрес, так что экономии не будет вообще никакой, при этом потери на передаче по ссылке — будут. Кроме того, стоит учесть, что компилятор эти методы, естественно, заинлайнит, и прикинуть, что и как с этим сможет сделать оптимизатор; ощущение такое, что при передаче double по значению в итоговом коде вообще получится один mov, тогда как по ссылке — может, и получится, но не факт; я не проверял, просто понимаю, что такая оптимизация сложнее.
ответить
From Anonymous (unverified) Wed Jun 30 10:41:00 2021 UTC
В случае
В случае инлайнинга и оптимизаций компиляторы получат одинаковый код для передачи и по ссылке, и по значению. Как ни странно, подобная оптимизация при современном устройстве компиляторов происходит "сама собой" как побочный эффект построения SSA формы и устранения промежуточных копий.
ответить
☞ From Anonymous (unverified) Sun Jun 13 13:09:00 2021 UTC
Уточнение по практике на языке assembler'a (NASM)
Читаю первый том, часть по языку assembler. На странице 656 сказано, что программы для практического применения лучше писать на языке Си. Есть ли смысл писать большие программы (такие как "Задача о ханойской башне", "Сопоставление с образцом") на NASM? Или достаточно посмотреть как работает та или иная команда и потом перейти ко второму тому?
ответить
From admin Mon Jun 14 11:05:00 2021 UTC
Минуточку, это
Минуточку, это вы задачу о ханойских башнях называете "большой программой"?!
Если так, вернитесь к части о Паскале и даже не думайте о том, чтоб двигаться дальше, пока у ваших программ (написанных на Паскале) не появятся сторонние пользователи. Тогда, надеюсь, вы поймёте (хотя бы примерно), что такое "программа" -- даже не "большая программа", до этого вам ещё далеко, а именно что просто "программа".
Задачи, перечисленные вами, вообще невозможно называть программами, тем более "большими", это не программы, а этюды. Ну а если вернуться к вашему исходному вопросу, то (как это, замечу, явным образом сказано в книге, и не один раз) период обучения — это единственный шанс получить опыт работы с языком ассемблера, ну а при отсутствии опыта программирования на языке ассемблера хороших программистов пока что ни из кого не получалось. Посему вот это ваше "посмотреть как работает та или иная команда" — ну, проще тогда вообще выкинуть мои книжки, взять какое-нибудь очередное "питон для чайников" и через полгода пополнить ряды безмозглых обезьян-кнопкодавов. Мои книги на такой подход не рассчитаны, как и на таких читателей.
ответить
☞ From Anonymous (unverified) Thu Jun 3 09:30:00 2021 UTC
Применение термина "память"
Здравствуйте, Андрей Викторович,
Во втором издании на странице 281 есть сноска под номером 6. В ней обсуждается противоречивость использования термина "память" в тексте выше. Непосредственно в тексте сноски утверждается, что памятью следует называть лишь те ЗУ, с которыми ЦП может работать "через шину без применения контроллеров".
Однако, насколько мне известно, с любым ЗУ ЦП общается именно через контроллер, и device path любого диска на шине на самом деле - путь до контроллера этого устройства. Наоборот, контроллеры могут общаться без процессора, если поддерживают DMA :)
Буду рад получить Ваш ответ и огромное спасибо за книги.
ответить
From admin Thu Jun 3 10:06:00 2021 UTC
> с любым ЗУ ЦП
> противоречивость
там нет никакой противоречивости
> с любым ЗУ ЦП общается именно через контроллер,
Плюньте в глаза тому, кто вам сказал такую ахинею. Оперативная память, она же "оперативное запоминающее устройство", т.е. ОЗУ, по-английски RAM (random access memory) — разумеется, никаких контроллеров не требует и не может их требовать. ПЗУ, собственно говоря, тоже (процессор их вообще обычно не различает).
> device path
этот термин к памяти никакого отношения не имеет, подобные штуки возникают исключительно у внешних устройств
> любого диска на шине
Ещё раз, и медленно: диски — не память. Сноска, собственно говоря, об этом.
ответить
From Anonymous (unverified) Thu Jun 3 11:26:00 2021 UTC
Почему я об этом вообще заговорил
Разработка аппаратуры процессора идет обычно по двум направлениям - собственно, ядро (core) и все остальное (uncore, общепринятый профессиональный сленг, если позволите). Я даже перепроверил: по запросу вроде "chip die layout of a cpu" можно посмотреть "планировку" кристалла процессора. И на этой планировке почти всегда будут ядро/ядра, система кэшей и периферийный блок.
В периферийном блоке как раз и располагаются в том числе контроллеры памяти. Поэтому меня немного и смутил текст сноски. Контроллер памяти, в том числе DDR, не перестает быть контроллером, даже если он не отдельная микросхема.
P.S.
"Противоречивость" - не совсем подходящее слово, согласен
ответить
From admin Thu Jun 3 12:08:00 2021 UTC
Если под
Если под контроллером понимать схему, которая подключена к шине, поддерживает порты ввода-вывода для управления (и через них управляется), а с другой своей стороны имеет железку, которой и рулит, то "контроллер памяти" — это не контроллер. А если это часть процессора — тем более. Не следует смешивать терминологию из разных предметных областей.
Внутреннее устройство процессора, тем паче многоядерного, в книге не рассматривается.
ответить
From Anonymous (unverified) Fri Jun 4 11:52:00 2021 UTC
Влезу, с вашего
Влезу, с вашего позволения. Всё же без контроллера вообще голое процессорное ядро может работать только со статической памятью, как в старых компьютерах вроде Спектрума или какой-нибудь Амиги. То есть вот, натурально, микросхема с памятью на статических регистрах, организованной в виде одномерного массива, индексируемого числом, заданным на шине адреса. Хотим читать или писать - дергаем один из двух стробов, в ответ на это микросхема либо считывает значение с шины данных, либо выдаёт. Шины процессора и памяти соединяются напрямую, без посредников. В динамической же памяти, как минимум, адресное пространство нелинейное, требуется выставлять на шине адреса сначала индекс банка и строки в нем, делать строку активной, затем выставлять индекс столбца, периодически обновлять содержимое, т.к. ячейки постепенно теряют заряд, при этом запрещать доступ к памяти либо переключать банк, засылать в микросхему служебные команды типа PRECHARGE или REFRESH, etc. Это уж точно не забота ядра, у него шины адреса и данных в "классическом" смысле, которые подключается именно к контроллеру, преобразующему запросы к себе как к памяти в команды оперативке и выдающему в обратную сторону данные (опять же, ядро вообще не при делах, для него это работа со статической памятью - выставили адрес, прочитали/записали). Другое дело, что это контроллер специфический и шина, на которой он сидит, за пределы кристалла не выходит. Но, конечно, если строго ограничить определение контроллера по принципу "не висит на общей шине и не плюётся в порты - не контроллер", то да, можем считать, что работа с памятью идёт напрямую.
ответить
From admin Fri Jun 4 17:38:00 2021 UTC
Сказанного
Сказанного мной всё это никак не отменяет и ему не противоречит. В книге под термином "контроллер" подразумевается вполне определённая сущность, никоим образом не находящаяся в процессоре. Вынужден повторить два момента:
1) тонкости взаимодействия процессора с памятью, как и внутреннее устройство процессора, в книге не рассматриваются вообще;
2) не следует смешивать терминологию из разных предметных областей.
У топик-стартера, если вы не заметили, в голове полнейший бардак, он к ОЗУ пытается device path применить, а вы тут про какое-то там ядро (процессора, гм...)
ответить
From Anonymous (unverified) Sat Jun 5 05:26:00 2021 UTC
Сказанного
Сказанного мной всё это никак не отменяет и ему не противоречит
Я не собирался вступать в полемику - разумеется, противоречия нет. Комментарий, скорее, в догонку к ответу на вопрос топик-стартера, просто не очень люблю добавлять комментарии перед вашим, т.к. потом трудно найти начало обсуждения, если N-ое количество человек подключается к дискуссии.
ответить
☞ From Валерий (unverified) Sun May 16 00:58:00 2021 UTC
Почему Tcl?
Здравствуйте.
В третьем томе есть раздел о Tcl. Я пытался найти в вашей книге объяснение, почему именно он, а не Python, Perl? Какие у него есть преимущества?
ответить
From admin Mon May 17 12:37:00 2021 UTC
Python, Perl, Ruby, даже
Python, Perl, Ruby, даже Lua (хотя, возможно, в меньшей степени) — это безобразно раздутые монстры, напрочь лишённые внутренней логики, и, самое главное, сделанные без понимания границ скриптового программирования.
На текущий момент Tcl — единственный из виденных мной из командно-скриптовых языков, который не вызывает у меня жёсткого отвращения, скорее даже наоборот — он кажется мне на удивление красиво спроектированным. А ещё его автор изначально не предполагал НЕскриптового использования Tcl и был крайне удивлён тем, что кто-то стал на Tcl писать программы заметного размера.
Кстати, об этом в книжке написано — в части, посвящённой скриптингу.
ответить
☞ From akado (unverified) Sun Apr 25 18:05:00 2021 UTC
shell
том 1 стр 81 конструкция с фигурными скобками не работает
работает с круглыми скобками
П.С. Сравнение лучше делать двумя знаками равно ==, один знак равно это присваивание.
ответить
From admin Sun Apr 25 21:57:00 2021 UTC
Для начала не
Для начала не надо путать скрипты на shell'е с Си и его наследниками, это совершенно разные языки; аналога сишной "операции присваивания" в скриптовых языках нет, так что знак равенства использовать можно и нужно (а двойное равенство в команде test поддерживается только для тех, у кого Си выжжен прямо на коре головного мозга).
А что не работает — ну да, там точка с запятой пропущена перед фигурной скобкой, должно быть так:
С круглыми, кстати, работать не будет — точнее, синтаксически оно корректно, но скрипт не завершит, поскольку круглые скобки — это subshell, вот его exit и завалит, а родитель (сам скрипт) останется.
ответить
☞ From Богдан К. (unverified) Thu Apr 15 17:00:00 2021 UTC
sparse_t.cpp
Здравствуйте. В примере программы шаблона класса разреженного массива, переопределенные операторы инкремента оставлены "не шаблонными", то есть в строках 121-122 и 131-132:
int& location = Provide();
int res = ++location;
вместо "T" оставлен "int". Это сделано намеренно? Я понимаю, что для некоторых типов операция инкремента может быть не определена, но из-за этого программа не компилируется даже при использовании операции инкремента с инстанцированым типом double.
ответить
From admin Thu Apr 15 17:45:00 2021 UTC
Вот не везёт же
Вот не везёт же этому примеру, а...
Нет, разумеется, это не было сделано намеренно, это эффект от преобразования обычного класса в шаблон. Ну и, увы, недостаточно серьёзного тестирования.
UPD: Выложил архив примеров с исправленным sparse_t.cpp. К счастью, в книжках (что в этой, что во "Введении в Си++") методы этого шаблона в тексте не воспроизводятся.
ответить
☞ From Anonymous (unverified) Tue Apr 13 18:18:00 2021 UTC
Про неизменяемые указатели
Если вам это понадобилось, свяжитесь с автором книги и расскажите, как вы дошли до такой жизни (речь о неизменяемых указателях из ¶4.3.15 второго тома)
Связываюсь, рассказываю :) В самом деле, для "больших компьютеров" с ходу предложить вариант использования такой конструкции довольно проблематично, но есть ведь еще и компьютеры поменьше — микроконтроллеры. Там имеет смысл использовать такие указатели для работы с регистрами отображенной в память периферии, они-то уж точно никуда не убегут и не сменят место жительства. Конечно, в стандартных заголовочниках адреса таких регистров чаще всего "дефайнят" в духе
и некоторые тащат в свой код подобные вещи. Но, например, возникает задача подключения к микроконтроллеру чего-либо с большим количеством ног - скажем, нескольких разрядов семисегментного индикатора без специализированного драйвера или внешней памяти (хотя для памяти, конечно, лучше взять специально заточенный под это дело контроллер). Хардкодить работу с индикатором, естественно, не с руки - завтра может понадобиться увеличить число разрядов или перейти с общего катода на общий анод. Разумнее использовать т.н. "виртуальные порты". Линия GPIO представляется в виде структуры с двумя полями - адресом регистра, запись в который приведет к изменению уровня на лапке МК, и собственно номера бита в регистре, за нее отвечающего. Порт - массив таких структур. Линии в ходе эксплуатации меняться не будут, поэтому логично снабдить указатели в этих структурах модификатором const и проинициализировать сразу в описании, т.е. получается конструкция в стиле (код под 32-битный контроллер, не пугайтесь)
А где-то в пользовательском коде крутятся
, "растаскивающие" или, наоборот, собирающие data по линиям порта.
Конечно, по памяти и скорости работы такой способ несколько проигрывает "захардкоженной" работе с линиями GPIO, но гораздо более гибкий: тот же семисегментник - это один восьмибитный порт на сегменты и один на общие линии разрядов; завтра нужно поменять схему его подключения - переписали инициализатор в одном месте. Если говорить об ARM Cortex-M, например (а это "сердце" подавляющего большинства современных контроллеров), то gcc-шный компилятор такие "константы" кладет во флеш-память без посторонней помощи (в отличие от AVR, кстати,
но кому они сейчас впилисьгде приходится извращаться с макросами из pgmspace.h); в оперативке они не хранятся, а пожертвовать сотней байт во флешке уже на контроллере с 8+ КБ ПЗУ ради удобства вполне можно.ответить
From admin Wed Apr 14 17:57:08 2021 UTC
Супер, спасибо :-)
Получил эстетическое наслаждение :-)
ответить
From Anonymous (unverified) Fri Apr 23 13:30:00 2021 UTC
Не вполне
Не вполне понятно, почему не сделать "иначе":
ответить
From Anonymous (unverified) Sat Apr 24 14:44:00 2021 UTC
Так никто,
Так никто, вроде, не запрещал, делайте "иначе" на здоровье, оба варианта вполне валидны. Другой вопрос, что адрес MMIO принципиально неизменяем, и в первом случае это его свойство явно закреплено за соответствующим типом; во втором - просто указан адрес области памяти, ответственность за неизменяемость которого где-то и когда-то возьмёт на себя какой-то код. Ну да о вкусах не спорят. Вот чего точно первому варианту не хватает, так это const vport в заголовках функций - "порты" по-любому будут описаны с const, и компилятор ругнется, что функции снимают этот модификатор. Здесь косяк, согласен, но пример был не о функциях.
ответить
From Anonymous (unverified) Sat Apr 24 17:52:00 2021 UTC
Любое
Любое использование
const
это именно что "где-то и кто-то что-то имел в виду", а "принципиально неизменными" можно считать разве что константы вenum
. Отбросив полемику, пожалуй, остаются стилевые предпочтения: лично мне описание "неизменяемой" области памяти видаconst vport_line[] vport_name = { ... };
кажется более... идиоматичным?Вообще изначально речь была об использовании константных указателей, и я всего лишь хотел уточнить, что их использование для данной цели не является обязательным. Собственно, единственный (типичный) пример их использования, известный мне, это моделирование полиморфизма: константный указатель на таблицу функций или на (произвольного) владельца данных. Но даже в этом случае это далеко не единственный допустимый способ.
ответить
From admin Sat Apr 24 18:38:27 2021 UTC
> кажется
> кажется более... идиоматичным?
ну кому как, мне оно кажется синтаксической ошибкой
ответить
From Anonymous (unverified) Sat Apr 24 18:47:00 2021 UTC
Ёлки-палки const
Ёлки-палки
const vport_line vport_name[] = { ... };
ответить
☞ From Владислав (unverified) Thu Apr 1 11:50:00 2021 UTC
Может ли мое
Может ли мое непонимание большей части теории про перевод двоичный дробей в десятичные, кроме первого примера, и того, что такое область определения и область значений функции (со школы этого не помню) из части про двоичную логику повлиять на дальнейшее понимание материала и материала по программированию на Паскале? Могу ли я, если пока что мне это непонятно, пропустить вышеописанный материал, и освоить его позже, например, на практике, когда я с ним столкнусь? Или я все-таки обязан это освоить прямо сейчас?
В целом, почти весь материал про двоичную логику мне понятен, так как данный предмет был в колледже. Нужно только еще раз объяснить для себя "Это происходит так, потому что...". "Виды бесконечности" я на время пропущу и начну читать главу "Программы и данные".
ответить
From admin Thu Apr 1 13:36:50 2021 UTC
Может-может.
Может-может. Увы.
Ничего вы, впрочем, не обязаны, просто когда во что-то упрётесь, вернитесь к математической главе и попробуйте её осилить ещё раз.
ответить
From Anonymous (unverified) Sat Apr 3 07:08:00 2021 UTC
Область
Область определения функции — множество значений, которые может принимать её аргумент (аргументы), область значений функции — множество значений, которые может принимать результат функции. Вроде просто же.
ответить
From admin Sat Apr 3 08:33:38 2021 UTC
В такой
В такой формулировке это "просто" только для тех, кто знает, о чём идёт речь.
ответить
☞ From Anonymous (unverified) Tue Mar 23 22:27:00 2021 UTC
Редактор
Здравствуйте, Я начал постигать emacs и уже более менее в нем ориентироваться, а потом начал читать вас и думаю, есть ли смысл пересаживаться на vim? Либо же вообще spacevim, у меня знакомый говорит, что выучи горячие клавиши емакса и потом можешь их в любую ide перенести и горя не знать
ответить
From admin Wed Mar 24 06:52:54 2021 UTC
На вкус и цвет...
... все фломастеры разные.
Вот IDE лучше вообще не применять, ибо гадость. А vim или emacs — вопрос скорее религиозный :-)
Есть только один момент. Нужно уметь хотя бы базовые вещи делать в классическом vi (не в vim'е). Рано или поздно вы столкнётесь с ситуацией удалённого доступа к системе, в которой ничего другого не окажется, и лучше, если это не приведёт к полной беспомощности.
ответить
From Anonymous (unverified) Sat Apr 3 07:10:00 2021 UTC
Вообще, в vi
Вообще, в vi который в busybox достаточно помнить в начале нажать i, а в конце Esc, :wq и всё. А в режиме редактирования работают стрелки и бекспейс, так что всё точно так же как в nano или notepad-е.
ответить
From admin Sat Apr 3 09:44:05 2021 UTC
реализации разные бывают
В этой версии так, да. А в классическом vi, например, удалить backspace'ом можно только то, что введено в ходе последней операции ввода (то есть после нажатия того самого i, или a, или o, или O).
ответить
☞ From Anonymous (unverified) Mon Mar 22 16:08:00 2021 UTC
Том1 старой ревизии
Здравствуйте Андрей Викторович, я где то в середине первого тома уже нахожусь, по сути почти в самом начале практики, недалеко ушел, занимаюсь в свободное время после дел и работы, пытаюсь перейти в линукс, очень больно конечно иногда, особенно при установке свежих версий пакетов некомпилированных версий программ в деб пакеты и без баш скрипта инсталл и тд, прям вызывает боль и ступор иногда, с пакетом fpc 3.2.0 с оф сайта например были трудности, в репозитории убунту была версия но только старая, а у новой не поймешь толи установилась, толи нет, но компиляцию из командной строки не делала, может не туда установилась куда нужно было, потом что то нагуглил и установил из фтп какого то командой и ручной простановкой папок и пути вроде, короче пока очень больно в линукс. Учу команды сд рм пердж лс судо эко и тд, распечатал листов чит шитов с командами чтобы иногда поглядывать, чуток еле еле узнал про настройки vimrc и выбрал прекрасную тему с гитхаба, добавил нумерацию строк и тд. Убунту выбрал англ версию естественно, может поэтому мне чуть чуть сложнее чем на русской, технический англ где то около 0 уровня, чисто кино и общаться могу. Все это печатал слепым набором(пока в процессе изучения тоже, правый мизинец плачет иногда), относительно медленно правда, но я стараюсь, почему то у меня на ноутбуке не работает в убунту прямая черта которая у вас в примере была про ввод и вывод данных когда перенаправляли ввод на текстовый файл кажется, у меня она чуток наклонена почему то вправо, а так | в виндовс красивая прямая черта, в линукс как с наклоном, так и не исправил эту уродину. Еще пока что не очень верится вам про супер дружелюбность линукс систем и удобство =)) где то в ютуб прочитал фразу - Линукс это очень дружелюбная юзер-френдли система, просто она очень тщательно выбирает себе друзей, думаю эту фразу можно было бы добавить в вашу книгу, смеялся аж с нее. Ну это вводные данные были, да и просто поделиться с другими читателями вашего сайта, теперь
begin
Заметил что вы новые издания книг выпустили, а я дурак скачал старую еще до выпуска новых или не заметил в тот раз, даже не знаю теперь, хочу спросить совет что делать, ну и про отличие первой версии тома 1 от переиздания, я читал давно о ваших планах про переиздание мол вы совершили ошибку создавая сишность мозга что то такое, но по идее язык си же во втором томе появится, если новый том лучше, то перечитаю, просто хотелось бы узнать у автора, ну и заодно сказать спасибо вам за пинок в сторону линукс(хоть я пока и не согласен с тем что он дофига удобный), все таки учитывая то, что все сервера на нем, знать его на базовом уровне все таки обязательно. Ну и отдельное спасибо за референсы в книге !!! Очень юзер френдли кстати, например если вы тут не поняли то шуруйте в параграф № x.y. и перечитайте. Ну и если я закончу первый том 1 издания, то переходить на второй том 1 издания или уже второго свежего издания, не потеряю ли связь?
ответить
From admin Mon Mar 22 16:27:26 2021 UTC
Бросьте нафиг
Бросьте нафиг старую редакцию, скачайте новую и читайте с того места, где остановились в старой. Естественно, новая намного лучше и правильнее.
А что до линукса и "user friendly", так не, Linux не дружит с пользователем. Linux подчиняется пользователю. И проявляет практически 100% лояльность к пользователю. Ну, конкретно для случая Убунты, может, не 100%, но близко.
А то, как винда с пользователем "дружит" — видали мы таких друзей, ага...
ответить
From Anonymous (unverified) Sun Mar 28 12:56:00 2021 UTC
Иногда бывает,
Иногда бывает, что при последующих изданиях из книг что-нибудь убирается, иногда что-нибудь интересное/важное по тем или иным соображениям; в ситуации с вашими книгами это не так?
ответить
From admin Sun Mar 28 17:16:23 2021 UTC
Вроде ничего не
Вроде ничего не убирал, по крайней мере во "Введении в профессию". Новое добавлял, параграфы местами переставлял и менял рубрикацию, материал перекидывал из одного места в другое, кое-что переделывал, но не выкидывал вроде бы ничего.
ответить
From Oliver (unverified) Mon Apr 12 12:50:00 2021 UTC
Терпение, только терпение!
Я тоже в свое время переполз на Линукс с Виндовс. По своему опыту могу сказать, что Линукс (лично для меня) - в разы проще чем Виндовс. И дружелюбнее.
Для чего Вам понадобилось искать новую версию FPC, при изучении книги уважаемого автора сайта? Были проблемы с компиляцией программ, использую старую версию?
По поводу команд в Линукс, название каждой команды (она же - утилита Линукс) расшифровывается. Ну, например, cd - change directory, cp - copy и.т.д. Мне, на первых порах, это помогало их проще запомнить. Да и сегодня помогает! А еще есть такая утитила apropos: советую освоить ее, и тогда проблем с командами в Линукс у Вас будет меньше.
А по поводу вот этой | черты, у меня на Линукс с ней никогда не было проблем. Я устанавливал и пробовал зарличные Линукс дистртибутивы, но вот этой проблемы не имел.
На последок могу посоветовать пару книг по Линукс. Для фундаментов мне не плохой кажется книга Пола Коббаута "Фундаментальные основы Linux": она доступна бесплатно и на английском, и на русском языках. Кроме нее, если вы используете систему с пакетами формата .deb, также бесплатно доступна книга "Настольная книга администаратора Debian": ее перевод правда выполнен не полностью, но тем не менее читать можно.
ответить
☞ From Anonymous (unverified) Mon Mar 22 15:33:00 2021 UTC
Пробелы в конце строк в stud_io_inc
В stud_io_inc, доступном по ссылке на этой странице, присутствуют пробельные символы в конце некоторых строк
$ curl -s http://www.stolyarov.info/books/extra/stud_io_inc | grep -c '\s$'
4
ответить
From admin Mon Mar 22 16:23:39 2021 UTC
Спасибо
Вот чёрт, в архиве примеров поправил, а про эту копию забыл. Исправлено.
ответить
☞ From Raip (unverified) Sun Mar 21 14:00:00 2021 UTC
хочу учиться
Здравствуйте. Я полный ноль в этом деле, но мне безумно интересна эта сфера и хочу начать обучаться. Эти книги предназначены для таких людей как я? И был бы рад какому нибудь совету, для того кто делает первые шаги в эту сферу, от человека который проделал огромный путь.
ответить
From admin Sun Mar 21 14:20:00 2021 UTC
Да, именно для
Да, именно для таких и предназначены.
Что до советов, то их, пожалуй, дам два: (1) прочитайте в первом томе "напутственное" предисловие (стр.39--43) и (2) установите Linux и переползите на него со всеми делами, которые вы делаете с помощью компьютера.
ответить
From Anonymous (unverified) Sun Apr 4 09:33:00 2021 UTC
А 39 летнему с
А 39 летнему с нуля есть ли смысл их прочитать? Хотелось бы переучится на программиста.
ответить
From admin Sun Apr 4 09:50:09 2021 UTC
Будет тяжело.
Будет тяжело. Но может и получиться, почему нет.
Только учтите, что это всё — на несколько лет. Сколько конкретно лет потребуется — зависит от индивидуальных особенностей, но меньше двух, по-моему, получиться не может принципиально. Верхнего предела нет вообще, поскольку может и вообще ничего не получиться.
ответить
From Anonymous (unverified) Mon Apr 5 11:09:00 2021 UTC
Почитаю Ваши
Почитаю Ваши книги,хоте меня отговаривали,время зря в свои года теряешь.Лучше,мол переходить на C++ с нуля,есть хорошие учебники.Но мое мнение,полезно и эти книги почитать,потом дополнительно поизучать язык C и потом переходить на C++ изучать,ну не один год уйдет,за то интересно для меня.Не знаю появился интерес в 40 лет к этой области,каждый день думаю об этом.Пыталмя сразу начинать с C++,но наверное не верно,надо именно с начинать с Ваших учебников.Образования у меня нет в этой области,а интерес есть.
ответить
From admin Mon Apr 5 18:00:52 2021 UTC
Вот если
Вот если пытаться начать с Си++, то точно ничего не выйдет, это я вам гарантирую. Причём в любом возрасте.
"Дополнительно" ничего изучать не надо, Си рассматривается во втором томе, Си++ — в третьем. Начинать ни с того, ни с другого нельзя категорически. И, самое главное, если эти или любые другие книги по программированию просто "читать", то время будет потрачено впустую. К Си можно притрагиваться не раньше, чем у ваших программ на Паскале появятся сторонние пользователи, а к Си++ — не раньше, чем объёмы ваших программ (в смысле, каждой отдельно) не выкатятся за пару тысяч строк.
ответить
From Anonymous (unverified) Mon Apr 5 18:06:00 2021 UTC
Так что
Так что получается,уже не стоит даже начинать.
ответить
From admin Mon Apr 5 18:23:26 2021 UTC
Почему не
Почему не стоит-то? Что жизнь после сорока есть — это вы уже и сами на своём опыте знаете, а я вам ещё могу сказать (на моём опыте), что она есть даже после сорока шести :-)
ответить
From Anonymous (unverified) Mon Apr 5 20:34:00 2021 UTC
Спасибо
Спасибо большое за ответы,я просто начал раньше читать Вашу книгу 1-й том,установил Линукс.Отговорили,говорили чтобы быстрее в эту область войти,мол не нужно тебе это,сразу изучай C++.Послушал и закинул,в итоге не тут,не там,как говорят).
ответить
From admin Tue Apr 6 12:19:38 2021 UTC
Ну да, добрые
Ну да, добрые друзья не дадут умереть своей смертью, куда там... Ей-богу, в последнее время что-то слишком часто попадаются такие друзья, что никаких врагов не надо.
ответить
From Anonymous (unverified) Sat Apr 10 06:27:00 2021 UTC
В общем
В общем установил ксубунту и переехал со всеми делами,как вы говорите)),продолжаю изучать и практиковаться по Вашим книгам.Надеюсь все получится.Спасибо Вам,буду следить за Вашими книжными проектами.
ответить
From Anonymous (unverified) Fri Jul 9 13:38:00 2021 UTC
А что делать тем, у кого уже есть опыт программирования?
> К Си можно притрагиваться не раньше, чем у ваших программ на Паскале появятся сторонние пользователи
В моём случае не получится. Я уже успел пописать и на паскале в школе, на C в институте, хотя там был странный гибрид с С++, причём из последнего только cout, cin и строчные комменты. Там же был курс по ассемблеру, только почему-то преподавался он на фигне, встроенной в трупный паскаль. То есть чтение данных с клавиатуры и вывод были на паскале, а алгоритм их обработки на асме.
А вот с последнего мой переход на линукс и начался. Но у меня это всё оставляло чувство неправильности. Если уж программа на ассемблере, то она вся должна быть на нём. После пары работающих hello world-ов на DOS мне захотелось написать что-нибудь на уровне голого железа, для чего нужно было после каждой пересборки записать нулевой и несколько следующих секторов на дискету, а потом перезагрузиться. Программы для этого под Windows я не нашел, но, так как интересовался другими системами, из купленной мной криво переведённой книги "юникс для чайников", я знал что там есть dd для записи произвольных секторов диска.
В общем, на настоящий момент я уже успел попытаться писать программы на паре-другой десятков разных языков, но нигде дальше программ под какую-то мелкую задачу на сотню-другую строчек дело не пошло.
Другие студенты, скопировавшие у меня програмки для решения лаб, кстати, считаются сторонними пользователями?
А ещё, один преподаватель даже заплатил мне деньги за написание программы для его диссертации. Но программа там тоже уровня хелловорда. И, насколько я знаю, в итоговую диссертацию она не попала, так как препод решил эту задачу в итоге как-то по-другому.
В общем, я уже не могу начать с паскаля и не трогать C, потому что уже трогал.
ответить
From admin Sun Jul 11 18:35:27 2021 UTC
Другие
Другие студенты, скопировавшие у меня програмки для решения лаб, кстати, считаются сторонними пользователями?
нет.
один преподаватель даже заплатил мне деньги за написание программы для его диссертации. Но программа там тоже уровня хелловорда.
это тоже не то.
В общем, я уже не могу начать с паскаля и не трогать C, потому что уже трогал.
И что? :-) Паскаль-то вы трогали раньше, чем Си, и определённое эстетическое чутьё у вас есть, вон вкрапления ассемблера в Паскаль вам не понравились (и это совершенно правильно, ибо нефиг).
Читать мои книжки или не читать — подозреваю, вы разберётесь сами. Только один момент: лучше всё-таки начните с начала, а не сразу с середины второго тома, как некоторые пытаются сделать, и пытаются, замечу, совершенно зря.
ответить
☞ From Anonymous (unverified) Fri Mar 12 18:30:00 2021 UTC
Что делать
Что делать после прочтения второго тома книги? Предлагается полтора года-два заниматься написанием на си, получить конечного пользователя, и по сути стать полноценным программистом. Вот и вопрос: а что делать то? Есть желание, но идей нет банально, какие на нынешний момент реально можно написать программы на си, которые будут актуальны и реально нужны кому-то кроме друзей, которые попользовались ей потому-что я попросил?
ответить
From admin Fri Mar 12 19:22:00 2021 UTC
Ну так пишите
Ну так пишите не то, что актуально, а то, что лично вам прикольно. Рано или поздно само собой получится что-то актуальное.
Кстати, странно, что того же вопроса не возникло после первого тома.
ответить
☞ From Anonymous (unverified) Fri Mar 12 02:08:00 2021 UTC
В задаче на
В задаче на странице 142 тома I точно ответ 340? У меня не получается этот ответ. Забавно, что с усложнённой версией у меня проблем нет.
ответить
From admin Fri Mar 12 09:23:25 2021 UTC
стопудов (tm)
4+16+64+256 по-вашему сколько будет?
ответить
☞ From ртуть (unverified) Mon Mar 8 15:41:00 2021 UTC
Линукс
Современный линуксовый GUI уже ни чем не уступает другим операционным системам, читая книги предполагается отказаться от GUI совсем и использовать консоль? В линксе тоже можно копировать файлы мышкой :)
ответить
From admin Mon Mar 8 19:05:00 2021 UTC
> Современный
> Современный линуксовый GUI уже
"Уже"? Вообще-то лет двадцать как.
> ни чем не уступает другим операционным системам
Совершенно верно, и это позволяет на линукс пересаживать всяких секретарш и прочих гуманитарных девочек, даже не говоря им, что это линукс. Сам такое делал :-)
> читая книги предполагается отказаться от GUI совсем и использовать консоль?
Несомненно. Если быть точным, не "консоль", а командную строку. Графический режим как таковой вполне полезен, ну там фотки смотреть, видосики. GUI при использовании графики совершенно не обязателен. А что касается DE (вот эти вот иконочки для изображения файлов, папочки и прочее дерьмище), то для профессионала их использование неприемлемо вообще, вот то есть категорически.
Если считаете иначе, то убеждать я вас ни в чём не буду, но книжки тогда, наверное, надо другие выбрать, от моих толку не будет.
> В линксе тоже можно копировать файлы мышкой :)
А зачем делать мышкой то, что можно сделать без мышки в разы быстрее и без вреда для правого плечевого сустава?
Кстати, вы сайтом-то не ошиблись? Может, надо куда-нибудь в другое место пойти?
ответить
From Ртуть (unverified) Tue Mar 9 01:52:00 2021 UTC
GUI
Иначе я не считаю, я с вами согласен.
А как относитесь к тайловым оконным менеджерам(i3, xmonad, и т.д)
ответить
From admin Tue Mar 9 17:29:07 2021 UTC
Тайловые
Тайловые оконники вот только что обсуждались:
http://www.stolyarov.info/guestbook#comment-3437
Кратко -- не знаю, не пробовал. Пробовать некогда :-)
ответить
From Drel (unverified) Sun Jun 23 12:57:05 2024 UTC
Re: Тайловые
Заметил, что ссылка ведет не туда, правильная ссылка: http://www.stolyarov.info/guestbook/archive/4/#comment-3437 (добавлено указание гостевой).
Много ли ещё таких ссылок на сайте, которые ведут не туда? Или это случилось случайно?
ответить
From Andrey V. Stolyarov Sun Jun 23 13:04:22 2024 UTC
Re: Тайловые
Возможность перманентных ссылок была добавлена после перехода на новый движок, а этот коммент был оставлен ещё на старом — там при переносе очередной страницы гостевухи в архив все ссылки на неё благополучно ломались, поскольку гостевуха была сделана из говна и палок, средствами, для неё не предназначенными.
Сколько ещё таких ссылок на сайте — сложно сказать. Вряд ли очень много, поскольку вообще ссылки на комменты появлялись не очень часто.
ответить
From shpinog (unverified) Sat Mar 13 16:18:00 2021 UTC
>А зачем делать
>А зачем делать мышкой то, что можно сделать без мышки в разы быстрее и без вреда для правого плечевого сустава?
Не всегда. Один кейс я так и не нашёл, как эффективно делать в консоли.
Есть куча фоток в директории, много дубликатов и "неудачных" - стандартная картина при копировании с фотика.
Удобно иметь искизы всего этого, выделять ненужное и удалять. В командной строке бы пришлось каждый файл открывать-rm name.
Там где нужно не текстовая, а визуальная фильтрация с командной строкой не всё так хорошо.
ответить
From admin Sat Mar 13 17:24:42 2021 UTC
Ну и?
Для сортировки фоток я сам применяю konqueror, и это единственный случай, для которого я его применяю. Но моей фразе, которую вы цитируете, сие не противоречит:
зачем делать мышкой то, что можно сделать без мышки
ну вот фотки нельзя, во всяком случае, имеющимся софтом, сортировать "без мышки". А файлы копировать и перетаскивать — очень даже можно.
ответить
From Anonymous (unverified) Sat Apr 3 07:21:00 2021 UTC
А вот на
А вот на андроиде я копирую и перемещаю файлы с помощью файлового менеджера. Хотя у меня там установлен терминал в приложениях. Зря?
ответить
From admin Sat Apr 3 09:46:55 2021 UTC
Зря вы вообще
Зря вы вообще андроидом пользуетесь, вот это точно.
А так — когда нет клавиатуры, работа с терминалом превращается в пытку. Так что тут не вполне понятно, что зря, а что не зря.
Короче, у компьютера должна быть клавиатура — и не виртуальная, а настоящая. Если её нет — такой компьютер годится только в мусорный бак.
ответить
From Anonymous (unverified) Sat Apr 3 14:48:00 2021 UTC
А нафига нужна
А нафига нужна клавиатура для чтения электронных книг? Ну кроме двух боковых клавиш (по умолчанию громкости, но в книге они листают страницы).
Специальная читалка книг оказалась неудобной из-за медленного экрана. У мобильника хоть и нет такой продолжительности работы без подзарядки, зато экран гораздо контрастнее и откликается на листание страниц почти мгновенно.
При работе в режиме музыкального плеера, кнопки управления как правило вынесены на гарнитуру (play/pause, next, previous)
Но да, работа с терминалом на андроиде — мазохизм, хотя команды вроде ifconfig иногда ввожу что бы IP-адрес посмотреть.
Кстати даже клавиатура бы не особенно помогла, в андроиде сейчас нет не busybox, ни coreutils, к тому на половине команд permission denied, если не от рута.
ответить
From admin Sat Apr 3 23:31:48 2021 UTC
Вот я и говорю,
Вот я и говорю, зря вы андроидом пользуетесь. Всем изделиям от Google место в мусорном баке.
ответить
From Владислав (unverified) Sun Apr 4 20:44:00 2021 UTC
Получается, что
Получается, что если выбросить android и iOS, остается только "кнопочная звонилка", "городской телефон" (его вроде бы правильно называть ip-телефония) и, может быть, рация, так? Других ОС на смартфонах, вроде как, нет. Да и нужны ли они (смартфоны)?
Я, честно говоря, не против такого исхода и для меня лично смартфон и планшет никогда не заменит ноутбук или ПК.
А вы, Андрей Викторович, еще пользуетесь "городским телефоном" или "звонилка" заменяет его?
ответить
From admin Sun Apr 4 22:00:17 2021 UTC
Совершенно
Совершенно верно, в настоящее время в природе не существует таких смартфонов, которыми можно пользоваться. Вот когда появится смартфон с полностью открытой операционкой, при этом стопроцентно лояльный своему пользователю, вплоть до возможности поменять IMEI, ежели пользователь этого хочет (и плевать, что это запрещено, видите ли, стандартами GSM, суть лояльности железяки пользователю именно в том и состоит, что единственный закон для железяки — воля пользователя) — тогда можно будет на эту тему подумать.
У меня да, "звонилка", она же "бабушкофон". Даже не один :-) Городской телефон в квартире есть (ветхозаветный проводной, то есть это даже не ip-телефония), я за него по иннерции плачу абонентку, но сам по нему не звоню (идти до него далеко, лень, проще с мобилки звякнуть), на входящие звонки не отвечаю, ибо звонят на него исключительно спаммеры. Нафиг он нужен, уже не вполне понятно, но что-то мне этот номер дорог как память, всё-таки самый первый телефонный номер, который я в раннем детстве запомнил :-) Вообще-то были у меня мысли взять какую-нибудь ip-телефонную железку, чтобы можно было через asterisk устроить всякое управление через тональный набор и интегрировать это всё с имеющейся системой умного дома. Но пока дальше мыслей не продвинулось.
ответить
From Oliver (unverified) Thu Apr 8 17:00:00 2021 UTC
Пользуюсь
Пользуюсь кнопочными мобильниками всю жизнь. И пока что не собираюсь менять привычку. После долгих лет, недавно сменил телефон, купив кнопочник Nokia 2720 Flip: это - смартфон, который работает на KaiOS - свободной ОС. Правда вот не знаю пока что о том, какие возможности у пользователя в ней менять тот же IMEI. Моэет Вас заинтересует.
ответить
☞ From Anonymous (unverified) Mon Mar 8 12:03:00 2021 UTC
Качество печати
Здравствуйте.
Меня интересует качество печати данных книг. Каково оно?
Просто, для сложных (для меня) книг, я предпочитаю их бумажное воплощение. Но крайне не приятно держать в руках и работать с книгой с плохой бумагой и полиграфией.
ответить
From admin Mon Mar 8 14:15:00 2021 UTC
Странный вопрос, честно говоря
Мне вот что интересно, вы на какой ответ рассчитываете? В каком виде? Книги вышли в твёрдом полноцветном переплёте, корешок плоский, скрепление клеевое (да, не шитое, звиняйте), бумага, если не ошибаюсь, 65 гр/м2. Печать типографская, тип печатного станка мне не известен (но это не ризограф, если вас этот момент интересует, а вот офсет это или что-то другое -- извините, понятия не имею). Что вас может не устроить -- ну, базовый шрифт 10й, можете любую страницу из PDFок распечатать, посмотреть, подходит вам такой шрифт или нет. Больше мне ничего в голову не приходит, что можно было бы ответить, но если у вас конкретные вопросы есть, задайте их.
ответить
☞ From Drobagh (unverified) Sat Mar 6 07:58:00 2021 UTC
Здравствуйте,
Здравствуйте, очень сильно замотивирован в прочтении данных пособий, но сразу возник общий опрос по поводу того, когда лучше это собственно сделать:
1) Прямо сейчас, без выпущенного задачника (хотя бы по первому тому), придумывая себе задачки, закрепляя знания (По моему мнению, в таком случае можно опустить важные детали и как результат не понять какую-либо ключевую концепцию)
2) Дождаться полноценного задачника и после этого приступать к прочтению
Ясное дело что ответ зависит от временных рамок выпуска самого задачника. Хотелось бы узнать Ваше мнение по этому поводу )
Заранее Спасибо!
ответить
From admin Sat Mar 6 11:05:02 2021 UTC
Вообще-то я
Вообще-то я изначально не планировал делать задачник, и то, что он сейчас стоит в планах, есть результат занудства публики :-) Мне всегда казалось, что задачник по программированию не нужен тем, кто собирается быть программистом, поскольку у будущих программистов получаемые знания о доступных инструментах вызывают натуральный зуд и желание немедленно это всё попробовать на машине.
Так что задачник-то, конечно, будет, раз я обещал, но там прямо в предисловии будет сказано, что намного лучше и правильнее решать такие задачи, которые хочется решать, чем такие, которые какой-то добрый дядя сформулировал в задачнике. И уж, конечно, ждать его выхода не надо, особенно если получается придумывать заморочки для себя самостоятельно.
ответить
From Anonymous (unverified) Sat Apr 3 07:28:00 2021 UTC
А как насчёт
А как насчёт https://projecteuler.net ?
Есть и другие подобные сайты, но этот первым в голову приходит.
ответить
From admin Sat Apr 3 09:51:52 2021 UTC
Это не о том
Задачи, которые там, к практическому программированию никакого отношения не имеют. Там, во-первых, сплошная математика (ну то есть вроде бы надо программу написать, но чтобы её написать, нужно проникнуть в математическую суть), а во-вторых, по-моему, это всё-таки именно что специально подобранные ситуации, когда "лобовое" решение оказывается на хренову прорву порядков медленнее решения, написанного с применением мозгов.
Не скажу, что в практическом программировании так не бывает — бывает, конечно. Просто редко. Зато намного чаще приходится бить себя по рукам, вспоминая словосочетание "преждевременная оптимизация".
ответить
From Anonymous (unverified) Sat Apr 3 14:50:00 2021 UTC
А у меня и
А у меня и брутфорс на тех задачах срабатывает. Ну подумаешь подожду 2 минуты вместо 0.02 секунд, зато потрачу на написание 20 минут вместо 2 часов.
ответить
From admin Sat Apr 3 23:35:18 2021 UTC
Я давно туда не
Я давно туда не лазил, но если правильно помню, то отбрутфорсить там можно первые примерно полсотни задач, а дальше уже лобовые решения получаются на год машинного времени или что-нибудь вроде того.
В любом случае, если задачи из projecteuler брутфорсить, то зачем на них вообще время терять? Польза-то от них где? Между прочим, где-то в сети валяются ответы на все тамошние задачи, ну вот вбить их по одному и всё, чего там.
ответить
From Anonymous (unverified) Fri Jul 9 15:34:00 2021 UTC
Брутфорс
Польза от решения брутфорсом в том, что бы потом сделать diff вывода с "правильным" решением, и узнать, действительно ли оно правильное.
ответить
From admin Sun Jul 11 18:38:04 2021 UTC
Там нет
Там нет "правильных" решений, в смысле они там не опубликованы, а если бы и были, diff бы не помог.
ответить
From Anonymous (unverified) Mon Jul 12 06:24:00 2021 UTC
projecteuler
> Там нет "правильных" решений, в смысле они там не опубликованы, а если бы и были, diff бы не помог.
Вы просто не поняли, что я имел в виду. Попробую ещё раз:
В любом случае, написать решение брутфорсом имеет смысл до того как думать над "правильным" решением. Когда "правильное" решение будет готово, можно сделать вот так:
И узнать, правильное ли на самом деле "правильное" решение. Если в задаче мощности компа не хватает на полное решение задачи, то всё равно можно ограничить вывод и того и другого теми значениями, на которые компа хватает.
ответить
From admin Mon Jul 12 07:11:24 2021 UTC
Ответом на
Ответом на любую из задач на projecteuler является целое число, так что использование diff бессмысленно. И брутфорс тоже никакого смысла не имеет, поскольку узнать, правильный ответ или нет, можно намного проще — отправив ответ на сайт. А если очень хочется узнать правильный ответ, не решая задачу — то список ответов можно найти в поисковиках.
ответить
☞ From Alejandro (unverified) Thu Mar 4 13:39:00 2021 UTC
Поздравляю Вас,
Поздравляю Вас, Андрей Викторович! Блестящее достижение! А ведь еще говорили в анонсе 2-го издания, что через год ждать ничего не следует. Но нет, дождались :)
P.S.: Перечитывать то, что уже много раз читал в первом издании и находить новый текст, новые мысли - это удивительное удовольствие! Отдельное спасибо за это.
ответить
☞ From qupear (unverified) Thu Mar 4 13:20:00 2021 UTC
Спасибо
На эти темы как правило, книги пишут словно справочники или документацию, но для начинающих не так важно знать абсолютно всё, гораздо важнее хорошо разобраться в ключевых концепциях.
ответить
☞ From Anonymous (unverified) Wed Mar 3 23:11:00 2021 UTC
Cпасибо!
+ в карму и спасибо!
ответить