• Где вы учите/ли PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Я могу сказать, где точно учить не надо
    руселлер и прочие видеокурсы. это реальный ад
    какой-то дятел на ютубе, который толкает RedBean - это полная жесть. новичкам этот редбин ни к чему, им надо основы учить, а основ он не даёт, его курсы для тех кто уже знает РНР и SQL. Но фокус в том что тем кто знает, его курсы даром не сдались, а новички из ничего вообще ничего не выносят, но потом со слезами и соплями пытаются что-то ваять и у них вообще ничего не выходит.
    otus . ru - я тут недавно увидел на их сайте пример кода, и чуть не поседел. Долго искал подпись что это коллекция примеров того как не надо писать, но это они всерьёз.
    твое коде муму сейчас посмотрел - написано такими же макаками на материале прошлого века. Если будешь искать работу то тебя даже на порог не пустят с таким кодом.
    В общем не знаю. скрепя сердце могу посоветовать хтмлакадемию, но там во-первых платно, а во-вторых материал тоже местами проседает. Но хотя бы менторы вроде нормальные, а не какая-то школота "с вконтакте".

    В целом я рекомендую учить не какой-то конкретный язык, а программирование в целом
    Ответ написан
    2 комментария
  • Почему много людей в IT недовольны своей работы?

    @RaGe22
    1) IT это интернет - поэтому всё нытье очень легко увидеть(поэтому делите его на 10)
    2) в IT больший процент инфантильных людей - отучился в ВУЗе делая что нравится, устроился на ЗП которое не светит 90% других работяг, начитался всякой новомодной "психологии" и начал ныть что он "не меняет мир"/"всё бессмысленно" а поработав месяц таксистом/строителем быстро побежал бы опять в айтишечку ибо к такому говну его жизнь не готовила.
    3) Перегоревшие люди - которые не жалели себя за просто ЗП а не за процент прибыли а потом поняли что занимаются херней только здоровье физическое/психологическое уже пошатанное
    Ответ написан
    1 комментарий
  • Почему много людей в IT недовольны своей работы?

    Потому что идут в IT как правило молодые и шутливые, которым все легко. Есть и исключения, но в любом случае поначалу это новый, таинственный и загадочный мир, в котором написал hello world и уже практически счастлив. Это если направление привлекает само по себе. Если не привлекает - то будешь почти счастлив, получив зарплату в 2 раза выше, чем твоя зарплата кассира в евросети.

    И сперва все вроде как хорошо, но потом эйфория проходит, и начинаются переработки - потому что ты, особенно если ты не ниндзя от мира программирования, не сможешь постоянно укладываться в эстимейт, особенно если тобой движет желание сделать хорошо. Дома тебе придется уделять время не себе и близким, а обучению или разработке, а учитывая, что программирование - это не английский (тут думать надо), час в день уделять не выйдет. Придется рвать пятую точку, даже в простецком вебе, где тоже куча тонкостей. Придется общаться с идиотами, переубеждать идиотов, выполнять указания идиотов, от всего этого будет гореть так, что и вправду начнешь завидовать таксистам. Еще хуже, когда поймешь, что ты и сам идиот, и что года, за которые твое зрение драматически упало, не приблизили тебя к Цукербергу или Дурову, что ты обычная макака, которая не создаст свой биткоин. И вот сидишь ты, прогаешь очередной пустой стартап, который загнется через пару лет, и не понимаешь, на что ты вообще тратишь свою жизнь. Просто работаешь, чтоб деньги были, потому что ты это (пока) не ненавидишь, а платят уже действительно неплохо, выше среднего по стране, и как бы уходить не хочется, да и куда? Не в таксисты же, в самом деле, тем более, что этим надо в Мск заниматься и на годной машине, чтоб брать заказы уровня комфорт и выше, а не нищебродский эконом.

    IT - это CRUD и рутина, которая рано или поздно надоест. А интересных и крутых проектов 24\7 тебе никто не даст никогда. Достигнешь точки, на которой тебе интереснее будет карточки миддлам в джире тасовать, чем что-то разрабатывать. И вот на этой точке уже точно пора уходить.
    Ответ написан
    16 комментариев
  • PDO::FETCH_FUNC или как получить имена параметров, переданных в замыкание?

    Arris
    @Arris Автор вопроса
    Сапиенсы учатся, играя.
    Решение найдено и сделано на основе ответа profesor08 :

    $sth = $dbh->query("SELECT * FROM users_ban ORDER BY expiration_date DESC ");    
    
    $users = $sth->fetchAll(PDO::FETCH_CLASS, stdClass::class);
            
    $ln = array_map(function($row) {
         $n = clone $row;
         $n->ipv4 = long2ip($n->ipv4_long);
         return (array)$n;
    }, $users);
    Ответ написан
    5 комментариев
  • В чем разница между dependency injection и методом, который возвращает тип класса?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В чем разница между поехать в отпуск и футболом?
    И в том и в другом случае мы будем носить обувь.
    Вот пример: в холодильник можно поставить пиво, а по карточке можно снять деньги в банкомате.

    Ты, во-первых, не понимаешь что такое dependency injection, а во-вторых - что делает твой код.

    Если отбросить все умные и красивые слова которые ты тут наскреб по сусекам, то оба твоих примера - про type hinting. Только в первом кусочеке кода мы просим интерпретатор проверять входящий параметр, а во втором - возвращаемое значение.
    Type hinting двольно размытый термин, мне больше нравится "контроль типов", который используется в документации. Поскльку в данном случае это не "подсказка", а строгий контроль: скрипт упадёт с ошибкой если в первом примере в метод придет что-то отличное от класса реализующего интерфейс Foo, а во втором - если метод вернет что-то отличное от такого класса.

    Контроль типов надо использовать, чтобы твой код был чище и работал предсказуемее.

    При этом dependency injection вообще не имеет никакого отношения ни к твоим примерам, ни к контролю типов. Внедрение зависимости относится к классам, а не методам. И означает, что если твой класс использует в работе какие-то инструменты, то он берет их не из воздуха - из всяких жлобал, синглетонов, контейнеров, или клепает прямо на месте - а явно получает при создании в виде параметров конструктора.
    Внедрение зависимостей следует использовать, чтобы твой код было легче изменять и поддерживать.
    Ответ написан
    6 комментариев
  • Увеличение счётчика в PhpStorm?

    delphinpro
    @delphinpro Куратор тега PhpStorm
    frontend developer
    Нередко нужен такой фунционал, но найти не могу


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

    Но даже если предположить, что это действительно необходимо, пусть не в классах, а например, в data-атрибутах:

    <div class="div" data-counter="1"></div>
    <div class="div" data-counter="2"></div>


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

    На примере твига

    {% for i in [1..3] %}
      <div class="div" data-counter="{{ i }}"></div>
    {% endfor %}
    Ответ написан
    Комментировать
  • Чем веб-верстальщику заменить Photoshop и Illustrator?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    Figma, Sketch, Zeplin
    Просите дизайнера заранее экспортировать файлы например в Зеплин и все. Всем удобно.
    Ответ написан
    Комментировать
  • Как настроить права в Docker?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    PHP developer
    Разобрался, может будет кому пригодится... Проблема заключалась: Если запускать контейнер (nignx) с понижением прав (не root). Нельзя использовать порты ниже 1000, а также с хоста в контейнер нужно пробросить модифицированный nginx.conf.

    модифицированный nginx.conf

    # worker_processes по количеству ядер процессора
    worker_processes  6;
    
    error_log  /var/log/nginx/error.log warn;
    pid        /tmp/nginx.pid;
    
    events {
        worker_connections  1024;
    }
    
    http {
        client_body_temp_path /tmp/client_body_temp;
        proxy_temp_path /tmp/proxy_temp;
        fastcgi_temp_path /tmp/fastcgi_temp;
        uwsgi_temp_path /tmp/uwsgi_temp;
        scgi_temp_path /tmp/scgi_temp;
    
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        keepalive_timeout  65;
    
        #gzip  on;
    
        include /etc/nginx/conf.d/*.conf;
    }


    docker-compose.yml

    version: '3'
    services:
      #Php-fpm Service
      app:
        build:
          context: ./docker/php/
          dockerfile: Dockerfile
        container_name: app
        restart: unless-stopped
        tty: true
        environment:
          SERVICE_NAME: app
          SERVICE_TAGS: dev
        working_dir: /var/www
        volumes:
          - ./www:/var/www
          - ./logssss:/var/log/
          - ./docker/php/local.ini:/usr/local/etc/php/conf.d/local.ini
        links:
          - db
        networks:
          - laravel-network
    
      #Nginx Service
      webserver:
        build:
          context: ./docker/nginx/
          dockerfile: Dockerfile
        container_name: webserver
        restart: unless-stopped
        tty: true
        ports:
          - '80:8080'
          - '443:4430'
        volumes:
          - ./www:/var/www
          - ./hosts/:/etc/nginx/conf.d
          - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
          - ./logs:/var/log/nginx
        links:
          - app
          - db
        networks:
          - laravel-network
    
      #MariaDB Service
      db:
        build:
          context: ./docker/mysql/
          dockerfile: Dockerfile
        container_name: db
        restart: unless-stopped
        tty: true
        ports:
          - "3306:3306"
        environment:
          MYSQL_DATABASE: laravel
          MYSQL_ROOT_PASSWORD: secret
          SERVICE_TAGS: dev
          SERVICE_NAME: mysql
        volumes:
          - ./mysql:/var/lib/mysql/
          - ./docker/mysql/my.cnf:/etc/mysql/my.cnf
        networks:
          - laravel-network
    
      #PHPMyadmin Service
      pma:
        image: phpmyadmin:latest
        container_name: pma
        restart: unless-stopped
        tty: true
        ports:
          - 81:80
        environment:
          PMA_HOST: db
          MYSQL_USERNAME: root
          MYSQL_ROOT_PASSWORD: secret
        links:
          - db
        networks:
          - laravel-network
    
    
    #Docker Networks
    networks:
      laravel-network:
        driver: bridge


    Dockerfile(Nginx)

    FROM nginx
    
    # Add user for laravel application
    RUN groupadd -g 1000 www
    RUN useradd -u 1000 -ms /bin/bash -g www www
    USER www


    После этого и nginx завелся и логи из контейнера в хосте создаются не под root
    Ответ написан
    Комментировать
  • Как верстать под печать?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Ну давай посмотрим на примере тостера.

    Попробуем распечатать страницу с вопросом.
    Для начала вопрос: для чего мы его распечатываем? Очевидно, нам интересен вопрос, и главное его решение. Именно это мы хотим распечатать на бумаге.

    Что же нам предлагают верстальщики из ТМ?
    5f98935dba783645914348.png


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

    Смотрим дальше
    5f98942e4692f875969058.png


    Форма комментирования. Ну что же. Наверное я отстал от современных технологий в своей деревне и во всем мире уже давно можно комментировать распечатанные страницы...

    В самом конце аж три листа совершенно бесполезной информации.

    В общем мы видим совершенно не оптимизированную под печать страницу.

    А вот если не забывать про печатные устройства, можно все это лишнее как минимум спрятать.
    Ответ написан
    2 комментария
  • Как сравнение массивов и записать разницу?

    @krundetz
    1. преобразуете json в массивы, функция json_decode
    2. сравниваете массивы функция array_diff

    только учтите что array_diff работает с одномерными массивами, поэтому данные надо будет преобразить чтобы их было удобно сравнить
    Ответ написан
    Комментировать
  • Как защитить от скачивания калькулятор расчета стоимости постройки бассейна на сайте?

    AleksandrB
    @AleksandrB
    Совсем недавно вывел "Hello world"
    Никак. Точка. Забудьте о любых способах защиты своего фронт кода. Захотят - украдут. Вы можете делать код менее читабельным, добавлять кучу воды, но ничего не даст никаких гарантий. Мы js код кошелька воровали и делали измененную копию. А причина простая - весь выполняемый код приходит клиенту на пк и дальше остается у него. Но можете не переживать, ваша логика на столько элементарна, что написать ее будет проще чем нажать ctrl+s.

    Ну и прям если думаете, что ваши старания кому-то сдались - делайте через бэкенд, время расчетов подрастет, но за то ваш безусловно дорогущий и сложный код никто не украдет
    Ответ написан
    3 комментария
  • ВЕБ студия с сотрудниками фрилансерами?

    catdesign
    @catdesign
    Веб-разработчик
    1. Фрилансер - это черная дыра. Нет никаких гарантий, что вы с первого раза найдете хорошего специалиста. Вы потратите массу времени походив по рукам как портовая путана, потеряете массу времени и сил. В итоге скорее всего специалиста вы найдете, но какой ценой?

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

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

    Вывод: Строить свою веб-студию можно только из своих коллег по цеху с которыми вы уже работали. Для этого желательно самому побыть фрилансером или же поработать в студии. Однако помимо кадровой работы у вас должна быть тонна знаний из разряда всего понемногу. Иначе вы останетесь без денег с лапшой на ушах
    Ответ написан
    1 комментарий
  • Чем плохо выносить повторяющиеся элементы дизайна в отдельные файлы и подключать их потом с помощью PHP?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Тем, что в случае использования php вам совершенно ничего не мешает подрубить шаблонизатор, например twig, и делать разбивку страницы более или менее красиво.

    К примеру, задать общий лейаут, прописать в нем общие блоки, и страницы расширять от него.

    base.twig
    <html>
    <head></head>
    <body>
      <header>...</header>
      <main>{% block main %}{% endblock %}</main>
      <footer>...</footer>
    </body>
    </html>


    index.twig
    {% extend 'base.twig' %}
    {% block main %}
      Главная страница
    {% endblock %}


    about-us.twig
    {% extend 'base.twig' %}
    {% block main %}
      Интереснейший текст о компании
    {% endblock %}
    Ответ написан
    1 комментарий
  • Что считаете долгим запросом на стороне веб-сервера?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    У меня критерий, что запрос не должен обрабатываться дольше 100 милисекунд. Если дольше - оптимизируем, кешируем, переделываем, далее - везде. На самом деле, в большинстве случаев и 100 мс достаточно много, но все зависит от нагрузки на сервер, количества RPS и прочей фигни.
    Одна десятая секунды - это комфортный ответ для любого пользователя, по хорошему сюда еще добавлется куча всякого времени на: передачу данных, рендеринг браузера, запуск JS, отрисовку...
    В итоге: на все про все хорошо бы уложиться в 200-400 мс.
    Ответ написан
    Комментировать
  • Как повысить скорость удаления?

    BasiC2k
    @BasiC2k
    .NET developer (open to job offers)
    Измените немного архитектуру таблиц и логику обработки данных.
    Добавьте в таблицу ещё одно поле - флаг, сигнализирующий, что поле удалено. То-есть, при удалении, Вы будете делать UPDATE, а не DELETE.
    В моменты минимальной нагрузки, уже можно будет произвести DELETE отмеченных строк.
    Ответ написан
    Комментировать
  • Стоит ли денормализировать список разрешенных действий пользователя в json поле?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    json - это таблица в представлении поля, а не обычные текстовые данные.
    Никакой денормализации быть не может тут.
    Используйте json смело: не потеряете ни в скорости, ни в удобстве.
    Я часто юзаю json вместо старой привычной связки "many-to-many".
    Ответ написан
    Комментировать
  • Невозможно создать виртуальную машину в Virtualbox (Процессор Intel® Pentium® P6200), в чём моя ошибка?

    15432
    @15432
    Системный программист ^_^
    Похоже, у вас нет в GUI опции выключить аппаратную виртуализацию. В более старой версии VirtualBox она, вероятно, была. Выключите её вручную, отредактировав конфигурацию виртуальной машины.

    Примерно как описано тут
    geek.mgorecki.net/index.php/2010/01/15/disabling-v...
    Ответ написан
    3 комментария
  • Как в PhpStorm убрать полоски слева?

    delphinpro
    @delphinpro Куратор тега PhpStorm
    frontend developer
    File | Settings | Editor | General | Appearance
    Show indent guides
    Ответ написан
    3 комментария
  • Как разработать веб-систему для изучения иностранного языка?

    Ключевые слова для вас. Учебный проект, изучение слов. Опишите для себя сначала самый базовый функционал, без которого стстему нельзя назвать системой изучения слов, после этого подумайте как его реализовать потом думайте как обвешать деталями в виде авторизации и прочих рюшечек. Это учебный проект, если начнете все с ходу усложнять рискуете недоделать. В прочем и в больших проектах точно также.
    Ответ написан
    Комментировать
  • Может ли Golang заменить C/C++ в написании программ для железа?

    У вас вопрос про программы "близкие к железу" и тут же намешано машинное обучение и стандартный софт для десктопа, определитесь.

    Для железа go использовать будет менее удобно, чем C/C++
    Для машинного обучения go использовать можно
    Для десктопного софта, если имеется ввиду графический интерфейс, go тоже будет использовать неудобно.
    Ответ написан