All streams
Search
Write a publication
Pull to refresh
4
0.1

Пользователь

Send message

Посмотрел на примеры кода в статье. Я правильно понимаю, что товарищи из 1С умудрились спроектировать язык, в котором одновременно:

  • обязательные отступы и ньюлайны,

  • обязательный end для каждой конструкции (причём в форме точки с запятой)?

Где-нибудь можно взглянуть на формальную грамматику этого ЯП?

чем вас не устраивает моё мнение?

А где у вас там мнение? Я увидел одни только эмоции. С таким пренебрежением рассказываете на весь интернет про едва знакомого человека («снежинка» «с тараканами», «больше она у нас не работала», «полетела дальше на биржу труда»), что аж читать неприятно.

К слову, есть вполне себе легитимные причины хотеть конкретную клавиатуру — больные суставы, например.

Если новый работник за 10 минут решит правильно задачу над которой универовский профессор сидел 2 года (утрирую), то искать работу пойдёт профессор, а не новый работник.

Это гипотетическая ситуация или вы своими глазами такое видели? В моей реальности:

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

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

  • Новопришедшие сотрудники крайне редко способны за десять минут решить то, над чем давно бьются старые.

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

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

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

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

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

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

нужно студентам объяснять как правильно/наиболее эффективно его использовать

Нет никакой необходимости делать на этом акцент. Этому студенты и сами научатся.

Вот о чём бы вы рассказали студентам в семестровом курсе «Эффективное использование больших языковых моделей для решения задач {название близкой вашему сердцу дисциплины}»?

Рад слышать, что не потащили весь этот бред от французов. Хотя мне почему-то казалась, что я читал про эти дурные правила именно в контексте российской «Школы-21», буквально несколько лет назад.

либо я не понял требование

У них там есть такие пункты:

  • A structure’s name must start by s_.

  • An enum’s name must start by e_

Если им следовать, то, например, каждое упоминание типа структуры оказываются сразу с двумя префиксами — struct (требуется грамматикой C) и s_ (требуется кодстайлом E42).

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

[...] преподаватели из моего института начали приставать ко мне с вопросами о "безопасной" передаче пароля

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

Пример механизма защиты с солью:

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

Если я правильно понимаю, вы предлагаете следующую схему (иллюстрация вольным псевдокодом):

server:
    # Генерируем «динамическую» соль.
    dsalt = gen_random_salt()
    session.dsalt = dsalt
    send(dsalt)

client:
    dsalt = recv()
    # А тут уже соль «статическая», но разная для разных пользователей.
    h = hash(kdf(password, salt, parameters), dsalt)
    send(username, h)

server:
    (username, h) = recv()
    
    dsalt = session.dsalt
    kdfSavedValue = db.getKdfValue(username)

    hExpected = hash(kdfSavedValue, dsalt)
    if h == hExpected:
        allowAccess()
    else:
        denyAccess()

Здесь hash — некоторая стойкая хеш-функция с солью, kdf — функция формирования ключа с солью и параметрами (вы называете этот этап «хеширует свой пароль, как это делает сервер»).

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

server:
    dsalt = gen_random_salt()
    session.dsalt = dsalt
    send(dsalt)

hacker:
    dsalt = recv()
    username = "some_username"
    kdfSavedValue = leakedDb.getKdfValue(username)
    h = hash(kdfSavedValue, dsalt)
    send(username, h)

Слушайте, я честно не знаю что на такое ответить.

Что некоторые (многие?) примеры действительно слегка притянуты за уши и тянут на одну-две совы максимум. Не «отбитая дичь», а ожидаемое поведение.

в некоторых случаях еще и домен назначения учитывается при выборе туннеля

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

вполне подойдет кампус Школы 21

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

У них там самый худший кодстайл, что видел в своей жизни:

  • жёсткий лимит на количество локальных переменных (целых 5 штук),

  • жёсткий лимит на количество параметров у функции (4 штуки),

  • жёсткий лимит на длину функции (20 строк),

  • жёсткий лимит на количество функций в файле (5 штук),

  • запрет на цикл for и switch,

  • запрет на пустые строки внутри функции,

  • запрет на объявление переменных не в начале функции,

  • запрет на объявление переменных с инициализацией,

  • выравнивание кода табами в середине строки,

  • избыточные (для языка C) префиксы для структур и энумов.

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

этот раздел я то ли прогулял, то ли произошло какое-то вытеснение

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

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

— Р. А. Шарипов «Быстрое введение в тензорный анализ».

Бесплатная, всего 50 страниц в PDF.

вся суть генеративного ИИ была в том,

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

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

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

А чего только на рутовую?

В общем случае да, хорошие пароли на все учётки. Когда писал, в голове был кейс «виртуалка за 5 баксов специально под прокси, настроил и забыл», где нет смысла заводить простых пользователей.

На последок хотелось бы сказать самые простые и примитивные вещи [...]

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

  • не трогать дефолтные настройки sshd и фаервола, они совершенно нормальны из коробки,

  • если по какой-то причине ваш хостер настроил авторизацию по паролям, поставить на рутовую учётку хороший пароль из 30+ случайных символов.

Слово «ёкодзуна» пишется, всё-таки, через «ё». Или это умышленное искажение?

Но вообще почему только от сверхновых?

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

над проблемой сохранности сверхбольших объемов данных

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

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

Да тут, увы, даже ECC-память в масс-маркет никак не завезут. Давно присматриваюсь, но прям дорого как-то получается. Так и приходится жить с осознанием риска.

Кстати, а у вас случайно нет реальных цифр, сколько примерно в год на среднем сервере набегает ошибок ECC? Контроллер памяти ведь ведёт такую статистику?

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

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

Если пытаться придерживаться реализма, то могу дать такую оценку на пальцах:

  • По данным Википедии, в среднем в нашей галактике случается 2-12 сверхновых в год.

  • Диаметр галактики 30 кпс, то есть до средней сверхновой получается примерно 20 кпс расстояния.

  • Тогда по формуле из Википедии кубический километра льда наловит за 7,5 млн лет примерно 10^16 достаточно злых нейтрино.

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

Так что пусть будет 10^16 «ошибок». И дальше-то с этой цифрой что делать?

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

Пока дочитал статью до конца, забыл начало.

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

Меня смущает, что вы говорите про разработчика на C++, но в 3-х пунктах из 4-х C++ вообще отсутствует

Так мой тезис же был про то, что C++-разработчику нужно знать и то, что не си++.

Интересно было бы послушать про ваш бэкграунд

Я бы назвал свой бэкграунд «R&D без привязки к языку», в последнее время больше с FPGA работаю. Из недавнего на си++ — математика (линейная алгебра, многопараметрическая оптимизация), микроконтроллеры (да, на C++), тестбенчи для FPGA-кода (если добавить к Verilator немного обвязки на корутинах, получает весьма неплохо по производительности и выразительности кода). Периодически пишу что-нибудь с кнопками при помощи Qt.

... ситуации, в которых ассемблерным вставкам нет альтернатив.

Например, когда вам нужно написать свой (или адаптировать вендорный) стартовый файл для нового микроконтроллера. Увести МК в прерывание. На лету переключить потоку стек. Вставить memory fence, CAS, векторную инструкцию. Часть этих кейсов закрывается интринсиками, но например, интринсиков под нужные инструкции RISC-V в компиляторе может просто ещё не быть.

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

Но если вы погружаетесь именно в C++

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

Это будет плохой код.

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

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

(В ответ на сообщение уровнем выше)

Это зависит от того, каким вы видите результат. В моём представлении требования к компетентному C++-разработчику включают в себя:

  • знание отличий C и C++;

  • умение при необходимости программировать на C в согласии с местными идиомами (привет goto exit;);

  • умение при необходимости сориентироваться в ассемблерном листинге;

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

Information

Rating
3,958-th
Location
Воронеж, Воронежская обл., Россия
Registered
Activity