Задать вопрос
  • 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
    Седой и строгий
    Если ознакомиться с определение алгоритма, становится очевидна бессмысленность заявления:

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

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

    @vanillathunder
    Мухи отдельно, котлеты отдельно. Логику нужно хранить в одних методах, транзакции с вызовом логики в другом.
    Ответ написан
    Комментировать
  • Уехал в Москву, но не тяну по сложности, стоит ли возвращаться домой?

    @itsjustmypage
    Если взяли, значит устраиваешь. Продолжай штудировать и спрашивать. Английский технический довольно простой и переводчики такое нормально переводят.

    KEEP-CALM-POSTER-LOW_large__78588.129146
    Ответ написан
    Комментировать