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

Лучший ответ:
Лучше чем RBAC вроде ничего не придумали.
Вот реализация RBAC с кодом на примере laravel https://habr.com/post/321678/ACL - не такая удобная штука, но очень гибкая, широко использовалась раньше, да и сейчас кое-где применяется.
А вообще подходов намного больше, можно походить по ссылкам "см также" из этих статей.

Худший ответ:
Сильно зависит от технологий, используемых способой аутентификации и т.п.
Если я правильно понял вопрос, то Вам по сути нужно:Сделать список всех элементов (разделов, виджетов и т.п.)  Сделать список ролей (админ/пользователь и т.п.) Не рекомендуется ,конечно, привязываться к "телу", лучше к ролиСконфигурировать роли (какая роль имеет доступ к какому элементу)отобразить результат в (лучше древовидном) виде элементов
...но всё это настолько просто, что я сомневаюсь - правильно ли понял вопрос.
Можно копнуть фундаментальнее:
Эти самые роли длячего-то предназначены. И их функционал должен быть где-то описан. У меня это обычно описание процесса (Process Model). 
...но если Вы займётесь этим - там очень много работы.
Вопрос: Почему edge cчитает позицию при abosolute иначе, чем chrome/firefox?

Лучший ответ:
Тег a является строчным элементом и в такой ситуации по высоте растягивается не по размерам контента, а лишь на несколько пикселей (переводы строк и пробелы в коде). 
Некоторые (edge) браузеры прижмут его к верху родительского блока, а некоторые к низу.
Либо сделайте элемент .video_link блочным, либо поставте relative для .video_frame за место .video_link.

Худший ответ:
Тут явно где-то не хватает position:relative; 
video_frame вот тут попробуй
Вопрос: Есть ли переборщик символов для поиска страниц сайта?

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

Худший ответ:
Как вы их хотите перебирать?
Если так [aaaa.html, aaab.html, aaac.html...] то делается легко, определяете набор символов, длину и вперед - только сайту такое количество запросов вряд ли понравится.
Я бы посмотрел вначале информацию в sitemap.xml, robots.txt и какие страницы уже найдены/проиндексированы поисковыми системами.
Вопрос: Обновление бесплатной CMS с Android-планшета?

Лучший ответ:
Я ничего не понял! Где CMS-то установлена?! 
На Android-планшете или на сервере?!
Если на сервере - тогда обновление CMS делает с сервера обновлений, а не через планшет.
Если необходима синхронизация материалов - здесь уже нужен соответствующий клиент под Android.
Или.... я снова ничего не понял)

Худший ответ:
У вордпресса всё есть, ставьте его и не парьтесь.
Вопрос: Как создаются современные сети компаний?

Лучший ответ:
Какой сервер? Какая современная компания?
Все сети компаний создаются на основе требований. Если это небольшая контора на 20 компов, хватит и маршрутизатора. Если это контора, в которой должен быть свой централизированный учет пользователь - ставится решение на базе MS AD или LDAP или еще что-то свое.
Если это контора, у которой сеть разветвленная - есть разные офисы, которые необходимо объединить одной сетью, с единой телефонией - настраиваются и сервисы и маршрутизаторы.
Ваш вопрос не имеет смысла, потому что все зависит от.
Вы бы привели конкретную контору с конкретной технической проблемой и спросили "как лучше всего решить такую проблему".
А на общий вопрос "как быть лучше всех", ответа не будет

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

Лучший ответ:
Адрес 192.168.1.16 является  адресом из  другой сети.
Если все маршруты корректны, то пакет прилетит на маршрутизатор, откуда  во вторую сеть к хосту с нужным IP, после чего запрашиваемый хост также  пошлёт ответ на маршрутизатор, который отправит пакет-ответ  нужному хосту.

Худший ответ:
Все зависит от настроек роутера/маршрутизатора.
Вопрос: Какими способами можно заблокировать https (youtube, vk) в локальной сети?

Лучший ответ:
Создаем regexp с блокируемыми url
/ip firewall layer7-protocol
add name=gvno regexp="^.*(odnoklassniki.ru|odkl.ru|ok.ru|vk.com|vkontakte.ru|vkontakte.com|durov.ru|fb.com|facebook.com).*\$"
Добавляем правило для файрвола (должно быть выше разрешающих правил для цепочки forward)
/ip firewall filter add action=reject chain=forward layer7-protocol=gvno protocol=tcp reject-with=tcp-reset

Худший ответ:
squid transparent https
vk можно весь датацентр заблокировать, а не отдельный IP.
хотя, по уму, это решается административными мерами, так как:
у людей останутся их личные смартфоны, которым vk доступен через 3G.
смотреть видео можно не только на Youtube, антипираты борются с видеосайтами и не могут побороть, а вы думаете сможете?
может, стоит от обратного:
оставить только то, что нужно для работы? а все остальное закрыть?
Вопрос: Как исправить ошибку при подключении к MySql через JDBC?

Лучший ответ:
Скорее всего есть какой-то более корректный путь, но я лечил так:"jdbc:mysql://[хост]:[порт]/[бд]?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"

Худший ответ:
Там же написано в чем проблема, таймзоны MSK нет или установлено более одной таймзоны.
Сконфигурируйте JDBC через setTimezone или mysql
Вопрос: Как верстают такой фон?

Лучший ответ:
И вообще может уже что-то появилось, чтобы не ставить жирные картинки в качестве бекграунда?
Таки да, называется SVG. Там только сам квадрокоптер скорее всего жирный, а круги с градиентами вполне можно в векторе сделать - они вообще ничего занимать не будут.Как верстают такой фон?
Можно по-разному подходить к вопросу. Как вариант три слоя:
1. Левый контент, у него фон в виде левого круга (чтобы не париться с его размером на разных размерах экрана - ведь там по идее контент должен помещаться в круг). Тут главное все аккуратно расположить и не забывать про critical css.
2. Коптер (поскольку он жирный, его можно подгружать асинхронно и выдвигать с помощью CSS-анимации из-за правого края экрана - будет и красиво и производительно; я бы еще какой-нибудь эффект к тексту добавил, но это уже другая история). Его размер видимо должен зависеть от ширины экрана и размера контента слева. Надо заранее сообразить, как это все должно адаптивиться.
3. Меню, которое справа вверху, оно должно быть поверх коптера (опять вопрос про адаптивность).
4*. Фон, который самый-самый большой фон можно просто поставить на background у хидера. Поскольку он в векторе, его можно сделать гораздо выше, чем на картинке, чтобы опять же не париться, что он вылезет из скругления внизу секции на телефоне. Само это скругление можно сделать тысячей способов, на тостере уже не раз спрашивали.
Такой подход требует больше времени, чем просто поставить все на фон у одного элемента, но и результат будет немного другого уровня.

Худший ответ:
В background есть возможность задать сразу несколько фоновых изображений. В вашем примере думаю лучше будет сделать так: круги в svg, квадрокоптер соответственно картинкой. Есть ещё такая особенность свойства background, чем "позднее" задан фон тем он ниже будет. 
https://codepen.io/anon/pen/EEOrqe
Вопрос: Как заставить 1С 8.3 (зуп 3.1) быстрее работать с usb-флешки?

Лучший ответ:
Заменить флешку USB2 на USB3. Научиться находить порты USB3. При замени флешки - выбрать наиболее скоростную модель. Возможно заменить флешку на полноценный SSD с USB-переходником.
Попробовать попереключать в 1С режимы - тонкий клиент, толстый клиент.
Не забывать обновлять движок 1С.Очистить кэш 1С, тот что в профиле пользователя. После очистки кэша на второй запуск скорость должна возрости.

Худший ответ:
Как заставить 1С 8.3 (зуп 3.1) быстрее работать с usb-флешки?Работать с USB  флешки это вообще плохо, базы будут биться.
Если уж совсем никак возьмите вместо флешки нормальный HDD или SSD в USB3 боксе. И бэкап постоянный.
Но лучше разместить базы на сервере и организовать удаленный доступ.
По поводу ускорения -
1)Скорость чтения/записи с флешки  - высоких показателей там не надо, но все должно быть в пределе разумного, на уровне среднестатистического HDD.
2)Количество оперативной памяти на машине с которой будут работать - не менее 8гб
3)Система на SSD, на том компьютере с которого будут работать.
4)Держать базы в порядке, регулярно проводить обслуживание, в частности шринк делать.
Вопрос: Как подружить wordpress multisite и платную тему?

Лучший ответ:
КЭП: Задайте этот вопрос автору купленной ВП темы

Худший ответ:
мультисайт - это не один сайт с разными страничками. а несколько сайтов объединённых общей консолью и доменом (оочень грубо говоря)
Поэтому если у Вас тема на 1 сайт - она будет доступна только на одном сайте.
Вопрос: Как начать изучать AngularJS?

Лучший ответ:
довольно давно начинал с интерактивного курса https://www.codecademy.com/learn/learn-angularjs
но сейчас все монетизировали уже)
погуглите интерактивные курсы сами, наподобие https://www.codeschool.com/courses/shaping-up-with...
а еще лучше, если поставите реальную задачу и вооружившись гуглом и бест практиками начнете творить сами :)
https://github.com/johnpapa/angular-styleguide/blo...

Худший ответ:
С понимания принципов AJAX'а
Вопрос: Замена файловой шари — что посоветуете?

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

Худший ответ:
Еще из облак довольно популярен Seafile https://www.google.com/url?sa=t&source=web&rct=j&u...
Вопрос: Как в python отследить изменился ли параметр в классе?

Лучший ответ:
Конечно можно. Нужно использовать дискрипторы, в очень облегченном виде что то типа:class Notepad:
    def __init__(self):
        self._is_change = False
        self.code = None

    def __setattr__(self, key, value):
        if key is 'code' and value is not None:
            self.__dict__['_is_change'] = True
            self.__dict__['code'] = value
        else:
            self.__dict__[key] = value

    def save(self):
        print('Тут вот сохранили данные на диск')
        self._is_change = False

    @property
    def is_change(self):
        return self._is_changenote_text = Notepad()
print('is_change {}'.format(note_text.is_change))
print('Изменили данные в self.code')
note_text.code = 'bla bla'
print('is_change {}'.format(note_text.is_change))
note_text.save()
print('is_change {}'.format(note_text.is_change))
на выходе получимis_change False
Изменили данные в self.code
is_change True
Тут вот сохранили данные на диск
is_change False

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

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

Худший ответ:
Вы мыслите в правильном русле.... но все еще далеко от совершенства.
каждое действие должно делаться в одном методе (функции для PHP)
Ваш код должен повторять логику алогритма или блок схемы, и там где присутствуют переменные, все выносить в переменные класса по возможности..<?php
// хендлер реализаций
class WaybillHandler
{
	protected $debug	= true;

	protected $db		= null;
	protected $socket	= array();
	protected $structure= array();
	protected $doc		= null;
	protected $crmData	= array();
	
	public function __construct($waybill)
	{
		$this->db = DBPool::me()->getLink();
		$this->doc = $waybill;
		
		self::Handler();
	}
	
	private function Handler()
	{
		$db = $this->db;
		
		// Если реализация не привязана к счету, то ничего не делаем
		if ($this->doc['ДокументОснование']['#type'] != 'jcfg:DocumentRef.СчетНаОплатуПокупателю') {
			return;
		}
		
		$this->structure = Utils1c::prepareStructure($this->doc,'waybill');
		
		// Усли реализация поставлена на удаление, то автоматически будет отменена проводка
		// либо мы вручную убрали проводку, а значит мы должны удалить запись из CRM
		if ($this->doc['Posted'] == false) {
			$this->structure['debug'][] = "Реализация не проведена, делаем попытку удаление данных"." (".__LINE__.")";
			self::deleteWaybillFromCRM();
		} else {
			if (self::isRelatedToOurInvoice()) {
				self::findDataFromCRMforWaybill();
				if (count($this->crmData)) {
					self::deleteWaybillDataOnDeleteInERP();
					self::insertMissingWaybillDataToERP();
					self::compareWaybillDataBetweenCRMandERP();
				} else {
					self::insertWaybillDataOnNewRowInERP();
				}
				self::updateStructureFinally();
			} else {
				$this->structure['debug'][] = "Мы не нашли связь между этой реализацией и счетами в CRM"." (".__LINE__.")";
			}
		}
		if (!$this->debug) {
			$this->structure['debug'] = array();
		}
		$this->socket[] = Driver1c::SOCKET_MARKER.json_encode($this->structure, JSON_UNESCAPED_UNICODE);
		
		new WebSocketClient($this->socket);
		
		return;
	}
}
Вопрос: Как правильно работать с потоками?

Лучший ответ:
необязательно создавать глобальную переменную output_message
в Syncronize можно передать анонимную процедуру, тогда сообщение можно хранить в локальной переменной процедуры потокаprocedure TMyThread.Execute;
var 
  Msg: string;
begin 
  ... 
  Syncronize(procedure() begin 
    Show_message(Msg); 
  end);
end.
P.S. так объекты лучше не освобождать file_list.Destroy;
лучше использовать Free или FreeAndNil file_list.Free; 
// или
FreeAndNil(file_list);

Худший ответ:
Участвуя в ответе на вопрос Как исправить ошибку listerror list index out of b... хотел предложить использовать поток для отдельного файла. Каждый файл будет обрабатываться отдельным потоком.Форма:unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
  private { Private declarations }
  public  { Public declarations }
  end;

var Form1: TForm1;

implementation

{$R *.dfm}

uses Unit2;

procedure TForm1.Button1Click(Sender: TObject);
  var fl: String;
      tr: TSome;
begin
  fl := ExtractFilePath( Application.ExeName ) + GUIDToString( TGUID.NewGuid ) + '.thr';
  tr := TSome.Create( fl );
  ListBox1.Items.Add( fl );
end;
end.Поток:unit Unit2;

interface

uses  System.Classes, System.SysUtils;

type
  TSome = class(TThread)
  private   { Private declarations }
    FFile: String;
    FMess: String;
    procedure UpdateForm;
  protected
    procedure Execute; override;
  public    { Public declarations }
    constructor Create( sFile: String );
  end;

implementation

uses Unit1;

constructor TSome.Create( sFile: String );
begin
  FFile := sFile;
  inherited Create( False );
end;

procedure TSome.Execute;
  var outfile: TextFile;
      tr: String;
begin
  while not Self.Terminated do begin
    tr := IntToStr( Self.Handle ) + ' - '+ DateTimeToStr( Now ());
    AssignFile( outfile, FFile );
    Rewrite( outfile );
    Writeln( outfile, tr );
    CloseFile( outfile );
    Self.FMess := tr;
    Synchronize( UpdateForm );
    Sleep( 1000 );
  end;
end;

procedure TSome.UpdateForm;
begin
  Form1.ListBox1.Items.Add( Self.FMess );
end;

end.
Вопрос: Как прибавить значение css с помощью jQuery?

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

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

Лучший ответ:
Вот как используя документацию  VK мне удалось реализовать асинхронную загрузку на примере виджета для группы:<script type="text/javascript">
  window.vkAsyncInit = function() {
    VK.init({
      apiId: ID_Вашего_Приложения,
      onlyWidgets: true
    });
    VK.Widgets.Group("vk_groups", {mode: 1, no_cover: 1, width: "250"},  ID_Вашей_Группы); //указывается ID группы лишь потому что это пример
  };

  setTimeout(function() {
    var el = document.createElement("script");
    el.type = "text/javascript";
    el.src = "https://vk.com/js/api/openapi.js?156";
    el.async = true;
    document.getElementById("vk_groups").appendChild(el);
  }, 0);
</script>
<!-- VK Widget -->
<div id="vk_groups"></div>
Где:ID_Вашего_Приложения - необходимо создать приложение тут и перейдя в настройки получить тот самый ИД (без него работать асинхронно не будет)ID_Вашей_Группы - цифровой ID вашей группы лично я смотрел тут

Худший ответ:
А как насчет извращений? Делаете iframe внизу тэга body, а внутри iframe в head засунуть скрипты?
Вопрос: Как исправить кракозябры в сообщениях об ошибке в pyodbc/pymssql?

Лучший ответ:
Вопрос задан более двух лет назад, и тем не менее сегодня я тоже получил кракозябрами описание ошибки от виндового MSSQL сервера. Проблема решилась энкодингом и декодингом строки:try:
    conn = pyodbc.connect(...)
except Exception as err:
    print(err.args[1].encode("cp1252").decode("cp1251"))
Откуда я взял cp1252 и cp1251? Скопировал кракозябры из консоли и расшифровал Декодером.

Худший ответ:
Стоит попробовать переключить кодировку (chcp unicode   или chcp 65001)
Вопрос: Какие на данный момент есть годные учебные материалы (книги и интерактивные курсы) по C#?

Лучший ответ:
Хорошая книга Albahari "C# In a Nutshell"

Худший ответ:
Ничего себе у вас разгон. Сами говорите, что не работали с C#, но уже метите в интерпрайз.
И причём, в интерпрайзе C# не один и сильно бодается с Java за популярность.
Тороговых ботов можно писать и на питоне.
Советую начать не с книги, а с сайтов по обучению C#. Например https://professorweb.ru/my/csharp/charp_theory/lev...
Вопрос: Как исправить ошибку «object has no attribute» в Python?

Лучший ответ:
cv2 (что бы это ни было) не имеет атрибута SURF, который вы пытаетесь вызвать.

Худший ответ:
Помогла переустановка OpenCV
Вопрос: Можно ли по 2-ум IP-адресам определить маску сети?

Лучший ответ:
Я живу в квартире 14, мой сосед живет в квартире 32.
Вопрос - сколько всего квартир в доме?

Худший ответ:
Можно было бы опеределить маску если бы один из этих адресов был бы широковещательным, а второй первым
что означает все адреса с 192.168.0.1 по 192.168.255.255 имеют маску 255.255.0.0
Соответственно по широковещательному можно определить максимальную
Вопрос: Как сделать временную таблицу с одинаковыми данными?

Лучший ответ:
небольшая ремарка №3: а нафига вам вообще cross join понадобился?SELECT 'Economy' FROM generate_series(1,10);

Худший ответ:
Небольшая ремарка к ответу DevMan :SELECT
  cols.*
FROM 
  (SELECT 'Economy'::character varying (25)  economy) AS cols
CROSS JOIN
  generate_series(1,10);
Я изменил SELECT 'Economy'::character varying (25)  economy, чтобы не было ?column?, ну и тип явный поставил.
Вопрос: Ryzen или Xeon?

Лучший ответ:
Xeon E5-2620 древний и с низкой частотой.

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

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

Худший ответ:
Возможно поможет https://github.com/PixelsCommander/Download-File-JS
Вопрос: Зачем нужен модуль assert?

Лучший ответ:
Что мешает написать в google - npm NAME и узнать про любой модуль в первой ссылке, которая обычно ведет на npm сайт?
Например, npm assert => https://www.npmjs.com/package/assert => This module is used for writing unit tests for your applications, you can access it with require('assert').
в переводе: модуль используется для написания unit-тестов.

Худший ответ:
Для тестов, наверное
Вопрос: Какой из представленных ноутов лучше подойдет для повседневных задач?

Лучший ответ:
Ну 4 гигабайта для Фотошопа и VS это не вероятно мало, сожрут и ещё попросят.
Вам нужно минимум 8 + хороший процессор для комфортной роботы.
Процессор в Фотошопе особенно требовательная штука.
в WoT'е не меньше значит CPU(Процессор) чем GPU(Видеокарта).
Под ваш бюджет подойдет: HP 255 G5 (Z2Z31ES) Black.
Проблема в том что бы в ноутбуке за 18к с 8 гигами ОЗУ был нормальный процессор и как вы понимаете нормального процессора там не будет.
Жертвовать 4 гига для процессора бессмысленно ибо будет только медленнее работать.
Поэтому HP 255 G5 (Z2Z31ES) Black ваш единственный вариант который хоть как то потянет это все с натяжкой и небольшими фризами.

Худший ответ:
ноут на amd будет по интереснее,
вот неплохой вариант в маркете
https://market.yandex.ru/product/1720031578/spec?t...
винду ставьте и работайте
Вопрос: Как из встраиваемого приложения crm битрикс 24 передать id сделки?

Лучший ответ:
При открытии приложения из места встраивания в обработчик улетает $_REQUEST, в котором лежат параметры PLACEMENT => CRM_DEAL_LIST_MENU (место встраивания) и PLACEMENT_OPTION => {"ID":"123"} (id элемента).
Тут подробней: https://dev.1c-bitrix.ru/learning/course/index.php...
Еще есть метод в JS-библиотеке BX24.placement.info() - также возвращает место встраивания и ID.

Худший ответ:
Регистрировал поле через "userfieldtype.add" к сожалению PLACEMENT в $__REQUEST нету, а метод BX24.placement.info() отдает null с чем может быть связано ? у кого есть решение подобной проблемы ?
Вопрос: Какие минимальные знания нужны для технической реализации интернет-стартапа?

Лучший ответ:
Знание особенностей различных языков программирования и БД на уровне, достаточном, что бы принять или отклонить предлагаемую технологию.
Особенности рынка труда, найма и работы в IT
KPI разработчиков
Методологию работы (как ставить задачи, контрольные точки, будете ли agile, scrum использовать)
Основы тестирования приложений (хотя бы на уровне, что бы спросить: у нас есть unit-тесты? в какой они папке? какой покрытие?)
Основы безопасности (основные угрозы: взлом, ddos и как от них защититься)
Ну вот крупными мазками как-то так. Главное найти техдира, которому вы верите, если вас техдир будет обманывать, то вам почти ничего не поможет.

Худший ответ:
Для технической реализации стартапа у Вас есть 2 пути:
1) Найти партнера/сотрудника (далее компаньон) для разработки технической части проекта
2) Самому разобраться в технической части проекта
Оба подхода хоть и оттакливаются от одного и того же минимального набора знаний, но являются противоположными.
Если Вы ищите компаньона, то Вы должны в первую очередь быть в нем уверены, потому что ПОЧТИ ВСЮ техническую часть Вы отдадите ему. Ваша задача - идеи, маркетинг, бизнес и т.п. Вы обсуждаете с ним чего хотите, а у него уже болит голова как это сделать чтобы всем было хорошо
Если Вы хотите все контролировать, то увы, но Вам придется разобраться во многих тонкостях работы IT-специалиста (языки программирования, технологии, базы данных и т.п.)
Единственная метрика которая у Вас есть достаточно проста и логична - контролировать качество полученного продукта не на уровне кода или архитектуры, а на уровне бизнес-смысла. То есть - какая разница какой язык программирования или базу данных вы используете, если Ваше складское ПО не может отгрузить товар. То есть Вы должны опираться на то, что использует конечный потребитель, и проверять именно его удобство и функциональные возможности