• Возможно ли актуализировать старый дистрибутив Linux?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Теоретически можно.
    Практически потребуются оооочень хорошие знания этого дистриба, намного превышающие знания обычного бубунтовода, потому что все придется делать руками.
    Ответ написан
    4 комментария
  • Как работает htmlspecialchars()?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ну уж для такой-то простой функции должно быть достаточно написанного на странице документации.
    И, в частности, про ENT_QUOTES ;)

    Эта функция заменяет спецсимволы, которые являются управляющими в контексте HTML, на безобидные HTML-сущности. Вот и всё.
    Чисто визуально управляющие символы будут выглядеть так же, как и должны, но в коде не будут представлять ни малейшей опасности.

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

    <?php $name = "' onclick='alert(\"pwned!\")"; ?>
    <input value="<?=htmlspecialchars($name) ?>"> Не важно. Весь текст так и заключен в двойные кавычки
    <input value='<?=htmlspecialchars($name) ?>'> Важно. Закрыли одинарную, вписываем, что хотим

    Во втором случае этот код отрендерится, как
    <input value='' onclick='alert(&quot;pwned!&quot;)'>
    (но при этом &quot; отрендерятся в двойные кавычки, и в onclick будет уже валидный яваскрипт
    alert("pwned!")

    А с взведенным флагом ENT_QUOTES мы получим
    <input value='&#039; onclick=&#039;alert(&quot;pwned!&quot;)'>

    И хотя значение внутри атрибута отрендерится, как ' onclick='alert("pwned!"), но оно все целиком будет внутри атрибута value.

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

    К счастью, РНР уже позаботился о вас и ваших друзьях. Начиная с версии 8.1, флаг ENT_QUOTES ставится по умолчанию. И приведенный выше пример будет работать только на устаревших версиях. Так что ручное добавление уже уходит в область легаси-практик.

    Чтобы не ломать пальцы, каждый раз набирая всё это htmlspecialchars ENT_QUOTES, толковые джуны всегда пишут пользовательскую функцию-макрос, типа
    function esc($var) {
        return htmlspecialchars($var, ENT_QUOTES);
    }

    Правда, надолго с этой функцией не задерживаются, потому что она годится только при обучении. А любой проект сложнее, чем домашняя страничка про любимого котика, в обязательном порядке уже должен для вывода использовать специальный шаблонизатор, например Twig. Где весь вывод идет с помощью специального оператора, который уже по умолчанию экранирует HTML
    <input value="{{$name}}"> Не важно. Все уже проэкранировано до нас

    Важно помнить, что это экранирование работает только в контексте HTML.
    Если выводим данные внутри кода яваскрипт, то htmlspecialchars поможет как мертвому припарки. И в этом случае надо использовать json_encode.

    Ну и разумеется, надо не забывать комбинировать все варианты экранирования.
    Например, код яваскрипт, который пишется в атрибут HTML тега, надо весь целиком экранировать c с помощью htmlspecialchars. А данные для этого кода - c с помощью json_encode:
    <button onclick="<?= htmlspecialchars("window.open(".json_encode($name).")", ENT_QUOTES) ?>">
    Ответ написан
    3 комментария
  • Как реализовать кроссплатформенную поддержку Unicode в аргументах командной строки в C?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Соответственно, мне нужно конвертировать массив wchar_t в массив char перед шифрованием, а после дешифровки выполнять обратную конвертацию.

    Этот вывод не следует из исходных данных. Массив данных любого типа может быть проинтерпретирован как массив байтов, без какой бы то ни было конверсии. Т.е. исходные данные в любом формате можно зашифровать, а потом расшифровать обратно. Поэтому имеет смысл отделить преобразование форматов входных данных от шифрования/расшифровки.

    Я поменял сигнатуру функции main() на int main(int argc, wchar_t* argv[]) (пытался исправлять на wmain, но тогда ругается ld и сборка падает с ошибкой).

    То, что ты меняешь прототип main, никак не влияет на то, как она будет реально вызвана. В стандарте языка C написано, каким может быть прототип main: int main(void), int main(int argc, char *argv[]) или эквивалентным. Там же написано, что набор символов во время выполнения программы -- implementation defined, поэтому нет гарантии, что их можно обработать кросплатформенно.

    Для конвертации wchar_t* в char* я пробовал использовать функцию wcstombs, однако почему-то у меня она совершенно не работает (при попытке преобразовать строку, содержащую только латиницу, я получаю null).

    wcstombs не занимается выделением памяти, если ты "получаешь null" -- это происходит в каком-то другом месте. Ну и если ты это делаешь внутри main принимающего wchar_t* argv[], то твой код интерпретирует строку char как строку wchar_t, что добавляет хаоса.
    Ответ написан
  • В каких случаях использовать С++, а в каких Blueprints?

    Логику пишет геймдизайнер, который не очень то программист - напрашиваются BP.

    Сетевой код, работа с голым UDP - напрашивается C++.

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

    Какое-то очень узкое место, где надо обрабатывать кучу чисел и объектов.
    Что-то типа конвейеров в factorio например.
    Напрашивается C++ из-за своей эффективности и плотности логики, ибо то же самое на BP будет очень развесистой лапшой.
    Ответ написан
    Комментировать
  • Почему в Си после main() не ставят ;?

    @res2001
    Developer, ex-admin
    В Си различают определение функции и предварительное объявление функции (он же прототип).
    Точка с запятой ставится только в случае предварительного объявления функции.
    Например:
    int func(int a, inb);     // предварительное объявление
    int func(int a, inb) { return a+b; }       // определение функции

    В вашем примере main - это определение функции - точка с запятой не ставится.
    Ответ написан
    Комментировать
  • Какие примеры кода показывать работадателю, если ты под NDA?

    xez
    @xez
    TL Junior Roo
    всем нужны примера кода, понятно почему

    Мне не понятно.
    Ни разу не собеседованиях у меня примеры кода не спрашивали.
    Я сам на собеседованиях ни разу примеры кода не спрашивал; я прошу рассказать о предыдущем проекте чисто с технической точки зрения, бизнес логика мне не интересна и на собеседовании не нужна.
    Ответ написан
    2 комментария
  • Самый быстрый веб-сервер php для windows?

    @springimport
    Сижу на OpenServer на php 5.6. На OpenServer потому что Docker имеет проблему со скоростью в shared-папках, на линуксе (убунте) шрифты и интерфейс не то. А php 5.6 потому что проект так сейчас требует. И получается довольно медленно все. Примерно в 3-5 раза медленее чем в линуксе.

    Что может помочь ускорить работу:
    - если в проекте есть кэш, то включить, хотя бы частично;
    - opcache наше все, обязательно;
    - переход (в моем случае, например) на PHP 7 или 7.1;
    - SSD (даст как в сумме все вышеперечисленное).

    Apache менять на Ngnix не вижу вообще смысла. На сами запросы тратится меньше 1% по сравнению с работой PHP и MySQL.
    Ответ написан
    Комментировать
  • Самый быстрый веб-сервер php для windows?

    dima9595
    @dima9595
    Junior PHP
    На счёт NGINX, да, его хвалят. На Habre есть много статей по производительности NGINX и Apache. Сам же пользуюсь Apache'м, т.к. он лёгок в установке и настройке.
    На счёт производительности: Всё зависит от того, как оптимизированы ваши скрипты, sql-запросы.
    В качестве WAMP использую Open Server (на локалке), а на виртуалке - LAMP (на Ubuntu).
    Ответ написан
    2 комментария
  • Самый быстрый веб-сервер php для windows?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Как добиться того, чтоб сайты (которые пишутся с помощью php-фреймворков) на локальном веб-сервере просто летали?

    web сервер выполняет транспортную роль по большей части. Что бы сайт "летали" - их нужно писать так, что бы "летали"))

    Какой локальный сервер использовать?

    nginx+php-fpm

    Пробовал много чего: vagrant, ubuntu-сервер разворачивал сам. Но эти варианты для меня не удобны.

    Вам шашчеки, или ехать?

    NGINX вообще ни разу не пробовал. Его хвалят, но как его устанавливать и настраивать в Windows я не нашёл.

    Вы того, не воспринимайте win как серверную ОС и все встанет на свои места))
    Ответ написан
    2 комментария
  • VS Code творит лютую дичь при компиляции и отладке?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Это называется "оптимизируюший компилятор". Он может выкинуть какие-то строчки, часть кода переписать и перетасовать. Соптимизировать по своему усмотрению. Поэтому для отладки используют специальные debug сборки. Установите компилятору флаг -O0, чтобы отлкючить оптимизацию.

    В закоменченную фунцию он может заходить, если вы не перекомпилировали перед запуском.
    Ответ написан
    7 комментариев
  • Ошибка в bash скрипте: bash unexpected EOF while looking for matching `'' - что именно не так?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    На вид всё выглядит корректно, все кавычки парные и вовремя закрыты.
    domains="$(cat /opt/cloudfave/cluster_config.js | grep domain | awk '/domain: / { print $2 }' | sed -e \"s/[,']//g\")"

    вот здесь одиночная кавычка в строке sed портит разбор
    Ответ написан
    4 комментария
  • Переадресация без заголовка Location и мета-тега - как это работает?

    Daemon23RUS
    @Daemon23RUS
    Вы не в ту сторону смотрите. Например у меня есть несколько доменов, но на них нет сайтов, и их не попинговать. А почта есть и работает. Делайте запрос DNS на наличие MX записей для домена, можно пойти дальше и проверить наличие и работоспособность mail сервера в возвращенном MX значении. Нет записи, такой домен не принимает письма.
    Вот только что даст такая проверка входящих адресов - вопрос.

    P.S по заголовку вопроса ответ: Все банально, на основе userAgent cloudfave.com отдает html сo скриптом, скрипт дропает тело html все выглядит пустым. А далее идет "магия JS" и "шаманство с куками" смысл которого, если есть кука отдает реальный код, нет куки - пустышку. В итоге JS locationreload
    Ответ написан
    9 комментариев
  • Почему происходит сбой при отправке некоторых файлов через JS FormData?

    Ge1i0N
    @Ge1i0N
    Значение ошибок по коду можно посмотреть в доке.
    В целом, вы предполагаете верно:
    Размер принятого файла превысил максимально допустимый размер, который задан директивой upload_max_filesize конфигурационного файла
    Ответ написан
    3 комментария
  • Как объяснить работу event loop под капотом?

    Xuxicheta
    @Xuxicheta
    инженер
    Логично же, что они выводятся в порядке попадания в стэк.
    Промисы - как раз микротаски, но сначала в стэк (для микротасков - это microtask queue) отправляются 4 и 7 (в общей фазе), потом 4 выполнится и добавит 5 после 7. Потом выполнится 7 и добавит в стэк 9. Ну и так далее.
    На 10 microtask queue будет исчерпан и итерация будет закончена.
    А 2 выполнятеся уже в следующей итерации цикла.

    upd. Поправил ответ.
    Ответ написан
    9 комментариев
  • Оплата удаленной фултайм работы: аванс или сдельная?

    @jkotkot
    режим сарказма
    1) Джентельмены доверяют друг другу.
    2) Если не очень, то увеличиваешь частоту выплат до недельных или раз в две недели.
    3) Если совсем не доверяют, то работают через платформы типа упорка и платят им процент
    Ответ написан
    8 комментариев
  • Оплата удаленной фултайм работы: аванс или сдельная?

    @Stalinko Куратор тега Фриланс
    PHP'шник и фрилансер до мозга костей
    Договор это конечно хорошо, но реальность такова, что вряд ли вы пойдёте судиться, а если и пойдёте, то потеряете кучу времени и денег и не факт, что оно будет того стоить. А если заказчик из другой страны, то договором вообще можно подтереться.

    Если вы собираетесь работать фулл-тайм, то на первых порах нужно убедиться, что заказчик готов платить в срок. Надо договориться, что первое время оплата будет после каждой 1-2 недель работы. И что оплата будет произведена в срок не более 1 недели. То есть: проработали 2 недели, подбили часы, ещё 1 неделя даётся заказчику на оплату. Если после этого срока оплата не происходит, то вся работа прекращается. Т.е. вы рискуете 3 неделями работы в данном случае.
    Но нынче найти толкового программиста это очень дорого и сложно. Если вы такой, то вас никто не станет кидать. Это будет тупо невыгодно.

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

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

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    А решается оно часто двумя строчками :)

    Это по причине того, что на форумах часто код дают в функциональном стиле, состоящим из вызовов map/filter/reduce и.т.д., а новички еще не дошли до этого, и их это ставит в ступор.
    Может быть есть какие-то книги, которые помогают "строить мост" между голой теорией про массивы (в которой, к слову, сложности не вижу) и возможностью применить знания на практике?

    Вообще, носорог и learn.java-script.ru самые простые книги по JS, есть еще You Dont Know JS, она на английском. Если они кажутся сложными, то либо программирование это не ваше, либо пробуйте читать фундаментальные книжки, типа Код. Тайный язык информатики. Чарльз Петцольд
    Ответ написан
    4 комментария
  • Объявится ли переменная внутри функции, если её имя совпадает с параметром?

    @MitakoHir
    Для проверки можно использовать массивоподобный объект arguments

    function trololo(param) {
    console.log(arguments);
    console.log(param);
    var param = 5;
    console.log(param);
    console.log(arguments);
    }
    trololo(10);

    Из вывода видно что значение в arguments изменяется, значит можно сказать что объявление переменной опускается и происходит перезапись.
    Ответ написан
    1 комментарий
  • Почему при смешении красного и синего мы получаем фиолетовый, а не зелёный?

    @vlad_bo
    3D modeler
    Почему при смешении красного и синего мы получаем фиолетовый, а не зелёный?

    Потому, что это не так. При смешении R+B мы получаем вовсе не фиолетовый, а цвет, которого нет в спектре: пурпурный, Magenta.

    Но только при смешении самых длинных волн с практически самыми короткими (из видимой части спектра) мы получаем ещё более короткие.

    Так что в результате — смесь волн, а не самые короткие.
    Ответ написан
    5 комментариев