Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Конкуренция на фриланас бирже?

Лучший ответ:
Все очень просто. Даже примитивно. И вполне очевидно.
Чем дороже - тем лучше. Чем дороже - тем меньше конкуренция.
Есть только такой недостаток человеческой психики - 
когда у тебя есть миллион исполнителей готовых сделать за еду,
но ты даже головой понимаешь, что это нереально,
то, все равно, жаба говорит - давай попробуем за 3 копейки.
Самая большая проблема - если заказчик не специалиста вообще.
Тогда выбрать адекватного исполнителя сложно.
Я вот специалист, заказывал работы по своей сфере.
Я точно знаю что работа занимает довольно много времени 
и человек, квалификация которого позволяет сделать эту работу,
не будет работать даже в провинции дешевле Х денег,
но я все равно получал множество предложений
с обещаниями сделать круто в 10 раз быстрее, чем это физически возможно.
Ну и разумеется, за деньги в 10 раз меньше.
На самом деле эту работу невозможно выполнить на таких условиях было.
Тем не менее жаба моя очень сильно мешала подумать.
Даже не смотря на то, что я являюсь специалистом в этой сфере и прекрасно понимаю,
что все эти оценки - мягко говоря, до идиотского оптимистичны.
Вывод:
Да, конкуренции полно.
Да, предложений много.
Реальных квалифицированных исполнителей - крайне мало.
То, что там что-то тебе предлагают,
в 99% означает, что тебе или не выполнят вообще
Или выполнят на крайне некачественном уровене.
Ответ очевиден - только деньги.
Квалифицированные специалисты несмотря на "типа конкуренции" имеют очереди из работ.
И цен не снижают 
;)
Вся эта конкуренция - эффемерная.
Это больше - просто информационный шум.
Да, неудобно пробиваться до заказчика или искать адекватного исполнителя.
То есть эта "типа конкуренция" - просто мешает сосредоточиться, встретиться заказчику и исполнителя.
Фактически - конкуренции нет.
Есть еще одна ошибка заказчика.
Её вы можете почитать на форумах где заказчики жалуются, что невозможно найти специалиста.
Фактически это выглядит так: "выбрал первого попавшегося за 3 копейки, тот ничего не сделал,
выбрал второго попавшегося за 3 копейки, тот ничего путного не сделал,
выучился на своих ошибках, выбрать третьего попавшегося за 10 копеек, тот ничего не сделал,
выучился на своих ошибках, взял по рекомендации специлиста, тот захотел 100000 рублей, совсем оборзел, отказался,
выбрал первого попавшегося за 100 рублей, тот сделал вид что делает работу, не более того"
Ну вот такая вот конкуренция.
Да, жаба заказчика очень мешает понять, что фактически нет работников за 3 копейки.
Они не реальные.

Худший ответ:
"Здравствуйте, очень заинтересовало ваше предложение, готовы приступить. Контакты в ссылке" - вот по таким сообщениям тяжело определить квалификацию. А сейчас тут начнется холивар на тему "заказчики уроды" и "школьники уроды"
Вопрос: Есть ли смысл верстки под 320px на сегодняшний день?

Лучший ответ:
320 пикселей это айфон 4, 5, на пример. Ну и многие андроид девайсы до 5 дюймов. Это без учета device-pixel-ratio, как уже отмечали. 360 пикселей у больших андроид смартфонов, на пример у галакси 7. Так что да, имеет смысл.

Худший ответ:
Есть смысл делать адаптивную верстку, и конечно же поддерживать даже 320px. Вдруг на часах будут браузеры делать. Мало ли что этим компаниям в голову прийдет.
Вопрос: Как записать данные из input полей в массив и сохранить их для роботы с другой функцией?

Лучший ответ:
Сейчас вызов console.log() происходит до того, как вы нажали на кнопку, а при нажатии на кнопку ничего не выводится.
Перенесите его вот сюда:

Худший ответ:
Falseclock , Stalker_RED Большое спасибо за ответ, но мне хотелось еще узнать, почему я не могу использовать эти данные для работы в другой функции и вывести результат работы функции в третий input? То есть при нажатии, данные работы функции не выводятся в 3ий input.X<input id='xArray'>
Y<input id='yArray' >
<button id='button'>Get results</button>
result<input id='result'></input>var button = document.getElementById('button'),
    xArr = [],
    yArr = [];

document.getElementById('button').onclick = function() {
        xArr = document.getElementById('xArray').value.split(',');
        yArr = document.getElementById('yArray').value.split(',');
};


function discretization(x, y) {
  //some code
}

window.onload = function() {
    document.getElementById('result').innerHTML = discretization(xArr, yArr);
}
Вопрос: Как оптимально настроить сервер 1С?

Лучший ответ:
> Кластер из 2 серваков. С подобным не сталкивался, насколько возможно с моим бюджетом собрать производительное решение?
Кластер из двух серверов это не оптимально. Должен быть кворум. (те три)
Для кластера необходимо еще и СХД и тогда точка отказа будет эта самая СХД.
Это конечно самый правильный вариант был бы делать кластер, но очень дорого.
Клиентов по своему опыту, хорошо загонять в терминальные сессии. Тут надо смотреть насколько нагружается сеть 1С и насколько все тормозит.
SSD+hdd лучше использовать в гибрид по технологии storage space, там же можно и raid сделать программный. 
Вполне работоспособная вещь.
В итоге я наверно бы сделал так, а многие тут покрутят у виска и скажут что я псих и полно потери производительности. Но с вашими 50 человек и больше это мелочи.
Взять хороший сервер. Под систему взять диски 256gb в кол-ве трех. Сделать зеркало + hot spare.
Остальное добить SSD+HDD из расчета , что примерно на 1 tb данных, лучше взять 256gb кеша SSD. (хотя бы).
Используя Microsoft StorageSpace сделать Raid+кеширование. 
SSD лучше взять из расчета на зеркало.
Создать две машины виртуализации на Hyper-V. Зачем ? 
1) Удобнее делать backup целой машины сразу
2) Если все умрет, вам проще будет развернуть эти машины где угодно, просто их перетащит куда надо.
3) Если вдруг вы упретесь в производительность, можно легко это все разнести и кластеризировать. 
У вас не те нагрузки, что бы например создавать отдельный ClusterFileSystem (там правда могут храниться только MSSQL и машины Hyper-V)
Бюджет правда не очень понятно, это на сервера с лицен ?

Худший ответ:
Для 50 пользователей 1 сервер будет быстрее. Ну и обеспечить темпы пользюка службы 1с и /srvinfo/ также на быстрых дисках.
Вопрос: Влияет ли DNS на замеры скорости?

Лучший ответ:
Нет.
DNS переводит имена сайтов в ip адерса. Это происходит всего лишь один раз в начале, а потом уже происходит сам замер скорости.

Худший ответ:
нет
Вопрос: Откуда взять базовые знания по строению и структуре сети?

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

Худший ответ:
Уже упомянутые здесь СДСМ. Также на канале NetSkills в ютубе есть серия уроков "Курс молодого бойца".
Вопрос: Как в Laravel получить id записи ДО добавления?

Лучший ответ:
А проверить валидатором на уникальность никак? Это же проще, чем городить костыли.

Худший ответ:
В общем нашёл такое решение:function getUniqueSlug($model, $slug)
    {
        if ($count = $model::where('slug', 'like', "$slug%")->count()) {
            $slug = str_finish($slug, "-$count");
        }
        return $slug;
    }
Без id, но так тоже неплохо) Слаг будет уникальным.
Вопрос: Как переписать Http на HttpClient?

Лучший ответ:
Вообще правильнее всего вынести эти запросы в сервис и импортировать туда HttpClient.import { HttpClient } from '@angular/common/http';
Далее инжектим его в конструктор сервиса:constructor(private http: HttpClient) {}
После делаем нужный метод для запроса (в данном примере пусть возвращает Observable с массивом любых данных):getServices(): Observable<Array<any>> {
    return this.http.get<Array<any>>(`адрес реста`, {headers:{ 'Content-Type':'application/json' , и так далее}});
  }
Объект с хеддерами вообще опциональный и есть несколько вариантов, как их добавлять, но этот подходит по твоему примеру.
Дальше импортишь свой сервис в компонент и инжектишь в конструктор этого компонента:constructor(private service: ИмяСевриса) {}
Дальше в нужном хуке, например в ngOnInit() вызываешь метод и подписываешься:ngOnInit() {
    this.service.getServices().subscribe( next => ну и дальше все, как обычно);
}

Худший ответ:
1) переименовываем Http в HttpClient (из angular/core, а то иногда с селениума можно импортировать случайно)
2) в корневом модуле импортируем imports: [ HttpClientModule ]
3) убираем все response.json() из всех методов, так как это автоматически делает HttpClient
Вопрос: Не работает анимация в firefox Как пофиксить?

Лучший ответ:
Потому что для мазилы у вас стоит анимация  -moz-animation-name: play_up ну а тут в примере её нет...

Худший ответ:
@-webkit-keyframes NAME-YOUR-ANIMATION {}@-moz-keyframes NAME-YOUR-ANIMATION {}@-o-keyframes NAME-YOUR-ANIMATION {}статья из css-tricks
Вопрос: Как сделать парольную систему для доступа к файлам?

Лучший ответ:
В описании фигурирует классический криптоконтейнер. Знаешь пароль -- можешь его смонтировать и получить доступ к файлам. Не знаешь -- гуляешь мимо.

Худший ответ:
Защита от порчи была и будет только одна. В современных системах контроля версий просто создается новая копия файла (полная или разностная не суть) и ведется в ней работа, до какого-то события удаления старых копий.
доступ ко всем этому можно хоть пароль, хоть физический ключ, в любом варианте можно увидеть, кто трогал файл и зачем.
Шифрование вещь хоть иногда полезная, но для хранения файлов чаще всего большой роли не играет т.к. для кражи информации всегда можно сфоткать экран монитора (свой, соседа, директора). 
Если прям вот сильно охото похвастаться или подтянуться, идите в ногу со временем: сканер отпечатка пальца, сканер радужки или банально приложение на смартфоне считывающее QR код, после чего документ открывается.
Вопрос: Не работает контроллер yii2?

Лучший ответ:
Глеб Зиновьев: Ну правильно, у вас же контроллер называется UserController , а типичная структура роутинга по умолчанию — это как раз /контроллер/метод
Чтобы ваш метод login был доступен по адресу localhost/login вам надо в конфиге в разделе 'urlManager' в блоке 'rules' добавить псевдоним: 'login' => 'user/login',

Худший ответ:
Если вы в конфиге не указали другой паттерн, то заходить надо на localhost/user/login
Вопрос: Как выйти из main после завершения всех рутин?

Лучший ответ:
https://golang.org/pkg/sync/#example_WaitGroup 
Хотя с каналами и быстрее, но я предпочитаю контроль через wg. 
upd. 
Контролируйте количество рутин. Раздробите приложение на маленькие функции. 
в главном сразу запускается 10 рутин на выполнение запросов, 10 рутин на анализ ответа от сторонего сервиса, 10 рутин ещё чего-либо. 
Рутины для выполнения запросов принимают, например, из единого канала урл, на который надо сделать запрос. Отправляете урл в канал, свободная рутина хватает и выполняет запрос, получет ответ, передает в другой канал, из которого уже хватает свободная рутина для анализа ответа. Ну и т.д.
Вот топорный пример, как делаю яpackage main

import (
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {
	urls := []string{"http://google.ru", "http://vk.com", "http://ya.ru"}
	chanUrls := make(chan string, 100)
	chanRes := make(chan http.Response, 100)
	chanPrint := make(chan string, 100)
	for _, url := range urls {
		chanUrls <- url
	}
	close(chanUrls)
	go httpGet(chanUrls, chanRes)
	go analys(chanRes, chanPrint)
	printRes(chanPrint)
}

func httpGet(chanUrls <-chan string, chanRes chan<- http.Response) {
	defer close(chanRes)
	for url := range chanUrls {
		res, err := http.DefaultClient.Get(url)
		if err == nil {
			chanRes <- *res
		}
	}
}

func analys(chanRes <-chan http.Response, chanPrint chan<- string) {
	defer close(chanPrint)
	for res := range chanRes {
		body, err := ioutil.ReadAll(res.Body)
		if err == nil {
			chanPrint <- string(body)
		}
	}
}

func printRes(chanPrint <-chan string) {
	for pr := range chanPrint {
		fmt.Println(pr)
	}
}

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

Лучший ответ:
пффф...$functionName = __FUNCTION__;
$this->client->$functionName();и всех делов.
или $this->client->{__FUNCTION__}();

Худший ответ:
Вы хотите вызвать функцию GetNewObjects из объекта client?
Для этих целей есть магические функции. В Вашем случае функция __call();public function __call($name, $args = [])
    {
        $array =  call_user_func_array([$this->client, $name], $args);

        return $array->return->Items;
    }
Вопрос: Смогу ли я разорвать контракт с Ростелекомом имея долг?

Лучший ответ:
Направления описанные выше в принципе верные, хоть и с оговорками.... некоторые советы от меня, решайте сами как поступите: 
1. Сделайте оф. запрос и получите у РТК реально на бумаге (с подписью или как ответ на оф. запрос) сумму своей задолженности, движения денежных средств за последний месяц-два и детализацию предоставленных услуг за этот период. На будущее - это единственное основание для обращения в суд, рассказывать кому-то что-то про личный кабинет - бессмысленно. 
2. Если с начисленияеми, указанными в полученном документе вы не согласны - пишите оф. претензию с указанием несогласия проведенных начислений и просьбой провести корректировку. (я бы не угрожал судом с самого начала... , для РТК - суд вещь обычная и многочисленная, для Вас - не знаю, но побегать придётся и _очень_ много и дорого).
3. Ну и если корректировку они не проведут и откажут вашим требованиям (должны обосновать) - можете смотреть в сторону суда... Вопрос будет ли это дешевле ~17 тыс. Если выйграте они конечно же Вам вернуться, но тянуться это может годами... :)

Худший ответ:
А ты вот представь такую аналогию: допустим ты мой друг, ты попросил у меня автомобиль на выходные, о стоимости мы по дружески договорились что ты вернешь авто с полным баком бензина. Катаясь на моем автомобиле ты разбиваешь его в хлам и говоришь мне: "Вот тебе канистра бензина как мы договаривались и вон там лежат куски твоей машины, а я пошел"
- Постой, друг, как же так?
- Я не считаю, что вина на моей стороне, это твоя вина (мог бы и не давать мне свой автомобиль)
- Но автомобиль стоит миллион. Значит ты мне должен миллион.
- Я просто офигел, это что за беспредел? Я конечно же не собираюсь оплачивать такую огромную сумму
Вопрос: Можете по-простому объяснить про Docker и как им начать пользоваться?

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

Худший ответ:
докер примерно тоже что portable версия программы на windows только для всех систем
Вопрос: Зачем нужны Javasript фреймворки?

Лучший ответ:
Вы ответите на свой вопрос, узнав, зачем вообще нужны фреймворки. 
Относитесь к фреймворку как к наработкам опытных программистов, которые захотели упростить себе жизнь, собрав в единый механизм много полезных фич, инструментов, а главное - объединив это всё какой-то идеологией. 
Цель фреймворка одинаковая в любом языке - ускорить и облегчить процесс проектирования и сопровождения вашего приложения.
На js фреймворки нужны потому что фронтенд последнее время усложняется, перенимая на себя те задачи, которые раньше решались сервером. Кроме того, у фронта свои нюансы, как уже отметили - совместимости и тд.Не пользуйтесь фреймворком, если то, что вы делаете - гарантировано никому не надо и вскоре будет заброшено. Если это учебный проект.
К слову, существует другое мнение - что нужно, напротив, всё делать на чистом js. В конечном итоге, единственного правильного ответа "как разрабатывать" - нет. Всё зависит от ситуации.

Худший ответ:
Большой плюс "работать одинаково хорошо во всех браузерах" и ускорит загрузку.
На примерах хорошо видна разница между работой приложения и страницы.
Google агитирует всех учить JavaScript, может быть будущее за сайтами на JavaScript?
Вопрос: Почему не работает такой код js?

Лучший ответ:
Разберем по порядкуfunction ask1(){
var a = prompt("Ввести еще одного пользователя?", "");
  if (a!=null){
        ask();}
        else (test());
    }
Тут лучше использовать confirm. Также тут не правильно используется else. Будет выглядеть так:function ask1(){
      if (confirm("Ввести еще одного пользователя?")) {
        ask();
      } else {
        test()
      }
}
Вторая ошибка в объявлении метода testfunction test(persons) {
        res = persons.join("<br/>");
        document.write("<p>" + res);
}
Вы почему то на вход принимаете массив, но не передаете его в месте вызова. И этот параметр можно опустить.
Метод say.  Вы на вход ожидаете параметр person, нов месте вызова его не передаете.
Так же у вас одна и таже ссылка на person. Т.е. не вводишь нового а меняешь старого и добавляешь его еще раз в массив.
Весь код будет выглядеть так:var persons = [];

    function ask() {
      var person = {}
      
      person.name = prompt("Введите свое имя:");
      person.sname = prompt("Введите свою фамилию:");
      person.age = prompt("Введите свой возраст:");
      
      persons.push(person);
      
      ask1();
    }
    function ask1(){
      if (confirm("Ввести еще одного пользователя?")) {
        ask();
      } else {
        test()
      }
    }

    function test() {
        persons.forEach(person =>  { say(person); document.write("<p></p>");})
    }

    function say(person) {
      document.write("Имя: " + person.name + "<br/>");
      document.write("Фамилия: " + person.sname + "<br/>");
      document.write("Возраст: " + person.age + "<br/>");
      document.write("");
    }
    ask();

Худший ответ:
Чего-то ты напутал с кодом.let persons = [];
	/*var person = {
		name: '',
		sname: '',
		age: ''
	};*/
	function ask() {
		let person = {};
		person.name = prompt("Введите свое имя:");
		person.sname = prompt("Введите свою фамилию:");
		person.age = prompt("Введите свой возраст:");
		persons.push(person);
		ask1();
	}
	function ask1() {
		let a = prompt("Ввести еще одного пользователя?", "");
		if (a != null) {
			ask();
		}
		else {
			test();
			//либо persons.forEach(say);
		};
	}
	let res;
	function test() {
		res = persons.map((persona, n) => `persona №${n}- name: ${persona.name}; sname: ${persona.sname}; age: ${persona.age}`).join("<br />");
		document.write("<p>" + res+"</p>");
	}

	function say(person, personNum) {
		document.write("Номер: " + personNum + "<br/>");
		document.write("Имя: " + person.name + "<br/>");
		document.write("Фамилия: " + person.sname + "<br/>");
		document.write("Возраст: " + person.age + "<br/>");
		document.write("\n");
	}
	ask();
	//say();
Вопрос: Как правильно парсить чпу на php?

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

Худший ответ:
А если парсить такой урл mysite/catalog/smartphone/yotaphone/yotaphone2-exclusive
То, получается нужно постоянно обращаться к базе данных.
Верно
Вопрос: Полезно ли при обучении изобретать велосипеды?

Лучший ответ:
Да, при обучении полезно делать что-то самостоятельно. Если вы самостоятельно можете составить алгоритм, это лучше чем сдаться не найдя подходящий готовый. Но при этом стоит помнить, что многие алгоритмы отточенные крутыми профессионалами могут уделывать вашу самоделку по скорости в разы, в десятки раз, а иногда и на много порядков.
Так что если вы внезапно осознали что вот к этой задаче можно применить воон тот алгоритм из книжки - применяйте его.
В качестве иллюстрации приведу сравнение девяти алгоритмов сортировки:
https://youtu.be/ZZuD6iUe3Pc
И двух алгоритмов поиска пути
https://www.youtube.com/watch?v=g024lzsknDo

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

Лучший ответ:
Как открыть файл ai в фотошопе, как исходник, чтобы можно было управлять слоями?
никак.И можно ли без Illustrator как то фотошопом обойтись?
нет

Худший ответ:
Уже был подобный вопрос и всё равно нужен Illustrator хотя бы portable.
Вопрос: Как преобразовать тип данных в строку?

Лучший ответ:
в вашей интерпретации можно так:b =  datetime.datetime.now().timetuple()
if str(b[3])+':'+str(b[4]) == c:

Худший ответ:
Почитайте, тут может разберетесь.
Вам нужно время по другому задавать, а не в строку преобразовывать.d = date(2005, 7, 14)
t = time(12, 30)
datetime.combine(d, t)
Вопрос: Как легче перейти с хостинга на VPS?

Лучший ответ:
Посчитайте свои затраты по времени и деньгам перед таким переездом
- сколько времени уйдет на обучение: ubuntu - nginx - RDBMS - php-fpm - memcache (использование любой магии типа панелей, скриптов, которые выне писали сами, только отсрочит обучение)
- как будут делаться бекапы
- как будете возвращаться после глобального взлома всего и вся
- сколько потеряете клиентов при переходе 
- подумайте, как будете разруливать отправку почты
- подумайте, есть ли возмжность упростить/улучшить все без переезда
- что даст переезд в плане економии времени/ресурсов/увеличение почасового рейта/ и тп
Я б не советовал переезжать пока у вас не будет четких ответов на подобные вопросы
Что никак не отменяет, что можно перевести бложики и другие ресурсы на впс и учиться на них

Худший ответ:
Если использовать панель управления, то особой разницы в переезде на ВПС нет. Панелей много Cpanel, ISPmanager и далее. Есть платные, есть такие себе. 
Если решишь более глубоко освоить ВПС:
- на счет выбора ОС - бери Ubuntu server. Он имеет малый порог вхождения и огромную документацию. Если хочешь большего - ставь CentOs;
- большинство ВПС имеют уже сборку для веба LAMP. Гайдов как это настроить под себя чуть больше, чем надо;
- если у тебя уже есть опыт командной строки linux, то за пару дней со всем разберешься. Если нет, то подольше :)
В любом случае - ВПС это ответственный шаг.
Вопрос: Как поправить ошибку PHP?

Лучший ответ:
$snoopy->read_timeout = 5000;
ну или какой-то адекватный.

Худший ответ:
Не может подключиться к сайту, Ваш К.О. Сделайте себе лучше интернет. Таймаут соединения срабатывает.
Вопрос: Steam или Android, что выбрать начинающим инди-разработчикам?

Лучший ответ:
обе

Худший ответ:
получить результат
Если вы хотите сделать игру для того чтобы: "бабла срубить", "просто чтобы сделать", "пасаны, смотрите, моя игруха в стиме/гуглплее" и т.д., то лучше не заливайте ее никуда. Не надо шлаком засорять стор. Итак хватает.
А если чисто для себя, да для портфолио, юзайте то что нравится. Ну или пробуйте то, что наиболее привлекательно для вас, если до этого не разрабатывали ни под какую из платформ. За вас тут решать никто не будет. Мнения у всех разные)
Вопрос: Как проще подключить оплату?

Лучший ответ:
Yandex Kassa + модуль Omnipay

Худший ответ:
Я бы посоветовал интеркассу. Большое количество платежных способов, там и карточкой расплачиваться можно и через вебмани, терминалы. Вообще кому как удобно. Я бы ее советовал.  Работаю на одном сайте, так там интеркасса уже около 6 лет стоит. А главное вывод денег без проблематичный.
Вопрос: Какой тип этих картинок? иконки, лого?

Лучший ответ:
FLAT icons
FLAT style
Плоский стиль )) по нашему))
https://www.flaticon.com/

Худший ответ:
Тут
Вопрос: Стоит ли идти на такую работу?

Лучший ответ:
Качай навык обмана и изворотливости! Когда ты один, то дается бонус +5 к начальному навыку вранья, +3 к изворотливости, а так же призрачный посох просраного дедлайна одинокого разработчика. Посох кастует заклинание: "Немного осталось, скорее всего уже завтра!", а так же дает временный иммунитет от увольнения, пока ты один, без союзников.

Худший ответ:
Не стоит на самом деле если не будет человека, знающего те же технологии лучше. Ты будешь встречать множество проблем в реализации и поиск решения будет отнимать время (что плохо - на работе нужно сидеть кодить). А если так ещё и back-end разработчика нет, то шли их всех. Они будут требовать с тебя ещё и серверную часть.
Вопрос: Знаки «???» вместо кириллицы. Как исправить кодировку?

Лучший ответ:
Укажите кодировку с помощью <meta charset="utf-8"> в <head> вашего сайта.

Худший ответ:
точно БД в кодировке utf8?