Иногда коллеги спрашивают, что я использую в Rust для веб-серверов. Я использую только Hyper.
Опираясь на личный опыт поддержки проектов годами и даже десятилетиями. Обычно через долгое время проект представляет собой монстра, в котором "живут" несколько поколений совершенно разных API, а статика отдаётся по какой-то дикой логике. Из фреймворка давно выпилен роутер и заменен на что-то кастомное. А остальное - обвешено десятками модулей, функционал которых рано или поздно всегда упирается в API этого самого фреймворка и что-то делается костылями, а что-то вообще никак. В особо тяжелых случаях фреймворк приходится форкать, со всеми вытекающими.
В Hyper у меня один handle, в который пришел Request и некоторые параметры коннекта, по желанию. А я должен отдать Response. Поддерживаются стримы для body первого и второго и нет ничего лишнего.
И это прекрасно. Мой веб-сервер - мои правила.
Опираясь на личный опыт поддержки проектов годами и даже десятилетиями. Обычно через долгое время проект представляет собой монстра, в котором "живут" несколько поколений совершенно разных API, а статика отдаётся по какой-то дикой логике. Из фреймворка давно выпилен роутер и заменен на что-то кастомное. А остальное - обвешено десятками модулей, функционал которых рано или поздно всегда упирается в API этого самого фреймворка и что-то делается костылями, а что-то вообще никак. В особо тяжелых случаях фреймворк приходится форкать, со всеми вытекающими.
В Hyper у меня один handle, в который пришел Request и некоторые параметры коннекта, по желанию. А я должен отдать Response. Поддерживаются стримы для body первого и второго и нет ничего лишнего.
И это прекрасно. Мой веб-сервер - мои правила.
Протестировал Mold (https://github.com/rui314/mold) и как он дружит с Rust. Это альтернативный линкер, который быстрее обычного, за счёт грамотных алгоритмов распараллеливания и прочего.
Тестировал на нашем PSRT (https://github.com/alttch/psrt), собирал только сервер. Проц Core i7-11800H (16 ядер).
В обычном режиме - Mold однозначно выигрывает по скорости, примерно 20-30% (5 секунд на линковку против 7). При включении LTO - разницы нету, иногда даже проигрывает стандартному.
Вердикт: хорошо использовать при разработке, если у вас в проекте один большой бинарник или shared lib, время линковки оно ускорит. Причем чем больше бинарник, тем больше будет эффект. Для сборки релизов, если включены LTO и прочие оптимизации - смысла нет.
Себе пока ставить не буду - при сборке сам Mold требует std::span, а он есть только в C++ 20, на моей Ubuntu 20.04 LTS его еще не изобрели.
Тестировал на нашем PSRT (https://github.com/alttch/psrt), собирал только сервер. Проц Core i7-11800H (16 ядер).
В обычном режиме - Mold однозначно выигрывает по скорости, примерно 20-30% (5 секунд на линковку против 7). При включении LTO - разницы нету, иногда даже проигрывает стандартному.
Вердикт: хорошо использовать при разработке, если у вас в проекте один большой бинарник или shared lib, время линковки оно ускорит. Причем чем больше бинарник, тем больше будет эффект. Для сборки релизов, если включены LTO и прочие оптимизации - смысла нет.
Себе пока ставить не буду - при сборке сам Mold требует std::span, а он есть только в C++ 20, на моей Ubuntu 20.04 LTS его еще не изобрели.
GitHub
GitHub - rui314/mold: Mold: A Modern Linker 🦠
Mold: A Modern Linker 🦠. Contribute to rui314/mold development by creating an account on GitHub.
Немного исследований по поводу machine learning в IoT:
- основная цель ML в промышленных процессах - accident prevention и predictive maintenance. остальное - либо баловство, либо уже не только промышленное
- не смотря на то, что в 99% случаев применяется LSTM, не существует универсальной конфигурации нейросети, которая решит любую задачу
- как и в любой другой области, сталкиваясь с незнакомым состоянием системы, нейросеть начинает генерить полный бред и пока не может заменить человека-оператора. Нейросеть руководствуется только "опытом", человек - знаниями, интуицией, в конце концов есть звонок другу
- основная цель ML в промышленных процессах - accident prevention и predictive maintenance. остальное - либо баловство, либо уже не только промышленное
- не смотря на то, что в 99% случаев применяется LSTM, не существует универсальной конфигурации нейросети, которая решит любую задачу
- как и в любой другой области, сталкиваясь с незнакомым состоянием системы, нейросеть начинает генерить полный бред и пока не может заменить человека-оператора. Нейросеть руководствуется только "опытом", человек - знаниями, интуицией, в конце концов есть звонок другу
Я кстати получал магистра в Computer Science именно в Artificial intelligence и впервые за 25 лет наличия диплома делаю что-то вменяемое по специальности.
Тогда, 25 лет назад, никакого этого вашего TensorFlow не было и в помине. Нас учили немножко анализировать руками матрицы и графы на прологе, и очень много C и С++, потому что (цитирую) "С помощью С/С++ вы сможете заработать на хлеб, а искуственный интеллект - профессия далекого будущего, дай бог чтобы студенты ваших студентов делали хоть что-то на практике..."
Тогда, 25 лет назад, никакого этого вашего TensorFlow не было и в помине. Нас учили немножко анализировать руками матрицы и графы на прологе, и очень много C и С++, потому что (цитирую) "С помощью С/С++ вы сможете заработать на хлеб, а искуственный интеллект - профессия далекого будущего, дай бог чтобы студенты ваших студентов делали хоть что-то на практике..."
"5 минут чтения доки заменяют 2 часа дебага" - плохая практика, когда доку должен читать клиент, а дебажите вы.
Иначе останетесь совсем без хлеба. Дай нам бог всем клиентов, которые не читают доки.
Иначе останетесь совсем без хлеба. Дай нам бог всем клиентов, которые не читают доки.
Интересное дело по торговым маркам.
Арбитражный суд города Киева принял иск от компании SpaceX по поводу аннулирования торговой марки StarLink, принадлежащей с 2011 года ТОВ "СтарЛинк", занимающейся IT-услугами (https://reyestr.court.gov.ua/Review/106902243)
Торговая марка зарегистрирована в классах 37, 38 и 42, SpaceX регистрирует обычно свои марки в классах 9, 38 и 42 и претендует на конфликтные 38 и 42 ответчика.
У ТОВ "Старлинк" на данный момент есть две торговые марки, номер 135574 (действующая) и m202127659 (рассматривается). Давайте рассмотрим номер 135574, против которой подали иск юристы Илона Маска.
В 2011 году, при регистрации, юристы ТОВ "Старлинк" решили не заморачиваться и "пульнули" в классы всё, что можно было пульнуть (https://iprop-ua.com/tm/ut014u13/), в частности например "ремонт мебели", "реставрация музыкальных инструментов", "отсылка телеграмм", "анализ использования месторождений нефти" и прочее, всё что выдавал справочник. Поскольку ТОВ "Старлинк", напомню, является IT-компанией, у суда моментально может возникнуть желание аннулировать торговую марку, имея хороший повод - она просто не используется в 99% заявленных видах деятельности. Сразу же возникает аналогия с громким делом Tommy Hilfiger, когда они сначала выступали ответчиками против какой-то мелкой испанской компании по производству шляп, легко выиграли дело и открыли встречное, "обрезав" торговую марку противника исключительно на головные уборы.
Но испанским шляпникам повезло, то ли юристы Tommy решили их не добивать, то ли судья был в хорошем настроении, а ведь могло быть иначе. Вы же никогда так не делайте при регистрации и перечисляйте только то, чем вы действительно занимаетесь, хотя бы косвенно. Торговая марка - это не домен, который кто первый зарегистрировал тот и хозяин, неиспользование всех или даже большинства перечисленных видов деятельности, может быть расценено судом как сквоттинг и ваш товарный знак будет отменен.
К слову, юристы ТОВ "Старлинк" тоже поумнели и новая торговая марка (m202127659, https://iprop-ua.com/tm/xfdf13yg/) более-менее перечисляет те сферы, в которых потенциально может работать IT-компания. Но возможно, боржоми пить уже поздно. Будем следить.
Арбитражный суд города Киева принял иск от компании SpaceX по поводу аннулирования торговой марки StarLink, принадлежащей с 2011 года ТОВ "СтарЛинк", занимающейся IT-услугами (https://reyestr.court.gov.ua/Review/106902243)
Торговая марка зарегистрирована в классах 37, 38 и 42, SpaceX регистрирует обычно свои марки в классах 9, 38 и 42 и претендует на конфликтные 38 и 42 ответчика.
У ТОВ "Старлинк" на данный момент есть две торговые марки, номер 135574 (действующая) и m202127659 (рассматривается). Давайте рассмотрим номер 135574, против которой подали иск юристы Илона Маска.
В 2011 году, при регистрации, юристы ТОВ "Старлинк" решили не заморачиваться и "пульнули" в классы всё, что можно было пульнуть (https://iprop-ua.com/tm/ut014u13/), в частности например "ремонт мебели", "реставрация музыкальных инструментов", "отсылка телеграмм", "анализ использования месторождений нефти" и прочее, всё что выдавал справочник. Поскольку ТОВ "Старлинк", напомню, является IT-компанией, у суда моментально может возникнуть желание аннулировать торговую марку, имея хороший повод - она просто не используется в 99% заявленных видах деятельности. Сразу же возникает аналогия с громким делом Tommy Hilfiger, когда они сначала выступали ответчиками против какой-то мелкой испанской компании по производству шляп, легко выиграли дело и открыли встречное, "обрезав" торговую марку противника исключительно на головные уборы.
Но испанским шляпникам повезло, то ли юристы Tommy решили их не добивать, то ли судья был в хорошем настроении, а ведь могло быть иначе. Вы же никогда так не делайте при регистрации и перечисляйте только то, чем вы действительно занимаетесь, хотя бы косвенно. Торговая марка - это не домен, который кто первый зарегистрировал тот и хозяин, неиспользование всех или даже большинства перечисленных видов деятельности, может быть расценено судом как сквоттинг и ваш товарный знак будет отменен.
К слову, юристы ТОВ "Старлинк" тоже поумнели и новая торговая марка (m202127659, https://iprop-ua.com/tm/xfdf13yg/) более-менее перечисляет те сферы, в которых потенциально может работать IT-компания. Но возможно, боржоми пить уже поздно. Будем следить.
Всякие коллективные бложики упорно подсовывают статьи по Rust, половина из которых:
- я уже неделю пишу на Rust и вот пример скорости
1) С
2) Python и JavaScript
...
10) Rust
Зачем вы на нем программирываете???
- я уже неделю пишу на Rust и вот пример скорости
1) С
2) Python и JavaScript
...
10) Rust
Зачем вы на нем программирываете???
В отсутствие в поездках whiteboard, перешел обратно на бумагу. Я когда-то был большим любителем Filofax, там своя экосистема и религия, но Filofax - это в первую очередь органайзер и бумажник, а в наше время это уже давно не актуально - органайзер в телефоне всё равно не переплюнуть, а бумажек мы таскаем с собой всё меньше. С появлением оплаты гаджетами, я перестал носить с собой и карты, так что функционал бумажника тоже стал лишним.
Блокнот - другое дело. Чистые страницы (или в клетку-линейку, кто как любит), и никаких наворотов. Выбираю А6, но не refillable - без рефилла они более компактные. Бумагу, если повезет - 80 GSM или тонкую, но стойкую к чернилам - я предпочитаю роллеры или гель.
Рабочий процесс выглядит примерно так - сначала создается прототип кода. Затем основные элементы прототипа переносятся на бумагу, оптимизируются, после этого уже опять открывается любимый vim и начинается работа над релизом.
Резонный вопрос - нахрена это нужно в 2022 году, если есть 100500 софтов для заметок, онлайн и оффлайн и есть тот же git, наконец? Секрет в том, что когда вы переносите что-то на бумагу - мозг начинает оптимизировать информацию, чтобы выкроить где и как поменьше конспектировать и очень хорошо ее усваивает, а заодно убирает лишнее. Нередко на этом этапе получается даже некий баг-трекинг. Когда же данные заносятся в софт - они обычно копи-пастаются, часто даже не будучи прочитанными внимательно.
Дополнительный бонус - по бумажному конспекту намного легче вести презентацию, по тем же причинам.
Еще один бонус - предотвращение нашего "любимого" выгорания. При работе с экраном уровень стресса растет, при переключении на ручку и бумагу - падает (проверено с помощью Garmin HRV неоднократно).
(картинка для иллюстрации)
Блокнот - другое дело. Чистые страницы (или в клетку-линейку, кто как любит), и никаких наворотов. Выбираю А6, но не refillable - без рефилла они более компактные. Бумагу, если повезет - 80 GSM или тонкую, но стойкую к чернилам - я предпочитаю роллеры или гель.
Рабочий процесс выглядит примерно так - сначала создается прототип кода. Затем основные элементы прототипа переносятся на бумагу, оптимизируются, после этого уже опять открывается любимый vim и начинается работа над релизом.
Резонный вопрос - нахрена это нужно в 2022 году, если есть 100500 софтов для заметок, онлайн и оффлайн и есть тот же git, наконец? Секрет в том, что когда вы переносите что-то на бумагу - мозг начинает оптимизировать информацию, чтобы выкроить где и как поменьше конспектировать и очень хорошо ее усваивает, а заодно убирает лишнее. Нередко на этом этапе получается даже некий баг-трекинг. Когда же данные заносятся в софт - они обычно копи-пастаются, часто даже не будучи прочитанными внимательно.
Дополнительный бонус - по бумажному конспекту намного легче вести презентацию, по тем же причинам.
Еще один бонус - предотвращение нашего "любимого" выгорания. При работе с экраном уровень стресса растет, при переключении на ручку и бумагу - падает (проверено с помощью Garmin HRV неоднократно).
(картинка для иллюстрации)
Поигрался с нашумевшим ChatGPT. Иногда конечно тупит, но вообще впечатляет. С задачей справился. Задача:
Пойдет, для мелких работ. Но код лучше перепроверять, иногда что-то забывает. В данном примере clap-derive забыл, хотя в прошлых ставил.
create a program in Rust which calculates SHA256 hash from a file, specified in a command-line argument and is FIPS-140 compliant. Use clap to parse command line arguments with clap-derive proc macro for a structure. If the file name is not specified, read the binary content from the standard input. Use OpenSSL library to calculate hashes. Turn on FIPS mode by default. Do not use unwrap for errors, return std::error::Error from main instead.результат: https://gist.github.com/divi255/7dd739626387a049136f4d009a401fcc
Пойдет, для мелких работ. Но код лучше перепроверять, иногда что-то забывает. В данном примере clap-derive забыл, хотя в прошлых ставил.
Про бесперебойники небольшой ликбез, ибо для Украины актуально. Без сложных формул.
Сейчас на бесперебойники вешают не только компьютерную технику, а вообще что угодно. В принципе проблем никаких с этим не вижу - у нас в лабе аварийное освещение (мы первыми наверное на районе перешли на LED'ы) уже лет 15 висит на бесперебойнике и никаких проблем с этим нет.
Для нормальной работы электроустановок следует брать упсы, маркированные "double-conversion on-line" (у APC это практически все SmartUPS), остальные могут выдавать непонятно что и рассчитаны в основном для компьютерных БП.
Мощность. Если на бесперебойнике написано 900W (~1000VA), то подключив к нему лампочку на 10 ватт можно действительно теоретически добиться работы в 90 часов (на практике некоторые козлят и вырубаются при низком напряжении). Если же подключить пару серверов, суммарной мощности 900W, оно протянет час? Нет, не протянет. Потому что батареи не любят быстрый разряд (см. слайд) и врубив потребление сразу на 100% мощности вы получите 25-30% от номинала, тоесть минут 20.
Далее. У бесперебойников внутри не стоят батареи на 230V AC, таких не бывает. А стоят какие-нибудь 12-24V DC, AC из которых получается через инвертор. КПД хороших инверторов приближается 90%, но обычно рассчитывайте на 65-70. Тоесть, вернувшись к нашему примеру, от бесперебойника 900W пара серверов, которые жрут 900W, проработают примерно ~14 минут, если батареи новые а остальные потери мы, опять же, будем игнорировать.
Отдельная проблема именно компьютерных бесперебойников - они не предназначены для работы часами и могут перегреваться. Решение - опять же брать мощность с запасом. Или обеспечить охлаждение.
Следовательно, из небольшого ликбеза можно сделать два вывода:
- батареи следует грузить так, чтобы время полного разряда было не менее 7-8 часов
- для оборудования, которому не нужно 230V, идеально - отказаться от инвертора и работать с батареями напрямую (DC-DC 24-5V, даже дешевый китайский будет иметь КПД около 90%)
Сейчас на бесперебойники вешают не только компьютерную технику, а вообще что угодно. В принципе проблем никаких с этим не вижу - у нас в лабе аварийное освещение (мы первыми наверное на районе перешли на LED'ы) уже лет 15 висит на бесперебойнике и никаких проблем с этим нет.
Для нормальной работы электроустановок следует брать упсы, маркированные "double-conversion on-line" (у APC это практически все SmartUPS), остальные могут выдавать непонятно что и рассчитаны в основном для компьютерных БП.
Мощность. Если на бесперебойнике написано 900W (~1000VA), то подключив к нему лампочку на 10 ватт можно действительно теоретически добиться работы в 90 часов (на практике некоторые козлят и вырубаются при низком напряжении). Если же подключить пару серверов, суммарной мощности 900W, оно протянет час? Нет, не протянет. Потому что батареи не любят быстрый разряд (см. слайд) и врубив потребление сразу на 100% мощности вы получите 25-30% от номинала, тоесть минут 20.
Далее. У бесперебойников внутри не стоят батареи на 230V AC, таких не бывает. А стоят какие-нибудь 12-24V DC, AC из которых получается через инвертор. КПД хороших инверторов приближается 90%, но обычно рассчитывайте на 65-70. Тоесть, вернувшись к нашему примеру, от бесперебойника 900W пара серверов, которые жрут 900W, проработают примерно ~14 минут, если батареи новые а остальные потери мы, опять же, будем игнорировать.
Отдельная проблема именно компьютерных бесперебойников - они не предназначены для работы часами и могут перегреваться. Решение - опять же брать мощность с запасом. Или обеспечить охлаждение.
Следовательно, из небольшого ликбеза можно сделать два вывода:
- батареи следует грузить так, чтобы время полного разряда было не менее 7-8 часов
- для оборудования, которому не нужно 230V, идеально - отказаться от инвертора и работать с батареями напрямую (DC-DC 24-5V, даже дешевый китайский будет иметь КПД около 90%)
Евросоюз ввел новые нормы по батареям. С 2028 года батареи во всех устройствах, включая телефоны, должны быть заменяемые пользователем.
Интересно вот, как выкрутятся с waterproof.
Интересно вот, как выкрутятся с waterproof.
Пошли дожди, залило серверную у клиента, второй раз за время аренды. Через оптику с крыши. С прошлого раза подняли стойку на кирпичи, пригодилось.
Энтерпрайз.
Энтерпрайз.
Поскольку все наши внутренние "базы" - по сути просто более крутая логика над базами обычными, решили перевести всё на Postgresql extensions.
Конечно же в наше время их можно (и нужно) писать на Rust, вот ссылка на тулкит.
https://github.com/tcdi/pgx
Конечно же в наше время их можно (и нужно) писать на Rust, вот ссылка на тулкит.
https://github.com/tcdi/pgx
GitHub
GitHub - pgcentralfoundation/pgrx: Build Postgres Extensions with Rust!
Build Postgres Extensions with Rust! Contribute to pgcentralfoundation/pgrx development by creating an account on GitHub.
Если серьезно, нейросети типа ChatGPT в итоге избавят нас от рутинного умственного труда. Точно также, как промышленная автоматизация избавила от рутинного труда физического.
Сначала Генри Форд изобрел конвейер и появились профессиональные пришиватели пуговиц. А потом роботы избавили от необходимости нанимать человека. В результате каждый может купить фабричный костюм средней паршивости и примерно сразу его носить.
Прекрасный пример со слоганами - раньше для этого держали дерьмового копирайтера, а теперь слоган средней паршивости может легко сгенерить машина. Конечно, хорошие копирайтеры останутся - нейросеть может только повторять. А вот дерьмовые сменят работу, зато каждая шаурма "У Ашота" сможет завести себе слоган, примерно за бесплатно.
Зачем шаурме "У Ашота" слоган? Пусть будет. 100 лет назад Ашот и костюм не носил. А теперь может.
С точки зрения этого нашего программирования, всё чуть сложнее. Да, теперь каждый дурак может написать функцию, которая считает файлу sha256 и для этого не надо идти и делать копипасты с SO. Но зачем нам 100500 считалок sha256?
Сначала Генри Форд изобрел конвейер и появились профессиональные пришиватели пуговиц. А потом роботы избавили от необходимости нанимать человека. В результате каждый может купить фабричный костюм средней паршивости и примерно сразу его носить.
Прекрасный пример со слоганами - раньше для этого держали дерьмового копирайтера, а теперь слоган средней паршивости может легко сгенерить машина. Конечно, хорошие копирайтеры останутся - нейросеть может только повторять. А вот дерьмовые сменят работу, зато каждая шаурма "У Ашота" сможет завести себе слоган, примерно за бесплатно.
Зачем шаурме "У Ашота" слоган? Пусть будет. 100 лет назад Ашот и костюм не носил. А теперь может.
С точки зрения этого нашего программирования, всё чуть сложнее. Да, теперь каждый дурак может написать функцию, которая считает файлу sha256 и для этого не надо идти и делать копипасты с SO. Но зачем нам 100500 считалок sha256?
Прогресс. Dependabot гитхаба отчаялся присылать мне ворнинги об уязвимых крейтах и стал сразу присылать пулл-реквесты.
Подождём, пока будет за меня чинить.
Подождём, пока будет за меня чинить.