Контакты

Достижения

Все достижения (2)

Наибольший вклад в теги

Все теги (14)

Лучшие ответы пользователя

Все ответы (15)
  • Как запустить скрипт в VSC?

    romash
    @romash
    web-разработчик
    Чтобы запустить скрипт в терминале, вам нужен интерпретатор. Для js это NodeJS.
    После установки нужно будет перезагрузить VSC, чтобы она его увидела. Чтобы убедиться в том, что интерпретатор установлен и доступен, вбейте в терминале
    node -v
    эта команда выведет версию установленного NodeJS.
    Чтобы запустить скрипт lesson.js достаточно написать в терминале
    node lesson.js
    или даже
    node lesson

    Правда, учитывая то, что у вас VSC, может быть удобнее воспользоваться ей, чем терминалом (NodeJS всё равно нужно установить):
    Для начала у вас должна быть папка проекта, а не просто файл открытый в VSC (создайте папку, положите туда свои скрипты, которые хотите запускать, в VSC Файл -> Открыть папку и выбирайте созданную папку).
    На левой панели есть кнопка с изображением жука, которая открывает панель отладки. В этой панели сверху у вас будет написано "Нет конфигурации". Вам нужно нажать на шестерёнку рядом, если появится выбор, выбрать Node. Будет создан файл конфигурации отладки, после чего сможете смело открывать свои скрипты, ставить точки останова, нажимать в панели отладки зелёную стрелочку и радоваться.
    Ответ написан
    Комментировать
  • Как вычислить позицию точки на краю круга?

    romash
    @romash
    web-разработчик
    x = X + cos(a) * R, y = Y + sin(a) * R, где
    x, y — координаты центра маленькой окружности;
    X, Y — координаты центра большой окружности;
    a — угол;
    R — радиус основной окружности.
    59db434976c9e941294772.jpeg
    Ответ написан
    2 комментария
  • Насколько удобно Docker интегрирован в PhpStorm?

    romash
    @romash
    web-разработчик
    Про xdebug могу сказать, что вы скорее всего что-то не так готовите. Важно понимать, что сам xdebug является по сути клиентом, который отправляет данные дебаг-серверу (в данном случае его поднимает PHPStorm). Исходя из этого можно с уверенностью заявить, что в docker-compose вообще ничего, связанного с дебагом быть не должно (максимум сюда можно отнести проброс папки vendor, если вам нужно в дебаге проходить по подгруженным композером библиотекам).

    Как работает xdebug: вы открываете в браузере страницу, php начинает её обрабатывать, xdebug смотрит в свой конфиг и, если видит инфу для подключения (адрес и порт дебаг-сервера), то подключается к нему, узнаёт о брейкпоинтах и дальше они между собой взаимодействуют, но подключение поднимает php, то есть оно идет из контейнера на хост, никакие порты при этом пробрасывать не нужно, так как из контейнера ваш хост всегда видно.

    Я ставлю в конфиге xdebug.remote_connect_back=on, тогда не нужно указывать xdebug.remote_host и он ищет сервер на ip, с которого открыли страницу. Правда так не подебажишь cli, но ip-шник хоста тоже можно как-то достать, можете погуглить, если очень хочется.

    Допустим, у вас в xdebug.ini написано следующее:
    zend_extension=xdebug.so
    xdebug.remote_enable=on
    xdebug.remote_autostart=on
    xdebug.remote_connect_back=on
    xdebug.remote_port=9999


    Тогда в PHPStorm достаточно:
    Settings > Languages & Frameworks > PHP > Debug
    В разделе Xdebug указать порт 9999 и поставить галку на Can accept external connections.
    В самом низу, в Advanced settings убрать галку с Notify if debug session was finished without being paused

    Settings > Languages & Frameworks > PHP > Servers
    Добавить сервер:
    Name и Host указать из server_name nginx (с другими прокси не настраивал)
    Port тоже из конфига nginx, а не тот, что пробрасывается наружу!
    Эти данные php берет от своей прокси внутри контейнера и передаёт при поднятии сессии дебага, так что, если неправильно указать, Path mapping не заработает.
    Галочка на Use path mappings и поставить в соответствие папке проекта абсолютный путь внутри контейнера

    Также на всякий случай и для сравнения инструкция для VSCode:
    Установить расширение PHP Debug и добавить в конфигурацию дебага следующее
    {
        "name": "Listen for XDebug in Docker",
        "type": "php",
        "request": "launch",
        "port": 9999,
        "pathMappings": {
            "Абсолютный путь к папке проекта в контейнере": "${workspaceRoot}"
        }
    }


    Это дело у меня прекрасно работает и из под винды со старой docker-machine, и "огромным бубном" я бы это не называл...
    Ответ написан
    Комментировать
  • Подсобите с регулярным выражением?

    romash
    @romash
    web-разработчик
    Ответ не верен, но я слишком долго его писал, так что мне жалко его удалять :D
    Вот так можно получить
    1) AAA(CCC(C1_1);A1_1);
    2) BBB(B1_1; B1_2);
    3) DDD(D1_1).

    Я не уверен, но, насколько мне известно, так как CCC(C1_1) уже находится в найденном (внутри AAA(CCC(C1_1);A1_1)), второй раз его вы не найдёте, для этого придётся повторять парсинг для группы 2 каждого включения.

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

    UPD: Изменил пример. Предыдущая регулярка искала AAA(bar; BBB(); foo) но путалась с AAA(BBB(); foo; DDD(); bar).
    Ответ написан
    4 комментария
  • Как запустить docker-контейнер со статикой сайта?

    romash
    @romash Автор вопроса
    web-разработчик
    Ответ оказался гораздо проще и красивее, чем я предполагал.
    У докера с версии 17.05 появилась такая замечательная штука, как Multi-stage build. Она позволяет в одном докерфайле сначала сделать контейнер с nodejs, сбилдить в нём статику, а потом создать ещё один контейнер с nginx, в который скопировать артефакты сборки из первого. При этом результирующий образ не будет содержать данных из образа nodejs и исходников (если вы их явно на втором шаге не скопируете), что позволяет сделать его максимально лёгким.
    FROM node:8 as build
    WORKDIR /web
    
    COPY package.json yarn.lock ./
    RUN yarn
    
    COPY . ./
    RUN yarn build
    
    
    FROM nginx:alpine
    WORKDIR /usr/share/nginx/html
    RUN rm -rf *
    COPY --from=build /web/dist .
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (14)