Сергей Шашков @ShashkovS
Менеджер продукта, методист, разработчик
Information
- Rating
- 10,046-th
- Location
- Россия
- Date of birth
- Registered
- Activity
Specialization
Backend Developer, Product Manager
Lead
Python
Project management
Algorithms and data structures
asyncio
Могу сказать как краевед, который считал эти копейки много лет (и как математик).
Ни в коем случае нельзя считать проценты на остаток добавляя какую-то дополнительную точность (условно 3 знака после запятой): всё разъедется через некоторое время с вероятностью 100%.
Правильное вычисление выглядит так:
Нужно каждый раз считать полную сумму с нужной итоговой разрядностью «как бы заново» и вычитать предыдущее значение.
Условно, если у нас на вкладе 10.00 рублей и ставка, скажем, 16.5%, и прошло, условно, 17 дней месяца, то должно быть добавлено 10.00 * 16.5 * 17 / 100 / 365 (или 366 в високосный год).
Вот эта штука
10.00 * 16.5 * 17 / 100 / 365
, если в результате нужно округлить к целому по математическим правилам, считается точно при помощи несложной арифметики в целых числах.Получится 0.08 (8 копеек). Значит после 17 дней, у нас 10.08.
После 18 дней слова будет 10.08. А вот уже после 19-го дня будет 10.09 рублей.
Такие расчёты гарантируют, что не будет накопления ошибок округления, и на любой конкретный день сумма будет правильной.
Код не обфусцирован, просто открывайте и читайте
Уж лучше через связывание в параметр по умолчанию. Читается получше...
Там мультиподпись. Нужно передать "файлик" через всех подписывающих. Там же наверняка "серьёзные" дяти, не через тележечку они его перекидывают? Значит, есть какой-то программный интерфейс для передачи его по кругу. И на этот интерфейс можно совершить атаку.
Может и не веб, конечно, но веб просится первым.
Насколько я понимаю, устроено всё так.
Там холодные кошельки с мультиподписью.
У каждого из N человек есть девайсина.
На одном из устройств создаётся черновик транзакции.
Дальше файл с черновиком транзакции должен пройти через холодный кошелёк каждого подписанта, и каждый её должен подписать.
В конце файл с подписанной всеми транзакцией переносится на устройтво с доступом к интернету, проверяются подписи, делается транзакция.
Скорее всего передача черновика транзакции происходит тупо через интернет, и данные транзакции отображаются в каком-то веб-интерфейсе.
Соответственно если получится атаковать этот веб-интерфейс, а также компьютер создающего транзакцию, то дело в шляпе. Сначала создаётся кривая транзакция (на кривую сумму и кривой счёт), после чего у всех подписантов в сломанном веб-интерфейсе отображается не содержимое подписываемой транзакции, а то, что вводил первый человек.
С современным вебом с тысячими завимостей под капотом представить себе атаку на веб-приложение легко. Про первую часть с атакой на этап создания транзакции не очень понятно. Но если там тоже веб...
Немного другое решение (на самом деле близкое к поиску циклов, потому как их очень похожим образом можно искать).
Сначала делаем обход в глубину с отметаками времени входа-выхода для дорог одного типа.
Это позволяет за O(1) отвечать на вопрос "является ли эта вершина предком этой", что для нашего графа эквивалентно "если ли из первой ж/д первого типа во вторую".
Дальше делаем обход по железным дорогам второго типа, но проверяем соединённость по первому типу при помощи отметок времени.
А где хоть какое-то сравнение производительности по сравнению с однопоточным вариантом?
Ну а куда они могут без юр.лица в РФ и без "помощи" визы или мастеркарда деть сунуть рубли?
Хотя бы по ip не банят --- уже хорошо.
Это --- временное ограничения из-за атаки на их инфрастуктуру.
У вас устаревшие данные.
У меня максимум на 4 одновременных процессах --- 70К транзакций в секунду.
Дальше до 20 процессов --- около 30К транзакций в секунду. И это в режиме, когда все процессы только и делают, что пишут в одную общую нагруженную таблицу.
Если вы пишете асинхронный вебсервис, то там будет столько воркеров, сколько у вас физических ядер. То есть до 20 воркеров --- всё ок, это достаточно высокая нагрузка.
Не high load, конечно, но..
Более того: Т-банк по комиссиям не присылает уведомлений (никаких и нигде). Их можно обнаружить только в выписке по своей прямой инициативе. Так что среднее число оплат комиссии на человека будет гораздо больше единицы.
Бизнес, ничего личного.
Про API так вообще очевидно: они для доступа к API используют библиотеку openai, и типичный код выглядит так:
То есть их публичные API совместимы с OpenAI'шными. Что просто супер-удобно, ведь имеющийся для OpenAI-код можно легко применить к их модели.
Ой, ещё как считают. У нас есть специальный чатик, куда мы double-дичь с денежками скидываем. Кажется уже пару десятков примеров.
Ой, да, спасибо, поправил.
Но в целом оно криво работает только на экстремальных числах.
То есть в условном банке или при расчёте денег такое писать не нужно: обязательно на копеечку когда-нибудь разъедется. А если считаешь пиксели на экране, то идеально.
Строго говоря x+0.5 не всегда работает правильно.
Вот, кстати, решение на Python через эту формулу. Только оно ощутимо медленнее:
Код на Python
PEP8 с рекомендацией 79 — это от 2001-го года. С мотивацией
Сейчас такие терминалы если и есть, то их почти никто не использует. Ну и 100%, что дети не будут писать код, который будут на них читать.
Современные мониторы — широкие, а не высокие. Дорого место по высоте, а не по ширине.
Лишние переносы там, где они по смыслу не нужны, только затрудняют чтение. Ширина 79 заставляет их использовать в декларациях функций, в длинных строках (там где 'blah-blah') и т.п. — там, где с ними хуже, чем без них.
Что это? Для кого это? Ну, то есть я понимаю, что статья — реклама «школы для детей», но для кого статья?
Кто пишет красивый код? Дети? Дети с нуля пишут
? Или взрослые пишут код, который читают дети?
В 2024-м? Правда?
В общем в статье безумная смесь тройки цитат из PEP8, стандартных клише-блоков «зачем детям python» и «где учить питон» и ссылка с рекламной кампанией на лендос.
Паскаль (как и честный python, c#, js и т.п.) — это не про 7-8 лет, и даже не про 10-11-12, если говорить о массах: рано, сложно.
Началка — это что-то полу-игровое: цель не научить языку, а научить думать «как программист»: какие нужны шаги, как исправить ошибку и т.п.
Лично я не понимаю, зачем в «обычной» школе учить язык, на котором школьник не сможет решить ни одной своей «настоящей» задачи. Для тех двоих, кто станет айтишниками, начало с паскаля может и принесёт пользу, для остальных — вряд ли.
ИМХО примерно как начинать обучение вождению с управлению ВАЗ2106 («шестёрка») с обязательным залезанием под капот и самостоятельным ремонтом каждый раз, когда что-то перестаёт работать. Зато близко к железу...
Современное «под капотом» авто настолько сложно, что большинство водителей не то, что не понимает, как оно устроено, даже просто не сможет назвать функции хоть каких-нибудь 10 агрегатов.
PS. Я пока только 11 лет учу школьников. Сам начинал с бейсика и паскаля, но сейчас я уверен, что языки, в которых простые вещи делаются сложно, скорее убивают мотивацию, чем воспитывают таланты.