• Перевод статьи «В защиту Ричарда Столлмана»
    +1

    А когда вы просите называть себя dimaannn, это не то же самое (за исключением числа букв)? Это ведь тоже не ваше настоящее имя, не так ли? ;-)

  • Перевод статьи «В защиту Ричарда Столлмана»
    +1

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


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

  • Перевод статьи «В защиту Ричарда Столлмана»
    +2

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


    Во-первых, есть смысл в начале поставить ссылку на оригинал (https://libreboot.org/news/rms.html) и указать имя автора.


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


    Например, если Вы — Вася Иванов, а Ваш проект называется «Foobar Libre», напишите «Василий Иванов (разработчик Foobar Libre)»

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


    призывающую к выгону РМС и увольнению всего совета директоров

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


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


    Я бы использовал глагол: "призывающую выгнать РМС и уволить весь совет директоров"


    Письмо против РМС делает заявления, не имеющие ничего общего с реальностью.

    В оригинале, "the letter opposing RMS talks the talk, but it does not walk the walk". Здесь перевод неправилен и по форме, и по смыслу. Это надо перевести, как "слова авторов письма против РМС расходятся с делом".


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

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


    Тут не зря в оригинале программирование называется словом speach, в точности так же, как speach в freedom of speach.


    Эти четыре свободы лежат в основе всех остальных

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


    Они красиво болтают и рядятся в наши одежды, но не давайте себя обмануть

    "Но не дайте им себя обмануть". Маленькое местоимение "им" помогает моему внутреннему парсеру сохранять синхронизацию с потоком речи :-)


    призывающее к выгону РМС

    Повторюсь: существительное "выгон" не подходит.

  • Yggdrasil Network: Заря бытовых меш-сетей, или Интернет будущего
    0
    Ну, например, отвалится роутер — сотовый телефон поделится интернетом с домашними устройствами.
  • Минцифры и Минпросвещения предлагают запретить использование иностранного ПО в школах
    0
    Дистрибутив Linux российской сборки не считается иностранным ПО, даже если в нем нет ни строчки написанного в России кода.
  • Суверенный DNS уже здесь, а вы и не заметили
    –6
    Раньше темой перестройки было «сделаем, как на Западе, и заживем». Теперь Запад превращается в то еще место, чтобы на него равняться. Как бы не пришлось прокручивать все заново: буржуазная революция, социалистическая революция и т.д.
  • Умный print для C
    +1
    Большинство компиляторов Си понимает такую вещь:

    int x;
    int y = __builtin_types_compatible_p(typeof(x), int);



    Большинство — это gcc и примкнувший к нему clang?
  • Почему язык Go стал стандартом для DevOps-инженеров
    0
    Ну, можно писать
    res, _ = makeSomething()
    ...


    А ошибки обрабатывать методом перезапуска упавшей программы. Многие так и делают, и вполне счастливы :-)
  • Обратная сторона Open Source-славы: как угрожают автору curl
    +9
    Скорее, библиотека для/на C с очень полной реализацией HTTP-клиента (и не только HTTP; на самом деле, почти любого протокола, обращение с помощью которого может быть выражено с помощью URL). Плюс, консольная утилита на основе этой библиотеке.

  • Сервис, позволяющий контролировать процесс сбора согласий на обработку персональных данных
    –1
    Т.е., теперь достаточно сломать только один централизованный сервер, чтобы получить все собранные персональные данные граждан России?
  • Представлен дистрибутив Linux Mint 20.1
    0
    Найти троян в исходниках размером с гуглохром — задача малореальная. Потом, если мы не верим Canonical, то кто сказал, что в .deb-ах их сборки именно те исходники, которые лежат на гитхабе?

    И наконец, что есть троян? Понятно, что если гуглохром в свободное от работы время биткоин майнит на моем оборудовании, это не есть хорошо. Но если он за DNS'ом ходит через HTTPS на гугловые сервера, ну, типа для моей же собственной безопасности, а заодно гугл статистику собирает, какими сайтами я интересуюсь, это как, троян уже, или еще не троян?
  • Представлен дистрибутив Linux Mint 20.1
    +1
    А в чем нарушение опасности-то? Можно привести пример атаки через snap?

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

    Соглашусь, есть некоторый душок в том, что просишь поставить гуглохром, а тебе ставят снап, а в нем — гуглохром, хотя снапа ты не просил. Но на атаку это все равно не тянет.
  • Представлен дистрибутив Linux Mint 20.1
    0
    > Кстати в минт-20 он тоже сломался, но там виноват был драйвер для бездрайверной печати :)

    Реально, «бездрайверная» печать в большинстве случаев работает лучше, чем legacy драйвера. Особенно для сканирования. Но поскольку USB устройство может принадлежать либо legacy драйверу, либо IPP-over-USB демону, то в тех относительно редких случаях, когда legacy драйвера работали лучше, переход к IPP-over-USB может все сломать.

    Ubuntu совершила тактическую ошибку, включив в версии 20.04 IPP-over-USB по умолчанию (раньше оно включалось установкой отдельного пакета), но при этом не успев заменить глючный ippusbxd на работающий ipp-usb. Кроме того, Ubuntu 20.04 приходит со старой и глючной сборкой sane-escl. В результате, имеется заметное количество пользователей, которым переход на Ubuntu 20.04 и печать ломает, и сканирование не налаживает.

    В Ubuntu 20.10 все, вроде, починили, но неприятный осадок надолго останется.
  • Представлен дистрибутив Linux Mint 20.1
    0
    Это скандал не про безопасность.

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

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

    Canonical (компания, которая делает Ubuntu), изо всех сил продвигает snap, с целью построить свой App Store для линуха. Видимо, они рассчитывают на этом заработать.

    Очевидно, что многих это раздражает, отсюда и скандалы вокруг snap'а.
  • Представлен дистрибутив Linux Mint 20.1
    +3
    > Так вот вопрос — чем Mint лучше Ubuntu?

    Общее правило для новичка: если есть знакомый гуру, который отвечает на вопросы, лучше поставить такой же дистрибутив, как у него. Тогда он будет отвечать быстрее, и более охотно (Gentoo при этом ставить не надо).
  • Утраченный потенциал подсистемы Windows для Linux (WSL)
    +6
    ABI между ядром и user space в линуксе очень стабильно, в отличии от внутриядерных интерфейсов, которые постоянно мутируют. И именно этот ABI должен реализовывать WSL 1. Кроме того, вовсе не обязательно гнаться за свежими релизами ядер, вполне достаточно реализовать какую-то одну более-менее современную версию этого ABI, и этого хватило бы на годы.

    Проблема в том, что чтобы любая программа для Linux чувствовала себя под таким эмулятором «как дома», недостаточно реализовать все системные вызовы Linux (а их там совсем немного, и они в основном достаточно простые). Надо еще реализовать очень многие детали поведения устройств, сетевых протоколов и т.д. и т.п. К примеру, ifconfig в Linux делает свою работу, путем передачи ядру «команд» в виде «сообщений» через специальный сокет, и обработки ответов от ядра, которые тоже приходят в виде таких сообщений. Чтобы ifconfig работал в WSL 1, WSL 1 должен понимать содержимое этих сообщений, да еще и переводить их между той концептуальной моделью сетевого стека, которая реализована в Linux, и той, которая реализована в Windows, а они разные.

    Сделать все это аккуратно и с достаточным уровнем точности — это титанический труд.

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

    При этом нет необходимости эмулировать все, достаточно поддержать только то, что нужно.
  • ИТЭР в 2020 году, часть первая
    0
    Ну, «количество сложности», накопленной внутри обычного персонального компьютера, с установленным на нем обычным набором программного обеспечения, больше, я полагаю, и по числу деталей и связей между ними, и по объему вложенных туда человеческих усилий.

    Просто этот самый персональный компьютер, однажды разработав, можно почти бесплатно тиражировать. Поэтому это и не заметно.
  • Взлом Wi-Fi-сетей, защищённых WPA и WPA2
    0
    Теоретически могут, конечно. Но практически, шанс сломать шею, упав с кровати, выше.
  • Взлом Wi-Fi-сетей, защищённых WPA и WPA2
    0
    По-моему, разумнее всего не считать WiFi локальной сетью (сетью, заслуживающей доверия). Тогда взломают и взломают, риск на самом деле не велик. Тарифы то, поди, у всех давно безлимитные.
  • Взлом Wi-Fi-сетей, защищённых WPA и WPA2
    0
    Метод раскрытия пароля заключается, грубо говоря, в том, что WPA/PSK (PSK — pre-shared key, т.е. пароль) гоняет по сети в открытом виде криптохеш от пароля. Не какой-нибудь там стандартный SHA-256, а специфическую для WiFi функцию, но это и не важно, поскольку функция не секретна.

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

    WPA/Radius этой уязвимостью не страдает, но настроить его заметно сложнее, и обычно никто не заморачивается.
  • Коды ошибок — это гораздо медленнее, чем исключения
    0
    Вообще, это требует инфраструктуры. В меру гибкой, в меру жесткой, чтобы было удобно делать хорошо и неудобно — плохо :-)

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

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

    Как маленькая часть этой инфраструктуры, в языке должно быть запрещено передавать немодифицированную ошибку вверх по стеку, без явного указания, что именно это и имеется ввиду.
  • Коды ошибок — это гораздо медленнее, чем исключения
    0
    Предлагаю таких ошибок пользователю не вываливать. Ошибка должна выглядеть, как «проверь сетевое соединение», «кончилось место на диске», «не хватает прав доступа», «сначала надо авторизоваться» и т.п., независимо от того, какой уровень абстракции наткнулся на эту ситуацию.
  • Коды ошибок — это гораздо медленнее, чем исключения
    0
    Угу. И в результате получаем сообщения вида «Ошибка 100500 при исполнении операции XYZKLMN в модуле QWERTYUIOP.DLL».

  • Коды ошибок — это гораздо медленнее, чем исключения
    0
    Какая польза верхнему уровню, вплоть до живого человека, знать, что где-то там глубоко внизу случился DNS lookup failure по причине того, что timeout? Что этот самый верхний уровень должен с этой информацией делать?

    Верхнему уровню, по большому счету, надо знать:
    1) можно ли сделать что-то, в терминах API, который вернул ошибку, чтобы ошибка рассосалась? Ну, например, подождать (сколько?) и попробовать еще раз, предоставить дополнительную информацию (какую?), и т.п.
    2) не вызвана ли ошибка неверными параметрами?
    3) что сказать человеку, если нужно его вмешательство?
    4) что записать в лог для разработчика?
  • Коды ошибок — это гораздо медленнее, чем исключения
    +9
    Важность достижимости скорости исполнения, близкой к аппаратной, сильно переоценена.

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

    Разница между overhead'ом в 1% и 5% вообще малосущественна, потому что это разница между скоростью 99% и 95% — под микроскопом не различишь.

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

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

    Это тот самый случай, про который сказано, premature optimization is the root of all evil.
  • Разработчики ПО с открытым исходным кодом уделяют вопросам безопасности менее 3% времени
    +4
    Не очень понятно, что такое время, уделенное вопросам безопасности.

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

    Или надо специально напрячь нужную морщину на лбу, и сказать всем, «сейчас я работаю с вопросами безопасности», и именно это время засчитывается?
  • Самый быстрый компилятор aka compiler-benchmark
    +2
    gccgo — странный выбор.

    У Go есть 2 компилятора, «родной» и на основе gcc. Тот, который на основе gcc представляет пока что лишь академический интерес. Мало того, что он очень медленный, он еще и код во многих случаях генерирует хуже, хоть у него и gcc внутри.
  • История двух стандартных библиотек Си
    +3
    Я вот сразу догадался, что isalnum'у передают char с отрицательным значением.

    Такой вот у нас в C isalnum. Понять это нельзя, это можно только запомнить.
  • Я посредственный разраб, плохой муж и ужасный отец — нет никакого баланса и выбора
    0
    Ну, я имею ввиду, из тех, которые умеют в офисе :-)
  • Я посредственный разраб, плохой муж и ужасный отец — нет никакого баланса и выбора
    +1
    Реально, большинство программистов НЕ УМЕЮТ работать дома. Но далеко не все из них это осознают.
  • Решаем, нужен ли вам личный почтовый сервер
    0
    > mydestination = $mydomain, localhost.$mydomain, localhost
    > Уходим на ребут и все! Вы невероятны и с собственным почтовым сервером!

    И удивляемся, почему все отправленные нами письма ложатся у получателей в spam

    В общем. тема DKIM, SPF, DMARC не раскрыта

    www.dmarcanalyzer.com/dkim
    www.dmarcanalyzer.com/spf
  • Неожиданные детали работы Windows Firewall, настроенного по умолчанию. И эксперименты по перенастройке
    +8
    И еще добавлю пару-тройку малоизвестных вещей про встроенный фаирвол. Правда, я довольно давно проверял, где-то на уровне семерки. Возможно, с тех пор что-то изменилось.

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

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

    Третье. Если программа говорит bind(), указав нулевой номер порта (т.е., пускай система сама назначит порт автоматически), никакого диалога от фаирвола не появляется, и порт по умолчанию будет открыт. Видимо считается, что поскольку номер порта выделяется более-менее случайно, злобный хакер ни в жизнь его не угадает.
  • ReactOS 0.4.13 CE (Coronavirus Edition)
    0
    А у вас в ReactOS работает печать и сканирование документов?
  • Точечная сварка под микроскопом
    +1
    Можно взать 4 по 50000 мкф и соединить параллельно. У них, поди, еще и ток в импульсе побольше будет.
  • Точечная сварка под микроскопом
    0
    Вероятно потому, что ток начинал протекать задолго до достижения приличного контакта в зоне прижима.

    Я бы подключил конденсатор через силовой тиристор, прижимал бы руками с усилием, а потом уже отпирал тиристор (вероятно, ногой, руки-то заняты).
  • Точечная сварка под микроскопом
    0
    Это не корректный подсчет. На самом деле, надо бы как-то оценить энергию импульса, приходящуюся именно на свариваемую зону, а для этого не хватает понимания о величине падения напряжения на ней
  • Точечная сварка под микроскопом
    0
    У меня в молодости был роскошный советский конденсатор на 10000 мкф, и при заряде до 12 в и коротком замыкании отверткой или чем-нибудь подобным он испускал отличный сноп искр, и достаточно крепко приваривал к себе то, чем делалось короткое замыкание. И ничего с ним не было от такого обращения.

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

    В общем, я бы попробовал. Благо цена вопроса копеешная, и в форме материальных затрат, и в форме времени, потраченного на эксперименты
  • Точечная сварка под микроскопом
    0
    Дозировать энергию импульса легко можно, меняя напряжение, до которого заряжен конденсатор

    Что до формы импульса, если большая часть энергии выделяется за время, за которое теплопроводность свариваемого металла не успеет «утащить» существенную энергию, то в первом приближении, казалось бы, на форму наплевать
  • Точечная сварка под микроскопом
    0
    0.12 Ф — это 120000 мкф, так что я почти угадал :-)

    На самом деле, в изначальной статье непонятно, сколько энергии выделяется непосредственно в зоне сварки, а сколько рассеивается в проводах, включая обмотку трансформатора
  • Точечная сварка под микроскопом
    0
    А что именно получилось, оно переваривало или недоваривало?

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