Задать вопрос
  • Куда и о чём писать заявление, если в логах веб сервера видишь, что кто-то ищет уязвимость?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Абсолютно всё, что торчит в сеть, непрерывно брутфорсится, каждый сервер, каждый маршрутизатор. Если вас ломал не школьник, то IP в логах выведет вас или на публичный анонимный прокси или на ничего не подозревающую жертву ботнета, то есть в никуда.
    Ответ написан
    1 комментарий
  • Оцените код html и css. Можно ли так делать?

    Ну вы, по-сути, в некоторых местах вместо дивов использовали зачем-то списки и сделали разметку не только невалидной, но и семантически неправильной.
    С этим кодом не смогут работать другие разработчики, да и вы потом замучаетесь что-то менять.
    Так делать не нужно, это кривая экономия на спичках.
    Ответ написан
    4 комментария
  • Можно ли добиться постоянного O(nlogn) для квиксорта в любом случае?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Да, можно. Для этого надо в качестве pivot'а выбрать медиану. если это сделать за O(n) в худшем случае, то общая сложность QuickSort'а будет O(n log n).

    Для выбора медианы за O(n) есть, например, вот такой алгоритм. В каких-то источниках его еще называли алгоритмом кнута-пратта-мориса-ривеста-тарьяна. Кажется, но я их найти не могу, так что я какие-то фамилии напутал, но помню, что там было 5 великих информатиков.

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

    @watchmakerful
    Если комп автоматически заходит в биос, это обычно значит, что он не опознал ни одного накопителя. В биосе жёсткий диск или ССД виден? Если да, правильно ли отображается?
    Ответ написан
    Комментировать
  • Используется ли двухканальный режим оперативной памяти внутри VirtualBox?

    @rPman
    Двух/четырех-канальный режим - это аппаратная фича, на уровне процессора и приложений нет различий, просто считай что шина данных в два/четыре раза шире и последовательные операции чтения/записи будут быстрее в два/четыре раза в идеальном случае.

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

    vpetrov
    @vpetrov
    частный SEO-специалист
    Робот стукается, не получает вовремя ответ, вы получаете ошибку.
    Ищите проблему на своём сервере, проверяйте TTFB и всё такое. Тут не "консоль" виновата, а тормозной хостинг.
    Ответ написан
    Комментировать
  • Почему ноутбук после незначительного намокания заходит в БИОС?

    @tukreb
    Проблема может быть в чём угодно, вплоть до повреждение ЦПУ. То что, он запускается в БИОС, не говорит о том, что ЦПУ (для запуска ЦПУ в биос не используются все транзисторы) или сам ноутбук рабочий.
    Срочно несите в СЦ и молитесь, чтобы там проблема оказалась в каком-нибудь транзисторе/резисторе.
    Ответ написан
    Комментировать
  • Как создать установщик?

    Vindicar
    @Vindicar
    RTFM!
    Стэковерфлоу не согласен. Можно создать ярлык в папке автозагрузки у пользователя.
    Если нужен выбор, создай компонент и привяжи задачу к нему.
    [Components]
    Name: "main"; Description: "Программа"; Types: full; Flags: fixed
    Name: "autorun"; Description: "Автозапуск"; Types: full
    
    [Icons] 
    Name: "{userstartup}\My Program"; Filename: "{app}\MyProg.exe"; Component: autorun

    Ну или для всех пользователей (если под админом). Аналогично, можно закинуть ключ в нужную ветку реестра.
    Просто нужно немножечко напрячься и погуглить.
    Ну или если пробовали и не вышло, то подробно это написать в вопросе.
    Ответ написан
    3 комментария
  • Почему антивирус ругается на exe Python?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Потому что все механизмы создания исполняемых файлов из скриптов похожи по поведению на вирусы.
    Ответ написан
  • Возможно ли парсить разные сайты одним скриптом?

    Steel_Balls
    @Steel_Balls
    с такой формулировкой вопроса всё возможно
    Ответ написан
    Комментировать
  • Могут ли на сайт попасть вирусы, если он располагается на несуществующем домене и доступ через файл hosts?

    @Everything_is_bad
    IP все равно же торчит наружу, так что боты без проблем могут сканировать сервер, уязвимости может быть не только у софта сайта, но и у самого сервера. Далее, что именно отдается http при запросе по ip, если какой-то сайт по умолчанию, то тогда будет просканированы его уязвимости. "Безопасность через неясность" конечно понижает риск взлома, но это только один из способов защиты.
    Ответ написан
    Комментировать
  • Может ли РКН блокировать конкретный URL?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    На Хабре - может. РКН пришлёт запрос и на статью повесят 451
    Ответ написан
    3 комментария
  • Нормально ли запускать пайтон скрипт по адресу http://localhost:8000?

    Aetae
    @Aetae
    Тлен
    То что на сервере на разных портах живёт множество программ и общаются меж собой - это нормально. Главное огородить их от внешнего доступа: обычно возможно указать на каком ip случшать порт, в таком случае достаточно указать локальный: 127.0.0.1:8000 вместо 0.0.0.0:8000 (слушать на всех) и извне никто на него попасть уже не сможет. Если же такой возможности нет, надо не забыть заблокировать этот порт файерволом.
    Ответ написан
    Комментировать
  • Как снимали в 4K в 2001 году?

    NeiroNx
    @NeiroNx
    Программист
    Пленка, такая штука есть для съемки качественного видео, вот на нее и снимали. У нее главная характеристика зернистость(насколько мелкие гранулы фоточувствительного вещества) - так вот эта зернистость дает разрешение больше чем 4К.
    Ответ написан
    Комментировать
  • Как снимали в 4K в 2001 году?

    xez
    @xez
    TL Junior Roo
    Никак.
    При этом ничего не мешает оцифровать аналоговое кино хоть в 100к.
    Ответ написан
    Комментировать
  • Как сделать эффект текста на кривой безье?

    @garbagecollected
    Математика трансформаций очень простая.

    Отрендерить текст на изображение можно используя
    https://opentype.js.org/

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

    Либо использовать эту же библиотеку для того, чтобы получить path data для каждой буквы.

    Если ваша трансформация сводится к аффинным преобразованиям, то можно рассчитывать координаты не каждой точки изображения буквы, а только точки, которые участвуют в path data. Таким образом трансформируя все точки path data вы получите такую же path data, используя которую вы начертаете шрифты в любом месте на любом изображении. Это может дать очень выгодный прирост к производительности (потенциально до 1000х раз). Кроме того, линии path data "рисуется" с правильным расчетом межпиксельного пространства, и вам не надо будет делать ресамплинг, как при работе с трансформированием изображений.

    Но рисовать шрифты по безье - это не всегда можно свести к аффинным преобразованиям.

    На верхней иллюстрации у вас используется искажение по оси X: skewX()

    Получить координаты каждой точки можно умножив матрицу с исходными точками на матрицу CTM.
    https://www.w3.org/TR/SVG11/coords.html#TransformM...

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

    По ссылке выше вы найдёте матрицы с формулами аффинных преобразований в двухмерном пространстве. Матрицы имеют вид (3х3) из которых 6 чисел значимые, 3 числа - статичные (всегда [0, 0, 1]).

    Для 3D-преобразований используются матрицы 4х4 из которых 12 чисел значимые, 4 числа - статичные (всегда [0, 0, 0, 1]):
    https://drafts.csswg.org/css-transforms-2/#mathema...

    Для расчета 3d-трансформаций с учетом перспективы используются матрицы 8х8.

    На нижней иллюстрации у вас используются трехмерные искажения.

    Про математику 3D искажении с перспективой можно прочитать тут
    https://www.cs.cmu.edu/~ph/texfund/texfund.pdf
    Там рассматриваются и формулы получения координат на плоскости и ресамплинг (чтобы, например, не было пикселизации шрифтов после трансформации).

    Для перемножений матриц можно использовать функцию

    const multiply = (a, b) => a.map((_, r) => b[0].map((_, c) => a[r].reduce((s,_,i) => s + a[r][i] * b[i][c], 0)));


    Рассчитать координаты безье можно функциями (соответственно, квадратичная и кубическая безьё):

    // [p0x, p0x] - are coordinates of origin point
    // [p1x, p1y] - are coordinates of single control point
    // [p2x, p2y] - are coordinates of destination point
    // T - is number of points that needs to draw the curve
    const quadratic = ([p0x,p0y], [p1x,p1y], [p2x,p2y], T = 60) => {
      const x = t => (1 - t)**2 * p0x + 2 * (1 - t) * t * p1x + t**2 * p2x;
      const y = t => (1 - t)**2 * p0y + 2 * (1 - t) * t * p1y + t**2 * p2y;
      return Array.from({ length: T+1 }).map((_, t) => [x(t / T), y(t / T)]);
    };
    
    // [p0x, p0x] - are coordinates of origin point
    // [p1x, p1y] - are coordinates of first control point
    // [p2x, p2y] - are coordinates of second control point
    // [p3x, p3y] - are coordinates of destination point
    // T - is number of points that needs to draw the curve
    const cubic = ([p0x, p0y], [p1x, p1y], [p2x, p2y], [p3x, p3y], T = 60) => {
      const y = t => (1 - t)**3 * p0y + 3 * (1 - t)**2 * t * p1y + 3 * (1 - t) * t**2 * p2y + t**3 * p3y;
      const x = t => (1 - t)**3 * p0x + 3 * (1 - t)**2 * t * p1x + 3 * (1 - t) * t**2 * p2x + t**3 * p3x;
      return Array.from({ length: T+1 }).map((_, t) => [x(t / T), y(t / T)]);
    };
    Ответ написан
    1 комментарий
  • Как зная только тип вызвать у него статическую функцию?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    RTFM: Type.GetMethod
    public class Foo
    {
        public static string Bar() => "Bar() is called";
    }

    var type = typeof(Foo);
    var mi = type.GetMethod("Bar", BindingFlags.Static | BindingFlags.Public);
    var r = mi.Invoke(null, []);
    Console.WriteLine($"Result: {r}");
    
    >> Result: Bar() is called
    Ответ написан
    2 комментария
  • Нужны ли опции доступности сайту?

    пожилых и т.д. с каждым годом всё больше, да и опции доступности не противоречат SEO и т.д.

    https://habr.com/ru/articles/335442/
    https://habr.com/ru/articles/347478/
    Ответ написан
    Комментировать
  • Какой тип данных у RegExp, TypedArray и других?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    А ведь и правда есть термин для них (но не тип, конечно): Well-Known Intrinsic Objects

    Если же вы спрашиваете как затипизировать что-то, что может быть "RegExp, Array, Function и другим" (и не указывая при этом каждый тип явно), то должен, наверное, подойти только object (не смог в доке TS найти отличается ли TS-тип object от базового JS-объекта; например, в TS есть явная типизация функций, но можно ли её заменить на object?). Но это максимально странная задача, которую явно надо решить каким-то другим способом.
    Ответ написан
    6 комментариев