• Tshark не распознаёт русские буквы, что делать?

    Vamp
    @Vamp
    hint000, наверное это было слишком сильное утверждение, поэтому оно ввело вас в заблуждение.

    Я не имею ввиду, что в принципе не существует алгоритмов с хешированием пароля на стороне клиента.

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

    Если говорить конкретно про RFC 2069, на который вы ссылаетесь, то применение данного стандарта ограничено из-за md5 в качестве единственного возможного криптоалгоритма. Соответственно,
    любой mitm способен сбрутить пароль на современном железе. Но это маловероятно на мой взгляд. Компрометация сервера гораздо более реальный вариант, а при таком раскладе даже брутфорс не нужен.
  • Как средствами PHP нарисовать дугу для SVG файла?

    Vamp
    @Vamp
    Zorgios, согласно спецификации path:
    All coordinates and lengths specified within path data must be treated as being in user units in the current user coordinate system.

    Туториал мозиллы описывает данный момент менее формально:
    Coordinates in the d parameter are always unitless and hence in the user coordinate system.


    Чтобы переопределить дефолтную "user coordinate system", нужно в элементе <svg> прописать атрибут viewBox:
    $image = new SVG('10mm','10mm');
    $image->getDocument()->setAttribute('viewBox', '0 0 10 10');

    В данном примере ширина и высота viewBox устанавливается в 10 user unit'ов. Так как width и height элемента <svg> - 10mm, то один user unit получается соответствует 1mm. Из-за этого все размеры в path можно тоже условно считать миллиметрами.

    Другой пример:
    $image = new SVG('10mm','10mm');
    $image->getDocument()->setAttribute('viewBox', '0 0 100 100');

    В этом примере каждый user unit соответствует 0.1мм.

    Рекомендую вам рисовать все элементы в этих условных абстрактных user unit'ах. Так проще понимать и согласовывать относительные размеры и положение элементов. А миллиметры оставить только в <svg>.
  • Возможно ли выбрать российский сервер в CloudFlare?

    Vamp
    @Vamp
    argen312, да. Но с anycast определить местоположние сервера сложнее, так как оно зависит от местоположения посетителя. Если яндекс "посещает" сайт из москвы, значит anycast зарулит трафик в московский ДЦ CloudFlare. Это можно отследить по traceroute.

    Насколько мне известно, намного большим весом является указание географии в контенте сайта. Например, сайт с title "ремонт велосипедов в кемерово" будет ранжироваться выше для посетителей из кемерово даже если сам сайт хостится где-нибудь в сингапуре. Также немалую роль для поисковиков играет скорость загрузки сайта. Anycast и кеширующие функции CloudFlare определённо помогают уменьшить задержки при передаче данных, но многое зависит и от скорости работы скриптов на самом сайте.
  • Как заменить mysql на mysqli в проекте?

    Vamp
    @Vamp
    Евгений Иванов, вы считаете нерабочий из-за устаревшего модуля проект будет хорошо смотреться в портфолио?
  • Как узнать размер объектов в конкретной JVM?

    Vamp
    @Vamp
    Можете уточнить конкретный пункт спецификации?
  • Как проверить какая ошибка в $_FILES?

    Vamp
    @Vamp
    Ведь для проверки именно это и нужно, не так ли?

    Верно.

    Но с ajax можно и http заголовок сделать вместо query string:
    xmlhttp.setRequestHeader('X-Form-Sent', '1');
    Для проверки годятся оба варианта.
  • Как проверить какая ошибка в $_FILES?

    Vamp
    @Vamp
    Анатолий, у вас не "отправка GET и POST одновременно". Это всё-таки POST, но с добавлением query string, который php парсит и заносит в $_GET независимо от метода.
  • Как проверить какая ошибка в $_FILES?

    Vamp
    @Vamp
    <script>
        a = new XMLHttpRequest();
        a.open('GET', 'http://127.0.0.1:8080/index.php');
        a.onreadystatechange = function() {
            if (a.readyState === XMLHttpRequest.DONE) {
                document.getElementById('a').innerText = a.responseText;
            }
        };
    
        b = new XMLHttpRequest();
        b.open('POST', 'http://127.0.0.1:8080/index.php');
        b.onreadystatechange = function() {
            if (b.readyState === XMLHttpRequest.DONE) {
                document.getElementById('b').innerText = b.responseText;
            }
        };
    
        a.send();
        b.send();
    </script>
    <div id="a"></div>
    <div id="b"></div>


    index.php:
    <?php
    echo $_SERVER['REQUEST_METHOD'];


    Вывод на странице:
    GET
    POST
  • Как проверить какая ошибка в $_FILES?

    Vamp
    @Vamp
    Анатолий, "вероятно" в данном случае означает то, что факт срабатывания post_max_size невозможно определить однозначно, так как в PHP нет инструментов для конкретно этого случая.

    К примеру, админ прописал на nginx:
    client_max_body_size 2M
    GET пройдет, а POST - нет! и что?
    POST не пройдёт, но на стороне PHP вы об этом вообще не узнаете, так как nginx зарубит запрос с ошибкой "413 Request Entity Too Large" и не отправит его в PHP.

    Не совсем я понял тему с $_FILES, кому нужна информация по ошибкам?
    Вам и нужна. Если в $_FILES['images']['error'] какое-то значение, отличное от UPLOAD_ERR_OK, то файл не загружен. Например, по причине превышения upload_max_filesize.
  • Как проверить какая ошибка в $_FILES?

    Vamp
    @Vamp
    Анатолий, при превышении post_max_size все тело post запроса отбрасывается, а php не предлагает четкого индикатора срабатывания post_max_size, поэтому данную ситуацию можно отследить только косвенно - если форма отправлена, но нет вообще никаких данных, значит, вероятно, превышен post_max_size.

    Если files пуст, но присутствуют другие поля формы, то пользователь не загружал файл вообще.

    Чтобы определить была ли отправлена форма вообще, официальная дока предлагает добавить get параметр. Пример из ответа я скопипастил как раз оттуда. Но вы можете использовать любой другой способ. Например, if ($_SERVER['REQUEST_METHOD'] == 'POST') или выставлять особый http заголовок при отправке формы ajax'ом.
  • Как убеждать клиентов оплачивать ТЗ (или оценку проекта) и нужно ли это делать?

    Vamp
    @Vamp
    Максим, и дом могут построить без сметы и анализа. И получается всё точно так же - всплывают непредвиденные сложности, особенности, увеличиваются сроки и стоимость проекта. Не каждый заказчик готов оплачивать проектно-изыскательские мероприятия.
  • Зачем указывают ssl_dhparam в конфиге nginx? Какой риск если его убрать из конфига?

    Vamp
    @Vamp
    art style, ky0 скорее говорит не о конкретно банковском ПО, а о вообще любом ПО на java 6. Суть в том, что java до 7 версии включительно поддерживала dhparam не больше 1024 бит. В итоге java клиент согласовывает алгоритм DHE как самый лучший из поддерживаемых, но не может им воспользоваться из-за слишком большого dhparam на сервере. И будет большой удачей, если на стороне клиента найдется специалист, способный зафиксировать другой поддерживаемый алгоритм шифрования. При условии, что ПО в принципе позволяет сделать такие настройки.

    Поддержка таких старых клиентов в 2021 году имеет не больше смысла, чем верстка сайтов с учётом ie7. Единственное исключение - если клиент специально отдельно заплатит за такую поддержку.
  • Почему поток не отрабатывает задуманного в Java?

    Vamp
    @Vamp
    Jake Taylor, не нашел в документации явного указания, но данное поведение вполне ожидаемое и логичное, иначе писать тесты было бы намного сложнее. Впрочем, junit с оставшимися в живых потоками тоже ничего не делает - он просто вызывает System.exit() по завершении тестов и jvm сама всех уничтожает. По крайней мере консольный и IDEA'вский junit лаунчеры именно так и делают.

    где тогда лучше тестировать код? Через public static void main?


    Тестируйте так, как вам удобно. Просто при тестировании через junit нужно помнить об этой особенности, только и всего.
  • Php Comet + Sokil\Mongo, почему class '\MongoCollection' not found, хотя mongodb на php поставлен?

    Vamp
    @Vamp
    LakeForest, ещё нужно поставить alcaeus/mongo-php-adapter. Как оказалось, sokil/php-mongo написан с использованием устаревшего php модуля mongo и с новым модулем mongodb работать не будет без прослойки, обеспечивающей совместимость нового модуля со старым.
  • Зачем указывают ssl_dhparam в конфиге nginx? Какой риск если его убрать из конфига?

    Vamp
    @Vamp
    ky0, могу только посочувствовать этим несчастным, застрявшим в прошлом десятилетии.
  • Где новичку найти OpenSource проекты?

    Vamp
    @Vamp
    В крупных опенсорс проектах всегда есть тикеты джуниорского уровня. Иногда такие тикеты даже помечаются отдельным тегом "good first issue".

    охреневать от того насколько там всё непонятно, и далеко от ваших представлений об Open Source.


    Так это наоборот плюс. У человека даже не будет шанса попробовать примерить розовые очки, если начнет карьеру с жестокого и беспощадного опенсорса. А если сможет выжить в таких условиях, значит есть потенциал. Я бы при приеме на работу отдавал предпочтение кандидатам с реальным опытом участия в опенсорсе, чем кандидатам, прошедшим 100500 модных курсов.
  • Зачем нужны типы данных byte и short в Java?

    Vamp
    @Vamp
    Орхан Гасанлы, JVMS 2.11.1:

    For the majority of typed instructions, the instruction type is represented explicitly in the opcode mnemonic by a letter: i for an int operation, l for long, s for short, b for byte, c for char, f for float, d for double, and a for reference. Some instructions for which the type is unambiguous do not have a type letter in their mnemonic. For instance, arraylength always operates on an object that is an array. Some instructions, such as goto, an unconditional control transfer, do not operate on typed operands.

    Given the Java Virtual Machine's one-byte opcode size, encoding types into opcodes places pressure on the design of its instruction set. If each typed instruction supported all of the Java Virtual Machine's run-time data types, there would be more instructions than could be represented in a byte. Instead, the instruction set of the Java Virtual Machine provides a reduced level of type support for certain operations. In other words, the instruction set is intentionally not orthogonal. Separate instructions can be used to convert between unsupported and supported data types as necessary.

    ...

    Note that most instructions in Table 2.11.1-A do not have forms for the integral types byte, char, and short. None have forms for the boolean type. A compiler encodes loads of literal values of types byte and short using Java Virtual Machine instructions that sign-extend those values to values of type int at compile-time or run-time. Loads of literal values of types boolean and char are encoded using instructions that zero-extend the literal to a value of type int at compile-time or run-time.


    То есть для большинства операций над short, byte, bool тупо нет соответствующего опкода, потому что дизайн байткода не позволяет сделать индивидуальные операции каждому типу. Поэтому jvm оперирует на стеке и в локальных переменных int'ом, если это не long или double.

    JVMS 2.6.2:

    At any point in time, an operand stack has an associated depth, where a value of type long or double contributes two units to the depth and a value of any other type contributes one unit.


    Согласно процитированному требованию, все примитивы занимают ещё больше памяти на 64-битных системах - как long. Это если jvm не применяет какие-либо оптимизационные трюки.

    Inside the Java Virtual Machine, Bill Venners:

    The basic unit of size for data values in the Java virtual machine is the word--a fixed size chosen by the designer of each Java virtual machine implementation. The word size must be large enough to hold a value of type byte, short, int, char, float, returnAddress, or reference. Two words must be large enough to hold a value of type long or double. An implementation designer must therefore choose a word size that is at least 32 bits, but otherwise can pick whatever word size will yield the most efficient implementation. The word size is often chosen to be the size of a native pointer on the host platform.

    The specification of many of the Java virtual machine's runtime data areas are based upon this abstract concept of a word. For example, two sections of a Java stack frame--the local variables and operand stack-- are defined in terms of words. These areas can contain values of any of the virtual machine's data types. When placed into the local variables or operand stack, a value occupies either one or two words.


    Примитивы, являющиеся полями объекта, могут и правда занимать минимально необходимое количество места в хипе, но и тут есть нюансы, связанные с memory aligment. Смотрел запись доклада с какой-то java конференции, где как раз рассказывали про этот момент в реализации hot spot. К сожалению, ссылку на доклад найти не смог.