- 1
- 2
- 3
- 4
- 5
- 6
#include <iostream>
int main(){
int std = 10;
std::cout << std << std::endl;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+17
#include <iostream>
int main(){
int std = 10;
std::cout << std << std::endl;
}
А ведь когда-то давно такие моменты давали сильную встряску, и вырывался изумлённый возглас "И даже так можно?!". Сначала это было знакомство с реентерабельностью, потом - возможность изменения аргументов функции внутри неё, потом тернарный оператор, в выражении в качестве lvalue.
Ты имеешь ввиду рекурсивные функции?
> возможность изменения аргументов функции внутри не
Так себе паттерн: лучше так не делать. Если конечно тебе явно не передали их по указателю или ссылке.
Но правда это зависит от языка.
> потом тернарный оператор, в выражении в качестве lvalue.
А помнишь свои ощущения, когда понял, что в С++ можно так:
?
Нет. Впрочем, точно не помню, что я под этим понимал и что про это думал.
> А помнишь свои ощущения, когда понял, что в С++ можно так
Не помню. Однако помню, что меня порадовала реализация двумерных матриц, где operator [] возвращал какой-то ссылковатый объект, у которого тоже был operator [].
Возможно, от гостя в 2021 комментарий-два написал, не помню.
А маска была на аватаре.
Напиши пароль 123, и я тебя добавлю в секретные чаты
It would take a computer about
24 nanoseconds
to crack your password
https://www.security.org/how-secure-is-my-password/
Будет -- поменяю на 12345 (1234 нельзя, https://www.security.org/how-secure-is-my-password/ показывает его красным, видимо он не безопасен)
А я
А я взял такой пароль, что
It would take a computer about
1 hundred noventrigintillion years
to crack your password
Я туда все ключи всегда загружаю
А ты же понимаешь, что любой введёный туды пароль автоматой попадает в базу для перебора если его много раз тудой вветсти?
Первое незаконное простое число
теперь гавнокод закроют
Например, если я незаконное простое число умножу на два или увеличу на единицу, оно станет законным или останется незаконным?
In 2017, far-right Slovak politician Marian Kotleba was criminally charged for donating 1,488 euros to a charity.
Я тоже, когда читаю их в GET параметрах -- логах nginx, и в дампе базы...
Один раз мне написал пользователь, и сказал, что забыл пароль. Я ему послал его пароль, и подумал еще: какой смешной пароль
У Мариванны из бухгалтерии всегда будет пароль "rosa123". Если ты попытаешься зафорсить политики, то будет "Rosa!@#" или "qweasdzxc".
Если очень сильно из зафорсить, то он будет написан на желтеньком стикере на мониторе.
То-есть ты либо покупаешь ёба-ки, либо делегируешь какой-нито OAuth на какой-нито gmail, где там SMS-подтверждения, либо ты понимаешь, что поломают
По этой причине например у моего знакомого админа VPNы рядовых петухов сделаны по ключу (всмысле каждому выписан серт с приватным ключом и серт на сервере стоит) потому что из 1000 мариванн стопудово будет "rosa123"
Стоит понимать, что зафорсивание политик - это перекладывание работы админа на пользователей. Не создание и поддержка удобной и безопасной инфраструктуры, а требование придумывать и запоминать каждый раз новую случайную херобору, которая никак не относится к кругу задач сотрудника. Нет премий за лучший пароль; за попытки вспомнить набрать сложную последовательность на клавиатуре не выдают молоко.
Пароль - это всегда компромисс. Либо он будет легко запоминающимся, но нестойким, либо стойким, но незапоминающимся. Способность запоминать ограничена. Если админ требует спецсимволы, то вместо оптимального по запоминаемости и стойкости пароля "amwentedfar" (длинный, с энтропией) пользователь создаст минимально удовлетворяющий требований "Su123ka!" (длина не меньше 8, 3 класса символов). И если пользователь смог один раз в жизни выучить сложный и надёжные пароль "kDo#ran8Nue~", то из этого не следует, что он сможет делать это раз в год, а тем более -- раз в 3 месяца.
И ладно, если это пароли от веб-питушни, которые можно загнать в условный Google Chrome, где они сами генерируются и хранятся без каких-либо усилий пользователя. Но когда требуют держать в голове вариативное случайное говно и вводить его с клавиатуры, чтобы иметь доступ к рабочим компам... Это даже я, понимающий основы информационной безопасности, в гробу видал, а нормальные люди - тем более. Раз забыл, два забыл, - на третий раз придумаешь "[eq!2407".
После некоторого предела (который наступает довольно быстро) зафорсивание перестаёт повышать безопасность, а наоборот понижает её. Чем больше админ пытается зафорсить, тем меньше будет "kDo#ran8Nue~", и больше "[eq!2407" и бумажек с паролями.
Хочешь безопасность - придумай рфидные карточки, отпечатки пальцев, USB-ключи с магнитными контактами, отслеживай IP и паттерны поведения, проводи аудит. Случайную херобору никто не будет запоминать.
Пароли по текущему циклу AIRAC? Удобно!
P.S. Год и месяц. Спасибо ISO за подсказку.
https://music.yandex.ru/artist/10926446
https://www.last.fm/ru/music/%5Beq
https://www.shazam.com/artist/-/1554235520
https://music.apple.com/ru/artist/eq/1554235520
Наверное, ма-те-ма-ти-ки, что-то про уравнения поют.
....то он будет использовать его на всех сервисах в Интернете.
И когда на сайте любителей макроме взломают базу, и заберут оттуда плейнтексктом хранящийся пароль, то пароль нашего пользователя окажется в базе брутфорсеров (вместе с его именем и емейлом)
1. Приходится доверять свои пароли левому сервису.
2. Приходится помнить учётные данные от самого KeepAss.
Вот смарткарта или USB+ключ решают проблему.
KeepAss всё хранит локально. Но проблему мастер-пароля это не отменяет.
В AD, например, можно использовать смарт-карты. Но это дорого и сложно
Кстакти, OTP можно реализовать вообще без телефона и без смарт-карты: просто на бумажке
Алсо, телефон не очень сейф: зуй знает что ты там туда наставишь
Другой вопрос, если у меня уже есть телефон, то его можно юзать
Но вот если я сотрудник ядерного центра, и с моим уровнем доступа можно отправить ядерную ракету куда-нить, то чем меньше всего умеет делвайс -- тем лучше, потому что тем сложнее его сломать
https://www.youtube.com/watch?v=q7R_FF5O1d4
"реакция зрачков на свет"
Now, as far as whether or not all of this is necessary, it is in fact not if we want to fool your scanner. In my senior thesis project we used generative AI to produce fingerprints that fooled scanners to appear as 90%+ of all users in a fingerprint reader's database. One fingerprint generated could unlock almost anyone's account. So we don't even need you to get into your laptop.
а с этим-то какие проблемы?
Есть только проблема с тем, что ушлые китайцы современные кнопочные «бабушкофоны» заливают малварью по самые динамики. Доходит до того, что официально не поддерживающий «GPRS» телефон в фоне подрубается к интернету и сливает китайцам всю инфу, до которой дотянется.
Вдруг какой-то петух бомбу подложил, а nyTuH на него сядет и сдетонирует.
Можно спрятать в анусе WiFi SDHC карту https://haxit.blogspot.com/2013/08/hacking-transcend-wifi-sd-cards.html и через нее спиздить даннные по радиоканалу.
https://habr.com/ru/articles/575626/
«Irbis SF63» пиздец опасный: он на твой номер регистрирует учётки в соцсетях и отправляет результаты китайцам.
В 2024-м году аппарат с «J2ME» днём с огнём не сыщешь. Есть китайское говно с поддержкой VXP (это просто ELF с копропротивной говнозадачностью) и ещё с какой-то, забыл название.
P.S. Нашёл, вторая хуйня называется MRP, но я даже не знаю, где искать SDK под неё.
хранить их ессно советуют в отдельной от паролей базе
В крестах каждый день что-то новое можно узнавать, даже если с ними работаешь уже лет 5-10.
О сколько нам открытий чудных
Готовит крестоблядский код.
Понимаете?
Десять лет я слышу, что плюсы не нужны, а они всё еще нужны.
Пройдут года, прибой времени смоет помойную пену -- всех этих опотных программистов на "джаваскрипт" вкотившихся в ойтишечку за длинным рублем, а стоящие программисты на настоящих языках типа "C" и "C++" этого и не заметят.
Они будут читать в новостях "Хуюгл лейэфнул 300 000 программистов на пайтон". Читать, и посылать патч
– это у тебя телефон так исправляет? а с какого языка?
такой ереси от тебя не ожидал ;)
Компилятор это позволяет, потому, что для него неймспайс, это что написано после слова неймспайс, или стоящее перед ::.
namespace nmsp;
nmsp::var..
А код ниже уже работать не будет, тк структура для компилятора это тоже набор символов, как и неймспейс.
#include <iostream>
struct std{
static int m;
};
int std::m=10;
int main {
std::cout << std::m << std::endl;
}
> такой ереси от тебя не ожидал ;)
всё борманд правильно сказал.
Как это противоречит тому, что написал я?
Кстати забавно, но пространство имен типов и пространство имен namespace'ов пересекаются - компилятор не даст назвать тип и неймспейс одинаково.
наверное, можно говорить "таблица символов", чтобы не создавать коллизий
> пространство имен типов и пространство имен namespace'ов пересекаются
Да мне кажется, корни растут из того факта, что раньше пространсва имён реализовывали через создание пустого класса со статическими методами и вложенными классами.
а не из-за того, что они могут использоваться подобным образом?
И поэтому тоже. Борманд чуть ниже пояснил.
Правда, есть и отличия: в классах все члены видны всем остальным, т.е. можно использовать методы до их объявления. В нэймспейсах это не работает.
а Петя - свою, в которой ничего не зная про Васю, использовал слово awesome как счетчик цикла.
И вот тут Акакий Дододжонович берёт эти обе библиотеки и пытается ском... ЧИТАТЬ ДАЛЕЕ >>>
> счетчик цикла
Не выспался?
Но автор поста как раз удивляется, что локальные переменные и "глобальные" нэймспейсы можно называть одинаково и использовать одновременно. Если бы это не выполнялось, то сценарий, описанный @defecate-++, был бы вполне реальным.
Если бы Петя использовал локальную структуру std, у него бы тоже было бы всё ок: его структура скрывала бы пространство имён std внутри его кода (правда, внутри вложенных в функцию структур не может быть статических членов). Но тогда нельзя было бы написать код, подобный коду в топике, без явной квантификации . Если Петя вложил структуру в неймспейс, то всё тоже ок, можно квалифицировать.
Если же Петя назвал глобальный тип также, как Вася назвал свой нэймспейс, вот тут беда.
... то оно просто не скомпилится ;)
gcc выдавало что-то типа error: redefining to another kind of symbol
Да, Акакий Дододжонович будет очень огорчён. Хотя у него и сейчас есть выход:
как удивительно, что в языке с полнотой по тьюрингу времени компиляции творятся такие удивительные вещи с именами.
Так и знал, что нужно зеленым писать.
[trollface.jpg]
И другой вопрос в неймспейсе моджнили обявлять вложенные неймспейсы ?
моя не панимать. Работают нормальные области видимости. Всё, что внутри функции, снаружи не видно. Стек же.
Если хочется глобальные для модуля переменные (не видимые другим модулям), есть волшебное слово static или анонимный неймспейс.
> в неймспейсе моджнили обявлять вложенные неймспейсы?
моджни.
Но тем не менее, иерархии неймспейсов нет. Есть только линейное пространство имен пространств имен.
Или я сегодня туплю?
А в крестах мало того что вверх умеет идти, так еще и после using namespace foo можно будет вместо foo::bar::test писать просто bar::test... Все-таки иерархия есть.
а Петя - свою, в которой ничего не зная про Васю, использовал слово awesome как счетчик цикла.
И вот тут Акакий Дододжонович берёт эти обе библиотеки и пытается ском... ЧИТАТЬ ДАЛЕЕ >>>
Ну тогда это вообще не возможная ситуация. Каждый разработчик либ фигачет свой неймспейс и в нем ебется конем как ему хочется, всякие счетчики цикла и фигушки которые должны умереть внутри умирают внутри модуля, все, что должны выйти наружу выходит в неймспейсе. И тогда никаких пересечений с именами не будет.
вроде бы можно заключить в безымянный namespace
> в неймспейсе моджнили обявлять вложенные неймспейсы ?
судя по бусту, можно
во-вторых, такие проблемы могли бы возникнуть при компиляции именно петиного кода, а не васиного - но такого конфликта даже нет
и в третьих, если у пети есть свой неймспейс, то вообще становится крайне сложно организовать проблемы, о которых стоило бы переживать - было бы неплохо, если бы кто-то смог предложить пример конфликта
а в подтверджении моих слов пока вот: http://ideone.com/9517zU
и про второй вопрос - в неймспейсе нет ограничений на вложенные неймспейсы
you::can::shoot::your::legs::as::you::want
recv() с pipe вообще не работает, и в read() никакого "MSG_WAITALL" нет. Из pipe чтение через read() заблокируется, если в пайпе нихуя нет. Если хоть один байтик есть, он и прочтется. Из сокета еще можно получить датаграму нулевого размера, а для pipe это хуйня полная, потому что никаких "датаграм" там нет
https://man7.org/linux/man-pages/man2/recv.2.html#NOTES
Хм, т.е. прога тупо повиснет навсегда т.к. read() не может избавиться от пустой датаграммы?
Можешь написать какую-нибудь хуйню на сокетах и проверить.
read() на UDP сокете тоже вернул 0 при получении пакета нулевой длины. Ну и собственно убрал его из буфера.
Переделал https://www.geeksforgeeks.org/udp-server-client-implementation-c/
З.Ы. А где в мане написано что это отличие только для size == 0? Там вроде только о длине датаграммы говорят.
Такую тонкую питушню надо не в манах, а в каких-то юникс-спецификациях читать. И вообще, лучше не выебываться со всякими read() на сокетах, и использовать специально предназначенные recv() и recvfrom()
https://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html#tag_16_474
> How read() handles zero-byte STREAMS messages is determined by the current read mode setting. In byte-stream mode, read() shall accept data until it has read nbyte bytes, or until there is no more data to read, or until a zero-byte message block is encountered. The read() function shall then return the number of bytes read, and place the zero-byte message back on the STREAM to be retrieved by the next read(), getmsg(), or getpmsg(). In message-nondiscard mode or message-discard mode, a zero-byte message shall return 0 and the message shall be removed from the STREAM. When a zero-byte message is read as the first message on a STREAM, the message shall be removed from the STREAM and 0 shall be returned, regardless of the read mode.
> З.Ы. А где в мане написано что это отличие только для size == 0? Там вроде только о длине датаграммы говорят.
Ну хуй знает, вполне возможно, что в мане они написали какую-то хуйню.
Я вот сразу подумала, что pending -- это "пришла и лежит в буфере".
Скорее тупо скопипастили ман с другой оси/версии, где read такое не читал, да забыли поправить.
не за это диды в протокольной войне ваивали!
WSAGetLastError() какой-то блядь. Я как-то переписывал хуйню на винсоксах в обычные беркли сокеты
их в стаи сгоняет прошивка
https://www.youtube.com/watch?v=86iQiV3-3IA
и вероятно дохуя, томущо A это асинхронные
WSA это "Windows Sockets API", где там "асинхронные"?
Смотри: во времена Win16 многозадачность была кооперативной. Чтение из файла блочило весь мир, но файлы были близко.
Чтение из клавы не было по сути IO, потому что поступало как сообщение в event loop.
А как быть с сетью? Нельзя лочить же (сеть далеко) и потому сделали асинхронный API.
А вот потом уже на всю винду распостранили
Там еще была смешная API: пока WinSock ждёт -- он мог крутить события, и вызывать твою функциб для прогрес-бара
короче, асинхронное программирование это всегда шарик-лизун с налипшими на него волосами
Ей богу, корутины это relief
Пропоёт о том, что любовь прошла.
https://habr.com/ru/post/105918/
Ну и еще есть какая-то чисто виндоспецифичная говнина с overlapped I/O, но в том коде этой говнины не было.
Я относительно давно с этими сокетами связывался, но там есть такая хуйня, что если UDP (SOCK_DGRAM) то ты прочитаешь один пакет. Т.е. если тебе прилетело два пакета по 10 байт, и они там где-то хранятся во внутреннем буфере ОС, то даже если ты дохуя хочешь прочесть, ты первым recv() прочитаешь 10 байт, вторым recv() прочитаешь еще 10 байт.
К тому же "MSG_WAITALL" тоже не гарантирует, что у тебя столько прочитается, сколько ты запросил. См https://pubs.opengroup.org/onlinepubs/9699919799/functions/recv.html
>MSG_WAITALL
> On SOCK_STREAM sockets this requests that the function block until the full amount of data can be returned. The function may return the smaller amount of data if the socket is a message-based socket, if a signal is caught, if the connection is terminated, if MSG_PEEK was specified, or if an error is pending for the socket.
https://stackoverflow.com/a/2862176
What happens if recv gets a packet larger than the buffer?
SOCK_STREAM: The question doesn't really make sense as put, because stream sockets don't have a concept of packets - they're just a continuous stream of bytes. If there's more bytes available to read than your buffer has room for, then they'll be queued by the OS and available for your next call to recv.
SOCK_DGRAM: The excess bytes are discarded.
- Э-э, дружище Ватсон, могу с уверенностью сказать, что вон за тем углом вам ввалят хороших п%%дюлей.
Доходят до того угла и, дейтвительно Ватсону там хорошо достается от двух здоровых лбов.
- Как Вы узнали про это, Холмс?
- Элементарно, Ватсон, я здесь вчера в вашем пальто вы%%ывался...
Недавно пересмотрел "черная роза -- эмблема печали", кстати. Какой всё таки охуенный фильм. Толик-с-прибором мой герой
https://www.youtube.com/watch?v=aqHxIuTyHt4
Понял только зонненблум.
?
Например, Quick Basic (не урезанный 1.0, шедший с ДОСом и с NT 3.1-4.0, а полный, продававшийся отдельно) умел сохранять программы в текстовом формате и в «двоичном» (который потом не мог открыть 1.0).
Во многих реализациях знак вопроса был алиасом для PRINT, можно было для экономии написать:
Даже вроде пробел после ? можно было не ставить.
видишь, тут ключевые слова на кнопках?
https://i.ebayimg.com/images/g/EccAAOSwE-Fmeyzq/s-l1600.webp
Просто так руками "print" никто не писал. Как думаешь, почему?
>?
в каком-то дебагере так было еще
«Коды 0xA5-0xFF соответствуют ключевым словам языка BASIC. »
Ещё 19 кодпоинтов — user definable graphics, но это кот наплакал.
Получился какой-то АПЛ с огромным набором символов.
https://ru.m.wikipedia.org/wiki/Википедия:К_удалению/4_июня_2022#Набор_символов_ZX_Spectrum
«Аргументы ВП:ЭТОПОЛЕЗНО в Википедии невалидны. — Владлен Манилов [✎︎] / 17:19, 8 февраля 2024 (UTC)»
Т. е. любую полезную информацию можно просто так выставить на удаление, если википидоры посчитают, что у неё нет энциклопедической значимости.
Придется делать blini
в ноябре 2023 года в интернете слишком завирусился один пост с призывами слать одеяла российским военным в госпиталь под бахмутом.
в итоге на имя одного лейтенанта пришло 180 тонн одеял.
В "Покровских Воротах" есть сцена, как Велюров шлёт пловчихе телеграму "СХОЖУ УМА" (Увлечение пожилого лысого Велюрова молодой плавчихой вылядит коммично, но вероятно после ВОВ (дело происходит в 50-е) молодых мужиков было не много)
Если экономили на предлогах, то почему не экономили на ЗПТ ТЧК?