Как стать автором
Обновить

Изучение случайности в JavaScript

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров3.6K

В моем посте о создании утилиты цветовой палитры в Alpine.js случайность играла большую роль: каждый образец генерировался как композиция случайно выбранных значений Hue (0..360), Saturation (0..100) и Lightness (0..100). Когда я создавал эту демонстрацию, я наткнулся на Web Crypto API. Обычно при генерации случайных значений я использую метод Math.random(), но в документации MDN упоминается, что Crypto.getRandomValues() более безопасен. В итоге я решил попробовать Crypto (с фоллбэком на модуль Math по мере необходимости). Но это заставило меня задуматься, действительно ли "более безопасный" означает "более случайный" для моего варианта использования.

В чем разница

Во имя богов Рандома. Настраиваем вероятность исходов в играх

Время на прочтение8 мин
Количество просмотров8.6K

Непредсказуемость всегда вызывает у людей интерес и является популярным инструментом в руках разработчиков игр: процедурная генерация, лутбоксы, шансы крита и ещё множество параметров, на которые игрок может лишь молиться, чтобы они ему благоволили. Однако иногда подобные механики оборачиваются гневом простых людей против создателей. В этой статье рассмотрим реализации рандома для генерации исходов таким образом, чтобы минимизировать недовольство игроков и сохранить их интерес.

Читать далее

Casual-заготовки под Swift

Время на прочтение6 мин
Количество просмотров12K
image

Привет, братья во swift-e. Пришлось и мне освоить сей птичий язык, и нет лучшего способа для обучения, чем сделать программный продукт, работающий на потрепанном iPhone. Меня давно кусала изнутри сложная математическая головоломка, а тут раз! И вдруг свифт. Представленный код местами выглядит смешно, но понятно. Сам алгоритм игры я обсуждать не буду, он слишком сложен для местных модераторов, не умеющих в уме разделить 111 на 3. А вот примеры полезных функций для разработчиков casual game — пожалуйста, обсудим.
Читать дальше →

Mycelium Entropy — девайс для создания бумажных биткоин-кошельков

Время на прочтение2 мин
Количество просмотров7.5K
Mycelium Entropy — это самый безопасный способ создать бумажный биткоин-кошелек и сохранить Ваши сбережения в биткоинах. Представляет из себя маленькое USB-устройство в форме флешки, которое может генерировать биткоин ключи и адреса и распечатывать их через принтер (paper wallet). В отличии от всех других биткоин-кошельков, которые используют псевдослучайный генератор случайных чисел, данный девайс использует источник аппаратной энтропии, что делает его намного более безопасным к атакам полного перебора (bruteforce). Создать кошелек очень просто, нужно выполнить всего лишь два действия — вставить USB-флешку в принтер и отправить на печать.

Читать дальше →

У Microsoft не получается предлагать браузеры в случайном порядке

Время на прочтение1 мин
Количество просмотров1.3K
На хабре уже писали о модуле выбора браузера для европейских пользователей: «Модуль выбора браузеров появляется в качестве обновлений Windows. Сразу показывается пять самых популярных (Apple Safari, Google Chrome, Microsoft Internet Explorer, Mozilla Firefox и Opera). Причем в случайном порядке.»

Как выяснили ребята со словацкого сайта DSL.sk, у модуля большие проблемы именно со случайным порядком вывода браузеров. Страница, с помощью которой предпологается выполнять требования Евросоюза, не выводит список браузеров в случайном порядке, как предполагалось. Вместо общепринятых алгоритмов используется наихудший вариант реализации перемешивания списка браузеров через сортировку массива с функцией сравнения, возвращающей случайный результат. Из-за этого вместо равновероятного размещения браузеров в списке получается смещённое. Таким образом, для IE вероятность оказаться на последнем месте первой страницы почему-то оказалась наибольшей (~50%)! Однако при этом он всегда показывается изначально на первом месте, и только после окончания «перемешивания» меняет своё местоположение. Что интересно, указанный выше алгоритм выдаётся первым при поиске по «javascript randomize array» как в google, так и в bing :)

image

Технические подробности расследования (на английском).

P.S.: Как подсказал naum код на странице поправили.

os.urandom, CPython, Linux и грабли

Время на прочтение5 мин
Количество просмотров21K


Хочу поведать поучительную историю ошибки в реализации функции urandom из модуля os в CPython на UNIX-подобных ОС (Linux, Mac OS X, etc.).

Цитата из документации по тройке:
Return a string of n random bytes suitable for cryptographic use.

This function returns random bytes from an OS-specific randomness source. The returned data should be unpredictable enough for cryptographic applications, though its exact quality depends on the OS implementation. On a Unix-like system this will query /dev/urandom, and on Windows it will use CryptGenRandom().
Документация по двойке добавляет:
New in version 2.4.
Другими словами, к примеру, под Linux, urandom читает и возвращает байты из системного устройства /dev/urandom. Напомню, что в этой ОС существуют два типичных устройства-источника энтропии: /dev/random и /dev/urandom. Как известно, первое устройство «медленное» и блокирующее, а второе «быстрое», и вопреки распространенному мнению, оба они криптостойкие источники (псевдо-)случайных чисел. Сразу скажу, КДПВ к статье отношения не имеет и речь пойдёт совсем не о криптографии, безопасности и об OpenSSL с Heartbleed-ом.

Казалось бы, как можно ошибиться в реализации столь простой рутины? Как это часто бывает, дооптимизировались…
Читать дальше →

Уязвимость в MACROSCOP (устранена с версии 1.9.72)

Время на прочтение8 мин
Количество просмотров12K
Я давно увлекаюсь информационной безопасностью, но одно дело – понимание поверхностной логики работы программного обеспечения, и совершенно другое – понимание логики его внутренней реализации. Внешне любая программа может выглядеть замечательно и гармонично, создавая иллюзию полной безопасности и защищённости, но стоит углубиться, копнуть глубже, и на поверхности окажутся нелицеприятные факты, которые могут привести к взлому системы и, в конечном счёте, к утечке или потере данных, а также временным и финансовым потерям. Причиной наличия уязвимости в приложении может быть как банальная невнимательность, катастрофическая нехватка времени, алгоритмическая или архитектурная сложность, незнание особенностей работы или реализации стороннего API, так и корыстный умысел. Зачастую сложно судить о том, что конкретно могло послужить причиной возникновения той либо иной уязвимости, но более важным моментом является скорость реакции разработчиков по её устранению.

Сегодня же пойдёт речь об уязвимости, обнаруженной мной в процессе знакомства с программным комплексом для IP-камер MACROSCOP от резидента технопарка «Сколково» компании ООО «Сателлит» (г. Пермь). MACROSCOP является именно программным комплексом, так как в состав решения входит целый ряд приложений: серверная и «всё в одном» часть для операционных систем семейства Microsoft Windows (от развития Linux решения разработчики недавно отказались), клиентская часть для Windows, Android, iOS и Windows Phone, конфигуратор, программа подключения Web-камер, проигрыватель файлов собственного формата, программа локального просмотра и резервного копирования архива, программа мониторинга состояния системы, различные интеллектуальные модули, а также приложения для интеграции с некоторыми сторонними системами и широкие возможности по интеграции с любым программным обеспечением посредством SDK. В MACROSCOP много плюсов и, тем не менее, он не лишён недостатков, чему можно посвятить отдельную статью: ведь не всегда разработчики афишируют отрицательные стороны своего продукта.

Пора переходить к сути дела

Cлучайный оракул на основе цифровой подписи в блокчейне

Время на прочтение6 мин
Количество просмотров3.1K

От идеи до реализации: модифицируем существующую схему цифровой подписи на эллиптической кривой, чтобы она была детерминированной, и предоставляем на её основе функции получения проверяемых в рамках блокчейна псевдослучайных чисел.


Читать дальше →

Random oracle based on blockchain digital signature

Время на прочтение5 мин
Количество просмотров2.1K

From idea to implementation: modifying the existing elliptic curve signature scheme to be deterministic and providing functions on it to obtain verifiable within the blockchain pseudorandom numbers.


Read more →

Бот для VK на Python с MySQL за час ч.2

Время на прочтение3 мин
Количество просмотров14K

Предисловие


Прошу извинения за то, что в первой статье не написал про работу с базой данных, но именно эта часть направлена на работу с MySQL.

3 часть будет неким дополнением, где мы рассмотрим работу с клавиатурой для бота и на этом цикл статей завершиться.

Подготовка


После прошлой статьи на руках мы должны иметь такой код:

import vk_api
from vk_api.utils import get_random_id
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
import pymysql.cursors
import requests

def get_connection():
    connection = pymysql.connect(host='you_host',
                                 user='you_user',
                                 password='you_password',
                                 db='you_db'
                                 charset='utf8mb4',
                                 cursorclass=pymysql.cursors.DictCursor)
    return connection

Читать дальше →

А есть ли случайные числа в CSS?

Время на прочтение5 мин
Количество просмотров12K


CSS позволяет создавать динамические макеты и интерфейсы в Интернете, но как язык разметки он является статическим — после установки значения его нельзя изменить. Идея случайности не обсуждается. Генерация случайных чисел во время выполнения — это территория JavaScript, а не CSS.

Или нет? Если мы учтем небольшое взаимодействие с пользователем, мы на самом деле можем генерировать некоторую степень случайности в CSS. Давайте взглянем!

Добавьте щепотку рандома в вашу игру

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров3.4K

Данным небольшим постом постараюсь убедить вас использовать чуточку больше рандома и процедурной генерации в ваших проектах.

В любом случае, будет много интересных ресурсов.
Читать дальше →

Идеальный эксперт или гороскопы на службе ERP

Время на прочтение2 мин
Количество просмотров2K
А вы пробовали когда-то делать системный анализ гороскопов? Я пробовал и нашел, что все эти советы дает Капитан Очевидность и они носят универсально-рекомендательный характер.
Например: Хабролюдям сегодня стоит приложить усилия для успешного завершения начатого дела, это может принести успех, но остерегайтесь возможных ДТП, особенно после обеда.

Разберем этот пример. В пятницу очень хорошо закончить запланированный этап работы, чтоб отдыхать со спокойной совестью. А вести себя внимательно на дорогах — это актуально всегда.

Так вот, однажды один владелец крупной компании захотел себе ERP. Но не простую, как у всех, а которая реально помогает управлять предприятием. Вводишь в нее цифры — а она говорит тебе, что надо сделать.

Казалось бы, идея не реальная, но… Я вспомнил за программу генерации гороскопов. Только вместо дней недели меня интересовала дисперсия по введенным числам, а точнее говоря — прибыль (или убыток) компании на этап ввода данных.
Читать дальше →

Фальсификация случайности и и преобразование сортировкой псевдослучайных последовательностей

Время на прочтение3 мин
Количество просмотров5K

Фальсификация случайности и и преобразование сортировкой псевдослучайных последовательностей


Цель: доказать возможность фальсификации случайности и реальность преодоления фальсификации случайности.

Случайность натуральная, разделённая на интегральные логарифмические спектры, предсказуемо показывает короткие дистанции повторов и дистанции повторов длинные массово отсутствуют, зато сортировка последовательности приводит спектры разделения в вид теоретический.

Пробел Просвещения России и СССР и СНГ: интеграл и логарифм в младших классах не изучают и впоследствии считают простейшее якобы сложным.

Алгоритмы рандома

Время на прочтение5 мин
Количество просмотров81K
В этой статье вы увидите самые разнообразные велосипеды алгоритмы для генерации случайных чисел.

Про что статья


Про алгоритмы генерирующие псевдослучайные числа, которые отличаются между собой качеством результата и скоростью исполнения. Статья будет полезна тем, кто хочет получить высокопроизводительную генерацию чисел в своих программах или разработчикам софта для микроконтроллеров и старых платформ по типу ZX Spectrum или MSX.
Читать дальше →

Перестаньте использовать UnityEngine.Random

Время на прочтение5 мин
Количество просмотров19K

Как часто вы используете конструкцию Random.value или Random.Range()? А как много эту конструкцию использовали разработчики фреймворков или плагинов, которые вы встроили в проект?

В данной статье мы обсудим как плохое архитектурное решение от Unity может одной строкой изменить все случайное поведение, сделав его не случайным.

Почему?

Случайности не случайны

Время на прочтение5 мин
Количество просмотров7.5K

Можно ли достоверно предсказать будущее хоть на немного вперед? Иногда - вполне, надо только много везения... или немного знаний.

Сегодня пронаблюдаем сеанс черной магии с последующим разоблачением, или «Я угадаю твой рандом с 3 строк!»

Читать далее

Как изменилась стандартная библиотека Python за последние годы

Время на прочтение10 мин
Количество просмотров23K

Python 3.8+


Когда выходит очередная версия Python, все внимание достается новым фичам языка: моржовому оператору, слиянию словарей, паттерн-матчингу. Еще много пишут об изменениях в асинхронной работе (модуль asyncio) и типизации (модуль typing) — эти модули на виду и бурно развиваются.


Остальным модулям стандартной библиотеки достается незаслуженно мало внимания. Хочу это исправить и рассказать, что интересного появилось в версиях 3.8–3.10.

Читать дальше →

Топ-10 докладов DotNext 2021 Moscow

Время на прочтение5 мин
Количество просмотров4.5K

У нас есть традиция: каждый раз перед очередной конференцией DotNext мы открываем видеозаписи предыдущей и рассказываем, какие 10 докладов особенно понравились участникам.

Вот и сейчас: уже в этом месяце пройдёт новый DotNext, а мы пока что открыли видеозаписи предыдущего и представляем Хабру главную десятку. Темы самые разные: и внутреннее устройство Random, и улучшения производительности в .NET 6, и SIMD-интринсики, и «пайплайн-ориентированное программирование».

А как думаете, что на самых верхних строчках? Для интриги расположили доклады в обратном порядке, чтобы до вершины надо было ещё добраться:

Читать далее

Разбор алгоритмов генерации псевдослучайных чисел

Время на прочтение10 мин
Количество просмотров43K

Я работаю программистом в игровой студии IT Territory, а с недавних пор перешел на направление экспериментальных проектов, где мы проверяем на прототипах различные геймплейные гипотезы. И работая над одним из прототипов мы столкнулись с задачей генерации случайных чисел. Я хотел бы поделиться с вами полученным опытом: расскажу о псевдогенераторах случайных чисел, об альтернативе в виде хеш-функции, покажу, как её можно оптимизировать, и опишу комбинированные подходы, которые мы применяли в проекте.

Читать далее