Окончательно разбираемся со скоростью передачи по Modbus

Скорость обновления данных по Modbus зависит от нескольких неочевидных параметров. На стадии проектирования возникает проблема, как оценить скорость будущей интерфейсной линии. В этой статье рассмотрим факторы, влияющие на скорость обновления данных по Modbus RTU, сделаем несколько типовых расчётов, а в конце статьи будет ссылка на web калькулятор скорости работы Modbus RTU линии.


Modbus всё ещё остаётся самым распространённым протоколом связи промышленного оборудования. Описание протокола и причины его распространённости можно найти во множестве статей, например тут. Далее подразумевается, что вы знакомы с основами работы протокола.

Мы будем рассматривать Modbus RTU, но полученные выводы будут частично применимы и к Modbus TCP.

Чтобы рассчитать скорость, начнём с рассмотрения физического протокола (1й уровень модели OSI). Modbus RTU использует физический интерфейс RS-485, RS-422 или RS-232(последний практически не используется для Modbus). Для передачи сигнала данные интерфейсы используют UART (Universal Asynchronous Receiver-Transmitter). Подробнее про UART можно прочитать тут.

Стандартная посылка UART состоит из:

  1. стартовый бит ($inline$start\_bit$inline$) 1 бит
  2. полезные данные ($inline$data$inline$) 7-8 бит
  3. бит чётности ($inline$parity\_bit$inline$) 0-1 бит
  4. стоповый бит ($inline$stop\_bit$inline$) 1-2 бит

То есть на каждые 7-8 бит полезных данных передается 2-4 вспомогательных бита. Скорость передачи полезных данных ($inline$V_{data}$inline$) будет ниже скорости работы интерфейса ($inline$V_{uart}$inline$). Вычислить $inline$V_{data}$inline$ можно по формуле:

$$display$$V_{data} = \frac{V_{uart} * data}{start\_bit + data + parity\_bit + stop\_bit}$$display$$

Далее необходимо разобраться как Modbus мастер общается с подчинёнными устройствами на канальном уровне (2й уровень модели OSI). В силу особенности физического интерфейса устройства подключенные к линии передают данные последовательно, то есть только одно устройство в текущий момент времени может слать данные. Из-за этого общение мастера с подчинёнными устройствами происходит циклически, последовательно читая и записывая регистры в подчиненные устройства. Полный цикл чтения регистров из подчиненного устройства будет выглядеть следующим образом:

  1. задержка (минимум 3.5 символа = 28 бит, ниже пересчитаем в секунды)
  2. передача запроса на чтение (8 байт)
  3. задержка ответа ведомого устройства (минимум 28 бит, часто это десятки миллисекунд на формирование ответной посылки)
  4. передача ведомым устройством ответной посылки (максимум 256 байт для Modbus RTU).

Некоторые инженеры выбирают четырехпроводную версию интерфейса, надеясь на ускорение передачи (подразумевая параллельную пересылку данных на приём и передачу). Очевидно это решение не работает. Последовательность посылки данных будет одинаковой для 2х и 4х — проводных линий.

Рассчитаем время, затрачиваемое на полный цикл чтения 125ти holding registers (максимальное количество для Modbus RTU) при следующих параметрах линии:

Формат кадра: 8N1 (8 data bit, no parity bit, 1 stop bit)
Скорость uart: $inline$V_{uart}$inline$ = 19200 bit/s
Скорость передачи полезных данных: $inline$V_{data}$inline$ = 15360 bit/s
Задержка мастера: $inline$master\_silence$inline$ = 28 bit / $inline$V_{uart}$inline$ (это минимально допустимая задержка, обычно больше)
Задержка ответа ведомого устройства: $inline$slave\_silence$inline$ = 0.04 s (значение зависит от ведомого устройства)
Посылка с запросом 125ти holding registers: 8 byte или 64 bit
Ответ со 125ю holding registers: 256 byte или 2048 bit

Формула для расчёта времени цикла чтения:

$$display$$T_{cycle} = silence\_master + 64 bit / V_{data} + slave\_silence + 2048 bit / V_{data} = 0.179 s$$display$$

Последовательность на запись регистров практически идентична. Размер посылки мастера будет больше, т.к. включает в себя информацию о записываемых регистрах. Подтверждение удачной записи от ведомого устройства будет 8 байт.

По спецификации Modbus к линии RS-485/422 можно подключить 32 ведомых устройства. Опрос ведомых устройств так же ведётся последовательно, обычно по кругу. Чтобы понять с какой скорость будут обновляться данные от $inline$N$inline$ ведомых устройств, надо умножить $inline$T_{cycle}$inline$ на $inline$N$inline$ Назовем это полным временем обновления $inline$T_{full}$inline$.
Несколько расчётов $inline$T_{full}$inline$ (читаем и записываем максимальное количество holding registers) при различных параметрах связи:
Формат кадра: 8N1, $inline$V_{uart}$inline$ = 19200 bit/s, Количество ведомых устройств, $inline$N$inline$ = 16
$inline$T_{full}$inline$ = 5.727 s
Формат кадра: 8N1, $inline$V_{uart}$inline$ = 9600 bit/s, Количество ведомых устройств, $inline$N$inline$ = 16
$inline$T_{full}$inline$ = 10.173 s
Формат кадра: 7E1, $inline$V_{uart}$inline$ = 19200 bit/s, Количество ведомых устройств, $inline$N$inline$ = 16
$inline$T_{full}$inline$ = 6.355 s
Формат кадра: 8N1, $inline$V_{uart}$inline$ = 19200 bit/s, Количество ведомых устройств, $inline$N$inline$ = 2
$inline$T_{full}$inline$ = 0.716 s

Как видно формат кадра влияет на время обновления данных, но не сильно. Значительно влияет скорость передачи данных, но в нашем примере мы передаём максимальное количество регистров, в реальных проектах этот фактор может быть не столь значителен. Сильнее всего на скорость обновления данных влияет количество ведомых устройств.

Для упрощения расчётов мы сделали web приложение для оценочного расчета времени обновления данных по Modbus

ссылка на оригинал статьи https://habr.com/ru/post/499922/

Софт для видеоконференций: Skype, Hangouts и Zoom-полукровка

image

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

Платформа Кол-во участников Цена Трансляция экрана Запись звонков Ограничение по времени Безопасность
Zoom Windows, macOS, Linux, iOS, Android До 50 (бесплатная версия) $14,99/мес. Есть Есть 40 минут Nuff said.
Discord Windows, macOS, Linux, iOS, Android До 10 База — бесплатно;
$9,99/мес. за Nitro: HD-видео, GIF, буст сервера;
$4,99/мес. за Nitro Classic — без буста
Есть Нет Нет Сквозное шифрование, без особых проблем
Skype Windows, macOS, Linux, iOS, Android До 50 Платные тарифы за звонки на городские номера Есть Есть Нет Сквозное шифрование
Hangouts Windows, macOS, Linux, iOS, Android До 25 в самом дорогом тарифе Подключение к конференциям — бесплатно;
от $5,40 до $25/мес. за организацию конференций
Есть Есть в платных тарифах Нет Были вопросы — на фоне Zoom меркнут. Транзитное шифрование
Google Duo Android, iOS До 12 Бесплатно Есть Нет Нет Сквозное шифрование
Facetime iOS, macOS до 32 Бесплатно Нет Нет Нет Сквозное шифрование
Big Blue Button Windows, macOS, Linux, iOS, Android Не ограничено До 2990 ₽ Есть Есть Нет Сквозное шифрование
Webex Все До 100 Куча тарифов вплоть до $21 000/мес. Есть Есть в платных тарифах Нет Сквозное шифрование
Jitsi Meet Windows, macOS, Linux, iOS, Android До 75 Бесплатно Есть Есть Нет Сквозное шифрование

Zoom

Компанию Zoom Video Communications основал в Калифорнии в 2011 году Эрик Юань. До этого он работал вице-президентом по разработке программного обеспечения для совместной работы в Cisco Systems. Сервис видеоконференций появился в 2013 году и был рассчитан на b2b-сегмент рынка.

В предыдущие годы аудитория Zoom росла постепенно, однако с началом пандемии она показала небывалый рост — на прошлой неделе Юань сообщал, что количество пользователей к апрелю составляет 300 миллионов человек ежедневно, в то время как в декабре это число составляло 10 миллионов. С приходом популярности начались скандалы, связанные с безопасностью сервиса: оказалось, что Zoom отправляет данные своих пользователей в Facebook, использует не тот вид шифрования, о котором заявляют разработчики, имеет множество уязвимостей, предоставляет личные данные своих клиентов другим пользователям из-за совпадения доменов электронной почты и многое другое. Разработчики Zoom начали активно исправлять все эти недостатки — так, Юань сообщил, что компания на три месяца откажется от добавления новых функций, сосредоточившись на устранении уязвимостей.

Помимо проблем с безопасностью, у Zoom есть и ряд других недостатков: например, в приложении установлено ограничение по времени в 40 минут для пользователей с бесплатным тарифом, а количество участников конференции ограничено 50 людьми. Платная подписка на Zoom стоит $14.99/мес. Зато в приложении можно транслировать экран и записывать аудио- и видеозвонки.

Discord

Discord разработала компания Hammer&Chisel из Сан-Фрнациско в марте 2015 года. Сервис позиционируют как бесплатный мессенджер с функцией аудио- и видеоконференций для геймеров, однако его можно успешно использовать и для повседневного и рабочего общения.

В сравнении с Zoom у Discord меньше функций — например, нет возможности записывать звонки, а количество участников видеоконференций ограничено десятью. Но Discord всё же в первую очередь предназначен для использования в играх, поэтому в нём есть такие удобные для геймера вещи, как оверлей, горячие клавиши и возможность создавать свои серверы, к которым могут присоединяться по ссылке другие пользователи для участия в аудио- и видеосвязи. К безопасности сервиса тоже есть вопросы — в октябре прошлого года специалисты обнаружили вредоносную программу Spidey Bot, которая использовалась для шпионажа и кражи информации. А в 2017 году аналитики компании InSights признали Discord самым популярным мессенджером среди киберпреступников.

Skype

Команда создателей Skype в 2003 году была мультинациональной — у истоков сервиса стоял швед Никлас Зеннстрем, датчанин Янус Фриис и эстонские программисты Ахти Хейнла, Прийт Казесалу и Яан Таллинн. Изначально в приложении были только аудиозвонки, а функцию видеоконференций добавили в версии 2.0. Skype Technologies оставалась самостоятельной до 2011 года, когда её приобрела корпорация Microsoft. Именно в первой половине 2010-х сервис имел наибольшую популярность, а шуточный видеоролик про «лучший файлообменник», залитый на YouTube в 2015-м, стал вирусным в рунете. Однако позже популярность пошла на спад: к 2019 году Skype занимал лишь пятое место в рейтинге самых используемых мессенджеров в России, уступая WhatsApp, Viber, Telegram и Discord.

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

Google Hangouts

Google разработала Hangouts в 2013 году — приложение выпустили 15 мая во время конференции разработчиков Google I/O. Сервис был призван заменить сразу три системы для мгновенного обмена сообщениями: Google Talk, Google+ Чаты и Google+ Видеовстречи.

В приложении доступны три тарифных плана: Basic ($5,40/мес.), Business ($10,80/мес.) и Enterprise ($25/мес.). Самый дорогой из них даёт возможность одновременного участия 25 человек в видеоконференции; кроме того, в Hangouts есть функция проведения удалённых лекций в тарифах G Suite for Education и G Suite Enterprise for Education, которые могут смотреть и слушать до 250 человек.

Google Duo

Duo выпустили в 2016 году, через три года после появления Hangouts. Запуск ещё одного сервиса для видеочатов Google мотивировала тем, что они выполняют разные функции: если Hangouts в основном предназначен для совместной работы и выполнения бизнес-задач, то Duo был задуман как сервис для повседневного общения между людьми. Тогда же компания представила и третий продукт в линейке — сервис для мгновенного обмена сообщениями Allo, который коммерческого успеха не имел и был закрыт в 2019 году.

В отличие от Hangouts, Duo не имеет полноценных версий для десктопных операционных систем — приложение доступно для Android и iOS. А на настольных ПК — только в браузере. После регистрации Duo привязывается к номеру телефона пользователя. В приложении не так много функций, как в Hangouts, нет возможности записывать звонки и транслировать экран, а количество участников в видеочате ограничено 12 людьми.

Facetime

Facetime — неотъемлемый элемент экосистемы Apple, который был представлен в 2010 году на конференции WWDC. Приложение предустанавливается во все iPhone, iPod (начиная с четвёртого поколения устройств), iPad (начиная со второго), iMac и Macbook. Facetime заменила своего предшественника iSight, которая использовалась для видеочатов в программе iChat.

Приложение продолжает установленную Стивом Джобсом тенденцию к минимализму: в нём нет обилия различных функций и настроек, а само оно предназначено в первую очередь для повседневного общения с другими людьми. Записывать звонки в Facetime можно только установив джейлбрейк на устройство, которым сейчас пользуется исчезающе малый процент пользователей. Одновременно участвовать в видеоконференции могут до 32 человек. Проблемы с безопасностью не обошли Facetime — в 2019 году в приложении была обнаружена ошибка, которая позволяла подслушивать и подсматривать за владельцами iPhone ещё до того, как собеседник возьмёт трубку. Справедливости ради эту уязвимость быстро закрыли.

Webex

Webex создали в 1995 году американцы Сабра Ияр и Мин Чжу. Тогда продукт был известен названием VideoTouch. В 1998-м был проведён ребрендинг, а в 2007-м компанию приобрела Cisco Technologies — именно в подразделении Webex работал Эрик Юань, который потом основал Zoom. Сервис ориентирован на организацию удалённой работы и проведение вебинаров и совместных мозговых штурмов. В приложении есть совместный доступ к рабочему столу и документам MS Office, возможность записи веб-сессии и функция голосования.

Jitsi Meet

Jitsi Meet — бесплатное ПО с открытым исходным кодом для видеосвязи, запущенная в 2003 году. Приложение поддерживает до 75 участников в конференции одновременно, имеет интеграцию со Slack, Google Calendar и Office 365. Кроме того, как и в Zoom, в сервисе есть функция «Поднять руку» — участники могут сигнализировать с помощью специальной кнопки, когда хотят что-то сказать. В Jitsi Meet можно создать свой собственный сервер, к которому смогут подключаться пользователи, а, поскольку код приложения опубликован в открытом доступе, каждый самостоятельно может проверить его на возможные проблемы с безопасностью.

Big Blue Button

Проект Big Blue Button начался в 2007 году в Карлтонском университете в Канаде. Сервис позволяет проводить веб-конференции и предназначен в первую очередь для дистанционного обучения. В приложении есть расширенные возможности «школьной доски» — указатель, масштабирование, рисование — а количество зрителей на одной трансляции не ограничено. Пользователи могут присоединяться к конференциям либо как зрители, либо как модераторы — последние имеют право выгонять зрителей или давать им слово для выступления. Всего же участников с правами модератора может быть не более 20. У компонентов программы открытый исходный код.

Этот материал подготовлен в рамках Марафона удалёнки на Хабр Карьере. Эту душеспасительную движуху мы затеяли, чтобы самим не сойти с ума в изоляции. А заодно, надеемся, эта активность поможет кому-то прокачать навыки удалённой работы и сделать домашний офис комфортнее.

Тема недели: рабочие процессы
Куратор недели: Александр Дружков, заместитель директора по технологии ivi

ссылка на оригинал статьи https://habr.com/ru/post/499606/

Java-дайджест за 30 апреля

  • Марк Рейнхольд (Chief Architect of the Java Platform Group at Oracle) рассказал о новом проекте: Project Leyden. Проект должен решить проблему долгого запуска, медленного достижения пиковой производительности и лютого пожирания оперативной памяти… нет, не с помощью GraalVM. Предполагается генерить статические бинарники на существующей инфраструктуре — HotSpot JVM, jaotc AOT compiler, AppCDS и jlink. Ссылка на твит с обсуждением — здесь. Забавно, что твит сразу же заретвитил Томас Вюртингер (сумрачный гений GraalVM), а Рейнхольд заретвитил ретвит обратно к себе в ленту. Там у них своя атмосфера.
  • Сборщики мусора Shenandoah и ZGC двигаются в прод, как сказано в соответствующих двух документах: JEP 379 и JEP 377. Оба сборщика запланированы на JDK 15, который должен выйти 15 сентября.
  • Общественность узнала о новом JEP 376 с говорящим названием «ZGC: Concurrent Thread-Stack Processing». Процессинг thread-stack уберут из сейфпоинтов ZGC, он станет ленивым, кооперативным, конкуррентным и инкрементальным. В рамках работы над этим JEP-ом подразумевается создать механизмы, которые позволят другим подсистемам HotSpot лениво обрабатывать стеки.
  • Команда Spring решила поменять версионирование релиз-трейнов и модулей. С 2013 года использовались релиз-трейны, упорядоченные в алфавитном порядке. Это вызвало много шума от людей, не знакомых с английским алфавитом. Если увидите такого Spring-разработчика, дайте знать в комментариях! Теперь проект переходит на тупой календарный порядок (calver) в формате YYYY.MINOR.MICRO[-MODIFIER] (например, 2020.0.0-SNAPSHOT). Что касается модулей, то там порядок поддерживали совместимым с OSGi Semantic Versioning и теперь переехали на MAJOR.MINOR.PATCH[-MODIFIER] (например, 2.3.0-SNAPSHOT).
  • Кстати, навыходили свежие версии Spring Framework (5.2.6, 5.1.15, 5.0.17) и Spring Data (Neumann RC2, Moore SR7, and Lovelace SR17), Spring Cloud Stream Horsham.SR4 (3.0.4.RELEASE) и Spring Cloud Hoxton.SR4 (одна новость на двоих).
  • Проект Eclipse Ditto дожил до версии 1.1.0. Напоминаю, Ditto — это эклипсовский флагман для IoT, занимающийся поддержанием digital twins — пар из реального IoT-устройства и его цифрового двойника. Разработчики заняты улучшением протокола, внедрением MQTT 5 и реализацией этого всего в Java. Они даже успели перевести API version 1 как deprecated, а JSON-сериализацию заменить на CBOR (RFC 7049 Concise Binary Object Representation), так что жизнь там кипит.
  • Вышел JetBrains Big Data Tools EAP 7. Исправили баги, добавили SOCKS proxy для соединения с Zeppelin и Spark Monitoring, для Zeppelin добавили новые экшены Run All Above и Run All Below. Отполировали экран с настройками. Подробности нужно читать в ченжлоге.
  • Чтобы не создавать впечатление, что IDEA — это единственная IDE на свете, нужно вспомнить JBoss Tools and Red Hat CodeReady Studio for Eclipse 2020-03. Там запилили поддержку свежего OpenShift 4.4 и различных языковых фичей (Java 14, Kubernetes, Openshift, S2i, Docker properties, MicroProfile REST Client, MicroProfile Health). Улучшили поддержку Quarkus и Hibernate, отполировали панель отладки… и конечно же, тёмная тема! Всё становится лучше с тёмной темой.

Сервисы

  • Google рассказали, что поддержкой Anthos для мультиклаудов теперь можно пользоваться. Это такая штука, которая позволяет консолидировать операции по всем площадкам — от серверов в собственном датацентре, до AWS и Azure.
  • Вышел OpenShift 4.4. Работает на Kubernetes 1.17, проведена работа по улучшению эффективности операторов. В качестве превью, в контейнерах можно запускать пайплайны CI/CD (работают поверх Tekton). Добавили Stream Control Transmission Protocol (SCTP), научили DNS отдавать эндпоинты вне кластера, перешли на HAProxy 2.0 и включили end-to-end HTTP/2, добавили новый дашборд с метриками и многое другое.
  • Amazon Simple Email Service (Amazon SES) теперь позволяет подключать SMTP-эндпоинты к приватному облаку (VPC) с помощью VPC-эндпоинта на AWS PrivateLink. То есть можно подключаться к SMTP-эндпоинту безопасно, без необходимости включать в этом VPC отдельный интернет-шлюз. Мелочь, а приятно.
  • KSQL стал доступен всем пользователям usage-based планов подписки на Confluent Cloud Platform.

Статьи, ролики, подкасты

  • Завтра, 1 мая, в 21.00 по московскому времени, проводим «Битовую Каску» с Алексеем Фёдоровым — лидером питерского JUG и настоящим продюсером компании JUG Ru Group, которая делает Joker и JPoint. По ссылке — счётчик обратного отсчета до начала трансляции. Окончательная ссылка на трансляцию будет расшарена за 10 минут до начала во всем известных чатиках вроде @javawatch.
  • Виктор Гамов начал делать крутые стримы по средам. Один стрим уже прошёл, запись с таймкодами выложена на YouTube. Запущен таймер до следующего раза!
  • Подкаст «Разбор Полётов» выпустил новый выпуск: «Episode 208 — Interview — Сделайте мне хорошо»
  • Мартин Фаулер разразился статьей «Patterns for Managing Source Code Branches». Очень рекомендую прочитать.
  • Дональд Рааб, автор Eclipse Collections, в статье «Eager is Easy, Lazy is Labyrinthine» рассказывает о трудностях отладки ленивого кода.
  • Джош Лонг написал очередной выпуск Spring Tips, речь пойдет о The Wavefront Observability Platform и том, как это всё относится к Spring Cloud Sleuth (спринговой абстракцией для контроля за потоком сообщений).
  • Подробное описание, что произошло в мире Spring за неделю, лучше читать не здесь, а у Джоша Лонга в очередном «This week in Spring»
  • Адам Бьен на стримах airhacks.fm (уже 85-й выпуск) продолжает хачить MicroProfile.

Разное

  • От COVID-19 умер известный автор портала InfoQ, Ян Стенберг (Jan Stenberg). Он написал на портале около трех сотен новостей, часть из которых использовалась при подготовке этого дайджеста — он писал про DDD, микросервисы и прочую архитектуру применительно к Java и .NET. Друзья, сидите дома и не рискуйте лишний раз!


Дайджесты публикуются при поддержке JUG Ru Group и конференции JPoint. Зарегистрироваться на летнюю онлайн-конференцию можно на официальном сайте.

ссылка на оригинал статьи https://habr.com/ru/company/jugru/blog/499926/

[Вопрос] В России запрещено порно?


По закону порнографией может быть признано что угодно: литература, предметы, программный код, аудио, танцы, хлебобулочные изделия

Я взрослый человек. Могу ли я легально смотреть порно, сохранять порно на компьютер, снимать домашнее порно или стримить его через веб-кам сервисы, находясь в России? Удивительно, но однозначного ответа на этот вопрос нет.

Из-за правовых коллизий нет четкого ответа, можно ли взрослым людям употреблять порно в любом виде или нет. Формально запрещено только незаконное производство и распространение порнографии, но нигде не упоминается, что такое законное порно, и может ли оно существовать. Также закон не дает определения того, что такое порно для взрослых. Из-за этого порнографией может быть признано все, что угодно: литература, рисунки, предметы, песни и т.д.

Вы смотрите порно? Чувствуете себя преступником?

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

Что такое порно?

Правовая часть вопроса отлично разобрана в статье Натальи Богатыревой на Т—Ж: Хочу снимать порнофильмы. Что мне за это будет? Я буду пользоваться выдержками из этой статьи, но рекомендую сперва прочитать ее для лучшего погружения в тему.

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

В 2010 году появились новые законы, с которыми пришли блокировки интернета: ФЗ «О защите детей от информации, причиняющей вред их здоровью и развитию» ст. 2 ФЗ от 29.12.10 № 436-ФЗ. В них появилось определения порнографии, но только в контексте информации для несовершеннолетних.

Определение применимо только для решения вопросов о возрастной маркировке продукции. Порнография — это натуралистические изображения или описания:
* Половых органов человека.
* Полового акта.
* Сопоставимого действия сексуального характера, в том числе в отношении животного.
Наталия Богатырева, Тинькоф журнал

Распространение порно

Итак, я, взрослый мужчина, решил посмотреть порно. Чтобы это сделать, мне нужно, чтобы его кто-то предварительно изготовил и распространил. По закону последнее является уголовным преступлением.

Согласно уголовному кодексу нельзя:

  • Изготавливать и перевозить через границу России порнографические материалы или предметы в целях распространения, публичной демонстрации или рекламирования.
  • Распространять, публично демонстрировать или рекламировать порнографические материалы или предметы.

ч. 1 ст. 242 УК РФ

Наверняка многие помнят истории, как люди лайкали видео вконтакте, после чего ролик добавлялся к ним на страницу, и за это их судили за распространение порно. Распространение порнографии через интернет — это отягчающее обстоятельство. Наказание за это строже. Можно получить срок от двух до шести лет. Как судят за порно-картинки в личной переписке вконтакте.

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

Блокировка порносайтов

Если любое распространение порно запрещено, значит и все сайты под запретом. Так, например, в какой-то момент Роскомнадзор забанил Pornhub, а потом разбанил, когда на сайте появилась авторизация через Вконтакте для подтверждения возраста. При этом в самом Вконтакте порно едва ли меньше чем на PornHub и без всякой проверки возраста. То есть тут явно заявляется, что взрослым порно смотреть можно. Но почему тогда блокируются все другие порно-сайты, например торрент-трекеры? Какой в этом смысл? И почему тогда людей судят за добавление в избранное порновидео?


Главная страница PornHub при запросе с российского IP требует авторизоваться через Вконтакте.

PornHub достаточно популярен в России, очень много моделей и пар снимают свои домашние видео в раздел PornHub Community. По букве закона — за это грозит шесть лет тюрьмы. Но как на самом деле?

Я лично не вижу в действиях исполнительной власти никакой логики и последовательности. В связи с этим у меня есть целый ряд вопросов, на которые никто не может внятно ответить.

Можно смотреть порно?

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

Можно хранить порно?

Пока я смотрю видео в браузере, оно сохраняется у меня на компьютере и будет доступно без интернета, то есть сохранено на компьютер — это по сути хранение. Является ли это уголовным преступлением?

Можно ли снимать порно?

Что если у нас с женой отличная 4K камера, осветительные приборы и желание снять домашнее порно, на сколько лет нас за это посадят? Можно ли эту запись хранить дома? А показывать друзьям на вечеринках? А что, если залить ее в PornHub Community?

Можно ли хостить порно?

Что если я захочу не заливать наше домашнее видео на PornHub, а захочу захостить его на своем сервере? Можно ли мне так же, как PornHub-у повесить плашку 18+ и меня не забанят и не посадят? Или это работает иначе? Можно ли покупать сервера для этого в России или нужно только зарубежом?

Ответ Vdsina

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

ссылка на оригинал статьи https://habr.com/ru/company/vdsina/blog/467535/

Как я проектировал блоки и транзакции в своем блокчейне на Go

Для того, чтобы в конечном счете получиляся блокчейн, а не просто база данных, нам нужно добавить в свой проект 3 важных элемента:

  • Описание структуры данных и методов блока
  • Описание структуры данных и методов транзакции
  • Функции блокчейна, которые сохраняют блоки в БД и находят их там по их хешу или высоте (или еще как нибудь).

image

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

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

Начнем с транзакций: github.com/Rusldv/bcstartup/blob/master/transaction/builder.go

Вот ее структура данных:

type TX struct { 	DataType byte		 	TxHash string  	TxType byte	 	Timestamp int64		 	INs []TxIn 	OUTs []TxOut }  type TxIn struct { 	ThatTxHash string 	TxOutN int 	ByteCode string }  type TxOut struct { 	Value int 	ByteCode string }

В TX хранятся тип данных (для транзакции 2), хеш этой транзакции, тип самой транзакции, временная метка, а также входы и выходы. Входы TxIn хранят хеш транзакции, на выход которой ссылаются, номер этого выхода и байткод, а выходы TxOut хранят, какое-нибудь значение и тоже байткод.

Теперь посмотрим какие действия над своими данными может выполнять транзакция, т.е. разберем методы.

Для создания транзакции служит функция transaction.NewTransaction(txtype byte) *TX.

Метод AddTxIn(thattxhash []byte, txoutn int, code []byte) (*TxIn, error) добавляет вход к транзакции.

Метод AddTxOut(value int, data []byte) (*TxOut, error) добавляет выход к транзакции.

Метод ToBytes() []byte превращает транзакцию в байтовый срез.

Внутренняя функция preByteHash(bytes []byte) string применяется в Build() и Check() для совместимости создаваемого хеша транзакций с хешами транзакций генерируемыми из приложений на JavaScript.

Метод Build() задает хеш транзакции следующим образом: tx.TxHash = preByteHash(tx.ToBytes()).

Метод ToJSON() string преобразует транзакцию в JSON строку.

Метод FromJSON(data []byte) error загружает транзакцию из формата JSON, переданного в виде байтового слайса.

Метод Check() bool сравнивает полученных хеш из поля хеша транзакции с хешем, полученным в результате хеширования этой транзакции (без учета поля хеша).

Транзакции добавляются в блок: github.com/Rusldv/bcstartup/blob/master/block/builder.go

Структура данных блока более объемная:

type Block struct { 	DataType byte				 	BlockHeight int					         Timestamp int64				          HeaderSize int					         PrevBlockHash string				          SelfBlockHash string			 	TxsHash string			 	MerkleRoot string 	CreatorPublicKey string			 	CreatorSig string 	Version int 	TxsN int 	Txs []transaction.TX }

DataType хранит тип данных, по нему нода и отлечает блок от транзакции или других данных. Для блока это значение равно 1.

BlockHeight хранит высоту блока.
Timestamp временную метку.
HeaderSize размер блока в байтах.
PrevBlockHash хеш предыдущего блока, а SelfBlockHash — текущего.
TxsHash — это общий хеш транзакций.
MerkleRoot — корень дерева Меркла.

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

Рассмотрим его методы:
Для создания блока применяется функция block.NewBlock(): NewBlock(prevBlockHash string, height int) *Block, которая принимает хеш предыдущего блока и высоту установленную для созданного блока в блокчейне. Также задается тип блока из константы пакета types:

b.DataType = types.BLOCK_TYPE.

Метод AddTx(tx *transaction.TX) добавляет транзакцию в блок.

Метод Build() загружает значения в поля блока и генерирует и устанавливает его текущий хеш.

Метод ToBytesHeader() []byte переводит заголовок блока (без транзакций) в байтовый слайс.

Метод ToJSON() string переводит блок в формат JSON в строковом представлении данных.

Метод FromJSON(data []byte) error загружает данные из JSON в структуру блока.

Метод Check() bool генерирует хеш блока и сравнивает с заданным в поле хеша блока.

Метод GetTxsHash() string возвращает общий хеш всех транзакций в блоке.

Метод GetMerkleRoot() задает корень дерева Меркла для транзакций в блоке.

Метод Sign(privk string) подписывает блок приватным клюем создателя блока.

Метод SetHeight(height int) записывает высоту блока в поле структуры блока.

Метод GetHeight() int возвращает высоту блока так как указано в соответствующем поле структуры блока.

Метод ToGOBBytes() []byte кодирует блок в GOB формат и возвращает его в виде байтового слайса.

Метод FromGOBBytes(data []byte) error записывает данные блока в структуру блока из переданного байтового слайса в формате GOB.

Метод GetHash() string возвращает хеш данного блока.

Метод GetPrevHash() string возвращает хеш предыдущего блока.

Метод SetPublicKey(pubk string) записывает в блок публичный ключ создателя блока.

Таким образом, с помощью методов объекта Block мы можем легко конвертировать его в формат для передачи по сети и сохранения в базу данных LevelDB.

За сохранения в блокчейн отвечают функции пакета blockchain: github.com/Rusldv/bcstartup/tree/master/blockchain

Для этого блок должен реализовывать интерфейс IBlock:

type IGOBBytes interface { 	ToGOBBytes() []byte 	FromGOBBytes(data []byte) error }  type IBlock interface { 	IGOBBytes 	GetHash() string 	GetPrevHash() string 	GetHeight() int 	Check() bool  }

Подключение к базе данных создается один раз при инициализации пакета в функции init():

db, err = leveldb.OpenFile(BLOCKCHAIN_DB_DEBUG, nil).

CloseDB() это обертка для db.Cloce() — вызывается после работы с функциями пакета, чтобы закрыть соединение с БД.

Функция SetTargetBlockHash(hash string) error записывает в БД хеш текущего блока с ключем заданным константой BLOCK_HASH.

Функция GetTargetBlockHash() (string, error) возвращает хеш текущего блока, хранящийся в БД.

Функция SetTargetBlockHeight(height int) error записывает в БД значение высоты блокчейна для ноды с ключем заданным константой BLOCK_HEIGHT.

Функция GetTargetBlockHeight() (int, error) возвращает высоту блокчейна для данной ноды, хранимую в БД.

Функция CheckBlock(block IBlock) bool выполняет проверку блока на корректность перед добавлением этого блока в блокчейн.

Функция AddBlock(block IBlock) error добавляет блок в блокчейн.

Функции для получения и просмотра блоков находятся в файле explore.go пакета blockchain:

Функция GetBlockByHash(hash string) (*block.Block, error) создает пустой объект блока, загружает туда блок из БД хеш которого ей передан и возвращает на него указатель.

Создание блока генезиса осуществляется функцией Genesis() error из файла genesis.go пакета blockchain.

В следующей статье речь пойдет о подключению к ноде клиентов с помощью механизма WebSocket.

ссылка на оригинал статьи https://habr.com/ru/post/499930/