• Как правильно создавать контроллер в роутере?

    mcivhjfv
    @mcivhjfv
    В Laravel, например, делают так "Admin/IndexController@index"
    Ответ написан
    Комментировать
  • Как поочередно заменить строки на уникальные значения используя регулярные выражения?

    0xD34F
    @0xD34F Куратор тега Регулярные выражения
    $str = '< p > text </p>';
    
    $count = 0;
    $str = preg_replace_callback('/< ?\/?\w+ ?\>/', function() use(&$count) {
      $count++;
      return "#p$count";
    }, $str);

    или, если разные тэги надо заменять независимо
    $str = '< p > text </p> <b> fdsgdfsg</b> <p>???</p> <div>hello, world!!< /div>';
    
    $count = [];
    $str = preg_replace_callback('/< ?\/?(\w+) ?\>/', function($matches) use(&$count) {
      $key = $matches[1];
      $count[$key] = isset($count[$key]) ? $count[$key] + 1 : 1;
      return "#$key$count[$key]";
    }, $str);
    Ответ написан
    Комментировать
  • Какой php фреймворк можно понять / разобрать полностью?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Прямо для вас, не пропустите...!

    PRS-7 фреймворк
    В серии видео полностью разбирается создание фреймворка,
    такого «универсала» по современым стандартам, последняя серия будет изо дня в день, все с тестами и плавно из одного решения в другое, смотреть на скорости 1.25


    Кишки фрейма:
    1. HTTP Response/Request PSR-7 (и компоненты для работы с ним)
    2. Построение контроллеров и роутинга (с переходом на Aura Router)
    3. Middlewear и Pipeline (а-ля Laravel, Slim, Symfony)
    4. DI контейнер (все фреймворки)
    5. Шаблонизаторы (+ пример на Twig из Symfony)
    6. ORM не точно
    Ответ написан
    8 комментариев
  • Стоит ли изучить С для понимания как все работает?

    @res2001
    Developer, ex-admin
    Память работает просто - туда можно писать и читать из нее. Еще она плоская и одномерная. Еще она виртуальная, но для прикладного программиста - это не важно, виртуальностью занимается ОС. Нужна она для того чтоб один процесс не видел что делается в другом процессе (например, в MS-DOS не было виртуальной памяти и любая программа могла запросто уронить ОС просто записав что-нибудь не нужное в память занимаемую системой), чтоб каждый процесс имел 4 Гб (для х32 приложений) адресуемой памяти не зависимо от физического наличия этой памяти.
    Кроме самой памяти есть еще регистры процессора, но о них вспоминают только переходя к ассемблеру, т.к. даже Си не умеет ими манипулировать (оно и не нужно на самом деле).
    Процессы и потоки - это сущности ОС предназначенные для параллельного выполнения кода. Реально выполняются потоки, а процесс - это оболочка для объединения нескольких потоков в одном адресном пространстве. В любом процессе есть хотя бы 1 поток.
    Реальную параллельность можно достичь только тогда когда физических ядер процессора >1. Причем, обычно, вы никак не можете регулировать когда у вашего потока ОС отберет процессорное время, а когда снова даст. Это можно делать только выставляя уровень приоритета потока/процесса.
    Поток отличается от процесса тем, что у двух разных процессов разные адресные пространства (виртуальная память в действии) и им для общения нужно использовать какие-либо механизмы межпроцессорного взаимодействия (сокеты, pipe, shared memory, файлы, ...) предоставляемые ОС. Потоки одного процесса работают в одном адресном пространстве, поэтому для взаимодействия им ничего изобретать не нужно, т.к. они просто могут обращаться к одной и той же переменной. Но тут сразу возникает состояние "гонки" и все что с этим связано. Чтоб как-то упорядочить одновременное обращение к участкам памяти или кода нужны мьютексы и т.п. средства. Между тем, в простых случаях, можно запросто обходится и без мьютексов просто грамотно структурировав код и в правильном порядке обращаясь к "общим" участкам памяти. Если это понимать, то писать многопоточные приложения становится не сильно сложно.
    Думаю можно начать с прочтения какой-нибудь толстой книги про теорию построения ОС, например Таненбаума.
    А Си - да полезно, но если вы этим денег не зарабатываете, то скорее всего не нужно.
    WEB, PHP, JS, CSS и т.п. питоны, как правило, далеки от железа и ОС, на которых это все функционирует.
    Ответ написан
    Комментировать
  • Стоит ли изучить С для понимания как все работает?

    Stalker_RED
    @Stalker_RED
    Базовое понимание HTTP и основы сети в любом случае не помешают.

    Пара недель* изучения C дадут такое понимание низкоуровневых процессов, которое при изучении php появится только через пару лет (может быть). При этом пара лет изучения С дадут вам скилл, который очень сложно применить где-либо помимо микроконтроллеров, драйверов, и некоторых древних проектов. Ну и взлом всяких штук еще, да. То есть штука полезная, но надо вовремя остановиться, если вы конечно не собираетесь заниматься именно С.

    И да, лучше пара недель C и пара недель ассемблера, чем пол года С.

    А потоки и в высокоуровневых языках есть.
    --------------------
    * пара недель изучения - это плотное такое изучение, с чтением хороших учебников, решанием примерчиков, и ковырянием каких-то низкоуровневых штук. И это значительно больше материала, чем усваивают троечники в ПТУ за семестр.
    Ответ написан
    Комментировать
  • Удаление строки в DataGrid?

    WNeZRoS
    @WNeZRoS
    Если List заменить на ObservableCollection, то при удалении из коллекции строка удалиться и из DataGrid'a.
    Или другой (плохой) вариант. После удаления из списка вызывать dg.Items.Refresh(), но это вызовет обновление всех строк.
    Ответ написан
    3 комментария
  • Знания Junior php разработчика?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    что должен знать идеальный джуниор (мое личное мнение):

    - Сетевой стэк. Нужно иметь хотя бы базовое представление о том как с сервером общаются. Ну то есть не нужно лезть в дебри, но понимать что такое HTTP или чем TCP от UDP отличается - нужно. В целом это пара часов чтения википедии.
    - GIT или любая другая распределенная VCS. Базовые навыки, что бы хотя бы понимал что есть git revert или git rebase, что такое фичабрэнчи и примерное представление как это работает и зачем надо.
    - Базовые основы unix. Ну то есть что бы не пугаться таких вещей как ssh хотя бы.
    - PHP. Без этого никуда. Он должен понимать что такое слабая динамическая типизация (не заучивать табличку кастов типов, а понимать плюсы и минусы, такая же история с приоритетами операторов - не заучивать а знать как избегать проблем с чтением кода)
    - Понимать что код чаще читают чем пишут, а потому не экономить 5 минут на написании кода, а писать так, чтобы сэкономить 30 минут человеку, разбирающемуся в куске кода.
    - Знать базовые вещи в плане безопасности. XSS и как защищаться, SQL инъекции и как защищаться, CSRF, MITM. Понимать что такое NDA, что данные пользователей - секретная информация. Как хэшировать пароли (не md5 а password_hash) и почему это важно.
    - Знать SQL. Глубоких знаний не требуется, нужно лишь понимание того, что такое нормальная форма, желательно разобраться с вопросом денормализации данных. Идеально иметь хотя бы базовые представления о том как работать с NoSQL решениями.
    - Процедурное программирование: почему глобальные переменные порождают сложность, что такое состояние, как можно использовать классы для изоляции состояния и т.д. Инкапсуляция. Инварианты, пост/пред условия, сохранение целостности...
    - Разделение ответственности. Это один из важнейших принципов, и упрощать все это до "mvc фреймворк" слегка неправильно. Вы должны понимать что от чего отделяете и главное зачем.
    - Автоматические тесты. Джуниор должен знать что это такое и иметь хотя бы минимальный опыт их написания. Должен понимать разницу между юнит и интеграционными тестами. Быть знакомым с пирамидой тестирования.
    - Уметь решать стандартные задачи не задавая слишком много вопросов. Например регистрацию пользователя по email-у вы должны написать, или авторизацию через соц сети, или комментарии, или новостную ленту.
    - Уметь дебажить. xdebug, blackfire и тд.

    В целом где-то за годик весь этот список можно влегкую покрыть с нуля.

    p.s. Я в списке специально не указывал ООП, поскольку всеравно первые пару лет у разработчиков выходит процедурщина на классах. Это не плохо, но того что в моем списке более чем должно хватать для решения стандартных задач. Но термины вроде "инкапсуляция/полиморфизм/наследование" требуются в обязательном порядке подавляющем количеством интервьюверов, а стало быть знать это надо. Единственное что - рекомендую в свободное время глубже погрузиться в этот вопрос а не тупо заучивать формулировки.

    Так же вещи вроде docker джуниорам знать не обязательно просто потому, что их врядли допустят сходу к управлению инфраструктурой. А так пару неделек на изучение и вперед.
    Ответ написан
    12 комментариев
  • Как добавить элементы к body в цикле?

    В строке this.parent.appendChild(text); text всегда является ссылкой на элемент span, который был создан при объявлении объекта list. Если применять appendChild к одному и тому же элементу, он будет каждый раз переносить его из старого места на новое. Исходя из вашей задачи вам нужно создавать в каждой итерации новый элемент. Тоже самое относится и к input'у.
    Ответ написан
    Комментировать
  • Проблема с роутером на php. Как исправить ссылки?

    @firm
    Пропишите стили абсолютным путем
    <link rel="stylesheet" href="/template/css/reset.css">
    Ответ написан
    2 комментария
  • Как правильно использовать синглтон Бд?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Db::getInstance()->getOne(1)
    Ответ написан
    2 комментария
  • Как рекурсией вывести многоуровневое меню из массива?

    @feldwebel
    Эта структура называется adjacency list. Со всех сторон разобрана в гугле.
    Ответ написан
    Комментировать
  • Научиться парсингу - с чего начать?

    @hdworker
    Для парсинга обычных страничек используйте php-либу phpQuery.
    Для парсинга ajax-стариничек, то есть страниц с динамически загружаемым контентом, которые phpQuery видит как пустые, используйте java-либу htmlUnit, с помощью которой можно написать простенький код получения и сохрания страницы в файл, который потом можно распарсить с помощью phpUnit.
    Язык селекторов phpQuery аналогичный jQuery, так что сложностей возникнуть не должно.
    Самый простой способ -- выбрать сайт, открыть его в f11 и тренироваться.
    Ответ написан
    Комментировать