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

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

    mrusklon
    @mrusklon
    Не получается? Яростно гугли!
    а я храню все в папках с названием домена , потом все это захламляется всяким мусором , папками node_modules , psd файлами и rar архивами , затем чтоб что то найти я иду к заказчику и прошу его отправить файл повторно даже не утруждая себя поиском в истории сообщений ссылки на нужный файл. А теперь я иду на тостер и ищу решение вопроса :)))))))))
    Ответ написан
    Комментировать
  • Как вы организовали хранение данных к проектам?

    opium
    @opium
    Просто люблю качественно работать
    по заказчикам все по папкам раскидываете
    закончили работу переместили в архив с годом
    итого в активной папке ну пяток активных заказчиков.
    Ответ написан
    Комментировать
  • "Раздать" микрофон и колонки по сети?

    Frankenstine
    @Frankenstine
    Сисадмин
    Гм, pulseaudio для винды? Говорят есть такой :)
    Ответ написан
    Комментировать
  • "Раздать" микрофон и колонки по сети?

    Stalker_RED
    @Stalker_RED
    Для многих плееров есть плагины, позволяющие транслировать аудио-поток по сети. Прямо как интернет-радио.
    Вот для foobar2000, например www.foobar2000.org/components/view/foo_upnp

    На счет гарнитуры не совсем понятно что именно вы хотите сделать.
    Ответ написан
    3 комментария
  • "Раздать" микрофон и колонки по сети?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. Есть Logitech BT адаптер. Вход - Bluetooth-сигнал с ноута, смарта; Выход - через аудио-разъём на колонки.
    bluebox2-gallery.png
    2. Клиент-серверный продукт для VoIP-чата для геймеров: https://wiki.mumble.info/wiki/Main_Page
    Ответ написан
    2 комментария
  • Есть ли софт для зеркалирования папок с условиями для Windows?

    Plinio
    @Plinio
    Если гора не идёт к Магомету, Магомет идёт к горе! Почему бы не сделать наоборот и штатными средствами системы? На Windows 7 такая штука называется "Центр синхронизации", она отслеживает изменения в SMB хранилище с заданным интервалом и при изменениях перекачивает файлы на компьютер. Если требуется лишь BackUp, выбор отличный, главное не подход, а результат. Плюсы: включено в систему, хорошо работает. Минус: будит NAS, сброс кеша не очевиден.
    Ответ написан
    Комментировать
  • Есть ли софт для зеркалирования папок с условиями для Windows?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    Ответ написан
    Комментировать
  • Есть ли софт для зеркалирования папок с условиями для Windows?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Ответ написан
    Комментировать
  • Как писать много кода, оставляя его простым, как в начале?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Делайте маленькие интерфейсы. Например сервис регистрации пользователя на вход принимает dto и реализует внутри кучу логики, но у этого сервиса интерфейс из 1 метода. Безусловно, внутри может юзаться и 5 и 10 и щещ больше не экспортируемых, это ок, но работать с таком сервисом будет очень просто, да и тестировать другие штуки, использующие его будет проще.

    Не делайте сервисы с изменяемым состоянием, на сколько это возможно конечно.

    Старайтесь не использовать экспортируемые переменные пакета, это аналог глобальных переменных, а про их вред уже 100500 обзоров написано.

    Грамотно разделяйте алгоритм по методам. Если ваш метод делает 2 крупных разных вещи - вероятно стоит разделить. Если одну крупную возможно разделять не стоит. По примеру с регистрацией: весь процесс от валидации, сохранении пользователя до подергивания сервисов отправки почты спокойно можно забить в один метод. К эмпирическим правилам в стиле метод не больше 20 строк - подходите с осторожностью, далеко не факт что разделение будет хорошей идеей.
    Ответ написан
    Комментировать
  • Насколько оправдана связка NodeJS + Postgres?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    На сколько эффективно использовать ложку? Для супа - очень, для перемешивания бетона - неочень.

    Задача определяет требуемые технологии. Вы же тыкаете пальцем в небо.
    Ответ написан
    Комментировать
  • Какие есть готовые CMS по сайтам недвижимости?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Вы ресурсом ошиблись
    Ответ написан
    Комментировать
  • Где лучше хранить информацию в ларавель?

    v_decadence
    @v_decadence
    Хранить можно много где. Зависит от того, насколько критична будет потеря этого значения. Куки, Local Storage и сессии невечны, самоё надёжное в базе данных. Создавайте столбец server и вперёд:
    $user = Auth::user();
    $user->server = "127.0.0.1";
    $user->save();
    Ответ написан
    Комментировать
  • Какие основные принципы создания генератора админок?

    qonand
    @qonand
    Software Engineer
    что можно почитать о том как писать "универсальные" cms(админки), и\или их генераторы?

    Что бы писать универсальные программный компоненты (и не важно админки это или нет) необходимо иметь навыки в построении и разработке архитектуры. Такие навыки Вы не получите прочитав пару каких-то статей. Для этого нужно читать множество литературы по архитектуре, закреплять всю информацию на практике (а на этой уйдет не один месяц). Только после того как Вы усвоите все принципы Вы поймете как строить универсальные приложения и такие вопросы у Вас не будут возникать.

    Что нужно учитывать при их создании?

    На этот вопрос Вам никто не ответит, все зависит от конкретной ситуации.
    Ответ написан
    Комментировать
  • Попросили проверить код, на что смотреть нужно?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Смотря зачем)). Я когда делаю Code Review критерии следующие:

    * Безопасность:
    - Каждый аргумент метода простого типа должен проверяться на тип в случае его проксирования и на граничные значения в случае обработки. Чуть что не так - бросается исключение. Если метод с кучкой аргументов на 80% состоит из поверки из аргументов - это вполне норм))
    - Никаких trigger_error, только исключения.
    - Исключения ДОЛЖНЫ быть человеко-понятны, всякие "Something went wrong" можно отдавать пользователю, но в лог должно попасть исключение со стектрейсом и человеко-понятным описанием, что же там пошло не так.
    - Каждый аргумент (объект) метода должен быть с тайпхинтингом на этот его класс, или интерфейс.
    - За eval как правило шлю на **й.
    - @ допускается только в безвыходных ситуациях, например проверка json_last_error.
    - Перед работой с БД - обязательная проверка данных.
    - Никаких == и !=. Со swtich - единственное исключение, по ситуации.
    - Если метод возвращает не только bool, а еще что-то - жесткая проверка с ===, или !== обязательна.
    - Никаких условий с присваиваниями внутри. while($row = ...) - тоже идет лесом.
    - Магические геттеры/сеттеры разрешаются только в безвыходных ситуациях, в остальном - запрещены.
    - Конкатенации в sql - только в безвыходных ситуациях.
    - Параметры в sql - ТОЛЬКО через плейсхолдеры.
    - Никаких глобальных переменных.
    - Даты в виде строки разрешаются только в шаблонах и в БД, в пхп коде сразу преобразуется в \DateTimeImmutable (в безвыходных ситуациях разрешено \DateTime)
    - Конечно зависит от проекта, но как приавло должно быть всего две точки входа: index.php для web и console(или как-то по другому назваться) - для консоли.

    * Кодстайл PSR-2 + PSR-5 как минимум, + еще куча более жестких требований (для начала все то что в PSR помечено как SHOULD - становится MUST)
    - В PhpStorm ни одна строчка не должна подсвечиваться (исключением является typo ошибки, например словарик не знает какой-то из аббревиатур, принятых в вашем проекте). При этом разрешается использовать /** @noinspection *** */ для безвыходных ситуаций.
    - Если кто-то говорит, что пишет в другом редакторе и у него не подсвечивается, на эти отговорки кладется ВОТ ТАКЕЕЕНЫЙ мужской половой **й и отправляется на доработку)).

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

    * Тестируемость (в смысле простота тестирования) кода должна быть высокая.
    - Покрытие кода обязательно для всех возможных кейсов использования каждого публичного метода с моками зависимостей.

    * Принципы MVC:
    - Никаких обработок пользовательского ввода в моделях, от слова совсем.
    - Никаких ***ть запросов в БД из шаблонов.
    - Никаких верстки/js/css/sql-ин в контроллерах.
    - В моделях НИКАКОЙ МАГИИ, только приватные свойства + геттеры с сеттерами.
    - В моделях разрешено использовать метод save(при наличии такого разумеется) только в исключительных ситуациях. Во всех остальных - либо insert, либо update.

    * Принципы SOLD:
    - Никаких божественных объектов умеющих во все.
    - Если метод для внутреннего пользования - private, никаких public.
    - Статические методы разрешаются только в случае безвыходности.

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

    * Работа с БД:
    - Запрос в цикле должен быть РЕАЛЬНО обоснован.
    - За ORDER BY RAND() - шлю на***й.
    - Поиск не по ключам (конечно если таблица НЕ на 5 строк) запрещен.
    - Поиск без LIMIT (опять же если таблица НЕ на 5 строк) запрещен.
    - SELECT * - запрещен.
    - Денормализация БД должна быть обоснована.
    - MyISAM не используется (так уж)) )
    - Множественные операции обязательно в транзакции, с откатом если чо пошло не так.
    - БД не должна содержать бизнес логики, только данные в целостном виде.
    - Не должно быть нецелесообразного дерганья БД там, где без этого можно обойтись.

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

    * О людях:
    - "Я привык писать так и буду дальше" - не вопрос, ревью пройдешь только когда поменяешь свое мнение.
    - "Я пишу в vim-е и мне так удобно" - здорово, код консолью я тоже в нем пишу)) но есть требования к коду, если в них не сможешь - не пройдешь ревью.
    - "Я скопировал этот страшный метод и поменял 2 строчки" - это конечно замечательно, но по блейму автор всего этого метода ты, так что давай без говняшек, хорошо?
    - "Оно же работает!" - вот эта фраза переводится примерно так: "да, я понимаю, что пишу полную хрень, но не могу писать нормально потому, что руки из жо", я правильно тебя понял?))
    - "У меня все работает!" - рад за тебя, а как на счет продакшна?
    - "Там все просто" - не используй слово "просто", от слова "совсем". Вот тебе кусок кода (первого попавшегося с сложной бизнес логикой), где там ошибка (не важно есть она, или нет)? Ты смотришь его уже 2 минуты, в чем проблема, там же все "просто"))

    * Всякое:
    ActiveRecord (это я вам как в прошлом фанат Yii говорю) - полное говно, примите за исходную. По факту у вас бесконтрольно по проекту гуляют модельки с подключением к БД. Не раз натыкался на то, что в тех же шаблонах вызывают save, или update (за такое надо сжигать).
    То, что используется Laravel - это печально((. Что бы выполнить требования приведенные выше, приходится "воевать" с фреймворком.

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

    UPD

    Формализировал данные критерии по ссылочке: https://github.com/index0h/php-conventions
    Ответ написан
    55 комментариев
  • Как идёт docker workflow?

    Сферический веб-проект с докером DockerApp:
    DockerApp/ #корень репозитория окружения проекта
    image/
    web/
    DockerFile
    start.sh
    app/
    DockerFile
    start.sh
    db/
    DockerFile
    start.sh
    config/
    docker-compose.yml
    web.conf
    app.ini
    db.ini
    app.yml
    bin/
    up.sh
    down.sh
    show.sh
    log/
    app/ #субмодуль или внешний репозиторий, настроенный на корень репозитория основной кодовой базы проекта

    Основная разработка идёт в app/, изменения коммитятся в репозиторий основной кодовой базы. Сервера запускаются скриптом bin/start.sh, который совместно с config/docker-compose.yml поднимает все три сервера, пробрасывая 80 порт веб-сервера на указанный в аргументах порт хоста (на 80 с sudo) и добавляя в /etc/hosts хоста имя домена, также указанного в аргументах (то есть bin/start.sh 80 example.com). В качестве конфигов серверов и приложения монтируются или линкуются конфиги из каталога config.

    Это если вкратце о работе на дев-машине на сферическом проекте.
    Ответ написан
    Комментировать
  • Как правильно синхронизировать рабочий процесс(workflow) при помощи NAS WD MyCloud?

    DJZT
    @DJZT
    Laravel - code for you
    Есть ли вариант как безболезненно перенести все рабочие инструменты в домашнее облако с синхронизацией?


    Вы хотите и IDE там хранить и прочие программы?
    Нереально. Вдруг вы сядите за linux систему где-то?
    Или за winXp не дай бог.

    Git ваше всё для хранения кода. (Best practice)
    А окружение - там уже много чего зависит от компьютера, которым вы сидите.
    Меньше всего телодвижений с окружением (web server, modles, php, db etc...) можно достичь через vagrant машину.
    Достаточно будет поставить vagrant и виртуал систему и развернуть там свою машину.
    Ответ написан
    Комментировать