Куча говна / Говнокод #27466 Ссылка на оригинал

0

  1. 1
IT Оффтоп #94

#64: https://govnokod.ru/27020 https://govnokod.xyz/_27020
#65: https://govnokod.ru/27027 https://govnokod.xyz/_27027
#66: https://govnokod.ru/27040 https://govnokod.xyz/_27040
#67: https://govnokod.ru/27049 https://govnokod.xyz/_27049
#68: https://govnokod.ru/27061 https://govnokod.xyz/_27061
#69: https://govnokod.ru/27071 https://govnokod.xyz/_27071
#70: https://govnokod.ru/27097 https://govnokod.xyz/_27097
#71: https://govnokod.ru/27115 https://govnokod.xyz/_27115
#72: https://govnokod.ru/27120 https://govnokod.xyz/_27120
#73: https://govnokod.ru/27136 https://govnokod.xyz/_27136
#74: https://govnokod.ru/27160 https://govnokod.xyz/_27160
#75: https://govnokod.ru/27166 https://govnokod.xyz/_27166
#76: https://govnokod.ru/27168 https://govnokod.xyz/_27168
#77: https://govnokod.ru/27186 https://govnokod.xyz/_27186
#78: https://govnokod.ru/27219 https://govnokod.xyz/_27219
#79: https://govnokod.ru/27254 https://govnokod.xyz/_27254
#80: https://govnokod.ru/27270 https://govnokod.xyz/_27270
#81: https://govnokod.ru/27280 https://govnokod.xyz/_27280
#82: https://govnokod.ru/27284 https://govnokod.xyz/_27284
#83: https://govnokod.ru/27296 https://govnokod.xyz/_27296
#84: https://govnokod.ru/27336 https://govnokod.xyz/_27336
#85: https://govnokod.ru/27381 https://govnokod.xyz/_27381
#86: https://govnokod.ru/27405 https://govnokod.xyz/_27405
#87: https://govnokod.ru/27429 https://govnokod.xyz/_27429
#88: https://govnokod.ru/27432 https://govnokod.xyz/_27432
#89: https://govnokod.ru/27435 https://govnokod.xyz/_27435
#90: https://govnokod.ru/27439 https://govnokod.xyz/_27439
#91: https://govnokod.ru/27449 https://govnokod.xyz/_27449
#92: https://govnokod.ru/27460 https://govnokod.xyz/_27460
#93: https://govnokod.ru/27463 https://govnokod.xyz/_27463

Запостил: nepeKamHblu_nemyx nepeKamHblu_nemyx, (Updated )

Комментарии (588) RSS

  • Добрый день.

    Этот оффтоп сгенерирован автоматически.

    Индекс оффтопов: https://index.gcode.space/.
    Зеркала Говнокода и полезные ресурсы:
    * https://govnokod.xyz/ (альтернативный Говнокод)
    * https://gcode.space/ (read-only зеркало Говнокода)
    * https://t.me/GovnokodBot (Говнокод-бот в «Telegram»)
    * https://t.me/GovnokodChannel (Тематический канал в «Telegram»)
    * https://vorec.space/ (глоссарий Говнокода)
    * https://app.element.io/#/room/#govnokod:matrix.org (резервный чат)

    Примечание: автоматические перекаты в настоящее время осуществляются только с аккаунта nepeKamHblu_nemyx.
    Остерегайтесь подделок. Берегите себя и своих близких. Кок!
    Ответить
  • говнокоду скоро пизда
    Cookie “PHPSESSID” will be soon rejected because it has the “sameSite” attribute set to “none” or an invalid value, without the “secure” attribute.
    Ответить
  • Здравствуйте! Сегодня я бы хотел рассказать о наследовании. Многие новички когда начинают изучать какой-либо язык программирования сталкиваются с проблемами на своем пути. Не компилируется программа, вылетает, скобочки не хватает - это то, чего не избежать. С личного опыта хочу сказать, что мне действительно нахватало наставника
    https://habr.com/ru/sandbox/152884/
    В общем говоря составьте UML таблицу. Поздравляю, вы уже готовы создавать.
    Ответить
    • > Это означает что поля Year, Weight, Color получат значения (Year = null, Weight = null, Color = null).
      > public int Year { get; set; }
      Что?

      > Тут также все по антологии.
      ...
      Ответить
      • Там еще страшнее всё:
        >Это сделано для того, что бы при выделении памяти в них не было мусора.

        На самом деле int это value type, и по умолчанию он скорее всего будет равен нолю (эукариот знает лучше)

        null туда вообще не пихнуть не сделав его Nullable (который вроде бы работает как std::optional)

        Такая вот апология:)
        Ответить
        • Подтверждаю, всё именно так и есть (но это для пропертей и филдов, локальные переменные нужно инициализировать руками, иначе даже не скомпилируется). Референс тайпы инициализируются наллом, числовые value type нулями, boolean false, Nullable<T> значением с HasValue=false (их можно сравнивать с null и выглядит это так, как будто они null, но это не совсем так), прочие структуры создаются через конструктор по умолчанию.

          Кстати, в C# 8 завезли #nullable (чтобы референс тайп не могли быть null, типа как в котлин, только хуже). Но не-наллабл референс тайпы в пропертях всё равно по умолчанию инициализируются наллом, и всё прекрасно компилируется (с варнингом правда). Да и в целом компилятор ограничивается только варнингом при попадании налла в не-наллабл референс тайп. Какой багор )))
          Ответить
          • Трудно завезти нулаблсейф туда, где его изначально небыло
            Ван миллион доллар мистейк же
            Ответить
      • Да, гилти плежэ конечно

        Примерно как обыграть в страйкбол человека с ДЦП
        Нужно заканчивать
        Ответить
      • программисты вообще ленивые

        а на гк сидит илитка в принципе

        тут эталон лени
        Ответить
    • > Сегодня я бы хотел рассказать о наследовании.

      Что же такое наследовать классы?
      Ответить
    • > Расскажите о SSH-протокол.
      А флаги в заголовках перечислять нядо (」°ロ°)」?

      > Есть ли разница между одинарными и двойными кавычками?
      Ну это даже я зняю! Двойные тормозят (⁀ᗢ⁀).

      > Результат выполнения функции? Как исправить результат?
      > in_array (1, [0, '0', true])
      Кто ня зняет наизусть порядок needle и haystack в каждой функции стандартной библиотеке пыха — тот ня нястоящий пыхер.
      Ответить
      • >> Расскажите о SSH-протокол.
        >А флаги в заголовках перечислять нядо (」°ロ°)」?
        и чем ECDSA отличвется от Ed25519 в краце
        Ответить
        • > и чем ECDSA отличвется от Ed25519 в краце

          Это из серии "Чем отличается многопоточное от метапрограммирования?" ?
          Хотя не, ECDSA и Ed25519 это все ж из одной категории. Надо спрашивать "Чем AES отличается от MD5"
          Ответить
              • FreeBSD в XXI веке использовали формат a.out от PDP-11
                какой олдскул )))
                Ответить
                • Так вроде давно уже ELF умюет


                  А виндоPE вообще наследник COFFа времен президентсва Рональда Рейгана
                  Ответить
                  • MSFT - это тот самый метафорический дцпшник
                    например у них еще при Джимми Картере были контрольные суммы в образах
                    но как тогда никто их не проверял, так и при третьем сроке Обамы-обезьяны никто не проверяет
                    Ответить
                    • Более того, там обычно просто 0. Кроме дров, вроде.
                      Ответить
                      • они не нулябельны, это валидное значение, проверкой которого никто не заморачивался никогда
                        Ответить
    • > Что такое ссылки?

      Да, охуенный вопрос для PHP-джуниора. Интересно, их вообще юзают? Я кроме out аргументов им применений придумать не могу...
      Ответить
      • Я не в курсе, к счастью, как происходит работа с нескалярными типами в пыхе: если по ссылке по умолчанию, то явно брать ссылку наверное нужно только для out параметров

        Вот в перле ссылки очень важная часть языка, без них там вообще ничего не написать
        Ответить
    • > Какие типы уязвимостей знаете? Как от них защищаться?
      И что характерня, вопрос только для Middle. Junior ня должен знять ни о каких уязвимостях, он должен уметь писать формочки!

      > У нас есть важный PHP-файл, его надо запускать каждые 20 секунд, как бы вы это сделали?
      Идиоматичный пыхоподход: добавить в крон три одиняковых задачи ня 00, 20 и 40 секунд.

      Senior:
      > Как вы понимаете REST?
      Senior?..

      > Зачем нужно кэширования? Какую проблему оно решает?
      Джуны и миддлы пишут формочки, ня забываем!

      > Что такое sensitive данные? Как хранятся в базе? Как отражаются в логах?
      Ня срать пароли в логи могут только гуру программирования пхп.
      Ответить
      • -- Какие типы уязвимостей знаете? Какие использовали на практике?
        -- Ну SQL инъекцию...
        -- Хорошо, а еще?
        -- XSS умею немного..
        -- Хорошо, вы подходите на должность ПХП программиста
        Ответить
  • Сегодня я научу вас как сделать плохой std::list с зашитым в него типом значения и зашитым же аллокатором, зато с выводом ошибок в cout и без поддержки копирования и мува
    https://habr.com/en/sandbox/153128/
    зато с обращением по индексу
    Ответить
  • графический шелл для TCL с отладчиком вообще существует или там всё полностью захвачено Activestate с подписками?
    Ответить
  • помните щутку про тиндер сюрприз?
    так это уже не шутка

    The 18-year-old player reportedly told the Blacksburg Police that he went to an apartment expecting to meet a woman named “Angie” that he said he met on the dating app, according to the Roanoke Times.

    Instead of meeting a woman as expected, though, prosecutors say Etute met 40-year-old Jerry Smith.
    Ответить
    • У емаксеров все в емаксе -- и почта и браузер и IDE. Вполне логично и телегу прикрутить. Вроде даже и скайп был когда-то.
      Ответить
    • Вот на чём d++ надо было кроссплатформу пилить, а не на dart
      Ответить
    • TS вроде полностью вытеснил его?

      Кстати, а дарт за пределами флаттера хоть где-то юзается?
      Ответить
  • Дебилы с mail.ru всё-таки починили говно с мискликами по рекламе. Наверное рекламодатели пришли жаловаться какого хуя у них кликов дохуя, а конверсии нету )))
    Ответить
    • Интересно, если написать бота, который кликает на рекламу, дожидается ответа (чтобы клик засчитался) и рвёт нахер соединение, и внедрить его код в какое-нибудь популярное дополнение, как скоро у рекламщиков начнёт гореть?
      Ответить
      • Конечно же против этого есть антифрод. Им просто бабки бабки будут возвращать за такие переходы.
        Ответить
      • А, я понял тебя. Это уже сложнее, как будто бы реальные пользователи кликают.
        Ответить
      • помнится было расширение ad nauseum или както так...
        так его забанили еще быстрее чем Pirates of Amazon
        Ответить
  • The SortedSet<T> class does not accept duplicate elements. If item is already in the set, this method returns false and does not throw an exception.

    эээ
    Ответить
    • что тебя смущает? Сеты (множества) обычно не допускают дубликатов
      Ответить
      • не, всё норм

        почему-то думал, что в Швифте insert автоматом заменяет значение, перечитал доку, понял, что это не так
        Ответить
    • А в чём уязвимость?

      Ну кроме того, что можно для фишинга какого-нибудь поюзать, если юзер невнимательно ссылки читает.
      Ответить
    • З.Ы. Ну хотя да, разлогинивать юзера get'ом как-то не айс... Собственно как и голосовать за комменты get'ом.
      Ответить
      • Надо анонам дать возможность голосовать get' ом. Тогда поисковые системы тоже смогут проголосовать.
        Ответить
        • Да они поди фильтруют по какой-то эвристике? Ну не прокликивают же они все ссылки на всех страницах?
          Ответить
          • а как еще-то? только по всем ссылкам кроме посещенных
            Ответить
      • Тут дело не в гете, а в csrf-verificatinho.
        Ответить
        • 1) А как ты сделаешь CSRF защиту для гета? Будешь прямо в урл её хуярить?
          2) Даже с защитой будет говно. GET вроде как не должен иметь побочных эффектов. Ибо прокси-хуёкси.
          Ответить
          • А в чем проблема? На странице говнокода хранится токен, который используется для голосовалки и выхода, прямые ссылки не работают, хоть get, хоть post.
            Ответить
            • > хранится токен

              Как он попадает в GET запрос? Прямо в ссылку вшит (что-то в духе "/vote?csrf=deadbeef")?
              Ответить
                • Ну ок. Второй пункт всё равно остаётся. Прокси и браузер имеют право дропнуть твой GET и вернуть закешированный ответ. И юзер вместо логаута или голосования получит хуй.

                  Или у тебя там nocache/nostore?
                  Ответить
                    • Ну и айдишник коммента, конечно, другой. В этом случае, наверное, не забагует. А crlf на всей странице как раз таки одинаковый, может даже и на нескольких. Вряд ли у него для каждой ссылки уникальный генерится.
                      Ответить
  • https://habr.com/ru/company/vdsina/blog/562370/

    GTA Online имела внезапно квадратичную производительность при парсинге большого JSON-блоба (из-за многократных вызовов strlen); после устранения этой ошибки время загрузки уменьшилось почти на 70%.
    Ответить
    • > парсинг JSON
      > strlen

      Блядь. Готовые либы в геймдеве зашкварно юзать?
      Ответить
      • не удивлюсь, если это специально оставили

        ну чтоб типа казалось, что игра требует топового железа. я так когда-то в курсаче на grx делал анимированные заставки, которые тупили из-за расчётов; зато казалось, что что-то происходит

        ну и диск с dummy файлом в Лада Рейсинг Клюб можно вспомнить ещё

        я уже говорил, что гейдев говно?
        Ответить
      • Как вообще можно было додуматься парсить флоаты из жсона sscanf'ом? Он же даже не возвращает сколько символов он считал... Даже в стандарте няшной есть более удобные инструменты.
        Ответить
          • Фиг знает. Видимо не думали, что так много инфы будет передаваться. Тем более один раз перед началом игры.

            Тут вопрос больше почему готовый парсер жсона не взяли, а начали велосипеды городить на ровном месте...
            Ответить
            • Просто хранить что-то в json, потом искать что-то через strstr, потом sscanfить представленную строкой плавучку это всё какая-то лаба кмк, а не топовый код для AAA игры

              Да даже сраный json можно пройти один раз сверху вниз и каким-то автоматом разобрать
              Ответить
              • Давайте обсуждать ненормальное программирование. Ответ на запрос к API archive.org прилетает в JSON, причём он может быть огромным. Парсить его библиотечными функциями слишком затратно.

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

                Каждую строчку можно рассматривать как отдельный объект JSON, но настоящие извращенцы так не делают. Я распарсил строчку функциями для CSV.
                Ответить
                • напиши аналог sax парсера для json, чтобы он колбечил твой код на каждый узел
                  Ответить
              • ну так посадили писать какого-то интерна или джуна небось

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

                что действительно странно, так это то, что фигурирует JSON, а не какой-нибудь RockstarKumarScript
                Ответить
      • >>вы может и удивитесь, но даже применение объектов причём якобы быстрых [например структур] — это на самом деле не быстро и нафиг не нужно

        какой тсарь ))
        Ответить
  • https://habr.com/ru/post/562594/
    > MEX (Minimum EXcluded) Алгоритм поиска минимального отсутствующего числа
    > Самый быстрый алгоритм сортировки — это «quicksort» (быстрая сортировка), которая имеет сложность в O1(n log(n)). И итого мы получим теоретическую сложность для поиска MEX в O1(n log(n)) + O2(n)
    Ответить
    • Meh.

      А что за новая нотация про О-первое и О-второе?
      Ответить
    • Специальную олимпиаду будем начинать? Или там всё тривиально (статью ещё не читала, чтобы спойлеров не нахвататься)?
      Ответить
      • Навскидку получилось придумать за ароматизированное O(n):

        - набиваем всю эту хуйню в хешмапу (можно хранить в базе)
        - начиная с нуля брутфорсом ищем, какого элемента в ней нет
        Ответить
        • Взять сортировку подсчетом, и выкинуть сам подсчет, оставив по битику под каждое допустимое число (появлялось ли оно в массиве или нет). А потом просто найти в этом битовом векторе первый 0
          Ответить
      • Если подойти серьёзнее, можно попробовать построить список свободных диапазонов (сортировка + скан за те самые O(n * log), наверное) и аллоцировать свободные номера из них за О(1).
        Ответить
      • Идёшь по массиву, если текущий элемент является индексом массива то меняешь его местами и делаешь это до тех пор пока не в текущем индексе не появится нужный элемент или текущий элемент не будет больше максимального индекса в массиве или пока не встретишь дубликат
        Потом идёшь по массиву и как только видишь что значение элемента не совпадает с индексом возвращаешь индекс. Если весь массив красивый то значит у тебя в массиве длиной N числа от 0 до N-1 значит возвращаешь следующее наибольшее значение те N
        Ответить
    • Статю не читал, но судя по описаню автор сортирует массив, а потом обходит его в поисках дырки?
      Ответить
  • Если бы вы писали будильник на "PHP" с использованием "MySQL", как бы вы делали?
    Ответить
        • > npopa6
          > дома из говня и палок

          Этот человек знает о чём говорит...
          Ответить
      • Я бы в табличке сохранял расписания. Затем каждую секунду делал запрос
        while (1) {
           $sekunda = (int) time();
           if (do_query("select * from budilniki where vremya == $sekunda")) {
           }
           sleep(1);
        }


        Только что внутри ифа делать?
        Ответить
        • Во-первых давай сделаем твой код объектно ориентированным
          class budilnik {
            funciton budilnik() {
          
          while (1) {
             $sekunda = (int) time();
             if (do_query("select * from budilniki where vremya == $sekunda)) {
             }
             sleep(1);
          }
            }
          }
          $budilnik = new budilnik();
          $budilnik->budilnik();
          Ответить
        • > что внутри ифа делать

          Выдвигать сидиром для эмуляции кукушки (man eject) ну или музычку сыграть через любой консольный плейер если колонки подключены.
          Ответить
          • > Выдвигать сидиром для эмуляции кукушки
            бляяяя, как же я не догадался когда всё это еще в ходу было!
            Ответить
            • Кто мешает вытащить привод из шкафа и подключить?

              У меня он вроде даже есть в системнике, просто без проводов...
              Ответить
        • Можно ещё отправить себе сообщение в какую-нибудь телегу. Телефон обычно рядом, ты услышишь и проснёшься.
          Ответить
          • Ага. Потому что если сервер в Нидерландах, музыку ты вряд ли услышишь.
            Ответить
            • Можешь написать приложение под телефон, получить от сервера пуш и сыграть музычку на телефоне. Вот только вопрос в том, а нафига тут php и mysql...
              Ответить
              • если поставить вопрос ширше, то нахрена вообще что-то писать?
                Ответить
                • > нахрена вообще что-то писать

                  Именно поэтому я за механический будильник.
                  Ответить
              • Каждый погромист должен сделать троллейбус из буханки.
                Ответить
          • Можно каждую секунду слать сообщение. Заебёт своим дзыньканьем и точно разбудит.
            Ответить
        • Если охлаждение хуёвое, можно сделать while (1) в 12 потоков или хеш какой-нибудь в цикле посчитать. Разбудит только так.
          Ответить
    • Это в пиздец оффтоп.

      А кто будить то должен? Браузер по ответу от сервера? Или сам сервер своими динамиками?
      Ответить
        • Инью, ты что ли проходишь собеседование в веб студию "пупкин креатив дизайн диджитал солюшенс" на должность пхп программиста?

          Откель такая задача?
          Ответить
        • Как можно не мочь использовать крон?

          не можешь крон -- используй systemd-timers
          Ответить
          • Не знать про его существование, например. Или если твоё говно на шаред хостинге (хотя на шаред хостинге, где хуз, есть крон)
            Ответить
            • на шаред хостинге нету крона?

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

          Цветных TTF-шрифтов четыре формата:
          1. Микрософтовский (содержит таблицы COLR, CPAL). Реальный пример: Segoe UI Emoji. Цветные картинки векторные.

          2. Гугловский (содержит таблицы CBDT, CBLC). Реальный пример: Noto Color Emoji. Цветные картинки в виде PNG.

          3. Эппловский (содержит таблицу sbix). Реальный пример: Apple Emoji. Цветные картинки в виде PNG.

          4. Мозилловский (содержит таблицу SVG; не путать со шрифтом, который сам в виде SVG). Реальный пример: Twemoji. Цветные картинки векторные.

          Со взаимозаменяемостью и с конвертируемостью форматов всё довольно плохо.

          На десктопе лучше всего цветные шрифты поддерживает Фаерфокс.
          Ответить
      • ты неправильно привлекаешь внимание к ненужной хуйне
        Ответить
    • Я, к сожалению, не знаю ничего про хакинтош, поэтому не могу его толково обосрать. Это потому что он никому не нужен? Потому что пердолиться с макосей – это даже хуже чем патчить телеметрию в винде?
      Ответить
      • Сейчас услышал вот такой ЭТАЛОННЫЙ нахрюк в видео:

        OS X El Captain... 2015 год. Это вторая операционная система от Джонни Айла. Да, от этого заразы, который пришел в компанию Apple и сказал: «я так решил что операционные системы теперь будут с плоским внешним видом, сам я жирный как свинья, но операционные системы буду делать пвоские».
        Ответить
        • там китайскую колонку погрузили в желе внутри какой-то кастрюли и назвали это головой?
          Ответить
                • Да, KDE был симпатичный, и шустрый как для DE.
                  Вот тебе целая галлерея десктопов двадцатилетней давности

                  https://www.linux.org.ru/gallery/archive/2000/5/



                  Скучные виндобляди сидели с дефолтным десктопом и черным фоном, а труъ линуксеры не могли без трехмерной картинки и двумерной тян


                  Там есть и асечка, и хуёвый PHP код, и нетскейп
                  Ответить
                  • да что я, не видел. даже вживую.

                    потому и удивился, обычно луникс тех лет это кислотное нечто. ну кстати даже по твоей ссылке есть реальные примеры
                    Ответить
                    • Если чувак брал обычный window manager и настраивал его под себя, то получалось обычно говно.

                      Были и совсем упоротые вещи типа TWM:
                      https://ru.wikipedia.org/wiki/Twm

                      Но если брал полноценный DE, то там обычно всё было боль-мень настроено, правда если софт использовал нужные виджеты (qt в случае KDE)

                      А например тут используется библиотека Motif (точнее её набор виджетов, сам виндоу менеджер другой)*

                      https://www.linux.org.ru/images/7744/original.jpg

                      результат ожидаемо хуёв

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


                      *https://en.wikipedia.org/wiki/Motif_(software)
                      Ответить
                      • > соснуть можно было со шрифтами

                        До сих пор иногда вылезают косяки, когда кириллица и латиница в одной строке разного размера (не на тот шрифт фоллбекнулось). Но намного реже чем тогда, конечно.
                        Ответить
                        • Ну сейчас всё рендерится через Xft, а там всякие хинтинги-хуинтинги, кернинги, более умный способ подбора (fontconfig), и всё еще антилайзингом намазано

                          А раньше подбиралось через XLFD, и тебе мог случайно достаться вообще шрифт из нескольких растровых картинок под другой DPI
                          Ответить
                      • З.Ы. А винда походу вообще не фоллбечит, просто кубики рисует если чего-то нет в щревте?
                        Ответить
                        • вроде бы не кубики, а есть спец символ в уникоде
                          типа вопросика
                          Ответить
                          • Вопросики это вроде ошибка конвертера кодировок (когда китайский иероглиф пытаешься засунуть в cp1251, к примеру). А отсутствие символа вроде квадратик всё-таки.
                            Ответить
                        • Винда фоллбечит символами из другого шрифта, но через жопу. Ты не можешь явно указать шрифты для фоллбека, она выберет случайный.

                          Ситуацию осложняет то, что стандартно присутствуют неюникодные шрифты типа Symbol и Wingdings, которые покажут хуйню, если Винда их случайно выберет для фоллбека.
                          Ответить
                          • ээ

                            как можно посреди слова пиндюрить кеглю другого шрифта? Хинтинг не поедет с кернингом?
                            Ответить
                            • > кернингом

                              А он ведь между символами разных сортов и не определён, скорее всего. Так что ничего особо и не сломается. Да и на фоне перемешанных шрифтов это будет последнее, на что ты обратишь внимание.
                              Ответить
                              • >А он ведь между символами разных сортов и не определён, скорее всего.

                                и у тебя будут дыры между буквами
                                Ответить
                                • > дыры между буквами

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

                                  Да и даже в нормальном кейсе их обычно не мешают в кучу, кернинг работает в основном между буквами в слове. Поэтому вряд ли кого-то ебёт кернинг между арабской закорючкой и японским иероглифом.
                                  Ответить
                                • > будут дыры между буквами
                                  > выглядеть будет пиздец
                                  а ты ожидал чего-то другого от съехавших шрифтов?
                                  суть сабститушона в том, чтобы хоть какую читабельность спасти, так то документ более ни на что не годен, поэтому всякие придумали фонты внедрять прямо в пдф
                                  Ответить
                            • Ты специально перечислил случайные термины?

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

                              Хинтинг о другом. Хинтинг — это способ искажения мелких деталей при необходимости рендерить в низком разрешении (при мелком размере, например). С чего он вдруг поедет? Буквы отрендерятся независимо.
                              Ответить
                              • >Кернинг существует только между парами, которые явно перечислены в текущем шрифте в таблице кернинга.

                                Тогда каким образом он будет работать между символами разных шрифтов?

                                > Да, выглядит хреново,
                                а, ну понятно

                                >Буквы отрендерятся независимо.
                                с разным хинтингом, потому что разные шрифты

                                выглядеть будет пиздец
                                Ответить
                                • > выглядеть будет пиздец

                                  Да оно по определению пиздец, раз шрифты разные и не заточены под один стиль...

                                  Лучше чем квадратики/вопросики. Всё-таки можно что-то прочесть. И не более того.
                                  Ответить
                            • Да, иначе было бы совсем печально. Тем не менее, я видел вперемешку буквы из рубленого шрифта с буквами из шрифта с засечками. Похоже, что курсив и жирноту метрика учитывает, а вот засечки — нет.
                              Ответить
                              • > а вот засечки — нет

                                Скорее просто выбрал меньшее из джвух зол. Всё-таки курсив и жирнота могли иметь какую-то семантику в документе. А без засечек можно выжить, просто некрасиво получится. Один хер шрифт уже другой, особой красоты ждать глупо.
                                Ответить
                      • показали скриншоты следующей винды

                        появились скруглённые уголки, но почему-то не везде
                        Ответить
                        • > появились скруглённые уголки, но почему-то не везде

                          Винда ещё не вышла, а уже настало время переустанавливать...
                          Ответить
                            • Да, всё так. Я кастомизирую свой арч/линукс. В ближайших планах – найти гифку с танцующей аниме-девочкой, порезать её (гифку, не девочку) на кадры, потом сделать нескучные анимированные обои.
                              Ответить
                    • > кислотное нечто
                      просто веб 2.0 паллитра из 2007 только сейчас добралась до тормозов-пердоликов, ничего загадочного
                      Ответить
              • Три года я реально не видел ни одного рабочего устройства со старой iOS на борту. У меня исчезло чувство ностальгии, а значит, появилось чуть больше объективности. И вот я смотрю на эту iOS 5 – и знаете, что вижу? Излишне пёстрый, деревенский и действительно устаревший дизайн, которому не место в 2016 году.

                Всего 3 года прошло, а скевоморфизм в айфоне выглядит, словно попал в колхоз или купил подделку.
                Ответить
                • > Излишне пёстрый, деревенский и действительно устаревший дизайн

                  - покажите этой неженке третьего Андрюшу, пусть пóтом обдристается
                  Ответить
              • всё как всегда, у gnome приличный внешний вид (и софт в целом), kde это безуспешно пытается конкурить, а остальные поделки джава- и пиэйчпименов - полнейший пиздец
                Ответить
          • > Кто не знает, скевоморфизм в дизайне – это использование формы, дизайна и стиля реальных объектов при создании виртуальных. Скевоморфической можно назвать иконку приложения-читалки, которая выглядит как бумажная книга в коричневом переплёте с текстурой ткани и кожи. Скевоморфическим можно назвать весь дизайн iOS вплоть до iOS 7.

            Ого! А у меня в xfce стоят иконки Tango – там скевоморфиз.
            Ответить
            • а у меня в этих самых прыщах - bagore, тупое говно запоминает WindowRect, но не WindowState, в прошлый сеанс забыл ресторнуть максимайзнутое окно в котором запускал horst --wessel (который кстати охуенен и редкий случай в прыщах когда джавамены не клонируют тупо чейто ламерский дизайн) перед шитдауном и теперь у меня все терминалы запускаются ДОХУЯ на ДОХУЯ
              Ответить
  • Во время учебы в универе и прохождения курса по SQL и базам данных наш преподаватель любил давать олимпиадные задачи по программированию на SQL

    https://habr.com/ru/sandbox/153048/
    Ответить
      • Хочу олимпиадные задачи на шаблонах
        Или на XSL

        В конце концов, не всё ли равно на чем писать?
        Ответить
        • > не всё ли равно на чем писать

          Какая трясина Тьюринга )))

          А на XSL+FOP можно вообще красивую PDF'ку высрать в качестве решения.
          Ответить
          • А чем это хуже какого нить nroff/troff, на чем там маны пишутся в классичесокм униксе?
            Ответить
            • Тем, что roff'ы никто и не пытается юзать для программирования на них?
              Ответить
    • че то он херово её порешал

      create or replace function paralimpic(str in text, repeats int default 2)
      returns table(sstring text, pos1 int8, pos2 int8)
      immutable strict parallel safe
      language sql
      as $f$
        with
          all_substrings as (
            select substring($1 from _offset for _length) as sstring,
              _offset, _length,
              count(*) over (partition by substring($1 from _offset for _length)) as same_count
            from generate_series(1, length($1)) _length
              join generate_series(1, length($1)) _offset
                on (_offset + _length <= length($1) + 1
                  and _length <= length($1)/$2)
          ),
          seen_exact_times_ranked as (
            select ass.*,
              dense_rank() over (partition by same_count order by _length desc) as drank
            from all_substrings ass
            where ass.same_count = $2
          )
        select sstring, min(_offset) as pos1, max(_offset) as pos2
        from seen_exact_times_ranked
        where drank = 1
        group by sstring;
      $f$;
      
      select * from paralimpic('сabjrehwklhgfjrehwkyupolkoraclenmoracleppmicrosoftmmicrosoftumicrosoft', 2);
      Ответить
        • делаем кобенаторный взрыв и там же не отходя от кассы считаем число повторений

          фильтруем на точное число повторений и ранжируем по длине desc

          выводим результаты, мин и макс (автор статьи зачем-то так выводит результат, пох)

          CTE приходится юзать, т.к. нельзя оконную функцию хуярить в where и нельзя оконную функцию внутри оконной функции - и если уж выбирать подзапросы и CTE я выберу последнее, там хоть имя можно жмыхнуть, будет более читаемо
          Ответить
          • > кобенаторный взрыв

            Интересно, а как он это спланировал? Набил все подстроки в хемпапу и потом сканом по ней нашёл двойки?
            Ответить
            • это не крестокопелятор, чтобы хешмапы, двойки
              делает что сказал и на том спасибо

              GroupAggregate  (cost=267.90..267.92 rows=1 width=40)
                Group Key: seen_exact_times_ranked.sstring
                ->  Sort  (cost=267.90..267.90 rows=1 width=36)
                      Sort Key: seen_exact_times_ranked.sstring
                      ->  Subquery Scan on seen_exact_times_ranked  (cost=267.63..267.89 rows=1 width=36)
                            Filter: (seen_exact_times_ranked.drank = 1)
                            ->  WindowAgg  (cost=267.63..267.79 rows=8 width=56)
                                  ->  Sort  (cost=267.63..267.65 rows=8 width=48)
                                        Sort Key: ass._length DESC
                                        ->  Subquery Scan on ass  (cost=214.44..267.51 rows=8 width=48)
                                              Filter: (ass.same_count = 2)
                                              ->  WindowAgg  (cost=214.44..247.10 rows=1633 width=48)
                                                    ->  Sort  (cost=214.44..218.52 rows=1633 width=40)
                                                          Sort Key: ("substring"('сabjrehwklhgfjrehwkyupolkoraclenmoracleppmicrosoftmmicrosoftumicrosoft'::text, _offset._offset, _length._length))
                                                          ->  Nested Loop  (cost=0.01..127.29 rows=1633 width=40)
                                                                Join Filter: ((_offset._offset + _length._length) <= 71)
                                                                ->  Function Scan on generate_series _length  (cost=0.00..0.70 rows=70 width=4)
                                                                ->  Function Scan on generate_series _offset  (cost=0.00..0.70 rows=70 width=4)
              Ответить
              • > Sort (cost=214.44..218.52 rows=1633 width=40)
                > Filter: (ass.same_count = 2)

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

          можно взять rank() вместо dense_rank(), для данной задачи (если искать лишь победителей, =1) однохуйственно


          мой запрос не умеет в требование "найденные подстроки не должны пересекаться"
          ну и в связи с этим он ошибочно вводит оптимизацию на _length <= length($1)/$2 (т.к. надо либо трусы либо крестик)
          Ответить
          • > должно быть одинаковое место

            Понятно. В доке как-то слишком уж лаконично это пояснили: Returns the rank of the current row, without gaps; this function effectively counts peer groups...

            Т.е. для [A, A, A, B, B] row_number() вернёт [1, 2, 3, 4, 5], rank() вернёт [1, 1, 1, 4, 4], а dense_rank вернёт [1, 1, 1, 2, 2]?
            Ответить
    • > mudno
      любопытно, это BBC для кого, мексика? бразилия? рiдна испания?
      Ответить
    • No pressure ещё надо выучить и можно повышать до лидера домена
      Ответить
      • > до лидера домена

        - что за шведские термины вообще?
        Ответить
      • > лидера домена

        Это что-то из распределённых отказоустойчивых систем?
        Ответить
        • Скорее централизованных отказонезамечающих систем. Domain lead же.
          Ответить
          • А я думал, из фентези, что-то про королевства. Хотел бы стать лидером королевства, государственный язык которого – «PHP»?
            Ответить
  • PyCharm подвёл. Случайно ёбнул изменения. Обычно в Local History это есть, в этот раз не оказалось (((
    Ответить
    • Надо было пользоваться емаксом, там нет никакого Local History, поэтому и подвести он не может.
      Ответить
    • Родина дала им гит. Делай себе локальные истории, блядь. Но нет, хочу жрать говно
      Ответить
      • А можно самому захостить гитлаб и там хранить истории?
        Ответить
        • Штука интересная, но у него вроде шифрования нет в бесплатной версии. К гиту хоть можно gpg прикрутить.
          Ответить
          • не знал, что у fossil'а есть платная версия, если честно

            а зачем тебе шифрование локальной репы?
            Ответить
            • А зачем нужны локальные репы? Я всяко захочу рано или поздно их синкать между компами.
              Ответить
            • > не знал, что у fossil'а есть платная версия, если честно

              Он кладёт данные в sqlite, и у последнего таки есть платная версия с шифрованием.
              Ответить
    • Сколько нужно программистов, чтобы отсобеседовать ротоёба.
      Ответить
    • TLDR: человек ходит на собесы и издевается над собеседующими, притворяясь ротоёбом или таковым являясь на самом деле. Судя по всему там их команда и группа в ВК, где шарятся тестовые задания и заказы на их исполнение.
      Ответить
      • https://youtube.com/watch?v=m3JGwUe-Zj8

        Пиздец. Они собираются в конфу и обсуждают какие вопросы задавать на собесе, например чем checkbox отличается от radiobutton. Ебаный стыд. Сам даже не знает ничего про структуры данных и сложность алгоритмов.

        Питухи, а вы тоже такую хуйню спрашиваете?
        Ответить
        • > чем checkbox отличается от radiobutton

          чебокс квадратный, а радиобуттон круглый?
          Ответить
          • Я даю задачки решить. Оттуда видно как человек соображает.
            Но я общаюсь с кандидатами ниже меня уровнем (подумать бы, куда уж ниже :D). Только 1 раз общался с «сениоркой», но она тупила на простой задачке )))
            Ответить
            • > Только 1 раз общался с «сениоркой», но она тупила на простой задачке )))
              Так вот кто тот токсичный сексист, который меня собеседовал! Я давно тебя искала.
              Ответить
        • > как удалить ветку

          Лолшто. Неимоверно важный вопрос для собеседования...
          Ответить
        • > Сам даже не знает ничего про структуры данных и сложность алгоритмов.

          Х.з., а нафиг в такие детали уходить? Я тупо спрашиваю "а как вы выбираете какой контейнер поюзать"?
          Ответить
          • То есть тебе похуй, что человек не знает за сколько будет работать его код?
            Ответить
            • Если он может внятно объяснить, как он выбирает контейнер -- то скорее всего знает. Если нет -- ну а смысл дальше копать.

              И вообще, О(n) -- не серебряная пуля. Охуенный в асимптотике алгоритм может слиться на маленьких выборках или из-за кривого доступа к памяти.
              Ответить
                • > что ты ещё спрашиваешь

                  Да в основном всякие фундаментальные вещи по крестам и системщине. Прям совсем-совсем фундаментальные, без метушни и битоёбства.

                  Если вижу, что чел в чём-то шарит -- можно поглубже копнуть.
                  Ответить
              • А если не может объяснить - то не знает.

                > Охуенный в асимптотике алгоритм может слиться на маленьких выборках или из-за кривого доступа к памяти

                Это тоже хороший вопрос, да. Но не «чем отличается checkbox от radiobutton».
                Ответить
                • Чем вопрос про радиобаттон отличается от вопроса по системщине Борманда или по RPC Снаута?

                  Фронтэндеру также важно знать про радиобаттон, как системщику про таблицы страниц, а писателю распределённой питушни про то, почему не нужно открывать 100000 tcp коннектов
                  Ответить
                  • Ну ответит он правильно чем отличается checkbox от radiobutton - что тебе это скажет? Какой вопрос следующим задашь? «Какой из них кругленький а какой квадратненький по умолчанию»? Если не ответит - какой вывод ты сделаешь?

                    Вообще, у меня немного другая задача - оценить на общую пригодность. Если не знает за какую сложность отработает обход дерева - сразу нахуй. Про tcp коннекты и страницы спросит его возможный будущий руководитель или близкий коллега, если им нужно.
                    Ответить
                    • Сделаю вывод, что чел не имеет опыта верстки, и это будет подозрительно

                      Хотя если он реально не знает чем дерево от массива отличается, то значит он не имеет базовых знаний в программировании, и вероятно тоже нахуй
                      Ответить
                      • > вероятно тоже нахуй
                        ты ещё сомневаешься?
                        если на собесе человек декларирует, что знает о массивах, списках, хешмапах, но затем следующим вопросом вскрывается факт, что человек не понимает конструктивной разницы между массивом и списком, потому что тупо не знает как оно устроено в компуктере, то ему пока рано получать деньги за своё ничего

                        трата времени кандидата и собеседущего
                        у меня, к сожалению, раз в год да проскакивают такие через сито предварительного рассмотрения резюме, гита и т.д.
                        Ответить
                        • Интересно кстати, а откуда появляются такие чуваки?

                          Это какие-то безвузные, прошедшие курсы по джаваскрипту на ютубе?

                          Или им просто никогда не надо было задумываться над этим?
                          Ответить
                          • в последний раз это был студент из верхней половины рейтинга потока 2 курса одного из лидирующих вузов сейчас насчет подготовки разрабов, с заявленным дополнительным образованием по программированию 5 лет до вуза

                            ничего не предвещало, так сказать

                            мы с ним на собесе изобрели массив, алгоритм быстрого поиска N-го элемента массива и другие сложные штуки
                            Ответить
                            • >алгоритм быстрого поиска N-го элемента массива

                              Это всмысле
                              ``arrayAddr + sizeof(arrayElement) * N`` ?:)
                              Ответить
                            • > изобрели массив, алгоритм быстрого поиска N-го элемента массива и другие сложные штуки

                              На основе лямбда-исчисления?
                              Ответить
                              • можно было взять Coq, но кандидат сказал, что его смущает бедность выразительных средств
                                Ответить
                                • > смущает бедность выразительных средств

                                  Ничего себе искушённый человек. Мы тут недавно обсуждали, что в Coq можно перегрузить пробел, и оно как-то даже будет работать.
                                  Ответить
                                  • извини, доверять словам реального человека, который сидел напротив меня на собесе, или какому-то анонимному виртуалу в интернете, фантазирующему на тему перегрузки пробелов...
                                    Ответить
                            • У меня на днях был чувак, мы с ним изобрели как в векторе проверить, что существует элемент с индексом i.
                              Ответить
                            • > алгоритм быстрого поиска N-го элемента массива
                              Быстрый — это знячит бинярный поиск!
                              template<typename T, typename... Rest>
                              T find_Nth_element(const std::vector<T, Rest...> & vec, size_t N)
                              {
                                  size_t start = 0;
                                  size_t end = vec.size();
                                  size_t cur = (end - start) / 2;
                              
                                  while (true) {
                                      if (cur < N) {
                                          start = cur;
                                          cur = (end - start) / 2 + start;
                                      } else if (cur > N) {
                                          end = cur;
                                          cur = (end - start) / 2  + start;
                                      } else {
                                          return vec[cur];
                                      }
                                  }
                              }

                              (*≧ω≦*)
                              Ответить
                              • Искать элемент, которого в массиве нету -- UB? Логично, в принципе.
                                Ответить
                                  • > Как можня няйти N-й элемент, если его нят?

                                    Странно, что ни gcc ни clang не убрали цикл: либо цикл зациклится, и это UB, либо цикл завершится с cur == N. Т.е. можно считать, что цикл всегда завершается с cur == N и заменить весь код на return vec[N].
                                    Ответить
                                    • Видимо, ня поняли, что cur == N. Если в цикле заменить "return vec[cur]" ня "return vec[N]", то всё заработает:
                                      find_Nth_element(std::vector<int, std::allocator<int> > const&, unsigned long):
                                              mov     rax, qword ptr [rdi]
                                              mov     eax, dword ptr [rax + 4*rsi]
                                              ret
                                      Ответить
                                      • > ня поняли, что cur == N

                                        Ну это странно. Там ведь выше известно, что !(cur < N) и !(cur > N). Или я какую-то тонкость работы с unsigned упускаю?
                                        Ответить
                                        • Видимо, просто data flow анализ тупит. Если сделать вот так:
                                          int find_Nth_element(const std::vector<int> & vec, size_t N)
                                          {
                                              size_t start = 0;
                                              size_t end = vec.size();
                                              size_t cur = (end - start) / 2;
                                          
                                              while (true) {
                                                  if (cur < N) {
                                                      start = cur;
                                                      cur = (end - start) / 2 + start;
                                                  } else if (cur > N) {
                                                      end = cur;
                                                      cur = (end - start) / 2  + start;
                                                  } else if (cur == N) {
                                                      return vec[cur];
                                                  }
                                              }
                                          }

                                          То clang сходит с ума (https://gcc.godbolt.org/z/8xo5bejrs):
                                          find_Nth_element(std::vector<int, std::allocator<int> > const&, unsigned long):
                                                  mov     r8, qword ptr [rdi]
                                                  mov     rax, qword ptr [rdi + 8]
                                                  sub     rax, r8
                                                  sar     rax, 2
                                                  mov     rdx, rax
                                                  shr     rdx
                                                  xor     edi, edi
                                          .LBB0_1:                                # =>This Inner Loop Header: Depth=1
                                                  cmp     rdx, rsi
                                                  jb      .LBB0_2
                                                  ja      .LBB0_4
                                                  cmp     rdx, rsi
                                                  jne     .LBB0_1
                                                  jmp     .LBB0_6
                                          .LBB0_2:                                #   in Loop: Header=BB0_1 Depth=1
                                                  mov     rcx, rax
                                                  sub     rcx, rdx
                                                  shr     rcx
                                                  add     rcx, rdx
                                                  mov     rdi, rdx
                                                  mov     rdx, rcx
                                                  jmp     .LBB0_1
                                          .LBB0_4:                                #   in Loop: Header=BB0_1 Depth=1
                                                  mov     rax, rdx
                                                  sub     rdx, rdi
                                                  shr     rdx
                                                  add     rdx, rdi
                                                  jmp     .LBB0_1
                                          .LBB0_6:
                                                  mov     eax, dword ptr [r8 + 4*rsi]
                                                  ret

                                          Он оставляет цикл, но при этом возвращает просто vec[N]: ни r8, ни rsi в цикле ня меняются.
                                          Ответить
                                          • > Он оставляет цикл

                                            Ну видимо пытается сохранить семантику на 100%, чтобы висло если изначальная прога виснет. А то всякие rust'еры потом жалуются, что у них while (1) {} выпиливает.
                                            Ответить
                                      • Кстати во втором томе Software Foundations такое поведение конпелятора называли аппроксимацией:

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

                                        Т.е. в крестах не просто так while (1) {} в UB'ы записали, а UBтимизация и есть та самая аппроксимация.
                                        Ответить
                              • > Быстрый — это знячит бинярный поиск!
                                это ж каждый раз вычислять этот поиск, чтобы искать!

                                хеш-мапа ищет значение за О(1), стоит этим воспользоваться
                                поэтому надо просто иметь хеш-мапу известных индексов в массиве, а значением в этой хешмапе будет запомненный ранее путь поиска, который уже проходился ранее при поиске нужного нам N элемента
                                Ответить
                                • > а значением в этой хешмапе будет запомненный ранее путь поиска
                                  Чем-то няпомнило "disjoint-set", у которого поиск модифицирует структуру, чтобы быстрее искалось.
                                  Ответить
                                  • > которого поиск модифицирует структуру, чтобы быстрее искалось
                                    Отличное решение, кстати.
                                    It find(It begin, It end, T value)
                                    {
                                        if (begin != end)
                                            *begin = value;
                                        return begin;
                                    }
                                    О(1) поиск...
                                    Ответить
                                    • > Отличное решение, кстати.

                                      Яндекс. Найдётся всё.
                                      Ответить