Telegram Web Link
Кроме Error, у меня на Rust-проектах свой Time.

TLDR: периодически устраивайте субботники и приводите рабочие инструменты в порядок.

Зачем:

- умеет делать From/Into в SystemTime и еще 100500 других

- я очень много работаю с таймстемпами. во-первых у меня сразу есть Time::now(), во-вторых я могу просто сделать Time + 100500, мне лень писать Duration. В-третьих у меня есть даже Time::yesterday(), в основном для serde default - у нас очень много API, где старт таймфрейма по-умолчанию за сутки до now.

- умеет десериализироваться из float, integer, тапла/массива [sec, nsec] и даже из строки (через dateparser)

- умеет сериализироваться в float (тяжелое наследие нашей легасни)

- теперь еще умеет записываться-читаться через sqlx в PostgreSQL (как TIMESTAMP/TIMESTAMPTZ) и Sqlite (как BIGINT в наносекундах)

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

Почему не подходят другие крейты/почему не выпущу как крейт: по причине см. From/To, де/сериализацию и базы. В каждом проекте/конторе своя политика и всё равно придется городить newtype вокруг готового.
👍13🔥4💩1
Вообще забавно с временем сделано в Эластике. Там у них date может хранить только миллисекунды. Поэтому они выпустили date_nanos, который может хранить наносекунды.

Но в date_nanos нельзя писать timestamp в наносекундах. Нужно писать его всё равно в миллисекундах. А если вы не сдались и всё же хотите наносекунды - конвертить numeric в ISO-строку.

Всё для людей, как в любом приличном ентерпрайзе.
😁28👍3
😁55👍9
Я его таки поломал
😁15👍4
Поскольку когда-то работал в ДЦ, у меня весь подвал забит старыми рэковыми корпусами и частично десктопами (да, на заре ДЦ ставили и десктопы на полки). Как говорил Жванецкий, кто что охраняет - тот то и имеет. Нормальные люди всё это в подвал складывают, потом их раз в 5-10 лет грабят и подвал чистый. А я на свою голову поставил крутые решетки и мой подвал 20 лет никто не трогал.

В общем скопилось у меня там этих корпусов штук 15. Приехал знакомый пару штук забрать, потому что делаю уборку и остальные скоро уедут на свалку. Грузимся, проходит рядом сосед. Я с ним не знаком, но по виду гуманитарий. Спрашиваю: "а вам не надо корпусов для компьютеров бесплатно?"

Сосед делает круглое лицо и начинает лихорадочно думать. И выдает встречный вопрос "компьютерный корпус, это... это какая-то оболочка для компьютера?"

Чувствую себя опять в 90х. Только мы уже с обратной стороны. Несите таблетки, несите.
😁31👍4🔥1💩1
Про здоровье.

Я всю карьеру тоже регулярно выгорал, имел синдром хронической усталости, ОКР, ВСД, навязчивые мысли, тревоги, состояния и спал по 8-9 часов и еще немножко в сиесту, а чтоб не выгорать - вел ЗОЖ и проходил с психологами родовые травмы до прабабушек. Пока внезапно не оказалось что у меня банально шалила печень, причем по-видимому шалила давно, сразу после бурной университетской молодости.

После фикса сам удивляюсь, как могу в 43 года высыпаться за 6 часов, а в 3 часа ночи, встав из-за компа, тут же проваливаться в сон. Не хвастаюсь, просто советую.

А если у вас совсем всё плохо - пересадите себе печень джуна, например.
👍32😁22🔥5
Когда подтверждаешь 3d secure через аппку, любой уважающий себя банк должен предложить тебе в это время:

- показать новости
- поставить апдейт
- посмотреть предложения партнёров
- заполнить анкету
- оценить приложение в магазине

И заставить сменить пароль.
😁32👍6💩2
Дал GPT4 линк на гитхаб с проектом на TS, попросил найти определенную таблицу и сделать функцию export to CSV, причем только для тех колонок, которые видимые в данный момент.

Робот с первого раза разобрался как включаются колонки и откуда берутся данные и написал функцию, которую кожаный мешок просто повесил на кнопку.

Кстати еще один повод теперь называть переменные и функции нормальными именами - их читают не только люди.

p.s. это уже как-то даже не смешно. хорошо что у меня еще лицензия электрика есть, а оно пока провода тянуть не умеет.
👍36🔥6
Когда государство пытается в IT.

20 млн сообщений я наверное даже в Sqlite впихну.
😁55👍2
У нас в нашем софте в кластере, если появилось два узла с одинаковым именем, репликация с них может немного ехать крышей.

Картина маслом - прод, репликация поехала крышей.

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

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

Выводы какие: если у вас серьезный прод, предусмотрите и одинаковые имена, и даже одинаковые IP. Как хотите, так и сделайте. Потому что оно будет и обязательно. И даже не надейтесь на авторизацию, port security и прочие изобретения "для дураков от дураков".
😁18👍7
Картина маслом во многих ЯП:

- забываешь склонировать объект
- начинаешь его менять
- объект меняется везде, по нескольку раз
- пару часов втыкаешь в это и не понимаешь, что происходит

Загоны по иммутабельности в Расте сначала кажутся странными, но к ним привыкаешь и начинаешь воспринимать как должное. Иногда вздыхая и проставляя mut, где компилятор бьет по рукам. А на самом деле ты уже зажрался и не понимаешь, от каких серьезных проблем тебя защищают.
👍45💩6🔥3😁2
Сегодня на буткемпе немного обсуждали вопросы кеширования результата функций в Расте. А в канале будем рассматривать популярный крейт "cached".

Кеширование бывает полезно. Пример из реальной жизни: к вам приходит куча метрик с id: String, а вам нужно этот String немного отформатировать, например заменить или выбросить всякие неположенные символы. Варианта тут два: либо вы имплементируете кеширование сами, либо используете готовый крейт.

Условия тестирования: приходит строка, у которой половина символов - "левые", их нужно заменить на triple underscores (___). Я использовал 1000 различных строк, что примерно встречается у меня в проде.

При длине строки в 10 символов:

- "ручное" кеширование в unbounded Mutex<BTreeMap<String, Arc<String>>> (или простой bounded FIFO на Map+Deque) даст буст примерно на 100%
- cached не даст практически ничего

При длине строки в 20 символов:

- Map даст буст примерно на 300%
- cached даст уже около +100%

При увеличении длины до 30 символов, получим +400% на Map и +150% с cached.

Комментарии насчёт cached:

- Крейт дает удобные проц-макросы, которые легко навесить на функцию.
- Проц макрос делает тоже самое, что делалось руками - создает static Lazy<Mutex<Storage>> и фантом-клон оригинальной функции.
- К сожалению, проц-макрос отвратительно работает с рефами на строки и прочие большие структуры - сначала переводит в Owned, а уже потом ищет по &ключ или вставляет (при этом Entry API не использует). Как вариант для строк - писать "кешированную" функцию самому и использовать из cached только хранилища. Таким образом можно получить результаты, которые всего на 1/4 хуже, чем использовать напрямую Map, при этом иметь честный LRU.
- Проц макрос использует только стандартный Mutex, при замене на parking_lot можно выиграть еще ~1/5 буста.

Выводы: cached - неплохой крейт с кешами, но кеширование функций из коробки - есть вопросы, если нужно на вход что-то сложнее, чем числа.
👍16
О работе с procfs из асинхронного кода.

procfs, sysfs и прочее - системы виртуальные и как такового I/O на реальные устройства у них нет. Поэтому есть мнение, что можно из procfs безопасно читать, как из соседнего вектора и никакого I/O оверхеда не будет.

Но у Linux свои планы на этот счет, операция через файловые дескрипторы - есть операция через файловые дескрипторы. И если обычно она на procfs занимает пару десятков микросекунд, то в зависимости от настроения системы, может вырастать до 4-5ms.

Если вас устраивает блочить рантайм на 5ms - читайте синхронно. Если же нет - все крейты, которые "удобно работают" с procfs с синхронным кодом под капотом - в отдельные blocking threads.
👍7🔥3💩1
Когда в Linux (или другой OS c X11) нужно скопировать содержимое текстового файла, чтобы потом его куда-то вставить, совсем не обязательно открывать его или делать cat, а потом выделять текст и копировать, можно сделать просто "xclip < filename" или "grep lines file.txt | xclip", если нужно скопировать с пайпа.

При работе с клипбордом часто смущает, что в X11 их исторически три (я старый, я помню времена, когда был один):

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

XA_SECONDARY - нестандартизирован, может использоваться приложениями, как им захочется.

XA_CLIPBOARD - то, что в наше время мы знаем, как буфер обмена, и то что используют все современные приложения.

Тем не менее, некоторые каноничные программы продолжают использовать XA_PRIMARY, из-за чего ньюфаги *NIX систем часто злятся и кладут кирпичи. Выход - либо использовать тот же xclip для "конвертирования" между буферами обмена (он умеет и ввод и вывод содержимого), либо патчить.

В самом xclip, кстати, XA_PRIMARY - тоже буфер по-умолчанию, но это решается аргументом "-selection clipboard"
👍17🔥8
Переводили с GPT мой nvim конфиг на lua (наконец я это сделал).

Всё хорошо, только этот шлимазл выкинул часть моих плагинов, зато насовал мне каких-то левых. Следите за ним.
😁34🔥2👍1
Аналитическая компания, когда продаёт прогноз клиенту: у нас данные в базе со времен, когда ещё Земля стояла на китах!

Аналитическая компания, когда закупает аналитический софт: какие данные? ой вей. за шо вы просите столько денег? нам всего две странички из екселя обрабатывать!
😁22👍4
26-27 февраля в 15-30 по GMT буду выступать на Cyber Scotland Week по вопросам безопасности промышленных систем (на шотландском языке, само собой).

Если кто захочет послушать - забейте себе в календарь и заходите (ивента два).

https://www.cyberscotland.com/event/digital-frontier-secure-iiot-solutions-development-with-eva-ics/

https://www.cyberscotland.com/event/novel-battlefield-defending-operational-technology-with-eva-ics/
👍12🔥4😁1
Аналитики Group IB предупреждают о новой malware под кодовым названием GoldFactory.

ПО нацелено на кражу биометрии жертвы (модель лица), затем - денег из тех платёжных систем, которые уже внедрили передовые системы авторизации для лохов.

В данный момент существуют версии под iOS и Android, основные жертвы - жители Таиланда и Вьетнама.

Использование биометрии для авторизации - худшее, что можно внедрить. Это будет кстати частью моего выступления на CSW. Пароль вы хотя бы можете поменять. Лицо и пальцы - не очень. И не надо рассказывать про передовые сканеры, которые отличают реальную биометрию от копии. Передовые жулики тоже на месте не сидят.
👍37🔥6
2025/09/17 03:53:41
Back to Top
HTML Embed Code: