• Как в filezilla отключить уведомления windows в 10?

    параметры,уведомления,приложения,отлючить.
    Ответ написан
    1 комментарий
  • Какую CMS выбрать для создания сайтов на заказ?

    @vism
    OctoberCMS
    С одной стороны CMS
    С другой laravel.
    Тоесть вы не скатитесь к водпресу и подобным. И не будете терять квалификацию в фрэймворках, если вдруг надо будет сделать/прикрутить что-то не стандартное.
    Ответ написан
    4 комментария
  • Какую CMS выбрать для создания сайтов на заказ?

    Я тоже хочу порекомендовать October CMS. Она на сегодня лучшая, построенная на компонентах Laravel. Но обманываться не стоит, разработка на October не то же самое. Но разрабатывая на October вы получите:
    • отличный DX, нужно просто попробовать;
    • CLI для автоматизации решения задач;
    • самый популярный PHP-шаблонизатор Twig;
    • действительно исчерпывающую документацию;
    • возможность удобного совместеного использования с Laravel (кпример комплексного проекта - 2doc.by - October CMS, api.2doc.by - Lumen, medcrm.by - Laravel);
    • аскетичность из коробки, следование философии Unix, что позволяет не быть изначально заточенной под конкретный тип проекта и не содержать в себе неиспользуемую проектом функциональность;
    • отличный скафолдер для разработки кастомной функциональности под нужды проекта;
    • непрерывно растущую базу плагинов с августа 2015 до мая 2017 росто составил 75% со 130 до 515;
    • непрерывный рост интереса сообщества к платформе, выраженный в приросте звезд на гитхабе с 3000 в июне 2015 до 6950 в мае 2018;


    Можно продолжать долго, если будет желание и необходимость. =) Из минусов можно отметить слабый рост количества готовых шаблонов, не такое большое количество дополнений в сравнении с динозаврами рынка CMS. Не минус, но важный момент, что на October вы будете именно программировать, это как порог входа для неквалифицированных разработчиков, так и дополнительные возможности для квалифицированных.

    Что касается важной темы E-Commerce, есть несколько готовых дополнений разной степени качества и функциональных возможностей. Я порекомендую Shopaholic, т.к. имею непосредственное отношение к проекту и головой могу отвечать за его качество. Проект пока очень молодой, меньше полугода после релиза и тем не менее, отзывы наилучшие от сообщества (1, 2, 3, 4, 5, 6, 7 и т.д.). Вот неболшая статья в нашем блоге про Shopaholic.

    В целом смотреть на динозавров разной степени популярности бесперспективное занятие, если вы стоите перед выбором в 2018 году. Размер сообщества и количество плагинов давно не решают, если есть качественная хорошо документированная платформа, а вы прогарммист, а не говно-кодер.

    Единственной в некоторой степени проблемой выбора не самой известной платформы может стать ее "продажа" клиентам. Но мы успешно с этим справлялись, работая 7 лет с MODX в мире, где правили Wordpress (весь мир) и Bitrix (СНГ). А последние 2,5 года также успешно справляемся с October в мире, где правят Wordpress и Bitrix и это еще теперь пытается делать MODX (СНГ).

    Надеюсь, был полезен. =)
    Ответ написан
    Комментировать
  • Существует ли инструмент для замера времени работы сайта?

    daager
    @daager
    Pinba и админка к нему в виде Pinboard(habr), одна из отображаемых метрик, как раз "время выполнения скрипта".
    Ответ написан
    Комментировать
  • Есть ли обучающие материалы по ООП?

    sanek_os9
    @sanek_os9
    Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
    Вот вам стог сена stog.jpg
    Вот вам тюк сена 617.jpg
    Какая между ними разница? И то, и то сено.
    Но, тюк он компактный, его удобно складывать, его легко переносить, вы из него хоть домик постройте. Стог это такая...просто куча, с этой кучей не удобно работать, сыпется, раздувает ветром, переносить сложно, и домик не построишь. Кто знаком с сельской жизнью тот поймет)
    Так вот, процедурный стиль, это стог сена, ООП это тюк сена. Процедурный стиль громоздкий, имеет огромную кучу каких то функции с длинными именами, его трудно поддерживать, вообще трудно вносить какие либо изменения, и если таковы понадобится, а сайт большой, то одно и то же изменение придется одинаково менять во многих местах, если вдруг вы где то забыли внести изменение то в лучшем случае это вызовет ошибку и вы её исправите, в худшем все продолжит работать но именно в том месте не так как надо, попробуйте потом найти это место...Что дает нам ООП...много чего, краткость кода, его ясность, его легко поддерживать, там нет повторяющегося кода, если вы что то захотите изменить, это нужно будет изменить единожды и ничего у вас не сломается после этого.
    Что касается примеров, этот пример должен быть большим что бы увидеть преимущества ООП подхода, это во первых, а во вторых преимущество особенно сильно проявляется когда вы работаете над этим проектом а не когда он уже написан и работает а вы смотрите на это со стороны.
    Еще раз напомню что
    Да, кто-то скажет что это не имеет смысла, но всё же любопытно было бы сравнить.

    вы что хотите сравнить? что красивше выглядит? кстати код написанный на ООП выглядит красивее и уже именно поэтому стоит его использовать)
    Напомнить я хотел что не сравнивать его нужно, а работать с ним.
    -----------------------------
    Вот пример, который не покажет всех преимуществ, это лишь пример одного из многих преимуществ ООП. Задача такая, получить данные пользователя и вывести их на экран.
    Процедурный стиль:
    $q = $pdo->prepare("SELECT * FROM `users` WHERE `id` = ? LIMIT 1");
    $q->execute([$id_user]);
    $user = $q->fetch();
    echo 'Имя: ' . $user['name'] . '<br />';
    echo 'Фамилия: ' . $user['surname'] . '<br />';
    echo 'Город: ' . $user['city'] . '<br />';

    ООП:
    class User{
        public $id;
        public $data;
        
        public function __construct(int $id)
        {
            $this->id = $id;
            $this->data = $this->getData();
            
        }
        private function getData(): array
        {
            $q = $pdo->prepare("SELECT * FROM `users` WHERE `id` = ? LIMIT 1");
            $q->execute([$this->id]);
            return $q->fetch();
        }
        public function __get($name)
        {
            if (isset($this->data[$name])) {
                return $this->data[$name];
            }
            return;
        }
    }
    $user = new User(1);
    echo 'Имя: ' . $user->name . '<br />';
    echo 'Фамилия: ' . $user->surname . '<br />';
    echo 'Город: ' . $user->city . '<br />';

    Казалось бы в чем тут преимущество если в ООП из данного примера больше кода, а выше я говорил о его краткости) краткость возникнет со временем при увеличении нашего приложения, еще я говорил что на ООП не любоваться нужно а работать с ним, так давайте же выполним следующие, сделаем так что если какие то данные не заполнены то выводилось сообщение "(данные не заполнены)"
    Процедурный стиль:
    $q = $pdo->prepare("SELECT * FROM `users` WHERE `id` = ? LIMIT 1");
    $q->execute([$id_user]);
    $user = $q->fetch();
    echo 'Имя: ' . ($user['name'] ?? '(данные не заполнены)') . '<br />';
    echo 'Фамилия: ' . ($user['surname'] ?? '(данные не заполнены)') . '<br />';
    echo 'Город: ' . ($user['city'] ?? '(данные не заполнены)') . '<br />';

    ООП:
    class User{
        public $id;
        public $data;
        
        public function __construct(int $id)
        {
            $this->id = $id;
            $this->data = $this->getData();
            
        }
        private function getData(): array
        {
            $q = $pdo->prepare("SELECT * FROM `users` WHERE `id` = ? LIMIT 1");
            $q->execute([$this->id]);
            return $q->fetch();
        }
        public function __get($name)
        {
            if (isset($this->data[$name])) {
                return $this->data[$name];
            }
            return '(данные не заполнены)';
        }
    }
    $user = new User(1);
    echo 'Имя: ' . $user->name . '<br />';
    echo 'Фамилия: ' . $user->surname . '<br />';
    echo 'Город: ' . $user->city . '<br />';

    Вы заметили как изменился процедурный стиль? Нам пришлось изменять каждое поле, нам пришлось повторятся, и хорошо что у нас только три поля а не десятки, и хорошо что у нас то проект из одного файла а не из....многих. И еще очень хорошо что вышла PHP7, иначе пришлось городить еще кучу условий.
    Вы заметили как изменился код ООП?
    В одном месте изменился кусочек кода, было:
    return;
    Стало:
    return '(данные не заполнены)';
    Такие случаи будут появляться сплошь и рядом, поэтому выбор ООП подхода очевиден.
    Еще более наглядно покажет преимущество ООП если мы добавим редактирование анкеты, в процедурном стиле нужно будет создавать три запроса (потому что в нашем примере три поля, в настоящем проекте их может быть десятки), в ООП придется один раз немного повозится (совсем чуть-чуть) и сделать универсальное обновление данных, что в результате, именно в том месте когда где потребуется обновление получится так:
    Процедурный стиль:
    $q = $pdo->prepare("запрос");
    $q->execute([/*переменная*/])

    И так три раза (в нашем примере, а в реальном проекте больше)
    ООП:
    нужно будет всего лишь написать так (например имя изменить)
    $user->name = 'новое имя';
    Мы не просто свойство изменим, данные изменятся и в базе данных, всего лишь одной такой строкой, но как это сделать пусть будет домашним заданием, ибо уже три часа ночи и я пойду спать, всем добра)
    Ответ написан
    5 комментариев
  • Как сделать на сайте обновление данных из базы в реальном времени?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    WebSocket.
    Только лучше это не через базу делать, а через шину сообщений. Когда что-то добавляется, генерируется событие и отправляется сообщение, которое сервер вебсокетов забирает и раздаёт всем клиентам, которым оно нужно.
    Правда, тут есть приличное поле для оптимизации в зависимости от деталей задачи. Например, если у вас происходит 100 добавлений в секунду, то схему нужно дорабатывать.
    Ответ написан
    Комментировать
  • Почему не работает сессия при передаче по ссылке?

    @BorisKorobkov Куратор тега PHP
    Web developer
    Суперглобальные массивы $_REQUEST и $_SESSION и так везде доступны. Не надо их никуда передавать
    Ответ написан
    1 комментарий
  • Куда пойти учиться в it для "корочки"?

    @seamen
    программист любитель
    Совет: закончить начатое. По жизни так правильнее. Опыт работы у тебя уже будет, можно попробовать будет и без специального образования обойтись.
    Ответ написан
    Комментировать
  • Как правильно использовать Docker для веб разработки?

    zvd
    @zvd
    Software developer interesting in DevOps
    Добрый день.
    Все, как вы их назвали, «задачи» должны быть по разным контейнерам.

    1. Что брать за базовый образ?
    Что используете то и берите. Используете в работе Debian? Берите Debian ( https://registry.hub.docker.com/_/debian/ )
    2. Чтобы создать свой базовый образ который будете в дальнейшем использовать для приложения, вот вам пример Dockerfile:
    #
    # MyBaseimage Dockerfile
    #
    
    # Pull base image.
    FROM ubuntu:14.04
    
    MAINTAINER Your Name <your.email@gmail.maybe>
    
    RUN apt-get update
    RUN apt-get upgrade -y
    
    RUN apt-get install -y language-pack-en
    ENV LANGUAGE en_US.UTF-8
    ENV LANG en_US.UTF-8
    ENV LC_ALL en_US.UTF-8
    
    RUN locale-gen en_US.UTF-8
    RUN dpkg-reconfigure locales
    
    RUN echo "Etc/UTC" > /etc/timezone
    RUN dpkg-reconfigure -f noninteractive tzdata
    
    RUN apt-get install -y build-essential
    RUN apt-get install -y python python-dev python-setuptools python-pip python-virtualenv
    RUN apt-get install -y libxml2-dev wget
    RUN apt-get install -y libpcre3
    RUN apt-get install -y libpcre3-dev
    RUN apt-get install -y libssl-dev
    RUN apt-get install -y libncurses5-dev
    RUN apt-get install -y git git-core
    RUN apt-get install -y libpq-dev
    
    # install nginx
    RUN apt-get install -y software-properties-common python-software-properties
    RUN apt-get update

    Собрать image в директории где у вас лежит Dockerfile
    docker build -t your_docker_account/your_baseimage .

    3. Dockerfile для сборки вашего образа уже с приложением
    #
    # MyApp Dockerfile
    #
    
    # Pull base image.
    FROM your_docker_account/your_baseimage
    
    MAINTAINER Your Name <your.email@gmail.maybe>
    
    # Set instructions on build.
    RUN virtualenv /env
    ADD ./ /code
    
    RUN cd /code; /env/bin/python setup.py install
    RUN cp /code/config/config.yml.docker_example /etc/code/config.yml
    
    # Expose ports.
    EXPOSE 8484
    WORKDIR /code
    CMD ["/env/bin/python", "app.py"]

    4. Собрать образ с приложением
    docker build -t your_docker_account/your_app_container .

    5. Запустить контейнер с БД, в качестве примера PostgreSQL
    docker run -p :5432:5432 --name my_postgresdb_container -e POSTGRESQL_DB=mydb_name -e POSTGRESQL_USER=mydb_user -e POSTGRESQL_PASS=super_secret_password -d kamui/postgresql

    для mariadb аналонично, контейнеры ищем здесь: https://registry.hub.docker.com/
    6. Запустить контейнер с вашим приложением, пример:
    docker run -d -p :5000:5000 \
      --name my_app_container \
      --link my_postgresdb_container:postgresdb \
      -e DOCKERDB_ENV_POSTGRESQL_DB=mydb_name \
      -e DOCKERDB_ENV_POSTGRESQL_USER=mydb_user \
      -e DOCKERDB_ENV_POSTGRESQL_PASS=super_secret_password \
      your_docker_account/your_app_container

    7. Подключиться к запущенному контейнеру с приложением
    docker exec -it your_app_container /bin/bash
    8. Читать stdout запущенного приложения в контейнере
    docker logs -f your_app_container

    + Чтобы автоматизировать запуск всех необходимых контейнеров берите Docker Compose ( https://docs.docker.com/compose/ )
    Пример файла конфигурации:
    your_app:
      build: .
      links:
        - postgresdb
      ports:
        - "5000:5000"
      environment:
        DOCKERDB_ENV_POSTGRESQL_DB: mydb_name
        DOCKERDB_ENV_POSTGRESQL_USER: mydb_user
        DOCKERDB_ENV_POSTGRESQL_PASS: super_secret_password
    postgresdb:
      image: kamui/postgresql
      ports:
        - "5432:5432"
      environment:
        POSTGRESQL_DB: mydb_name
        POSTGRESQL_USER: mydb_user
        POSTGRESQL_PASS: super_secret_password

    И теперь вместо пунктов 5 + 6 где мы запускали контейнеры мы можем всё стартануть одной командой
    docker-compose up

    + можно смонтировать код в контейнер и разрабатывать непосредственно в docker'контейнере.
    Надеюсь чем-то вам помог.
    Ответ написан
    3 комментария
  • Node js framework для real time сайта. Что порекомендуете?

    @deemaagog
    Что то у вас путаница какая-то. Emberjs , Angular это клиентские фреймворки. А Node.js - это сервер

    Из node.js фремйворков смотрите Express, Koa 2. Либо что-то более высокоуровневое: Sails.js, Trails.js , но там уже меньше свободы действий
    Ответ написан
    8 комментариев
  • Как проверить целый тип данных в php?

    pashted
    @pashted
    тыжпрограммист
    echo preg_match('/^\d+$/', '5qwerty');
    Ответ написан
    8 комментариев
  • Как проверить целый тип данных в php?

    @VisualIdeas
    function myIsInt($var) {
        if ((int)$var==$var) {
          return true;
        } else {
          return false;
        }
    }

    Тоесть без приведения типов сравниваем инт и то что есть)
    В функцию обернул для наглядности)
    Ответ написан
    1 комментарий
  • Можно ли создать список появившихся Exception в цикле, и вернуть их разом?

    @xutesayor
    $exceptions = [];
    foreach ($input as $value) {
        try {
            $output = Model::firstOrCreate($value);
        } catch (Exception $e) {
            $exceptions[] = $e->getMessage();
        }
    }
    return response()->json(['error' => json_encode($exceptions)], 400);
    Ответ написан
    1 комментарий
  • Как в css отменить 'display: none'?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Просто и красиво сделать можно (будет в будущем)

    display: initial;

    А пока что IE про это значение не знает caniuse.com/#feat=css-initial-value
    Ответ написан
    Комментировать
  • Как в css отменить 'display: none'?

    iiiBird
    @iiiBird Куратор тега CSS
    Пока ты спишь - твой конкурент совершенствуется
    .xsmall-visible {
        display: block;
      }
      table.xsmall-visibles {
        display: table;
      }
      tr.xsmall-visible {
        display: table-row;
      }
      th.xsmall-visible,
      td.xsmall-visible {
        display: table-cell;
      }

    ну логику я надеюсь ты понял
    Ответ написан
    Комментировать
  • Как в css отменить 'display: none'?

    block или inline-block, в зависимости от назначения блока, если он должен иметь строчное поведение, то inline-block
    Ответ написан
    Комментировать
  • Есть способ отлаживать Javascript с настройкой "break at first line javascript"?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    debugger; в самом начале файла вставьте и пошагово ищите
    Ответ написан
    Комментировать
  • Как построить свой рабочий день фрилансеру?

    iiiBird
    @iiiBird
    Пока ты спишь - твой конкурент совершенствуется
    3 комментария
  • Laravel API Rate Limits. Можно ли сделать ограничения количества запросов на один аккаунт?

    @beatleboy
    Хорошим решением будет использовать антифлуд, он позволяет использовать любые ключи, будь то ip, token. В идеале это все завернуть в middleware
    https://github.com/ircop/antiflood/blob/master/REA...
    Ответ написан
    Комментировать