Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Как подсчитать стоимость сайта?

Лучший ответ:
Цена складывается из множества параметров, так же из-за количества людей, которые могут быть привлечены к этому. Одно дело, когда вы один, на шаблоне, делаете какой-то сайт, другое дело - когда у нас дизайнеры рисуют дизайн, верстальщики верстают, программирование/натягивание на CMS, кто-то пишет тексты, рисует иллюстрации и т.д.

Можно вывести какую-то минимальную цифру стоимости за типовый сайт и накидывать дальше цену за доп функционал.

Либо переход на почасовую оплату. Выбрать стоимость часа работы и дальше уже считать время потраченное на проект. Либо планировать, сколько времени может понадобится и выводить какую-то цифру на основе этого. Конечно, всё это будет примерно, временами может понадобиться меньше времени, а бывает и намного больше, чем планировалось.

Худший ответ:
Цена складывается из множества параметров, так же из-за количества людей, которые могут быть привлечены к этому. Одно дело, когда вы один, на шаблоне, делаете какой-то сайт, другое дело - когда у нас дизайнеры рисуют дизайн, верстальщики верстают, программирование/натягивание на CMS, кто-то пишет тексты, рисует иллюстрации и т.д.

Можно вывести какую-то минимальную цифру стоимости за типовый сайт и накидывать дальше цену за доп функционал.

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

Лучший ответ:
Подписка - это право получать обновления и читать сайт ИТС, на функциональность платформы абсолютно не влияет (хотя в некоторых конфигурациях есть запрос вашего номер/пароля ИТС для закачки каких-то классификаторов).

Без ключа (настоящего или виртуального) платформа работать не будет. Все известные патчеры не отключают проверку ключа, а заставляют думать платформу, что у нее ключ есть (в окошке "О программе" в самом низу пишет какие ключи есть сейчас и какими пользовались раньше).

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

Худший ответ:
Можно ли
Да.
Вопрос: Где ошибка в регулярном выражении?

Лучший ответ:
Не помню, как в JS, но в PHP точно должно быть \s.

И - (тире) должен быть последним символом в строке, то есть после него должна идти уже закрывающая скобка, либо надо ескейпить \-. А в таком виде тире говорит все символы от "/" и до "_", включительно, а это не много ни мало 49 символов, в том числе и "@" (см. таблицу ASCII).

P.S. И символ ^ (каретки) у вас именно разрешён, прямо в самой строке.

Худший ответ:
Я сделал вот такой вариант: /^[a-zA-Z\p{Cyrillic}0-9\/_.,!)(?\s\-]+$/u
И он в PHP7 вроде правильно работает.
Я тут эксперта пригласил, может он свой вариант предложит.
Вопрос: Как отличить внутренние команды от внешних в Astra Linux?

Лучший ответ:
Первая же ссылка в гугле:
❯ type cat
cat is /bin/cat
❯ type cd
cd is a shell builtin

Худший ответ:
$ type --help
~
-t  output a single word which is one of `alias', `keyword',
  `function', `builtin', `file' or `', if NAME is an alias,
  shell reserved word, shell function, shell builtin, disk file,
  or not found, respectively
~

$ type -t cp dir bg dmesg
file
file
builtin
file
из вывода видно что cp, dir и dmesg это внешние(file) команды, а bg это внутренняя(builtin) или точнее встроенная команда.
Вопрос: Как пользоваться ассемблером Intel для GPU?

Лучший ответ:
Если я верно понимаю начинать смотреть тут там же есть sdk для загрузки и opencl tool, не удивюсь если все необходимое там уже есть

можно заглянуть сюда

зы а вы с какой целью интересуетесь?

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

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

Худший ответ:
Т.е. в резюме у вас будет NDА, а в трудовой название компании? Што?
Мне прям интересно, что это за компания которая не хочет чтобы ее в резюме упоминали. Гидра какая нибудь :)
Вопрос: Почему в React чтобы изменить useState многие пишут вот так setState(pre => pre = data), а не просто так setState(data)?

Лучший ответ:
setState(pre => pre = data) - это чушь бессмысленная.

setState(pre => {
  const data = <что-делаем с pre>;
  return data;
}) - другое дело. Такая функция не зависит от внешних данных, только от предыдущего состояния.

Худший ответ:
В том виде, в котором приводите вы запись не имеет смысла. Зачем используется функция описано в документации.
https://reactjs.org/docs/hooks-reference.html#func...
Functional updates

If the new state is computed using the previous state, you can pass a function to setState. The function will receive the previous value, and return an updated value. Here’s an example of a counter component that uses both forms of setState:
Вопрос: Какой ноут взять под Kali Linux для программирования в 2022?

Лучший ответ:
Местные CTF команды, зачастую по моим наблюдениям используют ноутбуки Lenovo Legion. 
От себя могу посоветовать HP 470 G8 и ASUS Vivobook Pro 16 OLED N7600PC-L2010.

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

Лучший ответ:
Оригинальное решение от Евгений Драган в комментариях. Добавлено в пример. Updated 2022-06-10



Прежний ответ про MMULT очень старый.

Вот такой вариант более эффективный

=ARRAYFORMULA(VLOOKUP(A:A;QUERY(A:A;"select A, count(A) group by A";0);2;0))

Еще вариант от автора вопроса Евгений Драган 

=ARRAYFORMULA(COUNTIF(A2:A;A2:A))



Пример в Таблице https://docs.google.com/spreadsheets/d/1mW9OS3WVQA...

Худший ответ:
Почему просто не посмотреть общее количество дубликатов?
=QUERY(A:A;"select count(A),A group by A")
Вопрос: Как сигнализировать когда объект выходит за границы?

Лучший ответ:
Вопрос и впрямь не по питону, алгоритм легко портируется.
Если нужно детектить именно пересечение любой из точек границы, и именно для круга и квадрата, то это очень просто. Уменьши квадрат, сдвинь каждую сторону внутрь на радиус круга.
Например, у тебя был квадрат от (0;0) до (100;100), круг радиусом 10 (диаметром 20). Новый квадрат будет от (10;10) до (90;90).
После этого проверяй, входит ли центр круга внутрь нового квадрата. Если входит - круг внутри исходного квадрата. Если центр на стороне - круг касается стороны исходного квадрата. Если центр вне нового квадрата - круг вышел за границу исходного.
Проверка вхождения точки внутрь ортогонального (стороны параллельны осям координат) прямоугольника выполняется тривиально, сам догадаешься как.

Есть второй способ, базируется на массивах numpy (python-opencv их использует для хранения массивов пикселей изображения).
Делаешь два изображения-маски (одноканальных, одного размера), одно для одного объекта, другое для другого. В твоём случае одно (A) будет содержать белый круг на чёрном фоне, а другое (B) - чёрный квадрат на белом фоне.
Тогда можно будет сделать так:
intersection = numpy.logical_and(A, B)
if intersection.any():
    print('Collision!')
logical_and() вернёт логический массив того же размера, что A и B. Элемент массива будет истиннен только если соотвествующие элементы в A и B будут ненулевыми.
Таким образом, если два объекта пересекаются, то logical_and() вернёт True для пересёкшихся пикселей.
А метод any() вернёт True если любой элемент массива истинен, т.е. если есть хоть один пересёкшийся пиксель.

Этот метод куда более ресурсоёмкий, чем то что я описал в выше,но зато работает для объектов произвольной формы. Только нарисуй их.
Кроме того, можно сделать numpy.count_nonzero(intersection), чтобы узнать, насколько велико пересечение (сколько пикселей в нём). Это тоже может быть полезно если ты хочешь "прощать" небольшие пересечения.

Худший ответ:
Ты подразумеваешь, что кружок выходит за границы квадрата, когда одна из его точек за пределами этого квадрата? Или когда его центр за пределами квадрата? Или когда все его точки за пределами квадрата?

"Есть вершины квадрата: (x1,y1), (x2,y2), (x3,y3), (x4,y4). Для определенности и не ограничивая общности допустим, что вершины перечисляются от левой верхней по часовой стрелке. Точка имеет координаты (x0,y0) и попадает в квадрат, если истинно условие:
(x0>x1 И y0>y1 И x0
Вот так, кажется..."
источник(https://forum.na-svyazi.ru/?showtopic=212014)

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

Лучший ответ:
99% что блокируется сессия.
Когда PHP обрабатывает запрос, он по умолчанию открывает сессию, а закрывает только тогда, когда код завершает свою работу. Проблема в том, что файловые сессии блокируются. Если какой то поток открыл сессию, то другие потоки будут ждать пока она не закроется.
Решение этой проблемы - уход от хранения сессий в файловой системе, обычно в таком случае выбирают memcache.

Худший ответ:
Поведение очень похоже на блокировку файла сессий.
При запуске скрипта открывается сессия (session_start), файл блокируется. При попытке открыть ту же сессию в другом скрипте будет ожидание освобождения файла сессии.
Решение - в начале скрипта, особенно долго выполняющегося, открывать сессию, забирать из неё все нужные данные и сразу закрывать сессию (session_write_close). При необходимости изменить данные в сессии открывать её снова, менять данные и тут же закрывать.
Как вариант - переносить хранение сессий в базу данных.
Вопрос: Как продвигать каталог товаров (SEO) в котором товары периодически обновляются — какие то уходят, какие то приходят?

Лучший ответ:
Можете не удалять страницы с отсутствующими товарами, а просто написать "нет в наличии". Часто публикуйте новости, статьи, заведите rss ленту и закиньте ее в каталоги. Тогда робот будет жить на вашем сайте. В Search Console можете добавлять новые товары.

Худший ответ:
Сильно зависит от товарной матрицы. Если у вас товарные карточки привлекают трафик больше, чем категории (к примеру, вы продаёте смартфоны или видеокарты), то удалять карточки сразу и наглухо не надо. Просто сортируйте их на категории куда-нибудь в конец списка, и удаляйте, если только такие карточки начинают создавать проблемы - отказной трафик, например.
Если речь о большом каталоге с чем-то и FMCG (носки какие-нибудь) - можно сносить сразу, это ни на что не влияет на объёмах и не привлекает самостоятельного трафика.
Не рекомендую использовать какие-нибудь редиректы, как многие любят. Это путь вникуда, и технические проблемы со сканированием в ближней перспективе.
Единственное - стоит удалять несуществующие товары из карты сайта, и в ряде случаев можно подумать об использовании meta robots - noindex, follow. В этом случае вы не потеряете вхождений ключа на категории, а роботы не будут засорять индекс мёртвыми урлами.
Вопрос: Как оптимизировать формулу по извлечению цифр из ячейки?

Лучший ответ:
Регуляркой:
=REGEXREPLACE(A1,"^\D+", "")
Первые 10 символов:
=ЛЕВСИМВ(A1;10)
До первого пробела:
=ПСТР(A1;1;ПОИСК(" ";A1))

Худший ответ:
Можно ещё так:
=REGEXEXTRACT(A1;"\d+")
или
=REGEXEXTRACT(A1;"\d{9,}")
Вопрос: Доступ в сеть одному приложению с Андроид при помощи Миротик, есть ли смысл?

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

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

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

Лучший ответ:
Приветствую, чтобы не было утечки
Для начала давайте настроим всё правильно.
Допустим у вас оптика с авторизацией PPoE
1 заходим в проводной>показать доп настройки > ставим чекбокс напротив игнорировать днс
2 заходим в интернет фильтр
Прописываем 8.8.8.8 для ppoe
10.2.0.1 для wireguard

3 приоритеты подключений
В первой вкладке создаем новый профиль, туда добавляем только wireguard (ещё создать профиль NoVPN, куда засунуть PPoE, это для того чтобы dns запросы не шли через vpn у тех клиентов, которые не используют его)
Во второй вкладке добавляем в новый профиль те устройства, которые должны сидеть с vpn (можно потом в списках устройств менять.

Для начала попробуй с 3го шага. Думаю его будет достаточно.

Тестить утечку dns только через internet explorer (если нет его, отключить в браузере безопасный dns (DoH))
Dnsleak.com dnsleaktest.com

Худший ответ:
Использовать DNS от гугл или cloudflare можно и ничего не блокируется.
Этот параметр указывается в клиентском конфиге, что все запросы надо пустить через VPN.
Покажите конфиг клиентский, для wireguard
Вопрос: Как грамотно разворачивать разработку на Битрикс на локалке?

Лучший ответ:
Да именно так.  Если предположить, теоретически, что вы сделали что все работает с одними и теми же файлами битркис (извратится можно попробовать, но проблем это доставит точно: разные версии, необходимость подкидывать отдельные конфиги, различные модули.....) то все равно из 15 гигов. битрикс занимает не 90% же. Т.е. большая часть из этих 15 это файлы конкретного проекта.

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

На практике вы реально планируете работать одновременно с 20 проектами?  Если вам так важно место и не хочется докупить диски - бекапте те проекты, с которыми не работаете.

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

Так же могу дать пару советов. У меня есть проекты где они требуют и 50 гигов на один :)
1 Написал скрипт, который чистит базу, в моем случае я заложил логику "в каждом разделе оставлять не более 30 товаров"

2. Не реализовывал, но вынашивал как то идею - вместо всех картинок товаров подсовывать за счет редиректа заглушки - а сами картинки удалить из каталога upload

Худший ответ:
какую-то шляпу вы пишете.
15 гб 20 проектов - это 300 гб. вполне себе нормаьлно для разработки че тут вообще такого? вопрос в 2К на жесткий диск?
Вы хотите работать и вкладывать в это 0 рублей?
Херовая идея.
2. Разрабатывать на винде линуксовые проекты плохая идея вдвойне.
Как минимум винда физически не в состояние следить за регистрами имен в файлах и тд и тп.
Поднимите нормальный веб сервер, путь даже это будет вирутуалка битрикс вм, заодно подучите ее.
3. Экономить место Докер вам в помощь друг мой, его никто пока не отменял.
4. Зачем вообще локально работать, монтируйте удаленые фтп/ssh как локальные диски и работайте с сервера бесшовно.
Вопрос: Где можно узнать максимально подробно про grpc?

Лучший ответ:
Первоисточник: https://grpc.io/

Худший ответ:
https://proglib.io/p/grpc-i-vse-vse-vse-chast-i-vv...

а изнутри  - исходники ))

особых чудес нет: структура данных преобразуется в строку/набор байтов и пуляется по сети через протокол, у получателя - преобразуется назад

способы такое сделать различные с их плюсами и минусами
Вопрос: Android разработка на Java в Sublime Text?

Лучший ответ:
Статья старая, но думаю, что принципиально ничего не изменилось.

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

Лучший ответ:
26 вариантов на текуший момент. Выбирайте любой https://git-scm.com/download/gui/linux

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

Я-бы предложил рассматривать не хронологию а топологию. Это более корректно. Коммиты - это орграф. DAG. И у него есть последовательность действий над бранчами.
Вопрос: Unity как сделать сохранение?

Лучший ответ:
Почитать документацию по PlayerPrefs

Худший ответ:
PlayerPrefs, ScriptableObjects, сохранять на каком-нибудь сервере
Вопрос: Как связать фронт на React и бэкенд на ASP.NET, при условии, что и фронт и бэк представлены как 2 раздельных проекта?

Лучший ответ:
Ничего особенного для связи не нужно.
Фронт скорее всего запускается через webpack-dev-server - в него можно через переменные среды прокинуть адрес бэкенда.
На проде фронт будет раздаваться, скорее всего, с nginx, так что никакой параметр прокинуть нельзя, зато можно обращаться к тому же домену, на котором сидит и фронт (делать запросы типа fetch("/api/something")) - и уже на стороне nginx разруливать.

Худший ответ:
Фронт это скорее всего create react app или самописный конфиг webpack
Вебпаку можно прописать конфиг, чтобы проксировать запросы к api в определенную подпапку домена
https://webpack.js.org/configuration/dev-server/#d...
Бек поднимаете отдельно его конфигом
На продакшене нужно будет настроить nginx чтобы он одну подпапку проксировал на поднятое рядом API а остальные запросы направлял на индескный файл фронта
Вопрос: Что использовать для сравнения двух CSV файлов?

Лучший ответ:
допустим у нас есть файлы file1.csv и file2.csv
$ cat file1.csv
kpi1,kpi2,kpi3,kpi4,kpi5
1.23,5.67,2.21,3.45,4.44

$ cat file2.csv
kpi1,kpi2,kpi3,kpi4,kpi5
0.23,5.67,2.22,3.45,2.44
где согласно условию: "Заголовки одинаковые, возможны вариации в значениях."

cat file1.csv | head -1 | tr ',' '\n' > file3_1.csv
cat file1.csv | tail -1 | tr ',' '\n' | paste file3_1.csv - > file3_2.csv
cat file2.csv | tail -1 | tr ',' '\n' | paste file3_2.csv - > file3_3.csv
в итоге получим
$ cat file3_3.csv
kpi1	1.23	0.23
kpi2	5.67	5.67
kpi3	2.21	2.22
kpi4	3.45	3.45
kpi5	4.24	2.44
для удобства можно ввести 4-й столбец где укажем разницу между вторым и третим
cat file3_3.csv | awk '{print $0"\t"$2-$3}' > file3_4.csv
$ cat file3_4.csv
kpi1	1.23	0.23	1
kpi2	5.67	5.67	0
kpi3	2.21	2.22	-0.01
kpi4	3.45	3.45	0
kpi5	4.24	2.44	1.8
а заодно добавим заголовки
echo -e 'name\t$2\t$3\t$2-$3' | cat - file3_4.csv > file3_5.csv
$ cat file3_5.csv
name	$2	$3	$2-$3
kpi1	1.23	0.23	1
kpi2	5.67	5.67	0
kpi3	2.21	2.22	-0.01
kpi4	3.45	3.45	0
kpi5	4.44	2.44	2
пример того как в консоли выделить красным цветом строки где разница между вторым и третим столбцом больше нуля:
cat file3_5.csv | awk '$4>0{print "\033[41m"$0"\033[0m"}$4<=0{print}'

для красивого оформления в консоли можно использовать утилиту csview
$ csview -t file3_5.csv
┌──────┬──────┬──────┬───────┐
│ name │ $2   │ $3   │ $2-$3 │
├──────┼──────┼──────┼───────┤
│ kpi1 │ 1.23 │ 0.23 │ 1     │
│ kpi2 │ 5.67 │ 5.67 │ 0     │
│ kpi3 │ 2.21 │ 2.22 │ -0.01 │
│ kpi4 │ 3.45 │ 3.45 │ 0     │
│ kpi5 │ 4.44 │ 2.44 │ 2     │
└──────┴──────┴──────┴───────┘
пример покраски значения в таблице:
csview -t file3_5.csv | awk '$8>0{print "\033[41m"$0"\033[0m"}$8<=0{print}'


для перекидывания в markdown  используем ключ -s, --style
$ csview -t -s Markdown file3_5.csv
| name | $2   | $3   | $2-$3 |
|------|------|------|-------|
| kpi1 | 1.23 | 0.23 | 1     |
| kpi2 | 5.67 | 5.67 | 0     |
| kpi3 | 2.21 | 2.22 | -0.01 |
| kpi4 | 3.45 | 3.45 | 0     |
| kpi5 | 4.44 | 2.44 | 2     |

Худший ответ:
Во-первых, большое спасибо xotkot - как старый юниксомд получил удовольствие разбирая его решение.
В попытке найти что-то готовое я попробовал https://paulfitz.github.io/daff/ - оказалось, он дает удобный отчет в CSV или HTML формате.  
(Правда, для использования в Github Actions мне нужен отчет в markdown и я пока не нашел  конвертор, который справляется со сложными отчетами. Но для простых работает, хотя почему-то без цветовой подстветки - см. скриншот. Но это уже другая история)
Вопрос: Как изменить адреса DNS серверов на множестве компьютеров в домене?

Лучший ответ:
Групповые политики

Худший ответ:
Powershell, если есть админские права от каждой машины.
Вопрос: В чем суть такой записи в reset.css?

Лучший ответ:
Это специфичное для blockquote определение, которое Eric Meyer (автор reset.css) позаимствовал у Paul Chaplin. Первая строка content: "" делает так, чтобы у blockquote исчезли кавычки — на случай, если вторая строка content: none не поддерживается браузером, потому что первая строка — это CSS 2, а вторая — это CSS 2.1. В одну строку их записать нельзя, потому что по стандарту для свойства «content» нельзя комбинировать ключевые слова «normal» и «none» с другими значениями.

Вообще, когда встречается перечисление одного и того же свойства с разными значениями, это делается для того, чтобы обеспечить совместимость с разными браузерами. То есть, если, например, браузер не поддерживает «content: none», он применит «content: ""», а другую запись проигнорирует.

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

.some-class {
    background: #e66465;
    background: linear-gradient(#e66465, #9198e5);
}

В этом коде, если браузер поддерживает градиентный фон, он сначала прочитает, что нужно использовать цвет «#e66465», а потом это перезапишется записью «linear-gradient», и итоговое значение будет «linear-gradient(#e66465, #9198e5);». Если же браузер не поддерживает градиент, он сначала прочитает, что нужно использовать «#e66465», а потом увидит неподдерживаемое определение «linear-gradient», проигнорирует его, и итоговое значение будет «#e66465».

Худший ответ:
Это разные по сути объявления.
content: ""; - задаёт содержимое псевдоэлемента (пустую строку)
content: none; - говорит, что псевдоэлемент вообще не генерируется
Вопрос: Как найти внешние ссылки на сайте?

Лучший ответ:
Гугл не покажет все ссылки с сайта, поскольку наверняка даже не все страницы в индексе. Плюс есть ещё интересный вариант - это "лом", когда на взломанном сайте делается подобие отдельного сайта, невидимого из интерфейса основного - но видимого для поисковых роботов.
Лучший вариант - взять хороший парсер, типа бесплатного SiteAnalyzer или Screaming Frog SEO Spider, и включить обход. Покажет все внешние ссылки после краулинга.

Худший ответ:
Решил эту проблему поиском через гугл

"www." -www.(начало адреса что б не убирать все) -pdf site:(адрес вашего сайта)
Вопрос: Совместима ли оперативная память разных производителей?

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

Худший ответ:
Скорей всего да.
НО! Изредка бывают ситуации когда даже 2 плашки одной фирмы работают на максимальной частоте, а 4 такие же плашки например уже не работают на максимальной.  То есть когда память продаётся комплектом по 4 плашки, это не просто так сделано.
Настоятельно рекомендую покупать в таком месте, где тебе эти плашки при случае смогут поменять на другие.