Новый malware под Android "FakeApp.AFZ" мало того, что нужно установить самому - чтобы он украл деньги, нужно их ему послать тоже самостоятельно.
Малварь мотивирует это сделать, обещая прибыли от криптовалют. Многие верят.
Малварь мотивирует это сделать, обещая прибыли от криптовалют. Многие верят.
Делаю OAuth2 вход
- Google: works
- Github: works
- Microsoft: unknown error
unknown, Карл!
- Google: works
- Github: works
- Microsoft: unknown error
unknown, Карл!
Немец из города Квикборн получил за один раз 1700 заказных писем из налоговой. 27 октября в 2 часа ночи он обнаружил, что забыл пароль от личного кабинета и отправил заявку на восстановление.
Из-за перевода времени, скрипт отработал 1700 раз. Потому что в Германии ночью лучше спать.
Из-за перевода времени, скрипт отработал 1700 раз. Потому что в Германии ночью лучше спать.
В последнем BUS/RT у клиентов появился "странный" для pub/sub метод publish_for. Зачем нужно писать "приватные" сообщения в топики? Рассмотрим ситуацию.
Алиса имеет значение сенсора и публикует его в топик при изменениях или с некторым интервалом.
Боб хочет при запуске клиента получить значения сенсора как можно быстрее. Он высылает запрос и Алиса публикует значение специально для него, не заставляя других подписчиков процессить значение, которое у них уже есть.
Боб мог бы использовать RPC-вызов и получить значение сенсора в нем. Но в реальности существует несколько факторов:
- Бобу лень вызывать RPC. У него уже настроена логика процессинга данных из топиков и городить еще один велосипед не имеет смысла.
- Бобу лень разбираться с data races, в случае если pull некоторого старого значения и push нового придут примерно одновременно. В случае запроса на publish_for, Алиса может временно залочить изменения сенсора, пока Бобу не уйдет анонс по каналу и датарейса не возникнет.
Лень - двигатель прогресса. Как всегда.
Алиса имеет значение сенсора и публикует его в топик при изменениях или с некторым интервалом.
Боб хочет при запуске клиента получить значения сенсора как можно быстрее. Он высылает запрос и Алиса публикует значение специально для него, не заставляя других подписчиков процессить значение, которое у них уже есть.
Боб мог бы использовать RPC-вызов и получить значение сенсора в нем. Но в реальности существует несколько факторов:
- Бобу лень вызывать RPC. У него уже настроена логика процессинга данных из топиков и городить еще один велосипед не имеет смысла.
- Бобу лень разбираться с data races, в случае если pull некоторого старого значения и push нового придут примерно одновременно. В случае запроса на publish_for, Алиса может временно залочить изменения сенсора, пока Бобу не уйдет анонс по каналу и датарейса не возникнет.
Лень - двигатель прогресса. Как всегда.
Forwarded from Блог*
#prog #amazingopensource
ripgrep-all — ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.
Поддерживает добавление пользовательских адаптеров для поиска внутри файлов других типов.
ripgrep-all — ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.
Поддерживает добавление пользовательских адаптеров для поиска внутри файлов других типов.
GitHub
GitHub - phiresky/ripgrep-all: rga: ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.
rga: ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc. - phiresky/ripgrep-all
На данный момент WebTransport (вещь over HTTP/3) выглядит самым перспективным протоколом для новых проектов. Уже довольно неплохо гоняется в продакшне.
Из плюсов:
- У вас есть UDP. Как только клиент и сервер создают соединение, датаграммы могут гоняться в обе стороны, не важно что клиент сидит за тремя натами. Натопробивалка в комплекте.
- У вас есть потоки, которые внутри тоже UDP, но по API очень похожи на TCP. Кто в HTTP/2 игрался с потоками, тот в курсе, кто нет - можно разделять один TCP (в данном случае reliable UDP) сокет на несколько виртуальных. Основное отличие WT - потоки работают независимо, и если один остановился/оборвался - другие продолжают работу.
- У этого всего довольно минимальный overhead, если делать свое решение по любому пункту на коленке, скорее всего выйдет явно хуже.
- У вас сразу из коробки шифрование.
Из минусов:
- Шифрование принудительное. Микросервисы на локалхосте будут тоже шифроваться от админа и друг от друга.
- Пока что это - draft, со всеми вытекающими. в Chromium-based работает более-менее стабильно, в Firefox могут быть сюрпризы (вплоть до креша процесса)
- Оттуда же - под Rust-std оно работает вполне прекрасно. Под Rust-wasm - очень похоже на то, как выглядел embedded-hal или Tokio 5 лет назад - ад, пиздец и исключительно для энтузиастов. Под всякий bare-metal embed - просто не существует.
Из плюсов:
- У вас есть UDP. Как только клиент и сервер создают соединение, датаграммы могут гоняться в обе стороны, не важно что клиент сидит за тремя натами. Натопробивалка в комплекте.
- У вас есть потоки, которые внутри тоже UDP, но по API очень похожи на TCP. Кто в HTTP/2 игрался с потоками, тот в курсе, кто нет - можно разделять один TCP (в данном случае reliable UDP) сокет на несколько виртуальных. Основное отличие WT - потоки работают независимо, и если один остановился/оборвался - другие продолжают работу.
- У этого всего довольно минимальный overhead, если делать свое решение по любому пункту на коленке, скорее всего выйдет явно хуже.
- У вас сразу из коробки шифрование.
Из минусов:
- Шифрование принудительное. Микросервисы на локалхосте будут тоже шифроваться от админа и друг от друга.
- Пока что это - draft, со всеми вытекающими. в Chromium-based работает более-менее стабильно, в Firefox могут быть сюрпризы (вплоть до креша процесса)
- Оттуда же - под Rust-std оно работает вполне прекрасно. Под Rust-wasm - очень похоже на то, как выглядел embedded-hal или Tokio 5 лет назад - ад, пиздец и исключительно для энтузиастов. Под всякий bare-metal embed - просто не существует.
Криптография в Rust и кровавый ентерпрайз. Поскольку rustls - библа без сертификаций, люди годами мучались с openssl, а на винде дёргали системное криптоапи напрямую или через кривые прокладки.
К счастью, с февраля этого года rustls позволяет использовать амазоновское libcrypto как бекенд, а оно, в свою очередь, сертифицировано на FIPS-140-3.
В этом месяце начали новый проект уже с rustls а не openssl и я по этому поводу весьма счастлив. Из нюансов - на винде libcrypto в fips-режиме для сборки требует nasm.
К счастью, с февраля этого года rustls позволяет использовать амазоновское libcrypto как бекенд, а оно, в свою очередь, сертифицировано на FIPS-140-3.
В этом месяце начали новый проект уже с rustls а не openssl и я по этому поводу весьма счастлив. Из нюансов - на винде libcrypto в fips-режиме для сборки требует nasm.
Вчера вспомнил внезапно про Master of Orion (1993), решил сыграть партейку, в результате воевал до утра. Вот был же баланс нормальный в играх, и был интерес.
Кстати права на MOO прямо с первого выкупила внезапно Wargaming. А как вы играете в DOS-игры?
Кстати права на MOO прямо с первого выкупила внезапно Wargaming. А как вы играете в DOS-игры?
Anonymous Poll
27%
Dosbox
3%
Комп с DOS на bare-metal
3%
VMWare/VirtualBox/etc.
4%
Веб-эмулятор
62%
Дед, таблетки...
Ехал сегодня на убере, водила рассказал, что Трамп опять разрешит писать критические приложения на C++
Лайфхаки. В Университете Токио не хотели, чтоб научные материалы читали китайские студенты и препады, поэтому накидали на сайте надписи "tiananmen square" со style="display: none"
После чего сайт университета автоматически был надежно забанен в Китае и японцам не пришлось конфигурить собственные фаерволы.
После чего сайт университета автоматически был надежно забанен в Китае и японцам не пришлось конфигурить собственные фаерволы.
В 1976 году доктор Байер из Kodak запатентовал новый фильтр для цифровых камер, принцип которого заключался в том, что за красный и синий цвета отвечает по одному сенсору, а за зелёный - два. Исходное изображение, соответственно, кодируется как RGGB, BGGR или в другой комбинации, в которой зелёный получает в 2 раза больше бит, чем остальные.
Смысл в том, что человек - существо, привыкшее жить на деревьях (кто не верит в эволюцию - все равно в саду Эдема), и наш глаз различает намного больше оттенков зелёного, чем любого другого цвета.
В результате изобретения Байера, цвета на цифровой фотографии резко стали куда более "живыми" и естественными. Сегодня фильтр Байера или десятки его производных вариантов, используются как в профессиональных камерах, так и в обычных мобильных телефонах. Один из секретов "крутой" камеры iPhone 10 лет назад - как раз фильтр "Quad Bayer" разработки Sony, начиная с 6й модели. Впрочем, конкуренты тоже быстро это выяснили и внедрили похожее в своих матрицах. Samsung, например, "сидят" на Nonacell SFA, с тем же принципом - 9 синих, 9 красных и 18 зелёных сенсоров на группу из 3*3 пикселей.
Смысл в том, что человек - существо, привыкшее жить на деревьях (кто не верит в эволюцию - все равно в саду Эдема), и наш глаз различает намного больше оттенков зелёного, чем любого другого цвета.
В результате изобретения Байера, цвета на цифровой фотографии резко стали куда более "живыми" и естественными. Сегодня фильтр Байера или десятки его производных вариантов, используются как в профессиональных камерах, так и в обычных мобильных телефонах. Один из секретов "крутой" камеры iPhone 10 лет назад - как раз фильтр "Quad Bayer" разработки Sony, начиная с 6й модели. Впрочем, конкуренты тоже быстро это выяснили и внедрили похожее в своих матрицах. Samsung, например, "сидят" на Nonacell SFA, с тем же принципом - 9 синих, 9 красных и 18 зелёных сенсоров на группу из 3*3 пикселей.
Немного о веб-плагинах.
Представьте что у вас есть React-CSR-приложение и вы хотите разрешить юзерам писать под него плагины.
Первое, что необходимо знать - как работают импорты модулей. Проще всего, когда сторонний модуль собран как umd - он поддерживает import в рантайме без приседаний, сам становится как window.ModuleName и зависимости ищет там же.
React и некоторые другие фреймворки требуют, чтобы в приложении работала только одна копия. Да и вам, скорее всего, захочется, чтобы плагин взаимодействовал с вашим API через некоторый глобальный контекст модулей. Поэтому никакие рантайм-версии реактов не подгружаем, а делаем руками
для каждого интересующего нас модуля.
Второй этап - научиться собирать плагин-модулинезаметно для санитаров. Дело в том, что современные бандлеры - слишком умные и пытаются запаковать всё что можно, не смотря на объявленные externals, причем логику часто не понимает сам производитель.
Для начала, советую взять webpack - он самый предсказуемый. vite, например, начиная с 5й версии, срал на externals и пытается вам насильно запаковать React во всех случаях, кроме "jsx": "preserve" в tsconfig.json. Имеются и другие нюансы, например umd default export у webpack - window.ModuleName.default, а у vite - window.ModuleName. Такие ситуации должен уметь разруливать уже ваш загрузчик.
Современные веб-плагины -ебля увлекательная занятие интересное. Неудивительно, что нормально они реализованы в полторы приложениях, а CSR все вообще стараются избегать. Тем не менее, стабильная реализация оказывается возможна.
Представьте что у вас есть React-CSR-приложение и вы хотите разрешить юзерам писать под него плагины.
Первое, что необходимо знать - как работают импорты модулей. Проще всего, когда сторонний модуль собран как umd - он поддерживает import в рантайме без приседаний, сам становится как window.ModuleName и зависимости ищет там же.
React и некоторые другие фреймворки требуют, чтобы в приложении работала только одна копия. Да и вам, скорее всего, захочется, чтобы плагин взаимодействовал с вашим API через некоторый глобальный контекст модулей. Поэтому никакие рантайм-версии реактов не подгружаем, а делаем руками
import * as React from "react";
window.React = React;
для каждого интересующего нас модуля.
Второй этап - научиться собирать плагин-модули
Для начала, советую взять webpack - он самый предсказуемый. vite, например, начиная с 5й версии, срал на externals и пытается вам насильно запаковать React во всех случаях, кроме "jsx": "preserve" в tsconfig.json. Имеются и другие нюансы, например umd default export у webpack - window.ModuleName.default, а у vite - window.ModuleName. Такие ситуации должен уметь разруливать уже ваш загрузчик.
Современные веб-плагины -
CVE-2024-49071 - Windows Defender индексирует файлы в папках юзеров. После чего любой юзер имеет доступ к базе дефендера.
Я говорил, Шиндовс очень сложная система. Все против тебя.
Я говорил, Шиндовс очень сложная система. Все против тебя.
У V4L был фатальный недостаток, ну вы понимаете. Поэтому энтузиасты собрались и создали стильную, модную и молодежную libcamera.
libcamera призвана полностью заменить V4L, но к счастью она еще это не сделала. Тем не менее, поддержка многих современных камер работает только в ней. Если вы решили всунуть в проект либкамеру, готовьтесь к следующему:
- libcamera -написана через жопу динамически развивающийся проект. Поэтому вам, скорее всего, придётся собирать её с нуля.
- у libcamera есть mainstream-ветка а также форки от производителей железа, которые не согласны с разработкой mainstream, поэтому есть шанс, что вам нужен будет именно форк
- выберете вы форк или mainstream, есть большой шанс, что без патчей оно всё равно не соберется
- билд-система libcamera построена на meson, причем на свежих версиях, так что вам придётся тянуть везде питон
- раст-крейты под libcamera по качеству не уступают самой библиотеке
libcamera призвана полностью заменить V4L, но к счастью она еще это не сделала. Тем не менее, поддержка многих современных камер работает только в ней. Если вы решили всунуть в проект либкамеру, готовьтесь к следующему:
- libcamera -
- у libcamera есть mainstream-ветка а также форки от производителей железа, которые не согласны с разработкой mainstream, поэтому есть шанс, что вам нужен будет именно форк
- выберете вы форк или mainstream, есть большой шанс, что без патчей оно всё равно не соберется
- билд-система libcamera построена на meson, причем на свежих версиях, так что вам придётся тянуть везде питон
- раст-крейты под libcamera по качеству не уступают самой библиотеке
По работе часто встречаю железки с SNMP. К сожалению, в Rust с ними вменяемо работает только один крейт, собственно snmp, но автор забил на него 7 лет назад окончательно. Я же годами бегал вокруг-около и дописывал внутренние патчи и внешние микромодули.
Внезапно попалась железка, опрос которой нужно перетащить с питона на раст, которая поддерживает только SNMPv1, а в крейте, опять же внезапно, оказалось поддержки первой версии нету (хотя очень удивительно, v1 отличается от v2 по сути только тем, что в v2 добавили 64-битные counters, а в v1 их нет). В оригинальном крейте валялся PR, чуть менее старый чем сам крейт, где автор зачем-то вместе с v1 притащил tokio.
В общем, поскольку в Европах выходные, а я не пью, решил наконец этот крейт форкнуть. Из чего появился мой красивый и современный snmp2.
Из основого, что изменилось:
- собственно поддержка SNMPv1
- немного поменялось PDU API и теперь им можно прекрасно обрабатывать любые TRAPs (добавил пример)
- MIBs (под фичей, требует libnetsnmp)
- привел более-менее весь код к современному виду
- главное - смигрировал велосипедный Object Identificator на Oid из крейта asn, который давно стандарт во всей растовской X.690-экосистеме
- добавил async (под фичей)
Оно работает и даже хорошо. Будем в январе наконец запиливать туда и SNMPv3.
p.s. Пользуясь случаем, всех с наступающими и наступившими.
Внезапно попалась железка, опрос которой нужно перетащить с питона на раст, которая поддерживает только SNMPv1, а в крейте, опять же внезапно, оказалось поддержки первой версии нету (хотя очень удивительно, v1 отличается от v2 по сути только тем, что в v2 добавили 64-битные counters, а в v1 их нет). В оригинальном крейте валялся PR, чуть менее старый чем сам крейт, где автор зачем-то вместе с v1 притащил tokio.
В общем, поскольку в Европах выходные, а я не пью, решил наконец этот крейт форкнуть. Из чего появился мой красивый и современный snmp2.
Из основого, что изменилось:
- собственно поддержка SNMPv1
- немного поменялось PDU API и теперь им можно прекрасно обрабатывать любые TRAPs (добавил пример)
- MIBs (под фичей, требует libnetsnmp)
- привел более-менее весь код к современному виду
- главное - смигрировал велосипедный Object Identificator на Oid из крейта asn, который давно стандарт во всей растовской X.690-экосистеме
- добавил async (под фичей)
Оно работает и даже хорошо. Будем в январе наконец запиливать туда и SNMPv3.
p.s. Пользуясь случаем, всех с наступающими и наступившими.