Ну в качестве простого примера - работа с файлами. Чтение и запись. Т.е. вы можете представить файл как одномерный массив, а можете долго и упорно собирать его в многомерный. И если для простых ситуаций - это ещё не очень страшно, то для более сложных, типа прочитай мне из файла данные по позиции (i, j) уже начнётся такая математика.
Да и в целом, эта единица будет лезть везде. Сколько операции будет при проходе по массиву с индекса 2 по 10? 10 - 2 + 1, а двух массивов одного с 2,10, другого с 3,7? 10-2 + 1 + 7 - 3 + 1. У нас уже Не единица, а двойка вылезла.
А если мы делаем простой кольцевой буфер размера N, то вместо того, чтобы крутить индексы через i % N мы начнём городить извращения вида (i - 1) % N + 1
Тут не только оптимизации, но ещё и уменьшение количества ошибок и повышение читаемости.
Например, если есть массив длинной n * m, то если мы считаем индексы с 1, то обратиться к элементу (i,k) уже становится весьма коряво (i - 1)*n + (k - 1) + 1, что быстро привёдет к оптимизации (i -1) * n + k, а вот эта -1 будет всех путать. Да, для этого есть многомерные массивы, для которых компилятор всё это под капотом сделает, но ситуации бывают разные, это просто пример.
Ээх, и не говорите. В Москве можно просто взять и на выходные слетать в другую страну (при этом поймать билеты по скидкам за какие-нибудь смешные деньги). В другом регионе - необходимо добавить время на добраться до Москвы и обратно. И с учётом всего этого - всё уже резко теряет смысл.
А потом этот рядовой пользователь обращается почему-то не в Microsoft, а к тебе и говорит - у меня синий экран, что может быть? Если есть код, то можно хоть что-то прикинуть (есть документация, а некоторые вообще вполне конкретные и понятные), но если нет — то пытаться пользователя заставить включить телеметрию, потом её как-то прислать тебе, ну уж нет...
Всё равно это шаблонизатор. Интегрированный с языком и фреймворком - но это уже особенности. Тот же Pug/Jade - тоже не html со скобочками, а при этом самый настоящий шаблонизатор.
Да, да, друг говорил, что там шикарные письма были. Объявление "куплю такие-то запчасти от Камаза (конкретные модели)" - и письмо о нарушении интеллектуальной собственности с требованием его убрать.
Клиент не знает сколько на сервере сайтов на данном IP адресе, поэтому всегда использует SNI, если в принципе умеет в него. Сделать запрос без SNI, получить ошибку про невалидный сертификат, сделать повторный с использованием SNI - выглядит ещё большим костылём и в целом не добавляет безопасности.
Можно через MITM (что сейчас вполне осуществимо). Коробочка у провайдера сама связывается с habr.com и работает как прокся, расшифровывая весь трафик от habr.com и шифруя его "нужным" сертификатом (точнее ключами, основанными на нём, но это детали уже). Пользователь ничего не заметит, а все данные утекут.
Как я понимаю, особенность Тинькова. У них, видно по городам пул карт лежит, которые при заказе новой - прошиваются под клиента. И, как я понимаю, аппарат для эмбоссинга дороже чем тупой принтер.
Они ещё в две строчки печают, видно, чтобы сократить область печати для железяки своей.
Ну, если речь шла исключительно о png, никакие другие форматы обрабатывать не потребуется никогда в жизни, и ничего кроме размера этой пнгшки никогда не понадобится — то выбор очевиден.
Ну, задача была именно для png и других форматов не планировалось. И даже для вас "очевидный" вариант напрямую взять размер из png, для большинства разработчиков - как раз совсем неочевидный (картинки - это какая-то магия, там что-то сложно и алгоритмы какие-то) и им гораздо проще затащить внешнюю библиотеку.
А, тем временем, в соседнем отделе другой такой же гений пишет в соседний модуль того же приложения свою реализацию ресайзера с самописными вариациями
Было дело, был у меня алгоритм SuperOboyeUlutshatel, который пытался убрать шакаленные артефакты джпега (зная, что он использует квадраты 8x8 и обрабатывая только эти участки). Хотя это больше по фану было и не продакшен, просто вспомнилось в рамках обсуждения.
Про PNG как раз случай был. Надо по png-картинке было понять её размер, да ещё всё мультиплатформенно сделать. Разработчик начал было искать библиотеки для парсинга PNG (ImageMagick отлично справляется с задачей), но оказалось - что по стандарту - надо прочитать несколько байтиков из заголовка файла.
Вот что лучше - тянуть огромную библиотеку, следить за ней, обновлять, или написать свой велосипед на 3 строчки кода?
Это бага разработчиков. Есть метод получения размера экрана, а есть метод получения видимой области. Иногда разработчики их путали, а иногда забивали (нуачо, верх и лево 0,0, чего тут думать, метод какой-то дёргать).
Думаю, что если сайт ловит даже по TLS Fingerprint, то поведение тупых скачивалок должен засекать мгновенно.
HTTP достаточно сложный протокол, чтобы его на коленке сделать и это не очень сильно отличалось от поведения браузера. Тот же keep-alive уже большая боль.
Сгенерировать куркод на условный bit.ly, который делает редирект на госуслуги, заодно меньше будет. Если сервис позволяет, то можно менять финальную ссылку, так что тату менять не придётся.
Ну в качестве простого примера - работа с файлами. Чтение и запись. Т.е. вы можете представить файл как одномерный массив, а можете долго и упорно собирать его в многомерный. И если для простых ситуаций - это ещё не очень страшно, то для более сложных, типа прочитай мне из файла данные по позиции (i, j) уже начнётся такая математика.
Да и в целом, эта единица будет лезть везде. Сколько операции будет при проходе по массиву с индекса 2 по 10? 10 - 2 + 1, а двух массивов одного с 2,10, другого с 3,7? 10-2 + 1 + 7 - 3 + 1. У нас уже Не единица, а двойка вылезла.
А если мы делаем простой кольцевой буфер размера N, то вместо того, чтобы крутить индексы через i % N мы начнём городить извращения вида (i - 1) % N + 1
Тут не только оптимизации, но ещё и уменьшение количества ошибок и повышение читаемости.
Например, если есть массив длинной n * m, то если мы считаем индексы с 1, то обратиться к элементу (i,k) уже становится весьма коряво (i - 1)*n + (k - 1) + 1, что быстро привёдет к оптимизации (i -1) * n + k, а вот эта -1 будет всех путать. Да, для этого есть многомерные массивы, для которых компилятор всё это под капотом сделает, но ситуации бывают разные, это просто пример.
Ээх, и не говорите. В Москве можно просто взять и на выходные слетать в другую страну (при этом поймать билеты по скидкам за какие-нибудь смешные деньги). В другом регионе - необходимо добавить время на добраться до Москвы и обратно. И с учётом всего этого - всё уже резко теряет смысл.
А потом этот рядовой пользователь обращается почему-то не в Microsoft, а к тебе и говорит - у меня синий экран, что может быть? Если есть код, то можно хоть что-то прикинуть (есть документация, а некоторые вообще вполне конкретные и понятные), но если нет — то пытаться пользователя заставить включить телеметрию, потом её как-то прислать тебе, ну уж нет...
Всё равно это шаблонизатор. Интегрированный с языком и фреймворком - но это уже особенности. Тот же Pug/Jade - тоже не html со скобочками, а при этом самый настоящий шаблонизатор.
Извините за сарказм, но фронтенд фреймворк с помощью силы лунной призмы формирует HTML? А SSR делается через sed и awk?
Т.е. вы голый JSON пользователю выводите, или всё-таки чем-то формируете html?
А что используете? конкатенацию строк руками?
Ээх... а мой флиппер путешествует по Германии. Так что весьма грустно читать, что и получили уже все и можно просто взять и купить...
Да, да, друг говорил, что там шикарные письма были. Объявление "куплю такие-то запчасти от Камаза (конкретные модели)" - и письмо о нарушении интеллектуальной собственности с требованием его убрать.
Клиент не знает сколько на сервере сайтов на данном IP адресе, поэтому всегда использует SNI, если в принципе умеет в него. Сделать запрос без SNI, получить ошибку про невалидный сертификат, сделать повторный с использованием SNI - выглядит ещё большим костылём и в целом не добавляет безопасности.
Можно через MITM (что сейчас вполне осуществимо). Коробочка у провайдера сама связывается с habr.com и работает как прокся, расшифровывая весь трафик от habr.com и шифруя его "нужным" сертификатом (точнее ключами, основанными на нём, но это детали уже). Пользователь ничего не заметит, а все данные утекут.
Как я понимаю, особенность Тинькова. У них, видно по городам пул карт лежит, которые при заказе новой - прошиваются под клиента. И, как я понимаю, аппарат для эмбоссинга дороже чем тупой принтер.
Они ещё в две строчки печают, видно, чтобы сократить область печати для железяки своей.
Ну, задача была именно для png и других форматов не планировалось. И даже для вас "очевидный" вариант напрямую взять размер из png, для большинства разработчиков - как раз совсем неочевидный (картинки - это какая-то магия, там что-то сложно и алгоритмы какие-то) и им гораздо проще затащить внешнюю библиотеку.
Было дело, был у меня алгоритм SuperOboyeUlutshatel, который пытался убрать шакаленные артефакты джпега (зная, что он использует квадраты 8x8 и обрабатывая только эти участки). Хотя это больше по фану было и не продакшен, просто вспомнилось в рамках обсуждения.
Про PNG как раз случай был. Надо по png-картинке было понять её размер, да ещё всё мультиплатформенно сделать. Разработчик начал было искать библиотеки для парсинга PNG (ImageMagick отлично справляется с задачей), но оказалось - что по стандарту - надо прочитать несколько байтиков из заголовка файла.
Вот что лучше - тянуть огромную библиотеку, следить за ней, обновлять, или написать свой велосипед на 3 строчки кода?
Это бага разработчиков. Есть метод получения размера экрана, а есть метод получения видимой области. Иногда разработчики их путали, а иногда забивали (нуачо, верх и лево 0,0, чего тут думать, метод какой-то дёргать).
В кафешках попадаются часто. Настроены n-лет назад, работают и их не трогают.
Думаю, что если сайт ловит даже по TLS Fingerprint, то поведение тупых скачивалок должен засекать мгновенно.
HTTP достаточно сложный протокол, чтобы его на коленке сделать и это не очень сильно отличалось от поведения браузера. Тот же keep-alive уже большая боль.
Видеокарты могут кушать много. Плюс есть неиспользуемые линии в БП, которые идут в общую мощность, но по факту мёртвым грузом висят.
А дальше, как я понимаю - маркетинг и надёжность, чтобы БП не работал на пределе характеристик.
Но я тоже окончательно не понимаю такой разницы между реальным потреблением и мощностью БП (а с результами@aik,я согласен, сам когда-то мерял).
Сгенерировать куркод на условный bit.ly, который делает редирект на госуслуги, заодно меньше будет. Если сервис позволяет, то можно менять финальную ссылку, так что тату менять не придётся.