Gravity Defied на sed / Habr
Итак, эта статья посвящается тем, кто любит решать нестандартные задачи на не предназначенных для этого инструментах. Здесь я опишу основные проблемы, с которыми столкнулся во время создания аналога игры Gravity defied с использованием потокового текстового редактора (sed).Далее предполагается, что читатель хотя бы немного знаком с синтаксисом sed’ом и и написанием скриптов под bash.
Мирный вечер декабря перестал быть мирным, когда мне пришло сообщение от преподавателя примерно такого содержания:
На sed:
Gravity defied
…
Это должно быть круто
Признаться, первые полчаса я сидел с мыслью о том, как это вообще возможно. Но потом мне удалось взять себя в руки и я начал разбираться.
Попытки гуглить на тему игр на sed привели к арканоиду и сокобану.
Прежде, чем мы начнём разбор проблем, хочу поделиться репозиторием с проектом и видео-демонстрацией результата
Итак,
Hold space будет хранить состояние игры между итерациями (итерацией я буду называть обработку одного входящего символа), а в pattern space мы будем изменять состояние игры.
Алгоритм примерно такой:
- Переходим к действию, которое привязано к символу, который мы получили на вход
- Записываем в pattern space содержимое hold space
- Изменяем содержимое pattern space в соотвествии с логикой действия
- Записываем содержимое pattern space в hold space
- Производим наложение эффектов на pattern space (на этом шаге мы из нашего «служебного» состояния игры в то, что будет видеть пользователь)
- Выводим содержимое pattern space на экран
- Повторить с п.1 для каждого введённого символа
Для упрощения разбора введённого текста примем на веру, что из всей входящей строки лишь первый символ нам важен. Первым делом — инициализация. Создадим метку print, которая будет создавать поле игры в начальный момент времени. С момента запуска игры лишь один раз возникнет ситуация, когда на вход sed’у передаётся пустая строка: самый старт игры.
Таким образом,
/^$/b print
...
:print
# Начало любого действия, которое иницируется извне
g
s/.*/\
+-----------------------+\
|BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB1\
|BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB2\
|BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB3\
|BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB4\
|BBBBBBBBBBBBBBBBBBBBBUPPABBBBBBBBBBBB5\
|BBBBBBBBBBBBBBBBBBBBUBBBABBBBBAPPPPPP6\
|DBBBBBBBBBBBBBBBBBUPBBBBABBBBBABBBBBB7\
|BDBSBFBBBBBBBBBBBUBBBBBBABBBBBABBBBBB8\
|BBPPPPPPPPPPPPPPPBBBBBBBPPPPPPPBBBBBB9\
+-----------------------+\
b end
На этом этапе всё зависит от вашего воображения. Вы сами решаете, за что отвечает каждый символ. У меня B — это пустое место, F и S — колёса байка, в A, D, P, U — дорога (четыре вида, для красоты, но об этом — позднее).
Нам необходимо вывести всё полученное на экран. Как вы могли заметить, в конце print мы переходим к метке end.
end — это общее завершение любого действия.
:end
# Сохраняем все изменения в hold space
h
# Здесь позднее провернём всю пост-обработку нашего игрового пространства
# Отправляем символ очистки экрана
i\
^[[H
# Печатаем содержимое pattern space на экран
p
Примечание: ^[[H не стоит копипастить, это escape-последовательность. Например, в vim она вводится так: Ctrl+V Ctrl+ESC [ H
Запустим наш скрипт с помощью sed -nf gravity.sed
. Поздравляю с статической картинкой!
Когда у нас есть поле, достаточно просто написать команды, которые будут двигать влево-вправо наши импровизированные колёса:
s/FB/BF/
s/SB/BS/
Движение вверх чуть сложнее но мы же не боимся сложностей, правда?
s/B(.{39})F)/F\1B/
Тут вся суть в цифре 39. Это количество символов в строке.
Добавляем пару меток и «привязываем» их к нужным клавишам, и вуаля, у нас есть некий абстрактный байк (ладно, два колеса), для которого не существует границ и физики. Но если вы захотите писать лабиринт, то вам как раз это и нужно.
Проверить игру не сложно, но нажимать Enter после каждого введённого символа — удовольствие ниже среднего, так что нужно автоматизировать этот процесс.
Проблема вторая: тактование
Так как «сердце» игры — sed, нужна оболочка, которая за нас будет нажимать enter каждый раз, когда мы нажали кнопку. Бесконечный цикл — самое оно.
Примерный код:
(while true
do
read -s -n 1 key # считываем одно нажатие клавиши без вывода на экран в переменную key
echo $key
done) | sed ...
Игра теперь будет станет чуть более радостной, но в ней всё ещё есть большой недочёт: игрок может влиять на ход времени. Чем быстрее тыкает игрок по клавишам, тем быстрее ход игры. Нас такое не устраивает, поэтому нужно тактование. Теперь у нас два источника данных — тактовый генератор и пользователь. Самое простое решение, которое приходит в голову — воспользоваться ключом -t у read. Если пользователь ничего не введёт за указанное кол-во секунд, то read не станет блокировать скрипт. Это решение меня не устроило: на SunOS read отказывался принимать дробное количество секунд, а динамичная игра с одним кадром в секунду — это как-то странно. Второе решение — использовать именнованый pipe:
# Удаляем (на всякий случай) pipe и создаём новый
rm -f gravity-fifo;
mkfifo gravity-fifo;
# Эта строчка будет держать pipe открытым достаточно долго
sleep 99999999 > gravity-fifo &
# Запустим игру
sed -nf gravity.sed gravity-fifo &
# Тактовый генератор, который раз в $TIME * 10^-6 секунд будет записывать символ t в pipe
while true
do
echo t > gravity-fifo
usleep $TIME
done &
# Пользовательский ввод
(while true
do
read -s -n 1 key
echo $key
[[ $key == "q" ]] && pkill -P $$
done ) | $SED -u -e '/t/d' > gravity-fifo
Немного пояснений:
pkill — хороший способ убить тактовый генератор и sleep.
А если вам непонятно, зачем нужен этот sleep, то можете проверить без него: с первым же echo pipe закроется и sed поймает EOF. Попутно мы запрещаем пользователю писать тактирующий символ — мы тут байк водим, а не временем управляем.
Проблема третья: физика
У нас есть тактирующий символ, который вызывается через константные промежутки времени. Именно в обработчике этого символа можно прописать всю физику игры. Тут не могу дать общих советом, вся физика — это набор регулярок, которые проверяют всё, что проверяется.
Проблема четвёртая: пост-обработка
Сразу после того, как мы перешли к метке end и сохранили изменения в hold space, мы можем приступать к наложению эффектов. Ранее я упоминал, что я использую четыре типа дорог. К этому я пришёл методом проб и ошибок. В первых версиях дороги были одного типа: R, а на этапе пост-обработки я пытался написать регулярки, которые бы делали подъем/спуск в зависимости от взаимного расположения дорог.
Идея была отвергнута: алгоритм постоянно сбоил, проще прописать тип дорог.
Вооружаемся таблицей ANSI Escape-последовательностей, я ещё дополнительно воспользовался таблицей Unicode и получилось…
s/A/^[[107;38;5;82m█^[[0m/g
s/D/^[[107;38;5;82m▚^[[0m/g
s/P/^[[107;38;5;82m▀^[[0m/g
s/U/^[[107;38;5;82m▞^[[0m/g
Подводные камни есть и здесь: при использовании юникода pattern поиска не должен содержать точное количество символов. Unicode-символы распознаются как два символа и логика такой регулярки ломается.
Проблема пятая: маленькое пространство
На экран у нас влезает не так уж много символов, а карту хотелось бы сделать больше. Здесь на помощь приходит Scroll Buffer. Это такое место, невидимое для пользователя, которое будет хранить в себе кусочек продолжения карты. Для комфортного скроллинга стоит пронумеровать строчки, а в самом конце добавить строку, которая нумерует зону, например, z1.
Алгоритм работы:
- Если любая часть игрока ближе, чем на N символов к правому краю карты, переходим к следующему пункту
- Удаляем второй символ карты (первый у нас — рамочка)
- К концу каждой строки, перед цифрой добавляем #
- Если у нас набралось ровно M символов #, то выполняем следующий пункт, иначе — пропускаем
- Проверяем номер текущей зоны и заменяем все # на соответствующую данной зоне карту, меняем имя зоны на имя следующей зоны
- Переходим к метке end
- На этапе пост-процессинга обрезаем видимую часть так, чтобы символы # никогда не попадали в видимую область, а так же удаляем вспомогательные данные, например, номер зоны.
Ура! Теперь у нас есть базовые знания, как создать игру на sed. Зачем? Потому что можем.
P.S. Задание любезно предоставлено Жмылёвым С.А. Надеюсь, следующие поколения примут часть моего опыта и сделают что-нибудь ещё более замечательное. х)
Предложения со словосочетанием ПРЕВОЗМОГАТЬ ТРУДНОСТИ
Читая эту книгу, любой здравый и мыслящий человек, несомненно, вспомнит идеи и надежды того времени, какими тогда жили люди, надеясь на лучшее будущее, терпеливо превозмогая трудности и беды, над которыми нынешние соглядатаи столь охотно иронизируют, посмеиваются. Так что не стоит полагать, будто в те времена люди существовали, превозмогая трудности. Их прогоняют через изощрённо жестокие, безжалостные тренировки, чтобы заставить терпеть неудачу, учиться приспосабливаться и превозмогать трудности, — и через такие условия, которые вырабатывают навыки, позволяющие успешно справляться с заданием, чего бы это ни стоило. Теперь мечтаю о том, чтобы превозмочь трудности благодаря развитию взаимовыгодных двусторонних связей с государствами-членами. Главнокомандующий, превозмогши трудности и спасши войско от гибели, приобрёл полную его доверенность.
Спасибо! Я стал чуточку лучше понимать мир эмоций.
Вопрос: внимать — это что-то нейтральное, положительное или отрицательное?
Положительное
Отрицательное Хочет пить — пусть соберёт себя в единое целое и, пафосно превозмогая трудности и собственные физические недостатки, сделает лишних три шага. Нужно жить просто, превозмогая трудности и разочарования, укреплять свою веру, «любить сколько возможно, потому что только в любви заключена истинная сила, и тот, кто много любит, творит великие дела и многое может, и то, что делается с любовью, делается хорошо». Впрочем, просто жить, превозмогая трудности, и оставаться при этом человеком, не наступая никому на горло ради собственной выгоды, а наоборот помогать слабым, нуждающимся в твоей помощи, это может быть даже труднее. Но впереди была цель, которую следовало достигнуть, и он шёл к ней,Неточные совпадения
Многие из них, превозмогая невероятные трудности, порой добиваются колоссальных результатов в таких областях, в которых не справляются их ничем не ограниченные коллеги. История спорта, и спорта высших достижений в частности, изобилует вдохновляющими примерами, как превозмогать боль, разочарования, потери, вердикты врачей, жизненные трудности. Смиряться, превозмогать себя, преодолевать самые пылкие свои порывы — таков был главный урок, затвержённый им в спальне, урок такой неимоверной трудности, что иным филологам куда легче выучить греческий, а иным генералам и половины усилий не стоит выиграть битву. Только она превозмогает мирскую волю, мирской закон, преодолевает страх перед трудностями, пред людьми и начальствами, страх перед гонениями.Готовый перевод Breakthrough / Прорыв: Глава 012. Превозмогая трудности :: Tl.Rulate.ru
«Хех… Ну, мы как то грабили караваны… Короч, эта шкатулка была у одного из торгашей, который отчаянно пытался ее защитить. Ну а я его грохнул, и фигню эту забрал, думал, чет стоящее. А там бл**ь оказались какие-то ароматные кубики. Один я достал, и использовал чисто чтоб в комнате был прикольный запах. Но это же деревяшка, я бы никогда не подумал, что ее можно и схавать, потому она и лежит тут целая и невредимая», — рассказал Ран-Даш.«Хех, ну и отлично. Твое новое задание — ешь эти кубики. Хоть до, хоть после еды, хоть просто так, не важно. От переедания Дубом проблем не будет. Как только у тебя возникнет ощущение, что по твоим рукам и ногам очень быстро течет ледяная вода, а твой мозг начинает медленно замораживаться — сразу сообщи об этом мне, ибо это признаки магического пробуждения. И еще: никому не рассказывай об этой шкатулке, и о кубиках внутри нее, просто в целях безопасности, мало ли что.»
«Лады!», — ответил ящер и взял один кубик из шкатулки. Придирчиво осмотрев его со всех сторон, он все-таки решился его съесть. И вот, небольшой взмах лапой и кубик исчезает в его пасти. «Хм, эта х*рня похожа больше на какие-то жевательные конфеты… Но довольно неплохо», — отметил Ран-Даш про себя.
«Старайся тщательно разжевать его, прежде чем проглотить — так ты будешь лучше усваивать полезное содержимое Дуба».
«Хорошо. Слуш, если ты сказал название этой редкой фигни, то не значит ли это, что ты узнаешь также и другие сокровища из моего сундука?», — спросил Ран-Даш, громко чавкая.
«Конечно, но к чему вопрос?»«О, отлично! Тогда, что вот это за штука?»
Ящер достал из сундука флакон с фиолетовой жидкостью, и странным символом на пробке, после чего вопросительно уставился на меня.
«Эм, это зелье, на время улучшающее твое зрение и слух.»
«Зае**сь! А это?», — после чего он положил передо мной связку тонких и длинных игл, закрученных в спирали на концах.
«Это… специальные стрелы, которые используют для охоты на особо крупных монстров. Имеют паралитически
Превозмогая трудности — Aleksov’s Blog
Ану ка давайте попробуем пообщаться. Принцип прост: Ваши умные вопросы — мои ответы. Пишем в комментариях.
Допиливаем…
Зачем?
Как и в предидущем ремейке продолжаем глобализировать код с применением библиотеки Edelweiss. Логика и цели остаются теми же что и в оригинале, за исключением того, что все функции берутся из библиотеки. Пересобрал я этот скрипт уже достаточно давно, месяцев эдак 6 назад, но вот руки только сейчас дошли до публикации. Читать далее «Отказоустойчивый кластер из MikroTik’ов с Эдельвейсом»
Зачем?
Обратился однажды ко мне мой старый товарищ с проблемой, что вот некие буржуйские ресурсы не пущают советского человека к заморским радостям. При этом не помогают в борьбе с супостатом не VPN не анонимайзеры не прочие руны и мантры. Как оказывается, стали нынче блокировать уже не только по IP и его расовой принадлежности, но и заглядывать гораздо глубже, вплоть до MTU! Ситуация была критической и нужно было с этим что то делать… Читать далее «Анонимайзер на основе GRE в Linux»
Закрыл дверь, а он в окно…
Предистория
По сравнению с блокировкой TeamViewer’а, блокировка Viber оказалась гораздо более увлекательной затеей. Эта зверюга поднимает десятки соединений на разные адреса из разных подсетей. Ловить всё это по IP казалось совершенно мифической задачей. Тут уже не обошлось без помощи L7, однако банальная блокировка домена ничего не давала. Пришлось вооружаться Wireshark и терпением.
Читать далее «Блокируем Viber при помощи MikroTik»
Закрыл дверь, а он в окно…
Предистория
Мышки долго плакали, кололись, но продолжали жрать кактус! Именно так выглядела блокировка Тима у нас в конторе. Ловили порты, создавали правила L7, блокировали не переблокировали… Как всегда на помощь нам пришла «свечка» (Torch) и помогла выяснить, что помимо официальной автономки (43304 — 185.188.32.0/24), Тим юзает ещё 3 подсети. И так, собственно рецепт в студию!
Читать далее «Блокируем TeamViewer при помощи MikroTik»
Пойдём через мост, или лучше вплавь?
Предистория
Пару недель я отлавливал интереснейшую багу с исчезновением трафика на своих домашних микротиках после изменений статусов VRRP интерфейсов. Ковырял скрипт который занимался отказоустойчивостью, перепроверял и пересобирал конфиги, всё тщетно. В какой-то момент бросил затею и смерился с оооочччеееееннььь меееедленннымм переключением с одного маршрутизатора на другой. Но вот, однажды таки решил разобраться с «волшебным» обновлением системы, которая буквально «уносила» всю конфигурацию, ведь не пригоже сидеть на старой оси барину 😉 .
В итоге, победив «волшебство» обновы перешел к вопросу медлительности и стал поэтапно разбирать проблему. Каково было моё удивление, когда я выяснил что это было! Это буквально не лезло ни в одни ворота! Такой баги я ещё ни где не встречал! Читать далее «Мосты в MikroTik RouterOS (Bridge bugs)»
Обновимся или сразу гвоздь забьём?
Предистория
Жили были на 6.37, приехала обнова 6.38 и рука как всегда потянулась к кнопке Upgrade. Я как человек приученный Apple к «ровным пацанским» обновлениям, даже сквозь пару-тройку версий, жмякнул на кнопку и пошёл ставить чай. В тот момент я ещё не знал, что этот «чаёк» встанет мне поперёк горла. «Успешное» обновление закончилось сбросом маршрутизатора в ноль, даунгрейда на 6.37.4 (bugfix) и откладыванием задачи в долгий ящик. Что же таки происходило после обновы и как с этим жить? Читать далее «MikroTik RouterOS Upgrade 6.38+»
Превозмогая трудности и боль
О русских женщинах написано много. Казалось бы, что можно еще добавить? Но встречаются женщины, способные не просто удивить, а послужить примером.
Беда пришла, когда её никто и не ждал: да и кто из нас готов к резкому повороту судьбы? Однажды у неё просто подкосились ноги, и она не смогла снова встать, нижняя часть тела отказалась повиноваться. Это стало новым отсчетом времени до и после. До этого были дом, семья, работа, две очаровательные дочки (младшей тогда не было и года). А после — череда тяжелейших операций на позвоночнике и ощущение собственной беспомощности. Рухнуло в одночасье все то, что было дорогим и близким, осталось в прошлом, а впереди — неизвестность и двое детей на руках.
С Ларисой Калановой мы познакомились на одном из мероприятий городского общества инвалидов. В тот день там проходил мастер-класс по выращиванию фиалок, ведущей которого и была Лариса Александровна. Наблюдал за этой жизнерадостной миловидной женщиной, трепетно и бережно показывающей, как надо правильно поливать, пересаживать и ухаживать за цветами, и не верилось, что она преодолела немало трудностей на пути к полноценной жизни. Но, пообщавшись с ней, я понял: нет недостижимых целей.
— Сейчас намного легче, я могу самостоятельно ходить, хотя прогнозы у врачей были неутешительные, — рассказывает Лариса Александровна. — Намного тяжелее было, когда все только произошло. Мы тогда жили в деревне, а там человеку с ограниченными возможностями еще сложнее.
Слова врачей о том, что все это стало последствием воспаления позвоночника, резали слух, особенно в части перспективы на всю жизнь остаться в инвалидном кресле. Но сдаваться она не собиралась, и началась борьба. Борьба за каждый подъем, за каждый шаг. И не страшно, что он был совершен в медицинских ходунках, главное, сделан самостоятельно.
— Мне нельзя было сдаваться, у меня две дочери и я не могла их подвести, — продолжает наша собеседница. — Конечно, пришлось начинать все заново. Как только стала самостоятельно ходить, мы переехали в город, здесь больше возможностей как для меня, так и для моих детей.
И за десять лет у неё все получилось — встать на ноги, стать замечательной матерью, которой, впрочем, оставалась всегда. Старшая дочь сейчас учится на следователя, младшая еще школьница, но учится на «отлично». Неделя Ларисы расписана буквально по минутам, это участие в мероприятиях городского общества инвалидов, плавание в бассейне, занятия лечебной восстановительной физкультурой. И все это без отрыва от домашних забот, которые выполняет исключительно самостоятельно. А разведением фиалок занялась пять лет назад и как-то в это втянулась.
— Они лучше любых лекарств и докторов помогают мне снять напряжение и боль, которая нет-нет да и напомнит о себе, — продолжает Лариса Александровна. — Реабилитация после такого заболевания очень долгая, но я не собираюсь опускать руки, ведь у меня есть цель. А цель жизни – это главное, к чему надо непременно стремиться.
Наша беседа, оставила в душе неизгладимый отпечаток. Мы привыкли, что где-то бывают чудеса, а рядом как-будто ничего не происходит. Но это не так. Наша героиня своим примером доказала, что не существует непреодолимых преград, не стоит поддаваться отчаянию, как бы ни было тяжело, нельзя терять цель в жизни и сдаваться. Ведь после хмурого заката всегда наступает рассвет.
А. АНДРЕЕВ.
Превозмогая трудности на пути к светлому будущему
Автор: Тейлор Монахан, основательница MyEtherWallet — одного из самых известных сервисов по работе с токенами на базе Эфириума.
Разрабатывая первую версию MeEtherWallet, мы не задумывались о том, как изменить мир. Нашим желанием было создание сервиса электронных кошельков с более понятным пользователям интерфейсом, не требующим командную строку. Результат выполненной работы вы можете оценить сами: MEW стал де-факто стандартным инструментом для работы с Эфириумом. Такова жизнь, никогда не знаешь, куда тебя приведет то или иное увлечение.
Справедливо говоря, успех нашего проекта стал не только следствием кропотливой работы сбалансированной и опытной команды — на руку нам сыграла и конъюнктура рынка. Существовал спрос на инструменты, подобные MEW, который не был удовлетворен. После долгих поисков готовых решений мы пришли к выводу, что подобный сервис был бы очень полезен как для членов нашей команды, так и для остальных участников криптосообщества. Всех этих людей объединяет вера в радужное будущее криптовалют, они зачастую придерживаются либертарианских или анархистских идей, зациклены на собственной эффективности, являются очень мотивированными и обладают высокими техническими способностями.
Проблема заключается в том, что инструменты, которыми пользовались специалисты на заре развития криптоиндустрии, выглядели довольно трудно, что препятствовало развитию и распространению технологии блокчейн в мире. Для принятия криптовалют большинству людей на нашей планете необходимы приспособления и интерфейсы, отличающиеся своей простотой и нативностью. Именно по этому пути пошли создатели более традиционных приложений, что привело к появлению большого количества мобильных банков, приложений по оплате всевозможных услуг и прочих сервисов, без которых многие люди не представляют свою жизнь.
Для принятия блокчейна необходима смена парадигмы сознания. Ведь реальный мир функционирует по-другому. Помимо ответа на вопрос «как», необходимо быть готовым и к вопросу «почему».
На помощь не придет никто
Другим интересным вопросом становится повышение собственной сознательности и ответственности. Майк Белш, CEO кошелька с поддержкой множественных подписей BitGo и глава проекта SegWit2x, впервые обратил мое внимание на этот вопрос. Мы привыкли жить в мире, где все самое ценное находится всегда в наших сумках (телефон, кошелек и прочие документы), дома застрахованы, а порядок поддерживается правоохранительными органами. В мире криптовалют все совсем по-другому: вы сами несете ответственность за свои действия, и никто вам не поможет в случае экстренной ситуации.
Потерять приватные ключи в таких условиях куда опаснее, чем обнаружить свой дом сожженым дотла!
Проблемы на этом не заканчиваются, в этом мире даже неверно введенный символ может стоить вам целого состояния. Более того, в случае кражи ваши шансы вернуть свои средства стремяться к нулю. Именно такую цену приходится платить за приватность, свободу от налогового регулирования и независимость от государственных границ.
Иногда я шучу, что членом команды MyEtherWallet необходимы оплачиваемые годы терапии, чтобы вернуть свое психическое здоровье в норму после долгих часов, проведенных в переговорах с пользователями, ставшими жертвами разного рода манипуляций или собственных ошибок. Тяжело признавать свою беспомощность в этом вопросе. Нам остаётся лишь повышать уровень грамотности клиентов, снижая подобные ситуации в будущем.
Потеряв свои приватные ключи, вы никогда не сможете вернуть свои деньги. Забудьте об этом, никакого волшебного средства не существует. Однако зачастую именно подобные ошибки заставляют человека разобраться, с чем он имеет дело.
Людям, привыкшим к жизни в современном мире Facebook, Google и приложений онлайн-банкинга, очень тяжело свыкнуться с новыми правилами. Они привыкли ждать помощи и поддержки со стороны. Именно этим опасен бурный рост криптовалют, привлекающий все новых инвесторов в поисках прибыли. Нас ждут истории громких разочарований и горьких сожалений.
Отрасль сложна для новичков
Криптовалюты — это аномалия. Смиритесь с этим. Ничего похожего в истории не существовало, поэтому нам необходимо время, чтобы подготовить людей к этому и помочь избежать проблем. Сейчас же наша целевая аудитория довольно узкая, над этим нужно работать. Очень важно понять, на чем будет базироваться продукт, сформулировать собственные ценности и принципы и следовать им. Мы стремимся фокусироваться на проблеме и решать ее согласно нашим принципам для людей, которые пользуются продуктом и верят в нас.
Государства существуют не просто так. Налоговая система, законодательная власть, ограничения прав и наложение штрафов — все это позволяет осуществлять всеобъемлющий контроль, с которым приходят и большие возможности предотвращения правонарушений и наказания преступников. У отдельно взятой компании в криптоиндустрии таких серьезных инструментов нет. Даже формирование приватных ключей не должно осуществляться той же компанией, что будет предоставлять услуги двухфакторной аутентификации. Мы не всемогущи, но это не значит, что мы не можем дать бой установившейся системе.
Стоит признать, что предстоит еще большая работа: необходимо увеличивать число людей, занятых в индустрии, повышать грамотность населения и придумывать все новые решения.
Очень важными задачами являются:
— разработка понятных каждому интерфейсов
— появление фондов, управляющих вашими средствами
— создание решений для работы с традиционным бизнесом
— разработка системы для контроля ICO и сборов благотворительности
— удовлетворение спроса людей, готовых пожертвовать приватностью для повышения контроля и защищённости собственных вложений
Нам нужны ресурсы для всестороннего развития экосистемы
Место найдется для каждого
Только вместе мы можем создать наше будущее, однако начинать заниматься этим необходимо сейчас. Нам нужно привлекать все новых людей к работе над проектами: в данный момент криптоиндустрия воспринимается многими как сфера, где невозможно достичь успеха без высшей ученой степени по математики и 10-летнего опыта работы в высокотехнологичных проектах. Это не так.
Нам нужны не только эксперты по теории игр и представитель крупных корпораций. Для запуска огромного количества проектов не нужны миллионы долларов, в криптоиндустрии найдется место даже подросткам, снимающим видео для YouTube. Ведь информацию нужно распространять.
Правда заключается в том, что любые серьёзные изменения начинаются с маленького шага, нужна лишь дисциплинированность и упорство. В один прекрасный день, оглянувшись назад, вы будете приятно шокированы проделанной работой. Оставайтесь оптимистами, ваше время приходит.
Читайте также размышления о криптовалюте известного инвестора и блогера Фабриса Гринда
Цитаты из русской классики со словосочетанием ПРЕВОЗМОГАТЬ ТРУДНОСТИ
ПРЕВОЗМОГА́ТЬ, —а́ю, —а́ешь. Несов. к превозмочь.
Все значения слова «превозмогать»ТРУ́ДНОСТЬ, -и, ж. 1. Свойство по прил. трудный (в 1, 2 и 3 знач.). Трудность пути. Трудность задачи.
Все значения слова «трудность»-
Читая эту книгу, любой здравый и мыслящий человек, несомненно, вспомнит идеи и надежды того времени, какими тогда жили люди, надеясь на лучшее будущее, терпеливо превозмогая трудности и беды, над которыми нынешние соглядатаи столь охотно иронизируют, посмеиваются.
-
Так что не стоит полагать, будто в те времена люди существовали, превозмогая трудности.
-
Их прогоняют через изощрённо жестокие, безжалостные тренировки, чтобы заставить терпеть неудачу, учиться приспосабливаться и превозмогать трудности, — и через такие условия, которые вырабатывают навыки, позволяющие успешно справляться с заданием, чего бы это ни стоило.