• Как делегировать отдельные компоненты программы в ветки, где они используются?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    Как-то странно вы себе процесс выдумали. Обычно это выглядит так:
    1. Нужна модалка
    2. Ветвимся от мастера например в ветку feature/modal
    3. Разрабатываем модалку
    4. Тестируем
    5. Если всё ок, то делаем merge request
    6. Сливаем ветку в master

    Бывают, конечно, долгоживущие ветки, но лично я стараюсь их избегать, чтобы не было проблем с актуализацией и конфликтами.
    Ответ написан
    Комментировать
  • Нашел в себе талант монетизировать приложения и игры - что теперь делать?

    spelych
    @spelych
    люблю людей
    монетизируйте талант
    Ответ написан
    Комментировать
  • Можете поревьюить?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Критерии оценки беру тут: https://github.com/index0h/php-conventions конечно часть по оформлению, от части вкусовщина, но хотя бы PSR уважать надо.

    1. В док блоках для свойств очень не плохо было бы указать типы и привести их к camelCase.
    2. Почему private методы вначале класса?))
    3. У вас отсутствует валидация аргументов в методах. Что будет, если в конструктор запихнуть не токен, а объект например, с остальными методами - тоже.
    4. В приватных статических методах нет смысла (если честно статика в принципе штука довольно вредная, по ссылке описано почему).
    5. filter* методы - не очень, откройте для себя array_shift и array_pop, вам в принципе нужны эти методы?
    6. В методе getReplyTimes заюзайте array_filter
    7. Я не знаю, что представляет собой $messages, но по хорошему - это должно быть что-то типа Entity с геттерами и сеттерами, с гарантиями структуры данных. Если это какой-то \stdClass - это очень печально.
    Ответ написан
    2 комментария
  • Можете поревьюить?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    1. ссылка - не экономьте на autoloader, это не рационально, если уже начали использовать :)
    2. ссылка - лучше собирать такие строки заранее в переменную и потом передавать как аргумент, неудобно поддерживать их "внутри скобок", а экономия на одной переменной ничего не даст
    3. ссылка Структура респонса никак не описывается, т.е. нельзя ничего понять, пока не посмотришь в доку vk или руками не потестишь. Нужно или инкапсулировать респонс в класс, или дать ему какую-то предсказуемую структуру массива.
    4. ccылка Внести больше ясности в "$key - 1" не описанием в phpdoc, а рефакторингом в максимально очевидный код.
    5. ссылка Нет гарантии, что к элементу $messages[0] можно применить метод out, надо это как-то предотвращать.
    6. ссылка конструктор затерялся среди множества методов, хорошо бы его вынести в начало :)
    7. ссылка хорошим тоном считается выносить в константы любые числа, даже очевидные (60).

    UPD.
    1. Общее замечание - на входные параметры методов тоже надо typehints писать.
    2. Много комментариев к коду - это признак того, что много неочевидных шагов, значит их надо дробить, инкапсулировать в методы, может даже выносить в отдельные классы, чтобы не перегружать текущий.
    Ответ написан
    Комментировать
  • Twitch зрители. Какой происходит накрутка?

    Sanasol
    @Sanasol Куратор тега Веб-разработка
    нельзя просто так взять и загуглить ошибку
    Найдите такой софт, посмотрите что он делает...

    Очевидно что просто так нельзя это сделать.

    Или вы хотите что вам выложили готовую схему как зарабатывать бабло на накрутке онлайна?
    Ответ написан
    2 комментария
  • Как переносить программу которая использует MySQL?

    @cpanelhostig
    hosting, php dev
    Вопрос из разряда: моя машина ездит на бензине, не заправлять же её из-за этого.
    Ответ написан
    Комментировать
  • Как защитить от перезаписи данных? Например форму для редактирования открывают два пользователя, и одновременно меняют его?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    updated_at... Просто присылайте с фронта при сохранении updated_at и сравнивайте с текущим. В базе больше присланого - не сохраняете документ, опционально отдаете новую версию и показываете.

    Веб-сокеты, version + 1, гребаные отдельные таблицы.. Божечки, какой ужас.
    Ответ написан
    8 комментариев
  • Каким образом подавать входные данные в нейросеть?

    @AlexSku
    не буду отвечать из-за модератора
    Самое простое - перевести в дробный вид и поделить на максимум. Тогда диапазон значений будет от 0 до 1. Иногда предпочитают [-1, 1], можете перевести и в этот диапазон.
    Ответ написан
    4 комментария
  • Почему медленно загружается страница на PHP, которая берёт данные из MySQL?

    gzhegow
    @gzhegow
    aka "ОбнимиБизнесмена"
    ORDER BY put_date ASC
    больно ссуко( хотя может и не очень

    индекс на парент убедись что есть. можно даже внешний ключ, похер что в одной таблице.

    у тебя дерево вложенности. очень большое (больше 3-4 уровней вполне возможно) - да ещё и с огромным числом записей. делать его через
    id,parent_id
    это очень тяжело

    тебе нужно делать отдельную таблицу
    CommentsTree
    id, comment_id, parent_id, depth, level

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

    id, comment_id, parent_id, depth, level (левел можно в таблице комментов хранить а не в дереве, они одинаковые для конкретного коммента)
    // это вот было
    1, 1, 1, 0, 1 // читать как "коммент 1 родитель он же сам (1), дельта глубины 0, общий уровень 1"
    2, 2, 2, 0, 2 // читать как "коммент 2 родитель он же сам (2), дельта глубины 0, общий уровень 2"
    3, 2, 1, 1, 2 // читать как "коммент 1 родитель 1, дельта глубины 1, общий уровень 2"

    // добавляем потомка к 2
    4, 3, 3, 0, 3 // читать как "коммент 3 родитель он же сам (3), дельта глубины 0, общий уровень 3"
    5, 3, 2, 0, 3 // читать как "коммент 3 родитель 2, дельта глубины 1, общий уровень 3"
    6, 3, 1, 2, 3 // читать как "коммент 3 родитель 1, дельта глубины 2, общий уровень 3"

    Потом из этой таблицы можно дернуть WHERE parent_id = :parent и получить все дерево

    Если похожим образом будешь делать товары, которые кстати говоря бывают в двух категориях одновременно - то еще добавится поле category_path, где через точку (1.2.3) или в JSON ([1,2,3]) лежит путь до самого верха в качестве точки отсчета вместо category_id
    Ответ написан
    2 комментария
  • Вывод комментариев из обсуждения группы ВК?

    @entermix
    Используйте API, чтобы получить список обсуждений и комментариев:

    https://vk.com/dev/board.getTopics
    https://vk.com/dev/board.getComments
    Ответ написан
    Комментировать
  • В чем отличие возвращаемого массива от объектов?

    php666
    @php666
    PHP-макака
    Для чего, в данном случае, возвращать объекты?
    Твой вопрос говорит о том, что ты не понимаешь разницу между объектом и массивом.

    Это не одно и тоже.
    Объект - это не просто хранилище данных, как массив.
    Объект - это описание некой сущности, представление этой сущности в рамках языка программирования. Объект может иметь свойства и методы, оперирующие этими свойствами или методы, делающие еще что-либо, что касается непосредственно этого объекта.

    Прочти хот-бы пол книги "Гради Буч - Объектно-ориентированный анализ и проектирование". И ты перестанешь задавать эти детские вопросы.

    Чем мне это поможет на конкретном примере?
    ОК. Пример. Давай допустим, что твой объект Product не просто содержит свойства, а каждое свойство..... да - тоже является объеком. Итак, перепишем конструктор, добавим несколько свойств новых, для примера:

    public function __construct(int $id, string $name, int $price, $decription, $discount_date){
        $this->id = $id;
        $this->name = new EntityText($name);
        $this->price = new Price($price);
        $this->decription = new EntityText($decription);
        $this->discount_date = new MyDate($discount_date); // MyDate extends \Datetime
      }


    Требование к одной из страниц магазина, показывающего продукт: нужно отображать цену в RUB и в USD. Текст описания не должен быть более 200 символов. Показать дату окончания скидки в человеческом формате.

    <html>
     <div id="product<?=$obj->getId()?>">
      <h1><?=$obj->getName()->getTextValue()?></h1>
      <p>Цена: <?=$obj->getPrice()->getUSD()->asText()?></p> <!-- например, выведет "101 доллар США" (c правильной формой слова "доллар/доллара/долларов") -->
      <p><?=$obj->getDescription()->getTextValue(200)?></p>
      <p>Скидка действут <?=$obj->getDiscountDate()->formatAsHuman()?></p> <!-- выведет "еще 2 дня" -->
     </div>
    </html>


    Теперь вопрос: как это будет выглядеть на массивах? Разницу видишь?

    и начинай читать отсюда- https://dom-knig.com/read_210105-3
    Ответ написан
  • Как именно делать реализацию интерфейсов в "Инверсии зависимостей"?

    mad_maximus
    @mad_maximus
    Интерфейс должен быть один, а не 100500, а уже адаптеров должно быть 100500, если столько типов подключений возможно (pgsql, mysql, sqlite, etc), и уже этот интерфейс инжектить в класс по работе с базой данных, тогда при смене подключения все будет продолжать работать.
    Ответ написан
    9 комментариев
  • Где сохраняются пароли если нет php файлов?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Учиться неохота, а зачет по информатике нужен? Купите наши курсы по sql injection и забудьте о несданных экзаменах! Все что вам нужно - найти php и mysql в коде странички! Спешите, только сегодня за уникальную цену - $9,99! Невежество и лень в подарок!

    PS:

    информация о sql инъекциях на просторах интернета на таких сайтах как Habrhabr и webware рассчитана на лохов .
    или же тема о инъекциях специально раскрывается не полностью...
    пил чай - засрал монитор, перепугал кота... )))
    Ответ написан
    2 комментария
  • Почему приходят порой пустые заявки?

    ivan_zhuck
    @ivan_zhuck
    Валидация должна быть не только на фронте, но и на беке. Поскольку POST запрос можно отправить не только через форму, но и напрямую, обратившить по адресу обработчика формы. Отправлять такой запрос могут спам-роботы, ушлые пользователи, которые ищут уязвимости и т.д. В самом примитивном случае можно сделать так:

    $name = !empty($_POST['name'])?$_POST['name']:false;
    $phone = !empty($_POST['phone'])?$_POST['phone']:false;
    
    if($name and $phone){
          //тут отправляем форму
    }else{
         //тут сообщаем об ошибке
    }


    В не примитивном случае, должна быть более строгая валидация и в клиентской части приложения и в серверной. Например: в имени могу быть только буквы,пробелы и дефисы, а строка номера телефона после очистки от прочих символов должна содержать 10 числел. Сама форма должна быть защищена от CSRF, XSS и прочих типовых уязвимостей. Если форма публичная (например форма контактов, как в вашем случае) должен присутствовать механизм от защиты отправки формы ботами, например reCAPTCHA.
    Ответ написан
    Комментировать
  • Как сделать чтобы пароль срабатывал по кодировке MD5?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    MD5 - это не кодировка, а хэш-функция.
    Ответ написан
    Комментировать
  • Безопасно ли хранить креды от базы в config.php?

    SagePtr
    @SagePtr
    Еда - это святое
    За пределами веб-корня желательно
    Ответ написан
    Комментировать
  • Как избавиться от "такого" кода?

    Zraza
    @Zraza
    Помог ответ? Отметь решением!
    Я бы посоветовал:
    1) Разбить код на функции с осмысленными названиями.
    Гораздо лучшее читаются короткие участки кода.
    Для примера, я бы вынес функции validateRequest, sendMessage, findAnswer. Перенести в отдельные функции/методы классы запросы к внешним сервисам (vk)
    2) Убрать неиспользуемые переменные. Зачем тут $GROUP_ID ?
    3) Не использовать однобуквенные переменные.
    Вместо `foreach ($VK_CONFIG_FAQ as $k => $v) {` лучше что-то вроде `foreach ($VK_CONFIG_FAQ as $questionPattern => $answers) {`
    4) Не дублировать строковые константы типа 'Бот не нашёл ответа на ваш вопрос!'. Лучше вынести в отдельную константу типа NOT_FOUND_ANSWER

    Ну и про PSR уже написали
    Ответ написан
    Комментировать
  • Как в php разбить 12ти-значное число на определенные блоки?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Есть специально для этого в PHP функция sscanf() – разбирает строку по формату.

    $str = "111222772019"; // строка из БД
    
    list($unit, $employee, $serial, $year) = sscanf($str, "%3d%3d%2d%4d");
    // 3 цифры, 3 цифры, 2 цифры, 4 цифры
    
    printf("Unit: %d, man: %d, id: %d, year: %d<br/>", $unit, $employee, $serial, $year);
    // Unit: 111, man: 222, id: 77, year: 2019
    Ответ написан
    Комментировать
  • Как можно уникализировать картинку для facebook?

    Попробуйте добавить картинке шум, 5–10%
    Ответ написан
    Комментировать