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

    @mazahaler
    Nuxt отсылает
    https://github.com/nuxt/loading-screen/blob/master...
    Там на страничке в поиске введи "loading/sse"
    Ответ написан
    Комментировать
  • Какое окружение вы используете для разработки php?

    @kot999
    Backend software engineer
    phpStorm + docker, в современном мире отпала необходимость в сборках (типа xampp или denver), все прекрасно заводится и переносится в docker, очень приближенно к production окружению
    Ответ написан
    3 комментария
  • Как правильно оценивать сроки на разработку сайта в web студии?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    «В молодости я спросил у начальника, как оценить время на выполнение работы? И начальник ответил мне:
    — Время, которое ты планируешь, умножить на Пи пополам, плюс 2 недели.
    — Почему Пи пополам? — удивился я.
    — Потому что в реальной жизни ты никогда не будешь двигаться к своей цели напрямую, а скорее — по дуге окружности.
    — А почему плюс две недели?
    — А потому, что когда ты в итоге просрёшь все сроки, то за две недели хоть что-то успеешь сделать.» (с)
    Ответ написан
    1 комментарий
  • Почему Service Locator это зло и что использовать вместо?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    Основные минусы:
    - В результате, между классом и его клиентом существует формальный или неформальный «контракт», который выражается в виде предусловий (требований к клиенту) и постусловий (гарантий выполнения работы). Однако если класс принимает экземпляр сервис локатора, или, хуже того, использует глобальный локатор, то этот контракт, а точнее требования, которые нужно выполнить клиенту класса, становятся неясными
    - Когда наш класс использует сервис локатор, то стабильность класса становится неопределенной. Наш класс, теоретически, может использовать что угодно, поэтому изменение любого класса (или интерфейса) в нашем проекте может затронуть произвольное количество классов и модулей
    - Самое страшное в Сервис Локаторе то, что он дает видимость хорошего дизайна. У нас никто не знает о конкретных классах, все завязаны на интерфейсы, все «нормально» тестируется и «расширяется». Но когда вы попробуете использовать ваш код в другом контексте или когда кто-то попробует использовать его повторно, вы с ужасом поймете, что у вас есть дикая «логическая» связанность, о которой вы и не подозревали
    - Для меня ясность и понятность интерфейса класса важнее количества параметров конструктора. Я не исключаю, что бывают случаи, когда сервис локатор является наименьшим злом, но я бы в любом случае постарался свести его использования к минимуму.
    Ответ написан
    Комментировать
  • Почему Service Locator это зло и что использовать вместо?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Все эти страшные слова - они на самом деле всегда про одно и то же - про связность. Когда ты хардкодишь внутри класса вызов какого-то конкретного сервиса - ты намертво к нему привязываешься. И чтобы поменять сервис на другой, ты будешь вынужден поменять код класса. Окей, поменял. И тут же в другом месте, где этот же класс использовался, что-то сломалось! И что теперь? Делать два класса, которые различаются одной строчкой? Нет конечно. А как тогда использовать один и тот же класс для обработки разных входящих данных (или одних и тех же данных, но разными способами)? Сделать его поведение изменяемым. То есть сделать изменяемыми те инструменты, которыми он пользуется - т.е. его зависимости.

    Поэтому все зависимости обычно передаются через конструктор (и поэтому и называются инъекция зависимостей.)

    Таким образом мы можем менять поведение класса, не меняя его код

    Но тут надо понимать, что всё это работает только при правильном применении ООП. А точнее просто при применении ООП. Потому что 98% "ООП" кода, который пишется на РНР - это голимая процедурщина, даже если она обёрнута в классы и методы. Если у тебя метод класса представляет из себя стену кода, которую ты тупо перенёс из файла, инклюдившегося в любимое похапешное спагетти - то это не ООП. Это та же процедурщина, вид сбоку. И смысл использования dependency injection ты с ним не почуствуешь. Будешь конечно применять, но в качестве карго культа - потому что тебе это на тостере написали.
    А вот когда твой код начнет становиться действительно объектным - тогда стразу станет понятнее.


    Похожим на сервис локатор является сервис- или DI-контейнер. Используемый вручную, он является тем же самым сервис локатором. Поэтому вручную его никогда не надо вызывать - что и запрещается в симфоневских конроллерах - а только для автоматического создания классов. В МВЦ у тебя ведь очень многие объекты создаются автоматом - сущности, контроллеры. И вот для того, чтобы при автоматическом создании экземпляра класса у тебя были на руках все требуемые сервисы - и нужен контейнер.

    Соотвтственно, ответ на вопрос "что использовать?" очень простой:
    - при ручном создании экземпляра объекта, все зависимости передавать в него через конструктор, а не получать "из воздуха" в коде.
    - при автоматическом создании экземпляра объекта, использовать dependency injection container

    В этим смысле очень полезно освоить Симфони - строгий фрейворк, в котором нет сервис локатора и в котором запрещено пользоваться контейнером напрямую.
    Ответ написан
    4 комментария
  • Как превратить белый фон в прозрачный у JPEG-картинки на сайте?

    kocherman
    @kocherman
    Команда должна работать на всех операционных системах. Требует установленный ImageMagick. Можно переделать в функции PHP, но мне лень.
    convert source.jpg -fill none -fuzz 1% -draw 'matte 0,0 floodfill' -flop  -draw 'matte 0,0 floodfill' -flop dest.png

    Фон берётся из пикселя [0,0], нахлест (fuzz) 1%.
    Как применить команду в цикле пакетно?
    Например так:
    echo 'convert $1 -fill none -fuzz 1% -draw "matte 0,0 floodfill" -flop  -draw "matte 0,0 floodfill" -flop ${1%.*}.png' > ~/convert.sh
    chmod +x ~/convert.sh
    cd ~/Pictures
    find -name '*.jpg' | xargs -L1 -P8 ~/convert.sh
    rm ~/convert.sh

    Скрипт уберет фон у всех картинок *.jpg в папке $HOME/Pictures в 8 потоков.
    Ответ написан
    Комментировать
  • Что думаете о Livewire и Inertia.js?

    Insolita
    @Insolita
    Отчаянная домохозяйка
    Про inertia почти ничего не скажу. Про livewire - Для mvp, низкобюджетных стартапов, инди-проектов, того что по умолчанию для ограниченной аудитории и не должно быть слишком нагруженным, админок каких-то... вполне себе вариант.
    Для более серьёзных вещей и с расчетом на перспективу - я бы оставалась на проверенных технологиях.
    Из подводных камней - с технологической стороны - дикое смешение ответственностей. С практической - каждый чих изменения в интерфейсе - та же кнопочка счетчика, смена таба, или еще чего, реализованного без православных скриптов - это запросы на сервер. И еще - серьёзный локинг на этих технологиях, их апдейтах.
    А конкретно tailwind мне таки зашёл, если его с умом готовить и выносить наборы в scss. В компании с purgecss на выходе можно получить очень лёгкий css файлик. Но он обязательно в компании с компонентами - блейд, или js -фреймворков (И это, разумеется с позиции бекендера. Если на проекте есть заведующий фронтом - то ему и править балом).
    В любом случае я бы посоветовала не полагаться только на мнение других, а покрутить и пощупать всё самому. Как минимум - они на хайпе, и значит есть вероятность что все равно с ними столкнётесь рано или поздно
    Ответ написан
    Комментировать
  • Как "прокачать" Trello?

    zamboga
    @zamboga
    Аналитика данных, BI-аналитика, дашборды
    Быстрое знакомство и описание Trello
    • Философия Trello
    https://netology.ru/blog/trello
    • Как использовать Trello для планирования
    interesno.co/myself/3128a1df69ba
    • 12 советов для тех, кто пользуется Trello
    www.lookatme.ru/mag/live/things/214757-trello-tips...


    Расширения Сhrome для Trello
    • Полезные расширения и настройки
    https://lifehacker.ru/2016/04/12/10-dopolnenij-dly...
    betteri.ru/post/rukovodstvo-po-produktivnoy-rabote...
    ○ Мои надстройки https://i.imgur.com/bHbdtiK.png
    ○ Для управления расширениями Хром: SimpleExtManager

    ○ Надстройки Google chrome (использую постоянно)
    § Boards for Trello
    § Card Colors for Trello
    § Next Step for Trello
    § Plus for Trello (тайм-трекинг, отчёты, Scrum)
    § Pro for Trello, FREE Trelo tweaks
    § Reports for Trello
    § Toggl Button: Productivity & Time Tracker
    § Trellists: Trello Lists Master
    § Trello List Wizard
    § Multiselect for Trello (платный)

    ○ Надстройки Google chrome (использую периодически)
    § List Highlighter for Trello
    § Slim Lists for Trello
    § Trelabels for Trello
    § Trello List Filter
    § TrelloExport
    § Ultimella, the features pack for Trello

    • Система отчетов
    https://reportsfortrello.com/
    https://www.toggl.com/ (надо поставить расширение toggl для хром)
    www.plusfortrello.com

    • Диаграма Ганта
    https://elegantt.com/
    Gantt for Trello | by Placker.com

    • Для автозадач:
    https://echofortrello.com (попроще) (прекратил существование)
    https://butlerfortrello.com (посложнее, но и функционал шире)
    https://ifttt.com/applets/299813p-schedule-daily-o...

    Список тайм-трекеров для Trello
    https://help.trello.com/article/941-time-tracking

    Расширения Хром для тайминга времени Trello на основе техники Pomodoro
    • Timeneye
    ○ Плюсы
    § Размытый фон при запуске таймера -> фокус на задаче
    ○ Минусы
    § Простой таймер, без помидорок
    § Автоматом не заполняет поля "проект", "задача" и т.д. Хотя мог бы брать все это из Trello
    ○ Итог
    § Не понравился, неудобный

    • Pomello
    ○ Плюсы
    § Добавляет символ "помидорки" или "галочки" к каждой выполненной задаче, + число помидорок (даже дробных)
    § Очень простой и удобный
    § Плашка "овер всех окон" с обратным отсчетом
    ○ Минусы
    § Нет отчетов
    ○ Итог
    § Использую из-за символов "помидорки"

    • PomodoneApp
    ○ Плюсы
    § Обратный отсчёт в трее
    ○ Есть отчеты
    § Управляет задачами в Trello: можно закрыть любую, она автоматом переместиться в "done"
    § Подцепляет теги и проект, это удобно, не надо самому ставить.
    ○ Минусы
    § Отчеты в Toggle удобнее
    ○ Итог
    § Использую, т.к. нравится обратный отсчет в трее, не так "давит", как Pomello

    • Toggl
    ○ Плюсы
    § Можно логгировать отдельно подзадачи из чеклистов Trello
    § Очень крутые, подробные и красивые отчеты
    ○ Минусы
    § Автопауза не связана с Trello
    § Все управление задачами — только через web-trello
    § Не берет "теги" из Trello
    ○ Итог
    § Использую постоянно, т.к. нужны отчеты
    Ответ написан
    Комментировать
  • Почему некоторые люди утврерждают что плохо использовать jQuery?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Во-первых, jQuery родилась во времена, когда каждый браузер реализовывал JS и DOM API по-своему, её основным назначением было сглаживать эти различия. В наше время это преимущество библиотеки уже утеряно. Во-вторых, jQuery не соответствует основному вызову современности - сложной кодовой базе. В развитом фронте код, использующий jQuery, быстро превращается в трудно сопровождаемую лапшу. Поэтому для простого фронта чаще стали использовать ванильный JS, а для сложного фреймворки типа React, Angular и Vue.
    Ответ написан
    23 комментария
  • Плоха ли описанная архитектура, для laravel?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Чем это хуже подхода - когда вся логика распологается в сервисах, и в целом чем плох такой подход?
    Он ничем не хуже и не лучше. Пакеты - это одно, сервисы - другое, а Вы их зачем-то "складываете в одну корзину". Что по сути своей представляет пакет? - пакет - это некий модуль, решающий какую-то конкретную задачу, поддерживаемый и обслуживаемый конкретным веднором. В массе своей пакеты никак не привязаны к тому, где и как они будут использоваться. То есть, пакет - это некий набор общей логики, процессов и т.д. для решения какой-то задачи (или набора схожих/связанных задач), например для обработки изображений.

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

    Не стоит забывать, что чем более универсальным является какое-то решение (аки "швецарский нож") - тем хуже оно решает конкретную задачу. Это же полностью применимо и к тому, что описываете Вы. Если Вы будете делать некие универсальные решения и складывать их в пакеты:
    1. Потеряете выраженность решений
    2. Потеряете производительность
    3. Получите на обслуживание много приложений (пакетов) вместо одного конкретного

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

    "Не гадить в код" - это искусство и опыт, которые никакой "пакет" не заменит.
    Ответ написан
    1 комментарий
  • Как создать сайт типа пикабу?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Ребят, пользуясь случаем хочу спросить, как мне сделать сайт типа Авито. Ну или Яндекс.Маркет - не особо важно.
    Главное, чтобы денег заработать.
    Какую мне библиотеку скачать для этого?
    Ответ написан
    2 комментария
  • Что такое CORS?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Cross-Origin.... это значит "между хостами". То есть вы делаете запросы с "localhost:3000" на "localhost:8080" или с "example.com" на "google.com", или с "example.com" на "api.example.com".

    Resource - тобишь ресурсы. Можете почитать что это такое в контексте REST или HTTP или URI.

    Sharing - ну тут я думаю тоже должно быть понятно. "обмен". То есть это правила которые определяют "можно ли чуваку получить доступ к этому ресурсу".

    Нужна эта штука для того что бы говорить "разрешает ли сервак запросы с этого орижина на этот ресурс".
    Ответ написан
    1 комментарий
  • SPA и REST API - как грамотно построить аутентификацию?

    @motomac
    Делаем два метода аутентификации: Resource Owner Password Credentials Grant и Refresh token grant.

    SPA отправляет логин/пароль юзера на первый endpoint. В ответ получаем access_token (например, JWT), refresh_token и expires_in. Сохраняем все это добро куда-нибудь, например, в Local Storage. Время жизни JWT-токена лучше ставить небольшое (например, 1 час), потому что отозвать его нельзя. Далее SPA при каждом запросе к API проверяет время жизни токена expires_in из Local Storage, и когда оно истекает, отправляет запрос на обновление токена (refresh_token). Все это прозрачно для юзера.

    Stateless, по-моему, и проще, и универсальнее. Если потом делать, например, мобильное приложение, API переписывать не придется.

    Вся фишка JWT по сути только в том, что не нужно дергать БД при каждом запросе к API. Делать это придется, например, только раз в час при refresh'е токена. Больше никаких существенных преимуществ перед традиционными токенами, хранящимися в БД, нет.

    Советую курить именно официальный RFC по oAuth2, а не всякие блогпосты а-ля "OAuth2 простыми словами". Сам через это прошел. RFC - самый понятный и доходчивый источник знаний.
    Ответ написан
    1 комментарий
  • Хорошие практики тестирования в Laravel проектах?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Feature - это end-to-end тесты. Ты берешь данные, отправляешь на эндпоинт и проверяешь ответ/статус выполнения задачи. Из этого следует, что никаких под-директорий там быть не может - максимум одна для API, одна для Web, и, если сильно хочется, то одна для CLI. В таких тестах НЕ должно быть моков, подмены зависимостей или чего-либо еще, что мешает полному тестированию эндпоинта от начала и до конца.

    Обычно пишу по одному на каждый эндпоинт, типа GamesListTest для /api/games.

    Unit - юнит тесты. Должны тестировать один класс и мокать остальные зависимости. Тут можете тестировать отдельно контроллеры, джобы, репозитории, сервисы и что-либо еще, что вам вздумается. Все депенденси этих классов нужно подменять и проверять входные аргументы (как можно тщательней, mockery + hamcrest-php).

    Тоже обычно по тесту на класс, то зависит от размера класса, о котором идет речь, и сложности его методов.

    Всегда использую snake_case - так читаемей. assert'ов может быть хоть миллион - за этим вообще не слежу. Разбиваю тесты на методы чисто по логике и нужде - как проще, так и делаю. Лично у меня тесты лежат в "модулях", а не в /tests, но дефолтная структура - неплохой вариант для начала.
    Ответ написан
    4 комментария
  • Быстрая среда web-разработки на основе vagrant, возможно?

    Посмотрите https://laravel.com/docs/5.8/homestead
    Вагрант + настроенное окружение + маппинг папок между виртуалкой и локальной машиной + удобная конфигурация
    Ответ написан
    Комментировать
  • Как лучше организовать рабочее окружение для веб разработчика?

    sim3x
    @sim3x
    Начните с виртуалки, а там сами поймете
    Ответ написан
    Комментировать
  • Как лучше организовать рабочее окружение для веб разработчика?

    Ну тут без вариантов - виртуалка.

    Есть такие решения:
    - Задействовать встроенный виндовый WSL. Установив, например, Ubuntu из магазина Windows. Неполноценная система, но для веб разработчика более чем достаточно.
    - Самому накатить систему в Hyper-V, VMware или VirtualBox.
    - Vagrant
    - Docker for Windows. Также его можно вручную поставить в систему во втором способе. В WSL работать не будет.

    В общем, если нужно только окружение, то советую Docker. А если цель получить расширенные знания в настройке сервисов - второй способ. Сам являюсь fullstack разработчиком, и немного развиваюсь в сторону devops. В случае с Docker легко поднимать разные сервисы разных версий для тестирований, особенно, если планируется выйти за пределы apache+php+бд. Например redis, rabbitmq, elastic search, node.
    Ответ написан
    2 комментария
  • Как лучше организовать рабочее окружение для веб разработчика?

    DevMan
    @DevMan
    vagrant
    Ответ написан
    Комментировать
  • Как можно создать такую анимацию? Точнее с помощью чего?

    OxCom
    @OxCom


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