Задать вопрос
  • Можно ли сделать псевдо-"движок" сайта на include?

    Neocaridina
    @Neocaridina
    самый скромный
    Все так и делают. Особенно если для себя.
    Ответ написан
  • Как эффективно продвигать b2b интернет-проект?

    gobananas
    @gobananas
    finishhim.ru
    В b2b всё старо как мир:
    1) Холодный обзвон
    2) Спам по корпоративным почтам
    3) Контекст по запросам директоров, ЛПР, ЛВПР
    4) Работа с контентом который ищут люди из этих сфер
    5) Директ-маркетинг на директоров
    6) Выставки
    7) Знакомства, рекомендации
    Ответ написан
    Комментировать
  • Нормально ли спрашивать про бывшую зарплату?

    gobananas
    @gobananas
    finishhim.ru
    Мы постоянно задаём такие вопросы и все отвечают, не припомню что бы кто-то не ответил. Тогда сразу открывается возможность для разговора о причинах смены работы:

    1. Получал меньше хочет больше - всё понятно, давайте только обсудим на сколько больше вам хотелось бы получать?
    2. Получал столько же сколько указано в вакансии на этой работе - причина смена места работы не в деньгах, тоже обсуждаем что не нравилось (в уме прикидываем как сделать что бы человеку всё нравилось)
    3. Получал больше идёт на меньшую - и такое бывает. Жизненные обстоятельства (работа нужна срочно), сферу деятельности человек меняет.

    Если бы мне человек не сказал доход с предыдущего места работы, ну не сказал и ладно, но для себя я галочку поставил бы что закрытый, опасливый человек, мы таких не любим )))

    В вакансии у нас указана реальная вилка ЗП и от того сколько человек получал на предыдущем месте ни эта вилка, ни условия не изменятся. Девушка однажды пришла на собеседование так же на 25-30, сказала на предыдущем месте работы 200 получала, на джипе приехала ))

    У нас люди приходят на собеседование и свободно говорят что у меня есть сейчас сторонний доход 35 например и у вас я планирую работать на 28, т.е. мы чётко понимаем что на стороне человек будет зарабатывать больше чем у нас, но он нам нравится то мы всё равно берём его.
    Ответ написан
    22 комментария
  • Где обитают чайники?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    все подобные - на https://otvet.mail.ru
    Сейчас, в плане хранилищ данных: или SSD (usb флешки - почти уже тоже все вымерли), или NAS, или домашнее "облако", или глобальное "облако".
    Ответ написан
    2 комментария
  • Как скрыть часть текста?

    webirus
    @webirus
    Тыжверстальщик! Наверстай мне упущенное...
    Так? https://jsfiddle.net/webirus/k058u9ct/
    $(this).toggleClass('active'); лишний, он для моего скрипта использовался, удалите
    Ответ написан
    3 комментария
  • Code review верстки новичка + вопросы?

    pm_wanderer
    @pm_wanderer
    junior-HTML
    По html пробежался:

    У тебя есть места где тег h2, h3 идет перед h1. Так делать не принято (хоть и не считается ошибкой при валидации). Почитай про html document outline - это система структурирования документа по заголовкам и секциям.

    Встречаются пустые конструкции из дивов, которые видимо используются в презентационных целях и захламляют документ (лучше использовать псевдоэлементы before и after для этого)

    Презентационные картинки типа иконок не нуждаются в заполнении аттрибута alt (оставить его пустым лучше, но не убирай) и можно добавить role=presentation. Картинки не адаптированы под ретину (почитай про аттрибут srcset).

    Input'ам, без описательного тега label, не нужен аттрибут title (он не на всех скринридерах работает и на мобилах он не отображается) Если решили уж делать поле ввода без label, то пусть лучше аттрибут placeholder описывает максимально, что требуется от простого пользователя, а для пользователей скринридеров использовать aria-label.

    Последний момент: если хочешь прям ваще чтоб идеально было, то надо внедрять в код wai-aria, но спешу тебя обрадовать, что об этом любят только говорить всякие гуру на конференциях, а на деле практически никто это не внедряет правильно, так как требуется в WCAG и Section508

    Ну в остальном все нормально в общем, кроме всяких вещей субьективных типа структуры вложенности дивов. Я лично не люблю когда их очень много, но некоторым так удобней держать в голове структуру документа. Сам сайт не сравнивал с кодом, поэтому мог не заметить каких то еще явных косяков - пробежался просто поверхностно глазами по html на гитхабе.
    Ответ написан
    Комментировать
  • Code review верстки новичка + вопросы?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Нужна конструктивная критика

    Ну давайте покритикуем... постараюсь все аргументировать.

    Начнем не с кода, а с юзабилити так сказать: есть люди, которые используют tab для перемещения по странице. Это факт. В вашем случае получается, что в верхнем меню перемещаться можно только по словам (но не по иконкам), а по остальной странице - вообще нельзя. Т.е. формально перемещение идет, но ничего не выделяется и совершенно не понятно где мы находимся. Имеет смысл добавить для focusable-елементов стили для :focus.

    Второе - при уменьшении экрана в некоторых местах надписи начинают наезжать (несильно, но глаз режет) друг на друга. Возможно вам стоит почитать статью про изменение размера шрифта в зависимости от размера экрана - иногда это очень полезно.

    Ну а теперь перейдем собственно к коду. Скриптов у вас немного, поэтому буду говорить про CSS. Вопрос: у вас css файл на 2606 строк - вы пишете все в нем? Если да - вам стоит посмотреть в сторону систем сборки (grunt / gulp) - имеет смысл отдельные компоненты делать в отдельных файлах, а затем это все склеивать. Так проще ориентироваться в происходящем (и те, кто будут работать с вашим кодом после вас скажут вам спасибо). Опять же префиксы для браузеров можно будет расставлять автоматически.

    Дальше:
    .work_pic1-part1:hover span,
    .work_pic1-part1:hover:before,
    .work_pic2-part1:hover span,
    .work_pic2-part1:hover:before,
    .work_pic3-part1:hover span,
    .work_pic3-part1:hover:before,
    .work_pic4-part1:hover span,
    .work_pic4-part1:hover:before,
    .work_pic1-part2:hover span,
    .work_pic1-part2:hover:before,
    .work_pic2-part2:hover span,
    .work_pic2-part2:hover:before,
    .work_pic3-part2:hover span,
    .work_pic3-part2:hover:before
    ...

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

    К концу файла глаза довольно сильно устают. Префиксы раздражают, как и множество одинаковых (и совершенно ни о чем не говорящих) чисел. Так что префиксы лучше расставлять автопрефиксером, а в будущем посмотреть на less / sass - препроцессоры упрощают работу и имеют разные плюшки вроде переменных (например длина анимаций просто напрашивается на вынесение в переменную), наследования стилей и.т.д.

    Еще по поводу размера css: есть такое понятие как critical css - стили для первого видимого экрана. Их можно выделить автоматически (см. системы сборки) и встроить прямо в html. А все остальные стили загружать уже потом. Это создаст у пользователя впечатление быстрой загрузки. У Виталия Фридмана есть занятная лекция на youtube, где он рассматривает этот и другие вопросы оптимизации загрузки на примере smashingmagazine.

    Комментарии. Их нет. В большинстве случаев они и правда не нужны, но после нарезки такого рода окончаний
    </div>				
                    </div>
                </div>
            </div>
        </footer>
    </div>

    может что-то потеряться и потом искать не закрытый div очень непросто. Имеет смысл крупные контейнеры оборачивать в комментарии, показывающие начало и конец этого блока (помнится emmet умеет вставлять такие сразу с двух сторон).

    Да и напоследок: названия классов очень разнородные - то дефисы, то подчеркивания, то длинные, то короткие, иногда в них видится система, но эта система переодически дает сбой. Не люблю я БЭМ, но, вероятно вам стоит почитать о нем более подробно (или про аналоги, решающие те же задачи - недавно тут на тостере был вопрос о том, что делать, если бэмоподобные классы перестали нравиться - пришли к выводу, что rscss тоже неплох).

    P.S.: планшета под рукой нет, поэтому про тормоза ничего сказать не могу - на слабом нетбуке все работает более-менее нормально.
    Ответ написан
  • Как закрыть 21 порт?

    ulrich-schnauss
    @ulrich-schnauss
    Системный администратор, веб-разработчик
    SFTP и FTP это два разных протокола. Первый работает через ssh по 22 порту, а второй по 21. Если 21 порт никому не нужен, то его следует закрыть или даже удалить ftp-сервер
    Ответ написан
    5 комментариев
  • Как научить ботов учитывать гравитацию планеты при стрельбе?

    @0x131315
    По поводу скрипта - он странный:
    1) Он работает только для обьектов, которые участвуют в столкновениях.
    2) Он не учитывает дистанцию до центрального тела, только его массу, и работает только для случаев, когда дистанция между противниками в тысячи раз меньше дистанции до центрального тела, т.е. более-менее точен где-то на задворках звездной системы, вдали от звезды. На более ближних дистанциях начинает безбожно врать.
    3) Он наполняет обьектами массив, который не особо нужен скрипту для работы, который нигде не очищается. Это - утечка памяти.
    4) Его можно прикладывать только к одному телу - центральному. Иначе это умножает утечку памяти и сильно расходует процессор. В некоторых случаях его можно заменить триггером. И часто его оптимизируют, вызывая раз в несколько десятков кадров, а не каждый кадр. Также пишут, что указание маски слоя в Physics.OverlapSphere повышает эффективность работы.

    По поводу утечки.
    Не знаю тонкостей unity, не могу сказать точно, насколько она серьезна. Но возможны два варианта:
    1) обьект скрипта пересоздается каждый кадр, и время от времени устаревшие экземпляры собирает сборщик мусора.
    Тогда утечка равна размеру массива помноженному на количество кадров в секунду и на таймаут сборщика мусора.
    При условии, что скрипт используется только на одном обьекте (надеюсь ты не додумался применить его ко всем обьектам?), для 1000 обьектов в сцене, 60фпс и 10 секундном таймауте сборщика мусора, утечка составит 5..50Мб - именно столько памяти игра будет отьедать впустую, никуда не используя, только на один экземпляр этого скрипта.
    Если скрипт применен к 10 обьектам, утечка увеличится до 50..500Мб.
    А если обьектов 1000?
    Так и рождаются игры, которые требуют 16Гб оперативки.
    Это не говоря о бесполезной трате процессорных ресурсов: если по глупости применить скрипт ко всем обьектам, эффективно работать он будет только на одном, но жрать память и процессор будет за всех.
    На 1000 обьектах потребление процессора этим скриптом увеличится в 1000000 раз: 1000 скриптов должны будут каждый обработать по 1000 обьектов.
    Так рождаются игры, которые требуют топовое железо.
    Всего 2 легкие ошибки с одним скриптом (далеко не основным) - и такой потенциал! :)
    2) Используется один экземпляр скрипта, он не пересоздается каждый вызов.
    Тогда обьем массива каждую секунду умножается на фпс, пока массив не забьет всю память.
    И сборщик мусора тут не поможет, т.к. скрипт существует пока существует основной обьект, т.е. пока загружен уровень - всю игровую сессию.
    Для тех же условий утечка в первую секунду составит 0,5..5Мб, и каждую секунду будет увеличиваться на столько же. За час игры утечка составит от 2 до 20Гб, в зависимости от размера структур.
    Утечка процессора останется той же, что и в первом варианте.

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

    По поводу ошибок прицеливания: введи поправки на гравитацию при прицеливании.
    Не факт, что это тебе поможет, все-таки скрипт у тебя кривой, и непонятно правильно ли ты его используешь - каковы максимальные дистанции между противниками, каковы минимальные дистанции от противников до центрального тела, каков размер центрального тела, как создаются снаряды (независимыми или привязанными к тому, кто выстрелил), как задается их скорость (постоянная или относительно скорости выстрелившего), какова скорость снаряда и цели.
    Но самое простое:
    dy=g*t*t/2
    t=l/v
    dy - величина смещения снаряда гравитацией на текущей дистанции
    g - величина гравитации, локальная (вблизи точки выстрела). В твоем скрипте гравитация постоянна, не зависит от координат, и равна массе центрального тела, значит вместо g можно подставить массу центрального тела.
    t - время полета снаряда
    l - прямая дистанция до противника.
    v - глобальная скорость снаряда (относительно мира).
    Ограничения:
    Локальная гравитация неприменима, если дистанция сравнима с расстоянием до центрального тела - там нужен дополнительный учет кривизны поля гравитации. Гравитация в разных точках пути снаряда будет разная, а это сильно снизит точность, особенно на больших дистанциях - на много порядков.
    Прямая дистанция неприменима, если дистанция сравнима с расстоянием до центрального тела - там нужен дополнительный учет кривизны поля гравитации. Дистанция будет не прямой, а дугой, и значит снаряд пройдет больше расстояния, лететь будет дольше, и поправка нужна больше.
    Если время полета больше нескольких секунд, придется учитывать влияние гравитации на скорость снаряда. Снаряд будет ускоряться или замедляться гравитацией, а значит точность с дистанцией начнет быстро падать.
    Если скорость цели сравнима со скоростью снаряда - придется учитывать, что цель движется. Пока снаряд летит в точку прицеливания, быстрая цель оттуда уже убежит, и точность никакой не будет.
    Ответ написан
    1 комментарий
  • Как написать регулярное выражение?

    gobananas
    @gobananas
    finishhim.ru
    // Выбираем всё что в списке
    preg_match('/<li>(.*?)<\/li>/ism', $str, $res);
    
    // удаляем все теги
    $clear = preg_replace('/<(.*?)>/ism', '', $res[1]);
    
    // Заменяем исходную строку на очищенную от тегов
    $str = str_replace($res[1], $clear, $str);

    На самом деле вместо preg_match если элементов много надо сделать preg_match_all и последующее удаление тегов с заменой провести в цикле
    Ответ написан
    Комментировать
  • Как считается длина ключа в Explain mysql?

    Melkij
    @Melkij
    PostgreSQL DBA
    Давайте считать:
    timestamp - 4 байта
    tinyint по 1 байту
    int - 4 байта
    varchar(255) - где 255 длина в символах. В байтах будет больше. Например, для utf8, потребуется 255*3+2 байта. 767 байт. Для utf8mb4 - 255*4+2
    Итого строка индекса занимает 4 + 767 + 1 + 1 + 4 = 777 байт. Немного не хватает, может быть у вас какие-то из полей могут быть NULL?

    Да, если вы не знали, в индексе и в памяти (например, при сортировке) varchar всегда развёрнут до максимальной длины.
    Если возможные строки у вас фиксированы - используйте enum. 1 или 2 байта места для записи. И уж определённо не 255, если у вас строки в 4-6 символов.
    Ответ написан
    1 комментарий
  • Существует ли русскоязычное комньюнити по Docker?

    @yupujexi
    Забавно.
    Желаете находиться на передней грани прогресса, а не знаете английский.

    Например, много опытных ребят тусуется на Slack в golang-ru на канале #devosp
    Приглашение получать тут 4gophers.ru

    Также можно послушать подкасты golangshow.ru - там частенько бывает про Docker и сопутствующие вещи.

    Буквально вчера был подкаст, можно было в прямом эфире задавать вопросы.
    Было и про Docker
    Ответ написан
    2 комментария
  • С каких пор появился фронтенд?

    gobananas
    @gobananas
    finishhim.ru
    Тонкие клиенты стали бурно распространяться года 4 наверное назад. Связано это с тем, что писать на С++ тяжело и поддерживать актуальное состояние клиента на целом зоопарке ОС которые могут быть у клиента тоже тяжело. Проще поставить ему минимальный функционал, а остально держать на сервере.

    webpack/gulp/grunt, много фреймворков

    Ну хабр надо хотя бы иногда пролистывать )) По времени можно так же сказать, с момента выхода первого ангуляра заметная волна такая пошла, до него все преимущественно по JQuery угорали.
    Бурному развитию фронтенда на мой взгляд всё же сильно поспособствовал node.js https://ru.wikipedia.org/wiki/Node.js
    Ответ написан
    2 комментария
  • Vuejs и Angular аналоги? В чём разница?

    @vkdv
    1) vuejs - простой и ненавязчивый фреймворк который призван максимально просто и тесно взаимодействовать с произвольной версткой, в этом плане он очень похож на angular 1 , только проще, чище и чуть логичнее. При этом оп предоставляет инструменты для компонентного подхода(для фанатов клиента) и даже серверный рендеринг. На мой взгляд vuejs - это идеальное решение для быстрой разработки с допустимым уровнем качества.

    2) Backbone - это далеко не библиотека и он в прошлом. Его главный минус - это невозможность управлять поведением dom, если этот dom не был сформирован через backbone-engine. Что делает его почти бесполезным, если только ты не хочешь написать проект , который будет намертво зависеть от выбранного инструмента и в котором будет невероятное множество клинтских шаблонов

    3) React - это скорее концепция + движек для ее реализации, чем фреймворк Его существенный плюс в том, что верстка идет с изолированной логикой в паре, но это плюс скорее концептуальный , точно также можно поступать и используя jquery в изолированом скоупе прямо в верстке в html- фалах - виджетах (Я пробовал уже после реакта и это очень просто и надежно, но я fullstack и мне от клиента большего не нужно)
    Минус реакта в том, что верстка должна рендериться только через шаблонизатор реакта, это значит что весь проект нужно рендерить через реакт иначе же в проекте будет хаос.

    4) Ember - тоже говорят вещь хорошая, но я бы никогда не выбрал Ember по той же причине что и backbone.
    5) Riot и еще 50 подобных фреймворков похожи либо на Angular, либо подражают React, либо идут по пути Backbone&Ember или же какие-то "гибридные" со своими фишками.
    6) Angular 2 - я пока не понял его фишку.

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Регулярка не предназначена для вычислений и плохо подходит для рекурсивных вложений. ИМХО, здесь нужен лексический анализатор.
    Ответ написан
    3 комментария
  • Фоновые задачи в PHP без клиента, альтернатива cron?

    gobananas
    @gobananas
    finishhim.ru
    Демоны на php были есть и будут, гуглите:
    https://daemon.io/
    profyclub.ru/docs/274
    Пробуйте, читайте отзывы и т.д. Проблема демонов в том, что к ним нужна ещё какая-никакя, а система мониторинга, работает демон или нет (сервер был перезагружен, выржрал всю память, просто завис и т.д.) и всякие системы автозапуска на случай профилактических работ в ДЦ.

    Решение на cron обычно проще и надёжнее, но только в одном случае: есть гарантия что когда скрипт запускается по крону, предыдущий скрипт уже завершил свою работу, иначе падение сервера это просто вопрос времени или стечения обстоятельств.
    Ответ написан
    1 комментарий
  • Как вывести номер строки но не id?

    gobananas
    @gobananas
    finishhim.ru
    Делайте через for а не через while и тогда $i это и будет номер строки ну или:
    function our_stores() {
        $n = 1;
        $result = mysql_query("SELECT * FROM stores");
        while ($row = mysql_fetch_assoc($result)) {
          $count++; // нужно ставить перед $res_array
          $res_array[$count] = $row;
          $res_array[$count]['num'] = $n; // Это и будет номер строки
          $n++;
        }
        return $res_array;
      }
    Ответ написан
    1 комментарий
  • Как проверить, что скрипт выполняется через прокси под указанным ip?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    День добрый.

    Сделать в $url какой-то свой адрес и отправить на него запрос.
    А в файле по этому адресу написать определение IP, например

    function getUserIP()
    {
        $client  = @$_SERVER['HTTP_CLIENT_IP'];
        $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
        $remote  = $_SERVER['REMOTE_ADDR'];
    
        if(filter_var($client, FILTER_VALIDATE_IP))
            $ip = $client;
        elseif(filter_var($forward, FILTER_VALIDATE_IP))
            $ip = $forward;
        else
            $ip = $remote;
        
        return $ip;
    }
    
    $user_ip = getUserIP();
    echo $user_ip;


    Таки образом в вашей переменной $page будет ответ с IP адресом.
    Ответ написан
    Комментировать
  • Знания Junior php разработчика?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    что должен знать идеальный джуниор (мое личное мнение):

    - Сетевой стэк. Нужно иметь хотя бы базовое представление о том как с сервером общаются. Ну то есть не нужно лезть в дебри, но понимать что такое HTTP или чем TCP от UDP отличается - нужно. В целом это пара часов чтения википедии.
    - GIT или любая другая распределенная VCS. Базовые навыки, что бы хотя бы понимал что есть git revert или git rebase, что такое фичабрэнчи и примерное представление как это работает и зачем надо.
    - Базовые основы unix. Ну то есть что бы не пугаться таких вещей как ssh хотя бы.
    - PHP. Без этого никуда. Он должен понимать что такое слабая динамическая типизация (не заучивать табличку кастов типов, а понимать плюсы и минусы, такая же история с приоритетами операторов - не заучивать а знать как избегать проблем с чтением кода)
    - Понимать что код чаще читают чем пишут, а потому не экономить 5 минут на написании кода, а писать так, чтобы сэкономить 30 минут человеку, разбирающемуся в куске кода.
    - Знать базовые вещи в плане безопасности. XSS и как защищаться, SQL инъекции и как защищаться, CSRF, MITM. Понимать что такое NDA, что данные пользователей - секретная информация. Как хэшировать пароли (не md5 а password_hash) и почему это важно.
    - Знать SQL. Глубоких знаний не требуется, нужно лишь понимание того, что такое нормальная форма, желательно разобраться с вопросом денормализации данных. Идеально иметь хотя бы базовые представления о том как работать с NoSQL решениями.
    - Процедурное программирование: почему глобальные переменные порождают сложность, что такое состояние, как можно использовать классы для изоляции состояния и т.д. Инкапсуляция. Инварианты, пост/пред условия, сохранение целостности...
    - Разделение ответственности. Это один из важнейших принципов, и упрощать все это до "mvc фреймворк" слегка неправильно. Вы должны понимать что от чего отделяете и главное зачем.
    - Автоматические тесты. Джуниор должен знать что это такое и иметь хотя бы минимальный опыт их написания. Должен понимать разницу между юнит и интеграционными тестами. Быть знакомым с пирамидой тестирования.
    - Уметь решать стандартные задачи не задавая слишком много вопросов. Например регистрацию пользователя по email-у вы должны написать, или авторизацию через соц сети, или комментарии, или новостную ленту.
    - Уметь дебажить. xdebug, blackfire и тд.

    В целом где-то за годик весь этот список можно влегкую покрыть с нуля.

    p.s. Я в списке специально не указывал ООП, поскольку всеравно первые пару лет у разработчиков выходит процедурщина на классах. Это не плохо, но того что в моем списке более чем должно хватать для решения стандартных задач. Но термины вроде "инкапсуляция/полиморфизм/наследование" требуются в обязательном порядке подавляющем количеством интервьюверов, а стало быть знать это надо. Единственное что - рекомендую в свободное время глубже погрузиться в этот вопрос а не тупо заучивать формулировки.

    Так же вещи вроде docker джуниорам знать не обязательно просто потому, что их врядли допустят сходу к управлению инфраструктурой. А так пару неделек на изучение и вперед.
    Ответ написан
    12 комментариев
  • Как организовать управление демонами на PHP?

    4utka_pyan
    @4utka_pyan
    Сильно зависит от специфики деятельности, иногда проще перезапускать по cron каждые 5 минут что-то чем сделать настоящий не падающий демон. А так юзайте
    // Смотрите идентификатор процесса
    $pid = getmypid();
    // Смотрите список всех процессов с pid из php и ищите в нём свой демон (если есть ок, если нет - упал)
    exec('ps aux', $m);
    
    //Запускайте демона со своим собственным именем
    $pid = getmypid();
    $title = "my_daemon";
     
    if (!cli_set_process_title($title)) {
        echo "Unable to set process title for PID $pid...\n";
        exit(1);
    } else {
        echo "The process title '$title' for PID $pid has been set for your process!\n";
        sleep(5);
    }
    Ответ написан
    1 комментарий