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

Последний пост:18.05.2019
7
1 2 3 4 5 6
  • Забавно.
    1. Я не утверждал, что Ваша работа не творческая:) всего лишь предположил на основании того, как вы описывали процесс "копи-паста в эксель"...
    Кроме того, раз хотелось бы "другого направления", то уже работа вынужденная, а не любимая:) (см. цитату об "офисном планктоне" и как используется потенциал работников и "замкнутый круг")
    2. Когда Вы говорите о неких менеджерах в разных функциональных областях, работающих на бизнесмена в рамках существующих правил ведения бизнеса, то в Ваших словах ощущается раздражение, однако это вопрос не к этим людям, если они работают "по целям" и работают эффективно. Что же касается их навыков, которые позволяют достигать поставленных бизнесменов целям, то они могут базироваться на базе опыта (умение его извлекать) или умения творчески находить необычные варианты...есть художники новаторы, есть ремесленники, но очень хорошие - кто из них занимается творчеством?
    3. "Общественная полезность" это не лозунг из... это возможность создания того самого вэлью. Потому что, если вы хотите тупо заработать и "играть в долгую", а не разово "обуть ближнего", то Ваш продукт должен быть востребован, полезен большому количеству потенциальных потребителей, т.е. быть "общественно полезным" (мы сейчас не берём развлечения (хотя и тут есть общественная полезность) и криминальные продукты);
    4.Активных людей мотивируют возможности и если их нет они сами пытаются их создавать. Но активисты , имеющие талант создавать новые рынки и навязывать новый спрос, единичны. Остальным нужна база для проявления их активностей. Про "пассивных и непризнанных гениев" никто и не говорит -они будут продолжать упиваться (в прямом и переносном смыслах) своей невостребованностью.
    5. Фактически, мы уже который раз говорим об одном и том же, но слегка под разным углом и не можем услышать друг друга. А теперь представьте сообщество в, скажем 100 экспертов (а если больше), повёрнутых на своей гениальности и слышащих только себя:) Вот тут и нужны механизмы Менеджмента Идей и не факт, что существующие справятся с такой "творческой массой" - а ведь их ещё нужно привлечь...
    6. У меня нет возражений использовать мой Блог на Голосе, вот только у меня большой скепсис относительно самой этой платформы и активности на ней. В основном идёт имитация и набивание комментов ботами. Живых и активных людей там я не увидел пока. Можно судить по соотношению количества просмотров и комментариев, особенно, качества комментариев по сути написанного.

    Можно в приват написать мне Ваше имя, а то как-то неловко общаться с анонимом:)
    6/20
    Ответить Цитировать
    1
  • "А если так" - https://forum.gipsyteam.ru/index.php?viewtopic=123805&st=80#entry4960693.
    "А если так" - https://forum.gipsyteam.ru/index.php?viewtopic=62328&st=1600#entry5385124.
    "А если так" - Intel ME.
    "А впрочем, так тоже не годится" - гроссмейстер О. Бендер . (~по фильму)
    1/3
    Ответить Цитировать
    0
  • Цитата (Мюнхаузен @ 12.5.2018)
    2. Когда Вы говорите о неких менеджерах в разных функциональных областях, работающих на бизнесмена в рамках существующих правил ведения бизнеса, то в Ваших словах ощущается раздражение, однако это вопрос не к этим людям, если они работают "по целям" и работают эффективно.


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

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


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

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

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


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

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


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

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


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

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

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

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

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

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

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

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

    Вот я смотрю на форумы, почитываю и вижу, что в основной части народ поигрывает в покер, приторговывает по-чуть-чуть криптой, наверняка всё это делает в свободное от основной работы время. Как Вы тут найдёте единомышленников, да ещё и без инвестиций? Ведь что бы создать что-то нужно вложиться, либо деньгами, либо временем, если Ваши компетенции тут помогут...
    7/20
    Ответить Цитировать
    2
  • Мюнхаузен, вот Вы на голосе в ряду полезных ссылок привели такую - http://weare.ee/ru/

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

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

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

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

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


    совсем не ICO-проект я здесь предлагаю. Вернее не так, может ядро которое соберется вокруг этой темы здесь (или часть ядра) посчитает, что для реализации нужен будет именно этот ICO - тогда надо будет или принять аргументацию или отделиться от части, но пока - это неактуально.
    16/66
    Ответить Цитировать
    0
  • Я не имею отношения к weare, хотя общался с его основателем. А почему Вам этот проект кажется "детским" или Скамом -интересно? И почему именно он, а на wings Вы такое внимание не обратили?
    8/20
    Ответить Цитировать
    1
  • Так я ткнул на одну из ссылок - вот они и оказались. Здесь (в другом своем более теоретическом дневнике) я ещё чуть эмоций расплескал по их поводу.

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

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


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

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

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

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


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

    Ничего не имею против конкретного человека. Но ценник 3000 руб. в час - не в откатной-обнальной теме (когда бизнес оплачивает якобы за консультации консультантам-ИП-кам на 6% миллионные свои прибыли) - а в практическоинтересной заказчику области - это свидетельство очень неплохого спроса, кмк.
    19/66
    Ответить Цитировать
    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.
    20/66
    Ответить Цитировать
    0
  • Цитата (Мюнхаузен @ 15.5.2018)
    Я не имею отношения к weare, хотя общался с его основателем. А почему Вам этот проект кажется "детским" или Скамом -интересно? И почему именно он, а на wings Вы такое внимание не обратили?


    Думаю, ТС погорячился :) Я был на канале телеграмма, где основатель weare периодически что-то говорит. Впечатление : здравый вполне и компетентный, в теме точно. А кроме того, их проект партнер вот этого https://forum.gipsyteam.ru/index.php?viewtopic=131153&pid=5619724&st=0#entry5619724 - который на форуме джипси был обсуждаем немного. Очень интересный проект, но почему то перестал его представитель в том топике постить, хотя в других участвует.
    2/15
    Ответить Цитировать
    0
  • Цитата (rehabilitator @ 19.5.2018)
    Начинаем изучать Rust сразу же с серьезной философской задачи!


    Может где-то в более удобных местах коллективно программирование изучать?
    3/15
    Ответить Цитировать
    1
  • Цитата (tester37 @ 20.5.2018)
    Думаю, ТС погорячился :)


    Может быть, время покажет.

    Цитата
    Может где-то в более удобных местах коллективно программирование изучать?


    Я надеюсь здесь удочку позакидовать, найти желающих стать программистами. И таким образом получить часть ядра, которым достанется первая эмиссия своей крипты! А потом будем этой крипте прикручивать реальную стоимость. Где ещё более подходящих и умных людей искать под такое, как не здесь ?
    21/66
    Ответить Цитировать
    0
  • Кажется "с ног на голову":)))
    Программирование инструмент. Где постановка задачи?
    9/20
    Ответить Цитировать
    1
  • Задача - предложить "лишним" людям с интеллектом вариант кардинального улучшения своих "реалий и перспектив", обеспечив эффективной технологией, включающей обучение и быстрое получение отдачи в виде оплаты сразу по мере получения навыков. С другой стороны получить экономически выгодный (эффективный) механизм продажи - поставки услуг, связанных с программированием.

    Это не тривиально. Надо ещё продумать (конечно хотелось бы коллективно) как этого достичь.

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


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

    Мюнхаузен, Вам нужны будут программисты для реализации эффективных механизмов в Менеджмете Идей?
    Как считаете, в чем сейчас проблема здесь? Нет денег, чтобы купить специалистов? Или нет специалистов, которых можно купить за те деньги, которые есть?
    Сообщение отредактировал rehabilitator - 23.5.2018, 11:55
    22/66
    Ответить Цитировать
    0
  • Я скажу в чём проблема - задача масштабная и требует серьёзных инвестиций не только в создание самой платформы, но и в механизме вовлечения "мозгов", как "лишних", так и экспертных. При этом не очевидно, что таковая потребность уже чётко сформулирована рынком - требуется включение институционального механизма, заинтересованного в обеспечении эффективной занятости этих "лишних" и неудовлетворённых текущей жизненной ситуацией "мозгов". Гораздо проще работать с готовыми проектами и командами, прошедшими уже естественный отбор - консультируй - получай бабки за предоставление своих услуг. С идеями работать гораздо сложнее. Кроме того существует проблема эффективности исполнителя (тех же программистов) - им, как правило, нужна некая "синекура" - чем дольше, тем лучше, если за бабки (и потом рассказы, что сроки поплыли в связи с новыми хотелками заказчика или нечёткостью ТЗ). Тут нужна команда разработчиков (а вернее руководитель такой команды, если один не тянет такой масштаб задачи), загоревшихся идеей - тогда для них сроки и качество продукта будут так же важны, как и для автора идеи))
    10/20
    Ответить Цитировать
    1
  • Что касается игроков в покер -не стоит путать мотивационные составляющие участников.
    Отдых, развлечение, снятие стресса, профессиональный заработок на игре и тд. "Игра в токены" для них такая же зарядка для мозгов, как и покер - быстро, в условиях некой неопределённости, но по достаточно понятным параметрам риска и ограничениям. Обучение же программированию, если вы не программист это профессиональное освоение новой области деятельности, связанное с довольно монотонной составляющей в обучении и не быстрым возвратом инвестиций в потраченное на это занятие время. Кроме того, отсутствует основное - элемент игры (азарт, кураж, риск). Целевая аудитория, хоть явно не глупа, в основной массе, но кажется не достаточно релевантна для заинтересованности в проектах такого уровня...
    11/20
    Ответить Цитировать
    1
  • Цитата (Мюнхаузен @ 23.5.2018)
    . Кроме того существует проблема эффективности исполнителя (тех же программистов) - им, как правило, нужна некая "синекура" - чем дольше, тем лучше, если за бабки (и потом рассказы, что сроки поплыли в связи с новыми хотелками заказчика или нечёткостью ТЗ). Тут нужна команда разработчиков (а вернее руководитель такой команды, если один не тянет такой масштаб задачи), загоревшихся идеей - тогда для них сроки и качество продукта будут так же важны, как и для автора идеи))


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

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

    Программирование - БП наиболее легко и полно поддающийся формализации на очень многих этапах, там на самом деле место творчеству - не так уж и много. Есть проработанные методологии, главное в них не закопаться (все консалтеры тоже как правило хрен с вами будут солью-выжимкой делиться полезного, по двум причинам - невыгодно и сами не знают, так как не практикуют, а продают методологии) за исключением тех практиков, которые озаботились созданием инструментов, в том числе направленных на связь-коммуникацию между заказчиком и исполнителем.
    Могу привести - дать ссылку на одного такого практика - https://www.pavlyut.com/pricing - некий Александр, даже продукт собирался делать, может сделал, но потом его отвлек ICO ураган :)
    23/66
    Ответить Цитировать
    0
1 2 3 4 5 6
1 человек читает эту тему (1 гость):
Зачем регистрироваться на GipsyTeam?
  • Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
  • Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
  • Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
  • На каждой странице будет видно, где появились новые посты и комментарии.
  • Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.