Архив гостевой книги с 25.09.2012 по 02.06.2019

Эта страница гостевой книги является архивной. Новые комментарии просьба оставлять в действующей гостевой книге. Ответы на старые комментарии здесь по-прежнему возможны.

Учтите, что комментарии на этом сайте премодерируются.

[Ещё более старые комментарии можно найти на предшествующей странице архива >>>]

CSS3 и отказ от JS

Андрей Викторович, хочу поинтересоваться вашим мнением относительно возможностей аминирования и визуализации с помощью Cascading Style Sheets третьего поколения (CSS3).
Как вы относитесь к применению гибкой компоновки страницы сайта с использованием плавных анимаций сжатия/растягивания?
И стоит ли пытаться задействовать всю мощь CSS3, при отказе от JavaScript, или это уже за гранью излишества?

admin аватар

С моей точки

С моей точки зрения все возможности CSS, находящиеся за пределами спецификации CSS1, являются недопустимыми. Что касается CSS3, то эта мерзость алгоритмически полна, то есть её использование недопустимо по тем же причинам, по которым недопустимо использование JS и любого другого исполнения на стороне клиента. А ещё, как мне кажется, вы ошиблись сайтом: здесь вам делать явно нечего.

Спасибо вам за

Спасибо вам за ответ! :)

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

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

admin аватар

Я бы сказал, что

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

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

InfoViolence

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

admin аватар

Можно ли

Можно ли считать информационным насилием выступления певцов-музыкантов и продавцов мелочью в вагонах электричек?

Несомненно.

Есть ли разница между ними и теми, что выступают в переходах метро?

Разница если и есть, то чисто количественная:

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

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

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

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

А как Вы

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

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

admin аватар

Что-с? Как я отношусь к гуманистическим бредням? :-)

А как Вы относитесь к такой точке зрения,

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

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

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

Начнём с алкоголя. Себестоимость производства спирта такова, что бутылка более-менее качественной водки — не hi-end, но и не сивушной — должна бы на выходе с завода стоить примерно 10-15 рублей, на полке в магазине — от силы рублей тридцать. То, что мы видим — в пять-семь-десять раз больше — есть результат усилий государства в виде госмонополии на спиртное, акцизного налога и прочих мер, направленных на ограничение того самого доступа к алкоголю. С моей точки зрения все эти меры категорически недопустимы, государство обязано быть нейтральным по отношению ко всевозможным этическим, философским и прочим идеям, и пока это не так — имеет место государственный волюнтаризм, а само государство выступает как враг собственных граждан. В обществе, устроенном лучше, чем сейчас, доступ к алкоголю должен быть, разумеется, больше, проще и шире, нежели здесь и сейчас; если говорить совсем точно, не должно быть вообще никаких ограничительных мер для такого доступа, а вопрос, что, когда и в каких количествах употреблять внутрь, не может касаться никого, кроме самого индивида лично. Собственно говоря, свобода как таковая начинается с права каждого распоряжаться самим собой. На всякий случай: я, как и большинство либертарианцев, также считаю, что гражданам должны быть доступны вообще любые вещества, которые способен изготовить человек, в том числе наркотики любой степени тяжести. Единственное возможное ограничение здесь состоит в необходимости информированной доброй воли, т.е., например, условием законного приобретения какого-нибудь героина должна быть расписка о том, что с объективной (!) информацией о последствиях употребления этой штуки приобретающий ознакомлен.

Теперь вот «хорошее образование». Даже в МГУ, где я работаю, едва ли не трети студентов всё это ваше хорошее образование даром не нужно, а "учатся" они просто потому, что их мама с папой пинками в университет загнали и сказали, чтоб без диплома не возвращался. Мой опыт работы в ВУЗе третьего эшелона показал, что там таких студентов — процентов девяносто, если не больше. Иначе говоря, в настоящее время реальный спрос на образование (внезапно) намного ниже предложения. Да я вам больше скажу: вы можете мне указать хоть один университетский учебник, который невозможно было бы достать? Я вот ни одного такого не знаю, большинство вообще прекрасно из интернета скачивается, оставшиеся можно без особых проблем добыть в букинистических. Так что, если говорить о доступности именно образования как такового, а не мест в ВУЗах, то оно вообще доступно абсолютно всем желающим. Просто оно им не надо. В таких условиях стенания о том, что, мол, доступа к хорошему образованию мало, выглядят просто нелепо.

Теперь ещё вот это:

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

Логику так «продолжить» нельзя, если это именно логика, а не бессмысленный гуманитарный словесный понос. Я здесь на сайте сделал возможность оставлять комментарии, хотя мог бы её выключить; более того, я здесь выделил страницу под гостевую книгу и сделал на неё ссылку в навигации со всех страниц сайта. Больше того, я сам написал (см. вверху страницы) вот это вот Здесь вы можете ... написать всё, что думаете по этому поводу. Т.е. я явным образом обозначил своё согласие на получение комментариев. Единственное ограничение здесь — моя же фраза «просьба придерживаться темы и соблюдать приличия», но ваш комментарий формально этого не нарушает. В прицнипе я мог бы, наверное, обозначить своё нежелание тратить время на бессмысленное перемалывание сто лет в обед известных «аргументов» моих идеологических противников, но посчитал, что премодерации для этого более чем достаточно, тем более что иногда попадаются вот такие вот перлы вроде вашего комментария, ответ на которые мне даже становится интересно написать.

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

свобода и либертарианство

Андрей, с интересом прочёл ваш содержательный ответ некоему gmoshkin. Спасибо!

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

Как, кстати, вы относитесь к художественным популяризациям Розова на эту тему?

admin аватар

Либертарианство - штука сложная

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

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

В принципе у меня в диссертации (http://www.croco.net/croco/papers/stolyarov_philosophy_thesis_infofreedo..., стр. 17--35) есть некий обзор, можете там посмотреть ссылки на источники, но на полноту охвата темы я претендовать не могу, меня всё-таки в основном интересовало информационное насилие — тема совершенно не исследованная.

Про Розова — к сожалению, не знаю, о чём идёт речь.

В принципе у

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

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

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

Вот он в википедии.

А вот первая книга цикла, самая, наверное, известная.

Посмотрите, вполне возможно, что вам понравится.

Андрей

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

admin аватар

Я никогда не

Я никогда не пытаюсь никого учить тому, чего не умею сам.

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

Здравствуйте, Андрей Викторович. Ко мне попала программа одного вашего курса на ВМК. Интересны ваши мысли по поводу следующих вопросов в ней.
- Может ли программа, работающая под управлением современной ос, рассматривать компьютер как фоннеймановский?
- Что такое прерывание и почему вокруг этого термина нагородили много ахинеи?
Спасибо.

admin аватар

Может ли

Может ли программа, работающая под управлением современной ос, рассматривать компьютер как фоннеймановский?

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

Что такое прерывание и почему вокруг этого термина нагородили много ахинеи?

Ответ на этот вопрос имеется во втором томе, параграфы 3.6.3 и 3.6.4. К сказанному там добавлю, что превращение программирования из инженерной дисциплины, доступной (и интересной) лишь узкому кругу, в явление массовое пришлось на 1980-е годы, когда господствующей "платформой" был MS-DOS. При программиовании под MS-DOS довольно часто приходилось упоминать так называемые "программные прерывания" (термин само по себе дебильный), и слово "программное" часто забывали, так что публика стала забывать изначальный смысл слова "прерывание".

Задачники

Андрей Викторович, изучаю программирование по Вашим книгам. Пока только на середине первого тома. Потом планирую перейти на второй том (НАСМ и Си) и после него на Вашу книги по С++.

Буду признателен, если подскажите подходящие задачники по Си и С++.

Спасибо!

Да возьмите

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

admin аватар

Крестики-нолики

Крестики-нолики разве что на бесконечном поле, классическое поле 3x3 -- скучная штука, давно полностью исследованная. Но в целом да, идея здравая: берётся любая настолка и превращается в программу.

admin аватар

Увы, я не видел

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

Лично мне

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

P.S. Заморочку для себя пока ищу :) Пока же предварительный план - подготовится к студенческой олимпиаде по программированию, которая пройдет в следующем году.

admin аватар

У меня для вас плохие новости

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

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

Если я вас

Если я вас правильно понял, основные алгоритмы и структуры данных нужно осваивать в ходе работы на собственным (объемным) проектом?

Разве изучение алгоритмов не важно само по себе?

Но ведь, в списке литературы в 1 тому вы указали книги Вирта, Кормена и Кнута, которые подностью посвящены алгоритмам.

admin аватар

Если я вас

Если я вас правильно понял, основные алгоритмы и структуры данных нужно осваивать в ходе работы на собственным (объемным) проектом?

Да. Как и всё программирование в целом.

Разве изучение алгоритмов не важно само по себе?

Я даже больше скажу: "само по себе" оно бессмысленно. Пустая трата времени и дебильное зазубривание.

Но ведь, в списке литературы в 1 тому

Ага, пофлеймить решили? Ну что же. Берём первый том. Находим контекст, в котором появились эти ссылки (все скопом). И имеем вот что:

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

На случай возникновения у читателя непреодолимого желания освоить алгоритмы балансировки деревьев возьмём на себя смелость обратить его внимание на несколько книг, в которых соответствующие вопросы подробно разобраны. Начать стоит с учебника Н. Вирта <<Алгоритмы и структуры данных>>; изложение в этой книге отличается лаконичностью и понятностью, поскольку рассчитано на начинающих. Если этого не хватило, попробуйте воспользоваться огромной по объёму книгой Кормена, Лейзерсона и Ривеста; наконец, для сильных духом существует ещё и четырёхтомник Дональда Кнута, третий том которого содержит подробный анализ всевозможных структур данных, ориентированных на сортировку и поиск.

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

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

"программирование, введение в профессию: том 1"

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

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

Не стоит путать с оправданными заимствованиями - "панталоны, фрак, жилет, всех этих слов на русском нет", как писал классик. :)

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

admin аватар

Гм

Пардон, а что ж вы, будучи сыном учителя и всё такое прочее, "сходу" вместе пишете? :-) Я, впрочем, тоже так же писал, пока меня мой корректор от этой плохой привычки не отучила.

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

В общем, что-то делать надо, но что именно -- я пока не понял.

"Меценат" лучше

"Меценат" лучше тем, что это _оправданное_ заимствование. Равно как и "спонсор". В таковых словах ничего плохого нет, они наоборот язык только обогащают.

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

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

Так или иначе, не обессудьте. Давайте беречь русский язык вместе. :) И в любом случае спасибо за понимание.

А "сходу" - это да, привычка дурная. Та же проблема у меня с "иметь в виду / ввиду". Что взять с технаря. :)

admin аватар

С точными синонимами есть проблема

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

И "спонсор" — это тоже не точный синоним. Спонсор — это тот, кто берёт на себя расходы, и совершенно не факт, что делает это бескорыстно.

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

В общем, сложен этот вопрос, увы.

gopher

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

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

admin аватар

Честно говоря,

Честно говоря, очень давно собираюсь поставить gopher-сервер. Никак не находится время для этого, но, я надеюсь, рано или поздно найдётся.

Добрый день,

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

admin аватар

Отрицательно

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

Менять в этом плане я ничего не буду. Если не нравится — в Интернете есть много других сайтов.

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

Позвольте

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

admin аватар

ничего не даёт

Спам я не рассылаю, никакого другого разумного использования для этих адресов мне в голову не приходило. О результатах премодерации я никого не уведомляю и не собираюсь.

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

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

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

admin аватар

М-да, тяжело.

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

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

Оставшиеся 0,01% — это так называемый "коробочный" софт, т.е. такой, который пишется не под конкретного заказчика/пользователя, а в инициативном порядке по принципу "ща наваяем, а потом кому-нибудь продадим". С таким же успехом можно выйти на улицу, выкопать яму 1x1x1 метр и требовать за это вознаграждения. И да, программистов, которые соглашаются в таких проектах участвовать, я, мягко говоря, не понимаю — они своими руками разрушают собственный мир.

Весь ваш бред про юристов, преподавателй и т.п., разумеется, никакого отношения к делу не имеет вообще ни с какой точки зрения: эти люди тратят своё время по заказу конкретного заказчика. Собственно говоря, в мире есть всего две категории сущностей, которые могут стоить денег: это (1) материальные предметы и (2) время, потраченное человеком по прямой просьбе/заказу/etc другого человека.

Собственно

Собственно говоря, в мире есть всего две категории сущностей, которые могут стоить денег: это (1) материальные предметы и (2) время, потраченное человеком по прямой просьбе/заказу/etc другого человека.
Будет ли платой за воздух посещение музыкальных концертов? Вроде бы люди тратят свое время, но не по прямому заказу/просьбе, да и цена билета не зависит от количества посетителей. Кинотеатры, как я понимаю, по этой логике однозначно торгуют воздухом?

admin аватар

Будет ли платой

Будет ли платой за воздух посещение музыкальных концертов?

Нет, почему. Вы платите за аренду места в зале. Место в зале — это вполне материальный объект, особенно если вспомнить, что оно вообще-то является частью здания (что здание само по себе материальный объект — сомнений, надеюсь, нет?)

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

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

Кинотеатры, как я понимаю, по этой логике однозначно торгуют воздухом?

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

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

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

Спасибо,

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

admin аватар

Выходит,

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

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

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

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

Здесь вопрос договорённостей, и он, как водится, не имеет никакого отношения к исходному вопросу.

И вообще, что значит "имеет право"? Юридически? Конечно имеет, это же его флешка. Но юридически программист "имеет право" много на что, копирайтное законодательство пока что не отменено. Или вы какое-то непонятное "моральное право" имеете в виду? Так всё равно имеет, разумеется. Он же силой деньги ни у кого не отнимает. Больше того, программист, в приницпе, может поставить условием передачи программы пользователю подписание некоего договора (NDA), по которому пользователь обязуется больше никому эту программу не отдавать. Заметим, для GPL это уже будет грубым нарушением условий лицензии, но я не считаю GPL догмой.

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

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

Технический момент

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

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

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

admin аватар

Ну хорошо, с

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

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

Добрый день.

Добрый день. Начаал изучение первого тома вашей книги. Это лучшее, что я видел по программированию, огромная благодарность вам за ваш труд. Но возникли вопросы.
Вы мельком упоминаете в главе про работу на Юникс-машинах, что опытные пользователи не допускают наличия команды sudo в системе. Каким тогда образом выполнять команды, требующие привилегий суперпользователя так, чтобы это было правильно?
И еще. Вы почему-то делаете упор на Паскаль, а Бейсик совершенно обходите вниманием. Почему? Простой же язык совсем.

admin аватар

Про команды под

Про команды под root'ом: нажимаете Ctrl-Alt-F1, попадаете на текстовую консоль, там входите под root'ом (то есть вводите имя пользователя root и его пароль), получаете приглашение командной строки привилегированного сеанса работы. Собственно, в этом сеансе всё и делаете, что требует полномочий root'а (и это должно быть как можно меньше).

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

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

Выключение компьютера и sudo

А как правильнее всего пользователю, который не root, выключать/перезагружать компьютер из командной строки? Он ведь может и вообще не знать пароля root. Допустимо ли для этой (и только для этой) цели использование sudo? Или есть какие-то более аккуратные способы?

admin аватар

Конечно, есть способы

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

Во-вторых:

crocodil@frock:~$ ls -l /sbin/shutdown 
-r-sr-x--- 1 root adm 21416 май 29  2015 /sbin/shutdown

Собственно говоря, всё. В этой системе все пользователи из группы adm могут запускать shutdown с любыми параметрами. Как соответствующий chmod сделать, сообразите или подсказать?

А ещё — попробуйте, переключившись на текстовую консоль, нажать Ctrl-Alt-Del. Если у вас systemV init, то конкретную реакцию на Ctrl-Alt-Del можно задать редактированием /etc/inittab. Я, в частности, всегда там меняю перезагрузку на останов (-r на -h, попросту говоря). Если другой init — не подскажу, обратитесь к документации.

Но ведь sudo

Но ведь sudo можно можно настроить на разрешение конкретных команд от конкретного пользователя с конкретным хостом. Разве в этом случае полномочия не те же самые, если не меньшие?

admin аватар

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

настроить на разрешение конкретных команд от конкретного пользователя с конкретным хостом

Тут есть целый ряд факторов. Во-первых, команды там обычно задают по имени, а не по полному пути к исполняемому файлу. Во-вторых, разрешённая команда может (внезапно) предоставлять возможность запустить через неё shell (или произвольную другую команду, что то же самое), и, собственно говоря, всё. В-третьих, и в-главных, чаще всего в sudoers прописывается ALL=ALL по принципу "это же квалифицированный человек, зачем его ограничивать", или, что ещё хуже, "это же сисадмин" или "это же я сам, хозяин системы". То есть sudo используется не как лазейка для отдельных команд, а как средство предоставления админских полномочий. И вот тут уже у подавляющего большинства админов тупо не хватает соображалки, чтобы понять, что собственную систему они окончательно продырявили. Самое интересное, что в Debian'е и Ubuntu это сделано "из коробки", так что всем, кто не особенно задумывается о безопасности, предоставлен этакий образец для подражания. Крайне неудачный образец, если не сказать хуже.

К тому же сама sudo -- это довольно развесистый бинарник, который вполне может стать мишенью для атаки. В правильно настроенной системе множество suid'ных бинарников должно минимизироваться, и среди них не должно быть ничего сложного. В Openwall Linux вон вообще ни одного siud'ника нет.

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

Разве в этом случае полномочия не те же самые, если не меньшие?

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

>Во-первых,

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

Необязательно. Я, когда добрался до этих настроек, сразу указывал, к примеру, /usr/bin/poweroff или /usr/bin/reboot.

>В-третьих, и в-главных, чаще всего в sudoers прописывается ALL=ALL

Ну да. Сам я от этого уже отказался и здесь такой вариант не рассматривал.

>В Openwall Linux вон вообще ни одного siud'ника нет.

И как там решать вопрос с выключением? Хотя, это вроде серверная система, там ради этого можно и под root зайти. Но все же, должны же как-то и там полномочия распределяться.
Кстати, любопытно, в Devuan изначально SUDO нет или вы очень сильно настраиваемую установку делали? Или уже после установки его удалили? Или просто не стали ничего туда прописывать, хотя это вряд ли. Если не секрет.
И вообще, известны ли вам несерверные дистрибутивы, не предполагающие использования SUDO? Вроде в Archlinux его по-умолчанию нет. Но там systemd.

>Ввод пароля, который там предусмотрен, с точки зрения безопасности бесполезен абсолютно

Прям абсолютно? То есть не пароль пользователя превращается в пароль root а пароля фактически нет? Даже если настроить на ввод пароля каждый раз а не на свободный доступ в течение n минут?

>Должен признать, что здесь ход ваших мыслей мне в принципе не понятен.

Да вроде мысль простая. В обоих случаях полномочия оговариваются заранее под root и из обычного сеанса изменены быть не могут.
К тому же в visudo можно еще и название хоста прописать. И пароль там вводить надо. И вроде можно настроить выполнение определенных программ только с определенными аргументами. Хотя тут я пока не вникал, да и, видимо, это лишнее. Если уж запрещать, то запрещать полностью.

admin аватар

Вот именно что абсолютно

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

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

Под Devuan'ом сейчас вроде нет sudo по умолчанию. Под Ubuntu -- есть, и именно что с ALL=ALL из коробки, так что там приходится сразу после инсталляии делать sudo bash, устанавливать пароль для root, проверять, работает ли он, после чего сносить нафиг sudo (просто тупо apt remove sudo и до свиданья).

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

Спасибо за

Спасибо за разъяснение. Все же хочется уточнить. Получается у злоумышленника есть еще и возможность изменить настройки sudo чтобы через него выполнялись не только те команды которые там были прописаны изначально?
Позавчера устанавливал систему. Решил ради эксперимента удалить sudo. Ощущения специфические. Раньше у меня не получалось монтировать диски с ntfs без sudo. Не помогали ни прописки в fstab, ни suid (с ext4 все fstab'ом настроилось без проблем). Помогла в итоге установка пакета nfs-3g-fuse из пользовательского репозитория. Но не знаю что будет если захочу сменить дистрибутив. В других репозиториях мне этот пакет не попадался.
И при сборке этого пакета в обычном сеансе всплывал запрос пароля от root. Хотя тут без особого труда разобрался как собирать в непривилегированном сеансе, а устанавливать под root'ом.
В общем понятно, что надо вникать и разбираться. И все же возникают сомнения- стоит ли в данном случае менять привычки?

admin аватар

Стоит-стоит

Получается у злоумышленника есть еще и возможность изменить настройки sudo чтобы через него выполнялись не только те команды которые там были прописаны изначально?

Штатно такой возможности, конечно, нет, но поймать саму sudo на каком-нибудь очередном buffer overflow кто-нибудь может и справиться, она всё-таки довольно развесистая.

стоит ли в данном случае менять привычки?

Если интересует моё мнение -- то да, однозначно стоит. С NTFS реально всё не очень здорово, но это не повод систему превращать в решето.

Спасибо за

Спасибо за ответ, но, к сожалению, не заработало. Результат команды ls такой же, как у Вас, но все равно Not enough permissions to execute. У меня Void Linux, на их сайте в документации описаны два способа предоставления обычным пользователям прав на выключение: через ConsoleKit/Polkit при наличии DE и, собственно говоря, через sudo во всех прочих случаях. А может система игнорировать SetUid и SetGid подобно Sticky Bit?

admin аватар

Если DE это

Если DE это может делать, то заведомо есть способ делать то же самое не через DE. И sudo тут ни при чём.

Игнорировать suid/sgid система теоретически может, например, если файловую систему, содержащую suid'ный бинарник, примонтировать с соответствующим флажком, но я слабо себе представляю, как будет работать система, если у неё такой флажок окажется на /sbin. В любом случае -- DE ведь это делает как-то. Подчёркиваю: если DE делает, то и вы сами можете, волшебства в юниксе не бывает.

Есть ещё одна засада -- у вас shutdown может быть скриптом, на скрипты suid/sgid не действует. Проверьте этот момент. Ну и, естественно, проверьте, входите ли вы в соответствующую группу (дайте команду id).

В

В соответствующую группу вхожу, но вот shutdown действительно оказался скриптом.
если DE делает, то и вы сами можете, волшебства в юниксе не бывает
Я понимаю, что не бывает, но любое DE == дохреналлион граблей верхом на костылях, через которые порой трудновато пробиться.
Но я разобрался, как заставить Void'овский runit выключать машину по Ctrl-Alt-Del вместо перезагрузки, что можно, в принципе, считать решением проблемы. Большущее Вам спасибо за уделенное время.

admin аватар

Ну так

Ну так посмотрите, что этот скрипт делает — делов-то. Скорее всего, он вызывает команды вроде /sbin/halt и /sbin/reboot. Если нет — то сами эти команды никто не отменял.

Если и они скриптами окажутся — ну посмотрите, что делают уже они.

Ну так

Ну так посмотрите, что этот скрипт делает — делов-то.
Ну уж... До этого-то я додумался ;) /bin/halt он вызывает (как и reboot, что любопытно). Еще раз большое спасибо, теперь вопрос решен окончательно!

admin аватар

Эти вроде

Эти вроде должны быть честными бинарниками, вешаете на них suid (только не забудьте закрыть исполнение для others, оставьте только для user и group) и дело в шляпе.

В последнем

В последнем разделе статьи о достижениях развития FreeBSD описывается следующее:

«Продолжена разработка системного менеджера nosh предоставляющего инструменты инициализации, загрузки, ведения логов, управления фоновыми процессами и терминалами.»
http://www.opennet.ru/opennews/art.shtml?num=50385

Воспринимать ли это как аналог SystemD в системах BSD?

Прошу прощения за отнятое время, если вопрос не очень разумен.
Я весьма посредственен в использовании UN*X-Like систем и долгое время не видел разницы между классическим SysVinit и SystemD, до тех пор, пока с s-d не возникли проблемы. Сейчас использую систему с классическим SysVinit

Если системный менеджер nosh будет являться аналогом s-d, то уйти от подобных «оптимизаций», поменяв ядро Linux на ядро BSD, будет весьма проблематично.

Благодарю за ответ.

BSD много и они разные

В вашем вопросе содержится несколько неявных неверных предположений. Если хозяин этой гостевой книги мне позволит, то я бы попробовал ответить на эти предположения и на сам вопрос.

Воспринимать ли это как аналог SystemD в системах BSD?
Если системный менеджер nosh будет являться аналогом s-d, то уйти от подобных «оптимизаций», поменяв ядро Linux на ядро BSD, будет весьма проблематично.

Во-первых, нет никакого единого "ядра BSD". Каждая из основных современных BSD-систем (OpenBSD, FreeBSD, NetBSD, DragonFlyBSD) имеет своё ядро, разрабатываемое отдельно.

Во-вторых, нельзя просто "поменять ядро Linux" на ядро, например, OpenBSD. Все BSD-системы, в отличие от Linux, это цельные системы, требующие для корректной работы не только своего ядра, но и своей базовой системы, также разрабатываемой отдельно. Теоретически подменить базовую систему какой-либо BSD на базовую систему из Linux возможно, но практически это сделать достаточно непросто. Не знаю, кстати, насколько жив сейчас проект Debian/FreeBSD.

В-третьих, помимо FreeBSD, о которой вы пишете, есть и другие, перечисленные мной выше, BSD-системы. Они пока, насколько я знаю, ничего подобного systemd внедрять не собираются. Да и использовать ядро Linux без systemd, взяв соответствующий дистрибутив, пока ещё вполне возможно. Так что, есть вполне куда отступать.

Лично я ушёл с Linux на OpenBSD пару лет назад, чем очень доволен. Жалею только, что не сделал этого раньше (лет 10 назад возникала у меня такая мысль, но тогда я её не осуществил).

admin аватар

А чёрт его

А чёрт его знает, как это воспринимать. Сон разума рождает чудовищ.

четвертый том

добрый вечер! как продвигаются дела с вашей рукописью? :)

admin аватар

Увы, отвратительно

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

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

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

admin аватар

Собеседование

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

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

Ну хотя и сбежав сразу, в принципе, не особенно много потеряете :)

MacOS

Как вы относитесь к продукции фирмы Apple? Возможно ли изучать программирование в MacOS, в среде с стандартом POSIX и являющейся потомком UNIX?

admin аватар

Я сильно

Как вы относитесь к продукции фирмы Apple?

Очень плохо отношусь.

Возможно ли изучать программирование в MacOS

Я сильно сомневаюсь, что при работе под MacOS вы сможете сделать командную строку своим основным интерфейсом для работы. Там оконные приложения ("родные" маковские) из командной строки вроде и запускаются, но через жуткую гадину.

Одно можно сказать в пользу MacOS: это всё же лучше, чем Windows. Но это не потому, что MacOS хорошая, а потому что придумать что-то хуже, чем Windows, вообще вряд ли возможно. Ну, это если про операционку как таковую говорить. А вот железки от Apple — это, я бы сказал, за гранью приличия; если у вас есть настолько лишние деньги, можно найти очень много способов их потратить с пользой, а не отдавать этим уродам.

А вот железки

А вот железки от Apple — это, я бы сказал, за гранью приличия
"Отказ от техники Apple сродни вегетарианству. В какой-то момент ты понимаешь, что есть вещи, которые лучше не трогать, потому что ты не хочешь быть никоим образом причастным к способу производства этих вещей, и доходу их производителей". (c) https://bash.im/quote/456138

admin аватар

Я не

Я не вегетарианец, но мысль в целом интересная :-)

Уязвимости hardware

Здравствуйте, хотел узнать ваше мнение по поводу нашумевших уязвимостей в процессорах под названием meltdown & spectre и по поводу не менее опасной технологии intel me. Что вы можете об этом сказать?

admin аватар

Есть сомнения?

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

продолжение

Возможно ответ очевиден. Но только для тех у кого есть большой опыт в низкоуровневом программировании. Но вот мне из этого понятно только, то что в интернете сказано, что это уязвимости и возможно очень опасные. Почему я про это спрашиваю, потому что хочу сам управлять своей системой и компьютером и не хочу чтобы кто-то другой имел возможность извне влиять на нее, тем более иметь полный доступ к ней. Я видел есть решения которые устраняют это. Например прошивка libreboot, coreboot. Хотел узнать действительно ли они это делают или это просто маркетинговый ход и прочая лож. Просто получается так, что устанавливай ты хоть linux либо freebsd это будет бесполезно т.к твой пк будет все равно уязвим несмотря на то что эти ОС сами по себе не содержат слежки и являются открытыми и этичными в отличии от того же самого микрософта или андройд.

про Android

Раз уж упомянули "андрюшу", вставлю свои 5 копеек. Андроид, все же, сам по себе открытый - пожалуйста, качайте исходники, читайте и наслаждайтесь. Есть и порты типа почившего CyanogenOS и сменившего его LineageOS. Драйвера периферии таки да, проприетарные в большинстве своем, но это вопросы к производителям тех или иных устройств. Реальных проблем у этой оси две:

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

Если и дружиться с Android, то только убедившись заранее в возможности установки на свой гаджет девственно чистого LineageOS, чтобы собрать его ручками и развернуть свое собственное окружение. Обе выше перечисленные проблемы так лечатся. Правда, всё, что новее Android 4.1 (2012 г.), лично у меня вызывает, мягко говоря, недоумение, особенно м#дацкий MTP (Media Transfer Protocol), заменивший простое и логичное подключения устройства к компу в режиме накопителя. Захотел скинуть на планшет/смартфон музыку, чтобы послушать в дороге? "Хм, парень, - говорит тебе MTP, - я тут пользовался слухом, что это у тебя не плеер. Ты уверен, что файлы mp3 тебе вот прям так необходимы? Они же могут тут не воспроизвестись... Ой, а это что? Фильм?! ТЫ ЧО??? Это же у тебя не проигрыватель фильмов какой-нибудь. Может, хрен на него? Нет? Ок, как скажешь. Погоди, ты хочешь вот этот файл переместить из одного каталога в другой? Просто переместить? Я хз, как это сделать, я его просто побайтово скопирую, а потом удалю из исходного каталога, годится? Да можешь и не отвечать." Вот так, в общем. А старенький китайский планшет на Android 4.1, купленный в далеком 2013 за 1900 рубликов для чтения книжек, имел на борту из левака только файловый менеджер и простенький 2D бильярд и позволял выворачивать себя "мехом внутрь": на нем был Busybox, после установки терминальной программы абсолютно штатно удалось chroot-нуться в Fedora ARM (с другими дистрибутивами не пробовал), опять же без плясок и шаманств устанавливать/использовать/удалять пакеты из репозитория, стучаться в /dev к подключенным по USB устройствам (даже микроконтроллеры прошивал программатором) и юзать иксовые программы через XSDL. Попробуйте сейчас провернуть это с анального огороженной 9-кой...

MTP -- "user-friendly"

MTP -- "user-friendly" поделие мелкомягких, а это объясняет все его, ммм, "причуды". К вышеназванным я бы, кстати, добавил общую дичайшую медлительность и - вишенка на торте - молчаливый отказ записывать на носитель файлы с "немедийным" расширением (прогресс-бар честно пробежит-пролетит-проползет за секунды-минуты-часы, а файла нет). Нужно отправить какой-нибудь foo.zip на девайс? Будь добр, сперва переименуй его в, скажем, foo.zip.mp3, и только тогда будет тебе "щщастье"...

Честно говоря,

Честно говоря, для меня понятие "user-friendly" стараниями мелкомягких и прочих корпораций настолько дискредитировано, что иначе чем "придумано маркетологами для идиотов" я его воспринимать уже не могу.

Поправка

CyanogenOS -> CyanogenMod (исправленному верить, как говорится)

admin аватар

Увы

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

Тогда

Можно ли считать ARM и MIPS процессоры безопасной и достойной альтернативой процам Интеллов и Амудэ? Игры не интересуют, главное чтобы запускались *NIX системы и выполнялся стандартный круг задач (Интернет, верстка текстов, работа с медиафайлами, программирование, научные вычисления и пр.)

admin аватар

Чёрт их знает

Возможно. Хотя если в ARMах тоже что-нибудь найдут, лично я не удивлюсь.

Puri.sm

Есть такая фирма Puri.sm, они выпускают ноутбуки с отключенным IME, свободным BIOS и с форком Debian в качестве ОС и прочими ништяками в плане безопасности и приватности, при этом ноутбуки имеют современный дизайн и широкие конфигурации железа. Самое интересное, что это тоже краудфандинговый проект и осуществляют доставку в любую точку планеты (таможенные пошлины оплачиваете сами). В скором времени обещают выпустить полностью свободный смартфон. Недостаток один - эти ноутбуки стоят как макбук, а то и дороже, но как говорится "Freedom isn't free".

И снова о JavaScript...

Андрей Викторович, тема JS и вообще исполняемого кода в браузерах здесь обсуждалась неоднократно и, в целом, себя изжила, да и ответ на вопрос о правомочности использования разномастных "скриптиков" на web-страничках для любого мало-мальски активного пользователя Интернета с машиной "не первой свежести", имхо, очевиден. Но можно ли узнать ваше мнение касательно JavaScript как явления вообще (безотносительно его изначальной web-ориентированности)? В последнее время достаточно активно развиваются JS-движки и системы на их основе, превратившие JavaScript в "оффлайновый" скриптовый язык. И если с Node.JS все понятно - он давно разросся в JS-аналог монструозного питоновского npm с обилием пакетов разной степени паршивости на любой чих, то весьма интересно, имхо, выглядит изначально ориентированный на встраиваемое использование движок Duktape, состоящий из одного сишного файла и двух заголовочников и не требующий вообще никаких внешних зависимостей. JavaScript без многочисленных web-специфичных надстроек крайне лаконичен - это, в принципе, чуть-чуть "присахаренный" Lua, принципиальных отличий между ними практически никаких. Имеет ли он право на жизнь в таком виде, как по-вашему?
P.S. На всякий случай: я не адепт JavaScript и не web-разработчик вообще, просто хочу услышать мнение авторитетного человека и расширить кругозор.

Вдогонку

Возможно, в контексте браузерного JS кому-то покажется интересным сей текст. Хотя такой эсперимент, разумеется, каждый может провести самостоятельно.
P. S. Андрей Викторович, если не секрет, что за софтина у вас генерирует такую лютую капчу?

Проблема

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

let sortedArray = unsortedArray.sort((a, b) => a-b);

Казалось бы, в чём подвох? А вот "крутые разрабы" теперь, похоже, вообще забыли про ключевое слово function и лепят из "стрелочек и скобочек" такую лапшу, что небезызвестный Brainfuck обзавидуется (полюбуйтесь хоть на оф. документацию к Node.js, которую, по идее, не последние раздолбаи писали).
Но JS, всё же, не самый плохой язык, а с приходом ES2015 ещё и ставший довольно выразительным, если подходить к его использованию с умом и невысоким коэффициентом кривизны рук.
P.S. Из вашего комментария можно сделать вывод, что есть тут некоторое лукавство: в предмете вы все же разбираетесь, т.к. вопрос, по всему видно, не праздный и продиктован некой насущной потребностью. Зачем вам в таком разрезе спрашивать чьего бы то ни было разрешения на использование того или иного инструмента, не совсем понятно. Новичку вряд ли бы понадобился встраиваемый язык в сишном проекте. Ну а раз душа лежит к JS, берите этот самый Duktape и пользуйтесь, а уж пользователи вашей программы дадут ей оценку.

Вот буквально

Вот буквально вот только что попался на глаза любопытный пример из одной статьи - функция на JS, перемножающая две матрицы 2x2:

const mul = (
  [
    [a1, a2], 
    [a3, a4]
  ],   
  [
    [b1, b2], 
    [b3, b4]
  ]) => 
  [
    [a1 * b1 + a2 * b3, a1 * b2 + a2 * b4],
    [a3 * b1 + a4 * b3, a3 * b2 + a4 * b4]
  ];

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

JS-макаки

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

Веб-макака с

Веб-макака с радостью помигает светодиодом программой на жиэсе
Вот это-то и страшно: до недавнего времени программирование микроконтроллеров оставалось одной из немногих областей в IT-сфере, для входа в которую в обязательном порядке требовались мозги. Становится не по себе, когда на том же Тюбике взрослые дядьки с детским восторгом расписывают прелести Espruino или MicroPython и даже дают "типа уроки", ни хрена не понимая, что творится у железки под капотом. Вот выпустили китайцы в свое время ESP8266 - весьма интересная платформа с массой плюшек за копейки. Но найти в Интернете хоть какую-нибудь информацию по нативной разработке под этот камушек практически нереально. А ведь есть и тулчейн, и документация; но народу гораздо проще накатить туда Espruino, NodeMCU или MicroPython (а чо, 80-160 Мгц и 4 МБ флеша и не такое стерпят), а потом строчить посты / снимать видосики "как я делал автополив с сервером на питончике". IoT, хуле.

ESP8266

Из википедии:
Производитель не предоставляет документации на внутреннюю периферию микроконтроллера.
Тут как бы уже понятно позициониронаие данного изделия - всяческие наколенные поделки для т.н. IoT.
Далее:
Вместо этого он дает набор библиотек, через API которых программист получает доступ к периферии.
Ну "спасибо". Прям WinAPI в сфере эмбеддинга какой-то...
Поскольку эти библиотеки интенсивно используют ОЗУ контроллера, то производитель в документах не указывает точное количество ОЗУ на кристалле, а только приблизительную оценку того количества ОЗУ , что останется пользователю после линковки библиотек — порядка 50 кБ.
Дичь полная. Всерьёз рассматривать этот камень для нормальных проектов нельзя.
есть и тулчейн
Так себе тулчейн, мягко говоря, если для работы с периферией требуются библиотеки.
Прошивки с встроенными интерпретаторами разнообразных языков высокого уровня. Эти прошивки позволяют подгружать через UART и исполнять скрипты разработчика устройства.
Ну тут уже макаки оторвались на полную: MicroPython, Lua, жабаскрипт, Basic. Лучше языков для написания прошивок не найти, ага.

Производитель

Производитель не предоставляет документации на внутреннюю периферию микроконтроллера
набор библиотек
Это вы совершенно правильно отметили, но всё же API - меньшее зло в сравнении с чисто интерпретируемым исполнением. Дело даже не в том, кто кому чего предоставляет - прошивка Espruino на JS появилась сначала для STM32, все пороха которых как раз подробнейшим образом описаны в тысячестраничных даташитах. Та же HAL для STM32 или, прости Господи, Arduino - вполне себе открытые библиотеки, но есть персонажи, мигающие светодиодом через digitalWrite() и блокирующую задержку, основанную на декременте переменной в цикле, знать не знающие ни о каких регистрах или таймерах, в глаза не видевшие ни документации производителя, ни кода своих излюбленных библиотечек, но при этом мнящие себя матёрыми электронщиками. Но если у ардуинщика ещё есть шанс эволюционировать, то с питонистами-жабаскриптерами, каким-то образом оказавшимися "при железе", всё гораздо печальнее. А уж с каким воодушевлением они рассказывают про "упрощение разработки"! Отправить бы их на денек-другой лет на 30 назад и заставить перепечатывать шестнадцатеричный дамп операционки для ЮТ-88 с пожелтевшей странички - может, дури бы поубавилось...
Так что спорить о плюсах и минусах того или иного камня большого смысла нет - от любителей скриптиков, пишущих код торчащими из пятой точки пальцами, наличие документации производителя, увы, не спасёт. ESP8266 после выхода, вроде, начинали реверсить, хотя возможно, что сейчас всё это заглохло, не знаю.

Документация

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

И откуда у них

И откуда у них такая нездоровая тяга к нецелевому использованию браузера
Из благих намерений, как обычно: представляете, бедному-несчастному пользователю не придется качать и устанавливать компиляторы-программаторы-вот-это-вот-всё, достаточно ткнуть мышкой в браузере и радостно пустить слюну. Кто же виноват, что кому-то в свое время показалось удобным забивать гвозди дохлой кошкой вместо микроскопа, который вместо молотка...
Статейку про WebFPGA я видел. Особо нет желания разбираться, что там к чему, но, поскольку заявлена поддержка только Lattice iCE40, есть подозрение, что ребята просто взяли исходники Yosys, прогнали через какой-нибудь asm.js и прикрутили к этому делу GUI, чтобы мышкоблудить удобно было, вот и весь стартап. Короче, как говорил М. Н. Задорнов, "вот эту бы энергию, да на пользу Родине". Если бы они зареверсили файлы прошивок хотя бы парочки наиболее распространенных альтеровских-интеловских ПЛИСин да написали свободный легковесный маппер или хотя бы библиотеку для того же Yosys, чтобы отказаться при разработке под ПЛИС от многогиговой проприетарщины, цены бы им не было. Но это же не модно...

FPGA

А стоит ли заморачиваться с реверс-инжинирингом этих самых ПЛИС ? ) В последние несколько лет из каждого утюга про них вещают, неужели есть какие-то реальные области применения программируемых микросхем, помимо прототипирования с их помощью ? Стоимость, по сравннению с MCU, у них, можно сказать, запредельная. О широком применении их в разработках не может идти и речи.

Надо сказать,

Надо сказать, что мы с вами изрядно отошли от темы - начали с JS, закончили обсуждением разномастных железяк. Интересно, Андрей Викторович еще долго нас терпеть будет? :-)
А стоит ли заморачиваться с реверс-инжинирингом этих самых ПЛИС ?
Ну, все полезнее, чем сайтики клепать на JS.
неужели есть какие-то реальные области применения программируемых микросхем
О широком применении их в разработках не может идти и речи
А широкое применение и не нужно - это устройства для специфических задач, например, для хитрой цифровой обработки сигналов, высокоскоростных интерфейсов и т. д. То, что
В последние несколько лет из каждого утюга про них вещают,
не говорит ни о чем: для широкой публики стал доступным некий новый/необычный/непривычный (подчеркните нужное) инструмент, вот и вещают. Кому-то кажется, что нашлась серебряная пуля для всего на свете, кому-то просто в диковинку, а заядлым хоббийщикам часто и вовсе наплевать на финансовую сторону вопроса или оправданность использования того или иного камня, только дай новую железку пощупать. И каждый считает своим долгом поделиться "передовым опытом", пусть даже это светодиодная мигалка.
Короче, пусть вещают, время покажет. В конце концов, в массе гуляющих по Интернету "проектов" и микроконтроллер можно двумя транзисторами заменить, но это уже давно ни у кого ни раздражения, ни недоумения не вызывает - может, лет через несколько и с FPGA такая же песня будет.

FPGA

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

Язычёк программирования для веб-макак

http://www.opennet.ru/opennews/art.shtml?num=50231
В более сложных ситуациях в контексте сайта запускается JavaScript-код, исправляющий проблемы с совместимостью.

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

admin аватар

Я тут недавно

Я тут недавно набрёл на термин «дихотомия Оустерхаута» (Оустерхаут — это, если что, автор Tcl). Вот тут описано, что это такое: Ousterhout's_dichotomy

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

Мораль: в роли языка общего назначения (вот эти всякие Node.JS и прочее) интерпретируемые языки не годятся вообще никакие и никогда. В роли языка для скриптинга... э... ну, может быть, но зачем, когда есть Tcl?

спасибо

Виноват, рука дрогнула: "питоновский pip", конечно же, npm как раз с Node используется, но это, повторюсь, то же, только в профиль.
За ответ спасибо, но я, правда, не совсем уловил, что не так с Оустерхаутом: встраиваемые языки разве не укладываются в "additional layers of functionality on top of existing programs"? Хотя сейчас в IT, как в доме Облонских, "всё смешалось". В любом случае, вашу мысль я уловил.

admin аватар

Встраиваемые --

Встраиваемые -- укладываются, это тот же скриптинг. Но для скриптинга есть Tcl. Да даже Лисп есть (и примеров много такого его использования). Нафиг нужен JS, кроме как для трудоустройства бывших уЭбдевелоперов с травмой головного мозга -- для меня непрозрачно.

Андрей

Андрей Викторович, а как же здоровый плюрализм? Почему "тиклем единым"? Чем объективно Tcl лучше всяких питончиков-руби-жабаскриптов? Проблема в их "мейнстримовости"? Или они просто режутся бритвой Оккама, поскольку Tcl занял эту нишу раньше? Ну так и shell-скриптами можно обойтись... Если что, никого ни на что не провоцирую - возможно, в 4-м томе "Введения в профессию" вы аргументируете такой выбор.

admin аватар

Если говорить о

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

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

Что касается всех остальных скриптовых языков, то из всех, что я видел, Tcl — единственный, имеющий логичное построение, начиная от лексики. Остальные слеплены на коленке, по ощущениям — вообще без применения головы.

В четвёртом томе про это будет рассказ. Точнее, он уже есть в той части рукописи, которая готова.

жабоскрипт

Я не видел его за пределами веба (хотя точно знаю, что иногда бывает и так, но вот лично сам не видел)
Я вот, лично, видел. Как-то раз пришлось конфигурировать PolicyKit и, опа, там в конфигах ОН.

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

polkit с той машины снёс при первой возможности.

Спасибо за

Спасибо за ответ. Т.е. проблема здесь, все же, как говорил классик, "не в клозетах, а в головах" - в той публике, с которой, как правило, ассоциируются эти языки? Никто ведь не заставляет использовать все возможности скриптового языка, включая ООП (так-то Tcl его тоже поддерживает с версии 8.6), равно как и вкорячивать интерпретаторы везде, начиная с веба и заканчивая драйверами устройств и прошивками микроконтроллеров (привет MicroPython). Но именно такими действиями адепты этих языков дискредитируют свои, возможно даже, исходно неплохие инструменты.
P.S. Андрей Викторович, а Lua так же плох? Когда-то сталкивался с ним, и мне он казался довольно неплохим примером эдакого "программистского пуританства".
P.P.S. Позвольте еще терминологический вопрос: где проходит грань, после который скриптовый язык в "умелых" руках начинает превращаться в язык общего назначения? Та же связка Tcl/Tk позволяет создавать весьма сложные программы с развитым графическим интерфейсом. В какой момент начнется использование инструмента не по назначению?

admin аватар

Т.е. проблема

Т.е. проблема здесь, все же, как говорил классик, "не в клозетах, а в головах" - в той публике, с которой, как правило, ассоциируются эти языки?

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

Но вообще разграничение выглядит искусственным. Эти языки и эта публика не существуют друг без друга, то есть они вместе составляют одно явление.

с версии 8.6

Что делать с этими "новыми версиями", я пока не понял. Видимо, его форкать придётся. Последней разумной версией Tcl была версия 8.4.

Кстати, какие-то форки вроде уже есть.

Lua так же плох?

Не так же, конечно, но Tcl всё-таки логичнее.

В какой момент начнется использование инструмента не по назначению?

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

форки и реализации Tcl

Кстати, какие-то форки вроде уже есть.

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

admin аватар

Не только, есть

Не только, есть ещё и вот такое: http://tinytcl.sourceforge.net

На Tcl можно

На Tcl можно реализовать интерактивные и при том безопасные веб-странички?

Опасно, опасно,

Опасно, опасно, вы бы хоть первое сообщение в цепочке прочитали :)

admin аватар

Ваш вопрос

Ваш вопрос лишён смысла, поскольку не вполне понятно, что такое по-вашему "интерактивные веб-странички".

Server-side scripting можно сделать на любом языке программирования, хотя лично мне совершенно непонятно, зачем это делать на Tcl, когда есть C или C++. Client-side scripting, т.е. что-то такое, что исполняется в браузере (а не на сервере) — это преступление, притом вне всякой зависимости от того, на каком языке это делается. Сейчас client-side делается на JS, поскольку браузеры ничего другого не держат, но здесь проблема не в языке, а в самой идее прислать пользователю не appearance, а behavior. За это надо если не казнить, то по меньшей мере сажать в тюрьму и пожизненно лишать права профессиональной деятельности в области компьютеров.

Проблема ещё в

Проблема ещё в том, что behavior behavior'у рознь - всё-таки между "интерактивными страничками" десятилетней давности и современными "дистанции огромного размера". Одно дело, когда на всю страницу у вас был единственный скрипт-однострочник, слушающий событие и обновляющий по его возникновению текст внутри div'а (пример условный), другое - современные монстры-фреймворки, которые тянут за собой мегабайты левого кода для "совместимости". И вот когда сгенерированный каким-нибудь конструктором сайт обрастает "интерактивщиной", притом тоже в виде выхлопа какого-нибудь кодогенератора (о, Элберет, они даже скриптики вручную уже не пишут), получается неповоротливая, жрущая память как не в себя гадина с веселеньким узором. Притом усилия, которые затрачиваются современными "девелоперами" на создание столь модных нынче одностраничных веб-приложений, многократно превышают усилия, необходимые для создания дюжины статичных страничек, способных покрыть весь требуемый от такого сайта функционал. Пару лет назад была опубликована на Хабре статья из разряда "в каждой шутке доля шутки", очень хорошо описывающая современное положение дел в веб-разработке. Остаётся только удивляться, с каким усердием человек порой способен придумывать себе проблемы.

admin аватар

behavior behavior'у

behavior behavior'у рознь

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

Сама мысль о том, что браузеру клиента можно диктовать поведение, чудовищна и преступна, и всякое "да мы же только чуть-чуть" здесь не канает.

всякое "да мы же

всякое "да мы же только чуть-чуть" здесь не канает
С этим и спорить не собираюсь; комментарий, по большей части, был о том, что "отягчающих обстоятельств" в вебе с каждым днём становится всё больше и больше, причём для большинства используемых ныне технологий характерно срастание appearance и behavior, которого не было в подходе с "чуть-чуть" - отключение javascript там приводило всего лишь к частичной потере сайтом функционала. Квинтэссенция - сайт, демонстрирующий вам просто белый экран при отключенном javascript (а таковы продукты, порождаемые всякими модными Angular и React, в которых даже примитивные формочки лепятся на JSX - помеси JS и XML).

Андрей

Андрей Викторович, вопрос касательно интерактивных страничек - похоже, сколько людей, столько и подходов к трактовке этого понятия. Для большинства client-side "свистелок" достаточно CSS, но, предположим, есть такая абстрактная задача: на веб-страничке требуется отображать показания с нескольких датчиков (температура/давление/влажность), возможно - строить графики, причем желательно, чтобы показания изменялись динамически, без перезагрузки страницы. Как я понимаю, такие вещи "обычно" делаются по пинку таймера, крутящегося где-то в JS-коде. Можно ли как-то обновлять часть страницы, содержащую эти данные, по инициативе сервера, не прибегая к JS? Или для решения такой задачи следует писать приложение для клиентской стороны? Простите за, возможно, глупый вопрос - с вебом дела не имел.

admin аватар

CSS1 "достаточно"

CSS1 "достаточно" разве что для изменения внешнего вида элементов странички под мышиным курсором. CSS2 и 3 недопустимы, поскольку тьюринг-полны.

Для обновления странички по инициативе сервера есть какие-то очередные "модные" технологии, но они ничем не лучше JS: обновление страницы — это тоже поведение.

Когда-то давно для этих целей (например, для веб-чатов эпохи второй половины девяностых) использовалось штатное периодическое обновление документа, предусмотренное протоколом HTTP, это и сейчас, естественно, возможно сделать — например, все обновляемые часть загнать в тэги iframe в виде отдельных совсем мелких html-документов ("совсем мелких" в данном случае означает -- меньше одного килобайта, чтобы в один IP-пакет укладывались вместе с заголовком запроса) и в заголовке HTTP-ответа присылать указание на обновление (через пять секунд, или через две секунды, или сколько там надо в зависимости от задачи). Это точно лучше, чем JS и всякие webPush'и, хотя бы тем, что алгоритмической полноты тут в помине нет. Вот только это извращение. Да, для таких целей должно быть специальное приложение, а не браузер несчастный.

Андрей

Андрей Викторович, а что вы думаете о Wine? Считаете ли вы, например, для себя возможным использовать подобные средства, или предпочитаете отказаться от запуска Windows-only программ в среде Linux, даже если альтернатив нет или они проигрывают по тем или иным показателям? Вопрос не провокации ради, но, к сожалению, не всякому софту (да хоть и играм, чёрт их дери) возможно найти близкую по функционалу замену.

admin аватар

Я не использую

Я не использую Wine -- пока ещё ни разу не возникло в этом потребности.

По поводу "если альтернатив нет" — ну, так практически не бывает, это разве что всякие маргинальные случаи: например, из моей практики — вот для налоговой или ПФР нужно некие бумажки подготовить в определённом формате и для этого есть какая-то "бесплатная" программа, естественно, под Win. Для этой мерзости у меня есть ноутбук с WinXP :-) Включается в среднем раз в два месяца, остальное время выключен и завален бумажками.

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

К сожалению, Linux

К сожалению, Linux не особо интересен для разработчиков игр, хотя в последнее время ситуация улучшается. В принципе, разнообразные инди-проекты с небольшим бюджетом (меня вот зацепили "программистские" головоломки от Zachtronics) все чаще имеют поддержку Linux на релизе, а вот с проектами AAA-класса все гораздо печальнее. В таких случаях только пляска с бубном и Wine остается (ну, есть Steam для Linux, но там, похоже, что-то Wine-образное крутится, только и всего).
P.S. (специально для Андрея Викторовича) Да, я знаю про NetHack ;)

"программистски

"программистские" головоломки от Zachtronics
"Знаем об его работах" (c) Но если вас увлекает программирование на игрушечных языках и поиск ошибок в написанном на них коде, обратите внимание на милую сердцу любого линуксоида игру - gdb. В головоломках от Zachtronics имеет место еще и соревновательная часть - там доступны данные по скорости работы и объему кода в решениях других игроков. Так вот, тут рецепт тоже прост до безобразия: берете любую не особо сложную софтину, собираете с ключом -pg, запускаете под игрой gprof, изучаете ее выхлоп (колонки time и calls, в первую очередь), а затем запускаете редактор кода. Серьезно, не оторветесь!

admin аватар

Кстати, да

Поддержу предыдущего оратора :-)

> с проектами

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

Я совершенно не против игр и прочих развлечений как таковых, но игры, книги, музыка, кино и прочее должно быть максимально авторским. А не всего лишь очередным сравнительно честным способом отъёма денег у населения, поставленным на индустриальный поток. И с IT, кстати, та же фигня.

admin аватар

К счастью, мне

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

Вы говорите,

Вы говорите, что вам не интересны(и вы против) вообще любые игры(даже самые простые) или только те, на которые можно потратить деньги?

admin аватар

Я не против игр

Я не против игр как таковых (если не выходить за пределы разумного). Я против (а) проприетарщины и (б) уплаты денег за воздух.

К счастью, мне

К счастью, мне совершенно не интересны ни сами разработчики игр, ни та идиотская проприетарная хрень, которую они разрабатывают.
Ну, на вкус и цвет, как говорится, все фломастеры разные - хрени там хватает, но, имхо, попадаются и крайне годные экземпляры. Хотя, конечно, если вопрос проприетарщины принципиальный, их и рассматривать смысла нет, здесь согласен на все 100%.
Хотелось бы отметить вот что: неинтересен Linux, скорее, не разработчикам (им-то, в сущности, какая разница?), а кровопивцам-издателям, ибо крутятся в этом деле бешеные бабки, до разрабов порой и не доходящие. Особенно прикольно наблюдать "эксклюзивы для консолей": дескать, на PC пиратят все, кому не лень, вот у нас $GAME_NAME only for PlayStation 4 - только купите (и то, и другое, ясен пень)! Про то, что PS4 - это, в сущности, брендированный x86-комп с весьма посредственными характеристиками, а за красивым словом Orbis скрывается FreeBSD, почему-то предпочитают умолчать. Так что правит бал тут, как правило, красивая обёртка.

admin аватар

если вопрос

если вопрос проприетарщины принципиальный, их и рассматривать смысла нет

Именно так

не разработчикам (им-то, в сущности, какая разница?), а кровопивцам-издателям

аминь

Tiny Core?

Добрый день. Андрей Викторович, можно узнать ваше мнение о Tiny Core Linux? На фоне современных монстров, имхо, весьма интересный дистрибутив. Да и в сторону systemd эти ребята, похоже, даже смотреть не собираются.

admin аватар

А оно вообще живое?

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

Да

Живет и здравствует, регулярно обновляется.

Вполне и очень даже

Для x86/x86_64 версия 10.0 вышла 7.11.2018 - пруф. А вот список пакетов - extensions по их терминологии.
P.S. Хронологию можно восстановить по упомянутой в новости версии ядра - 4.19.10. Но на счет сайта согласен - информативностью не отличается. Зато без JS :)

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

Здравствуйте, Андрей Викторович! Заинтересовал ваш недавний комментарий касательно поисковиков, где вы писали, что рано или поздно придется запретить все виды рекламы. Не могли бы вы поподробнее рассказать, что же, на ваш взгляд, должно произойти, чтобы "такое счастье нас постигло"? Вопрос не холивара/троллинга ради, чисто человеческое любопытство.

admin аватар

Могу только дать пару ссылок

Вот раз:

http://infoviolence.org/ru/vblog/ (если предпочитаете youtube, то вот: https://www.youtube.com/c/infoviolence)

Вот два: http://www.croco.net/croco/papers/stolyarov_philosophy_thesis_infofreedo...

А "что должно произойти" — ну это довольно очевидно: людей происходящее должно задолбать в достаточной для социальных потрясений степени.

Задолбать

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

admin аватар

Поживём-увидим

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

Сел, естественно. Аж, если мне память не изменяет, на 12 лет.

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

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

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

Вспомнился

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

admin аватар

Каттнер

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

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

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

Здравствуйте! Можете пожалуйста подробно рассказать об учебных предметах, которые преподаются в ВМК?

admin аватар

8-()

Нет, не могу. Эта тема реально необъятна.

the majority is always wrong

Андрей, вы много говорите о, мягко говоря, недостатках мейнстрима в IT и ориентированной на него индустрии. Может быть вам будет интересна эта ссылка: the majority is always wrong.

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

admin аватар

Спасибо :)

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

А вообще прикольный текст, спасибо :)

Eliezer Yudkowsky

Если вы вдруг не знаете, то это тот самый Элиезер Юдковский, который написал широко известную в узких кругах книгу "Гарри Поттер и методы рационального мышления". Ну и один из основателей блога LessWrong, о рациональном мышлении и преодолении когнитивных искажений.

admin аватар

Спасибо ещё раз

Да, не соотнёс. Книжку я читал, был доволен как три слона. Похоже, Юдковский — человек весьма нетривиальный.

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

Здравствуйте!
Когда вновь появится возможность приобрести ваши книги с доставкой их в регионы? С лета 2018 много времени прошло, способ так и не был найден? Очень уж хочется иметь печатные версии ваших книг, но не ехать же в Москву за ними.

admin аватар

Увы

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

Андрей

Андрей Викторович, а можно узнать ваше мнение касательно систем автоматизации сборки, подобных CMake? Оправдано ли их использование, или это вещи "от лукавого"?

admin аватар

Не знаю как

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

Предвосхищая вопрос "за что", вот: https://openwall.info/wiki/people/croco/crocos_lamp <-- искать по слову "cmake".

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

Нельзя ли поподробнее?

Очень неожиданное утверждение.

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

Нельзя ли поподробнее о проблемах, возникающих при сборке проектов, использующих cmake? Лично я, собирая различные проекты, наблюдал прямо противоположную картину: проекты на cmake или automake собирались без проблем и всегда одинаково, в то время как в проектах с рукописным make-файлом, этот Makefile, как правило, приходилось сильно допиливать в случае, если система хоть немного отличается от той, что была у разработчика. Правда я не пытался собирать пакеты с этими программами, просто устанавливал у себя в системе. По указанной вами ссылке указано про проблемы с DESTDIR, но если верить документации (https://cmake.org/cmake/help/latest/envvar/DESTDIR.html), то вроде бы он и в make-файлах, порождённых cmake, работает. Кстати, в проекте с рукописным Makefile это почти наверняка не будет работать, если только автор программы лично этим не озаботился, вероятность чего на практике стремится к нулю.

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

Аналогию с интерпретируемыми языками вообще не понял. Использование cmake вроде бы как раз не налагает никаких требований на систему, которая установлена у пользователю -- это просто инструмент для сборки программы, какие там требования?

admin аватар

Пожалуй, даже отвечу

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

Итак, начнём с DESTDIR. То, что по вашей ссылке — это совершенно не то, что было нужно мне. В традиционных (основанных на posix make или gnu make) сценариях сборки это обычно называется PREFIX — то место, куда программа будет инсталлирована на целевой системе, и, в частности, в её конфигурационных файлах и опциях времени сборки этот PREFIX тоже прописывается. Мне же нужно было, чтобы программа на ЦЕЛЕВОЙ системе (то есть там, где будет установлен пакет) ставилась в /usr/{bin,share,etc}, но на МОЕЙ системе — той, где всё это собиралось — чтобы команда make install добавила к этому спереди ещё ту временную директорию, которая будет закатана в пакет. Например, если на целевой системе будет файл /usr/bin/foobar, то чтобы на МОЕЙ системе make install этот файл записал в /home/avst/.rpm/(что-то-там-не-помню)/usr/bin/foobar, а потом это вот "что-то-там-не-помню" целиком закатывается в пакет (в моём случае это был, как можно догадаться, RPM).

Конечно, если автор программы конченный м$дак, он может этим "не озаботиться", но при применении обычного make я влезу в Makefile и за три минуты эту фишку добавлю, поскольку она примитивна, и сами Makefile тоже примитивны, как их хачить — очевидно. А вот cmake — это вещь в себе, с которой я не смог, как видим, разобраться в течение нескольких дней. То есть тривиальные функции — вот взять эту кучу исходников, эту груду библиотек, всё собрать и чтоб работало — там делаются без проблем, оно на то и рассчитано; но как только нужно что-то менее тривиальное — нужно копать намного глубже. Я не мог себе позволить потратить ещё больше времени (судя по всему, там счёт уже должен был идти на недели) ради одного пакета, учитывая, что эти "знания" мне не пригодились бы в дальнейшем и оказались бы просто забыты через полгода. Жизнь для этого слишком коротка.

Это, кстати, заодно и ответ на вопрос, как же "мейнтейнеры справляются". Разумеется, и RedHat, и другие конторы, содержащие мейнстримные дистры, могут себе позволить содержать целый штат людей, создающих пакеты под эти дистры. Если человек собирается упаковкой пакетов заниматься постоянно и за деньги, то потратить пару недель на освоение премудростей cmake он, в общем и целом, может себе позволить. Решает ли это возникшую проблему? Разумеется, нет. Те моральные уроды, которые используют в своих проектах cmake, получают в своё распоряжение "доброго гномика", который делает за них часть их работы (можно не писать низкоуровневые makefile'ы), но при этом, как видим, резко повышает требования к квалификации мейнтейнеров. Для мейнстрима это не проблема, а для всего, что не совсем мейнстрим — проблема, и ещё какая.

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

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

Между прочим, autoconf/autotools вообще-то из той же серии, я неоднократно видел скрипт configure, который упирался в отсутствие на моей системе неких команд, которые его афффтар посчитал само собой разумеющимися и везде заведомо присутствующими — то есть эта штука, предназначенная, чтобы адаптироваться к особенностям разных систем и через это повышать переносимость, на самом деле часто оказывается источником непереносимости. Поэтому для меня эти "инструменты" — категорическое табу, а их распространённость (пожалуй, девять софтин из десяти собираются с их помощью) для меня не аргумент вообще ни в каком виде. Современная IT-индустрия состоит в том, что идиот на кретине сидит и придурком погоняет, а потому распространённые практики авторитетом служить не могут; для меня сей вопрос решён и пересмотру не подлежит.

NB: в дальнейшей дискуссии я не заинтересован.

Но даже в

Но даже в пределах мейнстрима, как ни странно, бывают крайне "интересные" ситуации, связанные с конфликтом версий интерпретаторов или всякого другого
Не надо далеко за примером ходить - достаточно вспомнить "питонью болячку" c python 2 и python 3, которую, наверное, никогда уже не вылечат. Есть такая софтинка GPAW для расчетов по квантовой химии с интерфейсами к библиотечным функциям, написанными на этом дивном языке. Всем хороша эта свободная софтинка: и расчетных методов реализовано дикое количество, которое и не снилось иным проприетарным пакетам, и возможностей масса; можно, помимо прочего, собрать локальную версию документации в виде набора html-файлов с красивыми графиками и табличками, чтобы не тыкаться носом в их сайт постоянно. Красота, одним словом. Но вот решили разрабы перевести последнюю версию в режим "Python 3 only", а система сборки документации как работала с Python 2, так и работает. Получается интересная история: чтобы собрать документацию, нужен Python 2, но данные, которыми она наполняется, обсчитываются в ходе сборки самим GPAW, который теперь дружит только с Python 3. Без некромантии и шаманских плясок теперь никак...

admin аватар

Красочный пример безответственности

Вот так вот взяли и сломали обратную совместимость. Красота. И я не про GPAW, я про создателей самого Питона. Примерно так: «Ну что, ребята, изучили наш Питончик? Ну молодцы, а теперь ооооооппп-ля — с сегодняшнего дня он совсем другой, начинайте изучать заново!»

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

Проблема с GPAW

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

Да уж, а в

Да уж, а в некоторых особо запущенных случаях сгенеренный Makefile сам запускает configure по поводу и без. Т.е. после ./configure все чинно-благородно, запускаешь make, часа полтора вся кухня крутится, после чего рушится со словами: "Ой, а где же -lyet_another_fucked_super_puper_library?" Ставило её, запускаешь make для продолжения сборки... и обнаруживаешь, что объектных файлов-то твоих уже нет, а скрипт снова-здорова услужливо проверяет, что есть у тебя gcc, что такие-то фичи он поддерживает, и всё вот это вот заново.

Спасибо за

Спасибо за ответ, собственно, вопрос возник как раз после того, как "I wasted several days" (да-да) и "read tons of various docs", правда, не с MySQL, так что очень хорошо Вас понимаю.
В общем, нужны все эти штуки ровно для одного - навязать вынутый кем-то из самого темного места у белого мустанга "стандарт". Ну и отучить писать по-человечьи Makefile, куда ж без этого.

Андрей

Андрей Викторович, скажите пожалуйста, что вы думаете о поисковой системе YaCy.

admin аватар

Идея была хорошая

Ничего я про неё не думал, пока вы мне про неё не сказали. Просто вообще не знал о её существовании.

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

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

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

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

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

пессимизм?

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

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

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

admin аватар

Реализм, увы

Вот есть распределённые системы IM, но основная масса народу продолжает торчать в телеграмчике и вотсапчике; есть всякие диаспоры и GNU Social, но миллионы юзверей как сидели в фейсбучике и вконтактике, так там и сидят, и никакие катаклизмы вроде массовых утечек из FB и отжатия VK кровавой гебнёй у Дурова не могут повлиять на ситуацию.

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

P.S. Ах да, про Википедию. Она централизованная. От некоторых проклятий спасает то, что она при этом некоммерческая, это формальный non-profit; но, увы, сильно не от всех.

По поводу IM и

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

Я пользуюсь

Я пользуюсь джаббером, на сервере ejabberd, на смартфонах conversation, на компах gajim. Синхронизация всего со всем работает, общая история через сервер (всё равно он личный), группы есть, картинки передаются, даже вроде можно звонки сделать, но мне без надобности. Можно ставить транспорты в другие мессенджеры, но мне религия не позволяет. Работает отлично много лет, всё опенсорс, правда в Gentoo ставлю из оверлеев, в главном портадже очень старые версии.

admin аватар

Увы

Я не пользуюсь смартфонами, так что этот вопрос не исследовал.

ziglang

Здравствуйте! А что вы можете сказать о Zig? Язык с претензией на нишу C/C++, управление памятью осуществляется вручную, на оф. сайте примеры проектов, в том числе, для запуска на голом железе. Пока, правда, кажется сыроватым, но это вопрос времени.

admin аватар

Выглядит

Выглядит неплохо.

Что резко не понравилось -- unicode в языке. Работа с бинарными форматами данных -- забота библиотек, а не языка. И, увы, из приведённых примеров не видно, насколько там в действительности библиотека отграничена от языка. Термина "стандартная библиотека" эти ребята не избежали, а зря -- не должно быть такой сущности; с другой стороны, библиотека (в том числе стандартная) там импортируется в виде объекта, имеющего имя (притом заданное пользователем), что, в принципе, демонстрирует правильное отношение к библиотечным возможностям.

В общем и целом, посмотрим, что из этого всего вырастет.

Добрый день,

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

admin аватар

Слишком толсто

1) Слово inline пришло не из стандарта, а из C++, где оно присутствовало изначально (то есть до того, как за C++ всерьёз принялись стандартизаторы). C99 лишь "согласился" с реальностью, в которой на тот момент жили едва ли не все компиляторы. Ответом на ваш вопрос, видимо, является то, что лично я слово inline использую, в том числе и в программах на чистом Си.

2) Не думаю, что для вас приходить на этот сайт было хорошей идеей.

Простите, если

Простите, если мой вопрос показался вам оскорбительным, это ни разу не была попытка "потроллить" или как-то зацепить, с большим уважением отношусь к вам и вашей работе. Я знаю, что inline появился с C++, знаю о __inline и __inline__, с незапамятных времён существующих в gcc и иже с ним. Просто, зная ваше отношение к пресловутым "стандартам" и попыткам кровосмешения, породившим т.н. C/C++ (спасибо Неназываемой компании), как раз и хотелось узнать, что предпочли бы в таком случае именно вы - небезопасные, но существовавшие испокон веку макросы, или встраиваемые функции, которых не было в изначальной концепции языка Си (вы как-то писали здесь, что не используете namespace в C++ именно по этой причине), только и всего.
P.S. Если бы я видел, что вы используете inline в чистом Си, вопрос бы отпал сам собой. Ещё раз прошу извинить.

admin аватар

принято

namespaces как раз пришли из стандарта, то есть пока их стандартизаторы не придумали, их не было. Так что причина не "эта", а другая. Const тоже из C++ пришёл, и его даже нет в книжке Кернигана и Ритчи, то есть авторы языка так и не одобрили const, но и его я использую, и не считаю, что он пришёл из стандарта. Больше того, я в некоторых (впрочем, редких) случаях использую stdint.h — но я вообще не считаю библиотеку частью языка ни в каком виде, и если есть библиотечная возможность, которая мне нравится и кажется осмысленной, то мне пофигу, что она есть в стандарте.

Ну а "кровосмешение" бывает осмысленное и бессмысленное. Const и inline -- это осмысленно. Комментарии двумя слэшами или какой-нибудь stdbool.h -- бессмысленно.

Linux для новичка

Какой дистрибутив Linux, кроме Ubuntu, вы бы посоветовали новичку?

admin аватар

Сложный вопрос

У убунты есть несомненное достоинство — она ставится легко. На этом её достоинства заканчиваются.

Если не боитесть сложностей — берите вообще любой дистрибутив, лишь бы он не был чисто серверным или супер-замороченным вроде Gentoo. Ну, возможно, лучше выбрать какой-то без systemd.

Lubuntu == Ubuntu?

У Lubuntu есть достоинства, или это тоже самое что Ubuntu?

Что вы думаете

Что вы думаете о дистрибутиве fedora!Будет это лучшим выбором чем ubunta и lubuntu.

Для

Для повседневных задач, да и для обучения программированию, уверяю вас, разницы между дистрибутивами практически никакой - среднестатистический пользователь работает не с системой, а с софтом. Администрировать - да, везде есть свои заморочки. Но у Fedora есть большой плюс для начинающих пользователей - громадное количество пакетов в репозиториях, начиная от распространенных программ и заканчивая спецсофтом для научных вычислений. В то же самое время можете столкнуться с проблемой: Fedora была, есть и будет своеобразным полигоном для тестирования фич, планируемых в RHEL, поэтому радость от регулярного появления обновлений пакетов может быть омрачена, когда вам подсунут альфу/бету.
P.S. Можно дать вам совет? Лучше не пытайтесь затевать спор о преимуществах того или иного дистрибутива с человеком, который его не использует. Примерно в 80% случаев этот спор будет подобен спору с раввином о пользе свинины :)

admin аватар

Нет, лучшим не

Нет, лучшим не будет. Худшим, впрочем, тоже не будет. Дерьмо — оно и есть дерьмо.

admin аватар

Там другой

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

О JavaScript

Какие возможны альтернативы JavaScript в плане снижения нагрузки на сервер со стороны клиентов и экономии трафика? Вопрос особенно актуален для крупных сайтов с большой базой данных.

admin аватар

расстрелять, немедленно расстрелять (с)

Вопрос был бы корректен, если бы «решение» в виде JavaScript можно было бы считать хоть сколько-нибудь допустимым; но это не так, применение JS на сайтах по сути своей преступно. С тем же успехом подсудимый, которого отправляют в тюрьму за серию квартирных краж и разбойных нападений, мог бы требовать от судей указать ему «альтернативу кражам в плане быстрого получения большого количества денег, что особенно актуально, когда не хочется работать».

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

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

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

Справедливости

Справедливости ради надо отметить, что одно полезное дело хозяева таких сайтов всё-таки делают, пусть и неосознанно - повышают компьютерную грамотность части своей аудитории. Из десяти человек четверо смиренно продолжат сидеть "на проводе", сетуя, что не везде ловит Wi-Fi/3G, трое уйдут на другой ресурс, парочка заплатит, подпишется на какую нибудь рассылку или репостнет чего-нибудь во вконтактике, а один нажмет Ctrl+U, пороется в исходнике страницы (пусть предварительно огребет трулялей на каком-нибудь форуме, выясняя, как это сделать), пошаманит с GET/POST-запросами (опять же, после того, как его окрестят м@даком на том же Lor'е за нубские вопросы), получит вожделенное "быстро бесплатно в хорошем качестве без смс и регистрации" и... через пару лет запилит аналогичный сайтик с преферансом и куртизанками, ибо профит (шутка, конечно, хотя, как известно, в ней обычно доля шутки).
Впрочем, отношения к таким "хозяевам" это не меняет ни на йоту.

admin аватар

LOL что?

Из десяти человек?! Один? Вы в каком воображаемом мире поселились, простите? Перечисленное вами сделает хорошо если один из десяти тысяч.

Ну промахнулся

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

admin аватар

Попробуйте

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

Мне пока группы

Мне пока группы первокурсников хватает )))

admin аватар

Неееее, это не то

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

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

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

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

Что вы думаете по поводу Google-free инициативе? А в частности по поводу предлагаемых тут https://nomoregoogle.com/ альтерантив?

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

admin аватар

Гм

С одной стороны, давно пора.

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

Поясните,

Поясните, пожалуйста, что значит не «любезно предоставленная добрым дядей», а «своя»? Нужно разворачивать свой поисковик, DNS, сервис карт или приложение для перевода?

admin аватар

Посмеялся

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

Далее, DNS. Разумеется, в любой локальной (стационарной) сети он должен быть свой, у меня квартирную сеть обслуживает DNS-сервер, поднятый на той Raspberry Pi, которая у меня по совместительству работает маршрутизатором и NAT'ом. Времени на его развёртывание у меня ушло минут семь от силы.

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

Сложнее всего с поисковиком. Приличный поисковик стоит много ярдов баксов, тут уже никак — не всякое государство может себе такое позволить, о частных лицах я вообще молчу. И это проблема, причём проблема тут даже не в том, что поисковики реально нужны, а в том, что из-за их наличия и доступности в Интернете совершенно не развиты справочно-каталожные службы (directory services). Между тем, поиск по вхождениям текста - это совершенно не панацея, у меня бывали случаи, когда мне не удавалось отыскать текст, который я хорошо помню и который точно есть в Сети. Далеко не всегда результаты текстового поиска - это то, что нужно пользователю, в отличие от структурированных каталогов; но в большинстве случаев текстовый поиск оказывается тупо быстрее, так что все пользуются им, а в результате нормальных каталогов просто нет. Так что поисковики - это зло, причём просто как явление.

Между прочим, достаточно запретить все виды рекламы (что рано или поздно сделать придётся), и поисковики сдохнут сами собой, что, с моей точки зрения, было бы просто замечательно; но Интернет к этому явно не готов (ибо замены нет, directory services в загоне), а стоило бы.

Да, кстати, если вы сюда пришли поспорить, то пойдите поспорьте с кем-нибудь ещё.

Не могли бы вы

Не могли бы вы описать случаи, при которых используется ключевое слово volatile и const volatile? В книгах об этом пишется как-то вскользь, а в Кернигане-Ритчи даже не встречается.

admin аватар

Конечно, не встречается

У Кернигана с Ритчи и const вообще-то не встречается.

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

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

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

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

admin аватар

Очевидно же

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

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

Volatile и многопоточность

Прошу прощения, что вмешиваюсь в диалог. Не так давно начал знакомство с pthreads.Уважаемый Андрей Викторович, хотелось бы узнать ваше мнение по поводу целесообразности использования ключевого слова volatile в многопоточных программах. Например, имеет ли смысл объявление общих для нескольких потоков переменных с ключевым словом volatile, если используются такие примитивы синхронизации, как мьютексы? Поиск по этому вопросу привел меня к диаметрально противоположным результатам: кто-то утверждает, что volatile полезен в многопоточных программах, кто-то - что отключение оптимизации не несет в себе положительных эффектов, а может даже "замедлить" выполнение кода. Надеюсь, вы сможете пролить свет на этот вопрос. Спасибо!

admin аватар

Вас на поисковиках забанили?

Вот тут https://stackoverflow.com/questions/4557979/when-to-use-volatile-with-mu... обсуждение, к которому мне технически добавить нечего — здесь даже рассмотрены экзотические случаи, когда разделяемую переменную можно (!) не обвешивать мьютексом без потери корректности программы, и тогда (ага) нужен volatile.

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

Что лучше

Что лучше использовать при итерации цикла: ++i или i++? В Интернете не нашел однозначного ответа на этот вопрос. Вроде первый вариант выполняет на одну инструкцию меньше и для больших циклов разница в скорости прогонки будет заметной. С другой стороны, вроде современные компиляторы оптимизируют этот момент и становится без разницы как писать. Я могу, конечно, вопреки привычки использовать только первый вариант, но хотелось бы прояснить этот вопрос раз и навсегда. Спасибо.

admin аватар

++

Вне контекста вопрос лишён смысла, но я попробую восстановить несколько разных контекстов. Итак, если вы пишете на чистом Си, то в роли i у вас или целочисленная переменная (не обязательно int, это может быть целое любого размера), или указатель. Поскольку речь идёт об итерации (по-видимому, цикла for), операция ++ используется ради побочного эффекта, то есть вас не волнует значение, ею порождаемое (то, чем как раз и отличаются ++x и x++). Так вот, в этой ситуации, можете быть уверены, в машинном коде окажется команда inc, причём переменную цикла ваш компилятор будет стараться разместить в регистре, так что это будет что-то вроде inc ecx. И это никак не зависит от формы, в которую вы облечёте вашу операцию, будь то ++i или i++. Или даже i+=1. Да напиши вы хоть i=i+1, машинный код получится тот же самый. Компилятор не дураки писали. При этом традиционно более популярен именно вариант i++; почему? а чёрт его поймёт.

Если даже вы пишете на Си++, но не пользуетесь мерзким подельем по имени STL, то ситуация в общем и целом будет ровно та же.

А вот если вы таки используете STL, в котором все так называемые итераторы за каким-то лядом реализуют обе формы ++, причём в сигнатуре, "соответствующей исходной семантике" (кто только эту хрень выдумал), то всё резко меняется. В форме ++i значением, возвращаемым из operator++, будет новое значение итератора, так что, как правило, этот operator++ имеет форму примерно такую:


class A::B::C::whatever_damn_iterator {

    const whatever_damn_iterator& operator++()
        { /* "двигаем" итератор */ return *this; }

};

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

Совсем другое дело -- i++. Тут нужно вернуть то значение, которое _было_, поэтому ссылка на себя не работает. Получаем вот такого монстрика:

class A::B::C::whatever_damn_iterator {

    whatever_damn_iterator operator++(int)
    {
        whatever_damn_iterator save(*this);
        /* двигаем итератор */
        return save;
    }

};

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

В итоге STL-фаги и прочие маньяки "рекомендуют" в Си++ писать всегда ++i. Вообще. Просто вот привыкнуть так писать и никогда не писать наоборот. Чтобы случайне не вызвать "не тот" метод итератора.

Что по этому поводу можно сказать -- обычно на мой сайт STL-фаги не ходят :-)

Спасибо за

Спасибо за столь развернутые и подробные оббъяснения! Я не STL-фаг, но теперь, благодаря вашему ответу, понимаю откуда ноги растут во всей этой нелогичности и несуразности. Обидно, что эти нелогичности и несуразности распространяются в Сообщество и приводят к вопросам, подобным моему.

Поиск по тексту книги

Наверняка вопрос поднимался, но искать здесь и вопрос и ответ крайне сложно, проще обновить тред.
Я так понимаю PDF документ был каким-то образом защищен от копирования текста и почему то от поиска по тексту (видимо это побочный эффект).
Есть ли способ, всё таки как-то получить возможность осуществлять полнотекстовый поиск?

P.S.: Замучился капчу подбирать...

admin аватар

Нет

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

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

djvu

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

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

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

Очень интересно узнать ваше мнение по поводу ключевого слова auto, которое появилось в c++11. Я знаю ваше отношение к новым стандартам языка C++ и его «стандартной» библиотеке, поэтому мой вопрос касается только конкретно этой новой возможности. Я понимаю, что даже добавление одной глупости в стандарт может сделать его употребление невозможным в принципе (по идеологическим убеждениям), но может с auto все нормально? Не могли бы вы рассказать, какие вы видите беды при его использовании (если вы их видите)?

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

Из всех

Из всех новшеств, появившихся в C++ "благодаря" стандартизаторам, относительно осмысленными и полезными можно назвать разве что enum classes, не вываливающие имена констант в объемлющее пространство имен. Причем пользы от них, имхо, было бы больше в чистом Си, ибо в C++ и без них можно было писать так

struct RainbowColors {
  enum { red };
};

struct RGBColors {
  enum { red };
};

и использовать RainbowColors::red и RGBColors::red без конфликта имен. Возможно, существуют где-то в природе ситуации, в которых оказываются полезными variadic templates, хотя мне доводилось наблюдать разве что "игры в функциональщину" на их основе.
Все остальное - как раз та самая одна сплошная глупость, делающая употребление стандарта невозможным не только, как вы изволили выразиться, по идеологическим убеждениям, но и по соображениям здравого смысла.

admin аватар

Вот хоть убей,

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

При

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

admin аватар

Вот уж вряд ли

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

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

А что вы

А что вы думаете про лямбды?

admin аватар

Что-что, чушь собачья

Это ведь даже не функции, а функторы -- объект типа структура, для которого вводится операция вызова функции. И даже для такой дебильной реализации пришлось язык, которому уже и так "хорошо", искривить ещё больше.

Вообще любая такая возможность компилятора, которая не может работать без поддержки со стороны библиотеки — это приём, с моей точки зрения, категорически запрещённый, и тех моральных уродов, которые уже натащили таких возможностей в "стандарты" C++, очень хочется убивать, причём долго и со вкусом. Это раз. Между прочим, первой такой возможностью была, увы, обработка исключений — то есть ещё до первого "стандарта"; впрочем, там изначально была поддержка со стороны "невидимого" рантайма, а вот при появлении RTTI (и когда исключения через неё переделали) всё стало совсем плохо со всеми этими типами идентификации типов, которые описаны в хидерах.

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

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

Значения слов

У вас встречаються незнакомые слова в книге стоит ли их заучивать? н/р феномен этюд и т.д

admin аватар

Не знаю ответа

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

Сколько весит паскаль компилятор? 20 мб?

Когда скачиваешь используя терминал.А то скачал fp-compiler и потом fpc и какая то ошибка. Использовал проприетарный nvidia наверное изза него

admin аватар

Именно это вам

Именно это вам и нужно -- поставили пакет fp-compiler, используйте теперь fpc. Nvidia и прочее железо тут вообще ни при чём, компилятор на железо вообще никак не завязан (и не может быть завязан по своей сути).

Infoviolance

Здравствуйте, Андрей Викторович, есть ли ещё смысл обновлять страницу вашего канала на ютубе?

admin аватар

Есть

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

про функциональные языки программирования

Если есть препятствия чтобы поставить линукс на комп. Я могу изучать программирования с функциональных языков. Н/Р на хаскеле или clojure?

admin аватар

Я думаю, вам

Я думаю, вам просто не настолько нужно изучать программирование.

А xubuntu

А xubuntu подходит для искушенного пользователя?

admin аватар

Для

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

А если опасаюсь

А если опасаюсь что в процессе установке ubuntu Windows будет уничтожена, и не установиться Ubuntu. И тогда получается и без винды и без ubuntu

admin аватар

Опасайтесь

Опасайтесь дальше, что я могу сказать.

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

стоит ставить 32

стоит ставить 32 битную ? 64 не стоет?

admin аватар

Почему?

У меня у самого 64-битные Linux'ы на тех машинах, где процессор 64-битный.

Вот этот комментарий я пишу с машины, процессор которой 32-битный, и на ней, естественно, система 32-битная.

Фундаментальное образование для разработчика в 2018

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

admin аватар

Для

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

Если говорить о программистах (а не о веб-разработчиках, которые такие же программисты, как маляры — художники), то мозги для них обязательны, вопрос лишь в их уровне. Можно ли быть программистом, не имея высшего образования? Можно, я многих таких знаю. Можно ли быть программистом, не зная математики? Можно. Можно ли быть ХОРОШИМ программистом, не зная математики? Лично для меня этот вопрос открыт, я ни одного такого не видел пока.

А что знания "непосредственно не применяются" — это детский лепет тех, кто так и не понял, зачем нужно высшее образование. NB: знания (точнее, навыки) для непосредственного применения дают разве что в техникумах и прочих ПТУ.

А что вы

А что вы называете веб-разработкой?
Формочки делать на Javascript, или распределённый отказоустойчивый бэкенд, чтобы эти формочки работали? Или всё вместе?

admin аватар

Конечно, всё вместе!

Разумеется, всё вместе, и странно, что тут возникли сомнения. Но у меня есть встречный вопрос: вы всерьёз полагаете, что применение разных модных слов вроде вот этого вот «распределённый отказоустойчивый бэкенд» способно предохранить от деградации мозга? (если что, тема распределённых и отказоустойчивых раскрыта полностью с появлением DNS три с лишним десятка лет назад).

И вот что, если вы участвуете (неважно в каком качестве) в проекте, результатом которого становятся "формочки на Javascript" (и вообще что угодно с применением JS, webAssembly, WebGl и любого другого исполнения в браузере), то не будете ли вы столь любезны освободить мой сайт от своего присутствия? Пойдите куда-нибудь ещё, в Интернете достаточно мест даже для тех, кто этот Интернет планомерно превращает в кучу дерьма.

Исторические причины

А Вы не в курсе исторических причин вообще того подхода, когда код исполняется в браузере? Что это было? Целенаправленное вредительство? Или концепция задумывалась как безусловное благо? Или может просто недостаточно продумали?

admin аватар

По-моему, тут всё достаточно очевидно

Изначально эта "технология" (в очень жирных кавычках, поскольку с таким же успехом можно считать технологией забивание шурупов в доску кирпичом по причине отсутствия молотка и отвёртки) придумана дебилами по дебильным причинам, то есть это не "недостаточно продумали", это гораздо хуже: идиот на дебиле сидит и кретином погоняет, как, собственно, и устроена практически вся современная IT-индустрия. Коротко говоря, прежде чем начинать натягивать сову на глобус, следует хотя бы допустить мысль, что вообще-то сову на глобус натягивать не надо; в данном случае — не надо было пытаться использовать веб как "решение для всех мировых проблем".

Так или иначе, на нынешнем этапе всё гораздо хуже. Все новомодные "технологии" в применении к вебу активней всех форсит Google, он же завязывается в узел, чтобы только заставить всех пользователей в мире регулярно менять версию браузера (замечу, браузеры при этом деградируют, а не улучшаются — mozilla вот уже настолько потяжелела своим гуём, что её стало невозможно (!) гонять через ssh даже на локальной машине, лично мне пришлось перейти на palemoon). Тот же Google с превеликим удовольствием всем желающим предоставляет всевозможные повязанные на JS "сервисы" вроде google-analytics и т.п. Ну что же, Google понять можно: им очень хочется присутствовать в каждом компьютере мира, и самое забавное, что им это уже фактически удалось, всякие одиночки вроде меня не в счёт — погоды не делают.

В ответ на возможный (и достаточно часто задаваемый) вопрос "ну и чО" предлагаю вот эту ссылочку: https://mediamera.ru/post/1029 — и категорически отказываюсь продолжать обсуждение, пока текст по ссылке не будет прочтён целиком. Впрочем, всё на самом деле гораздо хуже: Google — это первая со времён Александра Македонского серьёзная заявка на власть над всем миром.

Андрей

Андрей Викторович, в связи с выше упомянутой статьей, можете поделиться какими-нибудь правилами использования интернета: какие программы использовать, а какие нет, какой поисковик использовать, какой телефон приобретать? Заранее благодарю за ответ. И большое спасибо Вам за ваши книги.

admin аватар

Смешно, да

Может быть, вам ещё написать пособие «Как жить на свете» в пятидесяти томах? (в меньшее количество томов тут точно не уложиться)

Спасибо за ваше

Спасибо за ваше мнение!
Тогда можно еще один вопрос, в какую область можно пойти начинающему разработчику (закончил матмех СПБГУ).
Стоит ли обратить внимание на компьютерное зрение и машинное обучение?

admin аватар

Возможностей масса

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

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

>то либо он

>то либо он оттуда сбежит, либо мозгов у него не станет
То же самое касается Java Enterprise?

admin аватар

не факт

Лично у меня Java вызывает здоровое отвращение, но я не могу с уверенностью сказать, что работа на этом языке неминуемо ведёт к деградации. Не всегда. Временами — безусловно, но не всегда.

Почему?

Почему Джава вызывает омерзение? Потому, что проприетарный? Так ведь есть опенсорсные реализации. Вот Столлман например считает Джаву неплохим развитием С. Чем она вам не нравится, объектно-ориентируемостью или еще чем?

admin аватар

Столлман тут ни при чём

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

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

Ну а дальше всякая фигня по мелочи. Полуинтерпретируемое исполнение (здравствуй, JVM на машине конечного пользователя), отсутствие различия между объектом и ссылкой на него, все методы виртуальные (не волнуйтесь, я знаю про final, но это надо чётко понимать, что делаешь), общий предок для всех объектов, рефлексия, да мало ли там ещё закидонов, которые заведомо превращают этот язычок в чучелко для custom business apps, полностью исключая какое бы то ни было его серьёзное использование. NB: мне бы хватило каждого из этих пунктов по отдельности, чтобы об использовании такого языка даже не помышлять.

Императивность и сборка мусора

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

admin аватар

Вы тут сами с собой поговорить решили?

пояснение вот здесь: http://www.stolyarov.info/pvt/anti_c#comment-129

если вдруг оно окажется непонятно (что вполне ожидаемо, когда пытаешься разговаривать с джавистом, питонистом и т.п.), объясняю ещё раз: единственное, что оправдывает существование императивного программирования — это то, что программы в итоге выполняются на реальном компьютере, который построен как машина фон Неймана. Ни на Лиспе, ни на Хаскеле, ни даже на Форте мы никогда не выжмем из машины всё, на что она способна. Любая более-менее толстая прослойка между программой и машиной лишает нас всякой возможности выжимать машину как лимон. Ну а если нас устраивает использовать возможности машины на 15%, противоестественное фоннеймановское (a.k.a. императивное) программирование лишено смысла. Как следствие, тот же Clojure (есличо, он на JVM как раз сделан) имеет право жить, поскольку он не императивен ни анфас, ни в профиль; но Java — нет.

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

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

А что должен знать начинающий системный администратор?

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

admin аватар

Сложный вопрос

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

Если речь идёт о базе, "без которой никуда" — ну, поставить незнакомый дистр линукса можете? А FreeBSD? А дальше с ними работать через сеть удалённо в терминальном режиме? А поднять на них веб-сервер? А почтовую систему поднять? А воткнуть в машину вторую сетёвку и превратить её в маршрутизатор? А сетку из десятка машин собрать? А NAT настроить? А порт статический пробросить (через NAT снаружи внутрь)? А бекапы автоматические заточить?

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

Парадигмы программирования

Добрый день, Андрей Викторович. Увидел на вашем сайте, что Вы преподаете предмет "Парадигмы программирования". Ознакомился с темами, которые затрагиваются, и мне стало интересно, есть ли материал этих лекций в свободном доступе? Если нет, то по каким книгам Вы преподаете данный предмет студентам?

admin аватар

Увы

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

Что касается книг, то к моему курсу прилагается, конечно, список литературы, но там можно найти далеко не всё из того, что говорится на лекциях.

Обязательно ли учить С++ ?

Добрый день, Андрей Викторович! Я изучаю программирование по Вашим книгам. И у меня вопрос. Обязательно ли учить С++ после С? Или в схеме Pascal - Assembler - C после С можно вставить другой высокоуровневый язык с ООП (тот же Java, к примеру).

admin аватар

Нет, это уж точно не обязательно

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

Олимпиадное программирование

Добрый день, Андрей Викторович. Я являюсь начинающим программистом, занимаюсь по Вашим книгам. И вот у меня возник вопрос касательно олимпиадного программирования. Недавно я наткнулся на мнение, что к олимпиадному программированию не стоит готовиться совсем, т.к. "олимпиадное программирование применяет совершенно другие приёмы, чем программирование длительных проектов, которые только и встречаются в обычной жизни". Когда я впервые увидел те задачи, которые решаются на таких соревнованиях, то понял, что мне они не под силу и что стоит сделать упор на них для практики своих способностей. Собственно сам вопрос. Насколько эффективно решать задачи из ОП для начинающего? Разве это не является полезной практикой для мозгов? Заранее спасибо!

admin аватар

Всё ещё хуже

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

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

Вы против

Вы против именно олимпиад по программированию или против олимпиад и в других сферах?

admin аватар

Я ничего не

Я ничего не имею против олимпиад по математике и физике. Про все остальные сферы сказать ничего не могу — не в курсе.

Поискав в

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

admin аватар

Сложный вопрос

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

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

А дальнейшее

А дальнейшее трудоустройство?
Никогда не слышал про всеросников по информатике, которые не могут себе найти работу по специальности.

admin аватар

И что?

Я вам больше скажу, я не могу в современных условиях вообще представить себе человека, который может написать программу на сотню строчек на любом самом голимом язычке вроде VB или PHP, и чтобы он не смог найти работу "по специальности". Дефицит-с. Острая нехватка программистов.

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

Блокировка рекламы

Добрый день, Андрей Викторович! Недавно наткнулся на приложение для блокировки рекламы Pi-hole, созданное командой энтузиастов. По их словам, они разрабатывают так называемую «чёрную дыру для рекламщиков". Мне это показалось очень интересным, поэтому решил поделиться с Вами. Их официальный сайт: url removed. Их идеи мне напомнили то,что Вы писали о рекламе и говорили в роликах по infoviolence. И меня, как ненавистника навязчивой рекламу и таргетинга, их проект очень заинтересовал. Надеюсь, что и Вас это тоже заинтересует.

admin аватар

Не вижу ничего

Не вижу ничего принципиально нового, во всяком случае на первый взгляд это обычная прокся. ACL'ы для того же squid'а, режущие рекламу, мне попадались ещё в конце прошлого века :-)

Вопрос про информационно свободное общество

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

admin аватар

как в

как в информационно свободном обществе начать личный диалог к примеру с Вами?

Вы сами дали ответ на свой вопрос:

Одно дело когда вы на сайте публично размещаете свой email для связи(тем самым давая согласие на получение по этому адресу писем связанных с тем, что Вы тут публикуете)

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

другое дело, когда(теоретически) Вас встречаешь на улице и хочется задать вопрос лично(на что Вы получается согласия не давали)?

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

Правда ли что, к примеру, попытка просто побеседовать с незнакомым человеком на улице будет являться информационным насилием на ним?

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

Блокировки

Андрей Викторович, не могли бы вы рассказать ваше мнение по поводу ситуации с Телеграмом и действий Роскомнадзора? Очень интересно услышать ваше мнение.

admin аватар

У этой палки два конца

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

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

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

Infoviolence

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

admin аватар

Надеюсь, что не всё так плохо :-)

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

Что касается "почитать" — насколько мне известно, кроме меня никто информационное насилие не рассматривал в таком значении термина. Так что кроме своего диссера, пожалуй, мне нечего предложить на эту тему. Диссер, если что, тут: http://www.croco.net/croco/papers/stolyarov_philosophy_thesis_infofreedo...

microsoft и opensource

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

Что вы думаете о подвижках Microsoft к опенсорс сообществу? В частности факту открывания исходников clr, jit-компилятора, сборщика мусора и прочего для новой итерации .net которая core, а также слогану "microsoft loves linux" и вообще новой "политике партии" microsoft.

Смягчает это ваше к ним отношение или нет?

PS капча очень сложная

admin аватар

Как мы знаем, в

Как мы знаем, в 1861 году в Российской Империи было отменено крепостное право; часто можно видеть, как этот (безусловно правильный) шаг вменяют в заслугу тогдашнему царю Александру II. К чему это я? А к тому, что не отменить крепостничество в России было объективно невозможно: промышленности требовались рабочие, ну и прочее в таком духе. Если там где-то и есть "заслуга" царей, включая Александра, то она разве что в том, что отживший и изживший себя феодализм продержался в России лет на сто дольше, чем ему объективно стоило.

Вот примерно такова же ситуация и с M$. Поддерживать своё проприетарное ядро ОС силами одной конторы в современных условиях невозможно, Apple эту фишку просекли на рубеже веков, так что MacOS X внезапно оказалась представителем семейства юниксовых. Вот теперь допёрло и до мелкомягких.

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

Что думаете о современном софте

Здравствуйте, Андрей Викторович. Есть мнение, что совремменый софт - это отстой (вот даже книга есть, сам правда не читал https://www.amazon.com/Why-Software-Sucks-What-About/dp/0321466756). Что думаете об этом вы? Стоит ли пробовать идти против системы (писать что-нибудь своё, проводить время в поисках лучшего и т.п.) или это не стоит потерянного времени. Также хотелось бы узнать ваше мнение о данном ресурсе, где люди делятся вроде как хорошим софтом https://suckless.org/ и ещё одним, где есть некоторые рекомендации http://harmful.cat-v.org/software/.

admin аватар

Всё в одну кучу -- как-то странно получилось :-)

Начать с книги Платта. Конечно, весь современный софт именно что sucks, только не факт, что именно по тем причинам, про которые говорит Платт. Если на то пошло, мне больше нравится книга Алана Купера "Психбольница в руках пациентов" (переведена на русский, в инете представлена в изобилии) — вроде она про то же (usability), но как-то более конструктивно, что-ли.

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

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


Harmful things that are so superfluous and useless that require no alternative:

Unicode BoM in UTF-8.
IDN.
Dynamic linking, in particular in Unix systems.
PoSix locales.
Adobe Flash.
GNOME and KDE.
Boost.
UML.

вот тут я согласен с каждым из пунктов :-) то есть буквально с каждым.

3 вопроса

Доброго времени суток, Андрей Викторович!
Как вы думаете, актуальны ли книги Криса Касперски по сей день(если нет, то какие есть альтернативы)?

Каким дистрибутивом Unix вы пользуетесь и что порекомендуете после Ubuntu?

И ещё вопрос. Пожалуйста, объясните очередному неофиту, почему вы считаете сборку мусора мракобесием?

admin аватар

какие вопросы, такие ответы

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

По поводу "дистрибутива Unix" (гм...), ну в общем если интересно, то на серверах у меня Openwall, а на домашнюю машину последнее, что я взгромождал — Devuan. Я при этом совершенно не уверен, что Devuan сейчас прямо-таки правильный выбор, но на то, чтобы поставить десяток разных дистров без systemd, попробовать с каждым из них поработать и выбрать лучший, нужна реально прорва времени, а результаты таких "исследований" за пару лет устаревают (вот кто бы мог подумать, что CentOS скурвится — а поди ж ты, переползли тоже на systemd). Короче говоря, нету у меня такого количества лишнего времени.

Что касается сборки мусора, то мракобесием я считаю не её саму как таковую, а её сочетание с императивным программированием. См.тут: http://www.stolyarov.info/pvt/anti_c#comment-129 и тут http://www.stolyarov.info/books/programming_intro/vol2#comment-1171

Андрей

Андрей Викторович, а вариант использования FreeBSD как рабочей лошадки не рассматриваете? Разработчики там вроде шибко консервативные и намёков на системд нет.

admin аватар

Конечно, рассматриваю

Несомненно, я этот вариант держу в уме. Если мир Linux окончательно схлопнется, то и выходов других не останется.

Математико-юмористическая статейка

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

[URL removed]

Как я понял из своих наблюдений - технарям смешно, а не технарям не смешно :)

admin аватар

Прикольно

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

https://sly2m.livejournal.com/620353.html?nojs=1

Hint: перед тем, как кликнуть по ссылке, выключите в браузере JS. Тогда вы не увидите там рекламы.

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

Racket

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

Меня интересует Ваше отношение к языку Racket и его инфраструктуре. Расскажите, пожалуйста.

admin аватар

Насколько я

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

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

О, а можно чуть

О, а можно чуть поподробнее, чем дебилен R6RS?

Ну, то есть, мне интересно, дебильнее ли R6RS, чем R5RS (или R7RS), и если да, то чем именно.

Спасибо.

admin аватар

"Чуть"

"Чуть" подробнее тут не получится, более-менее адекватныйответ на этот вопрос потребует потратить на него часа полтора-два, а то и больше. Извините, сейчас у меня такой возможности нет. Если же говорить кратко, то ответ будет простой: а вы попробуйте почитать первоисточники. И тот, и другой текст свободно доступны в Интернете.

А если нет времени читать, то хотя бы сравните их объём.

Ага, спасибо.То

Ага, спасибо.
То есть, я так понимаю, R7RS можно, вообще говоря, считать "возвратом к адекватности" после дебильного R6RS.

admin аватар

Насколько я

Насколько я понимаю, нельзя. Последней адекватной спецификацией Scheme был R5RS.

Гм, а можно

Гм, а можно пару-тройку ключевых слов по поводу неадекватности R7RS? А дальше я уже сам поищу-подумаю.

Насколько я понимаю, создатели R7RS как раз таки пытались уйти от неадекватности R6RS. Выходит, попытка не совсем удалась?

admin аватар

R7RS

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

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

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

Ясно,

Ясно, спасибо.

Кстати, на фоне всего этого, что думаете про Common Lisp и его стандарты?

admin аватар

А что тут думать?

Собственно, Common Lisp — это и есть стандарт, называется он так; в CLTL многократно упоминаются результаты голосования соответствующего комитета. Судя по тому, что происходит с его реализациями, этого бегемота уже более-менее настигла заслуженная судьба :-) Проблема в том, что при этом нестандартных лиспов я давно уже не видел, так что, похоже, вместе с этим стандартом мы можем лишиться Лиспа как явления, и это печально. Со стороны выглядит так, что нежизнеспособный монстр сначала всех убедил, что тут только он ТруЪ, а остальные типа фигня, ибо не соответствуют, видите ли, стандарту; ну а потом сдох, ибо монстр.

1% для JS

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

admin аватар

Ноль

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

Функциональное программирование

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

admin аватар

Известное дело

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

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

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

Чем так плох systemd?

Здравствуйте! Очень интересно, чем так сильно systemd проигрывает тому же openrc, в чем его недостатки или "вредоностность", кроме неюниксвейности? Сам перешел недавно с archlinux (systemd) на gentoo (OpenRC), особой разницы пока не понял, кроме того, что openrc не такая "изкоробочная", как systemd. И чем обусловлена массовая миграция на этот самый systemd?

admin аватар

Лично для меня

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

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

В принципе этим не только systemd славится, я вот тут потратил примерно час, чтобы понять, как в нынешнем X.org таки вернуть возможность убивать сервер по Ctrl-Alt-Backspace, и чтобы при этом не сломалось переключение регистров клавиатуры. Проблема, как выяснилось, была в том, что теперь, оказывается, xkb options берутся не из собственной конфигурации X.org, а от долбаного udev, у него свой отдельный конфигурационный файл для клавиатуры (/etc/default/keyboard, его я нашёл grep'ом, но не сразу понял, что это именно udev его использует), и потом ещё udev надо перезапустить, причём обязательно с помощью udevadm, поскольку обычный перезапуск на него не действует. Кто мне вернёт этот час?! Какого чёрта кто-то там решил, что "так будет круче", а я за это вынужден расплачиваться собственным временем?

Таки да, я противник не только systemd, мне и udev, и hal, и прочие подобные примочки тоже не нравятся. Они мне низачем не нужны, в том смысле, что они мне не дают никакого профита, а вот на борьбу с их изысками мне приходится тратить время и силы. Если говорить об init'е, то меня вполне устраивает (то есть более чем) классический system V init со всеми его скриптами, так что мне не нужны ни upstart, ни openrc, ни какие-либо иные потуги заменить якобы "старую" технологию, которая полностью справляется с моими потребностями.

Время

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

admin аватар

Чушь

Во-первых, это не о том. Вопрос был не в том, допустить или не допустить использование systemd, а в том, почему systemd — это плохо.

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

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

Уважаемый

Уважаемый Андрей Викторович!

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

С уважением.

admin аватар

Сделано.

Переключателей, к сожалению, не завезли :) Но изменить порядок на противоположный оказалось возможно.

Версия UNIX

Здравствуйте! Какую версию UNIX Вы рекомендуете установить?
Заинтересовала Ваша первая книга Азы программирования. У меня есть возможность установить только на один жёсткий диск с Windows7. Ubuntu подойдёт?
Спасибо!

admin аватар

Да что угодно подойдёт

... и Ubuntu в том числе. Dual boot, опять же, умеют и все известные мне дистрибутивы Linux, и FreeBSD.

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

Youtube-канал

Здравствуйте. АВ, укажите в описании под каждым видео на канале ссылки на ваши сайты. Это может быть полезно.

admin аватар

Что, вот прямо

Что, вот прямо под каждым? И прямо на все сайты? По-моему, это слегка перебор.

Youtube-канал

Можно только на этот сайт, а можно и на infoviolence (но на этот важнее, я думаю, если выбирать).

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

P.S. Был перерыв с выходов видео и я уже начал волноваться. )

admin аватар

Эти ссылки есть

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

papers 403

Доброго времени суток!

Публикации со странички http://www.croco.net/croco/papers.html недоступны (403 Forbidden).

admin аватар

Вроде работает

У меня страничка открывается без проблем и я для этого ничего не делал. Э?

Я, вероятно,

Я, вероятно, недостаточно точно выразился. Страничка и у меня открывается без проблем. А вот при попытке с этой странички скачать какой-нибудь pdf/ps/etc в ответ я получаю ответ типа "Forbidden. You don't have permission to access /croco/papers/bolshakova_stolyarov_2000.ps.gz on this server."

admin аватар

Да, факт

Спасибо!

Там на директорию права были неправильно установлены, видимо, рука дрогнула на команде chmod :-) Сейчас всё нормально.

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

Здравствуйте, Андрей Викторович! Хотел бы спросить о четвертом томе. Есть ли примерный список глав будущей книги?

admin аватар

Четвёртый том

К сожалению, пока есть только список частей, вот здесь вот.

Первая из этих частей уже готова, она лишь слегка отличается от содержания "Введения в язык Си++"; остальные части, напротив, я ещё не начинал не только писать, но и прикидывать, так что плана глав для них нет.

Программа дополнительного образования ВМК МГУ

Андрей Викторович, имеет ли смысл учебы по программе профессиональной переподготовки «Разработчик профессионально-ориентированных компьютерных технологий» ВМК МГУ?

admin аватар

Честно говоря,

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

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

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

admin аватар

Объём-с, знаете ли

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

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

Вопрос по файловым менеджерам

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

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

попробуйте ranger

попробуйте ranger (выделение всех файлов там точно есть)

admin аватар

Мне не вполне

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

Так что вопрос я не изучал и ответа на него дать не могу. Ну то есть понятно, что существует, к примеру, Midnight Commander, о его существовании я знаю примерно с тех времён, когда вообще начал работать с *nix (то есть с 1994 года, вроде как раз тогда он и появился), но никогда его сам не использовал, ибо по-моему неудобно.

На вкус и цвет, как говорится...

Я mc использую уже около 15-20 лет. :-) Да, многое неудобно, не комбайн, но какой-либо альтернативы ему я не вижу (при этом я периодически пробую разные файловые менеджеры, но в итоге опять возвращаюсь на mc).:-) При этом я бы не назвал себя фанатом консоли, - просто исторически так сложилось. :-) А файловые менеджеры удобней для работы с файлами. Как не крути, - горячими клавишами, стрелочками и ВК, гораздо быстрее, чем одним автодополнением по TAB (в случае с шеллами, которые это поддерживают). :-)

admin аватар

Вот именно, что

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

информационное насилие

Посмотрел vlog, посвящённый информационному насилию. Согласен во всём. Я и до просмотра придерживался подобных взглядов, но они были не структурированы.

У меня есть татуировка с Tux'ом. Я планировал добавить изображение Gnu чтобы не расстраивать Ричарда Столлмана. Но теперь подумал, ведь подобное тату — как есть пропаганда и информационное насилие!

С вашей точки зрения, Андрей Викторович, должен ли ответственный член общества избавиться от подобных изображений на своём теле и на своей одежде, или индивидуальность и символы идентичности неприкосновенны?

О боже!.. Информационно изнасилованному

Я крутейший линуксоид -
Тукс-пингвин на попе виден,
И одно лишь беспокоит -
Столлман не был бы в обиде!

Дядя Столлман - тот суровый,
Ой, беды я с ним хлебну!
Зад оглядываю снова -
Где бы втиснуть ещё GNU?

Это будет мне не в минус,
Пусть дивятся моей силе,
Ведь меня не только Линус,
Но и Ричи изнасилил!

насилие

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

admin аватар

М-да

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

Что до меня, то я вообще не люблю татуировки как идею, хотя это уже не относится к обсуждаемому вопросу.

Не верная ссылка (проблемы копипаста)

На этом сайте На странице купить ссылка на третий том ведёт на второй.

admin аватар

Спасибо,

Спасибо, исправлено.

Может мы про разные возрасты говорим?

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

Говоря об отсутствии у ребёнка доступа к ПК, я имел в виду что ребёнок за компом не сидит, игры/мультики на компе не смотрит и в интернете не лазит.

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

Всё же считаете что это бесполезно и контрпродуктивно?

admin аватар

Да нет, просто странно

Вот чем вас этот ваш "старый-старый ноутбук" не устраивает, чем спектрум лучше? По мне так пусть лучше ребёнок вам этот ненужный ноут раздолбает, чем живой (пока) спектрум :-)

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

Компьютерщик дед - горе в семье.

"К вопросу откуда спектрум, так очевидно что из личной юности...
Всё же считаете что это бесполезно и контрпродуктивно?"

Из первой фразы (когда появились спектрумы и писюки, извините, знаем!) очевидно вытекает, что иначе, как дедушкой двухлетнему ребёнку, вы приходиться никем не можете! Что, дедушка, ограничили общение со внуком(внучкой) родители? :) Да я бы вообще таких "бесполезных и контрпродуктивных" дедушек грязной метлой гнал! Сами-то понимаете, о чём говорите? Два года! А вы о каких-то компьютерах, извините! Офигеть... "Умнее" ребёнка сделать удумали? Так с вашими подходцами, получить что-либо кроме очкастого и болезненного существа, не вылезающего из чатов и бьющегося сутками в Танки, решительно невозможно! Если хотите чтобы ребёнок рос и развивался нормально, оставьте его родителям. Если же такое (по любым причинам!) невозможно, учитесь сами. Всему! Кончил учиться - кончил жить. Здесь цель простая - на любой вопрос, заданный ребёнком, у вас должен быть ответ "на пальцах", понятный на его уровне развития. В принципе, теорию вероятностей можно объяснить ребёнку "на пальцах". Общую, конечно, специальную не каждому выпускнику профильного вуза объяснить возможно! ;) Вот какой программой "обучения ребёнка" вы должны бы быть обеспокоены. В этом случае, возможно, вы поможете ему и его родителям в его развитии. Но для начала (я вас умоляю!) выкиньте из головы бредовые затеи относительно как спектрумов, так и РС. Всему свое время. Сказки ему читайте, чёрт подери...

Мимо кассы

Сорри уважаемый, вы мимо кассы :) По крайней мере со своими выводами про дедушек и внуков.

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

Книжки уж поверь сыну читаю с самого детства, и он сам с ними ко мне прибегает, чтобы я ему тех самых "Дядю Стёпу" или "Крокодила Гену" почитал.

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

Так что, вы прошли чуть мимо. Ну и идите дальше туда же, ни в коем случае не сворачивайте :)

От студентов к детишкам? Что ж...

А вот как с детьми работать — мне неведомо.

Да-да, Андрей Викторович, детей у вас нету покамест, это заметно!
Иначе однозначно обратили бы внимание не только на синклеронесообразные мысли, но и на возраст ребенка - 2 года! Кому приходилось сталкиваться с детьми подобного возраста, знают точно что они могут, что умеют, а до чего им - просто как до звезды.

Да и "дедушке-папе" двухлетних детей, очевидно, видеть не приходилось. Иначе вряд ли бы пришло ему в голову говорить чего-то о "двумерной системе координат". "Дедушка-папа", на будущее - если захочется еще пофантазировать на тему двухлетних детей, хоть в интернетах поинтересуйтесь, что они из себя представляют. Ну, да пожалею ваше время и ваши потуги (сложно ведь в Гуглах, не правда ли?) Вот, к примеру ссылочка (таких море в сети), дающая представление о двухлетних детях:
Дети в два года
Обратите внимание на имеющиеся навыки, словарный запас, да сопоставьте с вашими мыслями относительно синклеров всяких. Идея сама по себе бредовая, впрочем! И это должно быть очень хорошо понятно человеку у которого на древней машине установлена аж гента, требующая довольно неплохого знания системы и, разумеется, прикладных программ, в частности, обучающих, коих под Линуксом, действительно немерено. И думать вместо этого о каких-то синклерах довольно нелепо! Кстати, обучающие-то программы опять же никак не для двухлетних детей! Так что, количеству фантазий в одном посте на одно вменяемое слово позавидовали бы лучшие писатели-фантасты.

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

Что касается эмоционального довольно поста относительно обучения детей, ничего предосудительного там найти нельзя. Скорее всего, человеку просто пришлось столкнуться со старшими родственниками, пытавшихся взять на себя обучение ребенка, которому безусловно в будущем предстоит стать не менее, чем академиком. Ни к чему хорошему такие вещи привести не могут. Все должно идти своим чередом. Ну, и очевидная описка имеется - теория не "вероятностей", а "относительности" явно имеется в виду. А то, что ее можно объяснить на пальцах - так это не можно, а НУЖНО делать. Ибо возможно. И предложение учиться всегда - абсолютно правильно, хотя и довольно банально.

Впрочем, по любому повеселили, спасибо!

ЗЫ А вот про дядю Степу, крокодила Гену "дедушка-папа" очень правильно читает - развивающее чтение! ;)

И тут тётя Алла набросилась на деда-папу :)))

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

Коль тема так пошла в массы и глубоко задела как минимум 2-х человек, то сразу чтобы снизить накал негодования в свой адрес сообщу отдельные пункты моих затей с ребёнком:
- Не собираюсь в 2 года садить ребёнка за комп. (на всякий случай, сейчас ему вообще год и 11 месяцев. Почти 2)
- С ребёнком у нас отличное взаимопонимание, и мои затеи с его обучением, производятся исключительно в игровой и ненавязчивой для него форме. Никаких требований делать то, никаких требований делать это. Если малыш не настроен на что-то, что я хочу ему показать/рассказать/объяснить/попросить, то я на этом не настаиваю.
- Не считаю правильным рассказывать другим как жить и что им делать, и с трудом принимаю поучения от других, тем более совершенно незнакомых мне людей.

Калькулятор этот мне кстати тоже знаком, чуть чуть на нём "писал" простые расчёты в 10-11 классе. Правда он был не мой а соседа, но это неважно.

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

Чем мне не угодил линукс для подобной затеи? Тем что например вы его позиционируете таким образом:
"... в частности, обучающих, коих под Линуксом, действительно немерено." Мне не нужны обучающие программы для ребёнка. Я сам его до какого-то возраста вполне способен и главное имею желание обучать всему что ему будет интересно и что ему необходимо. Не собираюсь это отдавать на "аутсорсинг" какому-то компьютеру. А дав ребёнку линукс, что он будет с ним делать?
вариант 1. Если линукс консольный, то совсем сложно. Рассказывать про пакетные менеджеры для установки той или иной игры? Безумие. Давать список команд для запуска той или иной проги, тоже тупость. Совершенно бессмысленный ввод команды после которой появляется та или иная игра.
вариант 2. Линукс с графикой. Ну это по мне совсем лишнее. Это и будет то самое красноглазие, с тыканьем мышкой в те или иные пункты меню, с единственным потенциальным выхлопом для ребёнка в виде запуска "развивающих" программ.

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

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

admin аватар

Всё же очень странно

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

Вообще вы, мне кажется, не вполне правильно понимаете термин "обучающая программа". Вот этот ваш бейсик на спектруме — он и есть обучающая программа, только кривая, потому что бейсик. На Linux'е есть лучше.

upd: не удержался, вот вам раз: http://www.tuxpaint.org/ вот вам два: https://www.maketecheasier.com/5-best-linux-software-packages-for-kids/ (первое там упомянуто, а здесь упоминается программа с Logo-графикой, всяко лучше бейсика), дальше я уже не стал смотреть.

admin аватар

Э?

Мне почему-то кажется, что у вас имеются проблемы с чтением. В смысле вот просто с чтением текста на русском языке. Иначе бы вы заметили вот эту вот фразу в тексте нашего топик-стартера:

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

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

Не, проблем с

Не, проблем с чтением у меня нет.
А по поводу "прямо сейчас", могла бы только спросить - "прямо когда"? Лет через 5? :) Боюсь, что к этому времени и архитектура PC уже уйдет, так что про какие-то синклеры в наше время говорить уж точно смешно.

admin аватар

Ну знаете

Вот уж что-то, а соответствие модным современным трендам вообще дело даже не десятое, а десятитысячное. Какая разница, что там куда уйдёт? Это что, как-то влияет на обучение? Разве что негативно.

admin аватар

Экий крик души :-)

На всякий случай — это был не я, в смысле не автор сайта :-)

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

Многовато даёте годов

Андрей Викторович, перегнули немного с границами. Спектрум у меня был с начальных классов школы в 93-96 годах.

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

admin аватар

Ну звиняйте :-)

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

Вообще, я так скажу — да не слушайте вы никого, воспитывайте отпрыска как считаете нужным. Хотя затея со спектрумом мне по-прежнему непонятна, но это она мне непонятна, а вам там с горы может быть изрядно виднее. И меня вы тут за авторитета зря держите, я не педагог, я ВУЗовский преподаватель, это совершенно другой вид спорта. Студенты всё-таки уже не дети. Да и старшеклассники, с которыми я частным образом занимаюсь иногда, тоже уже не дети. А вот как с детьми работать — мне неведомо.

Про детей и IT

Андрей Викторович, хочу с вами как опытнейшим педагогом в IT посоветоваться.

Стоит ли ребёнка начиная с какого-то разумного возраста знакомить с ПК на базе спектрума? Для понимания азов самостоятельной работы с ПК и основам программирования. Хоть и на бейсике, но не C ведь в малом возрасте давать.

Если ребёнок всякими гаджетами не играет, телек не смотрит и к обычному ПК доступа не имеет.

Поделитесь своим мнением на этот счёт пожалуйста
1. Стоит ли ребёнку начинать со спектрума?
2. В каком возрасте стоит начинать подобное знакомство? Не обязательно число, можно описать условия.
3. Если не 1, то с чего по вашему стоит начинать?

admin аватар

Какой-то очень странный вопрос

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

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

Выбор доменного имени

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

Почему вы выбрали домен первого уровня '.info', а не, например, '.me' или какой-нибудь ещё?
Это вызвано личными предпочтениями или просто следствие случая?

admin аватар

Какой нафиг .me

Простите, какое отношение ко мне имеет Черногория? Если что, ccTLD .me -- "национальный" домен Черногории, а точнее -- домен верхнего уровня, названный в соответствии с ISO Country Code этой вот самой Черногории.

Кроме .info, меня ещё устроил бы .net, но он на тот момент был занят, сейчас не знаю -- не смотрел.

Опечаточка по Фрейду

Действительно, '.me' -- это глупость, конечно.
Подсознательно имел в виду '.name' -- общий домен верхнего уровня для персональных сайтов. Но сейчас проверил -- соответствующий домен второго уровня свободен, но в стоп-листе (почему-то).

P. S. '.net' также занят.

И тут

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

"Всего делов"

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

А не

А не подскажете, Андрей Викторович, какой браузер вы используете?
Оно, конечно, дело сугубо личное и интимное, но, всё же? :) За последние годы практически ушёл в мир иной такой браузер, как Firefox. Ну, то есть, он, конечно, не "ушёл", но использовать его стало куда менее приятно - если стою на двухъядерной машине (как минимум!), то, вроде, всё и ничего! Однако, как только попадаю на машину с Northwood или Prescott (памяти до 2 Гб), это полный абзац! Тормоза такие, что даже и запускать браузер не хочется. Неужели четвёртые пни так безнадёжно устарели? Да нет же! Все достаточно современные системы они тянут вполне прилично - и последние минты-убунты, и jessie... То же касается и недебианообразных систем. Не, не "летают", но работать вполне можно! А вот браузер (а слово "Firefox" уже сколько лет жёстко ассоциировано со словом "браузер") - просто беда какая-то! Спасают временами такие красавцы, как dwb, surf, но, всё же, они больше подходят на роль "оперативного", второго браузера. А вот с "первым" уже, наверное, с год - не определиться ни в какую! :( То есть, просто очевидно, что главные дураки занимаются вовсе не разработкой операционных систем, а именно браузеров! На четвёртых пнях лучшей системой (из полутора десятков поставленных) оказалась Windows XP, которая ведёт себя на этих машинах достойно (если Лису, конечно, не ставить последних версий)! Так и что же это за безобразие? Может, чего-то просто не вижу?

На четвёртых

На четвёртых пнях лучшей системой (из полутора десятков поставленных) оказалась Windows XP, которая ведёт себя на этих машинах достойно

А вот и неправда ваша, дяденька! Это не ХР работает "достойно", это просто вы ни черта не сделали для того, чтобы нормально работал ресурсоемкий на сегодняшний день Firefox. Фактически (полагаем у вас однопоточный Celeron), вы имеете "однозадачную операционную систему", все процессы которой предназначены для запуска и нормальной работы Firefox. Можно сказать, вернулись во времена славного чернодосья. Вам частоты в 2 ГГц мало? Да вам требуется всего лишь обеспечить работу этой самой одной-единственной задачи! То есть, отработать вместо не сильно интеллектуального диспетчера операционной системы, распределяющего ресурсы процессора. И в случае именно однопоточного процессора, сделать это куда проще, чем с процессорами, обеспечивающими ряд потоков. Там система усложняется коcмически. А здесь-то чего? Как совершенно правильно было показано, берете и меняете приоритеты. Только не надо ожидать, что на вас сразу же посыплются шоколадные конфеты с неба, как только вы произнесете волшебное "renice ... firefox" и убьете парочку ненужных процессов. По сути, скрипт, запускающий Firefox, будет выглядеть как длинная последовательность renice'ов, касающихся самых разных процессов и заканчивающийся словом "firefox". Ага, мы же обеспечиваем работу лишь одной программе! Остальные будут подождать. Сетка в 40 значений приоритетов в никсах (ну, реально несколько меньше) - довольно широкое поле для самых разнообразных настроек. Под любую программу. И все у вас будет работать.
А теперь попробуйте то же самое учудить под вашей ХР! Если вы давно не видели синий экран, то уже после изменения приоритетов 2-3 процессов (а этих приоритетов там штук пять, наверно, наберется - от реального до никакущего), мы будете приятно удивлены.
На самом деле, частоты однопоточного процессора за глаза хватает для нормальной работы браузера, хоть какого. Решили запустить другую ресурсоемкую задачу - по той же схеме. А моща современных процессоров и операционных систем просто в разы превышает то, что необходимо тому же браузеру. Конечно удобно, когда "включил и все"! Но и процов десятилетней давности тоже вполне достаточно. Просто нужно уметь использовать имеющиеся ресурсы. Чуть приложиться надо, только и всего... И уж сравнивать невесть что с нормальными операционными системами - совсем уж не дело!

admin аватар

По сути, скрипт,

По сути, скрипт, запускающий Firefox, будет выглядеть как длинная последовательность renice'ов, касающихся самых разных процессов и заканчивающийся словом "firefox"

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

Вообще, как-то

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

Но, видать, не судьба!.. Эх, грехи мои тяжкие! )))
Приступим к нашим играм... Будем крушить только пользовательские процессы, рутовские пусть пока поживут - может, сгодятся для чего ещё!
Предположим, что у нас имеется пользователь с аккаунтом student, который имел счастье прикупить на Avito за 500 рублей один из последних двух, оставшихся в природе, Четвёртых Пней (второй в Эрмитаже, справа за мумией). И умудрился-таки поставить на него Debian 8 ака jessie - ну, не винду же, блин, ставить - XXI век на дворе!
И всё, вроде бы, ничего, да браузер тормозит, собака (Лиса, конечно, то есть)... Но случай несмертельный, будем лечить!

Для начала выясним, какие процессы для чего надобны, а какие уж точно нет. Последние безжалостно и навечно прибиваем. Смотрим, что остаётся. И ведь дофига ещё остаётся-то! Но это проблема разве - если мы под student, то делаем как-нибудь так (ну, или похоже:

ps aux|grep -oP "^student[ ]{1,}\d\d\d\d[ ]{1,}" | grep -oP "\d\d\d\d" > my_pids.txt

То есть, по идее (глядя на доску не проверял), должны бы поиметь в файле my_pids.txt построчно pid'ы наших процессов. Замечаем, между делом (с помощью какого-нибудь ps), что они все какие-то наглые и имеют явно необоснованные претензии к собственному приоритету - большинство должны иметь 0. Это очень много! Делаем как-нибудь так:

while read line; do renice -n 19 pidof $line; done < ./my_pids.txt

Всё! Хватит с них и 19-го приоритета. Осталось не забыть запустить Лису (а на кой мы это всё делали?!)

firefox
sudo renice -n -15 -p `pidof firefox`

Процесс, разумеется, может называться как-то иначе, например, iceweasel, ice-cat, firefox-esr и т.п.
Ну, или сразу его с нужным nice'ом запустить. Всего делов.

PS К сожалению, администрация Эрмитажа на дала поизгаляться над ценным экспонатом (экcгумация - куча бумажек, подписей разных, всё такое), так что, купившему на Avito Четвёртый Пень счастливчику придётся самостоятельно реализовывать все эти сложнейшие манипуляции с приоритетами на его свежекупленной суперскалярной архитектуре. Как бы то ни было, на любой системе даже такие совершенно отпетые действия приведут к ускорению работы браузера. А ведь мы поступили очень грубо - градаций приоритетов - аж 40! Плюс имеются рутовские процессы. По любому сравнивать произвольный Линукс с какой-то "ХП" просто смешно Да, это было действительно лучшее достижение от Майкрософт, но - не более!

Впечатление

Впечатление такое, что побыстрее несколько, действительно.
Правда, не файерфокс запускал с -19, а vivaldi - он на Webkit и побыстрее по жизни (процесс vivaldi-bin), но разница есть в отрисовке страниц. И остальные процессы в задницу не загонял. Зачем?
Что удивило, так это то, что система продолжала работать нормально. Компьютер, впрочем, не начала века, посовременней будет.

ps aux|grep -oР... тра-та-та...

Если уж хочется настолько оскорбить и унизить процессы юзера student, достаточно простого sudo renice -n 19 -u student. Правда, в случае с промежуточным файлом, sudo почему-то не требуется, хотя разницы не вижу. Странно как-то...

И в "^student[ ]{1,}\d\d\d\d[ ]{1,}" лучше бы [0-9]{4,5}, пятизначные процессы тоже есть.

На этих путях, наверно, что-то можно выиграть, но не думаю, что много.

Правда, задачка могла бы получиться интересная - формируем массив структур вида {char name_proc[]; int pid_proc} по наличным в системе процессам, некоторую целевую функцию (например, скорость запуска/исполнения какой-либо программы, после чего во всех возможных вложенных циклах вида for int i = -20; i < 20; ++i, изменяя приоритеты процессов, ищем верхушки полученного симплекса, если таковые найдутся - минимальное время запуска/исполнения. То есть, просто запускаем эту программу, измеряя время. Какая-никакая, а оптимизационная модель.

"главные дураки

"главные дураки занимаются вовсе не разработкой операционных систем, а именно браузеров"
Дык, "маркетинг", как всегда! Intel платит.

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

Что касается firefox, то тоже случается запускать его на процах Пентиум-4. Да, нездорово, тут не попрешь! Хотя сама система работает вполне годно. Все к чему пришел - ставить не самую последнюю версию (у меня получилось минимально - firefox 31), выделить 400 Мб в памяти под профиль, да что-нибудь навроде renice -5 -p `pidof firefox`. Это машины Celeron 2000(2700 разгон)Мгц, 1,2 Гб памяти, Debian 7(wheezy). Полностью проблему не решает, но уже поприличнее... И, разумеется, никаких ненужных, скорее всего, bluetooth, zeitgeist, modemmanager, networkmanager и т.п. быть не должно.

Вдогонку

Вот, может, кто знает, кстати, как собрать Firefox по минимуму из исходников? Нигде ничего толкового не попадалось. Есть же любители ставить несколько дней какую-нибудьгенту, а потом три года тащиться именно от того факта, что система ставилась несколько дней (пусть даже она упала через неделю!) Переболели уже давно. Система - она для того, чтобы работать, а не ставить её насколько возможно дольше. А вот, что касается Firefox, тут я бы на недельку запарился!
Может, тогда и на Celeron'ах работать будет по-божески.

С тем, что

С тем, что процессоры Celeron, как явление, мерзость неописуемая, спорить сложно. Однако, справедливости ради, не худо бы отметить, что именно по этой причине - а Celeron это не только укороченный второй кэш, но и отсутствие Hyper Threading - называть их "Pentium 4"

Что касается firefox, то тоже случается запускать его на процах Пентиум-4

нельзя никак. Это не "Pentium 4". Вы используете именно Celeron. На ядре Northwood. Последние же полновесные Intel на этом ядре HT имеют и работают повеселее, в том числе и с Firefox. А Celeron'ы этих лет (как и однопоточные Пентиум) можно считать абсолютно устаревшими с точки зрения таких программ, как Firefox, которые исходно разрабатывались исходя из многопоточности процессора. Уже Firefox 3.6 - 2010 года, не забывайте! Так что, версию там уменьшай, не уменьшай... А процы - 2002-2003 года, извольте видеть! Ещё на Pentium 2-3 его запускайте и удивляйтесь.
Что касается WinXP - тоже сравнение не совсем корректное - это же ось конца прошлого века, а вы её сравниваете с предпоследней версией debian! Она просто работает пошустрее (кстати, незначительно совсем для полутора десятка лет разницы!), а то что там Firefox работает лучше, так это просто кажется так. Работает абсолютно точно так же. С чего быстрее-то?
Ну, а искать и находить какие-то выходы из положения даже на откровенно устаревшем оборудовании, что ж, здесь плохого, разумеется, ничего нет. Тут только флаг в руки - здесь уж ресурсы приходится использовать все, что возможно.
Что до Firefox, то тоже использую именно его. Спорить с его удобством и расширяемостью, по-моему, просто глупо. Хотя, и недостатки - очевидны. Недостаточно он продуман с точки зрения модульности, например. Вот на кой чёрт мне в браузере хоть какие средства разработки?! Не заказывал! На JavaScript писать - дело вообще пионерское. А средства эти, заметьте, по любому включаются, и ресурсы жрут... Но заменить - нечем. Потому довольствуемся тем, что есть.

admin аватар

Ещё на Pentium 2-3

Ещё на Pentium 2-3 его запускайте и удивляйтесь.

Не хочу на пентиуме 2-3. Хочу на Raspberry Pi. Там никакого HT. И именно Raspberry Pi (вот прямо самая первая из них) -- это квинтессенция того, какой должен быть компьютер для SOHO при нынешнем развитии технологий. Питание 5 вольт, около 0.7 ампера (то есть 3.5 ватта мощности, блин... десяток Raspberry соответствуют одной тусклой лампочке), никаких вентиляторов. Потому что ничего лишнего.

Кстати, интересно, как создатели Raspbian со всем этим справились, ведь браузер там работает вроде сносно.

admin аватар

Вот её, родимую,

Вот её, родимую, и использую. Ну, точнее iceweasel :)

А так — да, всё именно так и плохо, и именно настолько.

Смартфоны

Доброго дня! Позвольте развить этот вопрос и в сторону мобильных устройств. Вы пользуетесь смартфоном или традиционным телефоном? Если пользуетесь смартом, то с какой ОСью?

admin аватар

В качестве

В качестве основного телефона у меня кнопочник Nokia C2-03. А ещё я не люблю праздное любопытство, так что развить этот вопрос у вас уже не получится.

Эк вас тут всех

Эк вас тут всех расфункционалило! :) Хотя, вещь, конечно, не вредная... Помнится, именно с поползновений в сторону Лиспа, для меня обрели какой-то вменяемый смысл указатели на функции. До этого помимо функции qsort() не применялось нигде. Инструментарий пошире, конечно...

Но, правда, и увлекаться особо, наверно, не стоит - как волка ни корми, а на Си - всё равно быстрее! ;)

admin аватар

Когда я на

Когда я на третьем курсе столкнулся с Лиспом, моим основным языком был Паскаль (да, я на нём деньги зарабатывал :) дело было осенью 1995 года). И я на тот момент был уверен, что умею пользоваться рекурсией. Так вот, реально я рекурсией пользоваться научился только после Лиспа. А программы-то, конечно, на Си работают шустрее, если их нормально писать. Вот только писать их на Си несколько медленнее.

Кстати, насчёт qsort -- на массивах примерно элементов на 20 (и меньше) тупой пузырёк, вручную написанный, рвёт этот qsort аки тузик грелку.

Лёгкий спам

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

Не холивару

Не холивару ради, а токмо справедливости для, можно было бы "сишнику" предложить на пробу такой язык, как Tcl. Уж коли автор был неподалёку упомянут. В нём тоже есть нечто интересное. Во всяком случае, идея метапрограммирования, имеющаяся в нём, вполне может быть понята "сишником" быстрее, чем при изучении языков семейства Lisp. Мне, например, кажется, что некто Столлман в оценке этого языка был неправ абсолютно.

"Мне, например,

"Мне, например, кажется, что некто Столлман в оценке этого языка был неправ абсолютно."

Да понять человека несложно! Видел я этот язык давненько, но вряд ли что там изменилось. Помнится был там такой оператор incr - вроде, понятно, что incr i инкрементирует i (i++) (правда, непонятно, почему не требуется $), а теперь догадайтесь с трех раз, как i декрементируется! Угу, incr i -1. Нормально? Думаю, что и Столлман о том же.
И там таких "изящных" горбушек сколько хочешь!

admin аватар

Будет-будет, я

Будет-будет, я как раз Tcl собирался рассматривать как представителя командно-скриптовой парадигмы. Вот только при чём тут Лисп, пардон?

Лисп здесь при

Лисп здесь при том, что из всех встреченных по жизни языков, Tcl показался мне ближе всего именно к Лиспу. То есть, исходилось не из разницы в парадигмах, а из сходства самих языков. Ну, правда, оставил очень неоднозначное впечатление... Совершенно неинтуитивный язык, много конструкций, которые сравнить оказалось не с чем. Взять upvar, uplevel, к примеру - это же додуматься надо вводить в язык такую кочергу для доставания адресов переменных, давно уже закопанных в стеке! Чего бы просто и понятно не указать в передаваемых аргументах или в параметрах вызываемой функции то, что значение переменной будет меняться? Людям-то понятней будет!
Но в целом, язык достаточно интересный (именно в силу своей неинтуитивности, неожиданности, своеобразия синтаксиса), хотя и практически проще применять тот же Python и даже Perl. Каких-то особых преферансов выявлено не было.

"Честно говоря,

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

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

admin аватар

Попробуйте на

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

А ещё Лисп хорош при анализе и преобразованиях всяческих SGML-подобных разметок, в смысле XML и HTML. Я вообще не понимаю, какого чёрта мы вынуждены рисовать эти нелепые тэги в угловых скобках; тема слабоструктурированных данных полностью раскрыта S-выражениями в конце 1950-х годов, то есть за четверть века до появления HTML.

admin аватар

Про Лисп

Я знаю только один приличный учебник Лиспа для начинающих (в смысле, начинающих лисперов). Хювёнен, Сеппянен. Мир Лиспа. Т.1. Вроде в инете где-то валялись djvu от него. Второй том не нужен, ибо лет двадцать как утратил остатки актуальности, а вот первый как был, так и есть.

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

"только один

"только один приличный учебник"

На самом деле не всё так уныло!
Маленьким "сишникам" можно, к примеру, ещё посмотреть "The Little Schemer" (Daniel Friedman), "Land of Lisp..." (Conrad Barsky), Paul Graham "Ansi Common Lisp" имеется даже на русском. Есть и с чего начать, и чем продолжить.

Про Лисп again

Припадки "интеллектуального голодания" бывают у многих "сишников". Есть в Лиспе что-то, тут не попрёшь! Тоже не раз в этом направлении двигаться пытался. Один из наиболее длительных "лисповых запоев" был связан с таким диалектом, как newlisp, представляющим собою откровенно скриптовый язык и довольно здорово отличающийся от классических реализаций (Common Lisp, прежде всего). Около года ваял скрипты общего назначения именно на нём. И вроде, даже интересно было, доволен был. Правда, когда в какой-то момент написал какой-то скрипт (по старинке!) на Python, отложив уже привычный newlisp в сторону, неожиданно даже для себя вздохнул с облегчением! :) Окинув взглядом всё, что было на нём понаписано, опять же неожиданно для себя обнаружил, что написано-то всё в стиле исключительно процедурном (никакой функциональщины там даже и рядом не лежало). Наличие синтаксических скобок в языке сами по себе не делают его ещё функциональным. Везде, где "по-хорошему" должна бы быть рекурсия, вопрос решался итеративно. Так и зачем оно было надо? Если для решения моих задач существуют языки именно для моих задач! Вот не попадались сроду задачи, требующие Лиспа! Так что, никаких "слёз радости" не было и в помине. Ну, а двадцать одну минуту вполне можно и выбросить из жизни - вполне достаточно, думаю, для понимания основ. Там всё просто. Тем более, для "сишника"...

Эх, string, понимаешь...

Вот нет у людей чувства прекрасного!
Бывает засидишься малость подольше, код разных языков воспринимается уже несколько своеобразно - видишь "красоту" кода, что ли... Чисто визуально. Неестественность любая в языке прослеживается. Сложно довольно объяснить ощущение, но когда посреди откровенно сишного кода встречается какой-нибудь "вехтор" заместо массива, то выглядит он каким-то ублюдком просто! Инородным чем-то. Нечто типичное не то. По глазам просто бьёт. Вот в Python почему-то любой контейнер выглядит изящно - на месте он. На своем месте. Да и синтаксис красивше. "Стринги" опять же эти! Ну, не мущинская одёжа, эти ваши "стринги"... Char! И крути его как хочешь! Не для стрингов С++, не для стрингов. Ведь наваяют целые контейнеры стрингов - смотреть на код страшно! А ведь начиналось когда-то так хорошо... Классы. Классы в Си дадены были для сотворения мира - от атома до Вселенной, любой уровень! Для созидания. Для строительства. Для выражения мысли, которая более по-человечески звучит по-сравнению с чистым Си. А сейчас в какой кусок кода ни плюнь - что от лукавого, что от Степанова, что от прочих затейников... В общем, сплошные стринги! Просто глазу отдохнуть негде...
Вот в чистом Си почему-то ничего никогда глаз не режет!

Вот в чистом Си


Вот в чистом Си почему-то ничего никогда глаз не режет!

Бгг, а вы код openssl, например, смотрели?

admin аватар

Справедливости ради

это всё-таки не язык виноват. Написать как курица лапой можно на любом языке.

Так и я про то

Так и я про то же.

admin аватар

В чистом Си -- ещё как режет

Знаете, что ОНИ сделали с переменной errno? Она теперь не переменная, она теперь макрос. Примерно такой:

#define errno (*__errno_location())

Вот не знаю как вам, а мне макрос маленькими буквами ещё как глаз режет. И константы, вводимые enum'ом, но при этом набираемые капсом — тоже. И то, что если f — имя функции, то написать можно хоть просто f, хоть &f, хоть *f — и это всё будет одно и то же — режет-режет. А если вернуться к библиотеке, то как вам, например, мьютекс внутри malloc'а? Вот я, например, принципиально никогда — НИКОГДА — не использую треды и другим не советую, почему я должен терпеть мьютексы в библиотечных функциях? Хоть свою libc пиши.

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

"Вот я,

"Вот я, например, принципиально никогда — НИКОГДА — не использую треды"

А почему? Что-то не так с многопоточностью в принципе?

admin аватар

Офигеть можно

Мне вот интересно, вы такие вопросы всерьёз задаёте? Если да, то вам треды использовать просто опасно: тем, кто в теме разбирается, заведомо известны все аргументы противников многопоточности (как, например, мне известны все аргументы её сторонников). Ну то есть с этими аргументами можно не соглашаться, но ЗНАТЬ их строго обязательно.

Настоятельно рекомендую что-нибудь на эту тему погуглить. Я с двух запросов нашёл вот такую презенташку: https://web.stanford.edu/~ouster/cgi-bin/papers/threads.pdf По правде говоря, у меня этот урл не открылся, пришлось скачивать сохранённую копию из веб-архива. Вот этот файл: http://www.croco.net/misc/why_threads_are_a_bad_idea.pdf Останавливаться на этом не следует: во-первых, это всего лишь презенташка без текста, только тезисы, а во-вторых, она охватывает далеко не всё.

В качестве продолжения напомню старую цитату из Алана Кокса:

A computer is a state machine. Threads are for people who can't program state machines.

Я с Коксом полностью согласен, и не потому что он Кокс, а потому что он, зараза, тут абсолютно прав.

А в-третьих, эта

А в-третьих, эта презенташка очень слишком древняя.

http://russian.joelonsoftware.com/Articles/Craftsmanship.html

admin аватар

Вообще не о том

Ссылка любопытная, но где там хоть слово о том, чтобы треды могли быть полезны? Впрочем, и о том, что они вредны, только ссылка на Реймонда и всё.

Маленькие треды - маленькие беды, большие треды...

Да, спасибо. В столь явном виде мысль "threads are a bad idea" попалась впервые.
Но, правда, это действительно лишь "презенташка". К чему-то. И без этого "чего-то" она выглядит довольно убого. По сути, всё, что там выражено - это то, что треды - вещь запарная ("very hard to program"), слабодуракоустойчивая ("Forget a lock? Corrupted data."), требующая квалификации и однозначного понимания, куда их можно пихать, а куда нет ("Too hard for most programmers to use."). И потом, "презенташка" 95-го года от автора тикля - как раз время появления и развития наиболее популярных графических интерфейсов. Так что, не исключаю, что многоупоминаемое "event-driven programming" связано именно с этим. И именно поэтому треды оказались нехороши. Когда прикручивался к Tcl Tk уже не помню. Но то, что последние версии Tcl имеют уже многопоточность - это есть факт. Отказ от многопоточности... эдак недалеко и до признания, что и вытесняющая многозадачность - фигня. А чего - каждому процессу свой процессор! "One thread per CPU"? Да никто ж не против! Собственно, вполне реально... лет так через "дцать". Ну, а пока - треды, как бы нехороши они не были! :)
Как бы то ни было - за новую для меня информацию благодарю. Вопрос бы надо угуглить повнимательней.

admin аватар

По сути, всё,

По сути, всё, что там выражено - это то, что треды - вещь запарная ("very hard to program"), слабодуракоустойчивая ("Forget a lock? Corrupted data."), требующая квалификации и однозначного понимания, куда их можно пихать, а куда нет ("Too hard for most programmers to use.").

Простите, вам МАЛО? Ладно, добавлю ещё один аргумент: от них нет никакого полезного толка, одни проблемы.

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

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

Ужас внутри malloc'а

как вам, например, мьютекс внутри malloc'а?
Взмедитировал было, но не осознал почему-то, не ужаснулся. Надо будет попробовать! :)
Что "нехорошо" - понял. Далее будем посмотреть.

admin аватар

Так классика же

Классика любого правильного развития инструмента состоит в том, что каждый расплачивается только за то, чем пользуется, а за ненужное — не платит. Мьютекс внутри malloc'а нужен только тредофагам, а расплачиваются за него все, кто пишет на Си и/или пользуется однопоточными программами, написанными на Си.

Давить давилкой.

Есть thread-safe

Есть thread-safe библиотеки, а есть не thread-safe библиотеки, в том числе и stdlib есть в не thread-safe реализации. Есть опции/ключики для отключения thread-safe. Слышали про такое?

admin аватар

ЩАЗ

Если бы всё это было, настал бы рай.

В действительности есть только некоторые функции (вроде localtime_r), которые специально сделаны как multithread safe, в отличие от их прообразов без _r, которые в их исходной спецификации реализовать как mt-safe невозможно. Никаких "ключиков/опций" для "отключения" mt-safety нет, не существует даже compile-time options в реализации самих библиотек для этого -- во всяком случае, в glibc и в musl. Не могу сказать, что смотрел прямо вот _все_ реализации libC, но очень сомневаюсь, что такое есть хоть где-то. Если говорить о стандартах, то в "современных" их версиях прямо написано, что замена malloc/free собственными функциями пользователя ведёт к U.B.

Между прочим, сделать две параллельные версии функций, имеющих/не имеющих в пузе мьютексы, можно было бы без особых проблем, и те их версии, которые с мьютексами, включить в pthread, так что при наличии -lpthread подхватывались бы именно эти версии, а при отсутствии — версии из libc без всяких мьютексов. Но этим, разумеется, никто не заморочился, ни гнушники с их монстром по имени glibc, ни Rich Felker с его более-менее разумным musl'ом. Не, нуачо, маленький же оверхед, и вообще, все же пишут на тредах, ога.

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

Раз уж начал тут писать

Раз уж начал тут писать, то не могу не спросить про STL. Почему вам кажется, что это плохая идея включить его в стандарт? Для примера возьму std::string -- разве чем-то плохо его использование в коде? На мой взгляд, это удобно всегда иметь под рукой некий автообъект, который содержит в себе строчку и который присутствует на всех компиляторах. Ну, то есть я серьезно не понимаю, в чем проблема присутствия этого класса в стандарте с вашей точки зрения. Чтобы как-то "прорекламировать" этот класс, я на досуге порылся в ваших исходниках, и обнаружил ошибку в http://www.croco.net/software/inifile/ :

IniFileParser::Parameter::Parameter(const char *aname, const char *aval)
{
name = new char[strlen(aname)+1];
strcpy(name, aname);
value = new char[strlen(aval)+1];
strcpy(value, aval);
next = 0;
}

IniFileParser::Parameter::~Parameter()
{
delete[] name;
delete[] value;
if(next) delete next;
}

-- в случае если второе выделение памяти закончилось неудачей (= выкинулось исключение), то первое выделение памяти утекает в неведомые края и остается с процессом до конца. Конечно, проблема так себе, но она имеет место. ИМХО, если использовать std::string в данном случае, то данная проблема исключена просто автоматически, и какого то оверхеда с тем, что сейчас имеется в этом коде, в связи с использованием STL, я не могу придумать (ну, кроме пары dword'ов, которые увеличат размер класса).

admin аватар

Полчаса здорового смеха продлевают жизнь на сутки

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

Но вот дальше, гм... э...

и обнаружил ошибку
если второе выделение памяти закончилось неудачей (= выкинулось исключение), то первое выделение памяти утекает в неведомые края и остается с процессом до конца

Вы ведь пошутили, да? Хотя, похоже, не пошутили.

Ну так вот, в современных (читай — послеDOSовских) условиях операция выделения динамической памяти может кончиться неудачей в двух случаях: если процесс дошёл до максимального возможного размера виртуального пространства (обычно 3Gb на 32-битных системах, на 64-битных можно считать, что этого предела нет вообще) и если в системе реально кончилось пространство для свопа. О наступлении второго случая ваш процесс не узнает — в такой ситуации, во-первых, встаёт раком вся система, и тут уже не до какого-то там несчастного процесса, и, во-вторых, ошибка как таковая случается не при выделении памяти, а при обращении к ней, и выглядит это как прилетевший фатальный сигнал, а вовсе не как NULL из malloc'а и тем более не как исключение из new. Что касается первого случая, то ежели процесс дорос до 3Gb, то, очевидно, работать дальше он заведомо не сможет, так что даже если при этом система его не пристрелит (насколько я понимаю, это зависит от версии ядра), то он в любом случае сдохнет сам, причём прямо сейчас. И уж во всяком случае жалкая утечка памяти, случившаяся непосредственно перед полным армагеддецом — это самое последнее, что должно нас волновать.

(NB: да, я не проверяю значение, возвращаемое malloc'ом)

если использовать std::string в данном случае, то данная проблема исключена просто автоматически

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

На вопрос про STL


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

Так я ж все их прочитал. На мой взгляд, они все несколько неконкретны, например "С ними не так буквально всё. Впрочем, это либо очевидно, либо — если не очевидно — то любые объяснения, как правило, бессмысленны". Не могли ли бы вы пояснить на примере, чем, по вашему мнению, замена голых указателей, в той же либе inifile, на std::string плоха? (я не про внешние интерфейсы, а про реализацию)


Ну так вот, в современных (читай — послеDOSовских) условиях операция выделения динамической памяти может кончиться неудачей в двух случаях: если процесс дошёл до максимального возможного размера виртуального пространства (обычно 3Gb на 32-битных системах, на 64-битных можно считать, что этого предела нет вообще) и если в системе реально кончилось пространство для свопа

А разве нельзя через ulimit ограничить память процесса? В OpenBSD вроде вообще это ограничено по дефолту довольно жестко.


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

Здесь соглашусь, думал, что этот параметр прилетает извне (из файла, например, где могут быть строки по 768мб), но по какой-то причине конструктор вызывается только с "" во втором параметре, если я ничего не пропустил. Вот, видимо, более "честный" пример на тему std::string vs char*:

delete[] value;
value = new char[ll+1];

-- тут строка вроде может прийти через IniFileParser::SetParam от пользователя либы (который мог прочитать целый гигабайт из файла), а т.к. value не обнуляется после delete[], то рано или поздно будет double free.

admin аватар

Тут вопросов целый ряд

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

  • почему я не приемлю технические стандарты как явление и называю их создателей (поголовно всех, во всяком случае, ныне действующих) опасными международными террористами;
  • почему я считаю неприемлемыми контейнерные классы (вообще, как таковые) и, соответственно, весь STL, даже если бы он и не был частью стандарта;
  • почему я не приемлю контейнерные классы и многое другое в стандарте языка (и вообще в одном описании с языком);
  • почему я считаю сугубо дебильным класс string безотносительно того, что он:
    • входит в стандарт
    • реализован на контейнерах из STL

    — иначе говоря, почему я не стал бы его использовать в программах, даже если бы он не был ни частью стандарта, ни частью STL; кстати, это, пожалуй, самый интересный вопрос — если STL я не использовал никогда ни в одной из своих программ, то классом string я до 2001 года активно пользовался, и лишь в 2001 году понял, что делаю это зря;

  • наконец, почему в библиотеке inifile я не использую не только string, но и свой собственный класс, созданный для обработки строк, который я называю ScriptVariable (см. там же библиотеку scriptpp)

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

Но есть одна вещь, за которую вам большое спасибо: это насчёт ulimit'ов. Я почему-то был уверен, что при достижении любого из установленных setrlimit(2)'ом предела процессу тут же приходит полярный зверь песец в виде фатального сигнала, ан нет: лимит на максимальный объём адресного пространства (который ulimit -v, он же RLIMIT_AS) работает мягче, там, оказывается, brk и mmap возвращают ошибку, и — вуаля! — malloc возвращает NULL. Вот те номер. Я-то был уверен, что заставить malloc вернуть NULL в современных условиях вообще невозможно, ну то есть если, конечно, не давать ему заведомо неправильный параметр, либо нулевой или отрицательный, либо превышающий размер адресного пространства.

С другой стороны, гм... double free? Программа, упёршаяся в лимит, до double free не доживёт, и разница между программой, проверяющей malloc на NULL, и программой, которая этого не делает, лишь в том, в каких конкретно выражениях она свалится. Точнее, кто нам скажет, что наша программа "всё": она сама или её окружение (последнее в форме SIGSEGV с сакраментальным "Segmentation fault, core dumped" в результате разыменования нулевого указателя). Программу, которая после NULL из malloc'а ещё что-то сможет сделать, я теоретически могу себе представить (ну там всякие свои кеши подропать, что-то на диск слить и освободить, etc), но на практике таких не бывает. Слишком много сил на это надо и слишком редко до такой ситуации доходит дело.

Хотя, конечно, валиться по SIGSEGV'у — это моветон. Придётся мне, видимо, пересмотреть своё отношение к значению, возвращаемому malloc'ом.

но на самом


но на самом деле их тут целый ряд

Не силен в формулировке своих мыслей, тут вы правильно сформулировали, что я хотел спросить:)

Сразу замечу, что я тоже считаю, что нельзя использовать STL при обучении конструкциям языка C++, потому что это несколько странно.


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

Было бы интересно почитать:)


На часть этих вопросов тут в комментариях ответы уже были даны


почему я считаю сугубо дебильным класс string

Замечу, что, насколько я помню, на этом сайте были только претензии к отсутствии copy-on-write в реализации строк. Но и при использовании malloc/free этого же тоже не происходит. Тем более с COW строками появляются неприятные проблемы, типа того, что если позвали c_str(), то надо делать копию памяти внутри вызовы перед возвратом указателя, т.к. кто-то может сохранить этот указатель (аналогично при любых вызовах приводящих к возврату сырой памяти).


но и свой собственный класс, созданный для обработки строк, который я называю ScriptVariable (см. там же библиотеку scriptpp)

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


С другой стороны, гм...

Я тут еще раз попытаюсь сформулировать что я хотел сказать на примере, безотносительно вашего кода. Допустим, у кого-то есть веб сервер, на который можно аплоадить .zip файлы и получать распакованные из архива файлы. Но нельзя же писать кодяру типа (далее псевдокод в стиле C с допущениями, что не будет integer overflow и не будет ошибок распаковки, связанных с форматом. По какой-то причине отступы пропали)

struct unpacked_file
{
    unsigned char* content;
    uint32_t content_size;
};

int unpack_zip(unsigned char *zip_file, uint32_t zip_file_size, struct unpacked_file **files, uint32_t *files_count)
{
    assert(zip_file);
    assert(files);
    assert(files_count);
    
    *files_count = get_file_count_from_zip(zip_file, zip_file_size);
    *files = malloc(*files_count * sizeof(struct unpacked_file));
    for (uint32_t i = 0; i != *files_count; ++i)
    {
        (*files)[i].content_size = get_one_file_size_from_zip(i, zip_file, zip_file_size);
        (*files)[i].content = malloc((*files)[i].content_size);
        unpack_one_file_from_zip(i, zip_file, zip_file_size, (*files)[i].content);
    }
}

Потому что кто-то может скрафтить такой zip файл, что несколько первых malloc'ов будут успешными, а последний потребует много-много памяти и выделение окончится ошибкой. Т.о. образом повесить (с помощью memory leak) или убить (из-за разыменования NULL'а) подобный сервер не будет проблемой. В таком контексте, игнорирование результата выделения памяти кажется крайне диким. Ну то есть такое такое поведение возможно для написания программ написанных на коленке для собственных целей, но это не уровень библиотек, которые можно использовать в подобных местах. И поощрять такой подход, на мой взгляд, неправильно. А если же корректно обрабатывать результат malloc'а, то занятая память освободится, сколько бы ее ни было и с сервером ничего не случится.

admin аватар

Пардон за

Пардон за задержку, было сугубо не до того.

Было бы интересно почитать:)

Ну да, осталось только написать.

насколько я помню, на этом сайте были только претензии к отсутствии copy-on-write в реализации строк

Свой класс ScriptVarable я написал (и перешёл на него, тем самым полностью отказавшись от стандартной библиотеки C++) лет за десять до того, как std::string утратил своё единственное полезное свойство.

Нет, класс string я считаю дебильным не поэтому, а потому, что, во-первых, его интерфейс построен дебильно (ЕМНИП, пять методов find, шесть методов replace и всё в таком духе; можете для сравнения посмотреть, как построен интерфейс ScriptVariable), и, во-вторых, потому что этот класс, вроде бы предзназначенный для работы со строками, не умеет как раз того, что постоянно приходится со строками делать — разбиение на слова/токены и перевод чисел в строковое представление и обратно.

с COW строками появляются неприятные проблемы, типа того, что если позвали c_str(), то надо делать копию памяти

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

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

а в либе inifile это просто не за чем

Дело не в этом, и, больше того, использование класса ScriptVariable с его развесистой функциональностью сделало бы реализацию inifile раза в полтора короче.

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

кто-то может скрафтить такой zip файл,

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

Т.е. malloc тут вообще ни при чём.

P.S. отступы пропали, потому что тэг code так не работает :) Поменял его на pre. А ещё длина строк в коде не имеет права вылезать за 80 символов, о причинах — вот тут, параграф 1.3.4, стр. 22.

во-первых, его

во-первых, его интерфейс построен дебильно (ЕМНИП, пять методов find, шесть методов replace и всё в таком духе; можете для сравнения посмотреть, как построен интерфейс ScriptVariable)

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

шесть методов replace

Забавно, что бывает и больше.

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

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

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

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

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

Да, я тоже так думаю. Но в примере выше, это было бы несколько неожиданно, что мой const (!) объект которым я владею вдруг может перестать быть владельцем памяти и я это могу заметить, притом что его никто не менял (например, я в другом месте вызвал operator[] для того же объекта, при условии, что там нет константности).

Возвращаясь к теме "чужой" памяти, зачем нужен EnsureOwnCopy() здесь:

char& ScriptVariable::operator[](int i)
{
    if(p)
        EnsureOwnCopy();
    else
        Create(i+1);
    return p->buf[i];
}

? Это же точно такая же "чужая" память, что и в c_str(), т.е. эти рассуждения можно переложить и на эту функцию, но здесь почему-то создание отдельной копии имеет место (на всякий случай уточню, что я в курсе, что если написать иначе, то будет ошибка).

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

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

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

Сразу делаете сисколы с неистовой переносимостью?:)

Ну так проблема-то, естественно, не в zip-файле,

Так я это и не утверждал.

(а) надо проверять размеры

Не совсем понял: какие размеры и как их проверять?

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

Так а я же не против. Можно обрабатывать порциями в памяти, результат писать на жесткий диск, например. Но проблема-то не уйдет: раньше кончалась оперативная память теперь -- жесткий диск. И не думаю, что эти техника работы с RAM/HDD должна как-то отличаться друг от друга с т.з. обработки ошибок. А брать какую-нибудь константу -- это имхо вообще не очень: у кого-то она будет адекватно выглядеть на его машине, у другого она будет выглядеть слишком большой. А через 100 лет константа будет казаться смешной.

А ещё длина строк в коде не имеет права вылезать за 80 символов

А у вас негров линчуют^W^W табы с пробелами перепутаны в scriptpp-0.3.00.tgz . И тега <strike> в комментариях нет.

admin аватар

это алгоритмы,

это алгоритмы, внешние по отношению к контейнеру

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

если говорить про контейнеры из STL

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

Этож уже алгоритмы

Разделение вида "контейнеры отдельно, алгоритмы отдельно" — это парадигма, внедрённая, собственно говоря, STL'ем и вредная, как и всё, что с этим бастардом связано. На самом же деле в ООП не бывает ничего "внешнего по отношению", там есть только объекты и их методы. Иной вопрос, что STL — это не ООП, а АТД, а его долбаный автор вообще не умеет ООП и неоднократно заявлял, что ООП есть методологическая ошибка.

Если у меня лежит const объект

Тут у вас наблюдается путаница. Как это "лежит const-объект"? Я ни разу не видел, чтобы свой собственный объект (именно объект) делали const'ом, хотя язык это и допускает.

Так вот, если у вас лежит ОБЪЕКТ — ваш собственный объект, например, локально сконструированный в стековом фрейме вызванной функции, и вы с этим объектом не делаете ничего, что могло бы изменить его состояние, то он не может вдруг внезапно перестать быть владельцем его памяти. При COW свою собственную копию делает тот, кого изменяют, а не тот, кто остаётся неизменным.

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

Сразу делаете сисколы с неистовой переносимостью?:)

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

Не совсем понял: какие размеры и как их проверять?

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

раньше кончалась оперативная память теперь -- жесткий диск.

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

через 100 лет константа будет казаться смешной

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

табы с пробелами перепутаны

где?

И тега <strike> в комментариях нет

Так его и нет в XHTML вообще-то.

По поводу STL,

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

Тут у вас наблюдается путаница.

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

Между прочим, сисколлы постабильнее будут, чем libc

Я ж говорил, про переносимость на разные UNIX'ы (хотя бы) и на разные хардварные платформы. Даже на линуксе x86 эти сисколы по разному делаются вроде (sysenter/syscall/int 80h). В этом плане, полагаю, переносимость околонулевая (если вы собрались хардкодить линуксовые вызовы, конечно, а не как интересный факт написали).

в том смысле что в libc поведение некоторых функций то и дело меняется

Я не специалист по libc -- можно ли примеры, ради интереса?

сравнив таковой с константой, заданной, например, в конфигурационном файле

Возможно, это логично для какой-то конечной программы, но не для либы. Я, например, (как разработчик конечной программы, которая использует некую либу), могу ограничить потребляемый размер через ulimit или запуская x86 на x64, позволяя использовать программе все что она пожелает. Не совсем ясно, в этих случаях, почему либа должна меня ограничивать в выборе средств. Впрочем, вы вроде согласились задуматься над проверкой кода возврата malloc'а, поэтому, видимо, и обсуждать здесь нечего.

где?

Вот здесь, файл scrvar.cpp, например.

admin аватар

По поводу STL,

По поводу STL, видимо, мне придется подождать статьи

Будет, конечно. Пока не могу сказать, когда.

Я ж говорил, про переносимость на разные UNIX'ы (хотя бы) и на разные хардварные платформы.

В этом случае достаточно сделать обёртки для сисколлов. У меня вон для асма (!) в книжке приводится файл, позволяющий все примеры из книжки запускать на Linux и FreeBSD, хотя там разные конвенции.

Даже на линуксе x86 эти сисколы по разному делаются вроде (sysenter/syscall/int 80h)

Насколько я понимаю, sysenter не использовался никогда, а syscall стал использоваться на x86_64. При этом ядро благополучно продолжает поддерживать int 80h для сохранения совместимости с 32-битными бинарниками. Но это к делу не относится :-)

если вы собрались хардкодить линуксовые вызовы

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

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

Я не специалист по libc -- можно ли примеры, ради интереса?

Да хоть бы тот же многострадальный signal. В ядре Linux этот сисколл есть и имеет семантику System V ("одноразовую"). В libc имеется одноимённая функция, реализованная через sigaction, и она долгое время демонстрировала семантику BSD; потом кому-то пришло в голову зачем-то ещё и SA_RESTART из неё взводить, что лично мне испортило песню: я студентов учил, что блокирующие системные вызовы при приходе сигнала вылетают с EINTR, что нужно учитывать, а ушлые студенты в какой-то момент мне продемонстрировали, что никто никуда уже не вылетает (хотя ещё недавно вылетало). А не далее как полгода назад у нас в терминальных классах обнаружилось, что дебианеры опять всё сломали и signal у них теперь снова в семантике System V.

Всё это время поведение _вызова_ signal оставалось абсолютно неизменным, только до него ещё поди доберись.

Возможно, это логично для какой-то конечной программы, но не для либы.

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

Для либы всё

Для либы всё ещё проще: она соответствующий лимит должна получить от головной программы

Ну, честно говоря, не видел ни одной либы, которая бы принимала себе на вход такой параметр как "лимит памяти". Все известные мне либы, в которых есть параметр связанный с аллокациями, принимают на вход кастомный аллокатор (например, curl, zlib, openssl), что позволяет полностью управлять динамической памятью либы, в т.ч. ограничивать ее. В таком подходе либа обязана правильно обрабатывать ошибки аллокации. А т.к. такой подход похоже более общий, то нет причин использовать передачу лимита памяти (и придется считаться с тем, что аллокация может вернуть NULL).

admin аватар

И что? Какое

И что? Какое это всё имеет отношение к предмету обсуждения? Или вы тут вываливаете всё, что по ассоциации вспомнили?

Уж отчаялся

Уж отчаялся получить ответ:)

Если под "хардкодить" понимается "делать вручную в каждом месте, где нужно обратиться к ядру", то это тупо неудобно

Я имел ввиду, что где-то придется вшивать в бинарь OS specific инфу, типа "какой сискол надо позвать для вызова open если это Linux для ARMv7".

Я имел в виду несколько другое

Так а это и не особо важно с т.з. зрения переносимости. Здесь проблема в том, что я не могу просто так взять и скомпилировать сорцы под другую ОС/архитектуру, если использовать такой подход (вызов голых сисколов вместо функций из стандартной библиотеки). Ну то есть, вы же физически не учтете в своей "прокладке" те ОС и архитектуры которые еще не появились, т.е. потенциальным клиентам придется допиливать эту "прокладку". Конечно, это все можно вынести в stand-alone либу, но тут получается зависимость либы от либы, а подобные зависимости вам (да и мне тоже) не нравится. И это даже не учитывая всякие экзотические случаи типа cygwin'а (подозреваю, что там внутри libc'шных функций прямых сисколов вообще не происходит).

Да хоть бы тот же многострадальный signal.
Всё это время поведение _вызова_ signal оставалось абсолютно неизменным
Я если, честно такого сискола, как signal не нашел ни в Linux, ни во FreeBSD. Есть только sigaction, который вполне себе фиксированный. Т.е. если я ничего не упустил, то в данном контексте несчетовый пример: сискола такого нет, соответственно, переход на сисколы бы не решил проблемы (такого сискола же нет!). А если использовать переносимый sigaction, то проблемы бы не возникло.

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

Подозреваю, что необходимость учета ошибки EINTR из системных функции не зависит от версии Debian в машзале:)

admin аватар

придется

придется вшивать в бинарь OS specific инфу

Не надо в неё ничего вшивать, бинарь сама по себе os-specific.

я не могу просто так взять и скомпилировать сорцы под другую ОС/архитектуру, если использовать такой подход

Условная компиляция поможет гиганту мысли

Я если, честно такого сискола, как signal не нашел

В Linux/i386 он имел номер 48, смотрите внимательнее. Правда, в x86_64 я его не вижу, видимо, всё-таки выкинули. Про FreeBSD не скажу, у меня её сейчас нет под рукой.

если использовать переносимый sigaction, то проблемы бы не возникло

Какой "проблемы"? Вы просили пример, я его привёл, ни о каких проблемах речи не шло. У меня вообще странное ощущение, что вы не помните, о чём сами же писали полтора поста назад. Ну так полистайте вверх и посмотрите. Про существование sigaction я, как можно догадаться, в курсе.

необходимость учета ошибки EINTR из системных функции не зависит от версии Debian в машзале

Студентам мало сказать, что вот так надо, а так не надо. Им ещё надо ответить на вопрос "почему". Иначе не поверят и правильно сделают.

Вот я им рассказал "почему", а они полезли проверять. И, опять же, правильно сделали, так и надо: многие вещи пока руками не потрогаешь, не поверишь. И -- упс -- всё оказалось не так.

HTTPS

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

admin аватар

Основная

Основная причина именно эта. Точнее говоря, сертификат не СТОИТ денег, за него ХОТЯТ денег. А стоить сгенерённые компьютером биты и байты не могут вообще нисколько, то есть принципиально — этим паразитам я не заплачу ни цента.

А стоить

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

admin аватар

Вот именно потому

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

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

Затраты

Затраты электричества на генерацию одного сертификата — сумма настолько ничтожная, что о ней невозможно говорить всерьёз, это сотые доли цента.
А вот идея выплат программистам как раз категорически неприемлема, собственно говоря, точно так же, как и в любых инициативных разработках, а равно и в других областях, где для этого пытаются применять так называемую "интеллектуальную собственность".
Так я же и написал в скобочках, что говорю это безотносительно центров сертификации. И про зарплату программистов тоже безотносительно этого. Пример несколько надуманный, но, допустим, кто-то хочет найти закрытый RSA ключ по открытому и для этого нанимает людей, платит им деньги за код/анализ, платит за электричество (большие деньги скорее всего), в итоге получает меньше килобайта информации за много денег. Разве и эти сгенеренные компьютером биты и байты тоже будут стоит нисколько?

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

admin аватар

Пример

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

Это совершенно другой случай, потому что...

эти сгенеренные компьютером биты и байты

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

Говоря про "сгенерённые компьютером биты и байты", я имел в виду такие биты и байты, которые сгенерированы компьютером по запросу без участия людей, то есть люди не тратят своё время на обслуживание отдельно взятого запроса. Если это не так, то есть если люди тратят своё время на обслуживание запроса, то стоимость таких битов и байтов будет определяться стоимостью трудозатрат. Собственно говоря, в мире есть всего две сущности, которые могут стоить денег: человеческое время (при условии, что оно потрачено не "вообще", а на обслуживание конкретного заказа; кто музыку заказывает, тот за неё и платит) и материальные (т.е. расходуемые) объекты. Электричество относится ко второй категории, то есть оно тоже стоит денег.

берут деньги за подтверждение личности и траты своего времени

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

Говоря про


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

Значит я вас не так понял:)


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

Ну, это жесть какая-то, действительно. Видимо, оплата за подобное пропадет из-за бесплатных сервисов, того же let's encrypt, предложенного выше.

Btw, на этом сайте похоже время спешит на час вперед (по крайней мере у меня в браузере так в таймстампах комментариев).

Про сертификаты

Так сейчас же появился свободный центр сертификации Let's encrypt, у них бесплатные сертификаты.

admin аватар

В принципе

В принципе штука любопытная, я про неё не знал, спасибо.

К сожалению, сходу ничего не вышло, там требуется клиент для ACME, и тот клиент, который они предлагают (certbot) написан на питоне. На моих серверах везде Opewall GNU/*/Linux, раскурить на нём питон в принципе можно (существуют пакеты от Гремлина и ещё от кого-то), но, откровенно говоря, лень, особенно если учесть, что результат далеко не всегда получается положительным, там постоянно вылезают трудности с библиотеками. Ещё два цента в мою копилку ненависти к развесистым интерпретируемым языкам.

Скорее всего, есть другие клиенты для этого ACME, прямо сейчас нет времени исследовать этот вопрос.

Список АСМЕ клиентов

Андрей Викторович, если вопрос получения сертификата для вас в какой-то момент станет шибко актуальным, то чтобы может сэкономить ваше время на поиски клиента для манипуляций с сертификатами этой конторы, вот их список на сайте самого проекта:
https://letsencrypt.org/docs/client-options/

admin аватар

Уже нашёл.

Уже нашёл. Осталось выбрать время и попробовать с этим что-то сделать.

Что почитать по С++

" ...буквально нечего было студентам ответить на вопрос "что почитать по C++""

Ирэ Пол. "Объектно-ориентированное программирование на языке С++", издание, которое существовало в 1997 году.
(В более поздних изданиях имя автора перевели как Айра Пол)

Выпускник ВМК,
преподавателя практикума (и С++) на 2 курсе - Т.В.Руденко вспоминаю с огромной благодарностью и уважением.

admin аватар

Ну, нынче год не тот

Если оно на русском было издано в 1997 или раньше, то на языке оригинала, скорее всего, вышло году этак в 1994. То есть до начала степановской эпохи.

Более поздние издания (которые как раз под именем "Айра Пол") я листал, не понравилось. Уже, к сожалению, не помню, чем конкретно не понравилось.

Тоже помню

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

— Книжечку эту смотрели?
— Да!!!
— Примерчики эти делали?
— Конечно!!!
— Все получилось?
— Да!!!
— И на компьютере запускали?
— А то!!!
— Вот и славно, приходите через две недели...

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

А чего вам не

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

Можно

Можно бесконечно долго вспоминать книги, на которых учился - их у всех наберется немалая книжная полка. Конечно, их помнишь, как и преподавателей, которые чего-то тебе объясняли, благодаря которым ты на сегодня что-то знаешь. Но не будешь же предлагать нынешним студентам всю эту книжную полку! Хорошо бы ее представить в каком-нибудь очень конспективном, "квинтэссентивном" виде. Убрав лишнее. Книги по С++ вовсе не закончили еще писать и издавать, так что нынешние студенты свое еще огребут. Но на вопрос студента "что почитать" конкретно, указать на что-то пальцем в самом деле непросто. Как сказал поверху совсем уже нестуденческого возраста "Гриша" - это только если искать по ВУЗам методички. Похоже на истину. Действительно, их пишут люди, которые сегодня и сейчас обучают программированию. А здесь еще и целые книги издаются, не методички даже. Так что, на вопрос "что почитать", по мне - так уже есть куда показать пальцем. И думаю, что место это не единственное, хотя много их быть не может. Но поди найди, если даже на этот сайт, где издаются книги по программированию, я попал совершенно случайно, по какой-то совершенно серой, незаметной ссылке!

admin аватар

Есть такая проблема, да

попал совершенно случайно, по какой-то совершенно серой, незаметной ссылке!

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

Так что мне остаётся надеяться на word of mouth, также известное как «сарафанное радио». С учётом этого я ценю любую ссылку, будь она сколь угодно серой и незаметной.

Книги ваши

Книги ваши прочитал. Отзывов положительных немало вижу. Действительно, есть нечто отличное, от того, что читал ранее. Да и движение какое-то чувствую!
А по каким книгам Вы сами учились? Какие могли бы порекомендовать? Интересует прежде всего С++. Литературы-то очень много, только всю подряд молотить - дело совсем неблагодарное, да и не думаю, что оно того стоит.

admin аватар

Иных уж нет, а те далече

Сам я учился программировать примерно в 1989--1993 гг. Это, понятное дело, был совсем другой мир. Цапнуть любую книжку, в которой хоть что-то полезное есть, и немедленно пробовать, пробовать, а вдруг получится, а компьютеров дома тогда ещё ни у кого не было (понятное дело, когда несчастная 286-я, уже тогда безнадёжно устаревшая, стоила как два автомобиля), поди урви себе пару часов машинного времени, ещё и не сразу найдёшь.

Большую часть книг, которые я тогда прочитал, я уже просто не помню, то есть помню, как выглядели, о чём там было написано, но не помню ни авторов, ни заглавий. Да и не интересны они сейчас. Вот разве что помню, по какой книге изучал C++, тут всё просто: по второму изданию Страуструпа. Это такой двухтомничек был не шибко большого формата, кстати, если попадётся — готов купить за любые разумные деньги, чисто для коллекции. (UPD: всё, неактуально, нашёл :-))

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

Second Edition

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

Извольте видеть - второе издание! Типа, собралась расширить чисто сишный кругозор...

admin аватар

Во как :)

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

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

То, что перевод

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

Но такой подход, как у Ольги - посмотреть, нарваться на паршивый перевод, плюнуть, да сказать, что "мне и в Си хорошо", может, не самый лучший. Все-таки "плюсы" не просто так появились, не просто так на них люди пишут. Кстати, не только профессионалы! Кто-то тут на странице с обсуждением двухтомника упоминал об интерпретаторе ROOT, разработанном и используемом в CERN'е (называйте его просто - центр ядерных исследований!;)). Так используют его именно пользователи - всякие математики, физики - им, вообще говоря, по барабану, что Python какой-нибудь выучить (который с точки зрения программиста подходил бы к задаче больше), что "плюсы" - образование, работа, вытекающая оттуда системность мышления... Ну, чего от них еще ожидать-то, от этих математиков, да физиков? :) Вот башка у них так заточена - потому и используют и "плюсы", и STL, и все что хочешь для своих нужд! И в интерпретируемом варианте, до кучи. Сам же процесс программирования для них глубоко побочный - вычисляют там чем-то, рисуют-визуализируют... На чем они это делают - им все равно, у них другие проблемы. Даже тут уже видно, что С++ для чего-то все-таки нужен.

Так что, с точки зрения "расширения сишного кругозора", возможно, следовало взять для начала не Страуструпа (тем более, с такими горбушками в переводе), а нечто более описательное - любой учебник по "плюсам". И на английском. Во избежание. Уж этого-то - как грязи! Вот, к примеру, вполне подходящая для такой цели книжка. С десяток тычков в Гугле. Обращено внимание лишь на год (2002), чтоб не сильно остандарчено было, да на сам текст - чтобы не носитель писал. По языковой "бедности" изложения это обычно хорошо видно. А то, попадутся такие, что идиоматов на полстраницы натолкают, еще и не каждый переводчик без стакана разберется, какого-нибудь специалиста филолога звать придется... Книжку по программированию, называется, взял! :)

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

admin аватар

Э-мммм, всяк кулик своё болото...

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

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

Все бы так

Все бы так писали "от безысходности"! Очень даже приличный учебник.
Тем более, что ориентирован он именно на "сишников", а не как это обычно водится, неизвестно на кого. У "сишника" (даже со стажем в год - это уже программист) возникают сто раз уже наблюдаемые мною проблемы - поскольку это УЖЕ программист, то уже и имеет некоторые свойственные мышлению черты. Прежде всего, для него важна последовательность изложения. Галопом по европам он скакать не будет. Поэтому даже корявый перевод (буквально в одном месте) - далеко ходить не надо! - вызывает негативную реакцию и остановку. Более того, возможно, на долгие годы очень подозрительный взгляд в сторону С++. Плюс, как УЖЕ программисту, необходимо при решении задачи (в том числе задачи обучения) видеть картину целиком. Какое там "целиком" может быть в случае языка С++, если на сегодня он, мало того, что уже представляет собой большое многоэтажное здание, еще и каждые три года изменяется-дополняется "стандартами"? Думаю, относительно необходимости таких "изменений-дополнений" ни у кого никаких иллюзий не возникает. Кстати, боюсь, что последний стандарт и сам Страуструп не знает, хотя он имеет все же еще некоторое отношение к языку С++. Так что, созданный чуть выше анекдотичный образ студента Страуструпа на экзамене можно легко развить:

— Студент Страуструп, назовите основные, наиболее важные изменения в языке, которые произошли с введением стандарта С++ 2023?
— Э...М-ммм...
— Студент Страуструп, как вы собираетесь учиться дальше?! Мы со следующего семестра приступаем к изучению таких книг, как "The C++ Programming Language", "The Design and Evolution of C++". Что вы сможете там понять? Если вам незнакомы самые элементарные, самые основополагающие вещи!

Фактически, на сегодня Страуструп стал просто придатком комитетов по стандартам С++, которые книжки-то свои, похоже, издает-переиздает именно по договорам с этими комитетами, в качестве рекламы грядущего стандарта. Т.е. по сути некогда самостоятельный и толковый человек был сожран этими самыми комитетами. Как он сам себя чувствует в связи с этим, сказать сложно. Впрочем, это уже совсем другая история!

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

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

120 страниц

120 страниц, и очень даже хорошо! Куда больше? Основы языка даны? Даны. Чего еще-то? Именно язык и может вызывать сложности - там немало нового по сравнению с Си. Концептуально. А библиотеки - они и в Африке библиотеки, если язык знаешь, какие проблемы? Тем более, что не обязательно это стандартные библиотеки. Это может быть и Qt, и U++, и тот же ROOT. И все разные! А язык в основе своей везде один. Так что, это куда лучше, чем долбать толстенный учебник, нацеленный именно на стандартные "плюсы". Ну, а то, что язык в принципе не должен бы включать каких бы то ни было библиотек - это само собой, просто в случае С++ на это можно давно уже плюнуть и позабыть :) Хотя, понимать это надо и осложнять себе жизнь толстенными учебниками без необходимости вовсе ни к чему. Есть короткий, толковый учебник по языку - и зашибись! Понадобится чего-то еще (скорее всего, библиотеки) - доберешь по ходу пьесы, не маленький...

Да, 120 страниц.

Кстати, по-моему, единственная книжка, в которой даже iostream отсутствует.
То есть, декларируется исходно - ИЗУЧАЕМ ЯЗЫК! Помнится, в целях оказания помощи младшим товарищам, я пытался определить для них последовательность изучения С++, зачеркивая фломастером в Шилдте то, что к языку не относится. Оставлял то, что должно быть понято в первую очередь. Просто брал на их глазах и зачирикивал целые страницы. Ну, очень грубо, конечно, получилось... Но они поняли! У них до этого момента был какой-то барьер при подходе к С++. Ничуть не способствовал его преодолению размер книжки Шилдта. А ведь по сравнению с тем, что можно увидеть сейчас - это не такая уж большая книжка. И тем не менее, барьер был! И он ушел. Люди поняли принципиальную последовательность изучения (начиная именно с языка!), и пошел нормальный процесс обучения. Сами, естественно, читали/разбирались, я не препод. Гавкнуть могу разок, когда вижу что людей откровенно не туда несет, но люди взрослые уже, и читать умеют сами. Да, в языке для сишника проблемы быть могут, концепции для него новые. Но и запредельно сложного ничего нет. Особенно, если не брать громадный учебник, паря себе же мозги.
А вот во "Введении в С++" Столярова уже все зачирикано. Причем с чувством, с толком, с расстановкой. Препод же! Его цель - именно научить. И не понимать нужную последовательность обучения он просто не может. Потому нету даже iostream. При чем здесь iostream? Вот, коли напомнили про Qt с UPP - именно сейчас ваяю небольшую приблуду на UPP. Нужно элементарно вывести в консоль отладочную запись. Попробуем "cout"? Ошибка! Извольте писать "Cout". С большой буквы. Другой iostream. И в кьюте все иначе. И другие библиотеки STL. Свои библиотеки. Хотя, к ним относится все то, что можно сказать про STL - использовать никто не запрещает, разумеется, но без них - будет эффективней. Это большие фреймворки, там все свое. Быть может, я сейчас пишу не на С++? На чем-то другом? Ну, можно сказать, что на "нестандартном С++". Что это меняет? Язык-то тот же! Тот самый, который описан во "Введении в С++". Причем, коротко, четко и ясно. Без лишних нахлобучек.
В общем, "Введение в С++" - хороший стартовый учебник. Останется немногое - взять свой последний купленный, тяжеленный и с трудом донесенный до дома учебник по "плюсам", отыскать его автора, затолкать этот учебник по его прямому назначению, и все - весь С++ у вас как на ладони! :)

Ого!

Вот это нонича цены на стандарты! $212 — членам, $265 — не-членам.
По памяти, вроде, полтинник было. Но то ли давно не заходил, то ли овес нынче дорог.
Конечно, вопрос стандартизаций — это прежде всего, вопрос денег. Так было всегда. Кстати, и время для первых атак стандартизаторов на язык было выбрано очень удачно — конец прошлого, самое начало этого века, время, когда поднималась Java ("Написанное однажды — работает везде" — лозунг очень мощный!), время, когда много известных, авторитетных весьма программистов полностью ушли в Java. Сообщество было ослаблено. Так что, произнесенное где-то выше "профсоюз программистов ниже среднего уровня" применительно к стандарту 2003 года имеет под собой вполне реальную основу. А такие настроения, как "еще год-два, и все, абсолютно все будут писать на Java" в начале века были действительно очень популярны. Очевидно, что сбыться этому было никак не суждено. Но настроения такие были.

Что касается Страуструпа, то ничуть его не жалко, как бы он там себя ни чувствовал — пусть даже разгул стандартизаторов станет его личной трагедией, виноват он сам. Да, на сегодня он просто придаток стандартов, не больше. Просто картинка на упаковке. Но они же почти одного возраста с хайрастым и бородатым Столлманом! Сколько тот орал о собственности, о лицензировании? И на сегодня попробуй срубить бабла на чем-нибудь GNU-том, воткнув хотя бы маленький кусочек кода в какой-нибудь закрытый коммерческий проект! А Страуструп как в другом мире жил! Столлман это же не какой-то классово-чуждый элемент для Страуструпа — такой же программист, из страны вполне демократической, а вовсе не какой-то герой-комсомолец с горящими глазами, ратующий "за обчественность" на общественных же началах из советской литературы. Первые версии emacs, кстати, по триста баксов уходили, хоть и по большей части платилось за доставку — по тем временам совсем немало. То есть, прислушаться к нему Страуструп вполне мог, не просто же так тот распинался! Дело по большей части именно в этом. Отпустил вожжи Страуструп. Вот зачем? В Perl, Python — лицензии ведь есть? Для человека незнакомого совершенно с тем как живут и мыслят эти самые по Задорнову "ну тупы-ы-ые", они просто смешны. Однако, именно благодаря им ни в Perl, ни в Python ни одна мышь в языке и пукнуть не посмеет без ведома Larry и Guido. А здесь — стандарт за стандартом! И если это дело нравится Страуструпу, то с четверть века назад я его представлял себе несколько другим. Но все возможно, конечно... Остается лишь радоваться, что дело это не затрагивает язык Си. А могло вполне! Просто "младший брат" прикрыл грудью. Может, именно в этом его историческая миссия. Стандартных "нововведений" в Си не так уж много. Из откровенно непристойных только переменные массивы вспоминаются. Видать, кто-то из стандартизаторов сподобился изучить Бейсик. А скорее просто оператор REDIM. Честь ему и хвала, конечно, и большое человеческое спасибо за то, что на этом остановился.

Относительно же "Введения в С++" — да, написано хорошо и полезно. Более десяти лет, правда, не заходил в российские книжные магазины, но практически уверен, что ничего нового, касаемо программирования, там появиться не могло — в сети бы появилось. Это только по вузам если выискивать-вылавливать какие-то методички, это еще возможно, с тиражом сто штук на круг. А в магазинах кроме откровенной макулатуры, из которой в лучшем случае можно что-то выдирать поабзацно, сроду ничего не видел. А уж тем более, ожидать нечто целостного, что можно на полном серьезе воспринимать как учебник, не приходится никак. Здесь же, как раз, имеется некое последовательное изложение. Причем очень короткое (менее 150 страниц — это учебник по "плюсам", где вы такое видели?) и ненапряжное. Которое стопроцентно может быть понято человеком, владеющим Си. Даются именно те основы, которые являются принципиально необходимыми. И славно! Толстенный учебник, в который заталкивают все, что можно (уж кто во что горазд!) оптимизм вряд ли у кого вызовет. Да это и не нужно вовсе! В то же время этих полутора сотен страниц вполне достаточно чтобы начать переделывать свои же программы на Си. Пожалуй, это лучший способ разобраться с С++. Заодно выработается обычная совершенно способность для людей пишущих как на Си, так и на С++ легко переключаться между взглядом на программу с точки зрения Си и "плюсовой" точкой зрения. Она действительно совершенно обычная. А расхожий штамп, идущий от Страуструпа, что человеку, хорошо знающему Си, сложнее обучиться С++ ничего реального под собой не имеет. Скажем так, "неаккуратно человек выразился". То, что сам ход мышления на этих двух языках несколько отличается, так это понятно каждому, кто прочитал с десяток страниц любого совершенно учебника. Но никаких фатальных последствий для знатоков Си, разумеется, нет. Имхо. Правда, как ни крути, знание Си, все же, обязательно — это уже не "имхо", это даже и не смешите! Иначе... короче, даже и не смешите. Так что, книжка вполне, и как раз. Отписываться, впрочем, в обсуждении не стал, "имеющий глаза, да увидит". Да это и не удивляет особо — если человек 74-го года, пусть даже в 20 лет начал учиться программировать, то он в любом случае попадает на еще достандартный С++. То есть, по возрасту никак не относится к тому пионерскому отряду, место которому уже заботливо подготовлено Майкрософт — резервация .NET. Ведь какую бы систему лично не предпочитали представители этого пионерского отряда, деньги зарабатывать в качестве программистов им, скорее всего, придется, именно под Windows. А Майкрософт уже лет десять как целенаправленно выбивает из Windows программистов на С++. Самыми разными методами. Так что, точка зрения Столярова, что учиться программированию надо не под Windows, совпадает полностью с точкой зрения Майкрософт (в части языка С++). Хоть и по разным причинам — первый Windows вообще, похоже, за систему не держит, что же касается второй, то их цель предельно простая — оставить С++, как системный язык, лишь для программистов Майкрософт, всех же остальных — засунуть под .NET. Что ж, логика ясна как день — безопасность системы. Пущай делают чего хотят под виртуальной машиной, а в систему — ни-ни!

Как-то зашел на эту страницу, пробежался сверху, почему-то начало века вспомнилось, время для меня значительно более активное, нежели сейчас, потому и отписался несколько больше, чем предполагал. В Питере еще жил, говорил и читал по-русски, нечто ностальгическое просто... В любом случае, автору удачи пожелаю — "Написанное хорошо, читают всегда". А научить-объяснить вряд ли проще, чем самому что-то придумать. Во всяком случае, изобретают-придумывают что-то новое куда чаще, чем появляются люди, которые в состоянии это новое толково объяснить. Хоть и стоять на крайних точках зрения и переть против течения более характерно лет для 20, когда 40 — не уверен. Впрочем, каждому — свое. Мне-то уже еще на 20 больше, может, и в этом дело. Но, как бы то ни было — удачи.

А вдруг...

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

Вопрос, быть может, не совсем корректный, не знаю... А может, даже и не вопрос...
Книги ваши читал, некоторую дополнительную информацию выдал этот форум. Однако, досадно временами, что нигде и никогда не встречалось ваших лекций - именно тех, что читаются вживую. Книги-то вы издаете? И вовсе не "банального прибытку" ради, как вижу. А вот живые лекции почему-то отсутствуют! Хотя, по жизни, текста в них ничуть не меньше, а толку (пусть даже со всеми отклонениями от темы) еще и поболе будет! Уж если даете возможность людям учиться по книгам, и неплохим книгам - скажем, общее количество книг от "сиплюспюс-донцовых" (думаю, термин ясен!) уже давно превышает общее количество "донцовых литературных", что те, что другие не тянут даже на подставку для чайника, а вот по вашим - учиться вполне можно! И по комментам вижу, что я не одинок в своей точке зрения. Так почему бы и живые лекции не издать, не распространить? Ну, или хотя бы дайте какую-нибудь (пусть профессионально в будущем никчемную), но аккуратную студентку, которая записывать умеет, пусть даже не понимая что! Повеселее было бы всяко... Не все же в Москве живут, да учатся! Это может на частных уроках какие тайные знания/откровения, а то, что по любому в аудитории-то звучит...
Город у нас немаленький, ВУЗов хватает, и тем не менее. Было тут вообще пожелание обратиться к Столярову с затеей откомментировать построчно последнее издание Страуструпа - жанр-то, редчайший, умер, фактически, не родившись в средние века. В основном, "комментировали" Аристотеля (а кто такому суровому дядьке перечить будет? Потому и шли в основном упрощающие понимание комменты), но здесь-то всяко пошире поле деятельности! Ну, об этом только помечтать... А в лекциях-то сложного ведь ничего нет? Хороший, нечасто встречающийся материал и лишь для нескольких десятков человек! Мрак, короче...

admin аватар

Живые лекции?

Как вы себе это представляете?

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

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

Да, тут был

Да, тут был мимоходом в Москве, тоже была идея заехать, да послушать Столярова "вживую"! :)
Прежде всего, потому, что где-то в сети встречалось описание манеры его преподавания. Своеобразно и весело написано, похоже, действительно, есть на что глянуть, что послушать. В частности, так славно описывались децибелы голоса, что послушать бы неплохо, конечно... Впрочем, идея эта была не настолько серьезна, как у Анонимуса с постом №73. Разумеется, были и более серьезные дела, да и попасть на лекцию в один день в конкретный ВУЗ - это же как подгадать надо!
Что касается видео, то - да, неплохо бы. Однако, вопрос уже этот задавался, и однозначный ответ был дан. И спорить тут, очевидно, бесполезно - "суррогат", и все тут! :) Ну, а лекции "девочек-отличниц", конечно, никакой критики не держат - ведь то, что в книге, самим автором вычитывается и правится десятки и сотни раз, чего тут можно ожидать от какой-то девочки, сидящей на лекции?! Конечно, триллер...
Мне единственное что по тексту Анонимуса показалось, что это явный студент, которому понравилась ПОНЯТНОСТЬ изложения и который бы хотел получать такое же ПОНЯТНОЕ изложение дальше. Спору нет, подобная ПОНЯТНОСТЬ - вещь, действительно, редкая. И она обращает на себя внимание. И дано сие не всем. И связана она, похоже, вовсе даже не с предыдушим опытом программирования автора, с чем-то другим... Дело лишь в том, что никакой Столяров на ВСЕ ВОПРОСЫ ответы не даст. Самому постараться придется. Вот вижу написано - "книги ваши читал". И чего? Допустим, в первом томе очень даже ПОНЯТНО описаны некоторые структуры данных. Действительно, очень ПОНЯТНО, мне тоже очень понравилось. На примере Паскаля. А на сях делал? Смотрел? А на плюсах? А как это в STL? Или "сам сказал", что STL - это бяка? А может, врет! Почему нет? Взял, да посмотрел - как оно... Вот это и есть самая настоящая "живая лекция"! :) Замечу, что в обсуждении книги не один человек (и это совсем не новички "хэлловорлдные"), уже по коду в самых маленьких программах видно, САМИ что-то смотрят, ставят вопросы, ищут ответы, находят, интересуются точкой зрения... Вот это и есть опять же "живая лекция"! Люди сами учатся. Кстати, Столяров тоже учиться не прекращал - в этом можно не сомневаться...
Не в огорчение, студент - даже если в каждую аудиторию вашего ВУЗА запихать по столярову, умеющему объяснять ПОНЯТНО, то без самостоятельной работы (чисто в расчете на столяровых), как пришел на первый курс идиотом, так и останешься им на пятом! А диплом - это бумажка, сам по себе, от идиотизма никого и никогда не спасал!
Впрочем, надо отметить еще и такой момент - как бы Андрей Викторович не упирались с видеолекциями, а популярность однако растет без всяких ютубов - чего стоит одно предложение целую книгу Страуструпа откомментировать! :) А ведь личный сайт незаметный совсем! Да и тиражи изданных книг не поражают воображение - поди, найди в магазинах! И тем не менее...

Из того, что

Из того, что человек интересуется видеолекциями, еще не вытекает, что он студент.
Например (специально порыла), вижу что кроме меня до №73 никто видеолекциями не интересовался. И именно мне был дан ответ о "суррогатности" и "самообманности" последних. Хотя, я уже не студентка вовсе.

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

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

В общем, книжки есть - читаем! По этим "началам программирования" с учетом самостоятельной работы, вполне можно получить приличный средний уровень. Не случайно, думаю, в обсуждении двухтомника откровенных новичков не видно. У всех отписавшихся самые "начальные" навыки уже есть. А они, тем не менее, читают почему-то "Введение в профессию". А некоторые из моих знакомых, так и вообще в РЕФАЛ полезли, да в InteLib'ы всякие - за 10-15 лет, конечно, многое изменилось, но и в древних манускриптах, видать, что-то интересное от автора отыскать можно.

Вообще, в разное время отслеживались сайты, на которые вполне реально можно послать обучающихся программированию. Это был когда-то и сайт разработчиков PascalABC (ныне - ABC.NET - совсем уж не та балалайка), и питерского препода Полякова (только с С++ и школьниками он всяко погорячился - даже уровень абстракции там явно не по возрасту, но информация полезная была), из Сибири кое-кто был... В общем, немного совсем. А на сегодня только если сюда отослать, больше некуда!

Две большие разницы

Что касается учителя Полякова, то это не совсем "обучение программированию". Здесь две большие разницы - то, чему он учит, входит в область "общих знаний". Что, собственно, и должна давать школа. Всё, что касается информатики - это у них обязательные предметы. Потому и отношение школьников к этим предметам самое, что ни на есть обычное. Зачастую дофенистическое. Слов нет, если из них кто-то продолжит обучение по тому же направлению, ему будет проще. Но выход там будущих программистов не более, чем из школ с математическим уклоном математиков. То есть, один на несколько выпусков. Хотя, общая грамотность у них, конечно, повыше. Не случайно Поляков "заслуженный учитель". Но факт остается фактом - реальный выход небольшой. Даже несмотря на то, что люди вообще и школьники в частности стали значительно более прагматичны с тех пор, как я заканчивала школу, о выборе профессии в школе даже и речи быть не может.
А у Столярова направленность именно на человека, который сознательно выбрал профессию и по ней учится. Это уже студенты. Другая возрастная категория. Именно поэтому поляковские книжки вполне можно читать, а столяровские нужно отрабатывать. Два неплохих преподавателя, но у них совершенно разные цели. И то, что у Полякова контингент учащихся несколько мифологический - ну, не потянет школьник многие из тем, которые он вещает, совершенно однозначно. Тем не менее, и плохого ничего нет. Но это, всё же, не "обучение программированию".

Насмешили!

Какие "видеолекции", вы о чём? :) Вот этого уж никак ожидать не приходится!
Книжки откройте ещё разок, просмотрите. По форуму пробегитесь. Для кого написано? Для всех ли? В это сложно поверить, но даже на сегодня существует куча людей (в том числе программистов), которые ни разу в жизни не ставили nix'ы ни в каком виде. Ни разу! Можно посочувствовать, конечно, но факт остаётся фактом — они из потенциальных читателей выпадают однозначно. Грубо — половину "всех" уже выкинули. Можно ли подготовить программиста под Windows? Ну, разумеется! Как и под любой другой системой. Но здесь-то постановка чёткая — nix'ы, и никак иначе! Итак, половины уже нет.

Идём дальше. Точку зрения про STL, про стандарты все видели? Наверно, не был бы столь категоричен, но основания для отрицания "стандартных нововведений" безусловно есть. Стандартно-разжиревший С++, например, позволяет писать откровенно неприличный код. Откровенным дуракам. И они его пишут! Кстати, если по совести, то всегда казалось, что разработка стандарта 2003 года (просто за обсуждением и подготовкой этого стандарта ещё следил) вообще имела целью создание "профсоюза программистов среднего и ниже среднего уровня". То есть, под отрицанием STL (Столяров здесь, кстати, вовсе не одинок) неплохо бы понимать просто неприятие халтуры, уважение к себе, к собственному коду. И существует немало людей, которые используют подмножество С++, не включающее STL. Но сколько народу выкинем дополнительно, безусловно о ней возрыдающих? ;) Сколько осталось?

Ну, а теперь прикинем расклад стандартной студенческой группы, присутствующей обычно на лекции. Сколько человек в принципе пригодны для обучения? Тех, которые обладают нужным для конкретного преподавателя объёмом знаний, способностями, возможно, некоторым сходством понятий. Пять! Если десять — это очень сильная группа. Можно сказать, "повезло". Хотя, это "везение" принесёт с собой и больший объём работы. Оставшийся контингент интересует обычно не более, чем прошлогодний снег в Зимбабве. Да и вообще, "народнохозяйственное значение" подготовленных специалистов вряд ли кого интересовало даже в советские времена. Некоторое значение оно, конечно, имеет, как показатель успешности собственной преподавательской деятельности, но в основном, преподавание — это просто самовыражение, утверждение собственной точки зрения — "как оно должно быть".

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

Вопрос по оконному менеджеру fvwn2

Андрей Викторович, здравствуйте.
Хочу задать вопрос по оконному менеджеру fvwn.
Несколько месяцев являюсь пользователем Линукс. На основном компьютере установлена Mint, благо производительности машины хватает.
На второй машине (небтуке, у которого оперативная память всего гигабайт) иногда "подтормаживают" даже kubuntu и lubuntu.
В вашей книге прочитал про оконный менеджер fvwn2, хочу попробовать установить его на нетбуке, чтобы еще чуть повысить производительность.
Данный менеджер, как я понял, требует серьезной кастомизации. Можете порекомендовать какие-нибудь материалы по первым шагам в работе с этим менеджером? Попытки чтения мануалов (на языке оригинала) даются тяжеловато...

admin аватар

Поставьте IceWM

Поставьте IceWM :-)

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

Да, рабочий

Да, рабочий стол - это дело привычки. Помнится, когда-то меня вполне устраивали вторые "кеды". Но когда они подросли на размерчик, я сместился на тогдашний Gnome. Правда, когда и он дорос до "gnome 3", вынужден был уже перейти на xfce, где сейчас и пребываю. И пока доволен. Единственное, что смущает, так это возможные перспективы его "развития" в сторону вещей, которые (по возможности) будут все равно отключаться, что опять же может привести к изменению привычек. При всем при этом, я бы не сказал, что у меня машина слабая.
Это я к тому, что в линуксах тоже далеко не все так безоблачно.

admin аватар

Гыгыгы

Поставьте IceWM :-)

What about D language?

Если возможно, хотя бы одним словом...

admin аватар

Одним словом не могу

Одним словом у меня не получится, могу вот тремя: "чёрт его знает" :-)

Ага!

Что ж, спасибо! Тогда займёмся. Мнение важно.
Программистом быть, конечно, неплохо, но быть чёртом... Ещё заманчивей! :)

Нет, всё же, не "ага"!

Передумал я быть чёртом.
Две недели ушло на чтение Александреску вперемешку с каким-то турком. В результате написанные тестовые программки по размеру (в десятки и сотни раз, как ни старайся) оказались больше, чем аналоги на Си. Скорость исполнения в разы ниже. Если в этом самом "D" понаотключать всё подряд, то, может, дела будут обстоять и получше. Но уж системным языком D я назвать бы не решился никак! Короче, не торт. Каждому своё, конечно, но для меня это было просто даром потраченное время.

Желанный Язык

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

Очень интересует ваше мнение!

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

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

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

Такой же аналогичный вопрос насчет синтаксического сахара и его количества! Мне думается важно качество сахара, но что насчет количества?

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

Мне кажется кандидатами на донорство могли бы выступить такие языки как:
- Oberon
- Nim
- Seed7
- D
- Ruby
- Basic (Euphoria, FreeBasic, LangMF)

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

admin аватар

Уже

Относительно того, каким должен быть идеальный язык, уже пара статей была написана, первая из них ещё в 2007 году:

http://www.croco.net/croco/papers/stolyarov_2007b.pdf

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

Программа diamond "Азы программирования".

На стр. 239 в программе diamond есть небольшая недоработка в строке: "until (h > 0) and (h mod 2 = 1);", в этом случае можно ввести 1, тогда бриллиант не получается, а лишь 1 *. Если установить h > 2, то получится бриллиант из 4 *.

admin аватар

Ну так это вроде бы нормально

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

Опечатка в "Азы программирования".

Ошибка на стр. 217. Во втором предложении сверху -- путаница.

admin аватар

?

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

Возможно туплю

На стр. 215 в последнем абзаце -- "... правильнее будет говорить о "вводе из стандартного потока ввода."", а на стр. 217 -- "... правильнее говорить о выводе в ((из(?)) стандартный поток вывода...".

admin аватар

Всё ещё не вижу проблемы

Когда мы что-то вводим, то это что-то есть где-то там в потоке ввода, а мы это оттуда (_ИЗ_ потока) добываем. А когда мы что-то вЫводим, то оно, вот это вот "что-то", есть у нас, и мы это "что-то" в поток запихиваем. _В_ поток.

Или я вас опять не понял? :)

Я уже и сам

Я уже и сам запутался.) Вроде логичнее, когда вводим _В_ и выводим _ИЗ_. В любом случае, у Вас в книге вроде как одна и та же мысль на стр. 215 и 217.Если это так, то похоже, что в одном из предложений есть неточность.
P.S. Капча стала невероятно сложной. :(

admin аватар

Когда вводим,

Когда вводим, информация идёт В нашу программу (в её переменные) -- естественно, _из_ потока ввода. В случае вывода всё наоборот.

Так я именно об

Так я именно об этом и говорю, а в книге написано иначе.)

Обнаружил ещё две неточности. В томе II на стр.193 написано - дает себя знать, вместо дает о себе знать.Так же а стр.210 в полном примере discr вместо discrim, программа не скомпилируется и не заработает.

admin аватар

Проверил ещё

Проверил ещё раз. Насколько я могу судить, в тексте книги всё в порядке (это про потоки).

Про discrim -- да, есть такое.

Go

Go перенаправляется на /dev/ass, как и все прочие поделки от Гугеля (простите, не удержался)...
Но у меня к Вам похожий чисто внешне вопрос и вовсе не холивару священнага ради - а что думаете о Rust? Таки сможет ли он, так долго зревший в утробе и ныне, наконец-то родившись, увы, сразу же отданный на растерзание покемонам от программизма прийти на смену усталому С, да ещё не просто заменить, но превзойти (как это высоко и красиво мечталось его первому биологическому отцу)?

admin аватар

Не знаю ответа, увы

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

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

Опечатка в "Азы программирования".

Здравствуйте. На странице 177 второй снизу абац содержит опечатку -- "...далеко не все их (из) них существуют..."

admin аватар

Спасибо!

Есть такое, да.

SeekEof и конвейер

Здравствуйте, Андрей. Есть вопрос по параграфу 2.7.4 первого тома "Введения в профессию".
После замены eof на SeekEof правильно работают ввод с клавиатуры и перенаправление из файла, но не конвейер.

$ ./simple_sum
2 3 4 5
4 14
$ cat numbers.txt
2 3 4 5
$ ./simple_sum < numbers.txt
4 14
$ echo 2 3 4 5 | ./simple_sum
1 0
$

Здесь у кого-то тоже проблемы с SeekEof. Неужели это баг в Free Pascal?

$ uname -v
FreeBSD 10.3-RELEASE-p4 #0: Sat May 28 09:52:35 UTC 2016     root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC
$ pkg version -n fpc
fpc-3.0.0                          =
$

RTFM

Неужели это баг в Free Pascal?

Этот "баг" известен уже лет десять. И в документации на SeekEOF чётко написано:

The SeekEOF function can only be used on real textfiles: when assigning the file to other kinds of (virtual) text files, the function may fail, although it will perform a number of tests to guard against wrong usage.

admin аватар

Берите выше -- я

Берите выше -- я думаю, скорее лет двадцать. Я даже думал его пофиксить сам, место нужное нашёл и ужаснулся -- там откровенный write-only code. Авторы этого фрагмента даже постоянный размер отступов выдержать не справились.

В общем, плохо всё с этой функцией.

admin аватар

Похоже на то

Судя по тому, что strace показывает, эта штука убеждается, что на входе не терминал, и на этом основании решает, что можно использовать lseek. А на pipe это у неё, естественно, не получается. Руки бы поотрывать :-)

Go

Доброго времени суток!

Хотелось бы услышать Ваше мнение о языке Go. После поверхностного ознакомления, мне он показался хорошей альтернативой таким языка как С++ и Java. Что Вы думаете о нем?

admin аватар

Императивный

Императивный язык со сборкой мусора -- это нонсенс. Ну то есть оно может быть альтернативой для Java, поскольку там тоже сборка мусора, но это просто замена одного сорта дерьма на другой. Альтернативой C++ эта хреновина быть не может. К большому сожалению -- поскольку "плюсам" давно уже требуется замена.

Так Go

Так Go объектно-ориентированный, просто вместо иерархии классов есть интерфейсы, совсем непохожие на интерфейсы в Java.

Не знаю читали или нет вот эту статью (15 глава: Composition not inheritance).

admin аватар

В чистом

В чистом объектно-ориентированном языке не может быть ни вызовов функций, ни самих функций (только методы), ни переменных, ни присваивания. Так что Go нельзя рассматривать как чисто объектно-ориентированный язык, это, очевидно, очередной представитель семейства императивно-объектных гибридов, к которым относятся и C++, и Java, и C#. Повторяю, с моей точки зрения сборка мусора в таком языке означает приговор этому языку, я вообще не готов всерьёз рассматривать подобных бастардов (да, Java и C# тоже именно такие бастарды и даже, наверное, хуже).

Впрочем, ваш вопрос исходно имел отношение к тому, можно ли рассматривать Go в качестве альтернативы C++ и Java. Я не готов отвечать на вопрос, кто лучше -- Java или Go, поскольку имею некое предубеждение против сравнительного анализа сортов дерьма; в качестве же "альтернативы" C++ этот Go вообще никак не годится, то есть заведомо, то есть можно даже об этом не думать. Хотя бы даже из-за GC, хотя не только из-за него: там и range checking неотрубаемый, и много чего ещё.

Опечатка в первом томе книги

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

admin аватар

Уже нашли

Ну да, единица -- это исполнение, а не чтение; вы ведь это имели в виду?

Авторское Право

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

Вы украли концепт и идею и даже не знаете назначение многих символов там и что под ними скрыто.

admin аватар

Не только задумывался, но и точно знаю ситуацию

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

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

Теперь к делу. Я требую извинений за слово "украл". Если таковых не последует, дальнейшие ваши комментарии на этом сайте премодерацию не пройдут.

В конце 28

В конце 28 страницы pdf стоит число 20286 - ОПЕЧАТКА!

admin аватар

Да, факт.

Естественно, должно быть 80286.

Сетевая академия Cisco

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

Стали бы вы обучаться в Сетевой академии Cisco, будучи студентом, например, если бы обладали такой возможностью (по времени и пр.)? Другими словами, видите ли вы пользу (учебно-научную, практическую или какую-нибудь другую) в такой программе?

P. S. Спрашиваю у вас, поскольку Cisco --- один из мировых лидеров производства сетевой аппаратуры, Сетевая академия --- комплекс образовательных программ, направленных на повышение компетентности IT-специалистов в области сетей и пр., а вы, если не ошибаюсь, достаточно долго работали с организацией/администрированием сетей и хорошо с этим делом знакомы.

admin аватар

Не стал бы, разумеется

Cisco — просто один из монополистов с задранными в космос ценами на железо. Заниматься изучением их "технологий" можно, на мой взгляд, в одном и только одном случае: если вам прямо здесь и сейчас необходимо срочно что-то делать с их железками. Такое бывает, если (1) вас УЖЕ взяли на работу и там надо дрессировать этих "кошечек" или (2) вам кто-то (буквально) подарил железку от Cisco (мне вот на день варенья недавно задарили старый каталист, чисто на поностальгировать) и вы хотите из неё извлечь какую-нибудь пользу.

NB: я с этими "кошками" в своё время разобрался без каких-либо "академий", без документации и даже без гугла в помощь, ибо гугла тогда ещё не было (1997 год). Правда, на моё счастье, было у кого спросить, когда становилось совсем непонятно. А сейчас на дворе вовсе не 1997 год, а совсем даже 2015-й, в интернете просто ПРОРВА информации о том, как справиться с любой мало-мальски распространённой железкой, феерическое количество всевозможных форумов, где можно задать вопросы, когда всё остальное не помогает, и т.д. Я это к тому, что если вдруг (!) вам понадобятся эти или другие железяки, то никаких проблем с тем, чтобы с ними разобраться, не будет. Просто пусть они вам сначала понадобятся.

А пока они вам не понадобились, не тратьте своё бесценное время на изучение чьих бы то ни было проприетарных бастардов. Изучайте лучше математику, накачивайте эластичность мозга. Оно всяко полезнее. Это можно выразить и иначе: своё драгоценное время очевидно полезнее инвестировать в себя, любимого, нежели чем в благополучие коммерческого гиганта, у которого, кстати, и так всё хорошо. Изучая технологии, которые являются чьей-то собственностью, вы попросту дарите собственное время владельцу этой технологии. У вас что, много лишнего времени? Я бы сказал, время вообще не может быть лишним, жизнь гораздо короче, чем хотелось бы.

Ах да, ещё один момент: если бы я сейчас строил провайдера, как в тогда 1997 году, то ни одной циски в моей сети бы не было. Это, замечу, несмотря на то, что обращаться я с ними прекрасно умею, там по моим наблюдениям почти ничего не поменялось за 15 лет.

В целом я

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

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

Поскольку Вы сказали, что в настоящее время обошлись бы без оборудования Cisco при строительстве провайдера, интересно узнать, какое оборудование Вы бы выбрали сейчас и по каким причинам?

admin аватар

И при чём тут курсы конкретного вендора?

Не забывайте, что Cisco — коммерческая компания, так что всё, что они делают, направлено на извлечение прибыли (по определению; это не плохо и не хорошо, это просто факт). Естественно, и все их курсы направлены в основном на пополнение рядов специалистов, умеющих работать именно с их оборудованием. Когда такой "спец" приходит куда-то строить сеть, он, естественно, требует закупить оборудование Cisco, мотивируя это тем, что оно такое замечательное, продвинутое, классное и всё такое, но на самом деле причина одна: он, вот этот "спец" хренов, Cisco умеет, а остальное не умеет. А уж это ваше «охватить одним взглядом всю сеть и правильно спроектировать её» вообще ни к каким курсам не имеет отношения, то есть вообще, заведомо. Это ремесло. Ремёсла осваиваются только в мастерской. Наймитесь в помощники к опытному админу, пасущему серьёзную сеть, лучше всего провайдерскую, и через полгода, если захотите, будете всё уметь. При этом ни какие-либо курсы, ни какое бы то ни было образование в каких бы то ни было учебных заведениях вам того же самого не даст, притом вообще ни за какое время. А уж курсы конкретного вендора — тем более! Такие вещи скорее вредят общему кругозору, нежели наоборот.

какое оборудование Вы бы выбрали сейчас и по каким причинам?

Поставил бы обычные компьютеры. Ну, возможно, в 19"-корпусах, для пущего удобства, всё-таки стойки эксплуатировать проще, чем скопище обычных боксов; и, возможно, там материнские платы были бы серверными, чтобы можно было втыкать больше сетёвок; больше того, возможно, что там вместо жёстких дисков стояли бы SSD с SATA-интерфейсом; но, тем не менее, это были бы именно обычные компьютеры, а не специальные маршрутизаторы. Возможно, управляемые свичи я бы взял от кого-то из брендов, этот вопрос я не изучал на современном рынке; кстати, возможно, даже и cisco'вские взял, тут нужно сравнивать цену/качество, скорее даже просто цены — скажем, определить, что мне нужен vlan-capable manageable switch на 24 порта, потом из всех, которые удовлетворяют задаче, рассмотреть три самых дешёвых, из них выбрать тот, который больше понравится. Но маршрутизаторами у меня бы были Linux box'ы, и даже могу сказать, под чем — под Openwall'ом.

Причина банальна: я не люблю вхолостую тратить деньги, ни свои, ни чужие.

> он,

> он, естественно, требует закупить оборудование Cisco

Вот совершенно не естественно.

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

Забавно, что в компании, где я работаю, как раз от маршрутизаторов и серверов стараются избавляться. Больше NAT-трансляций, больше PPP-соединений держит специализированное оборудование с ASIC'ами, заточенными именно на эти задачи. Большое количество серверов - это дополнительные траты на администрирование, на кондиционирование, место в узле связи, больше затраты на электричество, на ИБП для этого оборудования и на бригады инженеров, выезжающие в случае аварии на электросети всё это запитывать от генератора или просто менять ту же вышедшую из строя сетевую карту или жёсткий диск.

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

Благодарю вас за ответ.

admin аватар

> Вот

> Вот совершенно не естественно.

То есть как это не естественно? Очень даже естественно, "я умею решать поставленную задачу, для этого мне нужно оборудование Cisco". Слово "мне" обычно опускают для верности. И так происходит не только с Cisco, тот же Oracle живёт исключительно за счёт "специалистов", не умеющих работать с другими СУБД и не знающих, что в большинстве ситуаций СУБД вообще не нужна. Про "неназываемых" вообще молчу. Ещё раз подчёркиваю, что создание таких "специалистов" (в очень жирных кавычках) как раз и является основной целью всех "программ обучения", продвигаемых "крупняком".

Что касается достоинств сетки на коммутаторах в сравнении с сеткой на роутерах -- всё это никак не противоречит сказанному мной и вообще является иррелевантным в нашем обсуждении. ИНОГДА сервера и роутеры нужны, и никуда не денешься; вот в этих случаях, когда роутеры таки оказываются нужны (например, на пути к аплинку) я Cisco использовать не стал бы, и вообще никакие специальные железки, а поставил бы Linux box'ы. Ну а сетки из свитчей я тоже люблю, но цисковские каталисты — не единственный в мире вид управляемых свитчей.

Ах да, и ещё: роутеры на статике никакого трафика не порождают, кроме ARP. Когда свичи между собой договариваются о span tree, трафика они генерят, пожалуй, побольше.

>Ещё раз

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

Это не понимают только дураки. Дураки другого рода считают, что на курсах Cisco занимаются ТОЛЬКО агитацией и ничему не учат.

>вот в этих случаях, когда роутеры таки оказываются нужны (например, на пути к аплинку) я Cisco использовать не стал бы, и вообще никакие специальные железки, а поставил бы Linux box'ы. Ну а сетки из свитчей я тоже люблю, но цисковские каталисты — не единственный в мире вид управляемых свитчей.

Когда роутеры таки оказываются нужны, оказывается что Linux box'ы не способны прокачать через себя такой объём трафика. Представьте себе маршрутизатор с десятками портов 10G, который к тому же держит BGP Full View от нескольких вышестоящих операторов, терминирует десятки тысяч PPP, NAT'ит, аутентифицирует, авторизует и учитывает по RADIUS'у и NetFlow льёт.

Даже если упереться в Linux box'ы, то окажется что вместо одной стойки дорогого фирменного оборудования нам понадобится десяток стоек с дешёвыми Lixux box'ами, коммутаторами для них (не забывайте, что каждый Linux box - это дополнительные порты на коммутаторе, а значит дополнительные коммутаторы), ИБП для них и кондиционерами для них. И как вершинка тортика - понадобится высокопроизводительное оборудование, которое сагрегирует весь этот трафик Linux box'ов для вышестоящего оператора. И всё это дело нужно настраивать, менять у него жёсткие диски, распределять между ними нагрузку и т.д. Значит нужно больше людей, которые всем этим будут заниматься.

В сети провайдера, о котором я говорю, используются D-Link'и, редкие H3C/HP и Force10/Dell, и те самые QinQ-коммутаторы - Extreme с 50-ю 10G портами. Кстати, где это возможно, и от коммутаторов стараются избавиться, заменяя их на DWDM-оборудование. Из маршрутизаторов используются считанная пара десятков Cisco (76xx для разного рода MPLS и ASR как пограничные маршрутизаторы) и несколько штук BRAS'ов Ericsson. Catalyst'ы я где-то видел, в единичных экземплярах. Возможно на пробу покупали. Сейчас вместо D-Link пробуют кое-где использовать SNR.

Избавляются как раз от серверов FreeBSD с quagga и mpd - дорого обходятся. Вместо 250 серверов проще и дешевле по всем показателям оказывается парочка BRAS'ов, трафик до которых доводится из узла связи через коммутаторы.

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

В общем, судя по опыту этого провайдера, выгоднее оказывается покупать дешёвое оборудование для домовой сети, но дорогое - для узлов связи. Не выгоден ни подход "только Cisco", ни "дешёвые коммутаторы и Linux box'ы c Openwall". Нужно подходить ко всем решениям с умом.

admin аватар

Дураки другого

Дураки другого рода считают, что на курсах Cisco занимаются ТОЛЬКО агитацией и ничему не учат.

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

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

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

Добавьте,

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

admin аватар

Давайте по-другому

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

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

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

Случайно наткнулся на ссылку на ваш сайт в сообществе "Типичный Программист"

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

admin аватар

Пройти порог

Ну да, это проблема. В принципе, довольно типичная "первая сложная задача" — это какая-нибудь игрушка. Естественно, без графики и без GUI. Отсутствие графики само по себе вас смущать не должно, вон в Nethack люди десятилетиями рубятся, и ничего.

А ещё рекомендую глянуть здесь на сайте статью "Почему Unix".

Обработка ошибок

Здравствуйте. Интересно узнать Ваше мнение об обработке исключительных ситуаций в С++ и обработке ошибок в целом.

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

admin аватар

и при чём тут единая иерархия?!

Вот уж чего совершенно в упор не вижу, так это связи между исключениями с одной стороны и этими вашими сборкой мусора и единой иерархией — с другой. Auto cleanup и деструкторы никто не отменял, так что за высвобождением ресурсов контроль полный в любом случае, если работать аккуратно; ну а безалаберность надо лечить не средствами языка, а лишением премии и увольнением с работы, или ещё лучше электрошоком. С другой стороны, как сборка мусора, так и единая иерархия классов (и, как следствие, таблица виртуальных методов в каждом объекте, а то и, чего доброго, все вызовы методов оптом виртуальные) — это приговор языку сразу и без вариантов, то есть такие языки (вроде пресловутой джавы) использованию не подлежат вообще. Хотя, конечно, C++ после выхода новых стандартов хуже уже не станет, понятное дело, то есть мертвее уже не будет, но тут по крайней мере можно декларировать, что используется подмножество, и ещё некоторое время более-менее нормально жить.

У исключений C++ есть другие недостатки, и прежде всего то, что оно тянет за собой RTTI и вообще очень большой и жирный кусок рантайма, да плюс к тому в генерируемом коде возникает (в начале и конце каждой функции) ТАКОЕ, что в машинный код просто страшно заглядывать. Если бы, к примеру, исключения символизировались не типом объекта, как это сделано в C++, а, например, адресом в памяти (то есть делаем глобальную переменную произвольного типа, в ней же храним информацию об обстоятельствах исключения, а кидаем не "объект произвольного типа", а адрес этой переменной, и ловим исключение не по типу, а путём указания глобальной переменной, отвечающей за данный вид исключения), реализация стала бы проще в разы, и рантайм бы в разы уменьшился. Вон на уровне чистого Си есть setjmp и longjmp, они, по ходу, вообще ничего в программу не втаскивают, и, больше того, даже не являются средством языка, обычные библиотечные функции, правда их реализация зависит, конечно, от платформы и компилятора, но это уже детали.

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

Ну а за использование исключений для управления, то есть для штатного выхода из вложенных контекстов, надо убивать сразу. Желательно насмерть. Если в команде есть такие люди, то -fno-exceptions не более чем полумера, а правильная мера — гнать в три шеи. Хотя, конечно, при нынешнем дефиците программистов это не всегда реально.

Пара слов благодарности

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

Отдельное спасибо за материалы (книги и статьи), которые подготовлены автором и, более того, выложены в свободный доступ в прекрасном виде. (Жалко только, что pdf зашифрованные, неудобно растаскивать на цитаты :) )

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

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

admin аватар

Музыкой навеяло

Что-то мне вспоминается классика:

Уж сколько раз твердили миру...

Если серьёзно — да пожалуйста, заходите ещё :-)

Вы разместили

Вы разместили ссылку на сайт с  JavaScript => на вредоносный сайт.

admin аватар

Да неужели?

Контент по ссылке доступен при полностью отключённом в браузере исполнении JS. Если у вас JS включён — это ваши проблемы.

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

То есть если я

То есть если я размещу ссылку на вредоносный exeшник, то я не виноват, а это проблемы тех, кто пользуется Windows?

admin аватар

Ну, вообще-то да

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

Благодарю за

Благодарю за выложенные работы, с интересом прочитал статьи об авторском праве и информационном насилии.
Вы в курсе проекта под названием Diaspora?
https://joindiaspora.com
Как раз то, что вы цените в средствах общения как я понимаю (открытый код, приватность информации)

admin аватар

Интересная ссылка, thanks

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

Что сходу не понравилось -- там на всех страницах javascript и мне не удалось найти ничего на тему его отстригания. Ну а второе -- конечно же, ruby on rails. На моих серверах везде Openwall GNU/*/Linux, для него соответствующих пакетов нет, а самому их делать меня совершенно точно заломает. Мораль -- свой pod мне не запустить. А на чужом я жить не стану, с меня достаточно.

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

Но так всё же лучше, чем никак.

Лучше бы не наблюдал вовсе

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

P.S. Вопрос с ответом уползли в архив, наткнулся случайно.

admin аватар

Они не

Они не "уползли", они там [ http://www.stolyarov.info/guestbook/archive/1#comment-715 ] изначально и были — я забыл в своё время запретить на той странице новые комментарии, а вы свой вопрос зачем-то оставили там, а не здесь.

Ну а про плюсы — а фиг знает, что движет людьми. Вот как можно, например, на PHP писать? Я имею в виду, как можно себя настолько не уважать, что не брезговать ТАКИМИ инструментами? Но ведь пишут.

Физические основы построения ЭВМ

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

Я учусь в Ташкентском филиале МГУ им. Ломоносова и скоро у нас начнут читать предмет "Физические основы построения ЭВМ". Не могли бы Вы посоветовать литературу (на русском или английском языке), желательно книгу, по которой можно было бы ознакомиться с "Физическими основами построения ЭВМ". На http://msu.uz/e/4f81a3881adf57d776000001 заявлена очень интересная программа, однако большую ее часть на наших лекциях мы проходить не будем.

Спасибо.

admin аватар

Гм

У меня возникает ровно один вопрос: а при чём тут я? К Ташкентскому филиалу я, к счастью, уже скоро пять лет как никакого отношения не имею, к курсу "физ.основы" — тем более.

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

В общем, вы не по адресу. Совсем.

В каком направлении должен развиваться С++ ?

Здравствуйте. В http://www.stolyarov.info/guestbook/archive/1#comment-468 вы высказали свое недовольство по поводу нового стандарта C++11 и таким вещам, как STL и RTTI. Не могли бы вы более подробно описать, что именно не так с этими вещами? Вы предлагаете для каждого проекта каждый раз писать свое подмножество STL? Или есть что-то лучше, чем STL? В каком направлении должен развиваться С++ ?

admin аватар

О направлениях

вы высказали свое недовольство

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

что именно не так с этими вещами

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

Вы предлагаете для каждого проекта каждый раз писать свое подмножество STL?

Разумеется, нет. Тогда уж лучше использовать STL, всё равно хуже уже не будет. Впрочем, можно предложить ещё "лучше": писать на PHP. Или на бейсике. Или на коболе. Чего напрягаться-то понапрасну, Си-плюс-плюс какой-то там, классы, методы, это всё слишком сложно. Берём вижуал васик и вперёд.

Если же PHP или бейсик не устраивает, то я не вполне понимаю, как может устраивать связка C++/STL. Контейнеры, очевидно, вообще нельзя использовать — сама идея таковых порочна. Структуры данных не бывают универсальными, за исключением самых простых (массивов и списков), но использование контейнеров для массивов и списков заведомо бессмысленно — за более чем сомнительный выигрыш во времени кодирования мы при этом вынуждены расплачиваться феерическими приключениями во время отладки и сопровождения, причём ставки там приблизительно неделя (проигрыша) за пять минут (экономии); ну а более сложные структуры данных должны, естественно, проектироваться под каждую конкретную задачу (не под проект, а именно под каждую возникающую задачу), и generic они быть не могут — как следствие, ни о каком применении шаблонов при построении сложных (проблемно-ориентированных) структур данных не может быть никакой речи. Это я уже не говорю о том, что list вообще-то двусвязный, тогда как в большинстве задач список требуется односвязный; или о том, что string в последнее время перестал быть copy-on-write, ну и так далее. То есть даже самые простые порождения STL'я вообще-то никуда не годятся.

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

Или есть что-то лучше, чем STL?

Конечно, есть: его отсутствие.

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

В каком направлении должен развиваться С++ ?

Теперь уже, видимо, ни в каком. Нужен другой язык, который займёт нишу языка произвольного уровня, в отличие от существующих языков уровня низкого (asm/*, plain C) или высокого (всё остальное). C++ мог занять эту нишу до включения в него RTTI (STL, к счастью, свойством языка не является, так что он бы, в принципе, не смог всерьёз помешать — хотя размах подрывной деятельности стандартизаторов впечатляет, да). В нынешнем своём состоянии C++, особенно в связке с STL — язык, я бы сказал, уровня безнадёжно высокого, приближающийся к командно-скриптовым. Зачем такой нужен ещё один такой язык, не вполне понятно, их уже и так — как грязи.

т.е по вашему

т.е по вашему

подход Степанова [url removed]

поданный в Началах Программирования([url removed])

бесполезен?

зы. [url removed]

admin аватар

Бесполезен?!

Это неправильное слово. Правильное будет по меньшей мере "вреден" или, лучше сказать, "вредоносен".

Степанов — это человек, который нанёс индустрии (и в конечном счёте всей цивилизации) больше вреда, чем Гейтс и Джобс вместе взятые. Именно он фактически уничтожил уникальный инструмент, каковым был ранний язык Си++, при этом так и не поняв, что это было.

Обсуждать здесь нечего.

Вы серьёзно?т.е

Вы серьёзно?

т.е Страуструп пригрел на груди .... ?

С++ (то что у языка нет однозначной грамматики это зигзаг истории) - без stl , а тем более ранний это что?

пропатченый препроцессор - транслятор в old-C

admin аватар

Ага, точно

Нет, блин, я не серьёзно, я тут так, тряпки жгу и смеюсь. У меня встречный вопрос: а вы это тут серьёзно спрашиваете, "что же такое C++ без STL"?

На самом деле, вопрос типичный, его в наше идиотическое время задают на удивление часто (и за одно это Степанова стоило бы публично четвертовать: он не только сам не понял, с чем имеет дело, но и сделал так, что сейчас этого почти никто не понимает). Ну так я вам на этот вопрос отвечу. C++ без STL и без некоторых поздних возможностей — например, исключений — это низкоуровневый язык (то есть пригодный, например, для ядер операционных систем или для микроконтроллеров), но при этом позволяющий навертеть сколь угодно высокоуровневые абстракции. То есть, иначе говоря, это язык произвольного уровня.

Можно зайти с другой стороны. Если из описания C++ выкинуть любые упоминания его треклятой стандартной библиотеки (как это сделал я), то останутся, во-первых, классы с механизмом защиты; во-вторых, конструкторы и деструкторы, в том числе их автоматический вызов в определённых ситуациях (кроме автоматического вызова деструктора при исчезновении объекта тут следует отметить ещё конструкторы копирования и преобразования); перегрузка символов операций для пользовательских типов, что, собственно, даёт на выходе абстрактные типы данных в полный рост. Что с помощью всего этого можно сделать? Ну, например, вот это: http://www.intelib.org ; а точнее — можно сделать что угодно, практически любые инструменты из других языков программирования поддаются моделированию таким способом. А язык при этом сам по себе низкоуровневый (ну, был когда-то, пока исключения в него не впендюрили), то есть у него отсутствуют (отсутствовали) ограничения, не позволяющие где попало использовать ту же джаву, C# и прочее.

Итого: C++ мог (когда-то давно) стать универсальным языком, то есть таким, перед которым ни у каких других языков нет осязаемых преимуществ вне зависимости от решаемой задачи. Разумеется, этот момент упущен, сейчас C++ (даже без STL) — просто язык высокого уровня, притом кривой, а с учётом последних "стандартов" — попросту нежизнеспособный.

Ну а что когда-то на самых ранних этапах своего развития C++ был реализован в виде компилятора, выплёвывающего чистый Си (не "old", а "plain" — plain C остаётся самостоятельным языком и, в отличие от C++, подыхать совершенно не собирается, поскольку альтернатив ему просто нет) — ну так и что с того? Некоторые компиляторы той же Scheme тоже на выходе plain C выплёвывают, и вроде никого это не смущает.

Уж не знаю, кто там кого "на груди пригрел", Степанов-то постарше Страуструпа будет (аж на полтора месяца, гыгы). Но тут скорее другое. Тексты Страуструпа, написанные раньше третьего издания книги "Язык C++", производят впечатление гениальных, а само третье издание и всё, что за ним последовало — впечатление, что это писал душевнобольной. При этом сам Степанов в одном из своих интервью заявил, что Страуструп — упрямый чёрт, но и его удалось переупрямить. Ощущение со стороны такое, что Степанов — из той породы особо опасных дураков, в которых очень сложно разглядеть дурака, а опасность в том, что они делают дураками окружающих, обращая их в свою веру. Степанов превратил гения Стауструпа в дурака Страуструпа. Больше того, эта его дурь сейчас владеет умами тысяч программистов, которые могли бы быть гораздо умнее, если бы не вот эти вот дифирамбы STLю на уровне религиозных. Код, написанный с использованием STL, превращает maintenance в ночной кошмар, а две трети пишущих на нём совершенно не понимают, что делают (есть даже такие, для которых list отличается от vector отсутствием операции индексирования, а значит просто неудобная хреновина — и такие люди пишут программы за деньги) — но всё равно все продолжают петь осанну STLю. Кто поумней — уходят "вниз" на чистый Си или "вверх" на джаву, C# или какой-нибудь питон, и правильно делают — если рассматривать STL как часть C++, то писать на C++ просто нельзя, такие инструменты не подлежат использованию.

Тема на ЛОР про метапрограммирование на C++

Я на ЛОРе создал тему про метапрограммирования на плюсах, и вспомнил про вашу библиотеку intelib. Просьба ответить там https://www.linux.org.ru/forum/development/12198201/page1?lastmod=145036...

данный комментарий можно не раскрывать

admin аватар

Увы

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

Т.е. InteLib

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

Вот вы пишите, что C++ мог стать универсальным, что > а точнее — можно сделать что угодно, практически любые инструменты из других языков программирования поддаются моделированию таким способом

Похоже что это как раз одна из вещей, которую таким способом смоделировать нельзя, как не старайся. И для языка С++ единственный выход из ситуации - использовать кодогенерацию и всякие DSL. Я хочу сказать, что у С++ и прочих производных c Си подобным синтаксисом (obj-C, D) просто изначально нет шанса стать тем самым языком произвольного уровня, и стандартизаторы тут непричем совершенно. К тому же все эти RTTI и обработки исключений легко отключаются соответствующими опциями компилятора, и STL-ом вас тоже никто под дулом пистолета пользоваться не заставляет, так что введением новых фич язык не испортить.

admin аватар

Т.е. InteLib

Т.е. InteLib непригоден для написания макросов

Разумеется, нет. Там вообще нет макросов.

Какая же область применения у данной библиотеки?

Вы не поверите: программирование на Лиспе (то есть в S-выражениях) в рамках проекта, основным языком которого является C++.

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

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

> Что меня

> Что меня крайне удивляет, так это то, откуда вы вообще нашли в окрестностях InteLib все эти ваши макросы, синтаксические деревья и прочее метапрограммирование. Ничего подобного там никогда не было и не задумывалось.

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

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

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

admin аватар

макросы,

макросы, которые позволяли бы на этапе компиляции работать с этими S-выражениями

Во-первых, макропроцессор в Си/Си++ крайне беден и такие сложные задачи решать не может в принципе. Он, если на то пошло, вообще не годится для метапрограммирования, там же ни циклов нет, ни рекурсии, то есть он сам по себе алгоритмически неполон, а конструкций языка ещё нет (ведь маропроцессор проходит до синтаксического анализа).

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

универсальный язык произвольного уровня не может быть построен на основе С++ ввиду его унаследованного Си синтаксиса

Синтаксис здесь вообще ни при чём. Определяющими для универсального языка являются два момента: (1) его низкоуровневость, без которой он оказывается принципиально неприменим в проектах вроде ядер операционных систем и (2) возможность создания сколь угодно сложных абстракций.

негомоиконности

Если я только правильно понимаю, о чём идёт речь, то на универсальность языка такое повлиять в положительную сторону не может. В отрицательную -- запросто: если язык обладает гомоиконностью, то есть в нём программа и данные представляются каким-то одним универсальным способом (S-выражения в Лиспе, строки в командно-скриптовых языках), то возникает соблазн ввести в него EVAL — и всё, прощай низкоуровневость.

невозможности работать с AST

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

Обнаружил

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

admin аватар

Спасибо

поправлено

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <ins> <del> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <pre>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Проверка на бота
Image CAPTCHA
Copy the characters (respecting upper/lower case) from the image.