Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Нарушают ли конструкторы инкапсуляцию?

Лучший ответ:
Это почему сеттеры нарушают инкапсуляцию? Вовсе нет. Контроль сохраняется за внутренней логикой класса. И в отношении конструкторов, получается, странным образом интерпретируете инкапсуляцию. Логика ООП практически потеряет смысл, если нельзя будет настраивать поведение объектов. Каким образом с чем-либо взаимодействовать, если нет значений, которые можно передать объекту?

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

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

Худший ответ:
1. Сеттеры не нарушают инкапсуляцию. 
Если вы устанавливаете свойство через сеттер, вы вообще уверены, что оно хранится в свойстве с тем же именем того же класса?
object.setProperty(value)

Вот я, глядя снаружи вообще хз, где и как хранится это свойство, если вообще хранится. А вы?

2. Конструктор не нарушает инкапсуляцию. Ровно по тем же причинам.

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

Лучший ответ:
Нужно взять Arduino, фоторезистор, реле. 
Arduino будет измерять сопротивление фоторезистора с помощью АЦП (падение напряжения на нем) и включать реле.

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

Лучший ответ:
А чем тот же re не устраивает?import re

str1="""<тег>1</тег><тег>2</тег><тег>3</тег>"""
for res in re.findall(r'<тег>(.*?)<\/тег>', str1):
    print(res)
1
2
3

Худший ответ:
Этот парсер - регулярное выражение.
В питоне - библиотека re
Вопрос: Почему потенциометр подключается по двухпроводной схеме?

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

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

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

Худший ответ:
Есть ли возможность защитить свой сайт от копирования
Непонятно, что имеется в виду под "сайтом" - контент? дизайн? механику? Современный сайт довольно сложно устроен, копировать некоторые вещи не имеет смысла, да и вообще - он кому-то нужен? Интересно, почему каждый нуб полагает, что его "унекальный кантент" чего-то стоит?
так и скопированный проект с github'a? 
Не понял... Чужой, что ли, проект?
Вопрос: Какой набор нужен для начального измерителя температуры на Ardunio?

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

Худший ответ:
Ардуино UNO
Датчик температуры DS18B20
LCD-дисплей 1602
Вопрос: Telegram Bot и парсинг Вк с Украины?

Лучший ответ:
Разместите его на сервере, с которого есть доступ к vk.com.

Худший ответ:
Попробуйте обычные http proxy
Вопрос: Что значит запись: Collection collection = new ArrayList();?

Лучший ответ:
Погружайтесь в ООП, знакомьтесь с принципами SOLID, всё станет понятно.

Худший ответ:
Погружайтесь в ООП, знакомьтесь с принципами SOLID, всё станет понятно.
Вопрос: Как скопировать в буфер изображение, а потом вставить его в редактор с помощью JavaScript?

Лучший ответ:
Когда ты копируешь картинку, в буфер она попадает в формате base64:
document.onpaste = function(event){
  var items = (event.clipboardData || event.originalEvent.clipboardData).items;
  console.log(JSON.stringify(items)); // will give you the mime types
  for (index in items) {
    var item = items[index];
    if (item.kind === 'file') {
      var blob = item.getAsFile();
      var reader = new FileReader();
      reader.onload = function(event){
        console.log(event.target.result)}; // data url!
      reader.readAsDataURL(blob);
    }
  }
}

Вот еще рабочий вариант: jsfiddle.net/bt7BU/225

Худший ответ:
Можно сделать с помощью div у которого установлен атрибут contenteditable.
Вопрос: Почему не корректно работает программа? Например при сравнении 2 и 11 выводит 2?

Лучший ответ:
Потому что вы сравниваете строки, а не числа.
"2" > "11", но 2 < 11.console.log("2" > "11"); //true
console.log(2 > 11); //false
Вашим решением будет использовать вот такое выражение:const number1 = parseInt(document.querySelector('.qw').value);
const number2 = parseInt(document.querySelector('.qw1').value);

Худший ответ:
Приведение типов
Вопрос: Что нужно исправить в логотипе?

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

Худший ответ:
2 похож очень сильно на adguard
Вопрос: Что делать с кодом после того, как он написан?

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

Для написания обычных программ (с интерфейсом и возможностью работать самостоятельно) тебе нужен другой язык. Например, C#, Delphi, C++. Которые имеют большие возможности, а среды для таких языков массу инструментов для разработки хорошего приложения. В том числе и приложения на Android и iOS.

Худший ответ:
Это называется deploy и этим занимаются devops. Для этого нужно знать всякие админские технологии типа 
-ssh
-git
-ci/cd
И другие страшные слова.
Вопрос: Можно ли вкладывать тег a в a?

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

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

Лучший ответ:
Родитель не может знать что может понадобится для создания экземпляра наследника.damn, its OK !
Не ok. В конструкторе наследника нет вызова конструктора родителя

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

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

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

Для запуска в последствии нужно выполнить команду (в ярлык ее указать)
schtasks.exe /run /tn имя_задачи

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

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

Худший ответ:
Универсальные алгоритмы сжатия не смогут сжать случайные данные (см. ответ Rsa97). Но если знать специфику данных, откуда они поступают, может что-то и получится. Например, все же выявить какие-то закономерности.
Вопрос: Как построить график функции в windows forms c#?

Лучший ответ:
Дык, а корень кто будет извлекать?
А так у вас строится y=x*x*x/(2*a-x). Кстати, выражение знаменателя тоже зачем-то у вас делится на 2.

Худший ответ:
Дык, а корень кто будет извлекать?
А так у вас строится y=x*x*x/(2*a-x). Кстати, выражение знаменателя тоже зачем-то у вас делится на 2.
Вопрос: Как работать с покупной html-темой?

Лучший ответ:
Сами себе проблему создаете! Пока вы ищете священный грааль, чей-то стилевой файл на 200кб больше, приносит радость и деньги!

Худший ответ:
Наверное дейстивительно стоило забить... но мне потом с этим Г... работать... так что я всеж не забил. 
Выбранные страницы были доверстаны под хотелки, новые правила были дописаны в конец монстра. Далее я прогнал это все через uncss... вместо 500кб получилось 30. ) Сломался только прелоадер. Но вообще конечно это боль...
Вопрос: За какой срок можно выучиться на junior front-end dev.?

Лучший ответ:
60% html и css
А вы уверены? Рекомендую пройтись по списку know it all, чтобы точно понимать, что вы знаете, а что - нет. И это не издевка. Для разработчика очень полезно иметь представление о том, что существует в его языках, кроме того, что он "знает". Это помогает меньше тупить там, где есть стандартное решение, которое можно за секунду загуглить, но только если знаешь, что оно вообще существует в природе.что учить после
Нужно изучить процесс сборки фронтенда, который нынче применяют, и понять, зачем нужны все эти инструменты - пре/пост-процессоры, линтеры, сборщики, таск-раннеры, пакетные менеджеры и.т.д. Именно не "выучить", а понять смысл. И почитать про хорошие практики и методологии. Архитектуру проектировать джуниора никто не посадит, а вот чистый и понятный код должен быть. После этого уже имеет смысл познакомиться с популярными библиотеками и фреймворками, которые вы без труда найдете в описаниях вакансий.где найти практику
Макеты для верстки - в гуглопоиске, интересные примеры и еженедельные челленджи - на CodePen, вопросы из бытовой фронтендерской практики и разные решения для них - тут, на тостере (отвечать тоже полезно, пока объясняешь что-то другому - сам лучше понимаешь).

Худший ответ:
Уже изучил основы около 60% html и css, хочу углубиться и найти хорошую практику. 
Идите по этой карте и все будет хорошо.И где найти практику для всего этого +- интерактивную и понятную
Начните с макетов.
Вопрос: Как запретить ввод букв в инпут?

Лучший ответ:
В принципе вам уже ответили, но вдруг кто у кого нет jq в проекте<input type="text" onkeyup="this.value = this.value.replace(/[^\d]/g,'');">

Худший ответ:
Не надо ничего выдумывать, уже придумали
https://www.w3schools.com/tags/att_input_pattern.asp
Вопрос: Как добавить в Apk-файл разрешение BILLING?

Лучший ответ:
Добавть в манифест:
<uses-permission android:name="com.android.vending.BILLING" />

Худший ответ:
Как я решил этот вопрос: 
Перешел на сайт https://analytics.cloud.unity3d.com - выбрал проект - Settings - Analytics Settings - добавил Google License Key (который взял в Google Play Console - Инструменты разработки - Службы и Api). И также вписал его в Unity в Project Settings - Services - In-App Purchasing - Options. После чего сделал aab билд проекта. Залил его в Google Play Console в закрытое тестирование и начал тестирование. И в контенте для продажи все появилось:

К слову были и другие проблему по типу билда проекта в aab, но все это гуглится спокойно. Надеюсь кому-то помог.
Вопрос: Что делает эта регулярка?

Лучший ответ:
\w matches any word character (equal to [a-zA-Z0-9_])
https://regex101.com/r/HDoDzi/1

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

Если же указать модификатор юникода, логика меняется:
\w match any word character in any script (equal to [\p{L}\p{N}_])

Худший ответ:
https://regex101.com/
Справа снизу почитай справку.
\w - все буквы, но такие метасимволы работают только с латинницей
говорит 
[ ] - набор символов
[^...] - все что не ...
[^ \w] - все что не пробел и не буква
+ - мультипликатор, который говорит как минимум от 1 символа и больше
"" - заменить на пустоту.

Короче удалят все не-пробелы и не английские буквы.
Вопрос: TypeError: The view function did not return a valid response.The function either returned None or ended without a return statement как решить в Flask?

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

@app.route('/create-poem/', methods=['POST', 'GET'])
def create():
    if request.method == 'POST':
        ...
        try:
            ...
        except Exception:
            logging.exception('')
            return ''
    else:
        ...

Тогда бы ты увидел ошибку, в которой говорится
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: ivan
Тогда бы ты мог открыть свою БД и увидеть, что в ней действительно нет нужной тебе таблицы, а нет её потому, что ты её не создал. А вот что бы создать таблицу, нужно :
db.create_all()
app.run(debug=True)

Худший ответ:
Написано же, что функция ничего не вернула. Логично, что для исправления проблемы нужно вернуть что-то.
А именно добавить return в блоке try ... except
Вопрос: Как можно назвать игру для Play Market?

Лучший ответ:
The Kingdoms Come
Hear the trumpets, hear the pipers!

Называйте так, чтобы это не было зарегистрированным товарным знаком.
Или хотя бы поищите по названию в том же Плеймаркете.

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

Лучший ответ:
Вопрос: почему ... перезаписывает его
Буквальный ответ: потому, что setItem() перезаписывает значение по ключу. Ключ у вас один и тот же всегда: "src".

Как исправить.
В Storage хранятся только текстовые строки. Поэтому можно там держать JSON-представление массива ссылок. Как вариант, добавлять ссылки не в массив, а в Set, чтобы гарантировать их уникальность, без дублей.
spoilerconst links = new Set(); // TODO: надо считать из LS ранее сохранённый

const key = 'photos'; // ключ в Storage

const addLink = (e) => {
  const size = links.size;         // размер до добавления
  links.add(e.target.src);         // добавили ссылку
  if (size === links.size) return; // уже была эта ссылка в наборе

  localStorage.setItem(key, JSON.stringify([...links]));
  alert('Фото добавлено в избранное!');
}

photo.forEach((el) => el.addEventListener('click', addLink));

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

Лучший ответ:
Например div лишний в вёрстке или в записи.
Больше хрустальный шар не показал

Худший ответ:
Наверное, вордпресс поставил какой-то тег
Вопрос: Есть ли принципальное отличие между инъекцией Repository в функцию, и получением его же через entityManager(см. код)?

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

Худший ответ:
Если нужно просто получить некоторые данные из репозитория, то первый вариант лучше.
А вот если надо полученные данные как-то изменять, то лучше второй вариант, т.к. сразу можно дернуть persist и flush из em.
Вопрос: Некорректно отображается шрифт в bold на сайте, как поправить?

Лучший ответ:
100% уверен, что у вашего шрифта отсутствуют жирное и курсивное начертание и поэтому каждый раз, когда вы задаете любому тексту с данным шрифтом свойство font-weight: bold, браузер самостоятельно создает это начертание и вот тут возможны такие "ляпы".
Варианты такие:
1. Использовать другой шрифт
2. Поискать этот шрифт в начертании bold и определить его в font-face
3. Использовать только normal начертание с этим шрифтом на сайте

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

Лучший ответ:
$result = array_map(fn($n) => implode(',', $n), array_chunk(explode(',', $str), 2));
или

preg_match_all('~[^,]+,[^,]+~', $str, $match);
$result = $match[0];

Худший ответ:
<?php
$str = 'Параметр 1, Параметр 2, Параметр 3, Параметр 4, Параметр 5, Параметр 6, Параметр 7, Параметр 8, Параметр 9, Параметр 10';
$p = array_map(function($v) {
    return implode(',', $v);
}, array_chunk(explode(',', $str), 2));
print_r($p);
Вопрос: Зачем нужны маски подсети?

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

Худший ответ:
Это скорее не ответ зачем нужны, а ответ, зачем понимать, зачем они нужны. Случилось буквально 2 дня назад.
Есть некая контора с удалёнными филиалами. Шлюзами на ней микротики соединённые друг с другом oEIP туннелями и все филиалы находятся в 21 подсети. Соответственно, у первого филиала шлюзе 0.1, у второго 1.1 и тд.
Так вот, вчера интернет был. сегодня не работает(точнее у одних работает, у других нет), ничего не делали, ничего не меняли. После нескольких часов плясок с бубном выяснилась история: в филиале, где шлюзом был микротик с внутренним ip 2.1 купили бытовой роутер dlink, чтоб ви-фи раздавать, воткнули lan портом в свич и у них всё заработало. Догадайтесь, какой ip у него был по дефолту? Благо, что филиал был в получасе езды и самым ближайшем. Так, что после отрубания всех портов, кроме одного в первой конторе и нескольких сбросов arp cache поехали сразу туда. А там был филиал и за пару тысяч километров.
Вопрос: Почему так странно нумеруются childNodes в DOM-навигации?

Лучший ответ:
Потому что childNodes это не только дочерние тэги внутри элемента. Это и текст внутри элемента. В вашем случае каждый перенос строки это отдельная нода. Если сделать так, то будет как вы хотите:<div id='row'><div class='col-tm'>apple</div><div class='col-tm'>banana</div><div class='col-tm'>cranberry</div></div>
Для получения HTMLCollection есть метод children и тогда текст без тэгов внутри элемента учитываться не будет:var elem_apple = first_column.children[0];

Худший ответ:
function searchTagName(childNodes){
			for(var x = 0; x < childNodes.length; x++){
				if(childNodes[x].nodeName == childNodes[2].nodeName){
					console.log(childNodes[x]);
		}}}
	searchTagName(parent.childNodes);
Я тоже чё то не понял в чём соль этих участков якобы с контентом тегов. Присваивая текст тегу он отображается. Присваивая текст элементам #TEXT нигде не отображается.
Вообщем слепил условия на для тега p.
 childNodes[x].nodeName == "p"  - такая комбинация не катит
Вопрос: Можно ли посмотреть цепочку сетевых устройств до шлюза?

Лучший ответ:
Нет. Трассировку маршрута можно увидеть только для маршрутизаторов

Худший ответ:
LLDP может немного помочь в построении L2-карты сети.
Вопрос: Linux администрирование, нету доступа к файлу?

Лучший ответ:
В ответах совершенно правильно отправили учить линуксовые права.
Но забыли отметить, что удаление файла - это операция не над файлом, а над папкой, в которой он лежит. Нужны права на запись в нее, чтобы создавать или удалять файлы.
Поэтому здесь вообще не играют права файла - -rw-r--r--/apache/apache.
А решают права папки: drwxr-xr-x/apache/apache.
В которых, правда, у пользователя, по принадлежности его к группе apache, такой же доступ - только на чтение.

Худший ответ:
А что не так? Root и владелец rw группа read остальные read.
Вопрос: DATETIME или TIMESTAMP?

Лучший ответ:
используйте datetime пока не уверены в обратном.
timestamp в мускуле:
- ограничен 1970-01-01 снизу и 2038-01-19 сверху (соответственно, не очень подходит для хранения, например, исторических дат или дней рождения)
- отображение зависит от времени сервера (при восстановлении на другом сервере может случится не то, что ожидалось)

Худший ответ:
DATETIME - не зависит от временной зоны, выводится как добавлено.
Вот только временная зона "юзера" тут как бы не при чём, а зависит от настроек операционки, MySQL или сессии.
P.S. в дальнейшем, если понадобится работать с интервалами (выборка по дню, месяцу и т.д.) проще и быстрее через TIMESTAMP