Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Хороша ли архитектура моего кода? Информация цепляется по API?

Лучший ответ:
Первое, вы при каждом получении свойства будете лезть в апи, нужно делать подобие кэша
private function getDetail()
 {
    if (!$this->detailCache) { 
        // Здесь запрос к API который возвращает JSON с информацией о товаре.
       $this->detailCache = $data;
    }
 
    return $this->detailCache;
 }
Второе, все свойства должны быть приватными или защищенными
Третье, метод который лезет в апи не должен быть публичным

Худший ответ:
Я бы сделал как-то так. Но не претендую на истину в последней инстанции.
spoilerclass API
{
    public function getProduct(int $productId): Product
    {
        $product = $this->request(...); // Получение данных из API
        return Product::from($product)
    {
}

class Product
{
    private int $id;
    private string $title;
    // прочие свойства

    public function getId(): int
    {
        return $this->id;
    }
    
    public function getTitle(): int
    {
        return $this->title;
    }

    // прочие геттеры

    // сеттеры, если нужны
 
    public static function from(object $source): self
    {
        $product = new static();
        $product->id = $source->id;
        $product->title = $source->title;
        // заполнение свойств
        return $product;
    }
}

...
$api = new API($login, $password);
$product = $api->getProduct(325);
Хотя, для современных версий PHP можно описать преобразование из json с помощью атрибутов и сделать трейт с функцией from, которая будет парсить полученный из API объект согласно этим атрибутам. Плюс аналогичный трейт, реализующий JsonSerializable::jsonSerialize по атрибутам.
Вопрос: Каким способом лучше создать связь «сервер-клиент» в программе на C#?

Лучший ответ:
Возьми asp net core и не мучайся ни с WCF, ни с сырыми сокетами.
Мгновенные уведомления - через SignalR

Худший ответ:
сделайте что то на основе этого
https://stackoverflow.com/questions/40616911/c-sha...
суть в том что внутри одного сегмента вы автоматически сможете все получать.

Протокол пусть будет такой
client register 192.168.0.1:2020 (broadcast)
server notify notify message по адресу клиента 192.168.0.1:2020

Чем не устраивает оповещение через оутлук допустим?
Вопрос: Подойдет ли ноутбук для python?

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

А в целом - писать код на нем сможете без проблем.

Худший ответ:
Брал ребенку Ideapad, третий год пользуется и никаких проблем, так что с надежностью там все в порядке, у меня Thinkpad от леново и тоже работает уже лет 5 без проблем. Чисто субъективно Acer и Asus на порядок хуже сделаны. А вообще у ноуте просто должна быть хорошая гарантия и сервис центр в вашем городе.
По поводу экрана, вы же не слепой, зайдите в магазин, посмотрите, если TN матрица вас устраивает, берите, выже не играть ноут берете, и не телек покупаете, а берете бюджетный ноут, который поможет освоить вам будущую професию. В реальности, я ежедневно пользуюсь ноутом с IPS экраном и с TN и я не страдаю, когда приходится сидеть за TN матрицей.
Оперативку точно прийдется докупить, но произойдет это не сразу и у вас будет время чтобы накопить на нее, но в идеале текущая оперативка должна быть установлена одной планками, а не двумя, тогда проще к 8 добавить еще 8, а не продавать старую оперативку.
Вопрос: Нужно понять что значит код и что выведется на экран?

Лучший ответ:
Запустите и посмотрите: https://www.onlinegdb.com/online_c++_compiler. Попробуйте поменять по одному символу и смотреть, что  происходит с выводом. Так вы поймете, что именно выводится, а потом чуть чуть знания C и вы поймете, почему так происходит.

Худший ответ:
Тебе нужно понять, что такое массивы и строковые константы в С++, также указатели и адресную арифметику. После этого ты точно будешь понимать, что происходит.
Вопрос: Почему в JS 3232286728 & (-256) = -1062680576?

Лучший ответ:
Для поразрядных операций JS приводит числа к Int32 (знаковому), и, например, 3232286720 в этот диапазон не влазит, оно считается отрицательным из-за единичного старшего бита.

Чтобы посмотреть, как оно работает, открой консоль браузера, и создай 2 массива:
var a = new Uint32Array(1);
var b = new Int32Array(a.buffer);

a[0] = 3232286728;

console.log(b[0]);

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

console.log(Number(BigInt(3232286728) & BigInt(-256))); // 3232286720

если есть другое решение, пишите
Вопрос: Способы блокировки программ на фрилансе?

Лучший ответ:
Поэтапная предоплата

Худший ответ:
в целом такие простые защиты даже с обфускацией легко обходятся, если цена вопроса там пара сотен баксов на взлом.
а так работать через апи сервера своего самое надежное
Вопрос: ОШИБКА: «cannot overload functions distinguished by return type alone» Что делать?

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

Худший ответ:
В вашем случае вы пытаетесь создать две функции, отличающиеся только возвращаемым значением и компилятор не знает какую нужно выбрать.
Пример:
int foo() {return 1;}
float foo() {return 1.0;}
Без кода подробнее не ответить.
Вопрос: Как разбить массив на части заданного размера?

Лучший ответ:
const chunked = (arr, chunkSize) =>
  arr.reduce((acc, n, i) => (
    (i % chunkSize) || acc.push([]),
    acc[acc.length - 1].push(n),
    acc
  ), []);
или

const chunked = (arr, chunkSize) =>
  arr.reduce((acc, n, i) => (
    (acc[i / chunkSize | 0] ??= []).push(n),
    acc
  ), []);
или

const chunked = (arr, chunkSize) =>
  Array.from(
    { length: Math.ceil(arr.length / chunkSize) },
    (n, i) => arr.slice(i * chunkSize, (i + 1) * chunkSize)
  );

Худший ответ:
Или в более понятном виде:
[
  {
    path: './name-1.jpg',
    filename: 'name-1'
  },
  {
    path: './name-2.jpg',
    filename: 'name-2'
  },
  {
    path: './name-3.jpg',
    filename: 'name-3'
  },
  {
    path: './name-4.jpg',
    filename: 'name-4'
  }
].reduce((acc, item, idx, arr) => { if (idx % 2) { acc.push([ arr[idx-1], item ]) } return acc }, [])

/*
[
  [
    { path: './name-1.jpg', filename: 'name-1' },
    { path: './name-2.jpg', filename: 'name-2' }
  ],
  [
    { path: './name-3.jpg', filename: 'name-3' },
    { path: './name-4.jpg', filename: 'name-4' }
  ]
]
*/
Вопрос: Как сконнектить два приложения без общего сервера?

Лучший ответ:
Если речь идет о взаимодействии в рамках одной сети WiFi - то нет проблем. Используйте широковещательные пакеты для уведомления других устройств, что в сети есть устройство, готовое работать по вашему протоколу.
Если это более общая задача, не привязанная к одной сети и WiFi, то даже если устройства будут знать адреса друг друга (не важно каким способом), могут возникнуть проблемы с доступом к устройству из-за оператора связи, т.к. в сотовых сетях обычно используется NAT оператора, который препятствует прямому доступу из интернета к устройству (NAT как правило включен в любом WiFi роутере и т.п.). В этом случае придется использовать какой-либо сервер в интернете со статическим адресом. 
Существуют варианты обхода NAT, но они так же требуют сервера для инициализации соединения, а затем уже устройства могут работать напрямую. Подобные техники используются, например, в VoIP. Гуглите по протоколу STUN.

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

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

Худший ответ:
тебе повезет если будет 40%
Все зависит от технологии заряда и контроллеров в павербанках.

В щадящем режиме usb2 (медленая) наверное можно получить 60%, 'обычная скорость' зарядки может сожрать больше энергии, а 'быстрая' точно больше половины, я так экспериментировал с двумя смартфонами xiaomi a2, подключив их друг к другу с помощью кабеля usb-type-c (писало что идет быстрая зарядка), примерно 30% энергии одного перетекло в от силы 12% другого, но так считать неверно, аккумуляторы могли быть разной 'емкости', на глаз смартфоны от заряда работают одинаково долго

upd: https://habr.com/ru/company/madrobots/blog/377145/
 В среднем можно считать, что КПД всей электроники при зарядке смартфона или планшета от повербанка составляет около 65%.
Вопрос: Как оптимизировать контроллер на Yii2?

Лучший ответ:
Про материал: https://elisdn.ru/blog/search?q=yii2
или используйте паттерн DTO - и в него запихните все запросы которые вам необходимы в экшене и получится примерно так:
$dto->similarQuestions()
или можно пойти еще дальше и создать Active Query как сделано здесь https://github.com/ElisDN/yii2-demo-catalog/blob/m...
и тогда можно будет сделать так:
$dto->questions()->similar();
$dto->questions()->last();
$dto->questions()->count(); //или тут использовать связь и вызывать count как свойство.
Ну а в будущем если понадобится просто оптимизируете запросы questions или в файле DTO или его составные части уже непосредственно в файле QuestionsSubQuery(или назвать просто QuestionsQuery)

Худший ответ:
Кусок кода: Question::find(), генерирует ActiveQuery, отнаследуйтесь от стандартного, и реализуйте часто используемые конструкции в нем.

Документация: https://www.yiiframework.com/doc/guide/2.0/ru/db-a...
Вопрос: Почему bool лучше не юзать с switch?

Лучший ответ:
Но почему так?
Читать легче, тк не скрывает истинных намерений разработчика.
В случае bool - разработчик почти всегда хочет "Если - то - иначе"
switch - это сравнение с образцом (образцов много)

Switch быстрее же
Бред полнейший, который я предлагаю тебе доказать)
(вообще любое утверждение в программировании стоит как-то подтверждать, особенно в плане производительности - бенчмарками или листингами)

Например если просто написать код, который делает if и switch - можно увидеть, что разницы нет, и компилятор генерирует идентичный код, в случае использования bool, по крайней мере на актуальной версии, в профиле Release.

Худший ответ:
потому что bool – это только 2 варианта. и if или if/else  тут как раз уместней как никогда.
switch – для множества вариантов. и альтернатива лесенки из if/else/else if.

да и "Switch быстрее же" – попахивает бредом.
Switch – читабельнее. особенно при большом кол–ве вариантов.
Вопрос: Почему Docker контейнер не видит PostgreSQL?

Лучший ответ:
С чем может быть связана такая ошибка?
С тем, что твой скрипт запускается быстрее базы. depends докера работает крайне примитивно и правильно: если контейнер запущен, значит зависимость резолвится. Но в запущеном контейнере далеко не факт, что база данных запустилась. Между этими двумя событиями может пройти много времени — несколько секунд.

Для начала сделай в скрипте sleep(10). Если это поможет, то вот решение

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

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

Худший ответ:
Можно попробовать сделать 2 фото. Одну во время дождя. А другую в ясную погоду. Со штатива и не двигая между снимками. Потом попробовать сравнить 2 фотки и посмотреть какие артефакты дает дождь.

Да и в данном вопросе есть два "хитрых" смысла. Есть художественный смысл. Типа улучшить фото. Этим занимаются художники. И есть смысл информационный. Например понять какой номер машины был замечен в плохую погоду и попытаться его распознать. Вот этот второй смысл - он про другое и к убиранию дождя не имеет отношения. Я-бы сказал что для систем машинного зрения лучше вообще дождь не фильтовать а сразу давать сырое на вход. Это более честно.
Вопрос: Как получить публичный ключ из сохранённого секретного?

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

Худший ответ:
Не знаю как в php, а в консоли всё просто
https://stackoverflow.com/a/5246045/1016033
Вопрос: Как сделать синхронизацию между пк и смартфоном через гит?

Лучший ответ:
Бинарные файлы не надо хранить в git в виду того, что это крайне не эффективно.
Для синхронизации бинарных файлов git не подходит.

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

Лучший ответ:
Здравствуйте.

Еще никто не нашел работу, получив какие-либо ответы на какие-либо вопросы. Отправляйте резюме, откликайтесь на вакансии, звоните, пишите, презентуйте себя, параллельно с этим прокачивая свои знания/навыки. Это всё. 

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

Пожалуйста.

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

Лучший ответ:
эта команда ничего не дает !
Это ты погорячился с выводом.

Потому что если явно не указать таблицу вывод будет из таблицы filter (в которой, как видишь, у тебя пусто), если хочешь посмотреть, что в таблице nat или какой-то другой надо её указать:
iptables -S -t nat | grep 30897

Худший ответ:
iptables -nL или iptables-save
Вопрос: Что лучше для веб сервера выделенный физический сервер или виртуализация на нем же?

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

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

В общем вы их спросите что они конкретно будут тюнить и почему. Нормальный специалист будет иметь что вам сказать. Причем объяснит четко и понятно.

Худший ответ:
Удобнее и безопаснее, если хорошо сделать, будет. Быстрее не будет - есть оверхед.
Вопрос: Как из интернет-магазина сделать мобильное приложение?

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

Если вкратце, pwa – это технология, которая позволяет установить ваш сайт на смартфон как приложение.  То есть не нужно разрабатывать отдельно приложение под iOS и Android.

Худший ответ:
Все просто, делаешь прилку через web view вот подробный гайд https://www.youtube.com/watch?v=-skvJrF23Kc&t=6s
Вопрос: Может ли физ лицо создавать интернет-проекты?

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

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

Пришлось срочно ознакомиться с вопросом "кто я" и "что я делаю" и заплатить за онлайн-консультацию у юристов.

Советую автору зайти на правовед.ру и почитать то, что там накоплено в базе по ответам юристов. Ключевые слова: "информационный посредник", "политика конфиденциальности для сайта", "оферта для сайта" и тд.

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

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

Почитайте текст от одного юриста с правоведа (Дмитрий Васильев) что он пишет в открытом доступе как реклама своих навыков: https://pravoved.ru/question/604239/ и отчасти ответы на банальные вопросы владельцев сайтов.

Худший ответ:
Законы разные, очень советую посмотреть на ютубе интересное видео "Раздел 230 - свободный интернет | Михаил Пожарский". Как раз про вашу ситуацию, объясняющий, почему площадки вроде вашей или Facebook возникли в США, а не в ЕС, например (сюрприз - в Европе законы тоже не очень хороши).

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

Лучший ответ:
В офис не ставятся роутеры от провайдера. 

Купите нормальные роутеры, настройте их как надо

Либо купите 1 нормальный роутер, например микротик, и начстройте обоих провайдеров на нём и прочее что надо

В общем и целом - 1 раз нормального сисадмина для настройки наймите)

Худший ответ:
Провайдер даёт услуги на своём порте. Доступ к Интернету. Телефония. 

А вот дальше потреблять эти услуги и регулировать их потребление ты должен самостоятельно. Так что по уму - оба роутера подключаются к своему роутеру (@Drno правильно предложил), который обеспечивает трансляцию этих сервисов в точки потребления.
Вопрос: Как Charles запустить?

Лучший ответ:
У меня была та же проблема. решение нашёл тут : https://www.papercut.com/kb/Main/AssistiveTechnolo...
4 простых шага и чарльз ожил

Худший ответ:
Попробуй запускать его из .bat файла, который лежит в C:\program files\charles\extra или через C:\program files\charles\lib\charles.jar
Вопрос: Как безопасно и дёшево соединить монолитный провод с многожильным?

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

Худший ответ:
На сегодня я стал настоящим мужиком и стал зарабатывать деньги. Снёс нафиг этот удлинитель, заменил в квартире всю проводку, поставил в коридоре элщиток, напихал туда 5 автоматических выключателя, один из которых играет роль вводного, и 2 из них — диф (1 в кухню, 1 в ванную комнату). Проводку сделал жирной, медной, монолитной. Накачался, женился…
Вопрос: Как изменять значение в бд по времени?

Лучший ответ:
А что мешает вместо 0/1 заносить срок окончания подписки и проверять его?

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

значение сменилось на 1, а потом через месяц само сменилось на 0.
Для этого у MySQL есть свой встроенный планировщик. Запускаем, создаём процедуру, которая выполняется, например, ежеминутно, и обнуляет поле доступа для всех записей, у которых разница между текущим штампом времени и штампом времени открытия доступа превышает срок доступа (хардкод, либо взятый из служебной таблицы или даже из обрабатываемой записи).

MySQL 8.0 Reference Manual / Stored Objects / Usin...
Вопрос: Установка модуля Wifi linux. В чем проблема?

Лучший ответ:
Какие еще драйвер-паки? Забудьте эти виндовские помойки.
lspci
lsusb
Эти две команды вам выдадут всю инфу, которую система имеет о подключенных к ней устройствах.
Среди выдачи должен быть чип вашего вайфая.
Гуглите его название со словом Ubuntu - получаете инструкцию по установке со ссылкой, где его взять.

Худший ответ:
(Порта на проводной интернет нет)
Найдите/купите переходник ethernet to usb. Вещь полезная в текущих реалиях. А потом и wifi настроите.
Вопрос: Как используя JQuery отлавливать событие изменения input поля по его name?

Лучший ответ:
В селекторе можно использовать любые атрибуты элементов.
// или перечисляем через запятую
$('[name=test1], [name=test2], [name=test3]').on('input', function(){
	console.log($(this).val());
});
// или таким образом
$('[name^=test]').on('input', function(){
	console.log($(this).val());
});
Есть вариант отталкиваться от родительского элемента. В вашем случае < div > не унифицирован, но если предположить, что он единственный на странице, то подошёл бы и такой вариант:
$('div input:not([name=stop1])').on('input', function(){
	console.log($(this).val());
});

Худший ответ:
Задать этот вопрос гуглу и пройти по первой ссылке - https://api.jquery.com/change/
id задавать не нужно, нужно задать class
Вопрос: Как реализовать очистку директории раз в сутки, не повреждая нужные файлы?

Лучший ответ:
Из крона периодически запускать удаление файлов с возрастом больше определённого (например, старше суток).
find /путь/к/файлам/* -type f -mtime +1 -delete

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

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

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

Худший ответ:
вредно в долговечном периоде. заметно будет через года 3 или более. моему телефону 2 года, заряжаю 90%-95% быстрой зарядкой. и редко когда в дороге от повербанка без быстрой зарядки, и все хорошо,
Вопрос: CSRF token missing or incorrect instagram, что это и как избавится?

Лучший ответ:
Вы видимо с VPN заходите в Instagram. Как вариант, если без VPN вы зайти в него не сможете, то придется немного потрудиться.
Откройте Instagram в браузере, далее откройте DevTools (кнопка F12), и перейдите во вкладку Network (№ 1). Теперь обновите страницу.
В левой вкладке найдите запрос вида instagram.com (№2), нажмите на него и перейдите во вкладку Response (№3). В тексте ответа вам надо найти строчку csrf_token - для этого можете нажать CTRL+F и написать csrf_token (№4). Теперь скопируйте его значение (№5)


Далее переходите в том же DevTools во вкладку Application (№1) и в левой панели нажимаете на instagram.com в блоке Storage, пункт Cookies  (№2). В правой панели откроются Куки. Теперь добавьте новый, нажав на пустую нижнюю строчку (№ 3) - достаточно ввести Name(csrftoken) и Value(скопированное значение) и указать галочку Secure. Должно получиться как на скрине №5. 


После этого инстаграм запросит логин-пароль (иногда дважды), введете и сможете пользоваться веб-версией инсты.

Худший ответ:
Здравствуйте! скажите пожалуйста, все настроил, подключаю инстаграм к фейсбуку. 

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

Лучший ответ:
Как комментарий ко всем ответам:
Надо различать объект функции и вызов результата вычисления функции. 
Объект - это f
Вызов результата - это f()
На этом и основан фокус. 
f() превращается в a
a() превращается в b
b() превращается в print("nested function")
Оно печатает строку.

Худший ответ:

Хз как это называется но тут каждая скобка отвечает за каждую внутренную функцию в том порядке в каком они объявлены.