...

суббота, 1 февраля 2020 г.

[Перевод] Выпуск Rust 1.41.0: новые гарантии для Box в FFI, улучшения в cargo install, ослабление ограничений для типажей

Команда Rust рада сообщить о выпуске новой версии, 1.41.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.

Если вы установили предыдущую версию Rust средствами rustup, то для обновления до версии 1.41.0 вам достаточно выполнить следующую команду:

rustup update stable

Если у вас ещё не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.


Что вошло в стабильную версию 1.41.0

Основными новшествами Rust 1.41.0 являются ослабление ограничений на реализацию типажей, улучшения cargo install, новый формат файла Cargo.lock более дружелюбный для работы с git, и новые гарантии для Box<T>, связанные с FFI. Смотрите подробности выпуска для дополнительной информации.


Ослабление ограничений при реализации типажей

Для предотвращения поломок в экосистеме, когда зависимость добавляет новые реализации типажа, Rust использует правило сироты (orphan rule). Суть в том, что реализация типажа допустима только если типаж или тип, который его реализует, является локальным, т.е. определённым в текущем крейте. Однако это достаточно сложно, когда используются обобщения.

До версии Rust 1.41.0 это правило было слишком строгим, мешая композиции. Например, предположим что ваш пакет реализует структуру BetterVec<T>, и вы хотите иметь возможность конвертации его в Vec<T> из стандартной библиотеки. Вы бы написали следующий код:

impl<T> From<BetterVec<T>> for Vec<T> {
    // ...
}

… который является примером паттерна:

impl<T> ForeignTrait<LocalType> for ForeignType<T> {
    // ...
}

В версии Rust 1.40.0 этот impl был запрещён правилом сироты, так как From и Vec определены в стандартной библиотеке, которая является чужим крейтом по отношению к текущему крейту. Были способы обойти это ограничение, такие как шаблон newtype, но они часто были громоздкими или даже невозможными в некоторых случаях.

Хотя From и Vec всё ещё остаются чужими, типаж (в данном случае From) параметризован локальным типом. Поэтому, Rust 1.41.0 позволяет этот impl.

Для более подробной информации читайте отчёт о стабилизации и предложение RFC.


cargo install обновляет пакеты если они устарели

При помощи cargo install вы можете установить в систему исполняемый крейт. Эта команда часто используется для установки популярных CLI-инструментов, созданных комьюнити и написанных на Rust.

Начиная с Rust 1.41.0, cargo install также может обновлять установленные крейты, если с момента установки появился новый релиз. До этого выпуска единственным возможным вариантом было использование флага --force, который позволял переустановить исполняемый крейт даже если он не нуждался в обновлении.


Менее конфликтный формат Cargo.lock

Для обеспечения консистентных сборок, Cargo использует файл с названием Cargo.lock, который содержит версии зависимостей и контрольные суммы. К сожалению, формат организации данных в нём мог привести к ненужным конфликтам слияния при изменении зависимостей в отдельных ветках.

Rust 1.41.0 представляет новый формат для этого файла, разработанный специально для уменьшения конфликтов. Новый формат будет использоваться для всех новых lock-файлов, в то время как существующие файлы будут использовать предыдущий формат. Узнать больше о вариантах, которые привели к новому формату, вы можете в PR, в котором его добавили.


Больше гарантий при использовании Box<T> в FFI

Начиная с Rust 1.41.0, мы заявляем, что Box<T>, когда T: Sized, теперь совместим по ABI с типами указателей в C (T*). Таким образом, если вы определяете функцию extern "C" в Rust и вызываете её из C, ваша функция в Rust теперь может использовать Box<T> для какого-то T, и использовать T* в соответствующей функции на C. В качестве примера, на стороне C вы можете иметь:

// C header */

// Возвращаем владение в вызывающий код
struct Foo* foo_new(void);

// Принимает владение из вызывающего кода; no-op если передан NULL.
void foo_delete(struct Foo*);

… а на стороне Rust у вас будет:

#[repr(C)]
pub struct Foo;

#[no_mangle]
pub extern "C" fn foo_new() -> Box<Foo> {
    Box::new(Foo)
}

// Возможность принимать NULL реализуется с помощью `Option<_>`.
#[no_mangle]
pub extern "C" fn foo_delete(_: Option<Box<Foo>>) {}

Заметим однако, что не смотря на то, что Box<T> и T* имеют одинаковое представление и ABI, Box<T> обязательно должен быть не-null, выровнен и быть готовым для деаллокации глобальным аллокатором. Чтобы обеспечить эти требования, самое лучшее — это использовать такие Box'ы, которые порождаются глобальным аллокатором.

Важно: По крайней мере в настоящее время вы должны избегать использования типов Box<T> для функций, которые определены в C, но вызываются из Rust. В этих случаях вы должны отразить типы как можно ближе к определению в C. Использование типов наподобие Box<T>, когда определение в C использует просто T* может привести к неопределённому поведению.

Чтобы узнать больше, обратитесь к документации Box<T>.


Изменения в библиотеке

В версии Rust 1.41.0, мы сделали следующие изменения в стандартной библиотеке:


Сокращение поддержки 32-битной целевой платформы Apple

Rust 1.41.0 будет последним выпуском с текущим уровнем поддержки 32-битных платформ Apple, включая i686-apple-darwin. Начиная с Rust 1.42.0 эти платформы будут понижены до самого низкого уровня поддержки.

Узнать об этом больше вы можете в соответствующей записи в блоге.


Другие изменения

Синтаксис, пакетный менеджер Cargo и анализатор Clippy также претерпели некоторые изменения. Мы также приступили к внедрению оптимизаций MIR, которые должны ускорить компиляцию: вы можете узнать о них в блоге "Inside Rust".


Участники 1.41.0

Множество людей собрались вместе, чтобы создать Rust 1.41.0. Мы не смогли бы сделать это без всех вас, спасибо!


От переводчиков

С любыми вопросами по языку Rust вам смогут помочь в русскоязычном Телеграм-чате или же в аналогичном чате для новичковых вопросов.

Данную статью совместными усилиями перевели andreevlex, blandger, funkill, P0lunin и nlinker.

Let's block ads! (Why?)

[Из песочницы] Ад инди-разработчика или как довести свой проект до релиза и не застрелиться в процессе

Когда мои друзья\знакомые\собутыльники узнают о том, что я разработчик игр, они приходят в дикий восторг, смешанный с белой завистью. “О, да ты шо, когда новый Ассасин выпустишь? ” — “Ого, вот это кайф. Такая крутая работа! ” и все в таком духе. Сразу их быстро опускаю на землю, ибо разработчик игр хоть и звучит круто, но за этим стоит огромная работа. Зачастую, не самая веселая. Рутинная, монотонная и, откровенно, утомительная. Однако, очень-очень нужная.

Опытные разработчики поймут о чем я, а те наивные мечтатели, которые еще только думают о том, чтобы перейти в геймдев — поверьте мне на слово. Ну или прочитайте всю статью от начала до конца. Немного об авторе — 4 года в геймдеве. Удалось поработать с такими проектами как Iratus: Lord of the Dead, Utopia Syndrome, парочкой VR проектов. В данный момент работаю в студии CrispApp, основное направление которой — игры жанра Hidden Object.


Разработка проекта Into the Dungeon, началась, наверное, как и любая инди игра с простого диалога:

— “Артурчик, го делать свою игру! ”
— “Го! ”

Если бы я знал, что предстоит пережить в течении года, который ушел на разработку игры, я бы… согласился не задумываясь. Самореализация — дама требовательная и ее запросы велики. И я ни на что это не променяю.

Начало разработки


Старт пошел достаточно бодро. Концепт игры был взят со старой электронной (Да-да, и такие есть) настольной игры по Dungeons&Dragons. Core gameplay простой как игра Кодзимы (нет) — у вас есть квадратное поле, разделенное на клетки. Вы выбираете любую стартовую клетку, после чего вокруг нее случайным образом создается лабиринт. Один нюанс — стены лабиринта не видны. Дальше игроку предстоит исследовать лабиринт (ходим мы только по прямой), натыкаться на стены (столкновение завершает ход) и искать сокровище под охраной призрака (дракона в оригинале). Становишься на клетку недалеко от сокровища — призрак пробуждается и охотится за игроком, желая помешать ему украсть честно заработанные при жизни гроши.

Коробка той самой игры

Просто скопировать геймплей мы не хотели, поэтому начали добавлять в игру новые фичи. Главной задачей тогда было разнообразить геймплей, но и не перемудрить с кучей контента, которое только бы испортило игру. Идей было много, многие из них пошли в апдейт-лист для лучших времен (хватило бы на 4 крупных апдейта, не меньше!). В сухом остатке мы получили 6 героев (1 базовый и 5 уникальных, со своими характеристиками и абилками) и 4 видами ловушек со своими бонусами противовесами. Застрял в паутине? Не беда, держи факел и сожги ее к чертям! Отравился ядовитыми испарениями? Быстрее ищи антидот! Суть думаю вы уловили.

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

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

В итоге вышло как-то вот так. Уже не прототип, но до финальной версии еще далеко

Игралось это весело, вызывало горение жопы на очередной стенке\ловушке, то что надо. Мы понимали, что игра не казуальная, от слова совсем, но понимание аудитории гиков\задротов\настольщиков\ролевиков уверило нас, что все идет как должно быть. На это этапе случилась вторая проблема (напомню, что проблемы обсудим отдельно, просто загибайте пальцы).

Полировка напильником


Шлифовка до предрелизного состояния потратила кучу наших нервов. Баги лезли как гуки из джунглей Вьетнама, UI постоянно обрастал новыми элементами, новый геймплей тестировался, менялся, опять тестировался, менялся, повторить все пункты 10 раз по 3 подхода. Даже свои мемасики пошли!

Изначально Портал отправлял игрока на стартовую клетку, но после такого случая Портал начал отправлять просто в случайную клетку на поле.

Срачей тоже хватало. Битва между ГД и программистом идет до сих пор, победы и поражения есть с обеих сторон, но как по мне такое взаимодействие ни разу не дало отрицательный результат. Я, например, часто загонялся в усложнение геймплея, хотелось прокачку героев сделать, таланты каждому прописать, на что мне говорили «Воу-воу парень, палехче! » это сложно реализовать, давай попробуем проще — и это работало. Хоть мы и хотели позиционировать это как РПГ, но оставалась игра, по сути, головоломкой и все вышеуказанные элементы были ни к чему. Это, кстати, третья проблема.

Спустя полгода работы по выходным\вечерам игра стала выглядеть как-то так

Главное меню собственной персоной

Подземелье и одинокий маг

Шоукейс на Devgamm и опять полировка напильником


В таком состоянии мы показали игру в CrispApp, где мы и работаем, мы договорились об издании игры. Следующие 3 месяца были просто незабываемыми. Если вы когда-то решите, что делать локализацию игры на 11 языков хорошая идея — ударьте себя по голове. Объективно — это безусловно идет приложению на пользу, игра лояльна к аудитории из разных уголков Земли, но субъективно вносить вечные правки в таблицу с переводами, проверять игру на всех языках, подбирать к ним шрифты и заливать в AppStore\Google play по 220 скриншотов… Просто будьте готовы к этому, но я отвлекся от темы.

Доработка отняла у нас последние силы и глотком свежего воздуха была поездка на Devgamm в Минск. К моменту поездки на выставку мы хотели уже выпустить игру (Ха-ха, зачем так смешно, господи не могу перестать смеяться). Ничего, конечно же, не вышло, игра была сыровата, нужно было потушить ее на медленном огне еще немного и мы поехали с бета-версией. Напечатали визитки с QR кодом на скачку, плакат подготовили красивый (нет) и полетели.

Devgamm дал очень хороший фидбек. Мы ускорили игру в 2 раза (сейчас на старой версии кажется, что все двигается в слоу-мо), доработали туториал, улучшили графику, поправили баги (список можно дополнять долго). Прилетели мы с позитивным настроем, так как в целом игра людям зашла, было видно вовлечение, эмоции. Игроки получили от нашего продукта главное — fun, значит мы были на правильном пути. Я никогда так не ошибался (4 проблема).

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

Релиз и реклама


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

Зеленым выделены ресурсы, на которых был сделан пост, красным — отказы\морозы, белый — еще не писал

У нас был один козырь в рукаве — паблик РПГ Юмор с аудиторией в 80к+ подписчиков, который мой товарищ Борис разрешил использовать для рекламы. Схема простая — пишем разным блогерам, СМИ, пабликам, предлагаем бартер (ваш пост у нас, наш пост у вас) и получаем взаимный профит.

Вообще дело это неблагодарное и вот почему. Редакторы пабликов, сайтов и блоггеры делятся, в общем, на три типа:

  1. Классные ребята — ты им пишешь, они тебе достаточно быстро отвечают (1‑3 дня), соглашаются на рекламу, делают пост — профит. Спасибо всем, кто сделали рекламные посты о нашей игре, вы очень помогли. Я за вас свечку в церкви поставлю.
  2. Честные ребята — ты им пишешь, они также быстро отвечают как и первые, но прямо говорят — «извините, у нас только свой контент, если продукт будет интересный — сами напишем» или «реклама только за деньги, удачи с вашим проектом». Профита с них нет, но зато честно ответили, никаких претензий.
  3. Так себе ребята — моя самая «любимая». Я долго думал как мягко назвать третью группу, чтобы без мата, без сравнения с животными миром и тд. Таких на самом деле около 50% всей таблички и вот с чем это связано.

Во-первых — они морозят. Морозят упорно и нудно. Ты пишешь им — через 3 дня молчание. Пишешь опять — через 2 дня опять молчание. На некоторых я тратил по 2 недели своего времени, напоминая о себе и стараясь добиться любого ответа. Молчание. Ок, ладно, может они безрукие и не могут ответить мне письменно, бывает понимаю. Во-вторых — они жадные и на это есть отличный пример. Связался с одним игровым Телеграмм каналом для рекламы игры. Мне отписали в тот же день, мол — «Да, мы могли бы сделать пост у нас на канале». Я на радостях сыплю вопросами о публикации, что нужно, какие материалы. На что получаю 5-и дневное молчание.

Очередное напоминание о себе зашевелило переписку. «Скидывайте рекламный текст, скриншоты, сделаем пост». Пока рыбка на крючке, скидываю все необходимое для публикации и… мне выставляют прайс-лист. Зачем? Не понятно. Я всегда упоминал, что мы инди, денег нет, но мы держимся, давайте бартер, но меня решили промариновать недельку и выставить прайс. Хорошо сыграно, ребят. Самое смешное даже от того, что это был канал с 5к подписчиками. Я понимаю, гигантская аудитория, многомиллионные контракты. Куда нам, инди, до них.

Главное, что я понял во время этой небольшой рекламной кампании — нужно долбиться головой пока лоб не расшибешь. Было дикое чувство собственно важности, когда удавалось получить пост на IGN, паре пабликов на 200к подписчиков.

Месяц спустя, реклама принесла плоды, пусть и скромные. ~6000 скачиваний на двух платформах, пару раз попадание в топ-150 по категории Board games в Appstore, первые in‑App’ы, но, к сожалению, ожидания совершенно не оправдались. Ретеншн приложения слишком низкий, люди совершенно не задерживаются в приложении и у меня на это 5 причин! (вообще 4, но песня хорошая). Собственно вот теперь мы и переходим к проблемам, который я так упорно указывал выше.

Проблемы и их решение


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

Добавление ловушек сделало подземелье рандомнее в десятки раз. Просчет ходов был бессмысленным, так как на любой ячейке тебя могли порезать циркулярные пилы. Да, у нас был герой Вор, который сообщал игроку, что в соседней клетке есть ловушка, но игрок уже после 2 уровней стирал приложение. Было решено перенести талант Вора на всех героев, что значительно улучшило геймплей. Игрок получал заветную информацию о ловушках, обходил их и мог видеть опасные для него ходы. Плюс ко всему, мы сделали больший упор именно на исследование подземелья — чуть больше раскидали бонусов, добавили подбор дополнительного золота в виде мешочков с деньгами в случайных клетках, а главное теперь прохождение уровня на 3 звезды зависело не от наименьшего количества сделанных шагов, а от количества смертей. Если раньше игра подталкивала игрока к максимально быстрому прохождению и следовательно выбирать самый короткий, пусть и опасный путь, то теперь игрок может спокойно исследовать каждый закуток подземелья, прежде чем встретиться с Призраком.

Проблема вторая — сложность. Наша слепая уверенность в том, что если мы делаем игры для гиков\задротов, то и игра должна быть достаточно сложной, было в корне неверной. Да, это не гиперказуалка, но и игрок не телепат. Разобраться в игре не помогал ни туториал, который по сути вываливал на игрока кучу текста, ни первые уровни, которые вывали на игрока кучу непонятных ему сущностей. «Сиди разбирайся сам, смертный! » — сказал бы Призрак, будь он настоящим. Пришлось переделывать все уровни, дабы вводить игровые сущности постепенно. Играем сначала в core gameplay — ты, призрак и стенки. Даже местоположение призрака сделали видимым для игрока. Потом вводим 1 тип ловушек, поиграй 3‑4 уровня с этим, потом 2 тип ловушек и так далее. Чем шире охват вашей аудитории, тем больше вероятность, что ваше приложение не отправится на кладбище забытых проектов. Мысль очевидная, но дошли до этого не сразу, а жаль.

Проблема третья — позиционирование игры. Изначально мы представляем приложение как пошаговая тактическая РПГ. И все бы ничего, но это никак не РПГ. Ролевой элемент с героями совершенно не помогает игрокам согласиться с тем, что Into the Dungeon — РПГ. От этого многие люди приходят в негодование, даже ставили рейтинг в 1‑2 звезды. Большинство просто отваливалось, понимая что их надули. Переход к категории Головоломки и позиционировании игры как тактическая Головоломка должен улучшить положение вещей. Я говорю должен, так как узнаем мы это только с выходом обновления, а оно, на момент написание статьи, вот-вот должно выйти.

Проблема четвертая — это я и только я. Как я там писал — игрок получает fun от игры, значит все хорошо? Забудьте. Если человек во время тестирования игры, при вас, весело проводит время в приложении — это НЕ равно хорошее приложение. Человек играет здесь и сейчас, всегда может спросить у разработчика, что в этой игре не так. Да и кто сказал, что он завтра вернется поиграть опять? Тестирование и шоу кейсы несомненно важны для понимания работы приложения и как игрок его воспринимает, но важно объективно смотреть на вещи. Посмотреть, пообщаться, получить фидбек и даже если сугубо положительный — проанализировать его еще раз. Может человек вообще ничего не понял и был рад просто поиграть с разработчиком в его игру?

После обновления


Новая волна рекламы и недельная статистика дала свои плоды — показатели немного улучшились, на днях даже пришла внутриигровая покупка (такая редкая и такая желанная).

К сожалению, большого наплыва новых игроков пока не наступило (свои влажные мечты я так и не оставил). Наблюдается рост лишь в ежедневном количестве игроков + увеличилась средняя продолжительность игровой сессии. Проблема с туториалом так и осталась основной проблемой, уже есть идеи как сделать игру еще проще и доступнее. Двигаемся в верно направлении и дальше должно быть только лучше (ха-ха, ну вот опять, слишком смешно, остановитесь!).

Подытог


Фух, текста вышла много, но я верю, что те кто дочитали до конца вынесли что-то для себя. Больших откровений думаю здесь никто не найдет, а вот посмотреть со стороны на свои же ошибки — очень полезно. Для Into the Dungeon — это не последнее обновление. Вера в проект не умирает. Небольшой успех — тоже успех и даже если все свалится к чертям — это был великолепный опыт. А пока можете сами оценить игру. Только 5 звезд не забудьте поставить!

Let's block ads! (Why?)

[Из песочницы] Создание арт-объекта для Burning Man

Здравствуйте. Меня зовут Сергей, и в этой статье я расскажу о том, как мы сделали арт-объект для мероприятия Burning Man. Я расскажу о технической стороне, не касаясь самого мероприятия. Ну, почти не касаясь.


Команда Artmisto


Наша команда в 2019 году привезла проект Cocoonap на масштабнейшее арт-мероприятие Burning Man. Участники команды в основном из Украины, а также из Америки и Австралии, всего 18 человек, из которых двенадцать смогли поехать в пустыню.


Команда Artmisto

Арт-объект Cocoonap — кинетическая инсталляция, изменяющая свою форму с течением времени. Она представляет собой деревянный кокон, высотой почти 3 м, установленный на стальную раму. Сам кокон состоит из пяти лепестков, которые, раскрываясь под световое и музыкальное сопровождение, превращаются в цветок. Затем середина цветка превращается в фигуры двух людей. Эти фигуры обретают метафорические крылья и затем инсталляция растворяется в ночи. Цикл начинается заново.

Я в этом проекте поучаствовал в качестве инженера-механика. Всё, что касалось превращения эскизов дизайнера в дерево и железо, чертежей, 3D-моделей и кинематики — было в зоне моей ответственности.

Предыстория


В октябре 2018 года мне позвонил мой старинный друг Вова, с которым я не виделся лет десять, и предложил встретиться. Он только что приехал со своего первого БМ2018 с горящими глазами и мечтами привезти инсталляцию в пустыню в следующем году. И он искал людей, которые могли бы как-то помочь. Я согласился помочь с чертежами и идеями воплощения его мечты в железо, но ни на что более — для меня такая поездка не вписывалась ни в семейный бюджет, ни во временной график. Но, постепенно вовлекаясь в проект, становилось понятно, что ехать нужно, и даже очень. Параллельно мы искали людей, которые могли бы нам помочь, ведь задач было очень много: звуковые треки, программирование света, управляющая электроника и линейные приводы и управление ими.

Требования к инсталляции и условия работы


Если вкратце, то наша инсталляция должна быть собрана и отлажена в Украине, перевезена в Америку, установлена в пустыне и должна проработать там одну неделю.

Для этого она должна отвечать следующим требованиям:

  • Выдерживать перепады температуры от -10С до +40С
  • Быть устойчивой к сильному ветру
  • Работать в условиях неизбывной пыли и пылевых бурь
  • Быть надёжно закрепленной к поверхности
  • Быть безопасной для зрителей и устойчивой к ним

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

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

Поэтому арт-объект должен быть надежно закреплен к поверхности земли. Мы крепили раму нашего кокона тросами к пяти полутораметровым анкерам-бурам, которые были вкручены по периметру. К слову, сами анкеры и технику для их вкручивания нам предоставили организаторы БМ.

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


Photo by Jonathan Clark

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

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

Leave No Trace — это один из принципов мероприятия: пустыня должна остаться после тебя такой же, как была до тебя.

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

Что еще нужно учитывать при разработке?


Имперская система в Америке

Наша инсталляция собиралась и тестировалась в Украине. После тестов и настройки деревянная часть и электроника разбиралась, упаковывалась и отправлялась в Штаты — это оказалось значительно дешевле, чем резать детали в Америке. А стальная рама должна была быть сварена уже в Штатах. Поэтому все размеры материалов подбирались так, чтобы их было возможно купить на месте: например, мы использовали стальные трубы прямоугольного сечения 50х25 мм (2х1 дюйм) и фанеру толщиной, кратной долям дюйма — 12 и 6 мм.

Эти размеры закладывались уже на этапе создания 3D модели и чертежей.

Сетевое напряжение

В Америке сетевое напряжение 110 В, 60 Гц. И американские генераторы именно его и производят. Поэтому, все блоки питания и зарядные устройства, которые мы везли из Украины, должны работать от пониженного напряжения. Большинство современных импульсных блоков питания работают от 110 В без проблем, но некоторые пришлось поискать и проверить с помощью ЛАТРа. Поэтому весь электроинструмент, который мы везли в пустыню, пришлось купить в Америке.

В пустыне — пусто

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

ARTery

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

Например, нашему арт-объекту организаторы предоставили машины для выкапывания траншеи и для вкручивания полутораметровых анкеров по периметру рамы. А более крупным объектам предоставили краны и подъемники. Естественно, совершенно бесплатно.

Защита генератора

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

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

В итоге, вместо скучного ящика для генератора у нас получился отдельный арт-объект!

Этапы разработки


Моя работа началась с этой картинки. Из нее я взял контуры кокона и использовал их как эскиз для модели в SolidWorks.

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

Потом — заказываем изготовление деталей, 12 мм фанера резалась фрезой, 6 мм — лазером.
После получения деталей — сборка и настройка кинематики, после чего разборка, упаковка и отправка в Штаты.

Здесь виден ящик. Я специально его сделал таким, чтобы туда поместились самые большие детали — двухметровые кили. Обратите внимание на тёмное кольцо слева, о нем я расскажу немного позже.

Некоторые технические решения


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

На этой картинке видна стальная рама, высотой 700 мм. И один лепесток, для масштаба.

Узел крепления лепестка к раме. Каждый лепесток крепится к раме через два корпусных подшипника и две фанерные вставки.

А здесь — механика крыльев. Линейный привод вращает ось через тройник.

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

Все крылья украшены светодиодами.
Так они выглядели вживую, перед установкой на место.

Управляющая электроника


Слово Косте, повелителю актуаторов.

Эта фотография — не постановочная. Это тот момент, когда мы поняли, что не работает очень много чего, а главный программист находится за 9 тысяч километров и 10 часовых поясов от багов, которые ему надо исправить. Утром мы поедем в пустыню и с ним будет проблематично связаться, не говоря уже о том, что удаленная отладка эмбеддед-софта — не самое простое занятие.

На первый взгляд, конструкция в целом не выглядит очень сложной, но дьявол кроется в деталях. Мы ухитрились задействовать 8 микроконтроллеров, для 5-и из которых пришлось делать или модифицировать прошивку.

Всё хотелось сделать как можно проще, чтобы сэкономить время и уменьшить вероятность неприятных сюрпризов. Вот это вот “проще” привело к тому, что отдельные части были действительно простыми, но вот их взаимодействие было неясным вопросом до самого последнего момента. В результате, главный управляющий скрипт писался уже после того, как железо уехало в Америку. (Тем самым программистом, который с нами, к сожалению, поехать не смог.)

Тут ещё следует заметить, что у этого, достаточно сложного в техническом плане проекта, абсолютно жесткий дедлайн. 70 000 человек, живущих в Black Rock City не будут ждать. Мы не можем их попросить дать нам ещё недельку для завершения работ. И если мы не успеваем доделать всё к этой неделе в конце августа, то всё — все наши усилия, год работы и $11,000 идут насмарку. В лучшем случае, организаторы разрешат нам приехать ещё раз в следующем году… И то не факт! Поэтому все технические решения рассматривались с точки зрения подводных камней и сроков. С инженерной точки зрения, многие решения — хаотичные, и если бы это было серийное производство, то так делать не стоит. А вот для одноразового проекта — самое то.

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

Как это часто бывает с удачными проектами, а проект у нас удачный — мы успели и ничего (ну, почти) не сломалось, внутренняя архитектура не блещет изяществом. Так и хочется воскликнуть: “Не делайте так! Учитесь на наших ошибках!” Конечно, так бы и следовало сделать, если бы это не был одноразовый проект. А тут главное успеть. Кроме того, запутанность архитектуры вызвана наличием вращающейся части, что означает необходимость аккумуляторного питания и беспроводной передачи команд. Кстати, потом выяснилось, что неподвижная часть, которая питается от генератора, тоже должна иметь резервное питание на случай, если внезапно налетит буря, надо будет срочно закрыть кокон, а генератор сломается. А по закону подлости он обязательно бы сломался в этом случае. Тем более, что мы нарушили правила эксплуатации и не меняли масло после его обкатки.

Генераторы там ломаются часто, но нам и тут повезло. Нам вообще сопутствовала удача. Многие объекты, особенно сложные, не успевают запустить вовремя, а учитывая, сколько мы наделали косяков, это должно было случиться и с нами. Мы ни разу не собирали и не запускали всю систему целиком, и впервые мы увидели как она работает уже только в пустыне! Рискованно? Да, но нам повезло. Ещё один пример везения: нужно было исправить ошибки в главном управляющем скрипте и я прикидывал, сколько времени у меня займёт разобраться в чужом Python коде (на жаре +40С). Связаться с разработчиком уже было нельзя, т.к. со связью в пустыне всё плохо. И тут выясняется, что сидящий рядом со мной парень — высококвалифицированный программист и может всё сделать без моего участия, а я тем временем могу продолжать паять электронику.

Как можно видеть на рисунках и видео, внешние лепестки открываются и закрываются электрическими линейными актуаторами с довольно большим ходом штока (400мм). Крылья приводятся в движение актуаторами поменьше, а сами фигуры вообще двигаются актуаторами с примерно 30 мм ходом штоков. Центральную часть (с фигурами людей и крыльями) вращает шаговый двигатель. Без редуктора — прямой привод. Центральная часть довольно инерционная и крутящего момента двигателя не хватает для “мгновенного” разгона, поэтому программно сделан плавный старт. Но никто не сообразил, что кроме преодоления инерции, крутящий момент нужен для преодоления силы ветра. Особенно, когда развёрнутые крылья создают значительную парусность. В результате, даже несильный ветер останавливал вращение.

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

Сам главный скрипт написан на Python и работает на Windows. Он запускает музыкальный секвенсор, а потом отдаёт команды по UART через USB на Ардуинку, установленную в неподвижной части арт-объекта. (Компьютер с Windows закрыт в отдельном ящике и управляется от беспроводного NumPad-а.) В зависимости от команды, Ардуинка включает-выключает вращение шагового двигателя, выдаёт импульс на актуаторы для закрытия-открытия лепестков или передаёт команду по WiFi на вращающуюся часть. Кроме того, она же посылает данные на ленты управляемых RGB WS2812 светодиодов.

Для управления музыкальным секвенсором был изготовлен MIDI-пульт в виде яйца в стиле стимпанк.

Чтобы не нагружать одну Ардуинку слишком большим количеством функций, управление моторами и WiFi сделано с помощью 4-х (!) промежуточных контроллеров со своими программами. Как нам казалось, это позволит разбить разработку на части, поручить их отдельным людям и таким образом сэкономить время. Трудно сказать, удалось ли его сэкономить…

Контроллер шагового двигателя обеспечивает плавный старт, линейно увеличивая скорость вращения от нуля до 2-х оборотов в минуту. Прошивка написана на голом железе, без Ардуино. Так показалось проще, хотя само железо — Ардуино-нано. Проблемы возникли с микросхемой-драйвером шаговика — TB6560. Никакими ухищрениями ни в одном из режимов не удалось добиться от неё тока 2 ампера. Максимум — 1 ампер, несмотря на 24-вольтовое питание. В итоге, сопротивляемость конструкции ветру оказалась в 2 раза ниже потенциально возможной.

Вот так выглядит драйвер шаговика после 10 дней в пустыне. Но на работоспособности пыль никак не сказалась.

Управление вращающейся частью арт-объекта было сделано на ESP8266 по WiFi. Были опасения, что имплементация WiFi займёт много времени, что-то пойдёт не так, но, на удивление, эта часть была сделана быстро и работала безупречно.

Контроллер актуаторов — технически самый сложный микропроцессорный узел. Теоретически его можно было заменить банальным реле, но так получилось, что на работе у меня множество различных контроллеров актуаторов, поэтому использовать сложное устройство или реле — почти нет разницы по времени. С другой стороны, в промышленных контроллерах есть много полезных фич, вроде защиты от перегрузки по току. Но главное, в них есть литиевый аккумулятор с контроллером заряда. Есть там и BLE, но к моменту разработки нашего кокона, он ещё не был допилен до продакшен уровня и я решил не рисковать. WiFi представлялся намного безопаснее с точки зрения граблей.

Единственная проблема этого промышленного контроллера в том, что он управляется через проприетарную шину, а не просто подачей логических уровней. К счастью, я быстро нашел на работе среди хлама “под выброс” платы, преобразующие замыкания контактов в команды на шине. В общем, получилось решение, которое никто не сможет повторить, но в нашем случае это и не нужно. Проект-то одноразовый. Главное, чтобы были запчасти! Кстати, почти всё железо везлось в пустыню с резервными компонентами. Исключение составлял шаговый двигатель из-за цены в 600 евро и актуаторы вращающейся части, т.к. они меганадёжные. Даже фанерные трафареты были продублированы.

Вращающаяся часть питается от 4-х различных аккумуляторов. Самый большой из них, литиевый на 55 ватт-часов, 24 вольта, питает актуаторы. Одновременно идентичный аккумулятор заряжается от генератора в неподвижной части инсталляции. Раз в день аккумуляторы вручную меняются местами и шоу продолжается. Как показал опыт, 55 ватт-часов хватало как раз впритык. Опять повезло.

Можно было бы сделать преобразователи с 24-х вольт на другие напряжения, но быстрее и проще оказалось использовать отдельные батарейки. Обычный пятивольтовый power bank питал WiFi ESP8266 модуль почти неделю без подзарядки. Светодиодные нитки питались от нескольких пар батареек AA, их просто периодически меняли. Нити холодного неона тоже питались от пары батареек AA, но отдельных.

Холодный неон вообще принёс много проблем. Он работает от высоковольтного (~100V) высокочастотного (~1000Hz) напряжения, которое генерируют многочисленные разновидности китайских преобразователей. Мы попробовали несколько таких преобразователей и все они либо сами сгорали, либо сжигали сами неоновые нити через какое-то непродолжительное и непредсказуемое время. Казалось, что эта хрупкая штуковина перегорает даже от косого взгляда! Забавно, что у “обычных” людей холодный неон работает без проблем, поэтому мы не ждали подвоха с этой стороны. Видимо мы использовали намного большую длину нитей, чем обычные пользователи. В конце концов, мы нашли преобразователь, который и сам ни разу не сгорел и ничего не сжег. Преобразователь маломощный, его хватает метров на 5 нити и питается от 2-х батареек AA. Я подозреваю, что именно его маломощность и маломощность самих батареек защищала от перегораний. Возможно, кто-то знает, в чём причина ненадёжной работы других преобразователей. Было бы очень интересно узнать.

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

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

Оглядываясь назад, можно сказать, что часть технических решений была удачной (использование актуаторов), часть — нет (шаговый двигатель для вращения центральной части), а часть — настоящий кошмар инженера (отсутствие обратной связи по складыванию крыльев). Даже сейчас, глядя на видео работы нашего арта, я боюсь, что команда на складывание не пройдёт (WiFi всё-таки), или аккумулятор сядет или ещё что, а внешние лепестки начнут закрываться и сломают всю конструкцию (актуатор даёт 600 кг усилия, точно хватит).

После настройки программного обеспечения мы всё собираем, грузим в машины и везем в пустыню. Поехали!


Очередь на въезд

Стройка на Плайе


Снова Сергей в эфире

Плайя — это круглая площадка посреди Black Rock Сity, предназначенная для установки основных арт-объектов. В самом ее центре установлен The Man, немного севернее The Temple: это два основных арт-объекта, построенные организаторами.

Мы приехали за четыре дня до официального открытия, и три из них потратили на сборку нашего кокона.

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

Забавная история о феерическом факапе
Чтобы упростить сборку рамы в Сиэтле, я заказал специальный кондуктор: фанерный десятиугольник, фрезерованный на станке ЧПУ, вокруг которого должна была собираться основа рамы. Я его использовал для сборки тестовой рамы и остался доволен таким решением: чтобы соблюсти все углы и центры, просто фанерный десятиугольник обкладываем трубами и обвариваем. Готово!

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

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

И мне пришлось переводить миллиметры в дюймы-футы, и рассчитав длину нарезать трубы нужного размера.

Так же, пришлось на глаз сваривать раму, стараясь соблюсти компланарность отрезков труб и корректность всех углов между ними.

Уже в пустыне, собирая инсталляцию, я заметил нестыковку. Конечно же, при переводе миллиметров в дюймы я кое-где ошибся и кусочки трубы получились чуть короче, чем нужно. И, как следствие, ножки лепестков с подшипниками не влезали в раму, рама оказалась меньше на 5 мм примерно.

Что делать?? Переваривать раму нечем, болгарки и сварочника у нас не было. Стачивать корпуса подшипников – очень долго и опять же – нечем… Решение нашлось неожиданно – разобрать узел с подшипниками на каждом лепестке, расколоть ножом внутренние фанерные прокладки, сколоть 3-4 слоя фанеры и собрать заново. Получилось! И что особенно ценно – быстро и почти без мусора.


Дальше – несколько фотографий со стройки.

Разложенные по порядку декоративные панели.

Установка декоративных панелей.

Вокруг рамы расставлены розовые флажки — разметка для анкеров. Ждём машину для вкрутки анкеров.

В пустыню даже тень нужно везти с собой.

Установка лепестков.

К нам едет Mayan Warrior, везет нам музыку

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

Невероятное ощущение!

В результате стараний каждого члена нашей чудесной команды мы сумели построить наш кокон за несколько часов до официального начала мероприятия. Мы молодцы!

А потом – была неделя показов и общения со зрителями.

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

В конце мероприятия мы разобрали нашу инсталляцию. Силовые деревянные детали были сожжены, а декоративные панели мы частично раздарили на плайе в качестве сувениров, а частично привезли в Днепр.

На этом я завершаю свой рассказ и предлагаю посмотреть видео процесса сборки.




Спасибо за внимание.

Let's block ads! (Why?)

Разбор: как защищены деньги на бирже, зачем нужны брокеры, и что нужно знать при их выборе

Изображение: Unsplash

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

Сегодня мы поговорим о том, как защищены деньги инвесторов на бирже, зачем нужны брокеры, и как выбрать такую компанию.

Как защищены деньги инвесторов


Начнем с самого важного вопроса – как защищены деньги биржевых инвесторов? Понятно, что всегда существует вероятность убытков при торговле, если рыночная ситуация сложится неудачно, но единственный ли это шанс остаться без денег?

Для банковских депозитов существует система страхования вкладов, на бирже ее аналога пока не существует (хотя периодически возникают разговоры о том, что ее нужно создать).

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

Кроме того, акции, купленные на бирже, невозможно потерять: они хранятся не у брокера, а в специальной организации, Национальном расчётном депозитарии (НРД).

Ценные бумаги — это ваша собственность при любых обстоятельствах. Перевести их куда-либо без вашего ведома невозможно. Де-факто депозитарий — это государственный «банк», в котором хранятся деньги и ценные бумаги участников фондового и валютного рынков. Таким образом, если с вашим брокером что-то случится, то нужно будет просто договориться с другим брокером и перевести активы к нему.

Вся деятельность российских брокеров регламентирована российским законодательством, а именно Гражданским Кодексом РФ, Законом о рынке ценных бумаг и другими нормативно-правовыми актами Центробанка России.

Зачем нужны брокеры


По действующим правилам частное лицо просто так не может взять и начать торговать на бирже – для этого нужна лицензия. Такие лицензии получают юридические лица – брокеры. Они же подают от лица клиентов заявки на совершение операций с различными биржевыми активами.

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

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

Как выбрать надежного брокера


В целом, как и в любой другой отрасли, у разных клиентов свои требования к услугам брокера. Запросы начинающих инвесторов объективно отличаются от требований опытных высокочастотных трейдеров. Мы же поговорим о том, как выбирать брокера, если вы только знакомитесь с биржей.

Первое, на что нужно обратить внимание – это лицензия профессионального участника рынка. Лицензии (их может быть много) обычно размещают на сайте брокера, и выглядеть они должны примерно так:

Если на сайте брокера выложена какая-то бумажка, выданная не российскими регулирующими органами, какой-то иностранной организации — отдавать деньги такому брокеру не нужно. Это явный признак «кухни» и того, что компания не соответствует требованиям российских законов.

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

После первоначального скрининга можно начинать общаться с брокерами. Начинающему инвестору стоит сразу узнать, какие варианты защиты капитала при торговле может предоставить брокер. Например, в ITI Capital можно как потренироваться в работе с торговым терминалом на тестовом счете с виртуальными деньгами, так и использовать инструменты инвестирования с низкими рисками (структурные продукты, модельные портфели и т.п.)

Стоит уточнить и о наличии возможности общаться с персональным консультантом. Поначалу у вас будет возникать много вопросов, и лучше иметь возможность оперативно получать на них ответы.

Следующий шаг – точно понять стоимость брокерских услуг. Обязательно нужно убедиться в отсутствии скрытых платежей, разобраться в том, как рассчитывается абонентская плата, нужно ли отдельно платить за софт для совершения операций. Тарифы должны быть опубликованы на сайте в удобном виде (например, вот тарифы ITICapital).

Варианты могут быть разными – например, часть брокеров включает комиссию биржи в стоимость совершения сделки, а другие компании взимают отдельно. Также при покупке акций и облигаций на длительный срок нужно учитывать комиссии депозитария, где активы будут храниться. Тут тоже возможны варианты – комиссия может быть фиксированной, а может составлять какой-то процент от стоимости бумаг. Если вы планируете совершать сделки с использованием заемных средств (т.н. «торговля с плечом»), также стоит выяснить, какие займы можно получить, на каких условиях и т.п.

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

Что будет, если брокер обанкротится

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

По закону если брокерская компания теряет лицензию и становится банкротам, это не должно сказываться на клиентах. Например, закрывать долги за счёт активов инвесторов нельзя. Кроме того, акции, купленные на бирже, невозможно потерять, они хранятся в Национальном расчётном депозитарии (НРД). Перевести их куда-либо без ведома клиента невозможно.

Сам же НРД является центральным депозитарием Российской Федерации и осуществляет обслуживание как ценных бумаг, так и других российских и иностранных эмиссионных ценных бумаг. То есть де-факто национальный расчетный депозитарий — это государственный «банк», в котором хранятся деньги и ценные бумаги участников фондового и валютного рынков.

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

Читайте обзоры, аналитику рынков и инвестидеи в Telegram-канале ITI Capital

Let's block ads! (Why?)

[Из песочницы] Два часа и 3.5 доллара. Как я сделал простой сайт с визуализацией распространения коронавируса

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

План


Ну, это же простейшая задача, подумал я:
  1. Ищем открытый API на сайте ВОЗ.
  2. Пишем парсер.
  3. Поднимаем сервачек с базой где-нибудь во free tier амазона.
  4. Покупаем домен, сложностью с выбором быть не должно.
  5. Ставим фласк, наворачиваем d3js для графиков, прикручиваем туда letsencrypt для пущей важности.

Реальность


Что-то пошло не так:
  1. На сайте ВОЗ нет открытого API.
  2. Нормальный парсер не написать, ВОЗ выкладывает данные в PDF, формат меняется, а тратить на создание всего дашбордика больше одного вечера не входило в мои планы.
  3. Оказывается, я уже потратил свой free tier на какие эксперементы.
  4. Почти все домены вида coronavirus b coronavirus 2020 уже заняты, кому они вообще понадобились-то?
  5. Учитывая предыдущие пункты, я точно не уложусь в один вечер, настраивая flask и базу для него...

Новый план


Кто-то на github публиковал свой nocode проект, а я-то чем хуже?
  1. Ну и черт с ним с API, хорошо хоть данные есть.
  2. Соберем руками, благо PDF файликов совсем мало. Пополнять тоже будем руками, за то время, которое понадобится на создание парсера, можно тратить по 5 минут каждый вечер на протяжении нескольких месяцев, попутно читая отчеты ВОЗ и получая дополнительную полезную информацию, благо ВОЗ публикует отчеты около полуночи, так что их можно оперативно выкладывать на сайт.
  3. Будем делать все просто, используем shared-хостинг, напросимся к кому-то из знакомых, проект-то не коммерческий и нагрузки не будет.
  4. На распродаже есть coronavirus2020.live за $3.5, да, обновление будет стоить потом более 20, но за год исчезнет или коронавирус, или человечество.
  5. Что у нас есть из готовых решений? Возьмем для визуализации бесплатный Google Datastudio, как раз отлично интегрируется с Google Sheets. Вместо SSL от letsencrypt используем cloudflare.

Решение


Можно сказать, что решение получилось действительно nocode и полностью соответствуем моим ожиданиям:
  1. Данные собраны в небольшую табличку в Google Sheets.

  2. В Datastudio создан простой дашборд.


  3. Весь сайт — один html файл в 42 (так получилось не специально) строки, половина из которых — метаданные всяких разметок.

  4. Вместо сертификата и гугл-аналитики — cloudflare.
  5. Вместо подключения почты для фидбека — ссылка на твиттер.

Выводы


  1. Сейчас любой человек, даже не имеющий никакого опыта работы с базами, не знающий SQL, может довольно эффективно работать с данными и строить красивые отчеты. Но SQL все же лучше знать.
  2. Никогда нельзя забывать о конечной цели, простое решение, приводящее к цели, всегда лучше сложного, а тем более — не реализованного.
  3. Коронавирус коварен и не думает останавливаться.

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

Let's block ads! (Why?)

Разбираем звук Dial-up модема

Привет, Хабр.

Как-то случайно вспомнив про модемный интернет и про «тот самый» звук коннекта, я задумался, а что собственно там было внутри.

Я нашел на просторах сети звук модема в WAV и программу Signals Analyzer. Попробуем разобраться.
Разумеется, я не первый, кто за много лет задумался над этим вопросом. Как показал поиск в Гугле, финский инженер описал фазы коннекта модема еще в 2012 году. Но для тех, кто не читает регулярно блоги на финском, наверное не грех и описать это еще раз, изучив спектр более подробно.

Введение


Небольшое отступление для «поколения Next», кто не застал те времена: модем это была такая волшебная коробочка, подключающаяся, если память не изменяет, в COM-порт (USB еще не было) и передающая данные через обычную телефонную линию в «голосовом» диапазоне. Соответственно, соединению с Интернетом (а еще раньше это было FIDO или BBS) предшествовал такой веселый писк, весь процесс можно посмотреть например, здесь.

Модемы эволюционировали от совсем древних, работающих через телефонную трубку со скоростью 300bps, до наиболее навороченных, дававших теоретически до 56Кбит/с, больше уже не позволял канал телефонной линии.

Пара фоток под спойлером
Древний доисторический акустический модем, на который клалась телефонная трубка, «вживую» такой застать уже не удалось:

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

Последняя версия модема со скоростью до 56К:


Еще интересный момент — судя по Amazon, модемы US Robotics Courier 56K Business продаются и сейчас, причем весьма недешево. Зачем не знаю, вероятно есть места, где другого типа коннекта до сих пор нет.

На этом мы закончим с введением, и перейдем к сигналу.

Коннект


Первый интересный момент — когда мы слышим (точнее слышали) звук модема, на самом деле, мы слышим не один модем, а сразу два — свой модем, и модем провайдера. На картинке обведены красным сигналы вызывающего модема:

Теперь посмотрим, какие виды модуляции мы можем встретить в этом сигнале.

1. Тональный набор (DTMF)

Самая левая часть картинки, тут ничего необычного нет, обычный тональный набор, который также использовался в обычных телефонах (кто-то наверно помнит кнопку переключения Tone-Pulse на корпусе проводных телефонов).

У меня кстати, была еще более старая АТС с импульсным набором, так что таких звуков не было, как и коннекта в 56К.

2. Соединение

Модем провайдера, получив звонок, «снимает трубку» и посылает в линию пару тонов, «наш» модем отвечает тоном другой частоты и посылает в линию информацию о доступных протоколах:

Как можно видеть, здесь используется FSK — частотная модуляция, где бинарный код передается с помощью чередования двух тонов. Скорость передачи всего 300бит/с.

Модем провайдера отвечает в таком же режиме, подтверждая прием.

Соединение завершается передачей достаточно длинного тона с низкочастотной амплитудной модуляцией.

Интересно, что если посмотреть подробнее, то видно что в местах «стыков» меняется также и фаза тона:

Зачем это сделано, сказать сложно.

3. Обмен «расширенными настройками»

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

Слева — уже описанный выше амплитудно-модулированный сигнал, затем уже знакомый нам сигнал с FSK. А вот с краю справа — другой тип модуляции. На картинке видно, что здесь меняется не частота и не амплитуда, а фаза сигнала (PSK, Phase Shift Keying):

Длина сигнала составляет всего лишь 0.15с.

4. Проверка линии

Здесь оба модема посылают широкополосный (на все доступные 3.7КГц:) сигнал длительностью ~0.4с, результат посылается другому модему.

В завершении модем передает отдельный сигнал для настройки эквалайзера и подавления эха в линии.

Дальше динамик выключается, и выполняются более высокоуровневые процедуры — проверка логина/пароля, и если все нормально, пользователь подключается к Сети.

Заключение


Как можно видеть, в звуке модема заложено довольно много всего, и при разборе возник вопрос, а собственно, зачем так сложно? Зачем чередовать разные виды модуляции, чтобы просто обменяться данными?

Ответ вероятно, прост — legacy. Каждый новый модем должен не только работать максимально быстро и поддерживать наиболее новые протоколы, но и уметь соединиться с более старыми моделями. Поэтому в самом начале модемы соединяются на минимальной скорости в 300 бод и обмениваются информацией о протоколе, «расширенные настройки» передаются другим видом модуляции, которые старый модем проигнорирует, а новые модемы смогут использовать.

Желающих изучить тему более подробно можно отослать к статье 2012г (на английском), но для общего знакомства думаю, информации достаточно.

P.S.: Под спойлером звук модема с раскладкой по времени:

Видео


Let's block ads! (Why?)