Блог*
#prog #cpp C++ iceberg fouronnes.github.io/cppiceberg
Интересно, выходит, приличную долю из этого я и так знаю
#article
Не трогайте разработчиков. Отстаньте. Просто не беспокойте
Или про процесс разработки, который хорошо работает на практике, но сложно повторить. Комментарии тоже ценны.
Не трогайте разработчиков. Отстаньте. Просто не беспокойте
Или про процесс разработки, который хорошо работает на практике, но сложно повторить. Комментарии тоже ценны.
Хабр
Не трогайте разработчиков. Отстаньте. Просто не беспокойте
Всем привет! Меня зовут Ян, я руководитель разработки Департамента ИТ инвестиционного бизнеса Газпромбанка. Совершенно неожиданно я занял первое место на конференции Highload++ с докладом про то, как...
#prog #rust #rustasync #rustlib #article
Как известно, в настоящий момент трейты в Rust не могут иметь асинхронные методы. Причины для этого описаны в статьеНикитоса Niko Matsakis why async fn in traits are hard, и если коротко, они связаны с кучей нерешённых вопросов и недопиленных фич — это примерно так же, как в Rust до версии 1.26.0 нельзя было нормально вернуть из функции замыкание.
Для обхода этой проблемы есть несколько путей, которые так или иначе сводятся к стиранию типов. Первый — как и в случае с замыканиями, просто забоксить футуру. Это именно то, что делает async-trait. Второй путь — разместить футуру в некоем байтовом массиве, который хранится инлайн, а не в куче. Именно это делают stackfuture и name-it. Вторая библиотека вычисляет размер футуры и хранит его в байтовом массиве в точности нужного размера, а также (не) реализует все те же авто-трейты, что и исходная футура. Первой нужно наперёд указывать размер хранилища под футуру, но зато она не полагается на макросы для работы.
(thanks @goldsteinq, которому, кстати, и принадлежит авторство второй библиотеки)
Как известно, в настоящий момент трейты в Rust не могут иметь асинхронные методы. Причины для этого описаны в статье
Для обхода этой проблемы есть несколько путей, которые так или иначе сводятся к стиранию типов. Первый — как и в случае с замыканиями, просто забоксить футуру. Это именно то, что делает async-trait. Второй путь — разместить футуру в некоем байтовом массиве, который хранится инлайн, а не в куче. Именно это делают stackfuture и name-it. Вторая библиотека вычисляет размер футуры и хранит его в байтовом массиве в точности нужного размера, а также (не) реализует все те же авто-трейты, что и исходная футура. Первой нужно наперёд указывать размер хранилища под футуру, но зато она не полагается на макросы для работы.
(thanks @goldsteinq, которому, кстати, и принадлежит авторство второй библиотеки)
🔥7👍1
#prog #cpp
Если вам по каким-то причинам нужно сделать порядковый индекс итерации в range-based for loop и при этом нету возможности или желания использовать ranges, то можно накостылить такое:
Ещё может возникнуть вопрос, почему не что-то попроще в духе:
Если вам по каким-то причинам нужно сделать порядковый индекс итерации в range-based for loop и при этом нету возможности или желания использовать ranges, то можно накостылить такое:
size_t i = 0;
for (auto & elem : collection) {
struct IncrementOnDrop {
size_t old;
size_t& assign_to;
IncrementOnDrop(size_t& i): old(i), assign_to(i) {}
~IncrementOnDrop() {
assign_to = old + 1;
}
} inc{i}
// каким бы сложным не был поток управления
// в теле цикла, i будет инкрементировано всегда
// в конце итерации, когда будет вызван
// деструктор inc
...
}
Разумеется, не обязательно объявлять IncrementOnDrop
по месту, но если это требуется лишь единожды — почему нет?Ещё может возникнуть вопрос, почему не что-то попроще в духе:
struct IncrementOnDrop {
size_t& i;
~IncrementOnDrop() {
++i;
}
} inc{i};
Это тоже работает, но в этом случае, если i
меняется в теле цикла, число итераций будет подсчитано неверно. Вариант выше защищает от этого.👏5🔥1
Forwarded from Anonymous
Что ж поучаствовал я в этом празднике жизни. Рассказываю:
Как понял: у парней есть сервис на питоне, сервис хранит, скажем так, таблицу фильтрации трафика для файервола. Эта таблица раскатывается на сервера облака, чтобы каждый хост мог посылать/получать только пакеты от доверенных хостов. Так как данное решение не очень быстрое они решили переписать его на что-то нативное, раст выбрали из-за того, что при раскатывании на 100500 хостов лучше иметь гарантии безопасности, чем писать на плюсах.
Само собеседование классиченкий клон FAANG - три часа пытаемся решать задачки на алгоритмы в блокноте, отлаживая результат творчества в уме на собственных примера.
Как понял: у парней есть сервис на питоне, сервис хранит, скажем так, таблицу фильтрации трафика для файервола. Эта таблица раскатывается на сервера облака, чтобы каждый хост мог посылать/получать только пакеты от доверенных хостов. Так как данное решение не очень быстрое они решили переписать его на что-то нативное, раст выбрали из-за того, что при раскатывании на 100500 хостов лучше иметь гарантии безопасности, чем писать на плюсах.
Само собеседование классиченкий клон FAANG - три часа пытаемся решать задачки на алгоритмы в блокноте, отлаживая результат творчества в уме на собственных примера.
👍1
Forwarded from Anonymous
Если совсем кратко, то:
* задачи не соответствуют занимаемой должности;
* большая часть кода написана студентами и олимпиадниками с однобуквенными переменными, методами на 1 000 строк и запросами из джоинов через where;
* сверху бесплатно накидывают всякое дежурство и настройку ci/cd;
* зарплата, даже с идеальным прохождением всех этапов примерно на 15% меньше рынка.
* задачи не соответствуют занимаемой должности;
* большая часть кода написана студентами и олимпиадниками с однобуквенными переменными, методами на 1 000 строк и запросами из джоинов через where;
* сверху бесплатно накидывают всякое дежурство и настройку ci/cd;
* зарплата, даже с идеальным прохождением всех этапов примерно на 15% меньше рынка.
🤡33🐳11👍2💩2🔥1
#itsec #article
Mobile App Supply Chain Vulnerabilities Could Endanger Sensitive Business Information
We identified 1,859 publicly available apps, both Android and iOS, containing hard-coded AWS credentials. Almost all were iOS apps (98%) - a trend and difference between the platforms we've been tracking for years, possibly linked to different app store vetting practices and policies. In any case, we examined the scope and extent of the risks involved when AWS credentials were found embedded inside apps. We found the following:
* Over three-quarters (77%) of the apps contained valid AWS access tokens allowing access to private AWS cloud services
* Close to half (47%) of those apps contained valid AWS tokens that also gave full access to numerous, often millions, of private files via the Amazon Simple Storage Service (Amazon S3)
(thanks @tech_b0lt_Genona)
Mobile App Supply Chain Vulnerabilities Could Endanger Sensitive Business Information
We identified 1,859 publicly available apps, both Android and iOS, containing hard-coded AWS credentials. Almost all were iOS apps (98%) - a trend and difference between the platforms we've been tracking for years, possibly linked to different app store vetting practices and policies. In any case, we examined the scope and extent of the risks involved when AWS credentials were found embedded inside apps. We found the following:
* Over three-quarters (77%) of the apps contained valid AWS access tokens allowing access to private AWS cloud services
* Close to half (47%) of those apps contained valid AWS tokens that also gave full access to numerous, often millions, of private files via the Amazon Simple Storage Service (Amazon S3)
(thanks @tech_b0lt_Genona)
Security
Mobile App Supply Chain Vulnerabilities Could Endanger Sensitive Business Information
Over three-quarters of the apps Symantec analyzed contained valid AWS access tokens that allowed access to private AWS cloud services.
😱4❤2👍1
#prog #go #haskell #article
Сложность простоты
Или о том, как Haskell показал себя лучше на задаче, для которых Go преподносится хорошим решением, с точки зрения человека, который и то, и то знал слабо.
Статья старая в том смысле, что она написана до того, как в Go запилили дженерики, но выводы и сейчас остаются валидными.
Сложность простоты
Или о том, как Haskell показал себя лучше на задаче, для которых Go преподносится хорошим решением, с точки зрения человека, который и то, и то знал слабо.
Статья старая в том смысле, что она написана до того, как в Go запилили дженерики, но выводы и сейчас остаются валидными.
Хабр
Сложность простоты
Как я писал в предисловии предыдущей статьи, я нахожусь в поисках языка, в котором я мог бы писать поменьше, а безопасности иметь побольше. Моим основным языком...
👍12🔥4❤1
Forwarded from Awesome Rust
Arti 1.0.0 is released: the Rust Tor implementation is ready for production use:
https://blog.torproject.org/arti_100_released
https://blog.torproject.org/arti_100_released
blog.torproject.org
Arti 1.0.0 is released: Our Rust Tor implementation is ready for production use. | Tor Project
Arti 1.0.0 is released and ready for download.
👍15