Ещё одна группа, в том числе по Крипте.

Последний пост:18.05.2019
7
1 2 3 4
  • Всем привет. У меня в другом разделе есть дневник про коллективное взаимодействие интеллектов. Думаю, что может быть востребовано среди тех, кто интересуется и занимается всякой разной криптой :)
    Хотел естественно-постепенно влиться уже в одну здесь присутствующую группу со своими идеями, но не прошел ценз и не заинтересовал идеей.

    Дальше будет больше подробностей.
    Ответить Цитировать
    0
  • Что было раньше, курица или яйцо.

    Что сначала нужно в проекте по созданию и работы группы интеллектов "нарисовать"? "роадмэп" или "вайтпеппер" ?

    Будем "рисовать" сначала крупными мазками-набросками. Наверное это все таки будет эскиз роадмэп-а.

    Начальная стадия: под что собирать людей с интеллектом для взаимодействия?
    (сразу предложение: люди с интеллектом это те люди, которые считают, что обладают интеллектом. Это вот первый такой фильтр. Считаешь, что есть интеллект у тебя - первый фильтр прошел. Но, все таки он будет не единственным, но вполне может быть что на начальном этапе - именно единственным)

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

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

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

    Цели есть личные и групповые. Придумывается (в процессе работы группы) оптимальный механизм соотнесения личных и коллективных целей. По-простому - достижение коллективной цели должно автоматически вести к достижению личных целей.

    предложение:
    Одним из важных элементов этого механизма принять-создать СОБСТВЕННУЮ КРИПТОВАЛЮТУ группы. (Конкретная реализация будет предложена и принята окончательно позднее. Лично мне нравится идея использовать фреймворк EXONUM для создания приватного блокчейна.)

    продолжение следует... но совсем не обязательно его ждать, уже можно интересоваться
    Ответить Цитировать
    1
  • Ого!!! Если это не шутка - то это ... не нахожу слов.

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

    ftdgoodluck, в Питере 28 мая будет митап местных и не только крипторазработчиков, не планировал быть?
    Ответить Цитировать
    0
  • Смысл темы в том, чтобы сообщить, что скоро будет набор в группу и понять, как эту группу сделать максимально экономически эффективной с использованием технологии блокчейн и участием во всяких криптопроектах.

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

    А что делать?
    Делиться своими умными мыслями и предложениями.
    Ответить Цитировать
    0
  • Мюнхаузен, да - интересно. Смотрю, читаю.
    Ответить Цитировать
    0
  • Прочитал две статьи, Сергей. Про "Аквариум" и про взаимоотношения владельца с топами (с топом).

    У Вас судя по статьям - большой опыт в сфере управления и в работе "вертикалей". И, как я понял, Вы сейчас ещё и владелец своей "вертикали". Вы вышли в "паблик" и ищете тех, кто заразится Вашими идеями. Логично.

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

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

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

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

    А вот в том, что сегодня очень много людей работают за еду+жильё+дорогу на работу, в магазин за едой, детей в садик отвезти, тещу в аэропорту встретить - я вижу большую проблему (которая творчество масс то и убивает) - и причину вижу в этом - неэффективность вертикалей. Вот если Вы спец по теории управления - может подскажете - есть шанс у невертикальных экономических структур? Или хотя бы у таких, где вершины вертикалей и вертикалек не так явно выражены ?
    Ответить Цитировать
    0
  • Цитата (ftdgoodluck @ 9.5.2018)
    rehabilitator, по cчастливой случайности я хорошо знаю руководителя проекта Exonum (а возможно им и являюсь – кто знает? =)


    Смотрел выступление твое (Ваше?) в Минске, мне там понравился и вопрос и ответ. Спросили - зачем Вам опенсорс, если у вас ориентир на государства и структуры, которые готовы платить вовсе не за то, что у вас в открытом виде на гитхабе выкладывается.
    Ответ понравился не конкретикой а идеологией. Ну да, действительно, Блокчейн - откртытость, свобода и независимость - и проприетарщина как бы не вяжутся между собой.
    На самом деле, вполне бы завязались, чего уж там :)
    Но раз все таки - гитхаб и открытость, то продолжу вопрос. Все таки в этом есть что то большее, чем дать возможность как можно большему числу программистов освоить Ваш фреймворк с целью, чтобы потом у заказчиков было больше оснований покупать Ваши решения, так как на рынке будет достаточное число спецов, которые их смогут поддерживать ?
    Ответить Цитировать
    0
  • Как будет в группе задействована своя Крипта.
    Очень просто :)
    Майнинга не будет. (Может будет анкоринг на блокчейн битка, а может будет развитие фреймворка, когда этот анкоринг можно будет быстро пилить на любой неприватный блокчейн)

    Будет разовая эмиссия - скажем триллиона монет (может шучу на тему триллионов, но это уже как первая сотня (или десятка) решит)
    И будет сразу предусмотрен механизм сплитования (или допэмиссии)

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

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

    Всё, что выше описано, будет конечно скорректировано и принято коллективно, первыми участниками, и потом этот подход будет применяться и дальше.
    Сообщение отредактировал rehabilitator - 11.5.2018, 13:31
    Ответить Цитировать
    0
  • Цитата (Мюнхаузен @ 11.5.2018)
    Мне показалось, что наши посылы похожи - объединение интеллектуальных ресурсов ( в моём изложении "лишних мозгов":) для создания новых вэлью. У меня есть несколько более приземлённых идей с тз использования распределённых технологий в бизнесе, но их реализация требует формирование команды из специалистов с различного рода компетенциями


    да, очень похожи в этом !!! Но, откуда слово "лишние"? Мне интересно, что Вы под этим словом имеете ввиду. Я вижу проблему в этом ну просто буквально - нет (или я их почти не знаю) каких то бизнес-процессов, в которых бы действительно требовался бы коллективный мозг (или бы обеспечил большую эффективность). И это даже как то странно осознавать :)

    Ну вот есть что то похожее в разработке сложного и объемного ПО. Там все таки есть методология, которая вполне логично предполагает декомпозицию задачи на отдельные и они отдаются профессионалам для того, чтобы они сами находили решения... Хотя и здесь не все радужно, иначе откуда бы родилось выражение "быдлокодер" :) очень обидное, на мой взгляд, так как программистов я очень уважаю, любых почти :)

    Интеллект в этом смысле у людей, вполне может быть, вовсе и далеко не вычислительная мощность, и не это востребовано. Ответственность за принятие решения, выбор из сотни вариантов (которые невозможно все предусмотреть в регламентах) - это то, что трудно заменить вычислителями. Но в чем то техника все таки должна сильно помогать. Телекоммуникации, выбор решения все таки на основе каких то данных, а не только на интуиции.
    Блокчейн тут очень востребован - как механизм протоколирования кстати (у разработчиков EXONUM как я понял, есть четкое понимания полезности этой фичи блокчейна :) )

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

    ! Да. И это же можно использовать :) Только придумать те бп и технологии, которые будут обеспечивать быстрые решения. Быстрые решения проблем людей это очень важно. Если что то такое предлагается, то люди конечно пойдут туда.
    Ответить Цитировать
    0
  • Я занимаюсь :) творческой работой :) Но, хотелось бы творить в другом направлении.

    Наверняка есть много творчества в том, чтобы мотивировать сотрудников на работу, получающих в белую всего лишь 30% от заработка (постонянно ноющих, что нельзя взять кредит - ипотеку), уметь оградить Босса от возмущений типа, а почему мне не хотят деньгами компенсировать неотгуленный отпуск. На этапе собеседований кандидатов - очень много творчества суметь выявить (и отправить в другие места) чудаков, которые готовы работать за еду, но при этом в их лексиконе есть какие то странные слова типа, ДМС, ТК, компенсация за переработки, компенсация проезда, командировочные.

    Вот есть наверняка люди, которые как рыбы в воде в таком творчестве. И они действительно молодцы, и чего уж тут говорить - нужны такие люди бизнесменам. Но я хочу другого, тем более что такой навык не является (не считается на рынке) каким то уж сильно дорогостоящим. Та же еда, жилье, бензин, ну может не только на себя, но ещё и на половинку.
    Сообщение отредактировал rehabilitator - 12.5.2018, 14:43
    Ответить Цитировать
    0
  • Мюнхаузен, я процитирую большой кусок из Вашего концепта на голосе:

    Цитата
    Общественная полезность платформы "Aquarium":

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

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

    "Лишние мозги" это интеллектуальная сила, которая не задействована или неэффективно задействована в нашем обществе.

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

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

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

    Мы "монетизируем" мозги, интеллект. Даём возможность этим "лишним мозгам" не просто возможность заработка, как экспертам, валидаторам или членам команды проектов, но включаем их в процесс создания добавленной стоимости и предоставляем возможность стать полезными, создавать лучшее будущее своими руками и своими совсем «НЕ лишними мозгами».

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

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

    Ну и, Платформа регистрирует авторство Идей в децентрализованном блокчейне.


    "Общественная полезность" - это наследие советского прошлого :) в том смысле, что вряд ли это мотивирует сегодняшних активных людей на то, чтобы они проявили интерес. Это не тот "слоган", моё такое мнение :).
    А в группе все таки нужны активные люди. Если среди тех, кто "невостребован" такие найдутся - это замечательно. Часть из них действительно обладает энергией, знанием и ЖЕЛАНИЕМ что то поменять, прежде всего для себя. И они готовы к работе практической. Другие - увы, не готовы. Но пока ( у меня например, который ищет с кем бы скучковаться) нет задачи социальной, помочь тем, кто не хочет изменений.
    Гораздо интереснее мне задача - суметь использовать потенциал именно тех, кто Хочет, но "инфраструктура" не позволяет это желание реализовать. И есть лозунг всяких "гуру мотиваций", он мне не нравится. Это типа - если ты хочешь, но не можешь, значит недостаточно сильно хочешь!

    ЛЮБОЕ ЖЕЛАНИЕ, если оно есть, инфраструктура (вернее её владелец-создатель, в данном случае группа) может конвертировать в прибыль (вэлью). И тут много как раз завязано на качество и характер этой инфраструктуры. Как Вы там и сами отмечали, Блокчейн здесь очень кстати появился и сможет быть очень значимым и полезным элементом этой инфраструктуры.
    Ответить Цитировать
    0
  • С golos.io тоже интересно.
    Это же где-то рядом, вполне такой прототип того, о чем я говорю. Не очень конкретный (оплата только за сообщения) с практически отсутствующим механизмом командообразования. Но как некий прототип и даже "порт приписки членов группы" вполне годится.

    Не знаю подробно про блокчейн, который в основе голоса и его родителя (Steem)

    Но наверное, анкоринг, можно и на этот блокчейн делать? Это больше вопрос к представителю (а может даже руководителю проекта EXONUM )
    ftdgoodluck Спасибо вообще (за то что ты есть! :) ) за приглашение в личку вопросы задавать, обязательно воспользуюсь, очень хочется не разбрасываться такими подарками случая (впрочем, не такой уж и случай, вполне логично, что умным людям интересен покер и джипситим и они все здесь уже давно :) )

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

    Только предварительно все таки хотелось бы какое то ядро заинтересованных профессионалов собрать, для понимания каких инструментов не хватает на том же голосе и что можно будет сразу новым членам группы предложить в качестве "быстрой победы". Мне по прежнему техническим ядром или важнейшим элементом видится своя приватная крипта (блокчейн). Анкоринг на голос, а не на биткойн - был бы в этом случае может быть неким реверансом в сторону ребят, двигающих Голос ... ну смутно пока, пока просто поток мыслей из головы (наружней части, без глубокого погружения :) )
    Ответить Цитировать
    0
  • Цитата (Мюнхаузен @ 12.5.2018)
    2. Когда Вы говорите о неких менеджерах в разных функциональных областях, работающих на бизнесмена в рамках существующих правил ведения бизнеса, то в Ваших словах ощущается раздражение, однако это вопрос не к этим людям, если они работают "по целям" и работают эффективно.


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

    Цитата
    5. Фактически, мы уже который раз говорим об одном и том же, но слегка под разным углом и не можем услышать друг друга. А теперь представьте сообщество в, скажем 100 экспертов (а если больше), повёрнутых на своей гениальности и слышащих только себя:) Вот тут и нужны механизмы Менеджмента Идей и не факт, что существующие справятся с такой "творческой массой" - а ведь их ещё нужно привлечь..


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

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

    Цитата
    6. У меня нет возражений использовать мой Блог на Голосе, вот только у меня большой скепсис относительно самой этой платформы и активности на ней. В основном идёт имитация и набивание комментов ботами. Живых и активных людей там я не увидел пока. Можно судить по соотношению количества просмотров и комментариев, особенно, качества комментариев по сути написанного.


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

    Цитата
    Можно в приват написать мне Ваше имя, а то как-то неловко общаться с анонимом:)


    Почему неловко? Впрочем, согласен, что если наше взаимодействие не ограничится только сообщениями на форуме, то конечно логично последует и более тесное знакомство. Мне ловчее, когда здесь (на форуме) ко мне обращаются по моему нику.
    Ответить Цитировать
    0
  • Цитата (rehabilitator @ 13.5.2018)
    Так хочется, сказал слово и оно в "граните отлилось" какого-нибудь вэлью, пусть маленького. А когда слова просто, чтобы высказаться, чтобы услышали, это вэлью для психоаналитиков, а остальным приходится барахтаться в этом потоке информации, тоже механизмы востребованы для фильтрации, новые, на базе ИИ и каких то подходов.

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


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

    Самые"правильные" языки в плане "осмысленности" и содержательности - это конечно языки программирования, хотя бы формально (На выходе вполне можно получить какашки, но как бы тут не совсем "язык программирования" виноват.

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

    Из всего этого первыми людьми которых буду агитировать за вступление в группу будут программисты, особенно те, кто имеет опыт обучения других или хотел бы его получить. Ещё очень нужные группе люди - те, кто знает как и где можно эффективно использовать в реальных проектах джунов. Нужно как можно быстрее иметь практику участия в оплачиваемых проектах начинающим программистам, а умельцы использования джунов обеспечат выгодную экономическую модель разработки ПО.
    Сложность здесь одна - профессионалы в этой теме и их свободное время чаще всего уже выкуплены корпорациями (вертикальными ли, матричными - без разницы), и как из этих "лап" забирать себе людей, не очень понятно. Поэтому, Мюнхаузен, Ваш выход! :) Нужны также системные управленцы, которые умеют рулить эффективно коллективами, и дальше не столько сами рулить, сколько понимать и участвовать в создании полуавтономно работающих механизмов управления, со всеми их известными циклами, с матрицами приоритетов и блок-схемами (все это очень неплохо формализуется и автоматизируется) Вам интересен Idea Management, давайте сначала соберем "субъектов" под одну крышу, которых можно будет манагерить (они кстати сами должны будут ещё на это согласиться и оценить, мне хочется, чтобы той же внутренней криптой )

    Очень логчино может показаться, что внутренняя крипта - это какой то лишний элемент. Наоборот, мне кажется - очень важный элемент. Уберите у государства свою валюту, государство сильно потеряет в своих возможностях. Группа (которую предлагаю создать здесь) - это будет аналог во многом государства, с более прозрачными правилами, с более эффективной экономикой, с более эффективным механизмом распределения получаемой прибыли между участниками, при успешном развитии - с альтернативными и часто более целевыми и эффективными социальными механизмами.
    Ответить Цитировать
    0
  • Когда сказали слово "Своя крипта" и не хотим, чтобы это было лишь очередным "пуком", как минимум надо переходить к обсуждению экономической модели и технической реализации.
    И это - очень сложная тема (неожиданно, да)
    "Общий Дизайн" изначально принятый будет дальше достаточно жестко определять развитие (пример тот же Ethereum), и в итоге может стать легко причиной упадка и забвения, или - наоборот.
    Ответить Цитировать
    0
  • Мюнхаузен, вот Вы на голосе в ряду полезных ссылок привели такую - http://weare.ee/ru/

    А Вы имеете какое то отношение к этому детскому (если не откровенно скам-проекту)? Я такое определение здесь привел слегка в провакационных целях, но только слегка.

    Другая моя цель такого определения - озвучить читателям своё мнение по такого рода ICO-проектам. Оно примерно такое -
    И если я по своей дремучести не понимаю, что именно такое сегодня собирает или вполне может собрать миллионы на pre-ICO, то готов подискутировать.

    Но то, что предлагаю людям здесь я, вокруг чего предлагаю "собраться коллективно" совсем не должно будет сопровождаться чем то типа такого (цитата с того сайта)

    Цитата
    Сингапур, Сентоса
    blockshowasia.com

    Отдельная лаунж-зона с уютным залом для переговоров, общения и питча проектов. С 18:30 до конца afterparty. Уникальная возможность для организации самого комфортного нетворкинга во время главного события года.


    совсем не ICO-проект я здесь предлагаю. Вернее не так, может ядро которое соберется вокруг этой темы здесь (или часть ядра) посчитает, что для реализации нужен будет именно этот ICO - тогда надо будет или принять аргументацию или отделиться от части, но пока - это неактуально.
    Ответить Цитировать
    0
  • Так я ткнул на одну из ссылок - вот они и оказались. Здесь (в другом своем более теоретическом дневнике) я ещё чуть эмоций расплескал по их поводу.

    А если без эмоций. Никаких технических деталей - нет. Какие то в роадмапе территориальные офисы запланированы, ну конечно же в наш онлайн-век - основная тема ICO экокриптосистемы - это офисы. Ещё один признак - на ютубе 3 ролика по ним за 1.5 года!!! В выступлении главного - одни ключевые слова по теме и умное выражение лица - вообще никакой конкретики. Ещё важный признак - ролик выступления на митапе заканчивается сразу после доклада докладчика - верный признак. То есть нет в ролике вопросов и ответов из студии - очень верный признак. Все реальные дельные проекты с удовольствием показывают как они отвечают на вопросы, и соответственно - наоборот.

    Но... что особо вызывает у меня сейчас "разброс и шатание" в мыслях. Парни понаблатыкались за эти полтора года, усвоили основы Бизнеса вокруг этой темы, вроде один из основателей работал в газпроме и наверное каких то знакомых убедили чуть их проспонсировать-проинвестировать. И это сегодня позволяет "эффективно" вливаться в тему и становиться гуру ICO и Крипты, летать по митапам в Сингапурах и в этом же роде.
    Ответить Цитировать
    0
  • Цитата (Мюнхаузен @ 13.5.2018)
    Языки программирование -это всего лишь инструмент реализации задачи, который, конечно, можно применить неумело, но в основе лежат не сами языки, а нужный потребителю конечный результат и грамотная постановка задачи. Языкам программирования есть масса мест , где можно поучиться и вряд ли востребованные программисты будут тратить время на такую миссию. Тем более, что уметь и учить это обычно разные компетенции.


    К вопросу о программировании. Откровение-инсайт здесь читающим про крипту.

    1. Рынок крипты и смежных тем растет и ему пророчат триллионный в баксах (сегодняшних... ) размер.
    2. Это означает, что денег в рынок будет вбухиваться просто ужас сколько, очень немалый процент этих денег пойдет все таки программистам и прочим уважаемым мною "компьютерщикам". (Мне хотелось бы чтобы по мере развития этого рынка, этот процент рос и стремился к 100%, но это моё субъективное желание, даже если это будет 30%, а остальные 70% будут забирать говорящие-разводящие головы - это все равно в абсолютном выражении будет очень много)
    3. "Программистов" НЕ ХВАТАЕТ и ЕЩЁ БОЛЬШЕ БУДЕТ НЕ ХВАТАТЬ, что будет выливаться в маразматические вещи типа, что даже джунам (начинающим) будут платиться деньги, которые никогда на другой работе (работе, а не в бизнесе, но там и риски другие) новичок в профессии не будет получать.
    4. Рост от джуна к среднему программисту (сегодня в Москве это в районе 150 тыр.) до сеньеров (в Москве 200-300р. в месяц... география кстати всё меньше будет иметь значение) будет зависеть только от человека и реализовать его можно будет очень быстро. ЭТО НИША в которой нет конкуренции сегодня и завтра и послезавтра. Это - не покер, где да, с годами и опытом скил прокачивается, но ты с другими акулами делишь один и тот же пирог, далее пирожок, далее пирожочек.

    5. Отсюда мораль - умеешь считать до 100, умеешь таблицу умножения в уме - и хочешь стабильно хорошо зарабатывать - иди и учись программированию.
    6. Мораль два - увеличится спрос на учителей (тренеров, менторов), а также на руководителей проектов или тимлидов умеющих хорошо употреблять джунов.

    Именно желающих (ещё не умеющих) такое делать, я приглашаю к общению и к группировке :) Торговля и баунти - это интересно, прикольно - НО НЕ СТАБИЛЬНО И НЕ ГАРАНТИРОВАННО (хотя конечно на растущем рынке вроде обещает прибыль участникам... но там очень много нюансов, эта прибыль не будет равномерно распределена среди участников - это точно )
    Ответить Цитировать
    0
  • Цитата (rehabilitator @ 16.5.2018)
    6. Мораль два - увеличится спрос на учителей (тренеров, менторов), а также на руководителей проектов или тимлидов умеющих хорошо употреблять джунов.


    Я вот хочу себе "ментора" найти по Расту.
    В Сети нашел, для иллюстрации - https://sites.google.com/view/study-rust/home

    Ничего не имею против конкретного человека. Но ценник 3000 руб. в час - не в откатной-обнальной теме (когда бизнес оплачивает якобы за консультации консультантам-ИП-кам на 6% миллионные свои прибыли) - а в практическоинтересной заказчику области - это свидетельство очень неплохого спроса, кмк.
    Ответить Цитировать
    0
  • - Бросай курить, вставай на лыжи -

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

    Хорошо, согласились. Но ведь надо же ещё чтобы было интересно!!!!
    Да. И это интересно!!!!
    Итак, я предлагаю пилить свою групповую крипту на языке программирования Rust. И предлагаю здесь желающим стать программистами окунуться в процесс познания и убедиться что это интересно. Благо те кто создал Rust - прикольные ребята (их комьюнити очень нежное к новичкам, яко бы) - да ВЫ сейчас сами убедитесь.

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

    Начинаем изучать Rust сразу же с серьезной философской задачи!

    Обедающие философы

    Для нашего второго проекта мы выбрали классическую задачу с параллелизмом. Она называется «Обедающие философы». Задача была сформулирована в 1965 году Эдсгером Дейкстрой, но мы будем использовать версию задачи, адаптированную в 1985 году Ричардом Хоаром.

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

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

    Философ берет вилку в свою левую руку.
    Затем берет вилку в свою правую руку.
    Ест.
    Кладёт вилки на место.

    Теперь представим это как последовательность действий философов:

    Философ 1 начинает выполнять алгоритм, берет вилку в левую руку.
    Философ 2 начинает выполнять алгоритм, берет вилку в левую руку.
    Философ 3 начинает выполнять алгоритм, берет вилку в левую руку.
    Философ 4 начинает выполнять алгоритм, берет вилку в левую руку.
    Философ 5 начинает выполнять алгоритм, берет вилку в левую руку.
    ...? Все вилки заняты и никто не может начать есть! Безвыходное состояние.

    Есть различные пути решения этой задачи. Мы в этом руководстве покажем своё решение. Сначала давайте создадим проект с помощью cargo:

    $ cd ~/projects
    $ cargo new dining_philosophers --bin
    $ cd dining_philosophers

    Теперь мы можем начать моделирование задачи. Начнём с философов в src/main.rs:

    struct Philosopher {
    name: String,
    }

    impl Philosopher {
    fn new(name: &str) -> Philosopher {
    Philosopher {
    name: name.to_string(),
    }
    }
    }

    fn main() {
    let p1 = Philosopher::new("Джудит Батлер");
    let p2 = Philosopher::new("Рая Дунаевская");
    let p3 = Philosopher::new("Зарубина Наталья");
    let p4 = Philosopher::new("Эмма Гольдман");
    let p5 = Philosopher::new("Анна Шмидт");
    }
    Run

    Здесь мы создаём struct, представляющую философа. На данный момент нам нужно всего лишь имя. Мы выбрали тип String, а не &str для хранения имени. Обычно проще работать с типом, владеющим данными, чем с типом, использующим ссылки.

    Продолжим:

    impl Philosopher {
    fn new(name: &str) -> Philosopher {
    Philosopher {
    name: name.to_string(),
    }
    }
    }
    Run

    Этот блок impl позволяет объявить что-либо для структуры Philosopher. В нашем случае мы объявляем «статическую функцию» new. Первая строка этой функции выглядит так:

    fn new(name: &str) -> Philosopher {
    Run

    Она принимает один аргумент, name, типа &str. Это ссылка на другую строку. Она возвращает новый экземпляр нашей структуры Philosopher.

    Philosopher {
    name: name.to_string(),
    }
    Run

    Этот код создаёт новый экземпляр Philosopher и присваивает его полю name значение переданного аргумента name. Но используется не сам аргумент, а результат вызова его метода .to_string(). Этот вызов создаёт копию строки, на которую указывает наш &str, и возвращает новый экземпляр String, который и будет присвоен полю name структуры Philosopher.

    Почему бы сразу не передавать строку типа String напрямую? Так легче её вызывать. Если бы мы принимали тип String, а тот, кто вызывает функцию, имел бы ссылку на строку, &str, то ему пришлось бы приводить её к типу String перед каждым вызовом. Это уменьшит гибкость кода, и мы будем вынуждены каждый раз создавать копию строки. Для этой небольшой программы это не очень важно, так как мы знаем, что будем использовать только короткие строки.

    И последнее на что следует обратить внимание: мы просто объявляем структуру Philosopher и кажется, что ничего больше не делаем. Rust — это язык программирования, «ориентированный на выражения», что означает, что каждое выражение возвращает значение. Это верно и для функций, у которых автоматически возвращается последнее выражение. Так как в нашем примере в последнем выражении функции мы создаём структуру Philosopher, то она и будет возвращена функцией.

    Имя функции new() не регламентируется Rust. Это просто соглашение об именовании функций, которые возвращают новые экземпляры структур. Давайте снова посмотрим на функцию main():

    fn main() {
    let p1 = Philosopher::new("Джудит Батлер");
    let p2 = Philosopher::new("Рая Дунаевская");
    let p3 = Philosopher::new("Зарубина Наталья");
    let p4 = Philosopher::new("Эмма Гольдман");
    let p5 = Philosopher::new("Анна Шмидт");
    }
    Run

    Здесь мы связываем пять имён переменных с пятью новыми философами. Если бы мы не объявили свою реализацию функции new(), то наш код выглядел бы так:

    fn main() {
    let p1 = Philosopher { name: "Джудит Батлер".to_string() };
    let p2 = Philosopher { name: "Рая Дунаевская".to_string() };
    let p3 = Philosopher { name: "Зарубина Наталья".to_string() };
    let p4 = Philosopher { name: "Эмма Гольдман".to_string() };
    let p5 = Philosopher { name: "Анна Шмидт".to_string() };
    }
    Run

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

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

    struct Philosopher {
    name: String,
    }

    impl Philosopher {
    fn new(name: &str) -> Philosopher {
    Philosopher {
    name: name.to_string(),
    }
    }

    fn eat(&self) {
    println!("{} закончила есть.", self.name);
    }
    }

    fn main() {
    let philosophers = vec![
    Philosopher::new("Джудит Батлер"),
    Philosopher::new("Рая Дунаевская"),
    Philosopher::new("Зарубина Наталья"),
    Philosopher::new("Эмма Гольдман"),
    Philosopher::new("Анна Шмидт"),
    ];

    for p in &philosophers {
    p.eat();
    }
    }
    Run

    Давайте сначала рассмотрим функцию main(). Вместо того чтобы создавать пять отдельных связанных имён для философов, мы создаём для них Vec<T>. Vec<T> называют «вектор», он является расширяемой версией массива. Затем в цикле for мы перебираем вектор, получая ссылку на очередного философа на каждой итерации.

    В теле цикла мы вызываем метод p.eat(), который объявлен выше:

    fn eat(&self) {
    println!("{} закончила есть.", self.name);
    }
    Run

    В Rust методы явно получают параметр self. Вот почему eat() является методом, а new — статической функцией: new() не получает параметр self. Для нашей первой версии метода eat() мы выводим только имя философа и сообщение о том, что он закончил есть. Запустив эту программу вы получите:

    Джудит Батлер закончила есть.
    Рая Дунаевская закончила есть.
    Зарубина Наталья закончила есть.
    Эмма Гольдман закончила есть.
    Анна Шмидт закончила есть.

    Это было не сложно! Осталось чуть-чуть и приступим к самой задаче.

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

    use std::thread;
    use std::time::Duration;

    struct Philosopher {
    name: String,
    }

    impl Philosopher {
    fn new(name: &str) -> Philosopher {
    Philosopher {
    name: name.to_string(),
    }
    }

    fn eat(&self) {
    println!("{} начала есть.", self.name);

    thread::sleep(Duration::from_millis(1000));

    println!("{} закончила есть.", self.name);
    }
    }

    fn main() {
    let philosophers = vec![
    Philosopher::new("Джудит Батлер"),
    Philosopher::new("Рая Дунаевская"),
    Philosopher::new("Зарубина Наталья"),
    Philosopher::new("Эмма Гольдман"),
    Philosopher::new("Анна Шмидт"),
    ];

    for p in &philosophers {
    p.eat();
    }
    }
    Run

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

    use std::thread;
    Run

    Конструкция use предоставляет доступ к области видимости модуля thread из стандартной библиотеки. Мы собираемся использовать этот модуль далее в коде, и поэтому нам нужно объявить о его использовании.

    fn eat(&self) {
    println!("{} начала есть.", self.name);

    thread::sleep(Duration::from_millis(1000));

    println!("{} закончила есть.", self.name);
    }
    Run

    Здесь мы выводим на экран два сообщения и вызываем функцию sleep между ними. Эта функция останавливает рабочий поток на 1000 миллисекунд, что симулирует процесс приёма пищи философа.

    Если вы запустите программу теперь, то увидите, что каждый философ, по очереди, начинает есть, ест какое-то время и заканчивает есть:

    Джудит Батлер начала есть.
    Джудит Батлер закончила есть.
    Рая Дунаевская начала есть.
    Рая Дунаевская закончила есть.
    Зарубина Наталья начала есть.
    Зарубина Наталья закончила есть.
    Эмма Гольдман начала есть.
    Эмма Гольдман закончила есть.
    Анна Шмидт начала есть.
    Анна Шмидт закончила есть.

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

    Для того, чтобы наши философы начали есть одновременно, нам нужно внести некоторые изменения в код:

    use std::thread;
    use std::time::Duration;

    struct Philosopher {
    name: String,
    }

    impl Philosopher {
    fn new(name: &str) -> Philosopher {
    Philosopher {
    name: name.to_string(),
    }
    }

    fn eat(&self) {
    println!("{} начала есть.", self.name);

    thread::sleep(Duration::from_millis(1000));

    println!("{} закончила есть.", self.name);
    }
    }

    fn main() {
    let philosophers = vec![
    Philosopher::new("Джудит Батлер"),
    Philosopher::new("Рая Дунаевская"),
    Philosopher::new("Зарубина Наталья"),
    Philosopher::new("Эмма Гольдман"),
    Philosopher::new("Анна Шмидт"),
    ];

    let handles: Vec<_> = philosophers.into_iter().map(|p| {
    thread::spawn(move || {
    p.eat();
    })
    }).collect();

    for h in handles {
    h.join().unwrap();
    }
    }
    Run

    Мы добавили ещё один цикл в функцию main(). Теперь она выглядит так:

    let handles: Vec<_> = philosophers.into_iter().map(|p| {
    thread::spawn(move || {
    p.eat();
    })
    }).collect();
    Run

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

    let handles: Vec<_> =
    Run

    Объявляем новое связанное имя handles. Мы задали такое имя, потому что собираемся создать несколько потоков, в результате чего получим для них дескрипторы, с помощью которых сможем контролировать их выполнение. Здесь нам нужно явно указать тип, а зачем это необходимо, мы расскажем чуть позже. _ - это заполнитель типа. Мы говорим компилятору «handles — это вектор, содержащий элементы, тип которых Rust должен вывести самостоятельно».

    philosophers.into_iter().map(|p| {
    Run

    Мы берём наш список философов и вызываем метод into_iter(). Этот метод создаёт итератор, который при каждой итерации забирает право владения на соответствующий элемент. Это нужно для передачи элемента вектора в поток. Мы берём этот итератор и вызываем метод map, который принимает замыкание в качестве аргумента и вызывает это замыкание для каждого из элементов итератора.

    thread::spawn(move || {
    p.eat();
    })
    Run

    Вот здесь происходит сам параллелизм. Функция thread::spawn принимает в качестве аргумента замыкание и исполняет это замыкание в новом потоке. Это замыкание дополнительно нуждается в указании ключевого слова move, которое сообщает, что это замыкание получает владение переменными, которые оно захватывает. В данном случае — переменной p функции map.

    Внутри потока мы всего лишь вызываем метод eat() переменной p. Также обратите внимание, что вызов thread::spawn не оканчивается точкой с запятой, что превращает его в выражение. Этот нюанс важен, так как возвращается правильное значение. Для получения более подробной информации, прочитайте главу Выражения и операторы.

    }).collect();
    Run

    По завершении мы получаем результат вызова map и собираем полученный результат в коллекцию с помощью метода collect(). Метод collect() создаёт коллекцию какого-то типа, и для того, чтобы Rust понял, коллекцию какого типа мы хотим получить, мы указали для handle тип принимаемого значения Vec<T>. Элементами коллекции будут возвращаемые из методов thread::spawn значения, которые являются дескрипторами этих потоков. Вот так!

    for h in handles {
    h.join().unwrap();
    }
    Run

    В конце функции main() мы в цикле перебираем каждый дескриптор и вызываем для него метод join(), который блокирует дальнейшее исполнение основного потока, пока не завершится дочерний поток. Это позволяет нам быть уверенными, что потоки завершат работу до того как произойдёт выход из программы.

    Если вы запустите эту программу, то вы увидите, что философы едят не дожидаясь своей очереди! У нас многопоточность!

    Джудит Батлер начала есть.
    Рая Дунаевская начала есть.
    Зарубина Наталья начала есть.
    Эмма Гольдман начала есть.
    Анна Шмидт начала есть.
    Джудит Батлер закончила есть.
    Рая Дунаевская закончила есть.
    Зарубина Наталья закончила есть.
    Эмма Гольдман закончила есть.
    Анна Шмидт закончила есть.

    Но как же быть с вилками? Их мы пока ещё не смоделировали.

    Давайте же начнём. Сначала сделаем новую структуру:

    use std::sync::Mutex;

    struct Table {
    forks: Vec<Mutex<()>>,
    }
    Run

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

    Давайте изменим программу, используя структуру Table:

    use std::thread;
    use std::time::Duration;
    use std::sync::{Mutex, Arc};

    struct Philosopher {
    name: String,
    left: usize,
    right: usize,
    }

    impl Philosopher {
    fn new(name: &str, left: usize, right: usize) -> Philosopher {
    Philosopher {
    name: name.to_string(),
    left: left,
    right: right,
    }
    }

    fn eat(&self, table: &Table) {
    let _left = table.forks[self.left].lock().unwrap();
    thread::sleep(Duration::from_millis(150));
    let _right = table.forks[self.right].lock().unwrap();

    println!("{} начала есть.", self.name);

    thread::sleep(Duration::from_millis(1000));

    println!("{} закончила есть.", self.name);
    }
    }

    struct Table {
    forks: Vec<Mutex<()>>,
    }

    fn main() {
    let table = Arc::new(Table { forks: vec![
    Mutex::new(()),
    Mutex::new(()),
    Mutex::new(()),
    Mutex::new(()),
    Mutex::new(()),
    ]});

    let philosophers = vec![
    Philosopher::new("Джудит Батлер", 0, 1),
    Philosopher::new("Рая Дунаевская", 1, 2),
    Philosopher::new("Зарубина Наталья", 2, 3),
    Philosopher::new("Эмма Гольдман", 3, 4),
    Philosopher::new("Анна Шмидт", 0, 4),
    ];

    let handles: Vec<_> = philosophers.into_iter().map(|p| {
    let table = table.clone();

    thread::spawn(move || {
    p.eat(&table);
    })
    }).collect();

    for h in handles {
    h.join().unwrap();
    }
    }
    Run

    Много изменений! Однако, с этими изменениями мы получили корректно работающую программу. Приступим к рассмотрению:

    use std::sync::{Mutex, Arc};
    Run

    Нам далее понадобится структура Arc<T> из модуля стандартной библиотеки std::sync. Мы поговорим о ней чуть позже.

    struct Philosopher {
    name: String,
    left: usize,
    right: usize,
    }
    Run

    Нам понадобилось добавить ещё два поля в нашу структуру Philosopher. Каждый философ должен иметь две вилки: одну — для левой руки, другую — для правой руки. Мы используем тип usize для идентификации каждой вилки. Мы используем его при создании философа, передавая идентификаторы двух вилок. Эти два значения будут использоваться полем forks структуры Table.

    fn new(name: &str, left: usize, right: usize) -> Philosopher {
    Philosopher {
    name: name.to_string(),
    left: left,
    right: right,
    }
    }
    Run

    Мы используем функцию new() для задания значений left и right.

    fn eat(&self, table: &Table) {
    let _left = table.forks[self.left].lock().unwrap();
    thread::sleep(Duration::from_millis(150));
    let _right = table.forks[self.right].lock().unwrap();

    println!("{} начала есть.", self.name);

    thread::sleep(Duration::from_millis(1000));

    println!("{} закончила есть.", self.name);
    }
    Run

    Здесь появились три новые строки. Мы добавили один аргумент, table. Мы получаем доступ к списку вилок через структуру Table. Затем используем идентификаторы вилок self.left и self.right для получения доступа к вилке по определённому индексу. В результате чего мы получаем Mutex, который регулирует доступ к вилке, и вызываем для него метод lock(), блокируя доступ к вилке. Если в настоящее время доступ к вилке уже предоставлен кому-то ещё, то мы будем блокированы, пока вилка не станет доступной. Мы также вызываем thread::sleep между взятием первой и второй вилки, поскольку этот процесс не моментален.

    Вызов метода lock() может потерпеть неудачу, и если это случается, то мы аварийно завершаем работу программы. Может возникнуть ситуация, когда поток аварийно завершит свою работу, а мьютекс при этом останется заблокированным. Такой мьютекс называется «отравленным (poisoned)». Но в нашем случае это не может произойти, потому как мы просто используем метод unwrap().

    Результаты выполнения этих двух строк имеют имена _left и _right соответственно. Зачем мы используем знаки подчёркивания в начале имён? Это для того, чтобы сказать компилятору, что мы хотим получить значения, которые далее не планируем использовать. Таким образом Rust не будет выводить предупреждение о неиспользуемых именах.

    Когда же мьютекс будет освобождён? Это произойдёт автоматически, когда _left и _right выйдут из области видимости, то есть по окончании работы функции.

    let table = Arc::new(Table { forks: vec![
    Mutex::new(()),
    Mutex::new(()),
    Mutex::new(()),
    Mutex::new(()),
    Mutex::new(()),
    ]});
    Run

    Далее в main() мы создаём новый экземпляр структуры Table и оборачиваем его в Arc<T>. Это «атомарный счётчик ссылок» (atomic reference count). Он нужен для обеспечения доступа к нашей структуре Table из нескольких потоков. Когда он передаётся в новый поток, то счётчик увеличивается, а когда этот поток завершает работу, то счётчик уменьшается.

    let philosophers = vec![
    Philosopher::new("Джудит Батлер", 0, 1),
    Philosopher::new("Рая Дунаевская", 1, 2),
    Philosopher::new("Зарубина Наталья", 2, 3),
    Philosopher::new("Эмма Гольдман", 3, 4),
    Philosopher::new("Анна Шмидт", 0, 4),
    ];
    Run

    Мы добавили наши значения left и right при создании структуры Philosopher. Здесь есть очень важная деталь, на которую следует обратить внимание. Посмотрите на последнюю строку создания Philosopher. Конструктор Анны Шмидт должен был бы принимать в качестве аргументов значения 4 и 0, но вместо этого он принимает значения 0 и 4. Это помешает нашей программе попасть в безвыходное состояние, если каждый возьмёт по одной вилке одновременно. Так что давайте представим, что один из философов у нас левша! Это один из способов решить данную проблему, и, на мой взгляд, самый простой. Если вы поменяете порядок параметров, то программа попадёт в безвыходное состояние.

    let handles: Vec<_> = philosophers.into_iter().map(|p| {
    let table = table.clone();

    thread::spawn(move || {
    p.eat(&table);
    })
    }).collect();
    Run

    Внутри нашего цикла map()/collect() мы вызываем метод table.clone(). Метод clone() структуры Arc<T> клонирует значение и инкрементирует счётчик, который автоматически декрементируется, когда клонированное значение покинет область видимости. Это необходимо для того, чтобы мы знали, как много ссылок на table существуют в рамках наших потоков на данный момент времени. Если бы у нас не было подсчёта ссылок, то мы бы не знали, как и когда освободить хранимое значение.

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

    Теперь наша программа работает! Только два философа могут обедать одновременно. После запуска программы вы можете получить такой результат.

    Рая Дунаевская начала есть.
    Эмма Гольдман начала есть.
    Эмма Гольдман закончила есть.
    Рая Дунаевская закончила есть.
    Джудит Батлер начала есть.
    Зарубина Наталья начала есть.
    Джудит Батлер закончила есть.
    Анна Шмидт начала есть.
    Зарубина Наталья закончила есть.
    Анна Шмидт закончила есть.

    Поздравляем! Вы реализовали классическую задачу параллелизма на языке Rust.
    Ответить Цитировать
    0
1 2 3 4
1 человек читает эту тему (1 гость):
Зачем регистрироваться на GipsyTeam?
  • Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
  • Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
  • Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
  • На каждой странице будет видно, где появились новые посты и комментарии.
  • Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.