Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Вопрос про @Stateless бины?

Лучший ответ:
А вы вообще в курсе, как переводится Stateless?
Если у вас возникают проблемы со смешиванием данных различных пользователей, то ваш бин де-факто stateless не является.

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

Лучший ответ:
Это Очень Смешной Вопрос.
Я правильно понимаю, что картинки у тебя лежат на том же хосте что и скрипт?
Если так, то обязаьельно читать это: phpfaq.ru/paths
А заодно и phpfaq.ru/na_tanke
Впрочем, неважно на каком. Пхп должен читать картинки локально. Причем, если речь идет о поиске - то из базы.

Худший ответ:
Снова не умеем гуглить или не знаем английского.
https://github.com/tommoor/fastimage
Вопрос: Программирую на Python.Выдает ошибку,не знаю что делать?

Лучший ответ:
Вы же привели ссылку на решение. Если вам лень читать, то вот концентрат:
в начало файла добавить строку
# -*- coding: utf8 -*-

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

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

Худший ответ:
Постоплатная система расчетов.
Вопрос: Как создать консольный терминал на C++?

Лучший ответ:
Все очень просто!

Худший ответ:
Наконец то получилось. Вот код.#include <iostream>
#include <string>
#include <map>
#include <vector>
using namespace std;

bool shell_finish = false;
map<string, void*> fnMap;

vector<string> explode(string inputstring, string delimiter){
	vector<string> explodes;
	inputstring.append(delimiter);
	while (inputstring.find(delimiter) != string::npos){
		explodes.push_back(inputstring.substr(0, inputstring.find(delimiter)));
		inputstring.erase(inputstring.begin(), inputstring.begin() + inputstring.find(delimiter) + delimiter.size());
	}
	return explodes;
}
string trim(const string& str, const string& whitespace = " \t")
{
	const auto strBegin = str.find_first_not_of(whitespace);
	if (strBegin == string::npos)
		return "";
	const auto strEnd = str.find_last_not_of(whitespace);
	const auto strRange = strEnd - strBegin + 1;

	return str.substr(strBegin, strRange);
}

void my_plus(string params) {
	double sum = 0;
	vector<string> explodes = explode(params, " ");
	for (int i = 0; i<(int)explodes.size(); i++){
		sum += atof(trim(explodes[i]).c_str());
	}
	cout << sum << endl;
}
void my_exit(string params = "") {
	shell_finish = true;
}
void my_help(string params) {
	map<string, string> help;
	help["plus"] = "Use following syntax: plus <number_1> <nubmer_2> ...";
	help["exit"] = "Exits current shell session.";
	if (help.find(params) != help.end()) {
		cout << help[params] << endl;
	}
	else {
		cout << "help: command not found" << endl;
	}
}

void detect_command(string a) {
	fnMap["plus"] = &my_plus;
	fnMap["exit"] = &my_exit;
	fnMap["help"] = &my_help;
	const int arr_length = 10;
	string commands[arr_length] = { "plus", "help", "exit" };
	string cur_cmd;
	for (int i = 0; i < arr_length; i++) {
		cur_cmd = commands[i];
		if (a.compare(0, cur_cmd.length() + 1, cur_cmd + " ") == 0 || a.compare(0, cur_cmd.length(), cur_cmd) == 0) {
			string params = trim(a.substr(cur_cmd.length()));
			reinterpret_cast<void(*)(string)>(fnMap[cur_cmd])(params);
			break;
		}
	}
}

int main(void) {
	string x;
	while (!shell_finish) {
		getline(cin, x);
		detect_command(x);
	}
	return 0;
}
Вопрос: Как имитировать клик по кнопке с постоянно меняющемся ID?

Лучший ответ:
$('[id^="deny_request_"]').click();
Если эта кнопка — ваша, то нужно просто добавить неизменный data-атрибут и ориентироваться на него.

Худший ответ:
$("#tity_request_"+Постоянно разные цифорки).click();
Постоянно разные цифорки через переменную.
Вопрос: Хороший project manager или task manager?

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

Худший ответ:
youtrack к сожалению не устанавливаются в облако appfog
А его и не обязательно устанавливать, там есть incloud-версия :) Не нужно париться об апдейтах и бэкапах.
Вопрос: Возможна ли переустановка Windows Server 2012 R2?

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

Худший ответ:
Переустановка - да, не вижу причин для сомнений.
Вопрос: Специалист или магистр. Имеет ли смысл поступать на магистра(а не на специалиста) в Украине?

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

Худший ответ:
приравнять к магистрам
Научное звание "спец" при переводе понижается до бакалавр. 
Магистр - ближе к науке и есть разница в програмах обучения.
Идти на магистра имеет смысл если собраешься идти в аспирантуру и защищатьсяИли лучше пойти работать?лучше, причет с первого курсаесли нет возможности оставлять коментаритут не по инвайтам
Вопрос: Javacript: 0.03x30.00 = 0.899999. Почему? И как правильно умножить эти числа?

Лучший ответ:
Читать до просветления: "Что нужно знать про арифметику с плавающей запятой".

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

Лучший ответ:
В общем смысла нет.  На сервере на чуточку быстрее обработка. На клиенте ощутимо медленнее. Вес на  2% меньше...  Но при этом оно еще и не читабельно. BSON вместо JSON - ответ нет.
Попробовали MessagePack. Проверки скорости дали лучшие результаты, но запустить передачу на этом формате так и не удалось. Почему - неизвестно. Функция unpackb возвращает ошибку.
Итог:
Всем спасибо)

Худший ответ:
KISS +1. Думаю смысла нет. Сами используем сокеты, смысла в BSON нет.  Между серверами, да, там траффик большой. 
> Эта конвертация не внушает мне доверия. Не производительно.
Зря. Операции binary самые быстрые которые только могут быть.
Вопрос: Как получить путь к файлу?

Лучший ответ:
1. Вы не можете из php/js узнать полный путь к файлу на диске на компьютере пользователя.
Вы можете только получить сам файл (при отправке формы) и его название.
*В принципе можно получить контент файла, но опять же ничего кроме кроме отправки его к вам на сервер вы не сделаете. ( www.html5rocks.com/ru/tutorials/file/dndfiles )
2. Вы не можете из php/js записать файл на компьютер к пользователю по определенному пути.
Вы можете только инициировать загрузку файла пользователем, а он уже сам выберет куда сохранить.

Худший ответ:
phpclub.ru/detail/article/upload
а так же гуглинг php file upload
Вопрос: Есть запись в json формате, как её преобразовать в android?

Лучший ответ:
В джаве есть целые классы для работы с JSON. http://json.org/java/

Худший ответ:
Однозначно, в Java для этого инстрементов куча. Вбейте в поиск java json decode и получите кучу ответов. Вот первый.
Вопрос: Вопрос по PHP, что обозначает эта запись?

Лучший ответ:
Это переменная переменной.{ ... } стандартный способ написать в переменной что угодно, если интерпретатор не может распарсить ее в лоб. Обычно используется в двойных кавычках: echo "Цена: {$a[0]}"

Худший ответ:
Это переменная переменной.{ ... } стандартный способ написать в переменной что угодно, если интерпретатор не может распарсить ее в лоб. Обычно используется в двойных кавычках: echo "Цена: {$a[0]}"
Вопрос: Разработка десктопных приложений на HTML5/Javascript

Лучший ответ:
Можно использовать XULRunner

Худший ответ:
Возможно подойдет: Make your javascript a Windows .exe
Вопрос: Учу JS. Правильно ли я понимаю?

Лучший ответ:
Если учите JS - учите JS, а не библиотеку jQuery , которая написана на JS.
После того как выучите хотя бы основы JS, тогда смотрите в сторону jQuery.
И не надо пытаться сразу все понимать, без граблей и ошибок все равно не выучите.
learn.javascript.ru - Good Luck

Худший ответ:
1) правильно написать надо 
showHeight(".content", $(".content").height());
2) в скобках находятся аргументы функции , они видны только в функции во время её выполнения, если их конечно не записать в переменные
Вопрос: Где взять спецификации корпуса apple устройства?

Лучший ответ:
То, что вы ищете: https://developer.apple.com/resources/cases/Case-D...

Худший ответ:
попробуйте поискать патент на устройство. По идее там все спецификации есть.
Вопрос: Как создать gif анимацию, имея html/css анимацию?

Лучший ответ:
1. Можно попробовать решить проблему css хуками.
2. Для снятия gif можно воспользоваться допустим программой GifCam
3. Ну а также можно сделать gif в Gimp 2. Вот урок

Худший ответ:
Записать изображение с экрана в GIF-файл легко можно с помощью ScreenToGif.
Продолжительность и порядок кадров легко можно менять с помощью встроенного редактора.
Вопрос: Каков ответ логической задачи?

Лучший ответ:
Задача вполне банальна для собеседований (спрашивали аналогичное в Яндексе пару лет назад, только про стакан и размножающиеся бактерии, но сути не меняет). Ошибка в постановке задачи. Если бы в самом вопросе четко звучало, что каждый день количество бумаги увеличивается вдвое, то вполне логичен ответ, что половина будет на n-1 день, так как количество бумаг в последний день N равно x, а в предпоследний x/2 (чтобы при увеличении вдвое получилось x).

Худший ответ:
Я бы ответил ,что каждый день стопка бумаг это теоретически половина от чего то)))
P.S А можно так,  половина бумаг буде каждый предыдущий день.
Вопрос: Ноут перегревается до запуска ОС

Лучший ответ:
а) как вариант (правда, в жизни пока ни разу не встречал) — разгерметизация теплотрубки (возможно не резко, а постепенно она опустела)
б) при замене термопасты криво поставили радиатор или что-то попало между радиатором и медной пластиной радиатора*
в) в биосе включен режим performance (но это маловероятно и всё-равно не объясняет отрубание ноута)
г) ничего не сказано звук вентилятора — возможно он и гудит (громче или тише), но на самом деле входит в резонанс, из-за чего его скорость сильно падает и он вместо 2000..2500 об/мин вращается только 400..500 (при этом может вибрировать и издавать звуков даже больше, чем при 2500) — такое было часто и именно с ноутами — смазывание густой смазкой или под замену

* у мну был такой случай — попала алюминиевая крошка от тюбика и проц Athlon 2500+ отрубался по защите (мать Soltek 75-drv5) чуть ли не через пару секунд после старта.

Худший ответ:
Может не в температуре дело, а в батарее? Включаете с ней или отдельно?
Вопрос: Анонсировать свободный проект

Лучший ответ:
Вообще какой-то пространственный вопрос.

В чём конкретно проблема?

Можно написать очень просто:
Привет, я занимаюсь разработкой $projectname. Проект написан на $language_name.
$projectname представляет из себя $description.
Я начал данный проект так как другие проекты, такие как $analogues_list меня не устраивали по следующим причинам: $reasons_list.
Мой $projectname имеет следующие преимущества перед существующими аналогами: $features_list.

Если вас заинтересовал мой проект, вы можете присоединиться к разработке.
Адрес проекта: $url (ну а там уже {git,svn,hg,etc}, wiki с описанием, описание используемого в коде Coding Style, документация по коду сгенеренная, например, Doxygen ну и т.д.)

Худший ответ:
Полагаю информацию о проекте ;-)
Не понимаю, что вы хотите услышать в ответ.
Вопрос: Как вызвать функцию из другого файла python если файлы находятся в разных папках?

Лучший ответ:
from test.test import func_name
При этом в папке test должен быть файл __init__.py

Худший ответ:
Вот так:
stackoverflow.com/questions/67631/how-to-import-a-...
Вопрос: Слетает активация OEM-Windows на ноуте

Лучший ответ:
> Кто-нибудь в курсе каким-образом можно решить этот вопрос в свою пользу?
Пробуйте активировать по телефону. Тут кроме микрософта никто не поможет.

> Возможны ли варианты что я действительно не имею прав на винду в данной ситуации? 
Да. Как вариант — человек купил ноут и «отказался» от предустановленного софта, наклейка могла сохраниться.
Если там была enterprise — вполне возможно закупался для конторы, корпоративка честная и поэтому оем-ка с наклейки нелегальна.
Еще вариант — ноубтук был битый и ему меняли корпус, наклейка досталась по наследству:)

Худший ответ:
промазал [deleted]
Вопрос: Порт E1 в качестве Ethernet?

Лучший ответ:
Нет, хотя бы потому, что если верить Интернету, то там используется коннекторы RJ48 а в них — 10 жил:) не говоря уже о разной модуляции, кодировании и логики. Если вам нужен еще один Ethernet порт, купите Switch с VLANами и используйте Sub интерфейсы

Худший ответ:
Хотя бы прокомментировали.
Вопрос: Не работает субдомен с www?

Лучший ответ:
Apache или nginx?
Конфиг покажите.
А так это пальцем в небо.

Худший ответ:
На хостинге сделать rewrite url вариант?
Вопрос: Бесплатный движок для создания игр?

Лучший ответ:
unity.https://ru.wikipedia.org/wiki/Unity_(игровой_движок)

Худший ответ:
unity.https://ru.wikipedia.org/wiki/Unity_(игровой_движок)
Вопрос: Сменить кодировку текста pdf

Лучший ответ:
Нашёл решение для моих случаев:
gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dSAFER  -sOutputFile=output.pdf input.pdf
После этого у output.pdf невероятным образом появляется верная кодировка.
В Windows исполняемый файл должен называться gsw32c, gswin32c, или тоже gs.

Худший ответ:
У вас текст в кодировке CP1252 (слово «Стохастический»). Вам нужно вытащить весь текст из pdf, изменить кодировку и снова сохранить в pdf. Форматирование скорее всего потеряется, я не спец. Возможно, как-то можно преобразовать кодировку в каком-либо редакторе pdf.
Вопрос: Отдельные CSS стили для каждого браузера

Лучший ответ:
Если вариант с несколькими CSS для Вас будет самым простым - его и делайте. Различия по браузерам можно разрешить на уровне веб-сервера. И nginx, и apache умеют парсить HTTP-заголовки, а значит, смогут определить user-agent, который в них передается, и отдать нужный css-файл. Это практически не повлияет на серверную нагрузку (ничуть не более mod_rewrite) и не повлияет на объем загружаемых пользователем данных, поскольку отдаваться будет всегда только нужный файл.

Худший ответ:
а ты не пробовал использовать префиксы?@-webkit-keyframes blinkpulse { }
@-moz-keyframes blinkpulse { }
@keyframes blinkpulse { }

-webkit-animation: ... ;
-moz-animation: ... ;
animation: ... ;
тогда вся анимация у тебя будет кроссбраузерная
Вопрос: 4K (3840x2160) или Full HD (1920x1080) если монитор 1440х900

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

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

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

Худший ответ:
Если есть такие вопросы, значит нет денег на нормальный хостинг.
Есть большое количество очень крупных изданий которые работают на WordPress. Вам это вполне подойдет + кеширование и проблем нет. А если и комменты прикрутить от disqus.com то вообще красота.
Можно сделать на livestreet или pligg.com но в первой сложности с администрированием, во втором локализация с сообщество.
Вопрос: Как правильно использовать связь таблиц?

Лучший ответ:
1 Я называю таблицы в единственном числе, как и модели. 
пример
blog_post
blog_category
blog_category_many или по фен-шую blog_category_pivot   в общем любая many_to_many таблица заканчиваться на pivot
И еще, если это таблица относиться к блогу вначале всегда будет идти будет blog_ , так легче потом ориентироваться по БД.
Связи как меня учили манахи, которые часто используються в моделях я выношу в trait
UserRelationshipUserId
User что я в этой связи получаю Relationship - говорит мне что за трейт UserId по какому полю я получаю User модель
Большая чать роли как говорил мне сенсей являеться поддержка phpdoc  в комментариях для IDE<?php
namespace app\models\traits;
use app\models\User;

/**
 * Class UserRelationUserId
 *
 * @package app\models\traits
 * @property \app\models\User $user
 */
trait UserRelationUserId
{
	/**
	 * Relationship get user
	 * @return \yii\db\ActiveQuery
	 */
	public function getUser()
	{
		/**@var \yii\db\ActiveRecord $this */
		return $this->hasOne(User::className(), ['id' => 'user_id']);
	}
}
4 Обычно из CRUD я использую только генерацию модели,  так как ручное создание кода модели с нуля тратит мою чакру в пустую)

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

Лучший ответ:
Тензометрия
Можно начать с опытного макета на arduino.

Худший ответ:
Гуглить нужно изменение индуктивности, сопротивления, емкости.
Механическая работа крутит ползунок потенониметра, вставляет пластины, м5яя между ними заряд или помещая сердечник в катушку изменянт ток индукции.
Кроме того никто не отменял шаговые энкодеры:  чем болше вес, тем сильнее сожмется пружина и тем больше шагов сделает энкодер.
Вопрос: Wireshark не видит сетевой интерфейс в Ubuntu 14.04, что делать?

Лучший ответ:
Сначалаsudo dpkg-reconfigure wireshark-common
Там согласиться с тем, что не только root должен иметь возможность снифить пакеты.
Потом добавить себя к группе wiresharksudo adduser $USER wireshark
(после чего не забыть перелогиниться!)
Профит.

Худший ответ:
Скорее всего нужны права root.
Вопрос: Существует ли какие-либо стандарты ответов в restful?

Лучший ответ:
Есть вполне стандартные статус коды:
401 - нужно авторизоваться. В этом случае на клиенте мы должны попросить чувака ввести логин и пароль
403 - у вас нет прав на это действие. Например юзер пытался удалить что-то или сделать что-то на что у него нет прав.
422 - не могу обработать сущность. То есть если у нас не валидны данные в запросе, пароль там или имейл не ввели и все такое.
404 - пользователя с таким именем пользователя и паролем не существует.
Добавлять ли в тело ответа месседж с пояснением проблемы - решать вам. По хорошему стоит добавлять ибо тогда мы можем рулить сообщениями об ошибках с сервера. Ну или предоставлять клиенту оные. Но в любом случае разруливать ошибки нужно при помощи статус кодов.
restpatterns.org/HTTP_Status_Codes

Худший ответ:
Мое мнение. (с исправлениями Сергея Протько, спасибо ему)
Когда гость запрашивает ресурсы, требующие авторизации - возвращать 401.
Когда гость авторизуется с неправильными данными - 422.
Когда юзер запрашивает ресурсы, но нет нужных прав доступа - 403.
Когда нет нужного csrf/api токена при запросе - 422.
И давать пояснения. Тут уже на Ваш выбор. Главное, опишите все моменты в документации, если кто-то еще будет  пользоваться.
Вопрос: Зачем мне нужен Docker?

Лучший ответ:
Зачем нужен Docker?
Лично я использую:
 - Docker для управлением окружением (как для dev так и для prod)
 - Docker-distribution для хранения собранных образов контейнеров
 - Docker-compose для оркестрации контейнерами на целевой машине (для dev это моя машина, для prod удаленный сервер)
 - Docker-machine для управления удаленными машинами (оно само поставит докер куда надо и все такое)
 - Docker-swarm (пока не использую, небыло необходимости) - для оркестрации контейнерами в класстере, с failover и тд.. Так как docker-machine можно настроить так что бы тот еще и создавал инстансы (например дроплеты на DO) то можно организовать полностью автоматизированную систему с определенным уровнем отказоустойчивости.
В целом для деплоя можно вообще по SSH не заходить. Дико удобно, особенно когда много проектов и много серверов.

Худший ответ:
Если вы задаете вопрос «Зачем мне нужен XXX» значит XXX вам не нужен. Docker нужен для того, что бы с ним играть, очевидно вы предпочитаете другие игрушки.
Вопрос: Как и чем быстрее всего начать зарабатывать на программировании/веб-программировании?

Лучший ответ:
Забудь про фриланс, сколько бы про него не говорили, это биржа ДЕШЕВОЙ рабочей силы со всеми вытекающими последствиями в виде кидалова, низкой зп, скучной работы, туда идут люди с серьезными проблемами вроде невозможности перебраться в город, социопатии, инвалидности, "утонченная личность", фриланс это почти всегда вынужденная мера. Вообще фриланс и стабильный заработок несовместимые понятия, просто потому что фриланс подразумевает постоянный поиск мелкой работы, никакой заказчик не будет давать большой серьезный проект фрилансеру никогда, потому что это большая ответственность, посмотрите соседние вопросы, пацики с рейтами 150баксов в час работают 10 часов в месяц, а остальное время ищут заказы, причем это люди с опытом и портфолио + отличный английский. Начинать карьеру с фриланса это 100% гарантия того что, все что можно сделать неправильно (техническая сторона), будет сделано неправильно, потому что работает, дедлайн вчера, а подсказать или сделать код ревью некому, никакие книжки тут не помогут, выбора не будет, ты либо читаешь либо работаешь. Так что не советую ввязываться в эту тему. Лучше начать работы в офисе под строгим надзором. Ну и конечно html+css+js это мало, нужно знать еще около программисткие штуки вроде систем контроля версий, багтрекеры, несколько ide/ текстовых редакторов, если это веб почти гарантированно надо иметь представления о http/https,  ООП, возможно sql. Не то чтобы для 20к месяц все это нужно отлично знать, но как минимум иметь представление, чтобы не отвлекаться. Вот по фронтэнду.  Для большой гарантии устройства на работу, как уже сказали выше, лучше сделать себе сайт, а еще лучше сделать небольшое портфолио и выложить на гитхаб, это сейчас очень модно. На изучения всего вышеперечисленного уйдет 1-2 месяца если сидеть по 8-4 часа в день примерно, свой сайт где-то неделю на разработку визитки и еще неделя на вылизывание, но оно того стоит, а в процессе поиска работы можно и на гитхаб по чуть-чуть кидать, хотя вряд ли получится много. Удачи.

Худший ответ:
Как я нашел удаленную работу. Пришел с завода, бросил все и зарегесрировался на чудо бесплатном фриланс сайте https://myjob.asia/ru/, где можно отвечать на любые проекты. Так от первое время я работал так просто отвечая на проекты и батрача на заводе. А потом пошло поехало и щас уже зарабатываю по 100 - 300 $ в месяц и в ус не дую. Попробуй и у тебя тоже получится )
Вопрос: Слетает шлюз по умолчанию, как исправить?

Лучший ответ:
Магические команды для консоли:
ipconfig /flushdns
nbtstat -R
nbtstat -RR
netsh int reset all
netsh int ip reset
netsh winsock reset
В большинстве случаев проблему с сетью чинят.

Худший ответ:
А если попробовать добавить шлюз из консоли?
route add -p 0.0.0.0 mask 0.0.0.0 w.x.y.z
где w.x.y.z ваш шлюз по умолчанию.
Консоль запускать с правами администратора.
Вопрос: Как написать хорошие спецификации для разработки чтобы избежать постоянных доработок?

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

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