В конце сообщения я отвечу на Ваш вопрос того, почему Вы могли бы хотеть использовать несколько генераторов случайных чисел для "большей случайности".
существуют философские дебаты о том, что означает случайность. Здесь, я буду иметь в виду "неотличимый во всех отношениях от универсальной формы (0,1) iid распределение по образцам, оттянутым", я полностью игнорирую философские вопросы того, какой случайный.
объем Knuth 2 имеет анализ, где он пытается создать генератор случайных чисел, как Вы предполагаете, и затем анализирует, почему он перестал работать, и каковы истинные вероятностные процессы. Объем 2 исследует RNGs подробно.
Другие рекомендуют Вам использующий случайные физические процессы генерировать случайные числа. Однако как мы видим во взаимодействии Espo/vt, эти процессы могут иметь тонкие периодические элементы и другие неслучайные элементы, частично из-за внешних факторов с детерминированным поведением. В целом лучше никогда не принять случайность, но всегда тестировать на него, и обычно можно исправлять для таких артефактов, если Вы знаете о них.
возможно создать "бесконечный" поток битов, который кажется абсолютно случайным, детерминировано. К сожалению, такие подходы растут в памяти с числом битов, которые попросили относительно (как они имели бы к, чтобы не повторять циклы), таким образом, их объем ограничен.
На практике, Вы - почти всегда более обеспеченное использование генератора псевдослучайного числа с известными свойствами. Ключевые числа для поиска являются размером фазового пространства (который примерно смещается между образцами, можно все еще рассчитывать на то, чтобы быть uniformally распределенным), и разрядная ширина (число битов в каждом образце, которые uniformally случайны друг относительно друга), и размер цикла (количество образцов, которые можно взять, прежде чем распределение начинает повторяться).
Однако, так как случайные числа от данного генератора находятся детерминировано в известной последовательности, Ваша процедура могла бы быть представлена кем-то перерывающим генератор и находящий выравнивающуюся последовательность. Поэтому можно, вероятно, избежать распределения, сразу распознаваемого как прибывающий из конкретного генератора случайных чисел при поддержании двух генераторов. Сначала, Вы выбираете i, и затем отображаете это uniformally по одному к n, где n является самое большее размером фазы. Затем во втором Вы выбираете i раз и возвращаете результат ith. Это уменьшит Ваш размер цикла до (orginal цикл size/n) в худшем случае, но для того цикла все еще генерирует универсальные случайные числа и сделает настолько способом, который делает поиск экспоненциала выравнивания в n. Это также уменьшит независимую длину фазы. Не используйте этот метод, если Вы не понимаете то, что уменьшило цикл и независимые длины фазы, средние для Вашего приложения.
В списке рассылки Python есть очень похожая ветка , в которой упоминается Windows виртуальные COM-порты и обсуждает возможности псевдотерминала Unix. Если приложение (а), которое вы хотите использовать, позволяет вам ввести определенный файл tty-устройства, это может быть самый простой путь. (Не считая того, чтобы попросить авторов предоставить API плагина для того, что вы пытаетесь сделать, или купить себе Bluetooth GPS-мышь за 20 долларов . )
Используете ли вы OS X?
Существует проект macosxvirtualserialport в коде Google, который предоставляет графическую оболочку для некоторых функций утилиты под названием socat . Я бы рекомендовал взглянуть на socat, если вы видите потенциал в маршруте псевдо-tty. Я считаю, что вы могли бы использовать socat для связывания канала от программы Python с псевдо-tty.
Большинство собственных приложений Mac будут запрашивать IOServiceMatching для устройства с kIOSerialBSDRS232Type, и я сомневаюсь, что псевдо-tty будет отображаться как Служба IOKit.
В этом случае, если вы не можете найти проект, который уже реализовал такую вещь, вам нужно будет реализовать драйвер, как описано в этом потоке Как создать виртуальный COM-порт . Если вы собираетесь создать драйвер устройства, вы хотели бы основать его на IOKit из-за этого вероятного запроса IOServiceMatching. Вы можете найти проект Apple16X50Serial, упомянутый в этом посте, в верхней части списка открытого исходного кода Apple (перейдите на главную страницу и выберите более старую версию ОС, если вы хотите настроить таргетинг на что-то до -10,6).
Если ваше приложение наиболее полезно для работы с данными в реальном времени (например, приложение RouteBuddy, упомянутое в ветке списка рассылки Python , может регистрировать текущие позиции ), тогда вам нужно будет получать обновления из своих веб-источников (надеюсь, они поддерживают долгую -polling) и преобразовать их в базовые предложения NMEA RMC. Вы не хотите делать это из кода вашего драйвера. Вместо этого разделите свою работу на части уровня ядра и пользователя, которые могут взаимодействовать, и поместите как можно меньше кода в часть ядра.
Если вы хотите разрешить приложениям как читать, так и писать в эти веб-сервисы, лучшим вариантом, вероятно, будет имитация устройства Garmin. Компания Garmin более или менее документировала свой протокол в файле IntfSpec.pdf, включенном в их SDK интерфейса устройства . Опять же, вы захотите разделить столько, сколько сможете, на код пользовательского пространства.
Мне не удалось найти проект или утилиту, реализующую сторону ядра виртуального последовательного интерфейса на основе IOKit, но я бы удивлен, если где-то там не прячется никто. К сожалению, большинство ответов, которые я нашел на этот вопрос, были такими: разработчику было сказано заняться написанием kext .
Компания Garmin более или менее документировала свой протокол в файле IntfSpec.pdf, включенном в их SDK интерфейса устройства . Опять же, вам нужно разделить как можно больше на код пользовательского пространства.Мне не удалось найти проект или утилиту, реализующую сторону ядра виртуального последовательного интерфейса на основе IOKit, но я бы удивлен, если где-то там не прячется никто. К сожалению, большинство ответов, которые я нашел на этот вопрос, были такими: разработчику было сказано заняться написанием kext .
Компания Garmin более или менее документировала свой протокол в файле IntfSpec.pdf, включенном в их SDK интерфейса устройства . Опять же, вы захотите разделить столько, сколько сможете, на код пользовательского пространства.Мне не удалось найти проект или утилиту, реализующую сторону ядра виртуального последовательного интерфейса на основе IOKit, но я бы удивлен, если там никто не прячется. К сожалению, большинство ответов, которые я нашел на этот вопрос, были такими: разработчику было сказано заняться написанием kext .
Мне не удалось найти проект или утилиту, реализующую сторону ядра виртуального последовательного интерфейса на основе IOKit, но я был бы удивлен, если бы где-то там не было ни одной. К сожалению, большинство ответов, которые я нашел на этот вопрос, были такими: разработчику было сказано заняться написанием kext .
Мне не удалось найти проект или утилиту, реализующую сторону ядра виртуального последовательного интерфейса на основе IOKit, но я был бы удивлен, если бы где-то там не было ни одной. К сожалению, большинство ответов, которые я нашел на этот вопрос, были такими: разработчику было сказано заняться написанием kext .
Я не совсем уверен, как выполнить то, о чем вы просите, но я, возможно, смогу дать некоторое представление о том, как вы могли бы начать , чтобы это сделать . Итак, начнем:
Устройство GPS отображается в большинстве систем как не что иное, как последовательное устройство - он же COM-порт, если вы имеете дело с Windows, / dev / ttySx, если вы используете * nix. По определению, конкретная задача последовательного порта - передавать данные по шине по одному блоку за раз. Таким образом, из этого логически следует, что если вы хотите имитировать присутствие устройства GPS, вы должны собрать данные, которые вы потребляете, и поместить их в поток, который каким-то образом действует как активный последовательный порт.
Есть, однако есть некоторые сложности, которые вы, возможно, захотите учесть:
По пути вы » Я также должен преобразовать полученные координаты в правильные предложения GPS. Вы можете найти для них спецификации, но я бы определенно подружился со стандартом NMEA - хотя это и ошибочный стандарт, с ним все равно согласны.
Надеюсь, это помогло вам, по крайней мере, немного . Есть ли какие-либо подробности, относящиеся к вашей проблеме, которые, по вашему мнению, могут быть полезны при ответе на этот вопрос?
Я не особо разбирался в этом, но рассматривали ли вы вариант использования SDK Skyhook ? Это может дать вам то, что вы ищете. Он доступен для всех основных настольных и мобильных ОС.
Взгляните на Franson GPS Gate , который, помимо прочего, позволяет подключаться к Google Earth (например, моделировать GPS и т. Д.). Это только окна, но я думаю, что вы могли бы почерпнуть из него несколько полезных идей.