- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
function *foo()
{
yield 1;
yield 2;
yield 3;
}
function main()
{
for (const o of foo())
{
console.log (o);
}
}
main();
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+1
function *foo()
{
yield 1;
yield 2;
yield 3;
}
function main()
{
for (const o of foo())
{
console.log (o);
}
}
main();
давайте посмотрим, как TS/JS имплементирует "елды". изначально код выглядит красиво. но заглянем под капот что генерит tsc для выполнение такого кода. мне придется разбить этот ужос
> но заглянем под капот что генерит tsc для выполнение такого кода. мне придется разбить этот ужос тадам...
> все легко и просто
Вот теперь я точно за Сишку.
По сути «TS» это такой же препроцессор для «JS» только bloatware.
Серьёзно, даже самые ужасные макросы j123123 не выглядят так ужасно.
По сути «High-level language» это такой же препроцессор для «compilation target» только bloatware.
Спорно.
Во многих случаях компилятор не только не раздувает, а наоборот схлопывает анскильную дрисню погромиста.
https://govnokod.ru/23832
Так что умный ко-ко-ко может быть и shrinkware.
такое возможно только если исходник содержит много избыточной информации или если язык сравним по мощности с compilation target
мой поинт заключается в том что большой высер компилятора - это и есть мощность языка: ты пишешь немного кода который делает столько же сколько куча кода на более низкоуровневом языке
и ругать за это тсц нечестно
Но во многих ситуациях они потом юзаются не полностью, в каком-то частном виде.
Тут-то и приходит оптимизатор, выбрасывая лишний в данном конкретном случае код, оптимизируя константы и т.п. Он выбрасывает код не потому что я понаписала ненужного говна, а потому что я хочу писать высокоуровневые штуки один раз, не задрачивая их под каждый кейс руками.
Вот есть у нас метод filter(). Он очень обобщённый: принимает произвольную лямбду, работает с произвольным контейнером, прокачивает через себя произвольные типы.
Но зачастую мы его юзаем с каким-нибудь конкретным контейнером и простенькой известной заранее лямбдой в духе x => x.age < 35.
Хороший конпелятор для таких случаев не будет высирать тонны кода. Он заинлайнит и filter и лямбду и геттер age и итератор контейнера, уберёт все индирекции, смёржит всё это говно в простой императивный цикл, работающий над простыми "сишными" структурами.
И вот это как раз таки показывает мощность и высокоуровневость языка. Нам не пришлось вручную писать этот цикл вручную, мы просто поюзали filter и получили на выходе хороший, эффективный код.
Ах ну да, кроме C++ и C# (очень ограниченно) так никто не умеет
> Ко-к-кок, куд-кудах
Сиплюструп украл идею крестошаблонов из «Ada».
В «Ada» нужно было объявлять что-то вроде typedef для специфичной реализации.
С одной стороны это заёб, с другой позволяет давать объектам нормальные имена, вместо питущарского манглинга.
Генерики и «STL» появились в Аде ещё в 70-80х. Тогда все кудахтали «сложна», «нипанятна».
Много чего занимает особые ниши. Например язык ABAP.
Но я бы не назвал его мейнстримом
Да, понимаю.
Всё-таки у «Spark» есть действительно интересные результаты.
Так например они работают над формальной верификацией корректности программ, используя GNATprove.
https://docs.adacore.com/spark2014-docs/html/ug/en/gnatprove.html
Так например проверки для мудуля отсутствия ошибок в рантайме и запись в memcached.
Интересно что скажет CHayT.
Вот эта часть выглядит серьёзной заявкой чтобы покончить с buffer overflow при оперировании царскими массивами.
Подозреваю лет через 10-15 можно ожидать их в С++/С# и других жопулярных язычках. Как это было и с другими фичами «Ada».
это не имеет никакого отношения к мощности языка, оптимизация компилятора - это деталь реализации
Ну-ну, а потом программисты на "высокоуровневом" языке юзают одинарные кавычки вместо двойных потому что они быстрее...
Т.е. реализация TS со вменяемым таргетом могла бы сделать няшный красивый асм, а не эту дрисню из примеров выше. Но к сожалению таргет неудачный.
Если это "неоптимальный, медленный код", то ты прав.
Если это код, который дяде Пи глаз режет, то я не согласен.
Задачи "услаждать взгляд программиста выхлопом" у компилятора не стоит обычно.
мой поинт заключается в том что высирать много кода из елды абсолютно нормально потому что генератор - это фича которая дает большой прирост мощности языка
ты можешь оптимизировать высер этой елды в куче частных случаев но в общем случае елда будет высирать больше кода и это нормально, в этом ее смысл
Но я плюсану буткемпа.
Есть два языка: на одном задача $TASK реализуется в 22 строки, на другом в 954.
Какой из низ мощнее?
Не знаю. Может быть на втором пытались решить более общую задачу или расписать её более понятно для читателя, а в первом какое-нибудь райт-онли говнище на перле без тестов.
Серьёзно, даже самые ужасные макросы j123123 не выглядят так ужасно, как асемблерный код, сгенеренный GCC из С++ на -O3.
Ты ведь регулярно читаешь асемблерный выхлоп компилятора, так же часто, как и JSный выхлоп TS, правда?
Регулярно читаю...
К слову, я совсем разучилась читать асм в дебаг сборках. Слишком уж он тупой, релиз легче читается.
Подтверждаю.
x86-64 выхлоп сишного Фибоначчи на YIELD
https://godbolt.org/z/zxsn1Yq1f
Это как?
Т.к. undefined можно было раньше переопеределить
window.undefined=42;
Т.е. реальное значение с типом undefined по счастливой случайности лежит в глобалке с именем undefined?
тадам... все легко и просто
Композиция функций уже похоже не в моде.
В нём нету никаких модных for~of, функций со звёздочками, yield и прочей ES6 питушни.
А from, step, to не нужно лишний раз копировать в this.
Да.
Я недавно кидал багор.
https://govnokod.ru/27555#comment654572
Они его пофиксили и теперь замыкания хватают далеко не весь контекст.
>v0.8.18
гг
> примерно как статическая переменная в функции в Си
пиши еще
Всегда можно избавиться от статики и первым аргументом передавать конь-текст стейта.
Это же Сишка.
Именно поэтому я за «Си».
https://ideone.com/nFyUxi
Портировал пример с крестов, где для этой цели используется инстанс класса Machine:
https://govnokod.ru/24763#comment429616
Вообще, можно так:
Возможность switch поставить case где угодно и прыгнуть вовнутрь цикла или ifа.
Это предоставляет гибкость писать YIELD внутри других конструкций:
А в анскильных сиподобных языках, даже при использовании препроцессора, такое бы просто не сконпелировалось.
https://ideone.com/nFyUxi
Повторюсь state и другие вспомогательные данные можно хранить не статически, а в struct Ctx.
Пример из MDN
при этом они еще умеют генерировать бесконечные потоки значений
Всё элементарно пишется на асемблере
но нет
Есть мысль, что Страйкер забанил меня по IP вместе с доктором Смегмой.
Вот такой багор: https://github.com/1024--/govnokod.ru-userscripts/pull/2#issuecomment-905319520
Если забанили, то за то, что качал ГК для статистики для Десктопа )))
Правда, пастбин не дал вставить вывод скрипта статистики: оффенсив питушня, можно постить только с платных аккаунтов как приватную пасту. Похоже, из-за логинов со словами на f.
В начале года они все блюпринты от факторио ёбнули, бейс64 видите ли им не нравится.
З.Ы. Можешь через gist'ы выкладывать, у гитхаба вроде нету дебильных ограничений.
https://bartoszmilewski.com/2021/02/16/functorio/
Слава wvxvw, как писателя длиннючих комментариев, несколько преувеличена.
Затем дополняют оставшееся место нулями
Затем преводят в верхний регистр
Говорят, что делиться со всеми своим паролем — это хорошо.
Затем жертве говорят, что, если будет задумываться над происходящим, то её взломают.
Зомбирующий говорит : "Пароль? Пароль?"
Ассистенты зомбирующего повторяют: "Пароль? Пароль?"
Затем зомбирующий начинает подбирать пароли:
"частоиспользуемые пароли из словаря
пароли и цифровые вореции
цифробуквенные вореции"
( Ворецируют несколько раз. )
Таким образом обеспечивается усиление смешивания цифр и букв.
Пароль подбирается 10-20 раз.
Затем текст меняют.
Затем просят посчитать от адреса, приведённого к нижнему регистру, контрольную сумму md5.
Затем убеждают опубликовать эту контрольную сумму. Говорят, что если жертва этого не сделает, то никто не увидит её лика.
Говорят, что публиковать хэш-суммы безопасно, потому что алгоритм односторонний, а задумываться над этим опасно.
Зомбирующий говорит: «Граватар! Граватар!»
Ассистенты зомбирующего повторяют: «Граватар! Граватар!»
Затем аватарку меняют.
Это типа скрипты, по которым можно через бота всякую питушню автоматически построить можно? Или там просто расположение, а тыкать мышкой надо вручную по какому-то референсу?
Хотя если роботы там только летающие, проблемы с этим быть не должно. Но если какими-то скриптами строить это самим протагонистом(есть ли для этого API?), такой багор вполне возможен.
https://mods.factorio.com/mod/autobuild
Ну есди ты сверху на себя чертёж ёбнул — ССЗБ, а иначе крайние построятся раньше, пока будешь подходить. Если не построились — у тебя нет нужных предметов, значит и не построятся. А вообще, ставь мод с джетпаком и на боись багров.
Она ж на самом деле убогая шоппц
В факторио всего джва ;(
А что там за третий тип помимо обычных и chain'ов?
Аналогов path signal в факторио нет.
Если я на длинном участке дороги делаю джвустороннее движение, то этот кусок уже не получается нарубить на блоки, всё начинает дедлочиться. Хотя было бы прикольно уплотнить движение, разрешить ещё одному поезду следовать в том же направлении что и первый.
В опенттд походу можно описать такую дорогу без ёбли с кобенаторами?
А двустороннее движение по одной рельсе — зашквар. Не зря сигналы по умолчанию односторонние.
А поезд же сам его считает и резервирует блоки (жёлтый сигнал). Так что если с одного конца входной блок зарезервировали, то на втором конце его закрываем пока весь путь полностью не освободится. По идее должно работать...
> А двустороннее движение по одной рельсе — зашквар.
А мне нравится. Дёшево и сердито, для ранней игры само то. Ну или если редко используемая ветка для снабжения стены.
В теории да. Будет ложное блокирование когда первый поезд будет проезжать через этот же блок, поэтому плотную упаковку обеспечить не получится.
Хотя, если отвести этот поезд на другой путь до блока-детектора, тогда может получиться.
> Дёшево и сердито
Будто рельсы стоят дорого. Я обычно строю типовой чертёж, потому что кто знает, куда мне захочется повести рельсы потом. Переиспользуемость и модульная конструкция!
> А мне нравится.
Имхо — геморроя много. Его при настройке станций хватает. Равномерная загрузка-разгрузка, расписания, отключение-включение станций, настройка количества поездов, загрузка/выгрузка только нужных предметов в нужном количестве...
> Дёшево и сердито
Будто рельсы стоят много. Я к тому же обчно строю типовыми чертежами, потому что кто знает, куда и откуда мне захочется повести рельсы потом. Модульность и переиспользуемость!
– офигеть, это всё есть в факторио? Да тогда опенттд вообще грешно даже упоминать рядом
Насколько помню, у них один из основных разрабов -- кто-то из старых опенттд'шников.
https://i.imgur.com/T5ZabtB.png
У меня это ассоциируется с https://i.imgur.com/PBZXDvp.jpg
https://i.redd.it/fs5i4kgon8b51.jpg
Зелёные провода идущие по правым столбам передают отрицательное среднее количество железа в одном блоке (сундуках относящихся к одному вагону). Красные провода в каждом блоке — показывают количество железа в текущем блоке. Эти провода попарно идут к каждому выкладывающему инсертеру, которые настроены выкладывать при общем сигнале железа >= 0.
Кобенаторы слева умножают количество железа в блоке на 1, создавая развязку между блоками, чтобы значения из соседних блоков не суммировались. Сверху есть кобенатор делящий общую сумму на отрицательное количество блоков, чтобы и передаёт результат по зелёной линии, о которой говорилось в начале. Красная линия, идущая по левым столбам, передаёт общую сумму на станцию, где на её основе принимается решение, нужно ли заказывать ещё один поезд.
Да я тоже, но мне лень их юзать пока роботов нету или они медленные.
Поэтому хуяк-хуяк и в продакшен. А потом уже апгрейд до нормальных блюпринтов по сеточке. Станции то вполне совместимые.
Сигналы руками расставлять скучно. А в дереве из джвунаправленных рельсов достаточно расставить сигналы на входе и выходе станций.
Ну можно посолить chain'ами перекрёстки при желании, но и без них норм.
Входной
Выходной
И комбинированный, потому что с предыдущими двумя они сами запутались
И ещё какой-то там есть, типа самый обычный. Надо посмотреть в вику
В принципе, сёмантически наверное тоже два вида
https://wiki.openttd.org/en/Manual/Signals#path-signals
one-way block
path
entry
exit
combo
Но entry-exit-combo это семантически часть одной системы
one-way block — способ указать на односторонность системы
Семантически я бы выделял три вида сигналов всё-таки
Entry/exit/combo по сути тоже (одна система)
У меня шесть не выходит. Ну это дело такое, никакой глубины игре все эти сигналы не добавляют, пусть их там будет 36
Давайте лучше про программирование, компьютеры, сети, операционные системы, или, на худой конец, о
А как же «светофоры»? А «указатели поворотов»?
С "палочкой"?
Какие у регулировщиц палочки могут быть, угадай
сладкая парочка развелась
кстати, куда делся милкивей?
"вспомнить всё" смотрел?
а ну покажи ссылку
это случайно не Railroad X?
https://jbss.de/
P.S. Графика в «Bahn», конечно, отстой, но ценность его в том, что в нём уже нарисовано 100500 схем для разных городов с реальным путевым развитием и с реальными расписаниями.
Графика реально отстой. Лучше уж в Train Director позалипать
Да, изкоробки только летающие. Они ещё забавно строят, выбирая объекты по рандому. Из-за этого иногда на конвейеры всякое говно попадает или кобенаторы в хуй пойми каком состоянии оказываются.
Т.е. последовательность там не то что не задаётся, она практически рандомна.
Какой unspecified behavior )))
https://i.imgur.com/vsVnPvD.jpeg
https://i.imgur.com/q6fql2g.jpeg
https://i.imgur.com/WaYT4VD.jpeg
Вполне последовательность.
В реальной фабрике у тебя будет — роботы берутся с разных точек, берут из разных сундуков → прилетают неравномерно; не хватает на всех ботов → некоторые задания скипаются → когда бот освобождается, он летит на то задание, которое игра обрабатывает сейчас; не хватает ресурсов → смотри предыдущий пункт.
Когда все эти пункты накладываются (особенно часто это происходит при бетонировании больших площадей, потому что не у всех просто так лежит десяток тысяч роботов на случай, если кому захочется забетонировать квадрат 100х100), это начинает выглядеть, как случайный выбор.
Эээ... А у меня оно выглядело как рандомные помехи на экране. Может у персонального и стационарного разная логика?
Походу очередь всё-таки проворачивается на рандомную позицию каждый тик, чтобы более честной балансировки добиться.
А для кучи роботов отдельный многопоточный вариант, чтоб с семафорами, мьютексами.
А, ну вот видимо поэтому очередь и вращается постоянно.
Попробовали задиспатчить несколько задач, а свободных роботов в этой сети нету. Эти задачи ушли в конец очереди. На следующий тик, когда робот освободился, ему досталось уже что-то другое.
А как вычислили часовой пояс Смегмы?
Кстати, может быть IP Борманда тоже сначала захватили, если он выходил с того же провайдера, что я или смегма.
Борманд, а ты там купался?
А хуль ты вообще там делаешь, а?
В Новосибе живут только Борманд и 1024, но они не пишут от гостя.
Или ты, 1024, лишился своего ника в результате смегмовых войн?
https://github.com/1024--/govnokod.ru-userscripts/pull/2#issuecomment-905319520
Вчера писал во время вайпа и читал ГК скриптом (см. гист в этом треде с результатами). Только раз мне оставили право читать, забанили не за скрипт, а за комментарии.
А в Новосибирске (точнее, в А-е) живёт ещё пара-тройка человек. Были тут какие-то студенты и преподаватели ФМШ и может НГУ.
Писать и читать роботом нужно с VPSки, видимо )
Чего?
Увидел знакомую панельку с тегами, прослезился. Только почему Иньо не вставляет в урлы превентификаторы пробелизации?
Можно ли задать состояние, или фильтр функционально чистый и инициализируется на каждый комментарий? С состоянием можно полинин сток фильтровать до состояния говнокодовского.
В глобалку сохрани, до релоада переживёт. Если надо дольше -- локалсторедж.
Там можно даже основной код заманкипатчить...
Ну и читать весь код ради того, чтобы понять фильтр, тоже не хочется.
Хорошо бы ещё добавить режим временного скрытия, когда ты проходишься по стоку, а там есть + и - - добавление в белый и чёрный список, но белый - только на клиенте, а потом мёрджится с чёрным и отправляется к Полине. В итоге ты видишь только тех, кто не в чёрном и не в белом, и можешь последовательно банить старых вайперов, а годных юзеров отправлять в белый.
Видимо, юзерскрипт такой напишу. Потом оттуда можно экспортнуть более полные списки в мой последний скрипт на гитхаб.
Да скопируй себе статику куда-нибудь и играйся, кросс-доменные запросы вроде открыты были.
Фильтруйте смегму по частому постингу.
datediff между постами в пару сек. всё это время был неплохой эвристикой.
Хотя тут и дедушка Байес справится, наверное.
Какой-нибудь debounce/throttle фильтр по времени для срунов.
а напомните, как Смегма старых ломает? Там хеш пароля в дампе?
А еще лучше это решается гугл каптчей.
Если конечно Доктор Смегма не купил себе сетку на /8 двадцать лет назад.
Эта дырка -- какой-то феерический обсёр, даже для пыхера
> подбирая юзера под простые пароли
Разве что глобальным на весь сервак. Или глобальным усилением капчи в такие моменты, да.
Зря он что ли проверялку проксей на делфи писал несколько лет назад?
https://geonode.com/free-proxy-list
А на ГК смегма-волл. Залетел питуз со стороны, а тут всё засрано, без инфраструктуры и платного аккаунта читать невозможно.
6 предлагает тротлить неудачные логины.
Причём я бы сделал экспоненциально, как в андроиде.
Сначала 30 сек, потом минуту, потом две...
Ты второй раз его неверно ввел -- я второй поставил.
На третий раз я забанил тебя на минуту.
На пятый неверный раз -- на пять минут.
Что не так?
Прокси.
Во-вторых их не так уж и много. Не тысячи их.
Можно поподробнее для тех кто пропустил прошлые серии?
Блин, да даже винда мне после пяти неудачных попыток залогиниться предлагает попить чайку пару минут
Я не понял откуда у него дамп хешей паролей.
Странно. У меня все эти годы был довольно простой пароль из одних цифр.
Причём настолько простой, что я всё удивлялся как его не подобрали.
https://imgur.com/a/ZusA6er
31415926?
Вообще надо было и не менять. Интересно за сколько бы он подобрал.
https://xkcd.com/936/
Чтобы о капслоке не думать?
Ты можешь запомнить пароль в разном регистре длинее 14 символов? Я -- нет. Точно забуду регистр
Потому MS и позаботилась. Это, правда, было четверть века назад, но все помнят.
Как в анекдоте про выебать козу
Запомнить то я его запомню... Но вбивать каждый день я его реально заебусь.
В этом и проблема, я такие пароли очень быстро набираю и порядок клавиш иногда путается. А медленно я его не помню.
Да можно сделать, сенсоры вроде не дорогие. Китайцы даже за штуку какое-то говно продают.
Для разлочки включенного компа само то.
Зато на прыщах у меня переключение языка стоит на виндовой клавише (с флажком)
Ещё бывает, что при создании можно пароль подлиннее сделать, и хэш его посчитается. Но при вводе он обрезается до лимита.
Так на каких-то роутерах было. Параноикам приходилось сбрасывать устройство к заводским установкам и придумывать пароль поскромнее.
– а никто не сталкивался с описанием протокола аськи раньше?
Когда «Аська» принадлежала израильской компании «Mirabilis», протокол добывали исключительно реверс-инжинирингом.
Когда её выкупила компания «AOL», протокол сменился на совместимый с «AIM», но с какими-то расширениями.
Хакеры публиковали протокол, но он через каждые несколько месяцев безнадёжно устаревал. Протокол из эпохи «AOL» можно нагуглить по названию «OSCAR».
Потом «Аську» выкупила компания «Mail.ru». Дальше я уже не следил, что было с протоколом, потому что она начала терять популярность. У мейлрушного «Агента» точно был свой протокол.
– создатели квипа и миранды?
ладно, как-нибудь погуглю OSCAR
--Почему не пользоваться аськой?
--Ну как же, она же показывает рекламу!
Потом, наконец-то вышел официальный клиент «ICQ» для «J2ME». После нескольких лет пердолинга!
Внезапно ссылка на «OSCAR» нашлась тут:
https://ru.wikipedia.org/wiki/OSCAR
сегодня можем о таком только мечтать лол
но что-то не припоминаю, чтобы там случалось "по три дня нихуя не работало"
а на оф клиенте я не сидел и дня, кажется
https://www.cnews.ru/news/top/icq_otklyuchil_qip_i_miranda
повторите для вооон того студента:)
наверное писать клиента меседжей интереснее, чем унылое говно на пхп, потому Пресвитер Синьор и забил
впаша тогда кстати кмк ложился не сильно реже :-)
Если я с машины, использующей одну OEM-кодировку, по сети логинюсь в машину, использующую другую OEM-кодировку, мой пароль не распидорасит?
не используй там русские буквы, если сядешь потом на исландскую локаль
Там просто вчера кто-то увидел в исходнике несолёный md5, вот речь и зашла о дампе. Самого дампа, я думаю, ни у кого нет.
Хорошо, что хешей нет (был бы пиздец).
Плохо, что нет каптчи и тротлинга по айпи.
Я бы поставил гугл каптчу: она смегмовы прокси сама знает, и заставит его искать светофоры.
Про освежитель спрашивать не буду)
Впрочем, можно сделать и свою каптчу. Только список зашкваренных сетей придется собирать самому
посоветовали:
1) белое не носить
1) не использовать сериализацию
2) если нельзя не использовать, то предпочесть джсон иксэмелю
3) предпочесть ручное тестирование автоматизированному
Не обменивайся данными и тебя не взломают!
Теперь вы в полной безопасности
Неправда.
Вы забыли отключить машину от источника электричества.
ебать я старый
> проприетарная питушня
Ты что! Всё ведь поменялось и теперь они сканируют твои файлы нейронкой во имя добра.
И интелом тоже лучше не пользоваться: хуй знает чего они туда в чипсет насрали.
В процессор и микрокод.
> Move over, Meltdown and Spectre. A new “Foreshadow” attack, alternatively called L1 Terminal Fault or L1TF, targets Intel’s Security Guard Extensions (SGX) within its Core chips.
Какое cесурити )))
Вот да. Надо чтобы RISC-V, и чтобы его можно было у себя в гараже распечатать на персональном ASIC-принтере.
Блин! А я только писал что по-хорошему амуд и арм тоже говно.
И надо переходить на RISC-V, который спаяет на коленке j123123.
PS Кстати отрадно, что вы наконец-то смирились со смертью MIPS https://govnokod.ru/26528#comment536099
Дык известно же, эта хрень в чипсете умеет полное удалённое управление (AMT), в общем-то это и не скрывается.
да, я на него и намекал
Пойдешь в бар пиво пить, а прошивка в это время всю твою инфу кому надо и сольет. Не включая ОС даже
Начав с довольно слабого арма за несколько поколений обогнали десктопный core i5 по IPC.
За счёт покупки передовых нанометров у TSMC у них выходит и лучшая архитектура, и лучшие тех. процессы.
А по performance/Watt они кроют вообще все высокопроизводительные цпу.
> интелом лучше пользоваться
Если на ГК не поверили в ко-ко-ко-пилот из-за его неспособности написать что-то годное, то проверять существующие коды и детектить антипаттерны чуть проще. Несолёный хэш из примера выше, например.
Чтобы на выходе после исправления питушни у программиста получался код, который хотя бы доктор Смегма не сломает.
Начерта?
> нужно дофига переписывать
А что мешает хеширование унести в PHP, не натягивая ежа на ужа?
Кстати, а если я напишу for (i=0;i<1000;++i) hash=md5(hash);
Это секурно? Или говно?
Допустим когда Страйкер писал ГК md5 был нормальным хешем. Но за 13 лет он перестал быть таковым.
То есть имеет смысл сейчас писать for (i=0;i<1000;++i) hash=sha2(hash+salt);
Чтобы если вдруг в ближайшие 15 лет sha2 сдуется, то было бы не так просто это всё распетушить.
Лучше показать пользователю плашечку для ввода пароля и перехешировать его на ша2
А не надо ничего показывать. У тебя есть новый пароль, ты проверил его об старый хеш. Насчитывай новый хеш и радуйся.
Или юзай password_hash из PHP, там уже всё это сделали как надо. Да, он умеет прозрачный апгрейд хеша во время логина!
Именно поэтому я за PHP.
Пользователь логиница. Я беру его пароль, провеяб старый хеш, и перехеширую на новый
Жопа в том, что если пользователь ушел в астрал, то как я узнаю его пароль чтобы перехешировать?
> Или юзай password_hash из PHP,
благодарю, но у меня более цисгендерные технологии
By default, Django uses the PBKDF2 algorithm with a SHA256 hash, a password stretching mechanism recommended by NIST.
Но я могу выбирать хешер, и даже Argon2.
https://docs.djangoproject.com/en/3.2/topics/auth/passwords/
А, мне показалось "показать смену пароля".
Ну если ушёл в астрал -- останется с легаси хешем, что поделать. Не так это и страшно, на самом деле. Даже на MD5 до сих пор нету pre-image атак. Ну будет брутиться чуть быстрее, чем свежие.
Звучит круто.
Только не пойму одного.
> Note that this constant is designed to change over time as new and stronger algorithms are added to PHP.
Если они будут менять алгоритмы от версии к версии, то как оно вычислит старый хеш для сверки при логине?
Там в итоговый блоб сохраняются все параметры, а не только значение хеша. При проверке он будет юзать параметры из блоба, а не свежие дефолты. Потом пересчитает со свежими дефолтами и попросит тебя сохранить в базу обновлённый хеш.
А встроенные для удобства кодеров эпсилоны в функции range() по плав. питухам это говно или нет?
При выводе чисел? Х.з., мне нравится эта идея. Кого там ебёт этот младший бит, погрешность вычислений всё равно намного больше как правило.
А мы очень давно разбирали как реализованы плав. питух range во всяких языках.
https://govnokod.ru/11978#comment157376
И по-моему единственным языком где они работали более-менее нормально оказался именно «PHP».
https://govnokod.ru/11978#comment157356
Сразу видно где практический язык, а где теоретическая питузня для заедушных кукаретиков.
PHP — технология богов.
На г-коде ПХП хвалят. Пойду я отсюда. Пускай вам Доктор Смегма про Артура Атарбековича в Лондоне расскажет
Какой идиот ))) Такими темпами мы Страйкеру в понедельник полный список отправим. С учётом того, что в выходные будем пить, гулять и не записывать ни единого логина.
Постоянно.
https://govnokod.ru/16298#comment656848
А на чём по-твоему написаны ГК и Хуз?
гг
Итереции, емнип, там совсем не ради сдутия алгоритма. А банально для защиты всяких макак с паролем 123.
Во многих прогах итереции задаются не количеством, а временем. Если пароль надо хешировать секунду на актуальном железе, то это совсем не весело перебирать.
От смегминых табличек защищает соль (хеш без соли мы не рассматриваем, это такое ротоёбство, что даже как-то неприлично)
А вот сделать так, чтоб спиздя соль и хеш Смегма ломал бы по паролю в секунду пердя и грея атмосферу и платя за электричество -- вот это дело
А чем плох?
Тем, что быстрый? Так можно «sleep» вставить.
Или тем, что нашли коллизии? Так ведь легко сгенерировать пару паролей, у которых хэш совпадёт. В одном из этих паролей наверняка будут символы из эфиопского или из тайского языка. Сгенерировать пару, да так чтобы в обоих все символы были читаемыми, задача потруднее.
А вот генерировать новый пароль по уже заданному хэшу пока ещё никто не умеет. По крайней мере, мне не попадался реальный пример «хорошего» хэша, к которому подходит 100500 паролей.
Да и как правило коллизии обнаруживаются на больших данных (хотя бы больше килобайта), а тут у некоторых пароль из трёх символов.
Лолшто? В хешкат?
Если тебе пофиг на кражу базы, можно вообще не хешить. Весь смысл солений-хуений именно в снижении риска для юзеров когда у тебя базу спиздят.
Для тебя как для владельца сайта хеш не даёт ничего.
Думаешь, захэшировали? Я нашёл дамп 90 миллионов учёток «Вконтакте» с паролями. Обнаружил там реальные пароли от своих старых учёток. Причём эти пароли не «123».
впрочем, что я такое спрашиваю :-D
Олимпиадники Вконтакта решили, что хеширование сжигает слишком много тактов, и лучше сравнивать пароли через memcmp()
Допустим, сделали задержку 10с. Смегмор сделал 1000 запросов, подождал 10с и получил 1000 результатов.
С другой стороны, если сделать глобальную задержку на весь сайт, никто не сможет залогинится, пока Смегмор не подождёт 10000 секунд свои результаты.
Расслабить жопу и вставить...
Зачем тебе сервак блочить sleep'ом? Выдай юзеру ошибку в духе "подождите 50 секунд", сохрани таймштамп в базу. Если придёт раньше - ну скажешь "подождите ещё 20".
Говно конечно. Соли нету, будет ломаться теми же табличками, что и просто md5().
Посмотри как настоящий PBKDF2 устроен, к примеру.
Для этого сначала эти таблички нужно утащить с сервера.
Гораздо хуже, что в «Граватаре» md5 и без соли, где хэши видны всему миру. А менять свой алгоритм «Граватар» не собирается.
Не куплю, даже если бы фергана
Знаю. Но как говорил один умный человек: «знания должны быть доступны всем». Мне интересно насколько нас внимательно читают
Кстати, он так и не смог пробить синхронизацию стока на нгк?
https://github.com/gost-gk/ngk/commit/e6996f0ca8c3dd2b0cfbc8ac7b152015893d7111
P.S. А 1024-- сгнил и всё ещё ридонли.
не дождался
Ты знаешь что делать.
работает.. ура товарищи....
Но вообще, учитывая что ты отошел от полного соответствия оригинальному тупосрипту (https://govnokod.ru/27606#comment659096 - "а у меня не точная копия TS. я шаманю как могу. главная задача это выеб..ать С и С++ :)" ) есть подозрение, что такой нетупосрипт никому нахуй не нужон будет
Он уже сделал. У него получился код на С++ медленее, чем на TS. А у другого питуха тот же код на С++ отработал в 650 раз быстрее. Так что бенчмарки там специфисськие
Кто-то забыл включить -O2?
http://govnokod.ru/27550#comment652874
В мемы же ))
И кол-во тактов больше в 100 раз
Твой "улучшенный C++" - нахуй не нужно. Обоснование: никто не будет писать на "улучшенном C++", если он не будет нормально обратносовместим с неулучшенным "C++". Твой "улучшенный C++" не имеет такой совместимости. Следовательно - нахуй ненужон
Они пытались сесть на джва стула: и угодить набирающему моду тогда GC, и быть низкоуровневым убийцей крестов.
И то, и другое, к сожалению получилось хуёво.
Если сильно метушиться, можно памяти лишиться.
ЧТО?
Там разве нет никаких питумизаций, которые вилочкой раз-раз-раз, чтобы чисто было?
Если у тебя охуиллиард шаблонопарашных хедеров в одной единице трансляции, нихуя там не чистится, пока единица трансляции не закончится.
Ты ведь понимаешь, что если GC может быть, а может не быть, у тебя будет по-сути два языка? Ну т.е. в одном языке у тебя нельзя будет писать эффективный xor-связный список, потому что его сожрет этот самый GC т.к. не распознает перексоренные указатели как референс на что-то там.
А какие ещё бывают, в которых адреса нужно вычислять?
Например если у тебя есть malloc() который работает определенным предсказуемым образом, ну допустим если его можно попросить чтобы он выделял адреса обязательно в диапазоне от 0xffff0000 до 0xffffffff, то указатели из такого malloc можно хранить в 16 битах. А если он еще и выделяет память, выравненную по определенным границам (реальный malloc гарантирует выровненность чтобы туда любой базовый тип можно было упихнуть), то можно еще наэкономить битиков. Если GC про такую питушню не знает, он ее может нахер удалить естественно.
И в gc-языке можно сделать массив размером до 65536 и хранить индекс в 16 битах.
* Работает с не только с массивами байтов, а с произвольными типами и с любым паддингом.
* Нет возможности ошибиться в постоянных кастах байтов в настоящий тип и ручных умножений на размер.
* Не ломается, когда реализация маллока изменилась.
* Не требует фрагментации памяти ради выравнивания по младшим битам.
И в момент удаления всё может подвиснуть на секунду, но это такое
Наоборот. Чем больше мусора, и чем он крупнее, тем быстрее работает сборка.
> Правда неизвестно когда этот массив удалится, потому нет деструкторов.
asm.js так и работает: выделяет большой типизированный массив памяти.
И в них руками аллоцирует объекты.
Much of this performance gain over normal JavaScript is due to 100% type consistency and virtually no garbage collection (memory is manually managed in a large typed array). This simpler model with no dynamic behavior, no memory allocation or deallocation, just a narrow set of well-defined integer and floating point operations enables much greater performance and potential for optimization.
Впрочем, индекс уделывает пердольный покусанный указатель и без ГЦ. Более поддерживаемый и надёжный код без хаков и багов обходится дешевле в поддержке.
Если сравнивать ГЦ, написанный серьёзным коллективом, который выжимал все соки из своего языка, с кривым говном от обычного заедушного питушка, то тормоза будут не по вине ГЦ.
Сборщику мусора просто не давали нормально отработать, какие тут тормоза!
Сейчас он почему-то обработал и 10К постов за раз. Видимо, я просто поставил 64-битную версию Node.
Что интересно, от загрузки JSON со всем ГК парсер не падает. Вероятно, память жрётся из-за ошмётков объектов парсинга и кусков строк, от которых используется только небольшой слайс.
Интересно.
А в чём проблема обрабатывать данные по одному посту и складывать распарсенную стату в объект/бд?
Или оно со временем накапливается?
> память жрётся из-за ошмётков объектов парсинга и кусков строк
А если попробовать new String (в Жабе помогало).
Я бы снял дамп и посмотрел что там собирается.
> Или оно со временем накапливается?
Да
> А если попробовать
> Я бы снял дамп
Лень. Да и код там такой, что я его перестал понимать ещё в 2013. Максимум всю эту питушню когда-нибудь на гитхаб выложить - пусть пердолики пердолятся, а хохмисты выкладывают на ГК.
Сейчас надо, по идее, качать дампы Полины/Иньо, переписать скрипт статистики под них. У них всё равно самая свежая база, а я задолбаюсь изменения отслеживать, а закачивать всё - тоже не очень вариант.
Где-то была у меня общая база, куда я добавлял версии комментариев. Хотя, она сгнила.
Там какие-то пердольные команды "merge -input" перед скачиванием и "merge -output" после скачивания. Хрен знает, что они делают (по идее, как-то должно быть связано с диффом, но это неточно). Я в этот раз качал вручную и не сделал merge -input. Не знаю, чем это мне грозит. Хотя, файл полной базы я всё равно не обрабатывал.
Какой Пиздец )))
Использовать технологию 8 (ВОСЕМЬ) лет и не разобраться почему в ней течёт память.
Впрочем я походу понял в чём дело.
Другое дело, что там достаточно много хороших идей, которые потом можно реализовать в уже нормальном языке. К сожалению стандартизаторы "D" как и стандартизаторы "C++" (тот же Александреску и оттуда и оттуда) добавляют очень много всякой нахуй не нужной хуйни (вместо того чтоб сделать работу с AST через гомоиконность и таким образом уже добавлять всякую хуйню)
Conclusion
Initially, D looked almost as good as Lisp for generating functions. As we tried to gain finer control of the generated function, our code started to look a lot more like C macros; in fact, in some respects, it was even worse: we had to put an entire function definition in a string mixin just to set its name.
This is due to the fact that D is not as “regular” a language as Lisp. Some of the people helming the evolution of D are working on changing this, and it is my hope that an improved D will emerge in the not-too-distant future.
In the meantime, the experimental refraction module from the bolts meta-programming library offers a saner, easier way of generating functions without compromising on the idiosyncrasies that come with them. It allows you to pretend that functions can be disassembled and reassembled at will, while hiding all the gory details of the string mixins that are necessarily involved in that task.
* Там GC
* Там нельзя выбирать где что и как размещать или копировать
* Там крайне неудобно работать с байтами
Просто взять скриптушню и скомпилировать ее в нативный код это НЕ способ побидить С++
Иначе его можно победить с помощью "Go". Или с помощью Эйфории (она умеет скомпилироватьтся)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int8Array
> Там нельзя выбирать где что и как размещать или копировать
Может это и хорошо.
Это и есть "крайне неудобно"
Опиши мне структуру из трех полей: два байта, два байта, и четыре байта
>Может это и хорошо.
А может и нет
type int16 = 65535;
type int32 = 4294967295;
{ v1: int16, v2: int16, v3: int32 }
[ int16, int 16, int 32 ]