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

    Melkij
    @Melkij
    PostgreSQL DBA
    Слово namespace здесь неверно.
    Ищите по schema name и конкретно search_path

    Странно что вы не знаете что такое search_path, но он у вас модифицирован. В дефолтную настройку схема public включена и потому оба ваших запроса обычно делают одно и то же.

    В доктрине начиная с 2.5 схема указывается так:
    /**
     * Clerk
     *
     * @Table(schema="schema")
     */
    class Clerk { }

    Не уверен что будет работать для public схемы если доктрина предполагает что оно в search_path есть и так.
    Ответ написан
    1 комментарий
  • Как быть хорошим junior?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    1. Адекватность и самостоятельность.
    Детальнее: Умение понять суть задачи, чтобы выполнить ее. Самостоятельно решать проблемы - в это слово входит не только то, что возникла проблема - порешал. А умение решить проблемы, которые ты решить не можешь. То есть организовать решение проблемы. Заблочили аккаунт? Выяснить, вызвонить, попинать, чтобы разлочили побыстрее. Не знаешь как решить какую-то техническую проблему - достучаться до куратора. Не сидеть и ждать три дня, пока он вспомнит про твою проблему, а регулярно уточнять. Занят куратор - подойти к другому. Не успеваешь решить в срок - прийти к куратору заранее, а не за час до конца срока.
    В общем, чтобы за тобой не бегали.

    2. Умение ставить правильные вопросы.
    Сперва загуглить, потом задать вопрос для уточнения. В идеале ставить вопросы, на которые ответ будет "да" или "нет", но это я утрирую. Не бояться спрашивать вещи, которые совсем не понимаешь, но тут не нужно ожидать что все будут разжевывать - следует задать вопрос, чтобы понять куда копать. Иногда достаточно знать пару ключевых слов, по которым можно загуглить.

    3. Желание учиться.
    Не бояться изучить лишнее, потому что "мне же это не пригодится". Умение гуглить по ключевым словам. Не лениться изучать как что-то работает, чтобы понимать почему это происходит. Понимание принципов работы очень сильно увеличивает интуицию.
    Ответ написан
    1 комментарий
  • Fatal error: Uncaught Error: Call to undefined function arry() в чем ошибка в коде?

    usdglander
    @usdglander Куратор тега PHP
    Yipee-ki-yay
    Не объявлена функция arry. Написано же!
    Ответ написан
    2 комментария
  • Какие языки программирования лучше всего оплачиваются в России, США и Европе?

    @mamontm
    Оплачиваются не языки программирование.

    Оплачивается умение ими пользоваться.

    Есть буквально одно исключение - Cobol.
    Это один из старейших языков программирования, на котором начали писать еще тогда когда ваши родители еще не родились.
    Приходится иметь дело с очень древними программами, причем выполняющими весьма ответственные вещи, где высока цена ошибки (первыми, кто мог позволить себе компьютеры был очень крупный бизнес)

    о наблюдениям сервиса «Мой круг» в России последние пару лет по зарплатам лидируют...

    Вы неверно интерпретируйте данные.

    Просто ряд языков чаще используется в недорогих простых проектах. Что не отменяет их же использование в дорогих проектах. Но искажает понятие "средняя зарплата".

    Плюс недорогих проектов всегда намного больше. Что еще более искажает понятие "средняя зарплата".

    Ну то есть математически-формально всё так как описано в обзоре зарплат.

    Но вас же интересует, поди, сколько лично вы будете зарабатывать, если смените язык?
    А ваш заработок связан вовсе не с языком - а с тем, что вы в этом случае будете и с другим работодателем работать и опыта постепенно набераетесь.

    Причём если Scala и Elixir два года назад по зарплатам опережали прочие языки с сильным отрывом и за последние годы выросли по зарплате несильно, то Go и Objective-C за эти же два года совершили сильный отрыв от остальных языков и догнали Scala и Elixir

    Все упомянутые нельзя назвать распространенными на простых (то бишь на дешевых) проектах.

    P.S.:
    Узнаю типичный страх начинающего новичка (и типичное заблуждения уже начавшего новичка, который уже успел разочароваться в том, что ему не предлагают сходу 100 500 миллионов баков в месяц, как об этом все трубят) -

    "Я выучу не тот язык и карьера будет погублена"
    "Я выучу тот язык и карьера пойдет вверх".

    Язык не важен - достаточно выбрать любой язык из мейнстрима, чтобы просто на нем было можно найти работу (или, если вы в маленьком населенном пункте и будете работать не удаленно - тогда выбор языков вообще мал).

    Важно ваше умение программировать. А это понимание/знание - алгоритмов, парадигм, концепций, паттернов.

    Эти вещи из языка в язык повторяются.
    Трудно выучить только первый.

    Сменить язык программисту с опытом - не сложно.
    Ответ написан
    8 комментариев
  • Как сделать такую анимацию?

    hzzzzl
    @hzzzzl
    еать залипалово какое :D
    вот скрипт
    colbacolorbar.ru/themes/colba/assets/js/fluidWave.js

    вообще не понимаю что там происходит, вроде яваскрипт, но какой то непростой webGL фреймворк наверно

    UPD вот нашел на гитхабе это, хз может быть это оригинал кода
    https://gist.github.com/peretc001/1444c3df210cc66c...
    Ответ написан
    2 комментария
  • Как сделать такую анимацию?

    @jamtuson
    Эта штука сделана на WebGL с использованием уравнения Навье-Стокса
    https://ru.wikipedia.org/wiki/%D0%A3%D1%80%D0%B0%D...

    https://codepen.io/PavelDoGreat/pen/zdWzEL
    developer.download.nvidia.com/books/HTML/gpugems/g...
    Пример разбора есть в книге по динамике жидкостей.
    Ответ написан
    Комментировать
  • Почему PhpStorm требует установки расширения для curl и json?

    Ninazu
    @Ninazu
    Расширение - это дополнительные модули в PHP, они реализуют конкретно в вашем случае работу с CURL и JSON.
    Узнать подключенные модули
    https://www.php.net/manual/ru/function.extension-l...
    Список всех модулей
    https://www.php.net/manual/ru/extensions.alphabeti...

    Если на вашем сервере они установленны, то не факт что они будут установленны и на другом сервере. Поэтому PHPStorm рекоммендует добавить их в правила композера, чтоб в случае разворачивания на другом сервере, композер сообщил вам что расширения отсутсвуют

    Если бесит инспектор, то можете отключить это уведомление.
    5d4061ba05631701466003.png
    Ответ написан
    3 комментария
  • Почему при объявлении переменной, в любом языке программирования, резервируется весь размер памяти отведённый под тип данных?

    Вопрос из разряда "Почему в байте 8 бит?".

    Объявление переменной как раз является запросом на выделение памяти. Если вам необходимо выделить меньше памяти - можно использовать тип с меньшим размером - байт, бит. А примером динамически растущих структур памяти может быть какой-нибудь вектор из C++. В чем недостаток - накладные расходы. В случае недоступности непрерывного участка памяти при расширении классического массива, нужно будет скопировать всю структуру в другую область памяти. Гораздо быстрее и экономичнее с точки зрения скорости работы выделить сразу больший шмат памяти, благо её нынче не дефицит на ПК.
    Ответ написан
  • Попросили проверить код, на что смотреть нужно?

    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 комментариев
  • Как сделать анимацию svg элемента, чтобы произвольно менялась форма "лепёшки"?

    LenovoId
    @LenovoId Куратор тега SVG
    svg, css,js
    Для начала надо понять что это не лепёшка а форма которая имеет аттрибуты которые можно анимировать в smil
    Для использования этой не хитрой техники нужно сохранить несколько состояний элемента в поле values="" где их перечислить через ;

    https://codepen.io/topicstarter/pen/QRWWoM
    Ответ написан
    1 комментарий
  • Где лучше качество кода?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Все плохо
    • Глобальные переменные — зло
    • На лицо некий код, который и с сессией работает и с БД — явное нарушение общепринятных принципов, например SRP
    • $dao как инициализирована? Явно не через конструктор
    • Использование цифры, вот сиди гадай по ней — это плохо, используйте именованную константу. Например 3 — это некий статус для desktop, вот и назовите ее STATUS_DESKTOP, хотя далее...
    • вы обращаетесь к одному методу, который шибко умный — работает с флагами, тем самым нарушая SRP и сам содержит if/else, сделайте просто 2 раздельных метода:
      getMobileOpinionList()
      getDefaultOpinionList()

    • Предикат лучше вынести в отдельный метод isMobileOnly(), тк условия могут поменяться в нем, не будете же везде в if менять по всему проекту
    Ответ написан
    33 комментария
  • Что за проблема с регулярным выражением в Firefox?

    Lynn
    @Lynn
    nginx, js, css
    Firefox ещё не умеет такие выражения.
    https://bugzilla.mozilla.org/show_bug.cgi?id=1361876

    Воспользуйтесь каким-нибудь транспайлером
    https://github.com/tc39/proposal-regexp-unicode-pr...
    Ответ написан
    4 комментария
  • Как реализовать верстку с обтеканием?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    1. Расположить элементы так, как на картинке, проще всего заданием width, float и clear для них. И это логично, флоаты как раз предназначены для всевозможных обтеканий.
    2. Чтобы отступы между картинкой и текстом не скакали, была ровная сеточка, а строки в разных блоках совпадали по вертикали, имеет смысл жестко привязать ее (картинки) высоту к EM/REM. Вообще удобно все к этим единицам привязывать, но это уже другая история.
    3. Исходя из пункта 2, нужно добавить media-выражения для картинки на разные размеры экрана. Да, это лишняя работа. Да, это не чик-чик и в продакшен, но если важны мелочи в дизайне - делаем.
    4. На маленьких экранах все это будет плохо восприниматься, так что выстраиваем элементы в столбик. Ширина в 100% всему. По уму контент важнее, чем aside, так что меняем их порядок с помощью свойств flex, flex-direction и order.

    Получится что-то такое:

    Ответ написан
    1 комментарий
  • Что лучше extend или второй класс в html?

    sim3x
    @sim3x
    один для общих стилей, которые потом можно использовать повторно
    нет
    Для такого делайте extend

    Второй и третий класс стоит добавлять, если они динамически что-то меняют в дефолтном отображении елемента
    Если класс не меняется, то ему требуется один класс с именем, которое отображает его предназначение

    Для постоптимизации цсс используйте csso
    Ответ написан
    Комментировать
  • Как можно защитить PHP, не замедлив его?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ваш код никому не нужен.
    Ответ написан
    Комментировать
  • Почему всем так нужен Doctrine, если он много не умеет?

    usdglander
    @usdglander
    Yipee-ki-yay
    Практически любая абстракция над чем бы то ни было - это всегда компромисс между скоростью работы и удобством сопровождения. Доктрина как и любая друга абстракция - это выбор в пользу скорости/удобства разработки с отказом от универсальности в запросах. В вашем проекте был сделан именно такой выбор, правильный или нет - не известно, но если проект уже работает и живёт (и приносит прибыль), то вряд ли этот инструмент заменят.

    Почему доктрину многие так восхваляют?

    Ни один профессионал (если он действительно профи) не будет говорить что вот "это круто", а остальное - говно. Ибо он понимает что каждый инструмент имеет свои плюсы и минусы и подходит для своих задач. Умение видеть этот баланс и есть профессионализм.
    Ответ написан
    1 комментарий
  • Верно ли утверждение, что алгоритмы используются в основном в процедурном программировании, нежели ООП?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Если ознакомиться с определение алгоритма, становится очевидна бессмысленность заявления:

    Система последовательных операций (в соответствии с определёнными правилами) для решения какой-нибудь задачи.

    То есть вы заявляете, что в парадигме объектно-ориентированного программирования код вообще не пишут.
    Ответ написан
    Комментировать