Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Лог действия другого пользователя микротик?

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

Худший ответ:
можно чтобы в Телеграм отправлялось через бота

скрипт для микротика
:global lastTime
:global output
:global mtIdentity [/system identity get name];
:global botID "bot5042278208:AAHe-YpKuChjreeb54nbnssssss" ;
:global myChatID "7890000000" ;

:local LogGet [ :toarray [ /log find topics~"infol" || message~"by admin" ] ] ;
:local LogtLineCount [ :len $LogGet ] ;
if ($LogtLineCount > 0) do={
   :local currentTime "$[ /log get [ :pick $LogGet ($LogtLineCount -1) ] time ]";
   :if ([:len $currentTime] = 10 ) do={
      :set currentTime [ :pick $currentTime 0 10 ];
   }
   :set output "$currentTime - $[/log get [ :pick $LogGet ($LogtLineCount-1) ] message ]";
   :if (([:len $lastTime] < 1) || (([:len $lastTime] > 0) && ($lastTime != $currentTime))) do={
      :set lastTime $currentTime ;
         :tool fetch url=("https://api.telegram.org/$botID/sendmessage\?chat_id=$myChatID&text=\"$mtIdentity\" :  $output") keep-result=no
   }
}

измените поля :
:global botID "идентификатор бота" ;
:global myChatID "идентификатор юзера" ;
в этой строке:
:local LogGet [ :toarray [ /log find topics~"infol" || message~"by admin" ] ] ;
можно добавлять еще нужные данные для отправки

в телеграмм будет выглядеть так
Вопрос: Как из списка .json вывести нужные элементы?

Лучший ответ:
1.Изучить принципы работы со структурами данных.
2.Применить данные на практике.

Худший ответ:
Если я правильно тебя понял, то вот пример:
data1 = {'115850341': 
                  {'spa_id': 115850341, 'mmr': 128.616106212139, 'season_number': 43, 'calibrationBattlesLeft': 0, 'number': 4639, 'skip': False, 'updated_at': '2022-12-19 16:56:44', 'neighbors': 
[{'spa_id': 115850341, 'mmr': 128.616106212139, 'season_number': 43, 'calibrationBattlesLeft': 0, 'number': 4639, 'skip': False, 'updated_at': '2022-12-19 16:56:44'}], 'nickname': 'sayuu', 'clan_tag': '-Q-'}
          , '154124495': 
                  {'spa_id': 154124495, 'skip': True, 'nickname': 'sayuuj', 'clan_tag': ''}, 
           '152552835': 
                  {'spa_id': 152552835, 'skip': True, 'nickname': 'Sayuuna_z', 'clan_tag': ''}}



you_dict_data = None

for i in data1:
  if data1[i]['nickname'] == 'sayuu':
    you_dict_data = data1[i]    


# теперь переменная you_dict_data содердит в себе запись с твоим аккаунтом и ты можешь работать с ней как с обычным словарем 
print(you_dict_data)  #{'spa_id': 115850341, 'mmr': 128.616106212139, 'season_number': 43, 'calibrationBattlesLeft': 0, 'number': 4639, 'skip': False, 'updated_at': '2022-12-19 16:56:44', 'neighbors': [{'spa_id': 115850341, 'mmr': 128.616106212139, 'season_number': 43, 'calibrationBattlesLeft': 0, 'number': 4639, 'skip': False, 'updated_at': '2022-12-19 16:56:44'}], 'nickname': 'sayuu', 'clan_tag': '-Q-'}

# вот так ты можешь получить доступ к своим данным
print(you_dict_data['nickname']) # "sayuu"
print(you_dict_data['clan_tag']) # "-Q-"

Вот как это будет выглядеть в твоем коде:
import requests
import json


def num():
    q = input('Введите ваш ник: ')
    url = 'https://tanksblitz.ru/ru/api/rating-leaderboards/search/?prefix='
    page = requests.get(url + q, headers = HEADERS)
    data1 = json.loads(page.text) 

    you_dict_data = None

    for i in data1:
      if data1[i]['nickname'] == 'sayuu':
        you_dict_data = data1[i]

    # теперь переменная you_dict_data содердит в себе запись с твоим аккаунтом и ты можешь работать с ней как с обычным словарем 
    print(you_dict_data)  #{'spa_id': 115850341, 'mmr': 128.616106212139, 'season_number': 43, 'calibrationBattlesLeft': 0, 'number': 4639, 'skip': False, 'updated_at': '2022-12-19 16:56:44', 'neighbors': [{'spa_id': 115850341, 'mmr': 128.616106212139, 'season_number': 43, 'calibrationBattlesLeft': 0, 'number': 4639, 'skip': False, 'updated_at': '2022-12-19 16:56:44'}], 'nickname': 'sayuu', 'clan_tag': '-Q-'}

    # вот так ты можешь получить доступ к своим данным
    print(you_dict_data['nickname']) # "sayuu"
    print(you_dict_data['clan_tag']) # "-Q-"
Вопрос: Как организовать wi-fi в офисе?

Лучший ответ:
Для начала =) 
Хоть я и любитель тиков, и в офисе у меня все на тиках, включая вафлю, но вот совет даю, посмотрите в сторону Убиков. Там одна точка может покрыть все 80 квадратов, а 2 так вообще ...

Худший ответ:
Берите актуальную линейку keenetic , они (в отличие от юбиков и тиков) умеют в тру роуминг 802.11r/k/v. Цены довольно демократичны, заводится с полпинка, не нужно куда-то ставить софт (контроллер поднимается на одном из устройств).
Расстановка зависит от рассадки, точно 1 роутер за стекло (они очень сильно по опыту экранируют из-за металлизации), второй поставил бы ближе к третьему помещению, если 1 или 3 помещение - кабинет шефа, поставил бы ему. Пусть радуется (и не делает мозг).
P.S. Откажитесь от подхода "одного роутера хватит на всех", в 2021 году с появлением дешевой бесшовности количество ТД определяется бюджетом и геометрией, а не "25 юзеров на 2 тд - избыточно". Я сейчас в большую квартиру, в которой можно найти точку для покрытия одной ТД поставлю 2, чтобы у заказчика телефоны за ночь без зарядки не высаживались.
Вопрос: Где можно посмотреть, какой процент людей использует пиратскую windows дома?

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

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

Лучший ответ:
Это хороший вопрос, но однозначного ответа на него нет. 

Во-первых,  надо понимать, что писать свои классы и использовать готовые - это две очень большие разницы. 
От современного программиста чаще всего требуется второе. И это не требует особого понимания ООП. 

Во-вторых, учить ООП как сухую теорию, не осознавая реальной потребности в улучшении существующего кода, будет гораздо труднее.  Я убежден в том, что программист должен дорасти до ООП (я сейчас говорю не про синтаксис, а про написание своих классов и того как они взаимодействуют друг с другом). Он должен увидеть несовершенство процедурных простыней, чтобы прийти к пониманию необходимости оптимизации существующего подхода.

В-третьих, все реальные примеры настолько замороченные, что по ним разобраться совершенно нереально.  А упрощенные ничего толком не показывают. Только синтаксис. 

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

Это пример самой базовой и очень распространенной задачи - как сделать работу с SQL менее занудной и гарантированно безопасной. И начинать надо именно с таких задач, не замахиваясь на приложения целиком. 

Если говорить о приложении целиком, то стоит попробовать написать что-то примере фреймворка Symfony - это как раз даст понимание того, как ООП применяется на уровне приложения.

Худший ответ:
Про ООП есть прям отличная книжка: Гради Буч, Объектно-ориентированный анализ и  проектирование.

ЗЫ: осторожно выскажу своё мнение, что ООП нужно для удобства. Ибо банально удобнее, когда твои данные лежат рядом с методами их обработки. А не размазаны тонким слоем по всему модулю, что не понять, где чьи данные, и какими функциями они обрабатываются.
Вопрос: Как исправить ошибку Uncaught Error: Call to a member function fetch_assoc()?

Лучший ответ:
Вылезла такая ошибка после переноса сайта:1) Первое что надо проверить - правильность данных для подключения на новом хостинге.
2) Далее, <?php
$conn = mysqli_connect("localhost", "root", "pass", "table");
if ($conn === false) {
  die("Ошибка: " . mysqli_connect_error());
} 
mysqli_close($conn);
?>
Если это полный код, и он как-то относится к коду в вопросе, то во первых $conn и $link - что-то одно неверно названо или используется, во вторых mysqli_close($conn); закрывает только что открытое соединение, и тогда вопрос - какой упоротый пингвин это писал?

3) После require_once 'connect.php'; сделайте var_dump($link ); exit();, будет понятно установилось ли соединение, хотя по уму конечно же надо переписать подключение нормально. Ну и проверить какую переменную вы на самом деле должны использовать -  $conn или $link ...

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

Лучший ответ:
Проблема может быть в кабеле от провайдера. Какое-то ухудшение характеристик (например, из-за повреждения изоляции).
Разница между Asus Rt-AC68u и D-link DIR-300 в том, что у Asus'а гигабитные порты. На практике они бывают чуть более капризны к качеству кабеля. Т.е. косяки появились, но DIR-300 их прощает. А на Asus происходят потери пакетов, что и приводит к вашему результату. Если бы можно было посмотреть статистику по потерям пакетов, то подтвердили бы или опровергли эту версию, но вряд ли Asus имеет такую функцию.

Худший ответ:
Сбросить настройки на заводские и настроить заново не пробовали?
Еще, как вариант, WAN порт мог подгореть.
Вопрос: Имеется 4 item`a, ширина каждого 20% (от ширины контейнера). Как сделать заливку контейнера, зная процент от числа?

Лучший ответ:
Вариант с разбивкой через css не подойдет ? накидал немного
https://codepen.io/shutik-the-encoder/pen/xxPYwgM
или именно заполнение каждого элемента отдельно нужно ?

Худший ответ:
Если отступы между палками не считать , то можно так
let conts = [line1,line2,line3,line4];
let w = 100/conts.length;
for(let i = 0; i < conts.length;i++)  
  conts[i].style.width = progressResult- w*i < 0?0:Math.min(w,progressResult- w*i)/w * 100 + "%";
Вопрос: Как настроить домен windows server 2012 R2 на 3 сети?

Лучший ответ:
Как это возможно реализовать?
Отдайте организацию сети на откуп сетевым девайсам, обеспечте доступность КД со всех сетей и будет все ОК

Худший ответ:
Сложность будет в настройке DNS.
Есть официальные статьи:
https://docs.microsoft.com/en-us/windows-server/ne...
https://docs.microsoft.com/en-us/windows-server/ne...
Но насколько это работает для случая, когда надо отдавать разные адреса одного AD DC - не берусь судить. Может быть, вы окажетесь первым человеком, успешно реализовавшим такую странную схему. И даже в этом случае больно бьющие грабли могут выпрыгнуть позже, при эксплуатации.

А так - ответы, которые дали Sasha Odarchuk и Дмитрий Шицков подталкивают вас в правильную сторону. Слушайте их, и обойдётся без граблей.
Вопрос: Почему на windows server 2012 служба жрет столько ресурсов?

Лучший ответ:
Может тебя брутфорсят, перебирая пароли?

Худший ответ:
Есть ли активные пользователи в момент нагрузки? 
Сервер смотрит интрефейсом в инет ?
Вопрос: Нормальная ли сложность задачи для джуниора на работе?

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

1. Составь план работы.
Очень примерно:
1) Поднять новый проект на Next js
2) Перенести страницы со старого проекта
...
n) Задеплоить новый проект

2. Выбери из списка что тебе вообще непонятно как делать и начинай гуглить, задавать вопросы на qna и, главное, сделай что-то на практике.

3. Если после пункта 2 все еще непоняно, бери все свои нароботки и иди к лиду\старшему разработчику с просьбой помочь (ты джун, это нормально). Главное приходи не с пустыми руками, а хоть с какой-то проделанной работой. Если общаетесь очно, конспектируй.

Если даже после 3-го пункта нет понимания как делать задачу, тогда она для тебя, действительно, слишком сложная.

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

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

Худший ответ:
А как ты будешь писать компилятор? На бересте? или на иврите?)
Вопрос: Почему nslookup выдает разные mx записи для одного и того же домена?

Лучший ответ:
1. Вы недавно меняли мх записи и нужно дождаться обновления кеша на всех dns серверах
2. Записи действительно разные

Худший ответ:
Если использовать популярные платные dns-хостинги с anycast-серверами по всему миру и даже оставлять TTL по умолчанию (для MX как правило 30 минут) то и время обновления записи практически везде в полчаса и уложится.
Вопрос: Может ли процессор так сильно?

Лучший ответ:
а че Вы еще хотели от райзена))))) и системы охлаждения ноутбука)

Худший ответ:
Суммарно у него рабочая температура максимальная указана 105 градусов. В целом в краткосрочных нагрузках ему точно ничего не будет.
Вопрос: Как из String получить int?

Лучший ответ:
Можно регуляркой произвести замену всех нечисловых символов через replaceAll и потом parseInt применить
Регулярка такая подойдет: sting.replaceAll("\\D+", "");

Можно еще поиск через регулярку и matcher сделать, но решение вроде выйдет побольше:
import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Main {
  public static void main(String[] args) {
    String string = "[апваварпвава, авпварпваавр, варварвра54%]";

    Pattern pattern = Pattern.compile("\\d+");
    Matcher matcher = pattern.matcher(string);

    while(matcher.find()) {
      System.out.println(matcher.group(0));
    }
  }
}

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

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

для затравки: Total Network Inventory, OCS и т.п.

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

Лучший ответ:
Редактировать файл нужно HEX редактором, а не блокнотом

Худший ответ:
Редактировать файл нужно HEX редактором, а не блокнотом
Вопрос: MikroTik. Разрывы связи каждые пару минут?

Лучший ответ:
Уровень лога info не достаточен в данном случае, нужен debug.
Но предположу, что перегружен канал из-за этого падает туннель.
Делайте qos и посмотрите, что у вас так аплодит, не исключено, что кто-то в офисе или стримит, или "торрентит".

Худший ответ:
Я бы в первую очередь перевел на tcp, и понаблюдал.
Вопрос: Скачать компьютерную Флэш игру на свой сайт?

Лучший ответ:
Поддержка флэш плеера официально выпилена из практически всех браузеров.

Худший ответ:
Была такая технология в мобильном браузере Dolphin на андроид, причем была еще лет 10 назад. Они запускали флешовый ролик у себя на сервере, а клиенту стримили с него видео-аудио. Работало жутко (качество видео было на минималках, все шло кубиками), но работало.

Мораль такова - современные технологии позволяют засунуть что угодно куда угодно. Вопрос только в отношении затрат / выгоды
Вопрос: В каких случаях следует делать кастомные Exceptions?

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

Также собственные исключения могут пригодится в случае, если вы хотите передавать с этим исключением какую-то дополнительную информацию. К примеру посмотрите на exceptions для ответов разных HTTP статусов в Symfony.

Худший ответ:
Мы делаем кастомные исключения во всех случаях. Просто для читабельности, передачи контекста, исключения дебатов во время код-ревью - делать кастомное исключение или нет, и т.д.
Вопрос: Центр обновлений windows 11 не работает, как исправить?

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

Так делал с поломаными 10-ками которые не обновлялись смостоятельно.

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

Для надежности - снести нафиг, и поставить стабильную, ту же 10ку

Всем всех благ
Вопрос: Кто такие системные программисты?

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

Худший ответ:
брат, в c++ тебе рано

вкратце так

но если вдруг есть именно такая вакансия
( Junior Python/C++)
пробуй, скиллы в С++ получить сложнее
Вопрос: Как безопасно заменить умерший винт в зеркале raid?

Лучший ответ:
Сначала выяснить, что это за комп, какой рейд и как именно собран, какой именно из дисков отказал. Затем имея эти данные предметно выяснить как именно на этом контроллере/fakeraid/softraid восстанавливать избыточность после потери диска и на что стоит обратить внимание по пути.

Худший ответ:
диск на новый поменяй и всё
Вопрос: Обход NAT вполне реален в нынешних реалях?

Лучший ответ:
Для «пробива» NAT существуют распространённые и широко применяемые практики, задокументированные в RFC5128, а также менее распространённые, но технические еще более продвинутые, вроде pwnat.

Слыхал об hole punching/STUN, но вроде для них нужен промежуточный сервер, но тогда смысл от децентрализации.
Промежуточный сервер в Hole Punching нужен только для согласования IP-адресов и портов. Если же IP-адрес и порт заранее известны (например, вы настраиваете UDP VPN между двумя пирами), то промежуточный сервер не нужен: просто отправляйте пакеты по UDP со статичными портами на обеих сторонах друг к другу.

Промежуточным сервером также может быть другой пир, а не обязательно централизованный сервер. В расширении ut_holepunch протокола BitTorrent DHT один пир может отослать другому пиру сообщение о необходимости подключения друг к другу путём отправки сообщения в DHT.

Худший ответ:
Очередной построитель "суперзащищенной децентрализованной сети", да? Олиферов сначала прочитай, сил нет уже такой бред комментировать. 

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

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

Худший ответ:
Обучение было полным шлаком, изучал всё сам, так как от пар просто не было толку, а задания на подобие конкатенации строк продолжались до 4-го курса.
Это норма (с)

В итоге после написания сильно прогорел
Что-то рано

что делать?
Во первых, выяснить, что вам нравится и чем вы хотите в жизни заниматься.

Во вторых, если вам все же нравится программирование - то вопрос надо поставить так: "как выделиться среди других джунов?"

Я эту задачу сделал так: пол года пилил браузерную MMORPG, и хоть по итогу там было ~5% функционала от полноценной игры - этого хватило, чтобы работодатели общались на собеседовании совершенно по другому. Правда, только после того, как понял, что на личные проекты никто не смотрит, и специально просил HR, чтобы перед собеседованием посмотрели мои проекты.

Когда у меня был пример браузерной MMORPG + на github был сайт-блог на Laravel - процент приглашений был 65% (т.е. 2 компании из 3 собеседований по итогу присылали оффер).

Ну и самое главное - что я пол года, пока пилил свою MMORPG, получал удовольствие. И сейчас, спустя 5 лет, продолжаю пилить, когда есть время.

А если вам писать что-то свое на выходных в тягость - стоит задуматься, а ваша ли это область.
Вопрос: Как реализовать gitlab ci использую docker-compose?

Лучший ответ:
Если кратко то как то так. 

1. Образы БД брать из офф репозитория, подкидывать только файлы конфигурации если требуются через docker-compose. 
2. Образ приложения собирать либо на шаред раннерах, либо на своём раннере. 
3. Собранный образ пушить в репозиторий гитлаба. 
4. На сервере куда деплоить поставить гитлаб раннер, привязать к нему тэг. 
5. В докер композ указать в качестве имаджа репозиторий гитлаба/имяобраза:тэг
6. В gitlab ci добавить 2 стейджа. 1 это сборка и пуш докер образов, 2 это выполнение на установленном раннере docker-compose up -d

Худший ответ:
как пример, можешь здесь что-то взять.
https://github.com/MindPhaser34/my-portfolio/tree/...
Вопрос: Как заставить скрипт в Linux испольняться просто набрав его имя в терминале?

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

Добавить в самое начало скрипта шебанг: #!/usr/bin/env bash
Дать права на выполнение: chmod +x /path/to/run.sh
Поместить в файл ~/.bash_aliases строку alias run='/path/to/run.sh'


Худший ответ:
сначала chmod +x script_name
потом 
./sciptname
Вопрос: Как в авто режиме генерировать запросы в сеть?

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

Худший ответ:
Как вариант, отслеживай изменения API через Swagger и меняй свои запросы на основе этого.
Но это какая-то дичь, высосанная из пальца. Нафига тебе это говно?
Никто так не делает
Вопрос: Как разрешить пользователю устанавливать/удалять программы в Windows 7?

Лучший ответ:
При установке программ от имени пользователя запрашивается пароль администратора. Если такое окно не вылезает, значит UAC отключен. Надо включить UAC.
Если же вам необходимо, чтоб пользователь имел возможность устанавливать программы без прав администратора, то нужно разрешить это с пмощью групповых политик. Правда папки Program Files и Program Files (x86) не доступны для записи обычным пользователям, доступ только на чтение.

Худший ответ:
Панель управление -> Учетные записи и Семейная безопасность -> Учетные записи пользователей -> Изменить параметры контроля учетных записей

И чтобы появлялось запрос запуска от имени администратора должно быть так:


Если так не  стоит надо выставить как показано на картинке
Вопрос: Возможно ли это сделать?

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

Худший ответ:
Так можно сделать при помощи WPF
https://habr.com/ru/post/158561/
Вопрос: На чем исполнять несложный интернет-магазин?

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

Худший ответ:
миллион лет назад сел на ecommercetemplates. За эти годы сменил 5 провайдеров, доменных имён и десяток дизайнов - натягивается на всё, что движется, и уж тем более на bootstrap.
И ни разу не ломался или не был взлоуман.
Кучи платёжек привязываются на лету. ПэХэПэ вырос с 5,х до 8 и продолжает работать 
Вот как-то так )