Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
108 - Telegram Web
Telegram Web
Хороший ли это код?

int mult(int a, int b) {
return a * b;
}

Ну в целом как будто да. Ну может иногда быть переполнение, но вроде норм. Но переполнение это же опасная ситуация, поэтому давайте прикинем, насколько этот код опасный.

Как мы знаем, int находится в интервале [-2147483648, 2147483647], при этом, переполнение вызывает даже -2147483648 * -1 ))

Так насколько часто тут будет происходить переполнение?

Хотел изначально сгенерировать картинку, в которой пиксель (i, j) будет черным, если i * j вызывает переполнение. Заранее мозгом воспользоваться не сумел и понял, что ошибся в рассчетах, только когда кончилась оперативка и swap вырос в 50гб. Посчитал и оказалось, что такая картинка будет весить 1M петабайт. Упс))

Но в итоге все-таки сгенерировал картинку для char (2 картинка, -128, 127 по осям). Желтенькое - все ситуации, когда переполнения не будет. Таких ситуаций всего 3073. Маловато как-то - 0.04% всех возможных умножений не переполняется.

Утверждается, что для int процент умножений с переполнением вообще доходит до 99.9999993%.

Так что фразу "иногда бывает переполнение" корректнее писать так: "иногда бывает не переполнение"
🔥6👍2
Еще одна причина пользоваться не хромиум браузерами:
https://drewdevault.com/2020/03/18/Reckless-limitless-scope.html

Скорее всего новых браузеров уже не будет никогда. И технологий вроде AMP будет навязываться еще больше. Поэтому продолжаю пользоваться полумертвым Firefox до его последнего вздоха.

Кстати, говорят, что в хромиуме еще несколько лет назад количество строк кода стало больше, чем в ядре линукса.
👍4🔥1🫡1
Часто в школе, да и в универе, слышал, что компьютер не умеет генерировать честные случайные числа; компьютер детерменированный и лучшее, что он может предложить, - псевдослучайные числа PRNG, которые генерируются специальной хитрой функцией от заданного числа (сида), в качестве которого выступает время.

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

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

Компьютер действительно не может сам "выдумать" число, для этого он собирает биты энтропии из каких-то источников в реально мире. Ядро копит entropy pool - 4096 честно случайных бит. В ядре линукса используется 7 источников энтропии, среди которых, например, есть hardware random number generator - отдельное устройство, которое может собирать энтропию из звуков, температуры и тп.

Но 4096 честных случайных бит - слишком мало для нужд компьютера, потому что наполнять их дорого и долго. Поэтому используется CSPRNG - набор функций, которые являются криптографически безопасными, но в то же время генерирующие псевдослучайные числа. Такие генераторы используют биты энтропии и уменьшают её при каждой генерации, а в случае недостаточной энтропии блокируются, ожидая, пока случайные биты накопятся. Как раз такой генератор используется в /dev/random. Его можно использовать, но при высокой интенсивности запросов он будет часто блокироваться и скорость чтения из него будет сильно падать.

Поэтому существует /dev/urandom - который тоже использует биты энтропии, но не уменьшает общий пулл. Поэтому он не является CSPRNG, однако его можно использовать без риска блокировки.

Кроличья нора очень глубока оказалась, поэтому есть еще много тем, связанных с рандомом, которые хочется узнать)
👍3🔥2
Пошел читать Beautiful C++ потому что камон, ребят, это Козловский сам Страуструп рекомендовал её прочесть.

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

Но я не обзор книги хотел сделать, а поделиться классной находкой авторов.

В книге есть сниппеты с кодом и прикручена интеграция с godbolt.org. То есть на godbolt существуют специальные ссылки вида https://godbolt.org/z/cg30-ch к которым в конец можно приписать номер главы, например, 1.3, чтобы получилось https://godbolt.org/z/cg30-ch1.3. И при переходе по такой ссылке можно сразу же попасть на страничку с кодом из выбранной главы с описанием и комментами. Можно позапускать код и наглядно проверить утверждения из книги.

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

Только из-за этого факта прочту книгу полностью.
👍3🔥2👨‍💻1🫡1
There are more things in heaven and earth, Horatio.

Наткнулся на Shakespeare Programming Language - эзотерический язык программирования, код на котором выглядит, как произведения Шекспира. Там даже используется Шекспировское thou в паре с you в качестве ключевого слова.

Крайне трудно сейчас найти по нему какую-то значимую информацию, даже официальный сайт перестал работать в 21 году и существует только на вебархиве. Но я смог найти отличный от википедии кусочек кода, который выводит "HI" (на картинке).

Просто обожаю такие проекты, сразу появляется какая-то вера в человечество.

Вообще оказалось, что для "бесполезных, но сложных и прикольных" штук есть даже название - Software Art.

[Exeunt]
👍3🔥2🦄1
Существует такой термин Three Star Programmer. Это старый мем, обозначающий человека, который может писать и понимать код с тройными указателями: int ***i. Также если верить оригинальному посту (к сожалению, опять вебархив), то предлагалось ввести такую "звездочную" оценку крутости программиста. Чем больше звезд, тем круче.

Так что давайте быстренько станем все программистами 1000 уровня (на самом деле уровень ограничен только памятью). Создадим стремненький скрипт (картинка 2), который сгенерирует нам красивый код (картинка 3), который выведет 42.

Ура, вы прекрасны! Поздравляю с левелапом всех причастных)

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

Конечно, здорово повеселились, но какой максимальный уровень программистов существует в реальной жизни? Я полазил по гитхабу и нашел код, написанный программистом 4 уровня:
https://github.com/nginx/nginx/blob/master/src/core/ngx_cycle.h#L40

И код программиста 5 уровня:
https://github.com/mongodb/mongo/blob/master/src/third_party/mozjs/extract/mfbt/FunctionRef.h#L115

Выше уровень найти не смог(

Надеюсь, люди, понимающие этот код, еще существуют)

P.S. оба кода со скринов прикладываю в комменты
👍52👀2
Это хаскель? Это scala? Нет, это C++23.

Я опять все проспал, а оказывается тут такое

После появившегося в 17 плюсах std::optional теперь в 23 плюсах будет std::expected. И monadic operations для expected. И вот такой код уже очень модно выглядит.

auto res = square( 2 )
.and_then( mult_by_two )
.and_then( square );

Ну все, теперь можно говорить, что в плюсах можно писать на монадах?

std::expected уже заспавнился в популярных компиляторах, можно компилировать с -std=c++2b.

Всякие ссылки:

Proposal: https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2505r5.html

Cppreference: https://en.cppreference.com/w/cpp/utility/expected

Godbolt: https://godbolt.org/z/3a1j6d63a
👍4🤯32
Кстати, в тему монад и функционального программирования. Статья, в которой автор рассуждает над причинами смерти хаскеля.

Помимо очевидного "хаскель слишком хорош для этого неидеального мира", есть еще интересные пункты.

Причины смерти хаскеля, которые меня зацепили:

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

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

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

Сварщик я ненастоящий и рассвет хаскеля не застал, но все равно печально, что уходит эпоха. Мне нравилось жить и думать, что есть на свете сверхлюди, пишушие не код, а творящие искусство.
🫡4😢2😱1
Сегодня на паре говорили о кодировках (UTF-8, UTF-32, KOI8-R). И, естественно, поговорили про кодирование emoji в unicode.

Хотел показать, что некоторые emoji кодируются очевидно, например, 👩, а некоторые сложно, поэтому тыкнул в случайный. И оказывается совершенно случайно попал в самый необычный.

Уже привычно, что всякие составные смайлики вроде семьи 👨‍👩‍👧‍👦 кодируются как какая-то комбинация участников: 👨,👩, 👧,👦.

Но я был удивлен, когда увидел, что 👩‍🏭 кодируется как женщина + завод (👩 + 🏭).
Напомнило известный прикол с эмбеддингами: king-man+woman=queen
https://blog.acolyer.org/2016/04/21/the-amazing-power-of-word-vectors/

Подробнее с emoji можно покопаться тут: https://unicode.link. Там еще есть неожиданные приколы
🔥10👏32👍1
Оказывается, в godbolt можно в include писать ссылки, и код из них будет работать, как обычный include.

Получается, можно с гитхаба любые header-only библиотеки легко подключать и дебажить более удобно.

Смастерил пример: https://godbolt.org/z/W975h9qjE

Нужно только брать не любую ссылку, а заходить в файл и нажимать Raw. При этом работают как и обычные файлы, так и гисты.
🔥4👍21
Организовались вчера и провели мини-хакатон, чтобы уже наконец-то воскресить хоть одного зомби с кладбища начатых проектов. (В итоге есесна полностью доделать не удалось, но хоть сдвинулись с мертвой точки). 

Так как программировать удобнее и приятнее с линукса, а все остальное лучше на маке (don't blame me, blame society⌨️), то под каждый проект я арендую какую-нибудь тачку в облаке и делаю все на ней.

И каждый раз начинается бесконечная движуха с ключами.

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

И сегодня уже наткнулся на видос, где дядька невзначай поделился фанфэктом о ключах, который сам случайно узнал. И теперь по заветам фильма "Pay It Forward" я делюсь знанием с вами.

Так вот и суть поста (спасибо что не с сотворения мира начал).

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

Можно в гитхабе зайти на страничку пользователя и добавить к урлу .keys:

https://github.com/torvalds.keys

Таким образом получив список всех публичных ключей человека.

Уже удобненько, но дальше можно еще больше облегчить процесс, выполнив:


curl --silent https://github.com/torvalds.keys | head -n 1 >> ~/.ssh/authorized_keys


И регулируя параметр n сразу добавить нужный ключ в список authorized ключей.

Не скажу, что моя жизнь непоправимо улучшилась от этого знания, но немного удобнее стало :)
Please open Telegram to view this post
VIEW IN TELEGRAM
😱5👍3🤡1
Миша пишет код
Борьба за увеличение разнообразия онлайн пар продолжается. Попробовал сегодня провести пару и сыграть в стримера одновременно) В телеге сделал бота, в котором можно было нажимать кнопки и что-то происходило с видео: взрыв или появлялись мысли о Римской империи.…
Пока я жду, что OBS снова оживет на macOS Sonoma (сам дурак, конечно, повелся на интерактивные виджеты) и я смогу опять пользоваться ботом на парах, начинаю задумываться, как бы добавить в занятия какой-то интерактив без бота. Если коротко, то там проблема, что почему-то obs-server перестает в рандомный момент принимать запросы.

Подумал в сторону https://github.com/tmate-io/tmate

Раз уж я и так использую tmux, то я бы мог заменить его на tmate и поделиться доступом к сессии. Я вот как раз проверил, как это работает на мини-хаке в субботу, получилось прикольно. Самое классное, что можно делиться сессией в read-only режиме и в read-write режиме.

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

Также можно будет сразу себе код с пары скопировать, тоже удобно.

Пока не знаю, насколько это будет интересно, но какое-то разнообразие лучше, чем никакого)
👍4👏2
Ну вот я и добавился в клуб людей, которые даже в игрушечных проектах занудничают про безопасность)

Можно меня поздравить с моим первым (надеюсь, и последним) криптомайнером проникшим на сервер.

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

Но есть и приятный момент. Сразу становится очевидной польза от pet projects - рад ошибиться тут, где цена ошибки нулевая, а не в важном проекте, от которого могут зависеть другие люди.

К сожалению, я запаниковал и сразу вырубил сервак, поэтому бОльшая часть следов майнера удалилась (все файлы были в /tmp), так что теперь трудно разобраться, откуда он вообще взялся.

Буду разбираться, пока что все указывает в сторону неаккуратно написанного файлика docker-compose.yml.

Материалы по теме:

https://sysdig.com/blog/zoom-into-kinsing-kdevtmpfsi/

https://www.reddit.com/r/docker/comments/k2lwvd/protect_your_docker_containers_from_kinsing/
😱5🫡3👍1
Миша пишет код
Это хаскель? Это scala? Нет, это C++23. Я опять все проспал, а оказывается тут такое После появившегося в 17 плюсах std::optional теперь в 23 плюсах будет std::expected. И monadic operations для expected. И вот такой код уже очень модно выглядит. auto…
В 23 плюсах больше не будет поддержки сборщика мусора.

Стопстопстоп что?

Все с детского сада знают, что в C++ нет сборщика мусора. Что же тогда удалят?

Оказывается, в 2008 году предложили добавить некоторые функции для работы с указателями и описали, как должен работать GC. И в 11 стандарте они появились. Но большинство компиляторов так и не стали поддерживать этот функционал. Поэтому теперь за ненадобностью его удаляют. Так что физически в плюсах не было поддержки gc, хоть она и была описана в стандарте.

Но это не значит, что в C++ не используют сборщики мусора. Есть целая куча сторонних имплементаций, которые просто оказались удобнее предложенного в стандарте. Например, в плюсах Unreal Engine используется собственный GC.
Или, например, написанный на C++ движок V8 (на котором работает JS и WebAssembly) тоже использует собственный сборщик мусора.

Поэтому нельзя уверенно сказать, что в плюсах нет GC. В стандарте он был, в имплементации нет. Но библиотеки и виртуальные машины с GC были и есть.
🫡3👍2
2025/07/09 19:16:34
Back to Top
HTML Embed Code: