Задать вопрос
  • Должен ли бэкенд разработчик разрабатывать админку?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Никто никому ничего не должен за исключением того, что прописано в законах и договорах.
    Ответ написан
    Комментировать
  • Должен ли бэкенд разработчик разрабатывать админку?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    sarcasm_on
    Да, в статье 99 Трудового кодекса так и написано
    2)... бэк енд должен самостоятельно сделать админку при разработке бэк енд
    8)... бэк енд разработчик должен сам понять и не утруждая заказчика сделать админку
    sarcasm_off

    Автор, проснись! Что за глупые вопросы? Какой «должен»? Как договоришься, так и будет. Конечно, заказчик хочет навалить на исполнителя побольше за те же деньги.
    Ответ написан
    Комментировать
  • Какой user agent у LetsEncrypt?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)


    Если честно, не вижу особого смысла ограничивать доступ к каталогу .well-known...
    Ответ написан
    Комментировать
  • Какое семейство микроконтроллеров не будет иметь проблемы с поставками на ближайший год?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    Предлагаю обратиться экстрасенсам )
    На более популярные - будет повышенный спрос - соотвественно производители не будут справляться с производством - соответственно могут быть проблемы с поставками.
    Менее популярные - быстрее всего объем выпусков прикрутят, - тоже проблемы с поставками....
    Заказчики в связи с кризисом - также могут переключаться на неожиданные комбинации, чем провоцировать спрос.
    Где установится рыночный баланс - кто его знает.
    Те кто легко это может спрогнозировать - давно стали миллионерами.
    Ответ написан
    3 комментария
  • Какой роутер выбрать для дома?

    @antonwx
    Вам бы для начала продиагностировать проблему, прежде чем пытаться её решить. Временно подключите кабелем телевизор и посмотрите, уйдёт ли проблема. Если да, просканируйтe wi-fi пространство inssider-ом и попробуйте сменить канал на менее загруженный. Попробуйте временно роутер перенести к телевизору и посмотреть уйдёт ли проблема. Возможно проблема и не в роутере вовсе, а в сетевой карте телевизора, или в прошивке или же вообще в стриминговом сервисе.
    Ответ написан
    1 комментарий
  • Везде ли нужно проверять на существование элемента в массиве?

    @Vitsliputsli
    Вы описываете 2 стандартных подхода:
    1) падаем в ошибку при любой непонятной ситуации;
    2) при непонятной ситуации пробуем продолжить работу, если это возможно.
    1 подход применяется в тех местах которые работают критически важными бизнесово данными. 2 подход для маловажных вещей, которые не способны исказить вещи из предыдущего предложения.
    Т.е. в большинстве случаев нужно падать в ошибку, и только если знаете, что ошибка не несет никакого серьезного аффекта (к примеру выводить текст на экран жирным шрифтом или нет), то можно продолжать работу.
    Ответ написан
    Комментировать
  • Хайп вокруг ЯП Rust и C?

    bingo347
    @bingo347
    Crazy on performance...
    Насколько критичной проблемой для программиста является ручное управление памятью, которое называют недостатком языка Си?
    Неосвобожденная память (утечка памяти) - это самое безобидное, что может произойти.
    - Сделать free дважды - это UB
    - Забыли проверить результат malloc/calloc/realloc на не NULL, разыменовали - UB
    - Почитали память, в которую ни разу не писали - UB
    - Разыменовали указатель после free - UB
    - Гонка данных - UB
    - ...и еще дофига всего, от чего в лучшем случае программа просто будет работать неправильно, например спалит Ваш пароль, или переведет Ваши деньги на другой счет 10 раз.

    Новый язык программирования Раст, как заявляют, лишен этого недостатка

    Система типов Rust гарантирует лишь одно - в safe коде не будет UB. Утечка памяти, кстати, не является UB, поэтому память вполне себе можно утечь в safe коде, помимо циклических счетчиков ссылок std дает немало возможностей сделать это напрямую:
    https://doc.rust-lang.org/beta/std/mem/fn.forget.html
    https://doc.rust-lang.org/beta/std/mem/struct.Manu...
    https://doc.rust-lang.org/beta/std/boxed/struct.Bo...
    https://doc.rust-lang.org/beta/std/vec/struct.Vec....

    но разве число ошибок в программе зависит именно от наличия или отсутствия ручного управления памятью
    В Rust ручное управление памятью, как и в C и в C++, просто есть культура, что если некая структура аллоцировала память, то она ее освободит. Всякие Vec, Box и т.д. делают это в Drop. В C++ многие повседневные типы так же освобождают в деструкторе память, которую они выделили. Однако в Rust есть разделение на safe и unsafe код и для прикладного программирования safe возможностей более чем достаточно. В C++ же весь код unsafe.

    разве общее число ошибок не перераспределяется на другие недостатки программы
    Нет, не перераспределяется. Хорошая система типов действительно может избавить от многих ошибок, что в целом сделает ПО более надежным. Но надо понимать, что от всех ошибок не избавит ни что. Банальная дискоммуникация с заказчиком порождает огромное число багов.
    Но в Rust очень быстро привыкаешь к такому замечательному подходу в разработке, как Type Driven Development, который позволяет предупредить многие ошибки еще до написания кода. После Rust я стал применять этот подход и в других ЯП, и он работает очень хорошо, даже там, где типизация не такая строгая.

    являются ли ошибки с памятью ошибками программиста, а не компилятора и языка программирования
    Безусловно это ошибки программиста. Программисты, как правило, - это люди, а людям свойственно ошибаться. И хорошо, когда есть средства статического анализа, которые помогают предотвращать ошибки до выхода ПО в продакшн.

    P.S. Вот интересная статья про Rust к прочтению: https://steveklabnik.com/writing/a-sad-day-for-rust
    И к чему она привела: https://github.com/fafhrd91/actix-web-postmortem
    Ответ написан
    4 комментария
  • Хайп вокруг ЯП Rust и C?

    vabka
    @vabka Куратор тега Rust
    По порядку:
    Насколько критичной проблемой для программиста является ручное управление памятью, которое называют недостатком языка Си?

    С неправильным управлением памятью связано очень много ошибок. Например в хроме вроде около половины CVE с этим связано. Ещё можно вспомнить HeartBleed в OpenSSL, который тоже связан с неправильным управлением памятью.

    (Дальше какое-то ужасно длинное предложение, которое я разбил на части)
    Новый язык программирования Раст, как заявляют, лишен этого недостатка

    Да
    разве общее число ошибок не перераспределяется на другие недостатки

    1. Самые сложные в исправлении ошибки - кривое управление памятью и многопоточность, обе их Rust Решает
    2. Нет, ошибки не перераспределяются, это же не тараканы.
    являются ли ошибки с памятью ошибками программиста

    Если управление памятью ручное, то это ошибки, которые допустил разработчик.
    Если управление памятью автоматическое (хоть через GC, хоть через Borrow checker), то это ошибка компилятора/рантайма/языка.

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

    Не обязательно.

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

    rozhnev
    @rozhnev Куратор тега MySQL
    Fullstack programmer, DBA, медленно, дорого
    В MySQL, начиная с версии 8.0, вы можете использовать оконную функцию row_number():
    select 
    	class,
    	price
    from (
      select 
    	  class,
    	  price,
    	  row_number() over (partition by class order by price) rn
      from complex
    ) prices
    where 
    	(class=1 and rn < 3) -- 2 econom
    	or (class=2 and rn < 4) -- 3 comfort
    	or (class=3 and rn < 2) -- 1 premium
    ;


    Mysql online
    Ответ написан
    1 комментарий
  • Не могу понять, в чём ошибка?

    dyuriev
    @dyuriev
    A posteriori
    Каждый день одно и тоже
    1. Открываем официальную документацию: header();
    2. Офигиваем, что она доступна на русском
    3. Читаем:
      Помните, что функцию header() можно вызывать только если клиенту ещё не передавались данные. То есть она должна идти первой в выводе, перед её вызовом не должно быть никаких HTML-тегов, пустых строк и т.п. Довольно часто возникает ошибка, когда при чтении кода файловыми функциями, вроде include или require, в этом коде попадаются пробелы или пустые строки, которые выводятся до вызова header(). Те же проблемы могут возникать и при использовании PHP/HTML в одном файле.
    4. Ищем, какой вывод попал перед отправкой заголовков


    А так же, в конце то концов, внимательно читаем ошибку:
    Cannot modify header information - headers already sent by
    Вольный перевод:
    Невозможно изменить заголовки, так как они уже отправлены


    Читаем ошибку дальше:
    output started at /var/www/u1316098/data/www/battle-mine.ru/donate/buy.php:1
    Ох ниче себе, да?
    передача данных началась в первой строке /var/www/u1316098/data/www/battle-mine.ru/donate/buy.php
    Ответ написан
  • Как закодировать ответ в base64?

    Вам нужно переписать код так:
    $data = [
        'Hi' => 1,
        'D' => [
            'type' => 'xz',
            'anything' => $any2
        ],
        'Any' => [
            [
                'type' => 'xz',
                'anything' => $any2
            ]
        ],
        'Anything' => [],
        'Minus' => [
            'Content',
            'Content'
        ],
        'Block' => [
            'dog' => "Hello-$hello2",
            'cat' => '',
            'parrot' => ''
        ]
    ];
    
    if ($content != $content2) {
        $data['Anything'][] = [
            'block1' => $block2
        ];
    }
    
    $response = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
    // $response = base64_encode($response);
    
    echo $response;


    Тогда его можно будет закодировать в Base64
    Ответ написан
    Комментировать
  • Как убирать disabled после ввода 18 символов в input через IMask?

    0xD34F
    @0xD34F Куратор тега JavaScript
    phoneDisabled.addEventListener('input', function() {
      buttonDisabled.disabled = phoneMask.unmaskedValue.length !== 11;
    });
    Ответ написан
    Комментировать
  • Какие еще преимущества у юнит-тестов, кроме того, что они отлично обеспечивают регрессионное тестирование?

    @jazzus
    500 ошибки это слишком просто, они в логах. Гораздо сложнее и грустнее обнаружить логическую ошибку, которая висела месяцами и никто не знал. Плюс, если ты уже код научился писать и юзаешь IDE, то все 500 ошибки будут в дев режиме. Тесты нужны, в первую очередь, для фиксации функционала и тз. Я пишу только http тесты и до разработки. Чтобы руками формы по 100 раз не забивать. А то я тут одно видео видел, где ларавельщик регистрацию проверял и с каждым изменением форму заново заполнял и отправлял. По мне так низкокачественная, скучная и неэффективная разработка. С тестами все проверки автоматом, просто разрабатываешь до зелени. И потом уверенно заливаешь на продакшн и знаешь, что все работает, как задумано, а не как получилось.
    Ответ написан
    6 комментариев
  • Какие еще преимущества у юнит-тестов, кроме того, что они отлично обеспечивают регрессионное тестирование?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    тесты должны проверять что

    а) прилжение работает так как нужно с правильными данными
    и
    б) приложение не работает как не нужно с неправильными данными, или не работает вообще

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

    отлично обеспечивают регрессионное тестирование?

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

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

    нет. Если имеется нормальный фреймворк для тестирования, то написать всю тестовую документацию и протестировать руками будет дольше, чем написать e2e тесты.

    ИМХО, юнит-тестами, да и UI-тестами, надо покрывать далеко не всё.

    Да
    Ответ написан
    3 комментария
  • Какие еще преимущества у юнит-тестов, кроме того, что они отлично обеспечивают регрессионное тестирование?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Представьте себе, что есть большой проект, десятки или сотни компонентов. Несколько десятков разработчиков. При всем желании, в проекте 10% текучка означает, что часто приходит человек и ковыряет компонент, про который уже мало кто помнит. А надо быстро. А в компоненте объекты с десятком методов.

    Что-то поковырял, что-то изменил, но как все в целом работает - ты понятия не имеешь.
    А тут бах - и хорошие юнит тесты. Уже по ним можно понять что работает, а можно и не понимать а просто запустить и делать следующую задачу.
    Ответ написан
    8 комментариев
  • Переменная rèturn и прочие зарезервированные слова, норм?

    BorLaze
    @BorLaze
    Java developer
    Как-то слабо...

    Предлагаю для Возвратов использовать Import/import с кириллической "о", а для входящих товаров - Return/return с такой же "е".
    Ответ написан
    5 комментариев
  • Может ли быть такое имя домена или под домена или почты?

    1. support@питер.рус будет работать практически везде (но где-то может показываться punycode-адрес домена) при условии что при отправке домен корректно кодируется в punycode, могут быть проблемы с написанием на этот адрес у пользователей старых почтовых программ. поддержка@питер.рус будет работать только если все почтовые серверы и клиенты между отправителем и получателям поддерживают RFC6531/RFC6532, на практике такие адреса не используются и их не будут использовать в обозримом будущем, т.к. мгновенный переход всего интернета на UTF-8 невозможен, а что делать если респондент не поддерживает UTF-8 не понятно (аналога punycode для local-part нет). А вот использовать для почты домен питер.com я бы не рекомендовал, т.к. в таком домене используется mixed script и он не проходит по требованиям безопасности Unicode (aka TR39).
    2. По RFC 952/1035 имя хоста начинается с буквы и заканчивается буквой или цифрой, внутри могут быть цифры, буквы и -. RFC 1123 дополнительно разрешает начинать имя с цифры. Но технически протокол DNS поддерживает любые символы, даже 8-битные и в браузерах могут открываться даже не соответствующие стандарту имена. Но, разумеется, правильней ориентироваться на стандарт.
    3,4,5,6. С local-part все интересно, ситуация обратная. По стандарту там может быть практически все что угодно, но внутри строки в двойных кавычках (quoted-string). По факту адреса c quoted-string не используются и обычно не принимаются. Без quoted string так же очень много чего разрешено, могут быть любые цифры, буквы, символы "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "/" / "=" / "?" / "^" / "_" / "`" / "{" / "|" / "}" / "~" в любой последовательности так же разрешен символ "." Поэтому все ваши адреса допустимы. НО нельзя начинать и заканчивать local-part точкой и использовать две точки подряд (это в некотором роде баг стандарта RFC 2821/2822 и более поздних связанный с формализованной записью, который достаточно поздно заметили, стандарт RFC 821/822 разрешал две точки подряд). На практике использовать любые "странные" адреса относительно которых есть сомнения я бы не рекомендовал, т.к. не все, что разрешено стандартом по факту всеми принимается.
    Ответ написан
    Комментировать
  • Как вставить созданный элемент в строку?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Строка с HTML — это просто строка текста. Без слушателей событий и свойств DOM элементов.

    Вариант: держать в строке плейсхолдер, скажем пустой div с определённым id или классом, и после вставки HTML в документ, заменять тот пустой див на супер-пупер элемент-с-событиями:
    const datePicker = document.createElement("div");
    datePicker.className = 'datePickerInline';
    // тут накладываем на элемент всякие события
    
    const str = '<div><span>Вставляем</span><div> <div class="replace_me"></div> </div><div><p>в уже готовые html элементы в виде строки</p></div></div>';
    
    let el = document.getElementById('element');
    el.innerHTML = str;
    
    el.querySelector('div.replace_me').replaceWith(datePicker);


    План-Б: не вешать слушателей событий прямо на элементы datePicker'а, а слушать его события выше, на общем родителе: скажем, на том el, в который всё это вставляется.
    Ответ написан
    Комментировать
  • Почему не изобрели цифровые источники звука?

    maaGames
    @maaGames
    Погроммирую программы
    Ошибка в суждениях. Дисплеи по прежнему "аналоговые" в смысле передачи света до глаза, а цифровой только интерфейс между ПК и дисплеем. Можно сделать цифровую передачу звука от ПК до колонок, но тогда ЦАП должен быть внутри колонки, а не внутри ПК(звуковой карты).
    Ответ написан
    Комментировать