Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Какие имеются недостатки у next.js?

Лучший ответ:
Решил недавно сделать небольшей проект на nextjs. Все взял из коробки с Redux.
Скорее всего я криворукий, но вот проблемы с которыми я столкнулся:
1. Упакованный Docker образ весит 600МБ+! Ничего тяжелого у меня в проекте нет, верстка, 15 страниц и текст.
Нагуглил решение упаковать билд в pkg. Следовал всем инструкциям, убил 1 день, так и не смог запустить. В /snapshot по неведомой причине отсутствует папка .next внутри пакета, package.json конфигурировал и не помогло, гугление не дало должных результатов.
2. По непонятной логике работает билд на бэке. Иногда переход по ссылкам мгновенный как положено "на толстом клиенте", но иногда зависает на 3-5 секунд переход и появляется справа прелоадер nextjs и заметно подтупливает, хотя ранее страница уже билдилась.
Можете закидать меня тапками гуру next.js, но брать продукт из коробки и трахаться с проблемами о которых я даже не должен думать так себе затея.
Для тех кому JS это панацея от всего и для всего продукт явно зайдет.

Худший ответ:
Крупные ребята типа того же Яндекса могут использовать самописный SSR, по нескольким причинам Написать своё решение не сложно. Если есть возможность поддерживать, то поддерживать своё приятней, чем надеяться на вендоров. Часто бэк написан на PHP, C#, бла бла бла, т.ч. рендирить может не нода. Добавлять еще прослойку может быть дорого и лишним. Когда начинали писать проекты, Next.js не был так готов/популярен.Дока на любителя (мне не понравилась). Много примеров, но они довольно синтетические. Редкий случай, но Next не умеет в потоковый рендер.Написал небольшой проект полгода назад, вот с чем столкнулсяДиректория pages должна быть на самом верхнем уровне. Мне так не нравится, поэтому сделал линуксовые ссылки на другое место. Соответственно под виндой проблемы.Не самая топовая типизация под TS. Что-то пришлось поправлять, вероятно уже исправили.Запускал в докере (свой образ) + node ts. Из-за постоянных пересборок машинка начинает греться). Иногда были фантомные баги из-за пересборок.Роутер не впечатлил. Но ничего критичного я не обнаружил.Webpack конфиг почти скрыт. Под популярные библиотеки, где нужно поправить webpack конфиг, есть готовые решения для Next.
В итоге: можно начать писать на Next, но абстрагироваться от него. В случае чего, почти без проблем съехать на своё.
Вопрос: Как поменять заголовок в сниппете Google?

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

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

Лучший ответ:
Users
    .Where(u => u.Books
    .Any(b => b.Author == "Достоевский"))
    .Select(u => u.Name)

Худший ответ:
var names = Users.Where(s=> s.Books.Any(b=> b.Author == "Достоевский")).Select(s=> s.Name).ToList();
Вопрос: Оцените сборку игрового пк?

Лучший ответ:
ССД только под виндовсТакой не годится, бери универсальный.Корпус GameMax Elysium WhiteТакой не годится, бери черный.Процессор AMD Ryzen 5 2600 3.4GHz/16MB (YD2600BBAFBOX) sAM4 BOXТакой не годится, бери OEMSapphire PCI-Ex Radeon RX 570 Pulse OC 8GB GDDR5 (256bit) (1284/7000) (2 x HDMI, 2 x DisplayPort) (11266-66-20G)Такая не годится, бери Nvidia. Материнская плата MSI B450M PRO-VDH MAX (sAM4, AMD B450, PCI-Ex16)Такая не годится, бери Asus.Chieftec Eco GPE-600S 600WТакое не годится, бери Seasonic platinum 750W.Оперативная память HyperX DDR4-3200 8192MB PC4-25600 Fury Black (HX432C16FB3/8)Ничтожно мало. Жесткий диск Western Digital Blue 1TB 7200rpm 64MB WD10EZEX 3.5 SATA III Рухлядь.

Худший ответ:
Забыл дописать что 2х планки. А сама Hyperx Fury, слышал как много плохого так и много хорошего про неё. Что скажете?
Вопрос: Как использовать ссылку только один раз?

Лучший ответ:
Генерить уникальные ссылки, при регистрации проверять ее, записывать в поле, что по этой ссылке уже зарегились.
\Первое что в голову пришло

Худший ответ:
ну для этого должна быть изначально уникальная ссылка на форму с ключом
Вопрос: Как совместить React JS + D3?

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

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

Лучший ответ:
Нечего там учить$(selector).css({});
$(selector).each(el => void);
$(selector).on("click", event => void);

Худший ответ:
Обязательно нужно. Это библиотека, а не фреймворк, чо там учить. В 4 версии, к которой всё идёт вместо sizzle селекторы будут на нативном document.querySelectorAll. Вообще размер минимальный получится, если всё в один bundle собираешь. У меня сам jquery занимает где-то четверть всего бандла. 
Функции типа $(selector).load(), $(...).show(500), $(...).offset(), разные обработчики событий, всё можно и нативно писать, но зачем? Используй его, если видишь что от него за зал только пару функций - выпили. 
Более того стоит выучить и jquery-ui, хотя его использовать лучше скорее в домашних проектах, но все равно, .datepicker или dialog тебе сэкономят много времени.
Вопрос: Как сделать редирект на эту же страницу Django 2?

Лучший ответ:
Вангую, что у тебя в urls.py группа названа криво или name кривой или вообще его нет

Худший ответ:
Скорее всего, в паттерне нет именованного параметра id, поэтому NoReverseMatch. Попробуйте передавать в reverse args или задать именованный параметр в паттерне.
Вопрос: Как правильно обратиться к БД оператором INSERT INTO?

Лучший ответ:
1. предлагаю прекратить учиться по этой книге - глядя на представленный код, она не научит вас ничему хорошему. 
2. как минимум воспользоваться функцией https://secure.php.net/manual/ru/mysqli.error.php для получения описания ошибки.

Худший ответ:
Прежде чем работать с базой данных научитесь работать с ошибками в php.
Включите их вывод в режиме разработки.
Кроме того, добавьте вывод реальных ошибок взаимодействия с базой данных, а не бессмысленный текст. 
Безусловно, на рабочем сервере этого работа с ошибками организуется по другому.
Но вы пока учитесь, а потому должны иметь максимум информации о происходящем.
И помните. Книга не причём. Код в ваших руках. Вы с ним работаете.
Вопрос: Сервис комментариев для сайта?

Лучший ответ:
https://remark42.com/ дёшево и сердито, selfhosted, соблюдает GDPR, очень шустрый, написан на go.

Худший ответ:
У меня в блоге - стоят такие.
Вопрос: В определении функции и в самой функции выделяются разная память?

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

Худший ответ:
>>То есть когда мы опрелеляем функцию то дополнительно занисаем память?
Я так понял имеется в виду выделяется ли память под аргументы функции? Да выделяется в зависимости от языка программирования на стеке (быстрее) или куче (гибче). Освобождается после выхода из области видимости.
Вопрос: Как составить письмо руководителю о нелегальном ПО?

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

Худший ответ:
Служебную записку написать можно, но ОБЯЗАТЕЛЬНО с приложением плана мероприятий по удалению контрафактного ПО и переходу на легальное ПО (образно: завтра удаляю нелицензионное ПО с PC1, послезавтра с PC2 и т.д.). 
Если на этом документе появится любая резолюция, отличающаяся по смыслу от "согласовано", то выход только один - заявление на увольнение (копию служебки в прокуратуру по желанию).
Вопрос: Что лучше статика или динамика?

Лучший ответ:
При динамике - мы грузим приложение (SPA) только один раз (затем - только нужное) - сделать сложно, но работает быстро и легко превращается в мобильное приложение.includeHTML - может загружать части разметки HTML как через HTML-тег, так и функцией. Асинхронно, синхронно, поддержка call-back'а, корректная рекурсивная загрузка всех вложенных в друга частей. 
Относительно индексации и SEO:
А при статике - грузим каждый раз всё при каждом переходе - сделать проще, но тратится больше серверных, сетевых и клиентских ресурсов, затрачивается больше времени на загрузку и визуализацию.

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

Лучший ответ:
В вашем случае достаточно Nginx.

Худший ответ:
Nginx - лучший вариант для отдачи статического контента. Apache за ним ставят для того, чтобы обрабатывать php.
Вопрос: Как экспортировать анонимную самовызывающуюся функцию js в es6 формате?

Лучший ответ:
Импортируя код в файле выполняется, создаются ссылки, функции, и выполняются самовызывающиеся конструкции вроде твоей. Собственно это там и происходит.
Если ты хочешь по настоящем пользоваться импортом и экспортом, то надо делать иначе:// shop.js
export function createShop(selector) {
  document.querySelector(".createShop").addEventListener("click", e => {
    // ...
  });
}

// index.js
import { createShop } from "./shop.js";

createShop(".shop");

Худший ответ:
Экспорт по сути не происходит, просто вызывается функция.
Вопрос: Можно ли одновременно использовать flexbox и grid на одной странице?

Лучший ответ:
Можно и нужно. Grid создали не для того, чтобы заменить Flex. Это 2 разных метода построения лейаута, если грубо:
- Grid = 2D (расположение элементов по 2м осям одновременно, по горизонтали и по вертикали)
- Flex = 1D (расположение элементов только по 1й оси, горизонтали или вертикали)
Еще грубее - flex хорош для "инлайна", выравнивая элементов в одной строке или колонке, как правило это конкретно контент-элементы, а grid - хорош для контейнеров и более общих элементов (карточек и тд). То есть, гридом задали общую структуру и лейаут, флексами внутри блоков расставили контент-элементы.

Худший ответ:
А кто мешает-то?))
Единственная проблема - IE не поддерживают гриды, потому если среди аудитории вашего сайта есть редкостные извращенцы - они могут видеть страницу неправильно)
Вопрос: Как правильно работать с пользователями в Docker-контейнерах?

Лучший ответ:
user - это словесное представление для удобства, как домены в интернете
у файла нет параметра имя юзера, имя группы юзера, там как ip адреса - номер юзера и номер группы юзера
допустим я юзер dka на хосте uid/gid 1000
у меня папка /tmp/docker с кодом
я запускаю дебиан в контейнере и добавляю туда свою папку, которая будет /codedocker run -v /tmp/docker:/code -it --rm debian bash
создаю юзера внутри контейнера с uid 1000 gid 1000 ( как у моего юзера на хосте)root@364785fa76ce:/code# groupadd -g 1000 my_docker_user_group
root@364785fa76ce:/code# useradd --uid 1000 --gid 1000 my_docker_user
прыгаю под нового юзера с помощью su (в докер файле это директива USER)root@364785fa76ce:/code# su my_docker_user
все, теперь я могу кодить на хосте, а запускать в контейнере и у меня не будет проблем с правами на файлы

Худший ответ:
Зачем городить внутри контейнера эти конструкции с useradd --uid 1000 --gid 1000 если можно запустить контейнеры с параметром  --cgroupns host который как раз и пробросит нужный uid и guid в контейнер.
И ваши файлы на хосте не будут менять uid на рутовый.

$  docker run -it --rm -v $(pwd):/app --cgroupns host debian:latest bash
Unable to find image 'debian:latest' locally
latest: Pulling from library/debian
bd8f6a7501cc: Pull complete 
Digest: sha256:ba4a437377a0c450ac9bb634c3754a17b1f814ce6fa3157c0dc9eef431b29d1f
Status: Downloaded newer image for debian:latest
root@aa219fb22248:/# cd app/
root@aa219fb22248:/app# ls -la
total 28
drwxrwxr-x 3 1000 1000 4096 Apr 30 11:58 .
drwxr-xr-x 1 root root 4096 Apr 30 13:59 ..
drwxrwxr-x 8 1000 1000 4096 Apr 30 11:59 .git
-rw-rw-r-- 1 1000 1000 1674 Apr 29 20:45 Dockerfile
-rw-rw-r-- 1 1000 1000  491 Apr 30 11:58 README.md
Вопрос: Как сверстать такой layout?

Лучший ответ:
Если я правильно понял.
https://codepen.io/Ariakas/full/eYNYewX

Худший ответ:
Возможно я не дочитала, но в чём в итоге у вас проблема?
header у вас фиксированный(фильтры на флексах с примерами дальше), левые блоки с карточками(назовите как удобно)  - делаете флексами - flex-basis, flex-wrap, justify-content.Ваша правая часть остается всегда видимой - position: sticky.
Разметка очень типовая, решается легко и с флексами и с гридами. Всё остальное уже за логикой(SPA\фреймворки).
Вопрос: Как устроиться работать в IT компанию студент 18-ти лет?

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

Худший ответ:
Лучше идти на стажировку в топовую компанию типа Яндекса(если ты в РФ или в РБ).
Вопрос: Можно ли изучить computer science полностью?

Лучший ответ:
Можно.
Только она (computer science) еще не дописана.
Так что - нельзя.
А порядок самый обычный:computer science 1й семестрcomputer science 2й семестрcomputer science 3й семестри так далее.

Худший ответ:
Можно конечно. Чак Норрис выучил весь Computer Science за один день. Дважды.
Вопрос: Как создать таблицу в django при регистрации?

Лучший ответ:
У каждого пользователя должна быть своя строка в таблице пользователей и связи типа one-to-many к заказам.

Худший ответ:
Если не менять models.py то будут проблемы. У каждого заказа должен быть ForeignKey на пользователя, прописать related_name, выполнить миграцию, остальное Django сделает за тебя
Вопрос: Как разложить знания по полочкам?

Лучший ответ:
Это нормально. Сейчас и должна быть каша. Лечится это практикой.

Худший ответ:
Нужно понимать по-этапную эволюцию вёрстки: от полностью белого окна с одной областью (html,body) до полностью свёрстанного макета.
Т.е., переход от самых крупных областей к более мелким деталям (ООП):
1. Сначала - правильные  позиционирование, размеры, масштабирование. 
2. Затем - зазоры и оформление (тени, закругления, искажения и т.д.)..
Вопрос: Случайные вылеты, тестирование компонентов не выявило проблему, в чем может быть причина?

Лучший ответ:
Ну при любых вылетах стоит снизить частоты что ОЗУ что Процессора.
Попробуйте у кого-нибудь взять 1 плашку DDR4.
Если всё так-же попробуйте перепрошить БИОС, пытаться ставить по очереди заведомо исправные комплектующие

Худший ответ:
пробуем - биос до дефолтных, оперативку меняем на кингстнон)) ( щас меня заплюют)
если не проходит - проверяем мать
Вопрос: Размер монтажной области под объекту illustrator?

Лучший ответ:
Способ №1
Настраиваете горячие клавиши в панели "Редактирование -> Комбинации клавиш".
Переключаете на "Меню программы", вводите в поиске "подогнать" и указываете горячие клавиши конкретно для этого действияСкриншотСпособ №2 (от пользователя RAX7 в комментариях к вопросу)
Объект -> монтажная область -> по границам иллюстрацииСпособ №3:
Дважды нажимаете по инструменту "Монтажные области" и в окошке в поле "Установки" выбираете "Подогнать по границам иллюстрации.Скриншот

Худший ответ:
Если файлы в формате PDF. Или из Ai можно в PDF экспортнуть/сохранить.
Если у вас в итоге куча отдельных файлов, то сделайте из них отдельный многостраничный.
Далее сделать всё в Acrobat Pro через Print production -> Preflight
Есть готовый экшен - Crop all page to bounding box
Вопрос: Чем отличаются max-width от width?

Лучший ответ:
В этом случае два блока текста получаются одинаковыми. глазомер хромает посмотри цифры в девтулзах Width: 100% max-width: 600px это значит блок 100% от ширины родителя, но ограничение не даст ему увеличиться в 600px. Если мы записываем max-width и width в процентах, то разницы между ними я вообще не вижу. даже не знаю где бы такое пригодилось.

Худший ответ:
Ширина блока от родителя, все верно. Если даете для body ширину, то: https://codepen.io/dimovich85/pen/XWXJvPy
Ширина явно разная. Вы на глаз 100 и 80 пикселей не различили.
Давайте логически: ширина 100 процентов, но не больше 30 процентов?
Дайте мне полный стакан воды, но наполовину полный. Это если Вы оптимист;)
Конечно в процентах разницы не будет.
И еще - у width и max-width разные приоритеты, почитайте, и думаю все на полочки ляжет.
PS: удобно написать модалке width: 100%; max-width: 600px, ведь на мобилках модалка на весь экран, а на десктопе - как на макете, всего 600, так что полезные сочетания свойств;)
Вопрос: Что есть бесплатного в Hyper-V?

Лучший ответ:
Виртуализация (внезапно).

Худший ответ:
Основной функционал виртуализации бесплатен.
Кстати, так же как и в VmWare ESXi
А зарабатывают на инструментах для управления. Которые нужны когда у вас большое количество Hyper-V
Плюс сама лицензия Windows (в том числе и на ту Windows, что внутри виртуальной машины) - никогда не была бесплатной.
Бесплатен Hyper-V без графического интерфейса - это такая урезанная Windows.
В этом смысле предпочительнее VmWare ESXi - там хотя бы базовый инструмент администрирования через web достаточно мощный.
Вопрос: Как ограничить траффик без sudo?

Лучший ответ:
А не проще ограничивать в самой торрентокачалке скорость? Тот же transmission имеет вполне себе апиху для работы с такими вещами, которая работает без всякого sudo

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

Лучший ответ:
Пример

Худший ответ:
6й див прописываешь:overfollow:hidden;
position:relative;
если 1 и 2 по высоте одинаковые, то картинки оборачиваешь в див и позиционируешь по середине через:top: 50%;
left:50%;
transform:translate(-50%,-50%);
ну , а дальше с картинками через абсолютное позиционирование или отрицательные отступы.
я бы пробовал как то так.
Вопрос: Резкие нагрузки процессора в простое, не вирус ли?

Лучший ответ:
Стандартные счетчики винды показывают погоду на марсе. Смотри в сторону procmon https://technet.microsoft.com/ru-ru/sysinternals/p...

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

Лучший ответ:
Делайте по такому принципу.snippet

Худший ответ:
Удобнее всего сделать svg, но тут конечно все зависит от того чо в этих элементах.
Вопрос: Можно ли перезагрузить компьютер по RDP, если он завис?

Лучший ответ:
Можно ли перезагрузить компьютер по RDP, если он завис?Нет конечно.
Как вы подключитесь по RDP если он завис? Только ехать.

Вообще есть способы решения таких проблем -
1. Розетки управляемые по WIFI и SMS.
2. Сторожевой пес на мат. плате.
3. IPKVM встроенный в мат. плату.

Худший ответ:
компьютер перестал пинговаться,
А раньше он пинговался?
Если отвалились пинги, то видимо отвалилась сеть и уже о каких-то удаленных действиях речи быть не может в принципе.
Если же она еще шевелится, то, например, команда shutdown умеет работать по сети. Можно зайти на другой комп в сети и выдать shutdown для вашего пациента. 
Вообще для того что бы не зависеть от работоспособности ОС нужно использовать что-нибудь типа IPMI, vPro и т.п. А это требует предварительной подготовки еще на этапе покупки компов.
Вопрос: Фатальная ошибка при вызове функции на PHP?

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

Все работает. Покажите полностью код, там посмотрим.

Худший ответ:
Даже если вы пишите псевдокод, то нужно писать так, чтобы он был читабелен. А вы приводите строчку в которой ошибка, в виде "include 'ФайлДвижка';" 
или вы его так и подключаете?
Какая ошибка на сервере? Как вариант, оберните в try/catch и смотрите ошибку.
А в чем вообще цель написания "движка на русском" ?
Вопрос: Существует ли сервис проверки кросс-браузерности?

Лучший ответ:
Попробуй doiuse, он использует для работы базу caniuse

Худший ответ:
Я не знаю сервис или утилиту который точно соответствовал бы вашему описанию, но попробуйте погуглить в сторону "css regression testing"
Вопрос: Почему не выводит строки при корректном запросе postgre?

Лучший ответ:
А с кавычками выводит "ничего" т.е. ноль полей.
С какими именно?user='40'
'user'='40'
"user"='40'
Это три абсолютно различных условия, выполняющих совершенно разные вещи.
user - зарезервированное слово по требованию стандарта. По стандарту не уверен что обозначает в контексте where, надо искать (может как часть create user и подобных только зарезервирован), а в postgresql обозначает имя текущего пользователя. Имеет тип name, что и провоцирует ошибку.
Т.е. первое условие в принципе не имеет никакого отношения к каким-либо пользовательским таблицам.
'user' - просто текстовая константа. Никто не мешает в условии сравнивать одну константу с другой, where 1=1 в некоторых query builder отсюда же.
"user" - обращение к объекту, игнорируя зарезервированные слова. То есть если у вас в таблице proxy есть поле user - то запрос должен быть записан какselect * from proxy where "user"='40'
Но общая практика - лучше не надо использовать зарезервированные слова в качестве идентификаторов.

Худший ответ:
user - зарезервированное слово, вы не можете назвать им таблицу или поле.
Вопрос: Стоит ли размещать 10 сайтов в Hetzner Cloud?

Лучший ответ:
На обычных тарифах Cloud изредка бывают провалы производительности. 
С "Dedicated CPU"  такой проблемы скорее всего не будет.

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

Лучший ответ:
Помогут скобки вам, кода пример быстрый:>>> import re
>>> re.sub(r"(\w+)", "@\\1", "This is a test")
'@This @is @a @test'

Худший ответ:
почти так же
https://repl.it/repls/PureVisibleAssembler
Вопрос: Сложно ли освоить Opencart после joomla и Wordpress?

Лучший ответ:
Opencart работает по модели MVC и не изобретает четырехколесный велосипед, с ним работать проще.
нужен магазин - берите Opencart 
блог, портфолио - Wordpress (вешать модули магазинов на блог, как по мне это костыль...)
можете посмотреть еще Prestashop, схожая структура с Opencart.

Худший ответ:
Начинал работать с Opencart совсем без знаний php.
Много стандартных задач спокойно решается готовыми модулями.
Если нужно делать что-то нестандартное, нужно будет или подтянуть php, или найти напарника на back.