Forwarded from Programming sucks
Everyone fantasizes about what they would do with some sort of amazing power they don’t have. Be that power to rule a nation, be a billionaire, be famous, be a virtuoso or be able to fly and punch people with super-human strength.
The problem with software developers is that they get to act out those fantasies too much. Software is a very equalitarian medium. You don’t need to be Facebook to build a social-media platform that can support “Facebook scale”… but you’d be wasting your time building it. Facebook’s magic consisted in being able to acquire billions of users, scaling the system was the easy part.
(c) https://blog.cerebralab.com/Stop_future_proofing_software
The problem with software developers is that they get to act out those fantasies too much. Software is a very equalitarian medium. You don’t need to be Facebook to build a social-media platform that can support “Facebook scale”… but you’d be wasting your time building it. Facebook’s magic consisted in being able to acquire billions of users, scaling the system was the easy part.
(c) https://blog.cerebralab.com/Stop_future_proofing_software
Cerebralab
Stop future proofing software
[Audio version (read by a tts bot)](https://youtu.be/p_PdR31qpIY)
If I can point to a singular idea that kills more products than any other, it’s
If I can point to a singular idea that kills more products than any other, it’s
Forwarded from мне не нравится реальность
Помните scoped threads из crossbeam, которые позволяют спавнить не
В
'static
функции (замыкания, которые захватывают что-то по ссылке)?В
std
скоро(™) собираются такое добавить: <twitter:m_ou_se>#prog #cpp #abnormalprogramming
twitter.com/sehetw/status/1465726704979267586
Вообще это было переслано в <twitter:Affective C++>, но прикольно, что на C++ можно до некоторой степени сымитировать именованные прерывания цикла
twitter.com/sehetw/status/1465726704979267586
Вообще это было переслано в <twitter:Affective C++>, но прикольно, что на C++ можно до некоторой степени сымитировать именованные прерывания цикла
Twitter
sehe
@sehetw @HenryKSloan @AffectiveCpp Alternatively, make it more generic godbolt.org/z/hqWoKszq9
#prog #cpp #article
shared_ptr<T>: the (not always) atomic reference counted smart pointer
Статья о том, как shared_ptr может использовать не атомарные инкременты (и некоторые спекуляции на тему того, является ли это вообще безопасным)
shared_ptr<T>: the (not always) atomic reference counted smart pointer
Статья о том, как shared_ptr может использовать не атомарные инкременты (и некоторые спекуляции на тему того, является ли это вообще безопасным)
snf.github.io
shared_ptr<T>: the (not always) atomic reference counted smart pointer · Snf's blog
Forwarded from Alex Gualse's posts
A lot of fonts show letter
If you somewhere use any fonts, take care about they have different
I
and l
very similar and it's wrong.If you somewhere use any fonts, take care about they have different
I
and l
especially where there is user input (like about yourself, post texts, etc)#article
Статья (перевод) от основателя Signal с впечатлениями от так называемого web3.
TL;DR: реалии этих проектов противоречат декларируемым ценностям (главным образом децентрализации) и вообще катастрофически сломаны.
Статья (перевод) от основателя Signal с впечатлениями от так называемого web3.
TL;DR: реалии этих проектов противоречат декларируемым ценностям (главным образом децентрализации) и вообще катастрофически сломаны.
Moxie Marlinspike
My first impressions of web3
Despite considering myself a cryptographer, I have not found myself particularly drawn to “crypto.” I don’t think I’ve ever actually said the words “get off my lawn,” but I’m much more likely to click on Pepperidge Farm Remembers flavored memes about how…
запуск завтра
Извините, что ночью, но исследователи утверждают, что Pegasus стабильно взламывает самую последнюю версию айфона (14.6). Без всяких кликов по ссылкам, просто посылают жертве «заряженную смску» (сообщение в iMessage) и всё, атакующий владеет телефоном. Речь…
#itsec #article
A deep dive into an NSO zero-click iMessage exploit: Remote Code Execution
Подробная техническая статья о том, как именно работает 0-click exploit, позволяющий скомпрометировать устройство без каких-либо действий со стороны пользователя. Опять комбинация out of bounds {write, read} и парсера изображений вкупе с Тьюринговой трясиной одного экзотического формата изображений.
A deep dive into an NSO zero-click iMessage exploit: Remote Code Execution
Подробная техническая статья о том, как именно работает 0-click exploit, позволяющий скомпрометировать устройство без каких-либо действий со стороны пользователя. Опять комбинация out of bounds {write, read} и парсера изображений вкупе с Тьюринговой трясиной одного экзотического формата изображений.
Blogspot
A deep dive into an NSO zero-click iMessage exploit: Remote Code Execution
Posted by Ian Beer & Samuel Groß of Google Project Zero We want to thank Citizen Lab for sharing a sample of the FORCEDENTRY exploit w...
Forwarded from мне не нравится реальность
В свежем Rust 1.58.0 наконец-то можно использовать переменные напрямую при форматировании строк:
let person = get_person();Пока что это работает только с именами, а не произвольными выражениями, но всё равно приятно. Прощайте
// ...
println!("Hello, {person}!"); // captures the local `person`
format!("{name}", name = name);
!Forwarded from мне не нравится реальность
Ещё из плющек:
— теперь
— Теперь правила ансайзинга для дженерик структур немного проще[1]
— В
— реализация
—
[1]: Новые правила позволяют такое:
А полные новые правила такие:
— the tail field depends on at least one type or const parameter not used in any other field
— the target struct can be created from the source by replacing only the parameters only found in the last struct field
— the tail field implements
[2]: Ранее они были отключены из-за того, что их нельзя выполнить в
— теперь
*const T
указатели можно дерефать в константных контекстах— Теперь правила ансайзинга для дженерик структур немного проще[1]
— В
copy{,_nonoverlapping}
опять включили debug_assert
'ы[2]— реализация
Clone
для RSplit<T, P>
больше не требует T: Clone
— Трейт Termiation
теперь реализов для Result<Infallible, E>
, позволяя писать fn main() -> Result<Infallible, ErrorType>
, для програм которые не заканчиваются успешно через выход из main
— Стабилизировали File::options
, замену FileOptions::new
— Стабилизировали {Option,Result}::unwrap_unchecked
— Стабилизировали многие методы Duration
и MaybeUninit
как const fn
— Компилятор теперь будет пытаться применять стабильные методы прежде, чем не стабильные. Это позволит избежать поломок при добавлении в std
методов, пересикающихся по именам с методами из сторонних трейтов.—
rustdoc
теперь показывает методы из всех Deref
реализаций, рекурсивно (а не только из первой)[1]: Новые правила позволяют такое:
struct A<T, U: ?Sized + 'static>(T, B<T, U>);
struct B<T, U: ?Sized>(T, U);
fn main() {
let x: A<[u32; 1], [u32; 1]> = A([0; 1], B([0; 1], [0; 1]));
// This previously did not work as the last field of `A` also mentions `T`,
// as only `U` changes this is now allowed thanks to this feature.
let _y: &A<[u32; 1], [u32]> = &x;
}
TL;DR: если последнее поле это структура, которая ансайзиться, то теперь и наружняя структура тоже ансайзиться.А полные новые правила такие:
— the tail field depends on at least one type or const parameter not used in any other field
— the target struct can be created from the source by replacing only the parameters only found in the last struct field
— the tail field implements
Unsize
from source to target[2]: Ранее они были отключены из-за того, что их нельзя выполнить в
const fn
Полный список изменений: RELEASES.md#version-1580-2022-01-13#prog #rust
Хозяйке на заметку
Как известно, если у типа в Rust есть несколько методов от разных трейтов с одними и теми же именами, то попытка вызвать один из них при помощи синтаксиса метода будет прервана компилятором с жалобой на неоднозначность имён, вынуждая прибегнуть к развёрнутому синтаксису вызова (
Хозяйке на заметку
Как известно, если у типа в Rust есть несколько методов от разных трейтов с одними и теми же именами, то попытка вызвать один из них при помощи синтаксиса метода будет прервана компилятором с жалобой на неоднозначность имён, вынуждая прибегнуть к развёрнутому синтаксису вызова (
Trait::method(&value, arg1, arg2)
). Менее известен тот факт, что методы самого типа (inherent methods) перекрывают одноимённые методы трейтов, так что если одному имени отвечают метод типа и сколько угодно методов трейтов, то предпочтение всегда отдаётся методу самого типа и не вызывает неоднозначностей. Этим можно воспользоваться, чтобы иметь возможность в необобщённом контексте вызывать методы трейта, не импортируя сам трейт:trait Trait {
fn method(&mut self, arg: Arg);
}
struct Type {
...
}
impl Trait for Type {
fn method(&mut self, arg: Arg) {
...
}
}
impl Type {
fn method(&mut self, arg: Arg) {
Trait::method(self, arg)
}
}
// где-то в другом месте, где в текущем пространстве имён
// есть Type, но нету Trait:
let mut value = Type::make(...);
value.method(arg);
🔥1