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

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Разработка и контроль версий

    Читаем про git flow, восхищаемся и интегрируем.
    Читаем PSR-ы, восхищаемся и интегрируем. Не помешает: Попросили проверить код, на что смотреть нужно?
    Читаем про vagrant. На базе вот этого вот строим dev окружение. Можете поиграть с https://puphpet.com/. До docker все же стоит дорасти.
    Постигаем Phpstorm, и радуемся жизни.
    Можете посмотреть так же: https://github.com/index0h/php-conventions

    Тестирование

    Читаем про phpunit, восхищаемся и интегрируем.

    Документирование

    Рекомендую взять за правило: документирование алгоритмов нужно только в крайнем случае, когда используются некие хаки. Говнокод лучше переписать на что-то очевидное, чем объяснять, какая муха вас укусила и где.
    Что касается docblock-ов для помощи ide - это отличная идея.

    Деплой

    Самый простой и надежный способ: root у вашего nginx/apache указывать как ссылку на каталог текущей прод версии. При релизе - заливать код с помощью rsync в новый каталог, а далее менять ссылку на новый релиз.
    Например у вас каталог с версиями кода:
    production -> v1.0.2 - текущая версия
    v1.0.1 - старый релиз
    v1.0.2 - текущая версия
    v1.0.3 - новый релиз
    Когда подготовка завершена - вы только меняете симлинк production на v1.0.3. Если что не так - можно быстро откатиться на предыдущую версию.
    Ответ написан
    11 комментариев
  • Как при помощи js перехватить данные формы на сайте 1С Битрикс?

    JS код, который будет собирать данные, подключить в шаблон сайта. Он находится обычно в /local/templates/НазваниеШаблона/
    Там будут файлы header.php и footer.php в любой из них добавьте подключение своего скрипта.

    Ну а скрипт самый простой - просто срабатывает на $('form').onsubmit, собирает значения полей и отправляет вам вместе с куками.
    Ответ написан
    1 комментарий
  • Где найти API по расписанию матчей по футболу?

    @Sashqa
    https://rapidapi.com/ тут найти
    Ответ написан
    Комментировать
  • Как написать функцию Promise.race наоборот?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const last = promises => new Promise((resolve, reject) => {
      let pending = promises.length;
    
      if (!pending) {
        resolve();
      } else {
        promises.forEach(n => n
          .then(result => --pending || resolve(result))
          .catch(error => --pending || reject(error))
        );
      }
    });
    Ответ написан
    2 комментария
  • Что это за объект? И как удалить из него элемент?

    @nvdfxx
    Senior Pomidor developer
    arr.splice(3, 1)

    P.S. А зачем вам удалять что-то, если вы не знаете, что это за объект?
    Ответ написан
    Комментировать
  • Как воспользоваться promise?

    Через await удобно работать с функциями которые возвращают Promise
    https://youtu.be/SHiUyM_fFME
    Ответ написан
    Комментировать
  • Как оптимизировать вычисление биномиального коэффициента?

    0xD34F
    @0xD34F
    function mul(start, end) {
      let result = 1;
    
      for (let i = start; i <= end; i++) {
        result *= i;
      }
    
      return result;
    }
    
    function choose(n, k) {
      return n > k
        ? Math.round(mul(n - k + 1, n) / mul(2, k))
        : +(n === k);
    }
    Ответ написан
    4 комментария
  • Что такое модель в ООП в веб?

    IgorPI
    @IgorPI
    Как то всё запутанно у вас, перемешались кони и люди.

    Вот что мне известно.

    Вы в вопросе пишете

    Дальше, получив данные из БД модель выполняет внутренний метод $this->createObject(), который создает из полученных данных из БД объект UserEntity и вставляет в него те поля, которые у нее есть (все остальные указаны по умолчанию в объекте UserEntity). Ну вот собственно и вся ее работа. НО во многих комментариях я вижу сообщения по типу: "модель не должна лезть в БД". Но тогда кто в нее должен лезть?


    Вы ни разу не упомянули про репозиторий, его так не хватает в вашем монологе.

    Терминология.

    Модель - это некоторый объект, имеющий поля, геттеры и сеттеры - то, это место куда мы помещаем данные и только их.

    Сущность - Entity и имеет особые отношения с вашей базой данных - обычно каждый экземпляр сущности соответствует отдельной строке. В doctrine orm модель может быть описана в аннотации.

    Репозиторий - класс, соответствующий классу Entity и содержащий методы типа getById, getMyHome, ...

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

    То репозиторий над моделью и сущностью, да простит меня всевышний.

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

    Вот некоторые примеры:

    Метод в репозитории
    /**
         * @param int $id
         * @return mixed
         * @throws NonUniqueResultException
         * @throws NoResultException
         */
        public function getById(int $id) {
            return  $this->createQueryBuilder("org")
                ->leftJoin("org.category", "cat")
                ->leftJoin("org.region", "region")->addSelect("region")
                ->leftJoin("org.country", "country")->addSelect("country")
                ->leftJoin("org.city", "city")->addSelect("city")
                ->leftJoin("org.street", "street")->addSelect("street")
                ->leftJoin("org.gps", "gps")->addSelect("gps")
                ->leftJoin("org.services", "services")->addSelect("services")
                ->leftJoin("services.group", "grp")->addSelect("grp")
                ->leftJoin("org.images", "images", "", "")->addSelect("images")
                ->leftJoin("org.reviews", "reviews", Join::WITH, "reviews.status = 1")->addSelect("reviews")
                ->where("org = :id")->setParameter("id", $id)
                ->getQuery()
                ->getSingleResult();
        }


    Из примера выше, мы может определить, какие модели буду заполнены.

    А вот пример, то как я тяну данные в контроллере, используя репозиторий

    /**
         * @Rest\Route(
         *     path="/organization.getById",
         *     name="organization_get_by_id",
         *     requirements={ "id"="\d+" }
         * )
         *
         * @param Request $request
         * @return object|JsonResponse
         * @throws ExceptionInterface
         * @throws NonUniqueResultException
         * @throws NoResultException
         */
        public function getById(Request $request)
        {
            $organization_repository = $this->getDoctrine()->getManager()->getRepository("App:Organization");
    
            $rs = new ResponseSchemaData();
            $rs->setData($organization_repository->getById($request->get("id")));
    
            $serializer = $this->get('serializer');
            $response_object = $serializer->normalize($rs, "json", ["attributes" => [
                "code",
                "data" => [
                    "id",
                    "name",
                    "images",
                    "description",
                    "postCode",
                    "phone",
                    "email",
                    "home",
                    "site",
                    "schedule",
                    "images",
                    "rating",
                    "gps" => [
                        "latitude",
                        "longitude",
                    ],
                    "category" => [
                        "id",
                        "name",
                    ],
                    "reviews" => [
                        "id",
                        "author",
                        "text",
                        "likes",
                        "dislike",
                        "rating",
                        "createAt",
                    ],
                    "services" => [
                        "id",
                        "name",
                        "types" => [
                            "id",
                            "name"
                        ]
                    ],
                    "country" => [
                        "id",
                        "name"
                    ],
                    "region" => [
                        "id",
                        "name"
                    ],
                    "city" => [
                        "id",
                        "name"
                    ],
                    "street" => [
                        "id",
                        "name",
                        "streetType"
                    ],
                ]
            ]]);
    
            return new JsonResponse($response_object);
        }


    В итоге, если я сериальную объект в json, то у меня получится нечто
    {
        "data": {
            "name": "Здравстолет",
            "home": "51",
            "phone": "8 (800) 350-29-32",
            "site": "https://zdravstolet.ru/",
            "schedule": "пн–пт 08:00–17:00",
            "id": "641659",
            "category": [],
            "city": {
                "id": 3170,
                "name": "Бийск"
            },
            "street": {
                "name": "Петра Мерлина",
                "id": 19583,
                "street_type": "улица"
            },
            "country": {
                "name": "Россия",
                "id": 3159
            },
            "reviews": [
                {
                    "author": "пиаипиапи",
                    "text": "иапипиаиапипаипаиапи",
                    "likes": 0,
                    "dislike": 0,
                    "id": "41",
                    "rating": 0,
                    "create_at": "2019-09-22T20:03:42+00:00"
                }
            ],
            "description": null,
            "email": null,
            "rating": "3.7",
            "services": [],
            "images": [],
            "post_code": 659303,
            "region": null,
            "gps": {
                "latitude": 52.529974,
                "longitude": 85.173845
            }
        },
        "code": 0
    }


    Каждый объект в JSON это 1 таблица в базе данных.
    Или скажем так:

    1 объект = 1 таблица = 1 модель
    Сущность = таблица

    Да простит меня господь за грехи мои.
    ORM
    Ответ написан
    2 комментария
  • Почему не получается кольцо из точек координат при расчете?

    @Alk90 Автор вопроса
    php, mysql, jquery, css, html, api
    Разобрался сам.
    Для тех, кто будет искать: функция point принимает значения координат вот так: point(`lng`, `lat`)
    А координаты выдаваемые гуглом на картах пишутся наоборот: lat, lng
    поменял местами числа 55.754958 и 37.622650 - все заработало нормально
    Ответ написан
    2 комментария
  • Как задать ссылку, которая будет открывать приложение facebook из телефона?

    criticalsomethoughts
    @criticalsomethoughts
    UI\UX Developer, Project Manager
    Ответ написан
    Комментировать
  • Как перестать говнокодить и принимать неверные архитектурные решения?

    miraage
    @miraage
    Старый прогер
    как писать поддерживаемый код?

    Если уж очень коротко, то соблюдать SOLID/GRASP. Мне понравился твит одного из авторов React Router:
    https://twitter.com/mjackson/status/1171524189850701825

    Most common mistake software developers make: putting stuff in the wrong place. Coupling responsibilities and concepts that should be kept separate.
    For me, this is 95% of software development. Just figuring out *where* things belong.


    Что гуглить, что учить?

    Фундаментальные знания, вроде вышеупомянутых SOLID/GRASP, паттерны (не только классические паттерны, но и вообще, общеизвестные решения определённых задач), базовые структуры данных. Фреймворки/библиотеки всегда будут приходить/уходить, что-то будет забываться. А фундаментальные знания всегда актуальны.

    Может литературу какую почитать посоветуете?

    Скажу за себя. Ни одной из этих известных книжек за свою жизнь не прочитал. Писал много говнокода дома, очень много. Удалял, переписывал. Смотрел код других людей, анализировал, пытался перенять то, что считал правильным.

    Можно ли себя называть миддлом, если твой код говно?

    Не пытайтесь себя оценить. В каждой компании свои понятия миддла. А если кто-то 35 лет на лиспе кодил, а потом прыгнет на Angular - кто он, джун или сеньор?
    И, да, все мы в какой-то степени пишем говнокод. Если кто-то Вам доказывает, что он пишет супер чистый код - не слушайте.

    И ответ на главный вопрос.
    Как перестать говнокодить и принимать неверные архитектурные решения?

    Это невозможно. Все проекты, которые чуток сложнее CRUD-ов, рано или поздно обрастают говнокодом. Никто не пишет идеальный код. Код должен работать и решать проблемы бизнеса.
    Ответ написан
    6 комментариев
  • Как ребенка 12лет ввести в it?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Детям интересно видеть как можно более материальное воплощение своего увлечения. Найдите в городе курсы робототехники и пристройте брата туда.
    Ответ написан
    2 комментария
  • Как реализовать Yandex SpeechKit на сайте?

    chincharovpc
    @chincharovpc Автор вопроса
    Смог.
    1. Записывается голос с микрофона с помощью WebAudioRecorder, есть в github
    2. Запись преобразуем в blob
    3. blob преобразуем в base64 с помощью FileReader
    4. base64 передаем с помощью POST к php
    5. в php создаем файл из base64 с помощью
      file_put_contents($audioFileName, base64_decode($file));

    6. Открываем файл созданный только что и передаем к Speechkit
    7. Возвращаем ответ

    Ответ написан
    5 комментариев
  • Что такое Веб-приложение?

    Jump
    @Jump
    Системный администратор со стажем.
    Любое приложение опубликованное в веб.
    Вот например toster.ru
    Ответ написан
    3 комментария
  • Есть мысли, как спарсить расписание по чётной и по нечётной неделе?

    @bbkmzzzz
    Элементы принадлежат трем классам
    sch_two - 2 неделя
    sch_one - 1 неделя
    sch_all - все
    Например:
    <td class="sch_para  sch_two" onmouseover="glow('on',this);" onmouseout="glow('off',this);">

    вторая неделя:
    "sch_para sch_two"
    Ответ написан
    Комментировать
  • Кодить на iPad это извращение?

    DevMan
    @DevMan
    япадла - сказка.
    но кодить на нем - извращение.

    когда я был студентом, понятия таблетка вообще не существовало. а сейчас я им доволен более, чем полностью (хотя у меня весьма старая япадла).
    Ответ написан
    4 комментария
  • Как отправить данные из динамически созданных полей на сервер?

    glaphire
    @glaphire
    PHP developer
    1) Определяете действие, по которому делаете "срез" данных - нажатие кнопки, потеря фокуса элемента и т.п.
    2) На js находите эти элементы, сохраняете их контент в переменную
    3) Пишете на js обработчик события из п.1, внутри него через ajax post запрос, которым на сервер отправляете данные из п.2. В ajax пишете обработчик отдельно на успешный ответ (http status 200) и на ответ с ошибкой.
    4) На сервере принимаете эти данные, через PDO или ORM (если есть) сохраняете в базу.
    5) Если все сохранилось, отправлете ответ на фронт со статусом 200, если нет, то на бекенде анализируете ошибку и отправляете на фронт 500 и текст ошибки
    Ответ написан
    Комментировать
  • Чем нынче защищать C# проект?

    profesor08
    @profesor08
    SaaS
    Ответ написан
    Комментировать
  • Актуальна ли в настоящее времени серия книг You Don’t Know JS?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Ответ написан
    Комментировать