• Как реализовать страницу для тестирования учеников?

    @cicatrix
    было бы большой ошибкой думать
    Уж больно богатая тема для фантазий.
    А что именно вызывает затруднения? Вроде бы проектирование вполне прямолинейное -
    таблица вопросов, таблица ответов, таблица вариантов теста. Назначение варианта студенту, из ЛК запрос на тест с вопросами, обратный запрос пересылает ответы. На стороне сервера сверяется правильно/неправильно.
    Ответ написан
    1 комментарий
  • Почему при использовании manifest_version 3, получаю ошибку?

    FFxSquall
    @FFxSquall
    Могу писать код, могу не писать
    в MV3 больше недоступен XMLHttpRequest в воркерах ( вот ишью на правку в документации https://github.com/GoogleChrome/developer.chrome.c...). Используйте Fetch
    Ответ написан
    2 комментария
  • Как часто нужна модель MVC?

    Stalker_RED
    @Stalker_RED
    Да, это полезно - написать свой фреймворк и/или CMS.
    Потом полезно сравнить его с laravel или symfony, найти чем ваш фреймворк лучше.
    Если ничем не лучше - можете его смело забросить, и переходить на что-то общеизвестное, и вот почему:

    Представим, что у вас заказали лендинг по заказу насосов, например, и вы сделали его на своем фреймворке. Через 5 лет вы сменили род деятельности, и водите экскурсии по Тасмании. Или вас укусил радиоактивный паук, и теперь вы спасаете мир, а поддержкой сайтов не занимаетесь.

    Сервис с насосами за это время вырос, они теперь еще и бурят скважины, и фильтры устанавливают и колодцы копают, и у них филиалы в 20 городах. Им нужно доработать сайт. И при поиске разработчика выясняется, что сайт ваш доработать невозможно, т.к. документации по фреймворку нет, готовых модулей совместимых нет, интеграций с 1C, google docs, microsoft sharepoint нет, и никогда не будет. И проще переписать с нуля, чем разбираться как оно у вас там устроено.

    А если бы сайт был на общеизвестном фреймворке, то гораздо проще найти и специалистов и найти готовые интеграции.

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

    @dimoff66
    Кратко о себе: Я есть
    1) Устанавливаете в chrome расширение
    https://chrome.google.com/webstore/detail/user-jav...
    Оно позволяет писать скрипты для страницы

    2) Пишете для vk.com примерно такой скрипт
    const blocked = `
    Иван Говнов
    Еще ненавистный юзер
    И еще один нехороший человек
    `
    const filter = new Set(blocked.split('\n').filter(Boolean))
    
    setInterval(() => {
      const authSpan = [...document.querySelectorAll('.author')]
        .filter(v => filter.has(v.textContent))
      authSpan.forEach(el => 
        el.parentElement.parentElement.parentElement.style.display = 'none')
      }, 3000)


    И все, с частотой в 3 секунды скрипт будет мониторить комментарии на открытой странице и скрывать сообщения ненавистных персонажей.
    Ответ написан
    5 комментариев
  • Какое реальное количество одновременных соединений на домен разрешено?

    Zettabyte
    @Zettabyte
    Проф. восстановление данных ▪ Вопрос? См. профиль
    какое реальное количество соединений разрешено браузерами?

    В браузерах на базе Firefox (Waterfox, Palemoon, и т.д.) различные количества соединений регулируются через about:config.

    Наберите в новой вкладке, нажмите Enter и введите network.http. Насколько я помню, все или, как минимум, большинство настроек будут иметь названия начинающиеся таким образом.

    Часть из них описана вот тут: kb.mozillazine.org/Category:Tweaking_preferences
    Там же указаны дефолтные значения - если какой-то из параметров не виден в about:config, это означает, что он использует дефолтное значение, и для его изменения параметр нужно сначала создать.
    Ответ написан
    1 комментарий
  • SQL инъекция в UPDATE возможна ли?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Инъекция может быть через любой запрос.
    И защищать тоже надо любые запросы.
    Никогда не надо торговаться, "а можно я не буду защищать именно этот запрос? Ну мааааам!"
    Надо просто всегда следовать простым правилам - любая переменная попадает в запрос только через плейсхолдер

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

    Уязвимость — это сама возможность с помощью переданных в запрос данных изменить его код.
    Даже если ты не знаешь ни одного способа ей воспользоваться, уязвимость от этого никуда не девается.
    Даже если та возможность, про которую ты знаешь, в данном случае не прокатит - остаются ещё тысячи других.
    Если есть уязвимость, то способы ей воспользоваться всегда найдутся.

    То есть сама уязвимость никак не зависит ни от каких второстепенных факторов - типа запроса, передаваемых данных, способов их валидации, твоих знаний SQL. Это сам факт. Можно подставить свой код в запрос? Значит он уязвим. А как конкретно можно нагадить - это отдельная тема.

    Кроме того, любая уязвимость - это всегда ошибки. Если в $id будет пусто, то запрос вызовет ошибку. Если в $id будет слово select то запрос вызовет ошибку. Если будет слово "привет", то запрос вызовет ошибку. Оно тебе надо?

    При этом разных вариантов возможных ошибок и способов воспользоваться уязвимостью - тысячи, им посвящены целые учебники и статьи. Но для того чтобы защищаться, не надо знать ни одного. Потому что защищаться надо не от отдельных способов эксплуатации, а закрывать саму уязвимость. И сделать это очень просто:
    1. Любые данные должны добавляться в запрос только через плейсхолдеры
    2. Любые другие элементы запроса должны выбираться из белого списка - заранее прописанных в нашем коде значений.


    Если вопрос "а можно я не буду защищаться?" вызван ленью, то это тоже решаемо. В принципе, лень - это очень важное качество для программиста. Главное - направить её в нужное русло.

    Если каждый раз писать по три строчки долго
    $sql = "INSERT INTO users SET email = ?, password = ?"; // заменяем на знаки вопроса
    $stmt = $db->prepare($sql); // подготавливаем запрос, получаем stmt
    $stmt->bind_param("ss", $email, $hash); // два знака вопроса - две переменных - две буквы s
    $stmt->execute(); // выполняем запрос

    То надо воспользоваться такой вещью, как программирование. И написать функцию, которая возьмет на себя всю рутинную работу.
    function prepared_query($mysqli, $sql, $params, $types = "")
    {
        $types = $types ?: str_repeat("s", count($params));
        $stmt = $mysqli->prepare($sql);
        $stmt->bind_param($types, ...$params);
        $stmt->execute();
        return $stmt;
    }

    и в итоге предыдущие 4 строчки превратятся в одну:
    prepared_query($db, "INSERT INTO users SET email = ?, password = ?", [$email, $hash]);

    или твой запрос:
    prepared_query($db, "UPDATE table SET test WHERE id = ?", [$id]);

    - просто, быстро, удобно и безопасно
    Ответ написан
    26 комментариев
  • Как исправить ошибку discord.py?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, фигачить cursor.execute() прямо в f-строку - это очень, очень плохая идея. За такое бьют по пальцам.
    Во-вторых, not subscriptable означает, что ты пытаешься обратиться по индексу (типа x[0]) в то время как объект (x) - это None.
    90% шанс что это вызов .fetchone()[0] - запрос к базе не находит нужную строку, тогда fetchone() возвращает None, а дальше попытка получить индекс от None генерирует исключение.

    Никогда, НИКОГДА не пиши в f-строках выражение сложнее чем 2*2. Вынеси промежуточный результат в переменную, проверь её значение на корректность, затем уже используй.
    Ответ написан
    Комментировать
  • Как понять достоин ли ты более лучшей зар.платы или ещё не дорос и не надо высовываться даже?

    opium
    @opium
    Просто люблю качественно работать
    Чувак о каком достоин может быть речь если тебе не хватает грубо говоря на Доширак чтобы не умереть с голоду?
    Тебе повышения зп процентов на 50 чтобы не умереть вот и все, о каком достоинстве может идти речь?
    Или может ты их какого то знатного рода, тогда зачем ты работаешь за еду.
    Я понимаю когда там программист получает 200к и задаётся вопросом может я достоин получать 600к

    В таком случае речь идёт о выживании, либо поднять зп на текущем месте либо устроиться на новую работу и тут думать даже не о чем
    Ответ написан
    21 комментарий
  • Как в python pygame сделать "world tank" 3D?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Вас не смущает, что
    Pygame – это библиотека модулей для языка Python, созданная для разработки 2D игр.
    Ответ написан
    5 комментариев
  • Какой язык программирования используется для написания портативных OS и UI?

    GavriKos
    @GavriKos
    Вот только на скринах не ОС, да и не нужна она на таком девайсе.
    А язык - в целом любой, поддерживаемый целевой платформой. Но т.к. там обычно микроконтроллер - то вполне вероятно с/с++ используются.
    А если уж реально нужна ОС и мощностей хватит - то либо какой нить из линуксов, либо вообще android.
    Свои ОС под девайсы пишутся крааайне редко
    Ответ написан
    Комментировать
  • Можно ли сказать, что языки высокой уровни абстракции инкапсулируют код низкоуровневых языков?

    vabka
    @vabka
    Токсичный шарпист
    Нет. Высокоуровневые языки просто уходят от низкоуровневых конструкций.
    Например есть низкоуровневый машинный код, ниже которого только электрические сигналы.
    Есть ассемблер, который абстрагируется от машинного кода и уже работает на уровне инструкций и регистров
    Есть си, который уже работает с переменными, указателями и структурами
    Есть C++ в котором уже есть объекты, наследование и прочее ООП.
    А есть python, который просто интерпретируемый.
    И имеет динамическую типизацию и сборщик мусора.

    Ну и высокоуровневый язык != медленный.
    Как пример - Rust, в котором есть очень высокоуровневые абстракции, но при этом он не уступает Си ни в скорости, ни в потреблении памяти.

    При этом высокоуровневый язык не всегда строится поверх низкоуровневого - очень часто пишется компилятор/интерпретатор который сразу приводит его к машинному коду. Сишные библиотеки тоже в результате выдают машинный код.
    Ответ написан
    Комментировать
  • Как понять работу while в цикле for?

    vabka
    @vabka
    Токсичный шарпист
    1. Циклом for итерируемся по числам 0, 1, 2 ... 9
    2. Внутри цикла в начале result = 1, а e = i
    3. Перед каждой итерацией цикла while происходит сравнение с нулём
    4. Внутри итерации мы умножаем result на 2
    5. В конце итерации мы убавляем e
    Тк тут нам важно только то, что умножение result на 2 будет повторяться i раз,
    цикл while тут можно переписать так:
    class help {
      public static void main (String args[]) {    
        for (var i=0;i < 10; i++) {
          var result = 1;
          for(var j = 0; j < i; j++)
            result *= 2;
          System.out.println("2 в степени " + i + " равно " + result);  
        }
      }
    }
    Ответ написан
    1 комментарий
  • Выбивает ошибку в классах Java, что изменить или почитать на будущее?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Прочитайте любую книгу по Java.
    Можете начать с Г. Шилдт - Руководство по Java для начинающих.
    А насчет ошибки:
    у вас в одном java файле (Main.java) содержится 2 public класса
    public class Main{} 
    public class BANKACCOUT{}

    Также обратите внимание на Java naming convention. Вместо названия класса BANKACCOUT должно быть BankAccount
    Ответ написан
    Комментировать
  • Как реализовать авторизацию при запуске программы?

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

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

    Процесс авторизации можно воспринимать как выдачу ключа активации (например при покупке своей копии программы).

    Нужно понимать что эту проверку можно обойти, убрав этот запрос из кода в принципе. Более надежным является перенос части или всего функционала приложения на серверную сторону, в этом случаее взломать так просто не получится но и работа может быть не такой комфортной из-за лагов, да и нагрузка на сервер станет выше.
    Ответ написан
    4 комментария
  • С помощью чего открыть .jar плагин minecraft чтобы изменить его?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Если вкратце, то изучите реверс индженеринг.
    Jar это по факту тот же zip. Но внутри архива лежат class файлы (байткод). Соответственно, вам нужно декомпилировать их в исходники или можете поискать исходники (source code) на гитхаб, битбакет и т.д. Вдруг, это опенсорсный проект.
    Можете начать с этого аналогичного вопроса:
    https://stackoverflow.com/questions/647116/how-to-...
    А лучше начните изучение самого языка, а потом вопросов будет относительно меньше.
    Ответ написан
    2 комментария
  • Хостинг следит за действиями в ЛК. Нормально ли это?

    Sanes
    @Sanes
    Не обязательно это должно способствовать продажам. Для проектировщика интерфейса например полезно.
    Ответ написан
    Комментировать
  • Хостинг следит за действиями в ЛК. Нормально ли это?

    DevMan
    @DevMan
    у вас глобальное непонимание и корявенький пример.
    вы покупаете ресурсы. вот если в эти ресурсы навтыкают свои трекеры - будет повод для возмущения.
    а ЛК хостера - его собственность.

    на вашем же примере: вы арендовали офис в крупном офис-центре и удивляетесь, что вас видно на парковке и в холле.
    Ответ написан
    Комментировать