Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: По поводу CSRF токенов?

Лучший ответ:
они не хранятся в куках, а уникальны либо для страницы в целом, либо для конкретной формы.

если где-то они в куках - это свидетельствует об оленях.

Худший ответ:
нормальному парсеру они не страшны! они защищают от школьников
Вопрос: Лучшие книги по бэкенд разработке на python?

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

Худший ответ:
технологии - это то чем ты как правило пользуешься "не думая" о том, что внутри. Поэтому изучение того, как устроен внутри редис, на мой взгляд, - распыление для молодого разраба.  Помимо базовых книг и материалов, от себя могу посоветовать книгу по самым основам SQL - мне зашло намного лучше чем учиться по интернету: Алан Болье "Изучаем SQL" но там прям самая база и на примере мускл. Сейчас читаю System Design: подготовка к сложному интервью, как мне показалось, для бэка самое то, особенно если метишь в крупную контору (https://habr.com/ru/company/piter/blog/598791/). Прилагаю ссылку так как книга скажем так не самая базовая и можно посмотреть обзор прежде начинать.
Касательно этого:
Будет прям круто, если под конец можно будет с нуля написать какой-нибудь мощный проект из микросервисов который будет охватывать практически все самые частые задачи в бэк. Разработке.
Тут нужно не книги, а просто садишься и начинаешь писать с нуля. По классике на джанго как и большинство новичков, потому что на фронт тратить своё время желания нет.
Вопрос: Почему числу внутри setInterval нельзя прибавить другое число?

Лучший ответ:
в javascript аргументы не передаются by ref, но если передать объект - то он будет передан как ссылка на него, а значит его переменные не будут скопированы

let interval = setInterval(function(obj){
    console.log(obj.currentNumber);
    obj.currentNumber++;
}, 1000, {currentNumber:5});

Худший ответ:
Можно так переписать, не меняя смысла: function foo(currentNumber){
    console.log(currentNumber);
    currentNumber++;
}

setInterval(foo, 1000, 5);Здесь, наверное, понятно, почему будет каждый раз 5 ?

Ну, или даже так:foo(5); // выведет 5
foo(5); // выведет 5
foo(5); // выведет 5Внутренняя переменная функции изначально 5, выводит 5 и становится 10. Функция завершила работу, про переменную все забыли.
Вопрос: Есть ли смысл использовать Git?

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

Худший ответ:
ДА!
Даже не читал описание.
Вопрос: Как настроить прозрачный прокси на Squid?

Лучший ответ:
 без необходимости каких либо манипуляций с браузером у сотрудников
нужно про кто куда заходит
Данная задача не имеет решения.

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

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

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

В кратце схема работает так: запрос на внешний сайт пренаправляется на проси, расшифровывается, и прокси устанавливает от вашего имени соединение с внешним сайтом. Обратно пакеты проходят аналогичное преобразование - Сквид представляется браузеру клиента как внешний сайт и отдает полученный ранее контент.

Все подробно уже описано, например тут: https://losst.ru/prozrachnyj-proksi-dlya-https-v-squid
Вопрос: Самый гуманный способ удаления нескольких символов в начале строки?

Лучший ответ:
`${str | 0}`
// или
str.replace(/^0+/, '')
// или
str.match(/[^0].*/)[0]
// или
str.split(/^0*/).pop()
// или
str.slice(str.search(/[^0]/))
// или
[...str].reduce((acc, n) => (+n || acc) && acc + n, '')

Худший ответ:
`${str | 0}`
// или
str.replace(/^0+/, '')
// или
str.match(/[^0].*/)[0]
// или
str.split(/^0*/).pop()
// или
str.slice(str.search(/[^0]/))
// или
[...str].reduce((acc, n) => (+n || acc) && acc + n, '')
Вопрос: Как сделать VPN сервер для iOS клиентов на 10000 пользователей?

Лучший ответ:

откуда лучше брать сервера?

Поднять свои.


Получается должен быть какой-то Бекенд, на чём его писать? 

На том, на чём умеешь.

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

Ну тебе с твоего бэкенда надо будет собирать метрики по задержкам, нагрузке на CPU, и RAM.
Решений этой задачи много. Гугли "сбор метрик с бэкенда".

Автоматическое масштабирование - тема отдельная и достаточно сложная.

Может быть есть уже какой-то готовый сервис который предлагает готовое решение

Да, есть. Многие vpn-провайдеры имеют так называемую услугу "white label" - они сами делают клиент с твоим логотипом, названием, и может даже дизайном, но за инфраструктуру отвечать будут уже они.

Быстро и по сути ноль головной боли, если у тебя задача просто сделать свой vpn-сервис

Худший ответ:
Поднять свой впн сервер
Дальше уже от этого отталкиваться
Вопрос: Почему с папки не убирается свойство «Только для чтения»?

Лучший ответ:
Технически, с точки зрения файловой системы ntfs, у папки в принципе нет атрибута только чтение.
В интерфейсе windows принято, что полностью закрашенный чекбокс означает "не изменять значение". Т.е. если вы снимаете чекбокс, винда снимет атрибут со всех файлов в папке. Если ставите чекбокс - винда вешает на все файлы атрибут. Если чекбокс закрашен - значения атрибута не будут изменены.

Худший ответ:
У винды от 7 и выше добиться снятия запрета на запись на диск С тот еще квест.
Если снимите - UAC всеравно поставит.
Но кватрат, тбычно означает "не изменять", т.е. на части вложенных папок и файлов стоит атрибут, а на части нет
Вопрос: Какой стек технологии выбрать для сайта объявлений с посещаемостью до 500.000 в день?

Лучший ответ:

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

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

Худший ответ:
основная   проблема будет не  на  чем делать сайт  а  как  раскрутить  для  такого  количества  поетителдей
Я  уже  не  говорю  что  людям  которые  не  знают  какой стек  выбрать  вряд ли  стоит начинать  делать такой  сайт
Вопрос: Какое решение задачи по циклам будет правильным?

Лучший ответ:
1. Определяемся с тем, что от нас хотят. Требования можно представить в виде такого псевдокода :)
повторять всегда {
   сообщение = прочитать();
   если сообщение = "EXIT" то выйти;
   сообщение2 = прочитать();
   если сообщение2 = "EXIT" то выйти;
   количество_повторений = прочитать_число(сообщение2);
   повторять количество_повторений раз {
     напечатать(сообщение);
   }
}

2. Переводим буквально на C#:
while(true) {
  Console.WriteLine("Введите сообщение");
  var message = Console.ReadLine();
  if (message == "EXIT") {
    return;
  }
  Console.WriteLine("Введите количество повторений");
  var message2 = Console.ReadLine();
  if (message == "EXIT") {
    return;
  }
  var count = int.Parse(message2); // по хорошему, надо бы как-нибудь обработать, если пользователь ввёл не число. В таком виде программа просто упадёт.
  for(var i=0; i<count; i++) {
    Console.WriteLine(message);
  }
}

Худший ответ:
Очень неоднозначное условие.

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

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

В итоге можно предположить такую программу:
using System;
class HelloWorld {
    
    static string ReadInput() {
        var input = Console.ReadLine();
        if(input=="EXIT") throw new Exception(); // ну или просто выход
        return input;
    }
        
    static (string,int) GetMessage() => (ReadInput(), Convert.ToInt32(ReadInput()));
    
    static void Main() {
        string message;
        int i,n;
        while(true) {
            (message, n) = GetMessage();
            for(i=0;i<n;i++) Console.WriteLine(message );
        }
    }
}
Вопрос: Словарь для брута rar архива возможно сделать через Блокнот?

Лучший ответ:
Вы создали словарь с 84 строками (значениями), то есть программа перебрала 84 значения с вашего словаря, не составляя комбинаций.
Для создания словаря можно использовать программу Dictionary Generator Либо написать скрипт, который создаст список всевозможных комбинаций. Так же в некоторых программах для подбора пароля к архиву есть инструменты для создания словарей.

Худший ответ:
Как я понял путем проб: через Блокнот словарь составляется вполне.  И одни софты читают его с расширением ".dic" (без кавычек), а другие с расширением ".txt" (без кавычек).  Изменять расширение туда и обратно можно без проблем.  
Но не все софты поддерживают опцию комбинирования словарей и перебора комбинаций по словам словаря или даже нескольких друг с другом.  Так, в ARCHPR (4.62 version) этого нет, он просто пробегает по словам словаря (если выбрать перебор по словарю). 
Но зато есть в ARPR (в версии 3.6) и в Hashcat (однако, последний у меня пока не читает архив).
Вопрос: Как заставить PHP обрабатывать строку, игнорируя управляющие последовательности?

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

Вопрос действительно "тупой". И причём путаница тут уже в самом начале. 
Утверждение
Если я не создаю строковую переменную как литерал в коде, а беру из файла или GET-запроса и т. д., то функциями в PHP она обрабатывается как строка в двойных кавычках.

является неверным. 

Надо всегда проверять свои предположения на практике. 
То есть на самом деле вся проблема сводится к тому, что ещё до попадания в переменную $_GET['text'], текст был сконвертирован. В случае же, если в адресной строке будет передано значение \xbc, то оно и будет в переменной и прекрасно запишется в базу

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

Худший ответ:
Представить строку как Char set массив и вычитать длинну массива
Вопрос: Как замотивировать программиста осваивать базовые навыки профессии, помимо языка программирования?

Лучший ответ:
Ваш коллега прямо заявляет, что для его специализации (допустим, веб-разработчик) всё это знать не обязательно, и что так считают все, с кем он работал раньше

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

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

Худший ответ:
 Добавим ещё к этому "конфликт поколений"...

хаха. он старше вас или кого там? 
есть такое: "кто понял жизнь - работу бросил" (с)

в физике тело всегда занимает положение с наименьшими тратами энергии
ваш сотрудник определенно удобен по зарплате и увольнения не боится - и не сделаете вы ему ничего
терпите или используйте  проджектменеджерский подход
Вопрос: Почему не отрабатывает forEach?

Лучший ответ:
Дело в том, у какого объекта вызывать метод forEach()

Сейчас, очевидно, вызываете на массиве или статичном NodeList'е, в который свежедобавленный элемент не попадает.

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

querySelectorAll() возвращает статичный набор.

Решение, в общем – либо заново собирать элементы, и по ним запускать forEach(), или же получать динамическую коллекцию, используя соотв. метод.

Худший ответ:
Ну это ведь логично, что при новом рендере, ваша старая переменная которая содержит этот массив с элементами не пополнится новым элементом, вам нужно на моменте добавления нового элемента на странице, заново перезаписывать массив, + как вариант чтобы по новому не накидывался класс на элемент у которого уже есть, искать эти же элементы, которые не имеют 'active' класса
P.S. 
пример 
let array = document.querySelectorAll('.element:not(.active)');
Вопрос: Как сделать что бы добавлялась информация в JSON файл а не удалялась старая и записывалась новая?

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

Звучит как говно, и так оно и есть. Возьми простейшую БД, например SQLite, и пиши туда.

Худший ответ:
У меня есть утилитный метод который записывает информацию в JSON из модели.
public static void convertModelToJson(Object className, String titleFile) {
        ObjectMapper mapper = new ObjectMapper();
        mapper.enable(SerializationFeature.INDENT_OUTPUT);
        try {
            mapper.writeValue(new File(baseFile + titleFile), className);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

При каждом вызове этого метода создается новый файл и записывается вместо предыдущего, как можно было ожидать, что оно будет добавлять данные в конец? Ну да ладно, это вопрос риторический.
Я бы посоветовал заполять JSON в процессе работы, а сохранять его уже когда работа будет закончена.
Если нужно дополнять файл между сеансами работы с программой - открывайте и парсите его при старте.
И да, если вам правда нужно будет работать с одним файлом в разных сеансах, то подумайте про БД, как вам посоветовал Денис Загаевский
Вопрос: Можно ли автоматически выбирать принтер в зависимости от размера печати?

Лучший ответ:

Создаем виртуальный принтер
Настраиваем печать из софта на виртуальный принтер
Виртуальный принтер настраиваем на выполнение скрипта/приложения, которое проверит размер печати и отправит результат далее на нужный принтер

Я, правда делал иную задачу - использовал виртуальный принтер для конвертации чего угодно в пдф для загрузки в облако. Перенаправление печати тоже достаточно легко делается через виртуальный принтер. Виртуальный принтер использовал вот этот: https://www.pdfforge.org/pdfcreator - это приложение уже имеет в составе виртуальный принтер, само его ставит и настраивает, результат печати перегоняет в ПДФ, и умеет вызывать нужное приложение по окончанию конвертации. Лучшее решение, что я нашел для создания виртуального принтера сразу и без смс. Пример детектирования размера страницы в ПДФ: https://stackoverflow.com/questions/15565740/deter...
Ну и альтернативный вариант: сменить три принтера на один с несколькими лотками и умением автоматически выбирать источник для печати.

Худший ответ:
Сомнительно. Принтерные пулы обычно обрабатывают задачу подключения нескольких принтеров на случай, если какой-то из них недоступен или для балансировки нагрузки на них. Так, чтобы пул различал задания - это нужен специализированный софт, который вам покажет виртуальный принтер, а сам перенаправит сохраненное в каком-то универсальном виде (PDF, например) задание на тот принтер, который выбран для печати заданий такого формата... не встречал такого.
Вопрос: Куда можно устроиться стажироваться в 16 лет python dev?

Лучший ответ:
Никуда.

Худший ответ:
Скорее всего у 16-летнего не развиты софт-скиллы. Это будет главным препятствием в поиске стажировки и работы.
Вопрос: Почему все говорят не изобретать велосипед, хотя хорошие программисты выходят именно из тех кто изобретает велосипед?

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

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

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

в профессиональной индустрии не любят тех кто изобретает своё
на таких смотрят как на дефектных фриков
поэтому рекомендуют не изобретать велосипеды

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

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

Худший ответ:
С точки зрения коммерческой применимости, свой велосипед это зло. Дело не только в стандартизированности решений как выше сказали. Тут дело в том, что над OS проектами работает множество людей а это ведет к закону Линуса. Т.е. в библиотеке которая развивается сообществом находят и устраняют банально больше ошибок чем вы сможете в одиночку или в рамках свой команды на работе. Во вторых это решение нужно поддерживать, что из первого пункта вытекает. Вам через 3 месяца может надоесть фиксить баги в своей самописной либе, потому что у вас уже другая идея и другой вилосипед. А вы это затащили в боевой код. Или вы вообще ушли из компании. Кто теперь это поддерживать будет? С коммерческой точки зрения стандартизированность и переиспользуемость компонентов это хорошо. Это есть в любой индустрии. Автомобильные заводы же не сами металл добывают из которых потом корпуса машин делаю, верно?

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

Лучший ответ:
От проекта зависит. На моëм проекте например новичкам даже сеньорского уровня до первой простой таски требуется недели две, а выход на 100℅ эффективность занимает 3-6 месяцев.

Худший ответ:
дали задачу вам , оценивать время тоже вам , то что там кто то взял с потолка к вам отношения не имеет
мы тут не так давно взяли нового программиста и как то с уровнем его немного промахнулись, брали как бы с расчетом на рост, но в итоге он за две недели толком дев окружение не смог запустить , так как проект большой и м ного чего тянет с собой , пришлось уволи ть
Вопрос: Punto switcher аналог, который не будет мешать в играх?

Лучший ответ:
В исключения игру добавьте



Худший ответ:
Просто выключай Punto switcher, когда заходишь в игру
Вопрос: Передача нескольких GET параметров через форму?

Лучший ответ:
Никак не делать, эти переменные никому не мешают

Худший ответ:
Только js скриптом слушать событие submit, отменять его, и собирать нужный вам запрос.
Не совсем понятно зачем.
Вопрос: Как работает этот код на хаскеле?

Лучший ответ:
В общем разобрался:

func3 означает, что при передаче вторым аргументом 0 - надо всегда возвращать первый аргумент без изменений.
А при передаче первым аргументом пустого списка - всегда пустой список.
В остальных случаях -
Если func1 xs < n (func1 считает длину списка), то вернуть xs, иначе (какая-то сложная штука)

В func2 при помощи @ мы просто вытаскиваем первый элемент списка в _ (спасибо mikeyuriev за поправку), а хвоста списка - в xs'

А дальше идёт рекурсивный вызов.
В результате func2 отбросит n первых элементов списка
func1 - рекурскивно считает длину списка
func2 - отбрасывает первые n элементов списка
func3 - как раз чередует элементы списка.
А теперь про "сложную штуку"
n `take` xs ++ [y] ++ func3 (drop n xs) n y
take берёт первые n элементов списка (тут используется инфиксная форма, по тому и страшно)
++ - конкатенирует два списка
drop - то же самое, что и func2

Таким образом мы берём n первых элементов списка, приклеиваем разделитель, и повторяем то же самое с оставшимся хвостом, пока список не кончится.

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

PS: решение красивое и элегантное, мне нравится.

Худший ответ:
А вот если пользоваться библиотеками, то, подключив два модуля, можно сделать коротко:
Prelude Data.List.Split Data.List> n = 2
Prelude Data.List.Split Data.List> intercalate "@" $ chunksOf n "1234567"
"12@34@56@7"
Вопрос: Везде ли нужно проверять на существование элемента в массиве?

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

Худший ответ:
Самый Правильный и Сжатый Ответ - Абсолютно Всегда!
Вопрос: Как найти геометрическую прогрессию в списке?

Лучший ответ:
Берём первые два числа списка. Они образуют геометрическую прогрессию с x0 = a[0] и k = a[1]/a[0].
Прогрессия найдена.

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

*Не забываем про деление на ноль! Может потребоваться отдельная проверка.

**Не забывай про ограниченную точность чисел с плавающей точкой. Сравнивать такие числа лучше не как обычно, a == b, а с помощью конструкции вида abs(a - b) <= E, где ты задаёшь в E желаемую точность (например, 0.000001).
Вопрос: Под какие разрешения делать адаптив?

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

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

Худший ответ:
по дефолту ты делаешь 1920х1080 и уже ниже адаптируешь 1600х900, 1366х768(это самые популярные разрешения), желательно делать сайт не адаптивным в наше время а резиновым а это разные вещи,  про media правильно так же блокам задавать резиновую ширину в % допустим .block{ width: 33%;}, и под мобилку просто делаешь эти блоки либо в 2 колонки(.block{ width: 50%;}) либо в 1(.block{ width:100%;})snippet