Задать вопрос
  • Как в GIT удалить файл из отслеживания?

    @Mozzart88
    1. git rm --cached <назване файла> - ключ --cached удаляет указанный файл только из индекса, но сам файл
    2. а дальше как указано выше - добавляем файл в .gitignore (можно наоборот - сперва добавить в .gitignore а потом удалить его из индекса)
    3. и коммитимся
    Ответ написан
    Комментировать
  • Как собрать kotlin в docker через gradle?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Когда запускаешь команду сборки, просто пропускай этап тестов - gradle build -x test
    Ответ написан
    2 комментария
  • Как добавить 0 перед месяцем и днём?

    miraage
    @miraage
    Старый прогер
    А дальше сами

    function twoDigits(num) {
      return ('0' + num).slice(-2);
    }
    Ответ написан
    1 комментарий
  • Как определить, что у пользователя включен vpn?

    @AlexVWill
    Есть подозрение, что из-за него некорректно работает форма авторизации / регистрации на сайте.

    Надо бороться с причиной, а не с явлением как таковым. Если форма криво работает из-под VPN, то виновата форма, а не VPN. Половина мира уже сидит в интеренет под VPN, поэтому стоит задуматься о том, что у тебя не так реализовано. Тем более, что каких то объективных причин нарушения работы web-сервера если на него поступают запросы от VPN нет.
    Я бы скорее предположил, что в форме реализованы какие то скрипты (возможно даже сторонние JS библиотеки), который блокировщики рекламы считают спамом, и режут их, отсюда и проблема. Надо конкретно смотреть, что не так.
    ак определить, что у пользователя включен vpn

    Ну определишь ты, и что дальше? Как это тебе поможет реализовать исправление ошибки формы? Лучше задуматься о том, как исправить форму, чтобы все могkи ей пользоваться независимо от VPN.
    Ответ написан
    4 комментария
  • Присвоение задом наперёд в PHP?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Это называется деструктуризация.

    $array = ['первый', 'второй'];
    
    [$var1, $var2] = $array;
    
    echo $var1; // 'первый'
    echo $var2; // 'второй'


    Также можно указывать ключи ассоциативного массива

    $array = ['first' => 'первый', 'second' => 'второй'];
    
    ['first' => $var1, 'second' => $var2] = $array;
    
    echo $var1; // 'первый'
    echo $var2; // 'второй'
    Ответ написан
    Комментировать
  • Почему не видит ключ в массиве?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Вы всё еще мучаетесь? =))

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

    <input type="hidden" value="0" name="days[{{$key}}][day]">
    <input type="checkbox" value="1" name="days[{{$key}}][day]"> {{$value}}


    Если в форме присутствуют два поля с одинаковым именем, то будет отправлено последнее из них. То есть, если чекбокс выбран, то будет отправлено значение "1", если нет, то отправится значение "0".
    Таким образом, в приходящем массиве у вас всегда будет заполненное поле.
    Ответ написан
    Комментировать
  • Какие ограничения в PHP существуют?

    iMedved2009
    @iMedved2009
    Не люблю людей
    имя им легион
    php -i | egrep 'limit|timeout|max'


    hard_timeout => 2 => 2
    log_errors_max_len => 1024 => 1024
    max_execution_time => 0 => 0
    max_file_uploads => 20 => 20
    max_input_nesting_level => 64 => 64
    max_input_time => -1 => -1
    max_input_vars => 1000 => 1000
    memory_limit => -1 => -1
    post_max_size => 8M => 8M
    upload_max_filesize => 2M => 2M
    zend.exception_string_param_max_len => 0 => 0
    mbstring.regex_retry_limit => 1000000 => 1000000
    mbstring.regex_stack_limit => 100000 => 100000
    memcached.default_connect_timeout => 0 => 0
    memcached.sess_connect_timeout => 0 => 0
    memcached.sess_lock_max_wait => not set => not set
    memcached.sess_lock_wait_max => 150 => 150
    memcached.sess_server_failure_limit => 0 => 0
    mysqli.max_links => Unlimited => Unlimited
    mysqli.max_persistent => Unlimited => Unlimited
    Read timeout => 86400
    pcre.backtrack_limit => 1000000 => 1000000
    pcre.recursion_limit => 100000 => 100000
    pgsql.max_links => Unlimited => Unlimited
    pgsql.max_persistent => Unlimited => Unlimited
    session.cache_limiter => nocache => nocache
    session.gc_maxlifetime => 1440 => 1440
    default_socket_timeout => 60 => 60
    unserialize_max_depth => 4096 => 4096
    xdebug.connect_timeout_ms => 200 => 200
    xdebug.max_nesting_level => 256 => 256
    xdebug.max_stack_frames => -1 => -1
    xdebug.remote_timeout => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
    xdebug.var_display_max_children => 128 => 128
    xdebug.var_display_max_data => 512 => 512
    xdebug.var_display_max_depth => 3 => 3
    opcache.force_restart_timeout => 180 => 180
    opcache.jit_bisect_limit => 0 => 0
    opcache.jit_max_exit_counters => 8192 => 8192
    opcache.jit_max_loop_unrolls => 8 => 8
    opcache.jit_max_polymorphic_calls => 2 => 2
    opcache.jit_max_recursive_calls => 2 => 2
    opcache.jit_max_recursive_returns => 2 => 2
    opcache.jit_max_root_traces => 1024 => 1024
    opcache.jit_max_side_traces => 128 => 128
    opcache.max_accelerated_files => 10000 => 10000
    opcache.max_file_size => 0 => 0
    opcache.max_wasted_percentage => 5 => 5


    Вы явно пытаетесь что то не то.
    Ответ написан
    Комментировать
  • Как улучшить код, который проверяет наличие элемента в массиве и его значение?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Тут вопрос не столько в сокращении сколько в осмысленности.

    И ответ зависит от двух вводных, которые мы не знаем:
    1. по какой причине элемент 'test' может отсутствовать
    2. какие ещё значения могут быть у $arr['test']

    Если совсем всё равно на всё и пишем говнокод-стайл лишь бы покороче, то, как правильно написано в соседнем ответе - empty().

    Если элемент обязательно должен присутствовать, то либо убираем проверку на isset совсем, либо - если это интерактивное приложение - выносим отдельно, и при отсутствии элемента сообщаем об ошибке. Пусть даже и тупо 400 кодом.

    Если у $arr['test'] не могут быть другие значения, кроме true, то тоже проверить, и выбросить ошибку, если значение какое-то другое.
    Ответ написан
    Комментировать
  • Существуют ли среды разработки десктопных преложений на основе веб-технологий?

    DevMan
    @DevMan
    да полно их. чуть ли не в каждом популярном языке.

    только размер не порадует. да и производительность обычно тож.
    Ответ написан
    Комментировать
  • Как правильно защитить форму от спама?

    DanArst
    @DanArst Куратор тега HTML
    Гриффиндор в моде при любой погоде!
    Hidden-инпуты для защиты от спама - это фигня. Больше половины ботов раскусят.
    Я на многих сайтах ставлю довольно простую защиту, которая отлично работает.
    Добавь в форму какой-нибудь текстовый инпут и скрой его стилями, но НЕ ЮЗАЙ display: none;, visibility:hidden;, opacity:0;, так как многие боты и это раскусят.

    Например input с name="copyemail":
    <form action="">
    	<input type="text" name="copyemail" placeholder="Email для копии">
    	<input type="text" name="name" placeholder="Имя">
    	<input type="email" name="email">
    	<button type="submit">Отправить</button>
    </form>

    и стили для него:
    input[name="copyemail"] {
        display: block;
        width: 2px;
        height: 2px;
        margin-bottom: -2px;
        border: none;
        padding: 0;
        opacity: 0.01;
    }


    И дальше уже на сервере проверяешь:
    if ($_POST['copyemail']) {    
        //Это спам! Делаем вид, что сообщение отправлено.
        die('Ваше сообщение отправлено');
    } else {
         //Все норм. Метро Люблино, работаем
    }
    Ответ написан
    3 комментария
  • Работа утилиты javah?

    Sputterspark
    @Sputterspark
    Начиная с Java 8 функцию генерации заголовков переложили на javac. В Java 10 утилиту javah окончательно убрали.

    javac -h . Native.java
    Ответ написан
    Комментировать
  • Как правильно проверять возраст на php?

    iiiBird
    @iiiBird
    Пока ты спишь - твой конкурент совершенствуется
    <?php
    $birthDate = '20.02.2010';
    if (time() < strtotime('+18 years', strtotime($birthDate))) {
        echo 'меньше 18';
    } else {
        echo 'больше 18';
    }
    Ответ написан
    1 комментарий
  • Как вывести текст на страницу PHP не привязывая PHP скрипт к странице?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Налицо классическая проблема ХУ
    задавая очевидно дурацкий вопрос, надо всегда подробно описывать ситуацию, в которой он возник.
    если причины осмысленные, то решение всегда найдется
    если же нет, то тогда вам помогут переформулировать проблему

    если же пытаться настаивать на своей формулировке без объяснений, то может сучиться конфуз.
    Ответ написан
    Комментировать
  • Как правильно строить крупный проект?

    @vism
    Называется, услышал звон, да не знаю где он.

    1. Сервисный слой ты превратил в контроллер.
    Т.е. у тебя есть контроллер, а ты создал ещё один, т.к. где-то слышал, что нужны сервисы.
    Но, сервисы не шлют ответы, это внутренний слой для отделения логики.
    Ты можешь те методы вызвать через консоль, другие сервисы и т.п.
    Там должен просто генерироваться return, а сам response уже в контроллере (чтоб контроллер своб функцию выполнял). Валидацию реквеста кстати тоже надо делать не в сервесе.

    2. CategoryQuery - это вобще дичь дикая.
    Ты опять создаёшь дубликат, потому что услышал о репозиториях, и даже интерфейс. Вот я угараю с людей, кто везде пихает интерфейсы. Интерфейсы нужны там, где они нужны. Где будет 2+ наследователей интерфейса.
    Откуда у тебя тут наследники, если ты завязан на элокуент?
    А ноги от индусов репозитаристов. Не нужен репозитарий, Query и интерфейсы при работе в элокуент. Он сам в себе это всё уже содержит и все повторяющиеся вещи обёрнуты уже. find, first, firstOrNew и т.д.
    Так что используй элокуент и не переусложняй проект напрасно. Не надо делать сложно, делай просто.

    3. CategoryAction.
    Опять интерфейс...
    Вот это Экшн по сути у тебя сервис. Тут ты имеено перенёс бизнес логику создания и редактирования и возвращаешь ответ данного метода. Вот удали свой CategoryAction и перенеси методы в сервис.
    Ответ написан
    30 комментариев
  • Зачем нужны методы отправки данных отличные от GET, POST?

    xPomaHx
    @xPomaHx
    1vs9
    Можно всё отправлять, даже любые кастомные методы тем самым нарушив спецификацию.
    spoiler
    [
        'OPTIONS', 'post', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'TRACE', 'CONNECT', 'hui'
    ].forEach(method => {
        try {
            const req = new XMLHttpRequest()
            req.onload = console.dir
            req.open(method, '/')
            req.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
    
            req.send(JSON.stringify({
                method
            }))
        } catch (er) {
            console.error('disallow', method)
        }
    })
    Ответ написан
    Комментировать
  • Как передать содержимое в переменную PHP?

    @easycode
    не боюсь задавать глупые вопросы ))
    ну типа:
    <div id="list"></div>
    
    <script type="text/javascript">
      jQuery(document).ready(function($) {
        jQuery.post('index.php', 'list': jQuery('#list').html(), function(data, textStatus, xhr) {
          /*optional stuff to do after success */
        });
      });
    </script>


    на стороне сервера:
    <?php
    #index.php
    echo $_POST['list']; // содержимое div-а с id = list
    Ответ написан
    Комментировать
  • Что должен уметь Junior C# Web разработчик?

    1. Уметь работать с asp net core.
    Написание нового контроллера не должно вызывать никаких сложностей.
    Должен знать про middleware и разные фильтры. Знать, какими сущностями в разные моменты времени обрабатывается запрос
    2. Знать как устроен HTTP хотябы на поверхностом уровне.
    Знать что в http-запросе есть заголовки и тело.
    3. Уметь работать с dotnet cli, если понадобится. Уметь вызывать dotnet build, dotnet watch, dotnet run, и dotnet publish
    4. Уметь искать нужные библиотеки в гугле и в нугете.
    5. Уметь работать с git хотябы на базовом уровне: git init, git branch, git add, git commit, git merge.
    Можно через GUI. Можно через встроенный плагин в IDE
    6. Уметь работать с какой-нибудь одной IDE на базовом уровне: с VS или с Rider.
    На базовом уровне - это значит, что ты можешь мышкой создать проект, добавить в него новые файлы, и запустить проект.
    7. Хотябы поверхностно знать про фронтенд. Чтобы мог загуглить и решить несложную задачу.
    8. Уметь работать с debugger-ом. Ставить точки останова, делать шаг вперёд, с заходом, с обходом.
    9. Уметь работать с какой-нибудь реляционной БД. Знать основы про всякие нормальные формы, уметь писать сырой sql запрос.
    10. Ну и кнонечно C#, ООП, всякие паттерны.
    Ответ написан
    7 комментариев
  • Как можно ускорить работу Exception?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    "Если вас беспокоит скорость работы исключений, вы что-то делаете неправильно"

    Ускорить нельзя.
    В данном случае все проблемы не из-за исключений, а из-за говнокода.

    Ошибка валидации при валидации - это не исключительная ситуация, а совершенно нормальная. Часть бизнес-логики. То есть в процессе валидации всего массива данных исключения кидаться не должны.
    Если исключения используются для управления ходом выполнения программы - это УЖЕ ошибка.

    По результатам валидации исключение может кидаться ОДНО. В самом конце. По результатам валидации всего набора данных. Или не кидаться - зависит от конкретной бизнес-логики. Но если и кидать, то только одно, по результатам.
    Это будет правильное использование исключений, которое вообще никак не скажется на скорости работы кода.
    Ответ написан
  • Как найти грамотного управляющего над командой програмистов в офис?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Это две разные профессии, и к картинным представителям обеих из них программисты относятся без восторга.

    Первый называется HR. Это такое сочетание секретаря и психолога, которое умеет отобрать людей, внешне похожих на программистов, которые в состоянии за 40 минут изначального собеседования вести себя адекватно и не грызут мебель (не приносят на собеседование оружие, не ругаются, что индустрию заполонили школьники и им надо проткнуть глаз отверткой и так далее).

    Второй называется менеджер.

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

    Работа программиста - это творческий процесс. Чем ближе он приближается к рутине от забора и до обеда, тем выше вероятность, что кто-то автоматизирует эту задачу и дальше вы перестанете быть ему конкурентом, потому что фреймворк работает 24/7 и бесплатно, а программистам для этого (по вашему мнению), нужен менеджер.

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

    Итого, походите на семинары по Agile, Scrum и другим современным практикам работы в командах, почитайте про Human Risks & Limitations, поработайте с психотерапевтом, чтобы убрать изначальное недоверие к людям и желание приставить к каждому работнику контролера с палкой, и наймите девочку-HR, чтобы работала с HH.RU и агентствами.
    Ответ написан
    3 комментария
  • Работа с деньгами в php, лишние копейка в ту или иную сторону при округлении?

    Adamos
    @Adamos
    Я вам страшное скажу: в операциях с деньгами не всегда важна математическая точность.
    Но очень важно, чтобы результат был в точности такой, как в бухгалтерии.
    А там далеко не всегда царит формальная математика, особенно когда числа, которые потом сводятся к одному результату, по-разному налогооблагаются.
    Задача программиста здесь - не в том, чтобы компьютер считал правильно, а чтобы результат сошелся до копейки с 1С-кой, например.
    Ответ написан
    Комментировать