Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Под какие разрешения экрана готовить дизайн сайтов в 2021 году?

Лучший ответ:
1. Усложнять простое проще, чем упрощать сложное. 
2. Сначала мобильные. P.S это не подразумевает обделить десктоп.
3. Перестать мыслить сетками и точными размерами: делать в первую очередь полезные блоки. Почему у дизайнеров проблема с адаптивами? Да потому что они обвешивают блоки немощными кусками "дизайнерских" говнорешений. Когда всей этой поганой мишуры нет, то и вопрос с сетками отпадает. Хороший сайт может быть хоть в 500px шириной на десктопе, при условии что есть полезное действие. 

Я начинаю от 290px, но даже сверстав, смотрю что происходит если блок сжимать дальше. Всё больше прихожу к осознанию, что нужно научиться мыслить относительными единицами. На десктопе использую ширину от 700 до 1200px для контента, но плавно ухожу от точных единиц в сторону относительных.

Есть отдельная категория дизайнеров-даунов, которые выставляют в редакторе ширину холста 1920 и думают что типа теперь это дизайн под широкие экраны. (хотя контентная область осталась такой же). https://css-live.ru/ вот пример сайта с отзывчивым дизайном.

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

4. Больше отзывчивости, больше относительных единиц, больше grid css.
5. Украшайки — в последнюю очередь.
6. Дизайн сразу в браузере. Да, дизайнить сайт сразу в браузере, использовать условные элементы, которые потом можно отрисовать уже в граф. редакторе. Чтобы дизайнить в браузере, соответственно изучить вёрстку + технологии анимаций в вебе. +доступность +производительность.
7. Фильтровать тренды.

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

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

https://960.gs/
https://getbootstrap.com/docs/5.0/layout/breakpoints/
https://bulma.io/documentation/overview/responsive...
https://get.foundation/sites/docs/media-queries.ht...
https://materializecss.com/grid.html#grid-responsive

обоснованные мнения
обосновать можно только под конкретный проект собранной статистикой.
Для выбора "от балды" статистика по интернету общая https://gs.statcounter.com/screen-resolution-stats
Вопрос: Что делать если не знаешь как реализовать что-либо при написании программы?

Лучший ответ:
Я такой человек который предпочитает полагаться на свои знания, да и вообще на самого себя (Ну, то есть могу взять и изобрести велосипед, как говорится)  
Синдром неприятия чужого кода. Пройдёт ) Ведь невозможно абсолютно всё держать в голове и при необходимости запрограммировать что угодно или я что-то не так понимаю? 
Есть базовые вещи и понимание как что-то делать или как что-то сделано, а есть кучи либ и инструментов выполняющих +/- те же задачи документацию по которым можно загуглить за пару минут и прочитать за пару часов. Запоминать нужно первое.
В гуглении нет никаких проблем и ничего предосудительного ни для кого. Совсем.
Тем более при изучении инструментов/фреймворков и т.п.
Для базовых вещей(паттерны, дизайн и т.п.), конечно, стоит начать с книг.

Худший ответ:
Мастером не являюсь, но если что-то неизвестное делаю, то шарюсь по гитхабу, если делать свой велосипед, то лучше чтобы он в плане интерфейсов был похож на другие. Так всем будет лучше, никто ведь не захочет потом разбираться как поворачивать с помощью джойстика и где искать для него батарейки, если везде для поворотов используют руль.
Вопрос: Как натягивать на Wordpress html шаблон собранный с помощью gulp?

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

Худший ответ:
Никакой особенности в этом нет. Если js собран в один файл, то и всего навсего его подключить надо, без зависимостей. Аналогично и css. Все остальное как обычно подключаете.
Вопрос: Как решить конфликты в трейтах?

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

Худший ответ:
    use Trait1, Trait2, Trait3{
        Trait1::method insteadof Trait2, Trait3;
        Trait2::method as traits2;
        Trait3::method as traits3;
    }

Синтаксис правильный
Вопрос: Чем грозит смена доменного имени сайта?

Лучший ответ:
Вы в топ-10 по выдаче в поисковиках? Или почему вас вообще волнует текущая индексация сайта?

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

Лучший ответ:
Как такое написать? с чего начать?
1. Надо сформулировать более точные требования.
Например: Игра графическая и должна запускаться на веб-странице
2. Исследуем, какие технологии для этого пригодны.
Например: Для решения подобной задачи можно использовать:
 - Unity и запустить игру в веб-плеере
 - Javascript и отрисовать игру в canvas
 - Какой-нибудь другой игровой движок, который умеет работать в вебе.
3. Выбираем наиболее уместную и интересную технологию, раз уж мы учимся.
 - Unity очень большой. Придётся изучить не только юнити, но и C#, ООП и фиг знает что. При этом игры на юнити в вебе достаточно долго запускаются.
 - Какой-то другой движок берёт на себя все минусы юнити + будет вероятно менее перспективной тратой времени.
 - Javascript тут выглядит идеально - для решения этой задачи даже не придётся изучать css, html и вёрстку. 
4. Последовательно изучаем выбранную технологию. Для Javascript хороший вариант для начала - это MDN.

Напомню, что JS я выбрал исключительно из требований. Можно например поменять требования и оставить "не важно, как выглядит игра и где она запускается. Надо как можно быстрее изучить программирование и сделать её" - тогда бери Scratch

Худший ответ:
Как такое написать? с чего начать?
1. Изучить основы программирования и основы Computer Science;
2. Изучить основы какого-либо популярного языка (Python, Ruby, Javascript, PHP, Java, C#);
3. Начать реализовывать свою задумку, параллельно погружаясь в изучаемый язык.

Основы, о которых я пишу, доступны в виде многочисленных учебников, видео, курсов, статей и так далее. Без всего этого нет никакого смысла вообще браться за обсуждение описанной задачи.
Вопрос: Каким регулярным выражением можно найти знак «)»?

Лучший ответ:
Экранируй \)
preg_replace('~\)~', '', $text);

Или используй символьный класс [)]
preg_replace('~[)]~', '', $text);

Худший ответ:
Нужно экранировать его:
\)
spoiler$re = '/\)/';
$str = 'Hi (all)!';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
var_dump($matches);
https://regex101.com/r/tRw8Ug/2
Вопрос: В чём смысл ContainerExceptionInterface в PSR-11?

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

Худший ответ:
что бы правильно обрабатывать ошибки.
очень часто нужно писать  различное поведение (обработку) для различных видов ошибок, есть ошибки системные, есть ошибки на уровне фреймеврка, библиотек, и Вашего приложения,  иногда надо поставить try...catch и игнорировать исключение (просто залогировав), иногда на основе этого исключения нужно отобразить пользователю читаемое сообщение, иногда откатить транзакцию, или авайрийно завершить работу. 
И чем больше разнообразие исключений тем больше возможностей правильно его обработать.
Вопрос: Можно ли в щиток установить рубильник мощнее чем рубильник в счётчике?

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

Худший ответ:
обменять/купить нужный или придётся "каждый раз" (при срабатывании автомата), прыгать на столб )))
разве для дома 25А  не хватит?
или вы подключаете какие то  агрегаты < 5Квт ?
Вопрос: Возможно ли передать данные из одного файла в другой файл через JavaScript?

Лучший ответ:
Я не буду спрашивать, зачем вам это. Просто расскажу, как я придумал это сделать.
Файл "a.html":<html>
<head>
	<title>Document</title>
</head>
<body>
	<form action="b.html" method="GET">
		<input type="text" name="variable1">
		<input type="text" name="variable2">
		<input type="submit">
	</form>
</body>
</html>
В форме указываем, что будет использоваться метод GET (почитайте в интернетах, если не знаете, что это такое и как это работает). Методом GET значения передаются прямиком в ссылке (ссылка вида "example.com?var1=Hello&var2=World", где жирным выделено название переменной, а курсивом — ее значение). НО! GET имеет ограничение в длине передаваемых данных (об этом тоже почитайте в интернетах), имейте это в виду.
У элементов input есть параметр name. Он содержит имя переменной, отправляемой в GET запросе, а ее значение автоматически берется из того, что вы ввели в input.
Так-с, при отправке формы у нас откроется страница b.html<html>
<head>
	<title>Document</title>
</head>
<body>
	<script type="text/javascript">
		function getGETParameters(paramStr){
			return Object.fromEntries(paramStr.split('&').map(e => decodeURI(e).split('=')));
		}
		console.log(getGETParameters(window.location.search.substr(1)));
	</script>
</body>
</html>
Когда она откроется, посмотрите на строку поиска/адреса, там вы увидите, как примерно выглядит GET-запрос. Потом загляните в консоль и увидите, что там отображается массив (или объект). Я думаю, вы поймете, для чего он нужен.
Немного изменим файл b.html<html>
<head>
  <title>Document</title>
</head>
<body>
  <script type="text/javascript">
    function getGETParameters(paramStr){
      return Object.fromEntries(paramStr.split('&').map(e => decodeURI(e).split('=')));
    }
    let variables = getGETParameters(window.location.search.substr(1));
    console.log(variables["variable1"]); // эта строка выведет в консоль то, что Вы вводили в первый input
  </script>
</body>
</html>

Худший ответ:
для js используй куки или сессию, но думаю лучше бы переменную передавать с помощью php методом post
Вопрос: Как записать время по русски в бд?

Лучший ответ:
НИКАК не записывать!

Вместо этого хоть немного узнать как работают базы данных.
В mysql есть тип данных time - вот его надо поставить для колонки duree и писать в него только длительность.
А минуты добавлять при выводе. Хоть на русском, хоть на китайском. 

И почитать про нормальную защиту от SQL инъекций.
Вот эта фигня - str_replace("'","\'" - это мёртвому припарки.

Худший ответ:
Не надо так хранить ( две сущности значение и единицы измерения) в одном поле.
Сделайте поле только для значения. Например в секундах. 900 - будут ваши 15 минут. 3600 - 1 ч
А то как их показать пользователю задача представления , а не модели.
i18n преобразования делаются тоже на уровне view (представления)
Вопрос: Стоит ли переходить с Java?

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

Худший ответ:
Учите Java дальше, практически нереально != невозможно. Учитесь, предложите местным компаниям поработать на них бесплатно, возможно вас в дальнейшем возьмут в штат. На фрилансе очень большая конкуренция и с без внушительного портфолио вам там ничего сложнее школьного ДЗ не доверят.
Вопрос: Крашится система. Как понять в чем дело?

Лучший ответ:
Много интересного написали. Даже по большей части в тему, но забыли о блоке питания... Как раз кратковременные выключения, как на видео, скорее всего вызваны недостатком питания. По вероятностям причины имеющихся проблем я бы разделил так:
1) проблемы с блоком питания (наиболее вероятно). 
2) брак видеокарты: причём, не память, а контур питания или сам gpu, т.к. артефактов, по факту, нет.
3) материка: тут возможные проблемы - контур питания, разводка pci-e (если переходили с нефлагманской gpu, то проблема могла не проявляться раньше из-за того, что редко весь набор контактов используется) или индивидуальная непереносимость (в моей практике случалось пару раз: один раз материка упорно не хотела дружить с определённой парой планок ОЗУ, второй - видеокарта r9 290.
Конкретизировать проблему можно пробной заменой упомянутых компонентов. 
Прошу прощения за многабукф.
P. S. Чуть не забыл, если нет возможности по переставлять железо, то лучше видеокарту (как самый дорогой и новый компонент) нести в гарантийный сервис.

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

Лучший ответ:
Никак.

Худший ответ:
Если письмо хранится в Я.Почте - никак, оно не Ваше :) Если хранится на локальном сервере - бинарно в ящике отредактировать. Но дата в письме ничего не решает - лог прекрасно покажет, когда на самом деле было отправлено письмо :)
Вопрос: Количество выполненных перевозок на сайте. Как будет логичнее генерировать?

Лучший ответ:
Компания же реальная? Узнать у них средние значения заказов в каких-то временных рамках. Мб временные рамки работы. Чтобы счетчик не крутить в часы за пределами рабочего графика. В формулу можно занести также прогрессивный рост, основываясь на данных динамики роста и развития компании или наоборот. Если ежедневно будет выполняться по 100 заказов - не обязательно распределять их равномерно на 24 часа. Например, в зависимости от времени суток может быть увеличенный спрос и тп. Как то это обыграть. Все еще скучно?
А обновлять это дело по cron, как уже отметили, с частотой, выбранной вами.

Худший ответ:
я делал такое -  это была функция времени. только убери ее на сервер, не пихай в JS. 
N0- старт
N1 - среднее за неделю
N2[7] = по дням нарастающим итогом
N3[24] = по часам нарастающим итогом
ДЕНЬ- время в днях
ЧАС- время в часах
N0 + (ДЕНЬ/7)*N1 + N2[ДЕНЬ%7] + N3[ЧАС%24] 
p.s. а реальные данные не показывай - заказчик тебе спасибо не скажет.
Вопрос: Почему не получается использовать значение переменной, как название объекта?

Лучший ответ:
У объекта uslugi нет свойства a. Используйте квадратные скобки
var a = "fun";
alert(uslugi[a].price)

Худший ответ:
В вашем примере вы пытаетесь обратиться к свойству "a" объекта "uslugi". Правильно будет использовать такой синтаксис:
var a = "fun";
alert(uslugi[a].price)
Вопрос: Приватность браузера в 2020. Имеет смысл?

Лучший ответ:
о, Неуловимый Джо?

В Опере встроенный блокировщик трекингов(и рекламы),  и можно свои добавлять, и впн встроенный.
То есть, в Опере можете всё что угодно позаблокировать.

Худший ответ:
еще есть  Сфера от мутных товарищей
Вопрос: Как тренировать модель нейросети?

Лучший ответ:
Рекомендую:
https://pytorch.org/assets/deep-learning/Deep-Lear...

Худший ответ:
Привет!
Вот тут хорошо показано как тренируется нейросеть:
https://pytorch.org/tutorials/beginner/blitz/cifar...
Вопрос: Зачем нужен flex-shrink и flex-grow, если есть процентный width и min-width?

Лучший ответ:
flex-shrink и flex-grow не имеют прямого отношения к размерам элемента в том плане что они не определяют размер напрямую (для этого есть flex-basis). Эти свойства определяют поведение элемента при сжатии (shrink) и расширении (grow).
Т.е. если значение этих свойств ненулевое - то элементу разрешено сжиматься / расширяться, причём с коэффициентом, определяемым значением этих свойств. При нулевом значении соответствующее изменение запрещено.
Более подробно можно почитать, например, на MDN (раз, два)

Худший ответ:
flex-shrink и flex-grow
если кратко, то они работают как по горизонтали, так и по вертикали
Вопрос: Как обновлять кеш на клиенте с Nginx?

Лучший ответ:
Добавляйте к файлам css и js случайный параметр, который модифицируйте после внесения изменений в сами файлы. Это сбросит кэш в браузере у пользователя. Например,:
<link rel="stylesheet" href="/style.css?v=1"> 
После изменения файла style.css увеличьте счетчик на единицу:
<link rel="stylesheet" href="/style.css?v=2">

Худший ответ:
Как и написал Дмитрий, обновить кэшированный CSS файл можно добавив get запрос:
<link rel="stylesheet" href="/style.css?v=1">
В случае выше это
v=1
При этом значение параметра v должно обязательно меняться после изменений в файле. Я предпочёл в своём случае, что значение параметра v (или любого другого) будет дата/время последнего изменения.
Код в отдельном PHP файле:
<?php
    function autov($name) {
        chdir($_SERVER['DOCUMENT_ROOT']);
        $filedir = (getcwd() . '/' . $name);
        echo $name . '?v=' . strval(filemtime($filedir));
    };
?>
Код включения CSS (или любого другого кешированного файла):
<link rel="stylesheet" href="<?php autov('style.css'); ?>">
Надеюсь, больше ничто объяснять не нужно. Будут вопросы - попробую ответить.
Вопрос: Каковы принципы построения ЧПУ?

Лучший ответ:
ЧПУ и ключевые слова в URL это лишь один из множества факторов (и далеко не самый главный), которые влияют на позиции в поисковом индексе. Делайте как вам удобнее, заметной разницы не будет. Google точно умеет в транслит, Яндекс, вангую, тоже.

Худший ответ:
Прочитал вот такую фразу в одной SEO книжкеКонечно, такой вариант URL:
site.ru/samsung/galaxy/s7
подойдет в первую очередь сайтам, у которых каждый товар/статья имеет конкретное расположение.
Если же у вас товар/статья может располагаться в разных категориях, лучше url выводить без привязки к
рубрике
Получается, для карточки товара действительно лучше делать ЧПУ по варианту Пума Тайланд site.ru/brand-name-seo-keys когда товар может быть и в каком-то каталоге по видам, и в каталоге бренда, и ссылки с главной страницы.
Насчет символов решил, надо смотреть по семантике и по конкретному случаю. Иногда можно вовсе опустить.
Вопрос: Как узнать что письма отмечены или попали в спам?

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

Худший ответ:
Если антиспам будет сообщать отправителям (то есть, потенциальным спамерам) о том, что письма попали в спам, это грош цена такому антиспаму.
Вопрос: Как отсортировать массив с объектами?

Лучший ответ:
Значения time не числа, чтобы вычитать b.time - a.time, а строки.

Время в таком формате можно сравнивать как строки: больше-меньше — лексикографический порядок сохраняет смысл.
arr.sort((a, b) => a.time > b.time ? 1 : (a.time == b.time ? 0 : -1))

Худший ответ:
Если есть возможность прописать ручками - просто добавь sort в каждом объекте по типу:
[{time: '09:00:00', sort: 1}, {time: '10:00:00', sort: 2}],Если возможности нет, то нужно переводить время в секунды и сравнивать от начала суток.
https://developer.mozilla.org/en-US/docs/Web/JavaS...

p.s. sort по сути работать должен, но не так явно
Вопрос: Можно ли клонировать и работать с проектом не на рабочем компьютере оставшись при этом незамеченным?

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

Худший ответ:
Можно склонировать на рабочий компьютер, а с него -- на свой. А обновления пушить сначала со своего на рабочий, а оттуда на сервер.
Вопрос: Где я могу изучить с нуля и качественно iOS-разработку, Swift, Xcode?

Лучший ответ:
Нет универсального ответа. Только практика, набивание шишек, учиться на своих ошибках и трата много времени на обучение.
Здесь каждый второй вопрос такой - хочу быстро и качественно научиться программировать. Так не бывает.
За деньги можно найти на profi.ru, geekbrains, udemy, skillboks

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

Лучший ответ:
keepassxc. Нам норм

Худший ответ:
Vault пробовали? Каких фичей не хватает?
Вопрос: Ошибка после обновления Discord?

Лучший ответ:
достаточно просто переустановить версию discord.py:
python3 -m pip install -U discord.py

Худший ответ:
Зайдите на портал разработчиков и там где вы копируете токен нажмите regenerate и скопируйте новый токен
Вопрос: Стоит ли на сегодняшний день всё ещё отключать анимацию в мобильной версии сайта?

Лучший ответ:
Вот вам два простых правила:

Не используйте анимацию просто так. 
Добавляйте анимации только в тех местах где они действительно нужны. И где без них ну вот вообще никак. 


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

Худший ответ:
Вот нафига мне анимация? Даже если телефон ее может проиграть? Самое
Интересное когда она начинает дрожать.
Вопрос: Как валидно настроить права для nginx и php-fpm?

Лучший ответ:
Nginx тут не при чем. Это настраивается в пуле PHP-FPM.
PHP-FPM
[{{ username }}]
user = {{ username }}
group = {{ username }}
listen = /var/run/php/php{{ php }}-fpm-{{ username }}.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chdir = /
;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
;php_flag[display_errors] = off
php_admin_value[error_log] = /var/www/{{ username }}/logs/fpm-php.{{ username }}.log
;php_admin_flag[log_errors] = on
;php_admin_value[memory_limit] = 32M
php_admin_value[upload_max_filesize] = 100M
php_admin_value[post_max_size] = 100M
php_admin_value[open_basedir] = /var/www/{{ username }}/
php_admin_value[disable_functions] = exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,parse_ini_file,show_source,stream_set_write_buffer,stream_socket_sendto,highlight_file,com_load_typelib
php_admin_value[upload_tmp_dir] = /var/www/{{ username }}/tmp
php_admin_value[soap.wsdl_cache_dir] = /var/www/{{ username }}/tmp
Nginx
server {
	listen 80;
	#listen [::]:80 default_server ipv6only=on;

	root /var/www/{{ username }}/www;
	index index.php index.html index.htm;

	server_name {{ domain }};

	location / {
		try_files $uri $uri/ =404;
        if (!-e $request_filename) {
        rewrite ^/(.*)$ /index.php?q=$1 last;
	    }
	}

	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
		fastcgi_split_path_info ^(.+\.php)(/.+)$;
		fastcgi_pass unix:/run/php/php{{ php }}-fpm-{{ username }}.sock;
		include fastcgi_params;
	}
	client_max_body_size 100M;
}


Худший ответ:
1. Все файлы и папки от пользователя jack:jack, с правами 644 на файлы и 755 на директории.
2. Все директории, куда может писать сайт - создать от пользователя www-data:Jack, с теми же правами.
В целом, куда сайт должен писать - от www-data, куда не должен - прав не должно быть на уровне файловой системы.