Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Можно ли получить email пользователя при OAuth авторизации через Одноклассники?

Лучший ответ:
Что-то разработчики не очень-то чешутся с ответом...
Немного дополню вопрос.
В док-ции на странице ОАув-аторизации написано, что при запросе кода можно указать список запрашиваемых прав apiok.ru/wiki/pages/viewpage.action?pageId=81822109
На странице apiok.ru/wiki/pages/viewpage.action?pageId=81822097, вроде как, список всех доступных прав
А теперь вопрос - какого лешего в описании метода users.getCurrentUser apiok.ru/wiki/display/api/users.getCurrentUser+ru идет отсылка на список возможных полей apiok.ru/wiki/display/api/fields+ru, где для получения емаил указано "GET_EMAIL permission is required"? Это что, незадокументированное право доступа? Или емаил в принципе получить нельзя, тогда почему это поле присутствует в списке?
ЗЫ И вообще, без передачи емаил ваш АПИ бесполезен. Как идентифицировать юзера в своей системе? Просить при регистрации не только емаил указать, но еще и айди в одноклассниках?! Это бред.

Худший ответ:
Валерий Ожиганов Валерий, ок, но как можно с вами связаться чтобы вы подтвердили (или не подтвердили) это для нашего приложения? Насколько я понял, единственная возможность - через этот форум, но ответа я ждал пол-года :) Можно ли связаться с вами по e-mail? Спасибо!
Вопрос: Какое взять реле для коммутации 12V DC по сигналу 220V AC?

Лучший ответ:
реле это просто катушка с сердечником, которая при прохождении тока замыкает (размыкает)  контакты.  Бери  любое  реле на 220 вольт хоть такое www.amperkin.ru/modulnye-knopki-rele-kontrolya/pro...
и соединяй им контакт хоть на 12 хоть на 120 вольт.

Худший ответ:
Как-то вы все усложняете, вам схему от детектора движений 220V включать нужно, ну так и запитайте 12v блок питания от этого детектора, не нужно тут реле.
Вопрос: Почему Gmail с определенного момента начинает помечать письма как спам?

Лучший ответ:
Решить можно так:

настройки -> фильтры -> создатьновый фильтр
В поле «от кого» — вставляем ящик, откуда иддет рассылка, -> дальше -> Никогда не отправлять в спам -> создать фильтр

Худший ответ:
У меня все рассылки отправляются в папку «Массовая рассылка».
Это после включения экспериментальной функции «Умные ярлыки» в Лаборатории Gmail. 
Правда удалять непрочитанными не пробовал.
Вопрос: Как расширить массив?

Лучший ответ:
Можно вместо массива использовать ArrauList.ArrayList<String> strings = new ArrayList<String>();
        strings.add("a1");
        strings.add("a2");
        strings.add("a3");
        strings.add("a4");
        String s = strings.get(1);

Худший ответ:
А как на счет ассоциативного, многоуровневого массива, хранить в массиве старый и новый массивы по id, а потом циклом разбирать как вам нужно.
Вопрос: Стоимость написания iOS + Android приложений?

Лучший ответ:
1000+ р. (это только под андроид). Правда, не верится, что бывают приложения, в которых нужно только авторизовываться, добавлять точки на карту и отправлять точки просто на сервис. А более детальное описание задачи, естественно, увеличивает стоимость, вплоть до увеличения её в [десятки] раз.

Худший ответ:
Цена сильно варируется от задачи, особенно если в Вашем приложении необходимо использовать API других сервисов. Вторым преумножающим стоимость факторам можете считать секьюрность (TLS\SSL), чем скюрнее тем дороже. Менее влияющим фактором является алгоритмическая/математичкая сложность алгоритма, далее плавно переходим к дизайну и юзабилити, чем выше тербования к этим параметрам тем болше стоимость, не пропорционально и все же, одно дело в конструкторе форм накидать, дрогое оригинальный дизайн с разработка элементов UI.
Вопрос: В какую сторону копать, чтобы написать лайтовенький чат для комнат по 3 человека?

Лучший ответ:
WebSockets, статью недавно писал по этому поводу: habrahabr.ru/post/250085
Но для этого нужен будет виртуальный сервер, чтобы поддерживались WebSockets.

Худший ответ:
Используйте WebSockets для realtime доставки сообщений. А для минимизации нагрузки на свой сервер можно использовать SaaS комет сервис это позволит всю нагрузку от поддержания постоянно открытых соединений переложить со своего хостинга на чужие сервера.
Вопрос: Деплой нескольких Flask/Django-приложений на одном сервере?

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

Худший ответ:
Если позволяется использовать нативные вещи для python-а, значит они лучше. Значит лучше выбрать uwsgi.
Если web-сервер предполагается использовать только в качестве прокси к бекенду приложений, то лучше nginx.
Вопрос: Может ли go lang использоватся в геймдеве?

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

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

Лучший ответ:
Расскажите клиенту про markdown, пусть редактирует файлы, если они удобно расположены и нет риска сломать сайт.

Худший ответ:
Ну если без CMS, сделай сам функционал как у CMS.
Вопрос: С чего начать и как писать Unit-тесты для проектов на PHP?

Лучший ответ:
1. установить PHPUnit
2. научится запускать тесты на PHPUnit. Самые банальные по мануалу. Просто запускать и понять, как они срабатывают.
3. опробовать подход на небольших учебных задачах (всякие code-kata подойдут, задачи типа FizzBuzz, конвертёр температур из шкалы Цельсия в шкалу Фаренгейта, любые простые, алгоритмизируемые задачи с проверяемым результатом).
4. После понимания сути тестов, заводим tests/ в реальном проекте, и начинаем думать, как это всё завести. В первый раз достаточно сложно сообразить как всё это добро соединить. Постепенно прикручиваем тесты, осваиваем технику работы со стабами (Stub) и моками (Mock).
В процессе освоения шага №3, опробовать TDD: до написания кода, решающего задачу, пишем тесты для будущего кода. Это потребует в процессе написания теста продумать, как будут называться классы, методы, функции, какие граничные условия для прохождения тестов и проч.
Очень вероятно, что с первого раза не всё будет понятно и просто. Пробуйте.
Как пища для размышлений и осваивания методологии TDD, подборка задач:
codekata.com
Во многих там даже условия тестов прописаны, остаётся подкорректировать под себя и принятся за реализацию.

Худший ответ:
Попробуйте это:Перевод phptherightwayОригинал phptherightway
Вопрос: Как правильно спроектировать роутинг страниц Single Page Application?

Лучший ответ:
Попробуйте сначала прикинуть прототип на каком-то готовом фреймворке.

Худший ответ:
Наткнулся сегодня на книгу Single Page Web Applications (Michael S. Mikowski and Josh C. Powell) (сам не читал).
Вопрос: Передача ключей в P2P сетях

Лучший ответ:
Для безопасного обмена ключами (устойчивой к «человеку посередине») клиенты должны подписывать все свои сообщения. Чтобы подпись можно было проверить, другая сторона должны знать открытый ключ. Чтобы быть уверенным в достоверности открытого ключа, его в свою очередь должен подписать кто-то, кому мы доверяем. Обычно для этого используется сервер открытых ключей, но в вашем случае нужно думать.

В моем блоге (см профиль) есть несколько статей, посвященных p2p и криптографии с открытым ключом. Почитайте, может поможет набрести на правильные мысли. Только помните, что ошибки на уровне протокола очень дорого исправлять. Так что любую свою «гениальную» мысль имеет смысл обсудить хотя бы с парой понимающих людей.

Худший ответ:
Мне кажется смотреть стоит в сторону SSL, генерация открытого ключа по MAC.
Вопрос: Переустановкой MacOs?

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

Худший ответ:
Большое спасибо DevMan, за помощь и советы, очень много всего узнал нового. Так же человек не поленился и посредством ЛС помогал решать вопрос, за что от меня лично + в карму :)

Очень помог совет iStyx, благодаря ему нашел статью Восстановления системы где пошагово все описано, так я удачно решил проблему.

Всем остальным — большое спасибо за участие и желание помочь, Хабрасообщество это сила :) Проблему решил, всем еще раз спасибо.
Вопрос: Зачем папка assets в laravel?

Лучший ответ:
В папке /assets, как правило лежат нескомпилированные стили и скрипты. Coffescript, sass, less...вот это все. И по идее нужно настроить Elixir (надстройка над гульпом), чтобы он отправлял в /public уже сконкатенированные и минифицированные файлы. 
Такие дела, надеюсь, прояснил.

Худший ответ:
Поскольку в современной разработке большинство проектов делаются с использованием препроцессоров и сборщиков, в папке assets лежат исходники, а при помощи elixir (или любого другого инструмента) они собираются в public.
Вопрос: Какое реальное положение у boomstarter.ru?

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

Худший ответ:
Дополню моих соседей. Дурости фаундеров - это исключительно их личное дело. Пример - недавний кейс Yotaphone на IGG. Зачем-то им потребовалось набрать 50000$, собрали 150 000$. 
Если интересно, что это - приходите на бесплатные семинары посмотреть, как они работают. Ближайший будет в HSE на следующей неделе.
Вопрос: Какую выбрать книгу по программированию для ребенка?

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

Худший ответ:
Скажите, пусть погружается в WEB, тут интересно :)
Вопрос: На чём основывается SEO?

Лучший ответ:
SEO основывается на некоторых базовых вещах, опыте, изучении конкурентов и неопределенности. 
Читать комменты выше про "сайт для людей" или "уникальный контент" просто смешно. Это из той же серии мифов, что "хороший продукт сам себя продает". 
Правила игры постоянно меняются. 
Как продвинуть сайт в топ. Если речь идет про НЧ, то просто создаешь страницу и все - ты в топе. Если про СЧ и ВЧ, там огромная конкуренция, магичесими фишками ты туда не попадешь. Кто больше денег ввалил тот и в топе и то не всегда.

Худший ответ:
На анализе основывается + рекомендации поисковых систем, которые необходимо делать.  Если не будете анализировать почему поменял и полезно в ТОИ или почему поменял и не полезно, то не будет работать. Ибо каждый сайт по себе продвигается своими методами и подходом.
Вопрос: Почему событие jQuery .load срабатывает несколько раз подряд?

Лучший ответ:
Все очень просто, вы каждый раз нажимая на кнопку submit вызываете функцию send, которая в свою очередь каждый вызов вешает $('#frame').load.
Это значит что при каждом клике на кнопку в создаете дополнительный обработчик load.
Как вариант уничтожайте предыдущий обработчик перед тем как новый создать.

Худший ответ:
Большая фишка втом, что браузер кеширует ответ с урла, запросов лишних не делает просто так. Столкнулся, когда делал альтернативный плеер ютуба с подгрузкой его по клику. 
Пришлось создавать объект  по щелчку cо всеми параметрами. Тогда браузер отправлял запрос.
1)Но вопрос в другом. Че вы там забираете и зачем вам iframe? 
Если документ с чужого домена то политика запрета en.wikipedia.org/wiki/Same_origin_policy 
Можно извращаться с jsonp, благо с 1.6 Jquery сделали удобно, хотя все ущербно. Надежнее как всегда проксировать запрос. но это чуть дольше - сами понимаете.
2)Если документ с вашего сервиса, то нафига iframe?
Вопрос: Node.JS или PHP для разработки сложных проектов с финансовыми транзакциями?

Лучший ответ:
На той, что лучше знаете.

Худший ответ:
На той которую вы знаете.
SSL от технологии вообще не зависит.
Так же настоятельно советую почитать о транзакциях в sql.
Вопрос: Установка windows server 2008 r2 на аппаратный raid 1?

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

Худший ответ:
сейчас ОС ставят в рейд? помню раньше было принято ОС ставить на отдельный диск, данные на рейд, сейчас как с этим?
Вопрос: Какая есть хорошая книга на русском по html5+css3?

Лучший ответ:
Наслаждайтесь
rutracker.org/forum/viewtopic.php?t=2361564 css
www.tryboi.com/ru/wp-content/uploads/2012/12/html5... html5
rutor.org/torrent/300420/cbs-html5-css3-2013-pcrec
www.proklondike.com/books/webdesign/dronov_html5_c...
бонус javascript.ru
rutracker.org/forum/viewtopic.php?t=510539

Худший ответ:
Вот перевод книги онлайн можете чиать smarly.net/html5
Вопрос: Уменьшение gif изображений (высоты и ширины в два раза) приводит к увеличению веса файла на 10%

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

Худший ответ:
Используйте опцию ' +profile "*" '
convert +profile "*"…

Это избавит от большого куска метаданных, записываемых в файл.
Вопрос: Подключил шрифт google а он отображается везде по разному, что делать?

Лучший ответ:
Для контейнеров с проблемным текстом:text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;

Худший ответ:
В разных браузерах отличаются методы рендеринга шрифтов, особенно в safari.
При подключении в html сталкивался с тем что адрес с параметрами не всегда хорошо распарсивается, можно подключить другими способами например через @import. 
Так же стоит отметить что Chrome отображает сайты в масштабе 100%, большинство других немного увеличивают до 125%.
Вопрос: Подскажите библиотеку/движок презентации на javascript

Лучший ответ:
Когда-то делал сам, а вчера нашел ссылку: http://net.tutsplus.com/tutorials/html-css-techniques/how-to-create-presentation-slides-with-html-and-css-2/

Худший ответ:
Всем спасибо, что-то не нашел ничего интересного и быстренько наклепал на основе jQuery Cycle Plugin
Вопрос: Как обратиться к объекту :after элемента Jquery?

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

Худший ответ:
Например, так:$('p').on('click', function () {
    $(this).attr('data-before','bar');
});p:before {
    content: attr(data-before);
    color: red;
    cursor: pointer;
}<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<p>This is a paragraph.</p>
<p>This is another paragraph.</p>
Вопрос: Как заблокировать CDN Microsoft&Co?

Лучший ответ:
У вас, батенька, вирус.

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

Лучший ответ:
Потому что степень не является коммутативной. 
a + b = b +a
a*b = b*a
a^b != b^a

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

Лучший ответ:
Отвечать на тупые вопросы на тостере.

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

Лучший ответ:
Прошу меня простить, но какую цель вы преследуете изучая столько языков? За всем угнаться невозможно. Стать профессионалом в рамках какой-то технологии возможно. Да и опять же стоит спросить себя «а что мне интересно»? Веб-разработка? Разработка игры? Разработка математического ПО? Из ответов уже и нужно выбирать технологию. А учить ради того что бы выучить что-то. Нет, это конечно здорово, но опять же стоит понимать зачем это делается и на каком уровне будет использоваться. Ибо как было написано ранее, профессионалом во всем стать не возможно. Да и тут же вспоминается русская народная поговорка «За двумя зайцами погонишься ни одного не поймаешь».

P.S. На Java можно написаться почти что все что угодно и этого в большинстве случаев будет кросс-платформенно и это плюс Java.

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

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

Худший ответ:
Посмотрите на phonegap.
Вопрос: Один микроконтроллер + много устройств

Лучший ответ:
Можно использовать сдвиговый регистр, например 74HC595.
Множим выходы с помощью сдвигового регистра 74HC595
Подключаем кучу устройств к Arduino по 5 проводам

Худший ответ:
Если входящие и сходящие сигналы требуют только логических уровней, можно сколхозить схему мультиплексоров/демультиплексоров(шифратор/дешифратор)(двоично-десятичный преобразователь (и наоборот)). Они просто каскадируются, 3мя портами можно адресовать 255 входов и 255 выходов, 4мя — независимо читать/писать. Но уж очень громоздкая схема выйдет.(они обычно на 16 входов/выходов) 
Можно уменьшить количество занятых ног используя счетчики или сдвиговые регистры, для формирования адреса/получения/установки данных, можно в 1 порт уложиться, но это бесконечный подсчет, такты, брррр.
Вопрос: Должны ли кнопки быть однородными в приложении для iPhone?

Лучший ответ:
Если вы создаете дизайн только под айфоны, то лучше придерживаться стандартной галочки из гайдов, тк дизайн ios 8 сводится к минимализму. Просто и понятно.
Унификация дизайна хорошая вещь,  либо делать все так,  либо так. Смесь стилей не всегда хорошо. Либо все в кругах,  либо просто стандартные галочки.
Если это второстепенные экраны с основной функцией share, то оставьте простые галочки и не заморачивайтесь.

Худший ответ:
Просто галочка красивее. Зачем всякие круги вокруг неё? Простота нужна, а не замудренность.
Вопрос: Что случилось с owl carousel?

Лучший ответ:
У плагина новый владелец. Сайт теперь тут: https://owlcarousel2.github.io/OwlCarousel2/

Худший ответ:
это видимо
Вопрос: Какие media запросы для ноутбука?

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

Худший ответ:
Посмотрите разрешение ноута на котором надо меньше и поставьте его в медиа-запрос, а после уже ответ на вопрос ноут это или десктоп со старым монитором не суть важен.
Вопрос: Что делать если Антивирус Касперского отметил сайт как вредоносный?

Лучший ответ:
Начните например с этого: Антивирус Manul для сайта от Яндекса

Худший ответ:
Вам необходимо сообщить в вирлаб через newvirus.kaspersky.com о ложном срабатывании на сайт.
сайт - чист - адрес - отправить.
или напишите письмо на newvirus@kaspersky.com с темой "Ложное срабатывание на сайт", вложив в тело ссылку на сайт.
Вопрос: Как проследить (google analytics) регистрацию на сайте, которая требует верификации эл. почты?

Лучший ответ:
После верификации новой учетки пользователя можно перенаправлять на страницу с поздравлением (что-то вроде /signup_greetings/), которую и сделать целью

Худший ответ:
Можно добавить в форму регистрации скрытое поле (from_adwords), в котором указать пришел ли пользователь с adWords. А потом просмотреть пользователей в базе (типа: SELECT * FROM users WHERE from_adwords = 1 AND status = "confirmed"). 

Но задача в том, чтобы в прямо в Analytics показывало.
Вопрос: Как приложение узнает что уже было на устройстве (Android)?

Лучший ответ:
IMEI, MAC WI-FI или Bluetooth

Худший ответ:
Крайне сомнительно, что бы эта программа получала IMEI/MAC-и на системном уровне, скорее всего она обращается к стандартному API. Поэтому смотрите в сторону Xposed Framework + XPrivacy
Есть возможность подменить отдаваемые программе идентификаторы, но есть нюансы, решение не универсальное.
Вопрос: Front-end

Лучший ответ:
для фронт-энда PHP
если разработка WEB страниц (JS фреймворк) то prototype или JQuery

Худший ответ:
а что вы понимаете под этим понятием? Если RIA, то например ExtJS. Если что-то более легковесное — jQuery.
Вопрос: Как защитить исходники при привлечении удаленных разработчиков?

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

Худший ответ:
RDP на свои виртуалки где живет VisualStudio + отключенный маппинг клиентских дисков?
Вопрос: Как сделать такие колонки на bootstrap?

Лучший ответ:
Никак
w3bits.com/css-masonry

Худший ответ:
<div class="row">
      <div class="col-md-6">
         <div class="row">1</div>
         <div class="row">3</div>
      </div>
      <div class="col-md-6">2</div>
</div>
так?
Вопрос: NHibernate vs хранимые процедуры

Лучший ответ:
А почему не хотите просто сделать выборку с помощью SQL, которая вернёт вам строки соответсвующие вашему условию? На 99% уверен, что будет работать быстрее. Ну или через хранимую процедуру (хотя из описания вашего условия — не понял зачем вам хранимка. Для выбора из таблиц строк по условию обычного SQL будет достаточно).

Худший ответ:
А почему не хотите просто сделать выборку с помощью SQL, которая вернёт вам строки соответсвующие вашему условию? На 99% уверен, что будет работать быстрее. Ну или через хранимую процедуру (хотя из описания вашего условия — не понял зачем вам хранимка. Для выбора из таблиц строк по условию обычного SQL будет достаточно).
Вопрос: Как реализовать хранение друзей в БД?

Лучший ответ:
А что если хранить немного по другому?

Например не создавать дублирующую запись в обратную сторону, а изначально использовать еще одно поле в троичной системе счисления: ± 1 когда один пользователь добавил другого (знак указывает направление заявки) и 0 когда заявка подтверждена.

Тогда запрос будет один на выборку пары, а состояния отозвать/принять заявку и удалить из друзей будут определяться знаком числа в дополнительном поле.

Из очевидных плюсов. Места занимать будет примерно в два раза меньше — мелочь, а приятно.
Минусов не сразу не соображу.

Худший ответ:
теоретически вам надо два множества — друзья юзера, и обратное — те кто позвал в друзья вашего юзера. 
1. select f1.friend from friends f1 where f1.user=:user_id
2. select f1.user from friends f1 where f1.friend=:user_id

пересечение будет давать взаимных френдов, вычитания — невзимных с одной и с другой стороны.
синтаксис SQL говорит что это легко можно сделать полным join, который обычно не имплементируется но эмулируется обьединением left и right. То бишь:
select * from friends f1 LEFT join friends f2 on f1.user=f2.friend and f2.user=f1.friend where f1.user=:user_id
UNION
select * from friends f1 RIGHT join friends f2 on f1.user=f2.friend and f2.user=f1.friend where f2.friend=:user_id

и будет 3 варианта — обе f1 и f2 не null — взаимные друзья или один из них null

Но это не самый эффективный способ, я бы согласился с serso и посоветовал иметь доп колонку с типом ( заодно можно их иметь несколько — друзья, супруги/любовники, коллеги ) и при добавлении проверять обратное отношение и сразу заполнять колонку. На нагруженной системе это можно делать в отложенном режиме.
Вопрос: Как SELECT'нуть уникальные записи, вместе с колонкой id, но чтобы DISTINCT ее не учитывал при запросе?

Лучший ответ:
Ваш ID не участвует в DISTINCT-e:SELECT distinct (column), id FROM table
Нужно помнить, что Distinct всегда должен идти первым

Худший ответ:
Как вариант можно попробовать вот так:
SELECT id, p1, p2 FROM table
WHERE IN p1 IN (SELECT DISTINCT p1, p2 FROM table)
Главное чтобы набор связываемых полей был уникален.