1.83K subscribers
3.24K photos
127 videos
15 files
3.52K links
Блог со звёздочкой.

Много репостов, немножко программирования.

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
#prog #csharp #article

Тут вот на Хабре недавно была статья про тестовое задание, суть которого сводилось к тому, чтобы распарсить расписание в cron-подобном формате и потом иметь возможность делать к нему запросы на ближайший описываемый расписанием момент времени относительно заданного аргумента, причём как в будущее, так и в прошлое. Аффтар Автор негодовал из-за того, что он это тестовое задание выполнил, но его решение завернули без внятного фидбека, поэтому он выложил свой вариант на всеобщее обозрение. Зрелище, мягко говоря, не для слабонервных: практически нулевая декомпозиция, куча сложной логики с копипастой и if-ы с семикратной (!) вложенностью. Вдобавок, автор почему-то оптимизировал парсинг, а не получение моментов времени.

Сама задачка, однако, всё же застряла у меня в голове, и у меня были идеи, как можно красиво сделать как минимум парсинг формата расписания. К сожалению, у меня так и не дошли руки до написания кода. А вот у PsyHaste, известного в телеге, как @Psilon — дошли. Используя тот же язык, что и у автора оригинальной статьи — C# — он написал своё решение, с монатками монадками и, внезапно, обоснованным goto (который, впрочем, потребовался исключительно в силу отсутствия в C# оператора continue по метке). Вышло на редкость понятно и читаемо. Об этом он написал свою статью, которую я вас и приглашаю прочитать — и не только в силу технических решений, но и потому, что у Алекса довольно приятный слог.

(тут должна быть рекомендация блога Алекса, но его нету)
#prog #rust #parsing #article

Почему-то в блоге не было ссылки на доходчивую статью про реализацию парсер-комбинаторов на Rust с нуля. Исправляюсь: оригинал, перевод на хабре.
#prog #rust #gamedev

Движок Bevy отмечает свой первый юбилей. Для тех, кто не в курсе — это движок, который изначально разрабатывался с фокусом на производительность и быстрые итерации разработки при помощи замены кода сцен на ходу (thanks @lomain за исправление). Когда Bevy только появился, он произвёл небывалый фурор в расто-геймдево кругах, и за год оброс крутыми фичами (о которых рассказано в посте) и сменил версии с 0.1 до 0.5 — и при этом скоро выходит 0.6! Всё во имя святого Грааля игровых движков, так сказать.

Из нетехнического — автор также упоминает о том, как разросся поток информации, с которым ему пришлось иметь дело, и о том, как он немного выгорел и теперь постепенно отпускает бразды правления.
Окей, гугл, как перестать эмоционально привязываться к малознакомым людям
#prog #soc #ml

Антон разобрался в теме лучше меня, тормоза, и весьма внятно расписал ситуацию. Спасибо, Антон.
Forwarded from Generative Anton
Forwarded from Generative Anton
Недавно некоторые СМИ писали и перевсполошились, что Apple теперь будет искать снимки и видео с насилием над детьми автоматически и сообщать куда надо. Но нас интересует не эта этически-правовая сторона вопроса, а техническая реализация.

Чтобы снимки никуда не отправлялись (представьте заголовки “Apple решила собрать самую большую библиотеку медиа насилия над детьми”), это будет происходить на устройстве. Для каждой фотографии будет считаться NeuralHash. И это такой вот алгоритм (Neural как бы уже говорит про ML), который умеет не обращать внимания на кропы/шумы/вотермарки и возвращать одинаковый хеш для двух одинаковых по контенту фотографий. Работает он на удивление хорошо. В идеале: помечаешь один раз непотребство, а потом оно само начинает мониториться по хешу. Но есть проблема.

Hash в названии алгоритма отвечает, как можно догадаться, за собственно хеш изображения/контента на фотографии/называйте как хотите. Мораль истории в том, что одна из самых прекрасных вещей в хеш-функциях (даже если они Neural) — коллизии.

Умные люди поковырялись и выяснили, что оказывается для NeuralHash существует два типа коллизий: естественные и искусственные.

С искусственными все просто: есть картинка и мы на нее таким образом накладываем шум, чтобы ее хеш был равен хешу необходимой картинки. В общем это все очень старо и применялось еще в безопасности, когда зараженные файлы пытались прикинуться здоровыми, добавляя себе такие байты, чтобы хеш был равен исходному, и антивирус считал, что с файлом все хорошо. Ну и все современные Adversarial Attacks создаются таким же механизмом.

Другое дело естественные коллизии. Только в ImageNet’e их нашлось аж 2 пары: топор-нематода и гвоздь-горная лыжа. Есть даже репозиторий с обновляемым списком найденных коллизий.

Интересно, когда уже Adversarial Attacks перестанут быть маргинальными игрушками (прости, Свят) и станут серьезной дыркой в безопасности крупных корпораций. Еще интереснее, как с этим будут бороться, потому что сейчас собираются затыкать человеком с другой стороны, который глазками отсмотрит всю непотребщину, что вызывает такие же этические вопросы, как и модераторы Facebook, страдающие от депрессии и шутящие над пришедшим на модерацию суицидом.
В СМЫСЛЕ УЖЕ СЕНТЯ а не, рано
xxx: Как приятно, когда пайплайны проходят 🙂
yyy: Если ваши пайплайны проходят, это значит что мало тестов написано 8))

#трудовыебудни
Forwarded from dev optozorax
Видео про самые дикие числа в математике. #repost

Если вы считаете что преисполнились в своём познании зная про i²=-1 и ε²=0 (дуальные числа), то приготовьте уран.

В данном видео показывается простая игра, в которой есть два игрока и граф, прикреплённый к полу с красными и синими палками. Суть игры в том чтобы последовательно ходить и отрезать ветки своего цвета. Выигрывает тот кто сделал ход последним. От графа зависит то кто гарантированно выиграет если будет следовать оптимальной стратегии. Поэтому математики захотели описать граф числом — положительные обозначают выигрыш синего игрока, а отрицательные — выигрыш красного. Определение величины числа производится через добавление другого графа сбоку, который может сбалансировать игру до невыигрышного состояния. Сначала мы приходим к целым числам: положительным, отрицательным и ноль. Затем приходим к дробям двойки. Затем добавляется зелёная палка, которую могут рубить оба и начинается жесть: появляются очень странные числа, которые меньше любого обычного числа, которые называют * (star), затем появляются числа (up) и (down), которые не равны *. Ну и потом математики упарываются по-полной и в попытках описать самые разные графы приходят к сюрреалистичным видам чисел: бесконечностям, самому маленькому возможному числу tiny и так далее. Самых различных чисел настолько много что математики уже стали рисовать зоопарки с животными и географические карты чисел. И в отличие от комплексных чисел, здесь всё _упорядочено_, то есть любое число можно сравнить с другим и сказать кто из них больше.

Знаете, одно дело выдумывать числа из воздуха, а другое — просто брать их из игры, то есть из своего рода реальности. И всё это так красиво выглядит, что я испытал математический оргазм во время просмотра. Теперь я хочу купить 1000-страничную книгу из которой взята эта тема и прочитать её. Кстати, одним из авторов этой книги является Джон Конвей.

Видео длится 57 минут, сделано через рисовалку от 3blue1brown и (я надеюсь) обязательно займёт призовое место в SoME1. Автор этого видео очень старался, делал видео суммарно 200 часов, и это его первый опыт. Но у видео на данный момент всего 800 просмотров, и оно не очень хайпит, поэтому СМОТРИТЕ, ЛАЙКАЙТЕ, РЕПОСТИТЕ ЧТО ЕСТЬ СИЛ.
👍1
Forwarded from partially unsupervised
Today I learned: в pytest можно легко тестировать логирование. Не нужно самому возиться с моками для логгера, все уже готово - достаточно использовать дефолтную фикстуру caplog (пример использования для ленивых).

Очень удобно, если у вас бывает своеобразный код, где логи - это единственный side effect. С другой стороны, такой код может быть и звоночком - возможно, с дизайном что-то не так.
#blogrecommendation не глядя
Итак, я всё-таки сделал себе блог! Теперь он доступен по адресу ihatereality.space.

И там уже есть моя статья “Why null sucks, even if it's checked”!

Блог работает на Zola и GH pages. Все сорцы открытые, если вдруг кто-то хочет посмотреть/стырить мои настройки =)