Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Как внедрить Простую Электронную Подпись?

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

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

Такой файл нельзя отправить, например, в ФНС для предоставления бухгалтерской или финансовой отчетности.

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

Худший ответ:
Варианта два - либо искать готовые варианты (Kontur Crypto Pro), они предоставляют API для подписания через приложение или еще как-то (но это уже вроде квалифицированая ЭЦП).
Либо делать самому - в банке, где я работаю, после согласования по цепочке лиц мы накладываем на PDF штампик с хешем и внутренний приказ наделяет этот документ силой.
Вопрос: Планирование спринта и поток задач, как совместить?

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

Худший ответ:
закладвайте буфер на спринт в кол-ве n часов на форс-мажор
Вопрос: Разумно ли импортировать одни и те же библиотеки в каждый модуль?

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

Ваш подход вполне нормальный, если вы конечно не импортируете в модуль А что-то что используется только в модуле Б и не используется в модуле А непосредственно.

Выносить все импорты в отдельный файл, как предлагает Дмитрий я бы не стал.

А  все модули передавать напрямую в функцию (как это сделано со state) оправдано только в том случае, если вы реализуете паттерн Стратегия

Худший ответ:
Тогда уж просто соберите их все в одном файле в объект и импортируйте объект, зачем так сложно?

const os = require('os'),
  path = require('path'),
  fs = require('fs'),
  kb = require('../modules/keyboards.js'),
  config = require('../config.js');

module.exports = { os, path, fs, kb, config }
Вопрос: C# Как программно добавить приложение в автозагрузку Windows?

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

hcr.reg

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"OneDrive"="\"C:\\Users\\kvn\\AppData\\Local\\Microsoft\\OneDrive\\OneDrive.exe\" /background"
"CCXProcess"="\"C:\\Program Files (x86)\\Adobe\\Adobe Creative Cloud Experience\\CCXProcess.exe\""
"com.squirrel.Teams.Teams"="C:\\Users\\kvn\\AppData\\Local\\Microsoft\\Teams\\Update.exe --processStart \"Teams.exe\" --process-start-args \"--system-initiated\""
"Discord"="C:\\Users\\kvn\\AppData\\Local\\Discord\\Update.exe --processStart Discord.exe"

Худший ответ:
Попробуй из программы на c# запускать питон скрипт, с ним всё должно работать

import os
import winshell
import inspect
from getpass import getuser
from win32com.client import Dispatch


filename = inspect.getframeinfo(inspect.currentframe()).filename
user = getuser()

wDir = os.path.dirname(os.path.abspath(filename))
target = wDir + r'\program_name.exe'
path = rf'C:\Users\{user}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\program_name.lnk'
icon = wDir + r'\icon_name.ico'
shell = Dispatch('WScript.Shell')
shortcut = shell.CreateShortCut(path)
shortcut.Targetpath = target
shortcut.WorkingDirectory = wDir
shortcut.IconLocation = icon
shortcut.save()
Вопрос: Как наиболее простым образом собирать докер-контейнеры для разных env?

Лучший ответ:
- в зависимости от ENV выбирался docker-compose.{env}.yaml и dockerfile.{env} для каждого из контейнеров (если сборка из директории, а не из образа)
Это так не работает. ENV задаётся сразу для определённого сервиса в docker-compose и для определённой сборки Dockerfile.
Я бы сделал нормальный CI в gitlab, например, и билды из веток для stage и production. Тут сам docker-compose не совсем предназначен для сборок и порождает костыли.
Удобней иметь один Dockerfile, а особые параметры передавать через --build-argdocker build --build-arg ENV=stage .

Худший ответ:
Если вы предпочитаете использовать отдельные файлы для каждого env, то насколько понимаю, это очень просто:
1) ENV=xxxx
2) COMPOSE_FILE=docker-compose-$ENV.yml    (или $ENV/docker-compose.yml)
3) DOCKERFILE=Dockerfile-$ENV.yml
и запускаем build
Вопрос: Как написать калькулятор который умеет работать с римскими цифрами?

Лучший ответ:
В твоем классе не учитываются L, C, D, M.  Тебе нужно сначала перевести в арабские цифры, произвести операцию, затем результат переводить обратно в римские цифры. Вот тут посмотри.

Худший ответ:
Уже был такой вопрос недавно. Поищи на тостере. Там готовый код скидывали.
Вопрос: Зачем делать игру на Unity если к ней и так нужно писать код?

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

Худший ответ:
Затем, что этот движок помогает в разработке.
И разработка игры (и последующее ее развитие) не сводится к написанию кода.
Вопрос: Как предупредить вздутие батареи на Macbook Pro 2017 Touch Bar?

Лучший ответ:
привыкайте к новой реальности одноразовых ноутбуков
https://www.youtube.com/embed/xhkMm945HfU?start=352

Худший ответ:
привыкайте к новой реальности одноразовых ноутбуков
https://www.youtube.com/embed/xhkMm945HfU?start=352
Вопрос: Есть ли аналог Terminal server в linux?

Лучший ответ:
https://wiki.ubuntu.com/Multiseat
https://wiki.archlinux.org/index.php/xorg_multiseat
Первые две ссылки это по поводу один компьютер - несколько рабочих мест
По поводу сетевого доступа
X протокол с рождения поддерживает работу по сети, просто ставите X сервер на операционку клиента (если винда то например https://sourceforge.net/projects/xming/) и с него подключаетесь на X-клиент на сервере
Есть еще VNC, NX и даже RDP можно поднять на линуксе.

Один из вариантов это LTSP который помогает развернуть бездисковые терминалы (когда базовая операционка загружается по сети и подключается к терминальному серверу) https://ltsp.org/

Худший ответ:
Есть ли вообще что-то такое под *nix?
VNC, NoMachine (если еще жива). XfreeRDP в режиме сервера, вообще любой X-клиент, существующий для винды (поскольку сетевые возможности в Х заложены изначально)
Вопрос: Платные ссылки и переходы с домена через rel="noopener noreferrer"?

Лучший ответ:
Первая ссылка при поиске

rel = ”noopener” — это атрибут HTML, который добавляется ко всем ссылкам WordPress, выбранным для открытия на новой вкладке браузера. Он также сопровождается атрибутом rel = ”noreferrer”. Эта функция введена в WordPress для устранения уязвимости безопасности, которая может быть использована вредоносными веб-сайтами.

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

rel = ”noreferrer” не влияет на партнерские ссылки в WordPress. Некоторые пользователи все же считают, что влияет, потому что rel = ”noreferrer” не позволяет передавать информацию о реферере на новую вкладку.

Во-первых, большинство партнерских программ предоставляют вам уникальный URL-адрес с вашим партнерским ID. Это означает, что ваш идентификатор партнера передается в качестве параметра URL для отслеживания другим веб-сайтом.

Во-вторых, большинство аффилированных маркетологов используют плагин маскировки ссылок для своих партнерских ссылок. Например, Pretty Link Lite.

При закрытии ссылки партнерская ссылка, по которой переходят ваши пользователи, фактически является собственным URL вашего сайта, который затем перенаправляет пользователей на целевой URL.

Худший ответ:
Первая ссылка при поиске

rel = ”noopener” — это атрибут HTML, который добавляется ко всем ссылкам WordPress, выбранным для открытия на новой вкладке браузера. Он также сопровождается атрибутом rel = ”noreferrer”. Эта функция введена в WordPress для устранения уязвимости безопасности, которая может быть использована вредоносными веб-сайтами.

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

rel = ”noreferrer” не влияет на партнерские ссылки в WordPress. Некоторые пользователи все же считают, что влияет, потому что rel = ”noreferrer” не позволяет передавать информацию о реферере на новую вкладку.

Во-первых, большинство партнерских программ предоставляют вам уникальный URL-адрес с вашим партнерским ID. Это означает, что ваш идентификатор партнера передается в качестве параметра URL для отслеживания другим веб-сайтом.

Во-вторых, большинство аффилированных маркетологов используют плагин маскировки ссылок для своих партнерских ссылок. Например, Pretty Link Lite.

При закрытии ссылки партнерская ссылка, по которой переходят ваши пользователи, фактически является собственным URL вашего сайта, который затем перенаправляет пользователей на целевой URL.
Вопрос: Как SQLite встроить в сайт?

Лучший ответ:
Не использовать SQLite. Для этого есть куча причин и первая он для этого не предназначен!!!
На сервере сделайте контроллер который отдаёт json c результатами запроса к нормальной БД, если только чтение то можно использовать SQLite но опять же с опаской

Худший ответ:
Почитать что такое формы в HTML и как получать данные на сервере. В форме указать необходимый диапазон дат. Сервером обратиться с SQLite и получить данные за указанный период, сформировать и вернуть ответ HTML для графиков.
чтобы эти данные автоматически обновлялись в сайтеСамый примитивный способ, хотя и недружелюбный к пользователю, это meta тег с http-equiv refresh. Позволяет обойтись без дополнительного кода на JS. В форме при этом указать method GET. Ну а графики (charts) можно выводить любой библиотекой , хоть Google Charts.
Вопрос: Какой Linux занимает меньше места после установки на диск?

Лучший ответ:
Самый минимальный, хоть и не debian/rpm - это alpine (несколько мегабайт)
Самый мнинималистичный дебиан - debian minimal

Худший ответ:
В случае c rpm based - Centos minimal installation и после этого можно еще удалить ненужные пакеты вручную.
Вопрос: Не запускается mySQL в xampp, что делать?

Лучший ответ:
C:\xampp\mysql - вот в этой папке есть папка back up

Содержимое папки back up надо скопировать в папку data, в пути по умолчанию: C:\xampp\mysql\data

Также рекомендую к просмотру: https://www.youtube.com/watch?v=D9JAT-kUDAE - там дан другой способ решения, который мне не помог, но, тем не менее. 

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

Худший ответ:
Setting file 'C:\xampp\mysql\data\ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...проверьте что он не переполнен, поставьте больше...
Проверьте чем занят порт на который вешается мускуль
Проверьте если в папке есть пид файл - его надо удалить.
Вопрос: Продолжится ли выполняться процесс после прерывания соединения SSH?

Лучший ответ:
Почитайте про команды nohup или screen/tmux

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

Худший ответ:
Не знаю как вы подключаетесь, скорее всего через Putty. Есть еще такая программулина, как MobaXterm - для этих же целей предназначена. Так вот в ней много всяких плюшек, может у нее есть упомянутые выше средства типа tmux и остального.
Вопрос: Можно ли как то подписывать исх почту wildcard сертификатом?

Лучший ответ:
Нет ли варианта какого-то по типу wild-card?
Нет.
По трем причинам.
1. Сертификат для домена может оказаться без нужного EKU (Extended Key Usage). Для удостоверения сервера обычно используется EKU TLS Web Server Authentication, а для подписи/шифрования почты нужен EKU E-Mail Protection - а вовсе не факт, что CA его пропишет в сертификате, скорее всего нифига.
2. Клиент электронной почты не сможет использовать сертификат, в котором emailAddress в поле Subject не совпадает с тем мылом, на которое пытаетесь настроить - он его тупо не будет признавать (Outlook не будет находить, будет делать ерунду, TB будет игнорировать)
3. Коммерческие CA тоже прекрксно знают о том, что для защиты почты нужен каждому персональный сертификат и именно поэтому продают их поштучно :) Хотя у GlobalSign например есть услуга корпоративного PKI - тебе дают типо промежуточного CA, корневой у которого - GlobalSign и в пределах некоторой емкости ты выпускаешь сертификаты. За деньги, ессно.

Худший ответ:
Можно. Это называется s/mime для писем. 
Те кто не понимает формат s/mime просто будут получать дополнительный файл.
https://sectigo.com/enterprise/sectigo-certificate...
и да, s/mime лучше делать для каждого отдельный.
Платить за дополнительные сертификаты не надо (хотя у кого как)
Вопрос: Какие есть способы увеличения трафика из поисковика?

Лучший ответ:
1. Добавить сайт в Яндекс.Новости

2. Добавить сайт в Google.News

3. По аккаунтам сообществ в соцсетях можно (без спама!) публиковать ссылки на интересные новости по тематике сообщества. С применением вирусного маркетинга и прочих маркетинговых "фенечек".

4. Не слушать SEOшников - они вам навешают лапши на уши (свежие новости ранжируются по отдельному алгоритму, совсем не так, как остальные сайты. У поисковиков есть специальные роботы для индексации новостных порталов).

Обратите внимание, что все СМИ имеют свои каналы в Ютубе и аккаунты в соцсетях. Это - неспроста.

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

UPD: вынес про "ранжирование новостей" из каммента:
Новостные сайты в выдаченовости появляются в поиске через несколько минут/часов, обратите внимание на подчеркнутое зелёным:


У поисковых систем есть "быстророботы" (быстроботы). Если ПС определит, что сайт - "новостной" быстроботы с него просто не вылязят.

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

После внутреннего апдейта базы поисковика (что напроиндексировали его роботы) - "новость" начинает ранжироваться по общему алгоритму. Но к этому времени она устаревает - народ ищет уже более свежие новости.

С точки зрения SEO, внутренняя оптимизация для "новостника" важнее чем внешняя (ссылки с акнорами), поскольку когда внешние ссылки проиндексируется, новость уже не актуальна.

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


Худший ответ:
1. Собрать семантику.
2. Кластеризовать и распределить по страницам.
3. Проверить соответствие релевантных страниц в Яндексе и Гугле.
4. Исходя из семантики найти точки роста, посмотреть на каких позициях сейчас сайт, лучше ли он тех сайтов, которые в ТОПе? Если хуже — продолжать работать над сайтом.
Вопрос: Я правильно понимаю, что php и nodeJS на одном сервере, это какая-то ересь?

Лучший ответ:
Совмещают ли php (apache) и node.js на одной машине? Можно ли так делать? Или это глупо?
Совмещают, для разных сервисов (их может быть десятки-сотни на одной физической машине)
Может быть что в одном проекте используются микросервисы на разных языках (помимо тех что указаны в вопросе),
+ Python, Golang, Ruby и т.д.
В общем никаких особых ограничений нет, но разве что могут быть проблемы при поиске разработчиков на проект.

Худший ответ:
Не правильно понимаете. Можно на одной машине что угодно.
Вопрос только в том, зачем плодить "зоопарк"?

Если уже есть готовый код на Node.js или на PHP, а разрабатывать нужно на другом языке - тогда вопросов нет, иначе - всё можно сделать на одном любом языке.
Вопрос: Зачем Python Django девелоперу нужно знать SQL?

Лучший ответ:
1. Чтобы писать эффективные запросы, которые будут нормально ложиться на индексы и быстро выполняться
2. Чтобы избегать глупых ошибок, когда пишется запрос, который принципиально невозможно превратить в SQL
3. Чтобы избегать подводных камней с ORM, таких как N+1 и (хз как называется - когда ORM выгружает все данные из базы, а потом обрабатывает их на стороне приложения)
4. Чтобы не порождать дыры в безопасности.
5. Чтобы писать запросы без ORM - иногда быстрее зайти в datagrip и ввести запрос там, чем писать одноразовый скрипт.

ORM, имхо, нужна только для ускорения написания запросов и абстрагирования от синтаксиса конкретной СУБД, но не для замены SQL

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

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

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

Лучший ответ:
Просто реплейсни Members:\n на Members:\n и далее что хочешь

a = "12314142\n12313321\n1243124124\nMembers:\n12313123\n23213123"


print(a.replace('Members:\n', 'Members:\nEto ya dobavil yopta\n'))

Худший ответ:
Просто реплейсни Members:\n на Members:\n и далее что хочешь

a = "12314142\n12313321\n1243124124\nMembers:\n12313123\n23213123"


print(a.replace('Members:\n', 'Members:\nEto ya dobavil yopta\n'))
Вопрос: Как сделать чтобы пункты меню шли в две строки?

Лучший ответ:
Зависит от того каким образом ты его сверстал, но можно сделать многими способами к примеру  используй max-width, либо flex что очень удобно, если же не хочется менять код используй медиа в css указывая с какого разрешения сделать изменение

Худший ответ:
В стилях нашёл что
.nav-menu {
    white-space: nowrap; 
}
Соответственно получаем что у тебя идёт все li без разрыва. Убрав это правило можно сделать так чтоб все li помещались в размер ul/ Где уже можно контролировать это
Или сделать несколько ul и в них вмещать уже li с нужным текстом.
Это первое что пришло на ум)

Вот что получилось когда убрал правило:


как можно видеть все li уместились внутрь ul
Вопрос: Что может жрать оперативку, когда ничего не открыто?

Лучший ответ:
Windows 10 при старте 2-2.5гб отнимает под свои нужды. Потому если у вас мало озу, либо докупить озу, либо linux.
Если не интересно разбираться с новой системой, то только покупка озу.

Худший ответ:
В w10 был баг с кешированием ОЗУ
Не знаю, пофиксили ли.
Обнаружил в 19 году, когда в простое после игры занято было 50Гб+ и при запуске игры с лучами фризы страшные начинались

Посоветовали вот это
Вопрос: Какие комплектующие подойдут к RTX 3080?

Лучший ответ:
Процессор:  ryzen 5 3600X (минимум) ; ryzen 7 3700PRO / 3700X / 3800X ; ryzen 7 5800x (больше не надо)
M/b: любая (!) на B550, если не собираетесь гнать.
ОЗУ: строго из QVL к вашей материнской плате. Берите на 3600.
SSD: любой.
БП: 800Вт (тут сильно лучше не экономить)
Обязательно просторный и продуваемый корпус. Рекомендую Fractal Design. RTX3080 - очень горячая карта. Нужно подумать над ее охлаждением. Я поставил еще пару вентиляторов чтобы снизу ее обдувать.
В 100тр точно уложитесь.

Худший ответ:
Ну как рекомендует производитель: 
Минимальная мощность БП - 750 Вт. 
То есть: рекомендую купить блок питания как минимум "Бронза" 750 Вт 
Все остальное значения не имеет. То есть чем больше денег (в бюджете на комп)  тем быстрее все будет летать.
При выборе процессора внимательно смотрим на максимальную ЧАСТОТУ памяти и НЕ переплачиваем за покупку более быстрой памяти. Все равно память будет работать на частоте процессора.
Вопрос: IDE HDD на Windows 10?

Лучший ответ:
Если я верно понимаю ide-sata контроллер типа такого?


Он двунаправленный и там есть перемычка

еще момент, старые диски ide не были plug and play необходимо настроить его primary (было такое что диск не определялся если был единственным secondary на линии) и параметры его секторов перемычками на жестком диске. в общем курите спеки к нему

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

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

Худший ответ:
Сейчас я хочу заранее купить оптоволоконный кабель и провести его через пластмасовый трубопровод под землей в частном доме,Можете делать что угодно. Законом прокладка кабеля не запрещена.потом просто позвонить провайдеру для подключения. Отлично. Заплатите, провайдер протянет кабель, поставит оборудование и готово.
Непонятно при чем тут ваш кабель.
Провайдер использует свой кабель и оборудование - никакой совместимости с вашим совершенно не требуется.
Вопрос: Почему код на C++ и Python соизмеримо медлительны? Как исправить?

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

Худший ответ:
По-моему python не медленный
Вот си да.....
Вопрос: О чем Вам говорит понятие «кольцевой буфер»?

Лучший ответ:
Банальный массив длины Len
Индекс следующего элемента: Index = (Index + 1) % Len
Индекс предыдущего элемента: Index = (Index + Len - 1) % Len
Добавляем в голову, читаем с хвоста - соответственно, буфер содержит два индекса: Head и Tail.
Если голова догнала хвост - буфер переполнен.
Если хвост догнал голову - буфер пуст.

Худший ответ:
Производитель-потребитель
Вопрос: "Частая" смена работы. Нормально ли это?

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

Худший ответ:
Обычный срок в нашей отрасли ок 5-4 максимум.  Самое забавное что вы можете вернуться на более высокую зарплату чем человек сидящий на попе ровно.
Вопрос: Чем список лучше div блока?

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

Худший ответ:
Потому-что для меню существует тэг. И как еще указали выше это способствует на чтение сайта для слепых.