Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Как составить число n из элементов списка?

Лучший ответ:
Я бы решал задачу рекурсивно.
Найди в списке все числа x, меньшие или равные n, определи их позиции в списке, отсортируй по убыванию числа.
Если в списке есть x, равное n, ответ найден.
Иначе перебирай числа по порядку, от больших к меньшим, и для каждого числа x пробуй убрать его из списка, а потом рекурсивно решить задачу для суммы n-x.
Т.е. что-то типа:
def compose_sum(numbers: list[int], total: int) -> list[int] | None:
    # ищем индексы потенциальных слагаемых
    indices = [i for i in range(len(numbers)) if numbers[i] <= total] 
    # сортируем по убыванию слагаемых, потом по порядку в списке
    indices.sort(key = lambda i: (numbers[i], i), reverse=True)
    # если нулевой элемент совпадает - мы нашли точную сумму. Прерываем рекурсию.
    if numbers[indices[0]] == total: 
        return [indices[0]]
    for index in indices: # иначе перебираем слагаемые
        numcopy = numbers.copy()
        # копия списка без рассматриваемого слагаемого
        current = numpcopy.pop(index)
        next_indices = compose_sum(numcopy, total - current)
        if next_indices:  # нашли решение, корректируем индексы (так как мы удалили один элемент)
            for i in range(len(next_indices)):
                if next_indices[i] >= index:
                    next_indices[i] += 1
            return [index] + next_indices # отдаём наше решение "наверх"
        # next_indices пуст/None - решения не нашли, пробуем другой index
    return None # не нашли решения ни для одного index

Худший ответ:
Я бы решал задачу рекурсивно.
Найди в списке все числа x, меньшие или равные n, определи их позиции в списке, отсортируй по убыванию числа.
Если в списке есть x, равное n, ответ найден.
Иначе перебирай числа по порядку, от больших к меньшим, и для каждого числа x пробуй убрать его из списка, а потом рекурсивно решить задачу для суммы n-x.
Т.е. что-то типа:
def compose_sum(numbers: list[int], total: int) -> list[int] | None:
    # ищем индексы потенциальных слагаемых
    indices = [i for i in range(len(numbers)) if numbers[i] <= total] 
    # сортируем по убыванию слагаемых, потом по порядку в списке
    indices.sort(key = lambda i: (numbers[i], i), reverse=True)
    # если нулевой элемент совпадает - мы нашли точную сумму. Прерываем рекурсию.
    if numbers[indices[0]] == total: 
        return [indices[0]]
    for index in indices: # иначе перебираем слагаемые
        numcopy = numbers.copy()
        # копия списка без рассматриваемого слагаемого
        current = numpcopy.pop(index)
        next_indices = compose_sum(numcopy, total - current)
        if next_indices:  # нашли решение, корректируем индексы (так как мы удалили один элемент)
            for i in range(len(next_indices)):
                if next_indices[i] >= index:
                    next_indices[i] += 1
            return [index] + next_indices # отдаём наше решение "наверх"
        # next_indices пуст/None - решения не нашли, пробуем другой index
    return None # не нашли решения ни для одного index
Вопрос: Можно ли файл виртуальной машины преобразовать в iso образ?

Лучший ответ:
чтобы на флешку ставить, не нужно iso, 
просто копируйте файлы ФС на флешку и прописывайте загрузчик

Худший ответ:
Если  ваша задача перенести виртуалку то воспользуйтесь вот этим гайдом
https://askubuntu.com/questions/32499/migrate-from...

Впрочем есть другой вариант. 
https://codebeer.ru/dd-klonirovanie-diska-po-ssh/
dd if=/dev/sda | gzip | ssh root@target 'gzip -d | dd of=/dev/sda'
Вопрос: Как в Linux сделать swap файл с динамическим размером?

Лучший ответ:
Как в Linux создать swap-файл с динамическим размером?
Никак.

Более того, это не нужно, поскольку надо пользоваться разделом, а не файлом (в раздел пишется напрямую, а в файл - поверх ФС, что менее эффективно).

Худший ответ:
если у тебя не старый компутатор и есть больше 4гб,и не страдаешь режимом в сон
то swap тебе не нужен
хоть некоторые-кривые приложения/проги его требуют
у меня 8 оперативки+ 1гб /swap в в файле
в конфигах sysctl
kernel.sysrq = 1
vm.swappiness = 15
vm.vfs_cache_pressure = 50
Вопрос: Блокировка непосредственно с сайта запросов?

Лучший ответ:
Попробуйте в адреса iframe добавить ?rel=0&enablejsapi=1

Худший ответ:
вот этот плагин может вам помочь https://www.hideyt.com/
принцип работы в том что они отслеживают окончание ролика или паузу и сбрасывают состояние плеера или перекрывают рекомендации серым блоком
Вопрос: Хайп вокруг ЯП Rust и C?

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

(Дальше какое-то ужасно длинное предложение, которое я разбил на части)
Новый язык программирования Раст, как заявляют, лишен этого недостатка
Да
разве общее число ошибок не перераспределяется на другие недостатки
1. Самые сложные в исправлении ошибки - кривое управление памятью и многопоточность, обе их Rust Решает
2. Нет, ошибки не перераспределяются, это же не тараканы.
являются ли ошибки с памятью ошибками программиста
Если управление памятью ручное, то это ошибки, которые допустил разработчик.
Если управление памятью автоматическое (хоть через GC, хоть через Borrow checker), то это ошибка компилятора/рантайма/языка.

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

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

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

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

Худший ответ:
Можно делать не прикладные программы ещё)
Игры например из таких
Вопрос: Как правильно формулировать ЧПУ на сайте?

Лучший ответ:
topfotooboi.ru/dlya-kuhni/dom-s-sadom-13-1113

И насколько это важно? Если честно, всем пофиг. На эти ЧПУ обращает внимание один человек из сотни.

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

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

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

Худший ответ:
стоит 
это одна из жизненных вех которые потом не поменять
Вопрос: Может ли S.M.A.R.T. жёсткого диска сам по себе очиститься и «пробег» удалился?

Лучший ответ:
Может ли S.M.A.R.T. жёсткого диска сам по себе очиститься и «пробег» удалился?Если диск неисправен - все возможно.
У некоторых дисков эти данные записаны в служебных областях диска, которые не адресуются с компьютера, у некоторых на печатной плате.

Есть жёсткий диск на 500 Гб WD после прошлого владельца поверхность диска была в бедах.Если поверхность в бэдах - диск выкидывают на помойку.
После я викторией пофиксил Проблемы с поверхностью невозможно исправить программой.

Худший ответ:
Это баг а не фича да криво смотрите
Вопрос: С чего начать разработку ПО?

Лучший ответ:
Для алгоритма - есть блок-схемы и псевдоязыки.
Для структуры программы - есть UML-диаграммы. 

И для того и для другого есть тулзы, и то и другое можно упростить под себя и задачи.

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

Лучший ответ:
Хочу свичнуться в энтерпрайз, java + react (пока приблизительно так).
А почему Java, а не C#? Будет проще, кмк.
Есть ли у меня шансы стартануть не с самых низов, а хотя бы с уровня джуниор+ по зарплатам?
Зависит от ваших навыков - если вы три года работали в команде, а не соло, то вероятнее всего да.
Как обычно к таким переходам относятся работодатели?
Нормально, лишь бы мог адекватно объяснить.
Какой джуниор будет ценнее: тот, у которого есть достаточно опыта в разработке, но в другой сфере, или тот, который пусть немного (полгода-год), но поработал на нужном стеке?

Зависит от джуниора и того, с кем его сравнивают.

Худший ответ:
все зависит от уровня знаний. Я поменял направление с повышением зп, но перед этим долго готовился и прошел десятки собесов. 

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

Лучший ответ:
Клиент - это тот кто передает запрос и получает ответ. Сервер - тот кто получае запрос и формирует ответ.

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

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

Но когда выбор инструментов ограничивает тебя, например http, то тогда тот кто ждет подключения будет сервером по определению... повторюсь данные по http точно так же могут передаваться как от клиента к серверу (file upload) так и от сервера к клиенту (file download).
Вопрос: Laravel 9 и PHP SDK VK, как связать?

Лучший ответ:
Пользуйтесь нормальной IDE PHPStrom. Она и сама use подставит и предупредит, если что-то сделали не так. Это же детская ошибка в синтаксисе.

Худший ответ:
Ну так вы импортируете:
use vkcom\VK\Client;

а используете new VKApiClient('5.95');

Вы либо используейте тот класс, который подключаете директивой use, либо подключите VKApiClient. Вполне возможно, что должно быть так:
$vk = new Client('5.95');

UPD: решение 
......

use \VK\Client\VKApiClient;

........

public function loginVK(Request $request) {

        $vk = new VKApiClient('5.95');

        echo 'test';
    }
Вопрос: К какому специалисту обратиться?

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

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

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

upd. там помимо windows приложения, есть android apk версия, ее декомпиляция проще
я натравил на него jbart и вижу что приложение написано на lua или очень активно его использует, их тоже можно декомпилировать (но пропатчить уже не получится), просто поиском указанных api http endpoint не увидел (возможно используется иной или как то не тривиально сокрыто)

код огромный, под сотню мегабайт декомпилированных исходников, плюс полторы тысячи файлов luac

Худший ответ:
В чем проблема то?
Вопрос: Почему цикл не останавливается?

Лучший ответ:
Сильно сомневаюсь, что бесконечно. У вас написано полное декартово произведение таблиц. Значит число строк на выходе будет равняться произведению числа строк в первой таблице на число строк во второй таблице.

Худший ответ:
похоже вам нужно объединение таблиц по внешнему ключу.
Вопрос: Как декодировать JSON содержащий кириллицу?

Лучший ответ:
В JSON-е текст с большой вероятностью закодирован в кодировке utf-8 в его экранируемом виде через \u.
После перекодирования средство просмотра ресурса пытается отобразить результат в однобайтовой кодировке, предположительно в win-1252. Нужно настроить средство просмотра, чтобы оно тоже выводило результат в utf-8. Содержание JSON корректно, некорректен порядок работы с текстом после декодирования.

Худший ответ:
Скормите пайпом команде
enca -L ru -x latin1
Вопрос: Как прижать footer к низу страницы?

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

Разметка: 

<div class="wrapper">
     <header></header>
     <main></main>
     <footer></footer>
</div>

Стили:

.wrapper {
    display: grid;
    grid-template-rows: auto 1fr auto;
    grid-template-columns: 100%;
    min-height: 100vh;
}

Худший ответ:
Нашел рабочий еще способ:

#Wrapper {
    display:inline-block;
    width: 100%;
    height: 100%;
    min-height: calc(100vh - 100px);
}
footer {
    height: 100px;
}
Вопрос: Как написать java http локальный сервер?

Лучший ответ:
Возможно вам подойдёт Jenkins. Запускать можно будет как руками через интерфейс, так и через api/хуки

Худший ответ:
Зачем объясните ради бога? Серверов куча и маленькая тележка.
Вопрос: Как узнать копировался ли файл на съёмный носитель в Windows?

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

Худший ответ:
можно как минимум посмотреть реест на подключение флешек - примерно описано тут
Вопрос: Как лучше всего перенести базу с MS SQL на PostgreSQL?

Лучший ответ:
pg_loader попробуйте.
Но если БД большая и сложная, я бы не полагался на автоматические инструменты

Худший ответ:
Попробуйте сконвертировать структуру, поправьте руками. 

Данные выгрузить в csv, залить в постгрес.
Вопрос: Как правильно использовать музыкальный ряд в видео?

Лучший ответ:
А вы выполнили требования Free-лицензии?
При монетизации вы должны указать в видео, что музыка предоставлена tunetank.com и/или дать ссылки на треки.
Вы не должны использовать более пяти треков в одном видео.
Вы не должны использовать треки в онлайн-рекламе.
Если что-то не выполнено, то музыка использована нелицензионно.

Худший ответ:
Ну, по идее, можно рассмотреть такой YouTube-канал как NCS (No Copyright Sounds) и оттуда качать понравившуюся музыку.
Вопрос: Как отправить UDP пакет через командную строку Linux?

Лучший ответ:
Просто послать строку проблем нет (ip и порт меняете на свои):
echo -ne '\xa5\xa5\xa5...' > /dev/udp/192.168.0.1/5000
Тут сложнее разобраться в формате строки, что там за данные и как их подготовить.

Худший ответ:
Окей, гугл
libdnet

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

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

Худший ответ:
Для привода транспортного средства шаговый двигатель - самое глупое, что только можно придумать, потому что в действительности такой двигатель больше тормоз, чем двигатель. Он разлагает движение на множество мельчайших шагов и делает жёсткий стоп после каждого шага. Каждый такой шаг физически представляет собой разгон и торможение с удерживанием, а ведь разгон - самая энергетически затратная часть движения. Для обычного двигателя разгон приходится делать один раз за весь маршрут, а при шаговике - на каждом мельчайшем шагу! С точки зрения расхода бортовой энергии это никуда не годится, поэтому неэкономичные шаговики в трнаспорте не применяются. Их удел - небольшие, не слишком быстрые перемещения с точной фиксацией достигнутой точки (станки, плоттеры, 3D-принтеры, да и обычные принтеры тоже). Именно поэтому сила удержания - главный параметр шаговика, а сила тяги даже не выставляется в список параметров, настолько она не важна.
Как я уже упоминал, вам в вашей задаче куда лучше подойдут BLDC - те самые, которые широко применяются в электровелах, самокатах и т.п. Обычно они недешёвые (особенно вместе с системой управления). Но вот на днях мне попалась подсказка, как это дело сильно удешевить. Оказывается, на Авито можно купить надоевший ребенку гироскутер всего за 1000 рублей - два киловаттных мотор-колеса, контроллер и аккум в одном флаконе, а потом перепрошить этот контроллер. Подсказчик - Леонид Каганов, в своём блоге он даёт ссылку на источник альтернативной прошивки, а также на примеры её применения (тележки, похожие на вашу, и там есть видео).
По-моему, такой вариант решения вашей задачи будет куда лучше.
Вопрос: Можно ли брать две разные оперативные памяти?

Лучший ответ:
Работать будет но вот на каких таймингах (тебе же надо экстремальные) и главное работа в режиме dual channel - под вопросом.

Именно ради гарантий в прайслистах продают парами или по четыре планки памяти, протестированные на совместимость.

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

Лучший ответ:
Заведите массив из нулей. Для каждого отрезка сделайте +1 в координату его левого конца и -1 в координату, следующую за правым концом.

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

Это если вам надо весь массив, как в примере, выводить. Не знаю специфику вашей задачи, может эффективнее будет класть в массив пары {координата, +-1} и сортировать. Потом точно также обойти слева направо поддерживая счетчик.

Худший ответ:
Если я правильно понимаю типы данных, то перебор списка с обычной проверкой counter+= left<=x<=right будет наиболее быстрым с учетом скорости выделения и освобождения памяти.
Вопрос: Как узнать/сменить пароль шифрования от видеорегистратора hikvision?

Лучший ответ:
Через техподдержку Hikvision с прикладыванием чека от покупки.

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

PS - можете сбросить рег, пароль при этом не сбрасывается))
Может я не понял - пароль шифрования это для захода на регистратор? или "шифр" для подключения к облаку?
Вопрос: Чем отличаются эти две версии Telethon?

Лучший ответ:
Первая является форком второй (вторая - оригинальная). Следует обратить внимание только на оригинал. Форков этих 953 штуки

https://github.com/LonamiWebs/Telethon

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

Лучший ответ:
C# Шаблон веб приложение NET 6 + Razor pages

Худший ответ:
Нужно писать или на том, который знаешь. Или на том, который хочешь узнать )
c# много кто использует для веб разработки, просто глянь вакансии на hh
Посмотри на метаните примеры с объяснениями, вот с шаблонизатором Razor pages https://metanit.com/sharp/razorpages/
Но в соседнем разделе можно найти примеры с визуальной частью на ангуляре или реакте
Вопрос: Как сделать загрузочную USB из ISO файла под Linux?

Лучший ответ:
Вот так точно работает:

dd if=linuxmint-20.2-xfce-64bit.iso bs=1 count=432 of=isohdpfx.bin

xorriso -as mkisofs -V "Mint" -o final/linuxmint-20.1-xfce-oldpc-le9-07.07.2021-64bit.iso -J -joliet-long -cache-inodes -isohybrid-mbr isohdpfx.bin -b isolinux/isolinux.bin -c isolinux/boot.cat -boot-load-size 4 -boot-info-table -no-emul-boot -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat unpacked

Худший ответ:
А кто мешает пользовать Ventoy?!

Она работает и всё делает и в CLI (консоль/терминал), и в GUI, и через web-морду...
Установка утилиты создания загрузочных USB-носител...
Вопрос: Как отказаться от jquery и jquery библиотек?

Лучший ответ:
Можно, но зачем.

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

Лучший ответ:
Такие задачи однозначно решаются обходом AST. Возьмите общеизвестный парсер и инструмент для обхода его дерева, например связка из @babel/parser и @babel/traverse подойдет.
Так же можно посмотреть в какие ноды что парсится с помощью https://astexplorer.net/ - в нем несколько языков, а для js/ts на выбор есть несколько парсеров.
Вам по сути нужно найти FunctionDeclaration содержащий в body ReturnStatement и извлечь из него Identifier соответствующий имени. А для второй части - FunctionDeclaration с ArgumentsList не нулевой длины.
Ну и так как в условии сказано, что внутрь не заходить, то можно пройтись лишь по верхнему уровню, тогда @babel/traverse и не нужен даже

Худший ответ:
можно даже потоково это посчитать.

заводишь три флага:
1. мы внутри функции
2. внутри строки
3. внутри вложенной функции

читаешь посимвольно пока не наткнешься на function или => объявление переменной, если попал в функцию запоминаешь имя (можно еще номер строки и символа), перебираешь дальше в поисках return или конца конца функции.

если попал внутрь вложенной функции - ищешь ее конец, return и другие вложенные игнорируешь.
если попал внутрь строки - ищешь конец строки, в строке игнорируешь вообще все.

А когда у тебя есть файл, все проще) есть indexOf, slice, replace с регулярками.
Вопрос: Противофазная ЭДС. Не понимаю, почему?

Лучший ответ:
Почему синусоида сдвинута по фазе от напряжения?Давайте проведём аналогию в механике. Возьмите тележку, нагруженную чем-то тяжелым. spoiler Скажем, 30 кг груза (это индуктивность). Она стоит на ровном полу. Вы прикладываете к ней силу (U), а она не хочет двигаться с места. Вы увеличиваете силу, и тележка трогается. Вы прикладываете ту же самую силу, но скорость (I) увеличивается, вы уменьшаете силу, но скорость всё равно увеличивается (странно, да?), вы уменьшаете силу до нуля, и вот теперь скорость остаётся постоянной (точка на графике, когда U=0, I=max), теперь чтобы уменьшить скорость тележки, нужно приложить "отрицательную" силу, вы прикладываете её, но тележка продолжает двигаться в "положительную" сторону, хоть и медленнее...

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