Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Где водятся левши-электронщики, способные создавать новый устройства?

Лучший ответ:
Форум easyelectronics.ru

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

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

Худший ответ:
preg_match_all освоили, а preg_replace нет?
Вопрос: Как вы реализуете поддержку прав в Yii?

Лучший ответ:
почитай про RBAC

Худший ответ:
Всё, решил. RBAC клёвый!)
Вопрос: Как одновременно запустить несколько независимых экземпляров Chrome с разными пользовательскими профилями?

Лучший ответ:
ярлыки с параметром, в котором указана папка профиля
C:\Users\Serge\AppData\Local\Google\Chrome\Application\chrome.exe --user-data-dir=c:\Users\Chrome\Users01\

Худший ответ:
В своём блоге на медиум описывал не только просто разные профили, но и их разные настройки, вроде IP и юзер агентов - Несколько браузеров Google Chrome с разными IP на ...
Вопрос: В каких единицах измеряется нагрузка сервера?

Лучший ответ:
Можно представить ее как количество активных процессов за выбранный интервал времени (1, 5 и 15 минут). 
Если число превышает количество процессоров в системе, то это означает что процессы работают «медленнее», простаивая в очередях.

Худший ответ:
Если брать шире, то сервер, это то — что предоставялет сервис, услугу, а значит его нагрузка должна измеряться — довольный_потребитель_услуги/единица_времени
Вопрос: Как установить psycopg2 в виртуальное окружение на ubuntu?

Лучший ответ:
sudo apt-get update
установите зависимости PostgreSQL (для его работы с Django)
sudo apt-get install libpq-dev python-dev
установите PostgreSQL:
sudo apt-get install postgresql postgresql-contrib
далее для Django:
pip install psycopg2(из папки проекта)
и дополнительно к прочтению статью :-)
==>> blog.djangofan.ru/2015/05/postgresql-ubuntu-1404.html

Худший ответ:
Может вы сможете найти ответ здесь: Как установить Django + Postgres + Nginx + Gunicor...
Вопрос: Таймер на форме django?

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

Худший ответ:
https://docs.djangoproject.com/en/1.8/ref/models/f...class Foo(models.Model):
    user = models.ForeignKey(MyUser)
    action_datetime = models.DateTimeField(auto_now_add=True)


from datetime import datetime, timedelta


def form_view(request):
    if Foo.objects.get(
        user=request.user, 
        action_datetime__gt=datetime.now() - timedelta(days=1)):
           # do what u wantсейчас - день назад = вчера = datetime.now() - timedelta(days=1)
В общих чертах так
Вопрос: Бесшумная клавиатура это миф?

Лучший ответ:
Клавиатуры из силиконовой резины бесшумнее. Но вот комфорт…

Худший ответ:
Та же беда, но у меня ещё всё сложнее: ищу беспроводные и бесшумные клавиатуру и мышь
Вопрос: Полифазный сон

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

Худший ответ:
Бред это всё. Спать нужно ночью. И высыпаешься лучше, и график не страдает. И для организма никаких проблем. 23-7:00 и никаких проблем(плюс-минус 2 часа).

ЗЫ: меня тем не менее интересует, что это за сон такой — 30 минут. У меня минут 40 минимум уходит просто на то чтобы заснуть
Вопрос: Можно ли с таким же успехом как и на Java, писать приложения под android на C++?

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

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

Лучший ответ:
можно переключаться.
вот сравнение трекпада и мыши mac.appstorm.net/how-to/os-x/lion-gestures-trackpa...
оно старое, но не думаю что там сильно что-то изменилось. к тому же и для мыши и для трекпада есть несколько утилит, расширяющих функционал жестов.
"смахивание в режиме полного экрана" - переключение между рабочими столами и полноэкранными приложениями.
"Смахивание между страницами" - это вперед-назад в браузере/перелистывание страниц в ридере/и т.п.

Худший ответ:
двумя пальцами влево-вправо, а на трекпаде 3-4 пальцами
Вопрос: Как защитить скрипт от копирования и изменения?

Лучший ответ:
Здравствуйте
Используйте cython, он превратит ваш python-код в код на C++, который потом можно скомпилировать make и получить бинарный модуль питона.
Например test.py -> test.pyd (test.so на линукс)
Впоследствии с ним можно работать как с открытым скриптом, простым "import test"
С защитой от копирования немного посложнее. Мы используем привязку к железу и к нашему серверу. Железо собираем с помощью win32com, но на каждую машину придется устанавливать pywin32.

Худший ответ:
Здравствуйте
Используйте cython, он превратит ваш python-код в код на C++, который потом можно скомпилировать make и получить бинарный модуль питона.
Например test.py -> test.pyd (test.so на линукс)
Впоследствии с ним можно работать как с открытым скриптом, простым "import test"
С защитой от копирования немного посложнее. Мы используем привязку к железу и к нашему серверу. Железо собираем с помощью win32com, но на каждую машину придется устанавливать pywin32.
Вопрос: Как разослать миллион писем за один час?

Лучший ответ:
Сто тыщщ миллионов лет назад для заказчика писали систему для массовой рассылки. Сейчас уже точно не помню, но, кажется, рассылали в 3000 одновременных коннектов. Про скорость врать не буду — не помню, но меньше миллиона в час. Может быть сейчас (компы гораздо мощнее стали, каналы шире) и возможно, но не уверен.

Почти 100% уверен что exim НЕ подойдет. 

Проблем будет куча, начиная с того, что не факт, что ОС будет живо дрыгаться, когда в почтовом спуле на диске появится миллион файлов. 

Вторая проблема — Какой бы чистый мейллист не был, при таких объемах там будут дохлые емейлы, дохлые уже домены, или домены у которых неймсервера будут лежать, и тут каждая попытка обычного MTA законнектится на почтовый сервер будет затягиваться очень надолго (при этом этот коннекшн MTA ничего не делает, пытается отослать это письмо, не может, но тратит много времени, за которое можно было бы сотню писем отослать). 

Еще проблема — при такой мощной рассылке, канал будет забит (конечно, если почтовик сумеет его загрузить). То есть, будут потери пакетов, потери DNS запросов и ответов, итд. (между делом — редхатовский bind из давних дистрибутивов — вообще падал при такой нагрузке)

В любом случае, мне кажется с обычным MTA (без очень жесткой доработки напильником) — врядли получится, тем более за час. Они все таки рассчитаны для «дорогой но надежной» доставки — то есть письмо может хоть неделю быть в очереди, если сервер получателя лежит. Если база действительно чистая и легальная — таких проблемных писем будет относительно мало, но каждое из них сильно тормозит систему. А вам нужна «дешевая и быстрая» доставка, когда проблемное письмо скорее выбросится (и черт с ним), но не будет сжирать ресурсы на попытки доставить. Ну и кроме того не забывайте про модный сейчас грейлистинг, который почти везде. Так что каждое письмо вполне может минимум 15 минут еще в очереди стоять.

Худший ответ:
По ощущениям это в принципе не сработает на существующих неспециализированных клиентах.
Они стараются изо всех ил обеспечить доставку, но не скорость. Соответственно письмо будет лежать и день, и два если не может сразу доставиться. Если таких будет много, то через неделю при таких объемах мусора станет просто навалом. И даже если Ваш сервис справится, то нет гарантии, что те смарт хосты и прочие внешние майл сервера потянут нагрузку, а на их настройку мы влиять не можем. Например если много будет писем на один ну пусть скажем yandex.ru — как он отреагирует на такой поток? Тут нужен специфичный агент, который будет все это учитывать…
Вопрос: Встречный пинг с разных подсетей не работает одновременно. Встречали ли вы такое?

Лучший ответ:
Стало интересно, никогда не приходило в голову делать встречный пинг. Проверил на разных VPN'ах (PPTP и OpenVPN) и разных системах (Linux, WinServer) во всех возможных вариантах. Пинги ходят во все противоположные стороны без косяков. 
Ни когда не работал с  Kerio Control, т.к. ститаю, что шлюз на винде это моветон, но сдается мне, что дело именно в нем.

Худший ответ:
ИМХО однозначный баг со всеми симптомами.
Вопрос: MacBook или MacBook Pro?

Лучший ответ:
Конечно Pro.

Худший ответ:
Разница между ними в объеме памяти, Firewire 800, SD слоте и подсветке клавиатуры.
Ну и конечно в корпусе. Алюминий, как более теплопроводящий материал, лучше распределяет тепло по всему корпусу. В результате более горячий в целом корпус лучше отводит тепло и меньше крутится вентилятор. Предполагаю, что Pro должен быть горячее, но тише.
Советую посетить магазин, где можно вживую погонять обе модели, и принять решение.
Вопрос: Как добавить быстро много товара на opencart?

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

Худший ответ:
Единственное, опции через Excel уж очень неудобно добавлять/копировать, особенно если они одинаковые, а товаров очень много...
Вопрос: Где найти стильные checkbox, select, radio?

Лучший ответ:
 Где найти стильные checkbox, select, radio?
Стилизовать самому так, как нравится!

Худший ответ:
15+ jQuery Radio Button & Checkbox Style Plugins или 35+ jQuery CheckBox Plugin with Examples. Выбирайте наиболее удобные для вас плагины. А стилизацию уже сами можете сделать какую хотите, не обязательно же дефолтную от плагина использовать.
Вопрос: Можно ли задать css стили элементу массива?

Лучший ответ:
В Вашем примере элементы массива - просто числа и никакого отношения к dom и соответственно к css они не имеют, задать css класс можно только для dom элемента через свойство classList
node.classList.add('class') - добавляет
node.classList.remove('class') - удаляет
node.classList.contains('class') - проверка наличия
Если из массива генерируется html то там вообще просто, дописывайте по условию атрибут class к нужному тегу
Ну а проверить нечетность n можно таким условием: if(n % 2)

Худший ответ:
Пробуйте определять так: for (var i = 0; i < ar.length; i++) {
  if (ar[i] % 2 === 1) { // если нечетное
    // do stuff
  }
}
Вопрос: Как происходит проверка времени нажатия кнопки?

Лучший ответ:
Делается программный таймер, аппаратный таймер и аппаратные внешние прерывания только под кнопку отдавать это мягко говоря нерационально.
В одном аппаратном таймере обновляются все программные таймеры, которые могут быть использованы для чего угодно. 
Значит заводим программный таймер для опроса кнопки, например с тиком каждые 100мс и переменную-счетчик. Далее проверяем в нем если кнопка нажата и если счетчик меньше 30 то инкрементируем его, иначе ставим флаг об удержании и выполняем функцию которая должна выполнятся при удержании ее. Если кнопка не нажата - сбрасываем счетчик и флаг удержания.
Псевдокод:u08 buttonCounter=0;
  u08 buttonHold=0;

  u16 Timers[1]={0};//массив счетчиков программных таймеров

  interupt HardwareTimer1(){//прерывание аппаратного таймера каждые 25мс
        if(Timers[0]++==4){//  100мс/25мс=4 раза
            Timers[0]=0;
            onProgTimer1();
        }
  }
 
  void onProgTimer1(){//этот программный таймер тикает каждые 100ms
      if(button1==PRESSED){
             onButton1Press();//функционал когда кнопку нажали

            if(buttonCounter<30){//ждем пока счетчик досчитает до 30 - 100мс*30 раз=3000мс=3 сек
                buttonCounter++;
            }else{
                if(buttonHold==0){
                    buttonHold=1;//Ставим флаг удержания кнопки
                    onButton1Hold();//выполняем функционал при удержании
                }
            }
      }else{
            buttonCounter=0;//сбрасываем таймер-счетчик
            onButton1Release(buttonHold);//функционал когда кнопку отпустили
            buttonHold=0;//сбрасываем флаг удержания кнопки
      }
  }

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

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

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

Лучший ответ:
Я обошёл это использованием sox.

Худший ответ:
ffmpeg умеет работать с различными источниками звука. Можно попробовать его API
Вопрос: Как переиндексировать страницу с SEO метатэгом robots noindex ?

Лучший ответ:
Бот сам проверяет. Для ускорения можно сформировать карту сайта и скормить Яше и Гоше.

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

Лучший ответ:
Вот, здесь доступно описан алгоритм (англ.) http://laplacian.wordpress.com/2009/01/10/how-shazam-works/

Худший ответ:
Привет, точно я конечно сказать не могу, но скорее всего и используется трансформация Фурье (FFT), и соответствующий набор фильтров. Фильтры срезают шумы выше и ниже каких-то уровней (ухо слышит где-то от 6 до 20000 герц, но я думаю срез они делают намного уже). Потом этот срез раскладывается через FFT. Можно себе это представить как разложение песни на частотные компоненты. Много баса — коэффициенты нижних частот будут выше. Много высоких звуков (hi-hat) — верхние компоненты будут выше. Получается отпечаток песни. Когда ты загружаешь туда свою запись с айфона сервер пытается подыскать самый похожий отпечаток.
Там наверняка тренируются алгоритмы AI и дата-майнинга чтобы искать наиболее эффективнее. Простейший пример это искусственная нейронная сеть (всё есть в вики).
Вопрос: Порекомендуйте обучающие сайты по wordpress?

Лучший ответ:
Привет. Ну тут целый набор:[YouTube]В основном про custom post types[Tuts+]Можно читать все подряд[WP-Panda]Отличные переводы с Tuts+[McFarlin]Блог тех.редактора Tuts+
Что касается тем:ОсновыИерархия шаблоновПервый урок по созданию темНа этом же сайте еще 7 серий-продолжений.
Надеюсь, помог.

Худший ответ:
Есть классный и очень понятный ресурс https://www.youtube.com/watch?v=WFEgmNfvpnw
Вопрос: Пару вопров к ZCE?

Лучший ответ:
1. Когда мы сдавали — требовали ДВА документа, показывали права и паспорт РФ. При чем на офф.сайте не было про это ни слова, узнали случайно — позвонив заранее в сертификационный центр.
2. Взять бумажку с данными о прохождении экзамена (нам не пригодилась, но может пригодится если что-то где-то утеряют), уйти.
3. Диплом бумажный так и не прислали:( Все просьбы прислать просто проигнорировали. Обидно жутко:)
4. Нужно 2 документа, ограничение только в этом.

Худший ответ:
Всем спасибо за ответы! Будем думать где второй документ брать…
Вопрос: Затерянный пост — удалили?

Лучший ответ:
Оно? :)

Худший ответ:
Покопайтесь тут: wayback.archive.org/web/*/http://habrahabr.ru
Вопрос: ASP.NET и небольшие проекты. Имеет ли смысл?

Лучший ответ:
Начинал вообще учить программирование на asp.net. Делал небольшую серию веб сервисов, в последствии просто совместил их в одно целое. Скажу сразу, что с# обязателен. Конечно можно обойтись и SQL'ем, если вы его очень хорошо знаете :) У меня в итоге вышло asp.net, c#, MSSQL Stored procedures. Все с нуля и сразу было очень запутанно, и так как я не знаю PHP, то мне вообще не вариант сравнивать их, но когда я более менее привык ко всему этому, то проблем особых уже нету. 
 И вся эта каша кажется даже очень удобной, а что самое главное - быстрой. Ну и как уже и говорили, реализовать можно все и там и там. Так что решать только вам )
 И да, хостинги и правда по цене почти не различаются.

Худший ответ:
Сильно ли отличаются цены на хостинг, по сравнение с php хостингом. Тоже самое о администрировании сайта?ASP тянет за собой стек технологий Microsoft, поэтому да, отличаются.
Что такое "администрирование сайта" в данном контексте не очень понятно.Возможно ли делать небольшие проекты на ASP(и удобно ли это) ? Если Вы знаете ASP - удобно. Ну и если ухитритесь найти заказчика который на это согласен.
Как мне кажется, ASP живо в сегменте интранета и в какой то степени около enterprise разработки, в вебе на нем проектов исчезающе мало. Это субъективная точка зрения основанная на личном опыте и знакомствах, возможно я не прав.
Вопрос: Курс молодого бойца для гуманитария, начинающего онлайн энтерпренёра

Лучший ответ:
Первое, что нужно понять: если у тебя есть идея, но ты не знаешь, как ее реализовать — грош цена твоей идее. 

Все, о чем Вы пишите, уже ни раз освещалось на хабре — достаточно воспользоваться поиском. Серьезно, ну очень много статей на эту тему тут. Задал вопрос — вбил в поиск — прочитал статью.
Вы же понимаете, что не бывает книг «Сделай сам свой стартап за 21 день и стань миллионером для чайников»? Вернее, такие книги есть, но прочитав их Вы ни на шаг не приблизитесь к исполнению своей идеи.

Поднять свой магазин на CMS — не большая проблема. Есть шаблоны и для joomla, и для drupal, и для кучи других CMS. Если не нужен магазин, всегда можно подделать контент под то, что требуется. 
Хороший дизайн можно заказать у фрилансеров, предварительно его обговорив. 

В общем, надо либо все методично изучать самой, либо набирать команду, либо просить фрилансеров. 
А то получается, как в анектоте 

Худший ответ:
Пусть возьмёт в долю разработчиков-друзей. Пусть таких заведёт. И всё будет в порядке :-)
Вопрос: Twitter приложение под Android

Лучший ответ:
официальный

Худший ответ:
Бывают же совпадения. Как автор — стремлюсь заверить, что ответственность целиком и полностью на его величестве — случае ;)
Вопрос: Wordpress и высокая нагрузка. Как оптимизировать?

Лучший ответ:
Начать можно с кеширования )

Худший ответ:
Интересно, какой ответ вы хотите здесь получить? 
1. Для конкретного ответа, требуется диагностика.
2. Общие рекомендации по оптимизации легко найти на просторах интернет.
Вопрос: Что происходит при выполнении указанного php кода?

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

Худший ответ:
Я даже боюсь спросить, где вы здесь увидели php код.
Это bash скрипт.
Вопрос: Как индексируется в поисковиках one page app сайты?

Лучший ответ:
Просто для этого дела нужен server-side rendering.
Большинство приложений SPA делаются сразу изоморфными, так что копайте в эту сторону.

Худший ответ:
Просто для этого дела нужен server-side rendering.
Большинство приложений SPA делаются сразу изоморфными, так что копайте в эту сторону.
Вопрос: парсинг сайта на ruby

Лучший ответ:
Это же просто json, парсим его, и достаем ссылки. Предположим, что в raw_json, лежат ваши данные, а url_arr масиив для ссылок.

require 'json'

json_data = JSON.parse raw_json
url_arr   = []

json_data.each { |t| url_arr << t["file"]["mp3-128"] }


Худший ответ:
data.scan(/"mp3-128":"(.*?)"}/g)


потом удалите лишние «mp3-128»:" в начале и "} в конце
Вопрос: Почему умножение работает быстрее деления?

Лучший ответ:
насчет "лучше умножать на 0,5" хз, потому что плавающая точка, но, наверно да
а так все просто:
современный комп, и комп 20 лет назад, и комп 30 лет назад - это обычный транзистор
(когда изобретут фотонный проц   - будет не обычный, хотя..)
а обычный транзистор имеет всего два состояния: 0 (нет напряжения) и 1 (идет ток)
и умеет транзистор этими двумя состояниями всего два действия:
первое: сложение (0+1 = 1, 0+0=0, 1+1 = 01 и т.п.)
второе: смена знака (честно - уже не помню как там куда идет ток в этом случае)
все. больше ничего комп не умеет.
потому арифметика реализуется примерно так:
сложение: первое число СЛОЖ второе число 
вычитание: первое число СМЕНЗНАК второе число СЛОЖ первое число
умножение: много раз СЛОЖ  и занесение в стек, что тоже СЛОЖ
деление: многораз СЛОЖ и зансение в стек + чуть меньше раз СМЕНЗНАК и снова в стек
как видишь, при делении больше всего операций, по сути деление  - это куча сложений с разным знаком, и величина кучи больше кучи уножений
отсюда же растут ноги у точности плавающей точки - СЛОЖ и СМЕНЗНАК тоже нужно сделать кучу раз в зависимости от точности

Худший ответ:
Не для всех компиляторов, не во всех обстоятельствах, но ДА операция умножения дешевле деления. Просто попробуйте умножать и делить на бумаге в столбик и сразу убедитесь почему.
Вопрос: Есть ли принципиальная разница между Win8 OEM (для сборщиков систем) и обновлением Win7-&gt;Win8?

Лучший ответ:
Anonym не совсем прав, в данный момент на коробке с OEM написано что если она ставиться на собственноручно собранный компьютер для личного пользования, то нужно руководствоваться www.microsoft.com/windows/personaluselicense, а она разрешает и переустановку на другой комп и даже перепродажу (т.е. это не OEM версия) :) Насчет обновления к сожалению ничего не скажу.

ЗЫ: Фотки можно например на никсе посмотреть www.nix.ru/include/view-photo.html?good_id=145393&pid=3159

Худший ответ:
Вы не сможете купить OEM версию. Только Box.
Вопрос: Анимация при появлении нового элемента, как?

Лучший ответ:
Я бы реализовал с помощью CSS, а не JS. 
Рекомендую использовать готовый набор анимаций: Animate.css. Просто подключите скачанный css-файл и добавьте к элементу который должен появиться класс "animated" и вид анимации, например:<span class="animated fadeIn">Test 6</span>

Худший ответ:
Например так: jsfiddle.net/IonDen/fot7h3ka
Только анимацию лучше делать на CSS сегодня.
Вопрос: Перебор массива с обьектами, с поиском исключений?

Лучший ответ:
Код который использует неочевидную особенность работы цикла ;-)for (var idx = 0; idx < arr.length; idx++) {
  if (arr[idx]._id === obj._id) break;
}
// Либо сработал break и idx это индекс элемента с совпадающим _id,
// либо цикл добежал до конца и idx = arr.length и элемент добавится
// в конец массива (фактически то же что и push)
arr[idx] = obj;

Худший ответ:
var idx = arr.indexOf((item) => item.id === obj._id);
if (-1 !== idx) {
    arr[idx ] = obj;
} else if (!arr.length) {
    arr.push(obj);
}
у вас 3-ий кейс как бы покрывает два предыдущих.