...

суббота, 8 июня 2019 г.

Функциональные интерфейсы… в VBA

"…те, кто не прочь поглазеть на любителя прилюдно свалять дурака, пусть понаблюдают, как я доказываю, что Java и Visual Basic – близнецы, разлученные при рождении, а С++ им даже не дальний родственник."

Брюс Мак-Кинни “Крепкий орешек Visual Basic”

Введение


Постоянный интерес к подходам функционального программирования в настоящее время приводит к тому, что традиционные языки программирования активно обзаводятся функциональными средствами. И, хотя чистые функциональные языки остаются пока не слишком популярными, функциональные возможности прочно обосновались в таких языках, как С++, Java, JavaScript, Python и др. Язык VBA уже многие годы пользуется заслуженной популярностью у довольно многочисленной аудитории пользователей Microsoft Office, однако этот язык практически не содержит функциональных средств.
Давайте попытаемся заполнить этого пробел – предлагаю законченную (хотя, возможно, и не безупречную) реализацию функциональных интерфейсов, выполненную средствами VBA. Реализация может служить основой для последующих доработок и улучшений.

Проблема функциональных аргументов


Первая проблема, с которой мы столкнемся на этом пути – это проблема передачи функциональных аргументов в функцию или метод. Язык VBA не содержит соответствующих средств (оператор AddressOf служит лишь для передачи адресов функциям Windows API и не вполне безопасен в работе). Это же можно сказать и об известной методике вызова функций по указателю (Магдануров Г.И. Visual Basic на практике СпБ.: “БХВ Петербург”, 2008). Давайте не будем рисковать — используем при реализации только стандартные возможности языка и стандартные библиотеки.

К сожалению, здесь нам ООП мало чем поможет. Для передачи функционального объекта в процедуру или функцию язык VBA предлагает стандартную возможность – обернуть нужную функциональность объектной оболочкой (создать объект, одним из методов которого и будет нужная функциональность). Объект можно передать как параметр. Этот подход работоспособен, однако весьма тяжеловесен – для каждой нужной функциональности придется создавать свой класс и объект этого класса.

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

x -> x+1

Подобная нотация задания анонимных функций в настоящее время уже практически стала “стандартом де факто”. Единственная возможность передать такую функцию параметром состоит в использовании строкового представления:
r=proc(a,b,”x->x+1”)

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

Чтобы использовать анонимную функцию, заданную подобным образом, ее необходимо сначала привести к стандартному виду функции VBA. Это выполняет следующая служебная процедура:


Private Function prepCode(Code As String) As String
         k% = InStr(Code, "->")
         parms$ = Trim$(Left$(Code, k% - 1))
         body$ = Mid$(Code, k% + 2)
         If Left$(parms$, 1) <> "(" Then parms$ = "(" + parms$ + ")"
         If InStr(body$, "self") = 0 Then body$ = ";self=" & body$ & ";"
         body$ = Replace(body$, ";", vbCrLf)
         prepCode = "function self" & parms & vbCrLf & body & _ 
                             vbCrLf & "end function"
End Function


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

function self(x)
     self=x+1
End function


Очевидно, что в соответствии с синтаксисом VBA, эта функция будет делать именно то, что должна была делать анонимная функция – увеличивает значение своего аргумента на 1. Правда, эта функция – пока не есть функция VBA, а только строка, содержащая указанный код. Для того, чтобы превратить строку в функцию, можно использовать стандартную майкрософтовскую библиотеку “Msscript.ocx”. Эта COM-библиотека позволяет выполнить произвольный код VBA, заданный в строковой форме. Для этого необходимо выполнить следующее:

— Создать объект ScriptControl
— Вызвать метод установки языка (VBScript);
— Вызвать метод загрузки функции;
— Вызвать метод eval для исполнения вызова.

Все это выглядит примерно так:


Set locEv=new ScriptControl
locEv.Language = "VBScript"
locEv.AddCode prepCode(“x->x+1”)
r=lovEv.eval(“self(5)”)


После выполнения данного кода значение переменной r будет равно 6.

Здесь следует сделать три замечания:
— Тело анонимной функции может содержать несколько строк. Отдельные операторы в этом случае завершаются точкой с запятой. Из окончательного кода символы “;” исключаются. Многострочное тело позволяет реализовывать в анонимных функциях весьма продвинутую функциональность;
— То, что анонимная функция “в действительности” имеет имя “self”, дает неожиданный бонус – анонимная функция может быть рекурсивной.
— Поскольку объект ScriptControl поддерживает два языка – VBScript и Jscript, то безымянная функция может быть (теоретически) написана и на Jscript (но в настоящей работе эта возможность не реализована).

Далее будет описана объектная модель реализации.

Объектная модель


Основой модели являются объекты двух видов: Container и Generator. Объект Container является хранилищем массива произвольных размеров, объект Generator, как следует из названия, реализует генератор общего вида.
Оба объекта реализуют интерфейс aIter, который более подробно описывается ниже. Интерфейс включает 19 функций:
Для объекта-генератора ряд методов впрямую не реализован – необходимо сначала отобрать некоторое количество значений в контейнер. При попытке вызвать для генератора нереализованный метод, генерируется ошибка с кодом 666. Далее будет рассмотрено несколько примеров использования описанных интерфейсов.

Примеры


Печать последовательных чисел Фибоначчи:

Sub Test_1() 
Dim fibGen As aIter
    Set fibGen = New Generator
    fibGen.Init Array(1, 0), "(c,p)->c+p"
    For i% = 1 To 50
        Debug.Print fibGen.getNext()
    Next i%
End Sub


Здесь создается генератор с начальными значениями 0 и 1 и генерирующей функцией, соответствующей последовательности Фибоначчи. Далее в цикле печатаются первые 50 чисел.
Мапирование и фильтрация:

Sub Test_2() 
Dim co As aIter
Dim Z As aIter
Dim w As aIter
    Set co = New Container
    co.Init frange(1, 100)
    Set Z = co.map("x -> 1.0/x"). _
                 take(20).filter(" x -> (x>0.3) or (x<=0.1)")
    iii% = 1
    Do While Z.hasNext()
       Debug.Print iii%; " "; Z.getNext()
       iii% = iii% + 1
    Loop
End Sub


Создается контейнер и инициализируется числовой последовательностью из диапазона от 1 до 100. Далее числа с помощью map заменяются на обратные. Из них берется двадцать первых. Далее эта совокупность фильтруется и из нее отбираются числа, большие 0.3 или меньшие 0.1. Результат возвращается в контейнере, состав которого распечатывается.
Использование свертки:

Sub Test_4() 
Dim co As aIter
    Set co = New Container
    co.Init frange(1, 100)
    v = co.reduce(0, "(acc,x)->acc+x")
    Debug.Print v
    v = co.reduce(1, "(acc,x)->acc*x")
    Debug.Print v
End Sub


Здесь с помощью свертки считается сумма и произведение чисел от 1 до 100.

Sub Test_5() 
Dim co1 As aIter
Dim co2 As aIter
Dim co3 As aIter
    Set co1 = New Generator
    co1.Init Array(123456789), "x -> INT(x/10)"
    Set co2 = co1.takeWhile(100, "x -> x > 0")
    Set co3 = co2.map("x -> x mod 10")
    Debug.Print co3.maximun
    Debug.Print co3.minimum
    Debug.Print co3.summa
    Debug.Print co3.production
End Sub


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

Выводы


Предлагаемый подход оказывается вполне работоспособным и может быть с успехом применен для решения повседневных задач VBA-программиста в функциональном стиле. Чем мы хуже джавистов?

Скачать примеры можно здесь

Удачи!!!

Let's block ads! (Why?)

Что известно о сертификации ITIL 4

В этом году вышло обновление ITIL 4. Рассказываем, как будет проходить сертификация специалистов в области управления ИТ-услугами по новому стандарту.


/ Unsplash / Helloquence

Как меняется процесс сертификации


Последнее обновление для библиотеки ITIL 3 было представлено восемь лет назад. За это время ИТ-индустрия претерпела значительные изменения и «обросла» новыми технологиями. Многие компании начали внедрять практики управления ИТ (вроде ITSM, основанной на ITIL).

Чтобы адаптировать их к изменившемуся контексту, специалисты из Axelos, отвечающие за разработку методологии ITIL, в начале этого года выпустили обновление — ITIL 4. В нем появились новые области знаний, связанные с повышением удовлетворенности пользователей, потоками создания ценностей и гибкими методологиями вроде Agile, Lean и DevOps.

Вместе с новыми практиками изменились и подходы к аттестации специалистов в сфере управления ИТ-услугами. В ITIL 3 высшим званием в системе ITIL считался ITIL Expert.

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


Каждое из этих направлений включает в себя свой набор экзаменов (требования к ним и программы обучения в Axelos обещали опубликовать ближе к концу 2019 года). Но чтобы получить возможность их сдать, нужно пройти сертификацию базового уровня — ITIL 4 Foundation. Вся необходимая информация по ней была опубликована в начале года.

Что входит в базовый уровень


В феврале Axelos представили книгу «ITIL Foundation. ITIL 4 Edition». Её задача — объяснить ключевые понятия и заложить основу для последующего изучения углубленных программ.

ITIL 4 Foundation покрывает следующие темы:

  • Основные понятия сервис-менеджмента;
  • Цель и компоненты ITIL;
  • Цель и ключевые определения пятнадцати практик ITIL;
  • Подходы к внедрению ITIL;
  • Четыре аспекта управления услугами;
  • Подходы к созданию ценности услуг и их взаимосвязь.

Какие будут вопросы


Экзамен состоит из 40 вопросов. Для успешной сдачи нужно ответить правильно на 26 из них (65%).

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

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

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


/ Unsplash / Bethany Legg

В случае успешного прохождения тестов участник экзамена получает сертификат «ITIL Foundation Certificate in IT Service Management. ITIL 4 Edition». С ним можно переходить к сдаче ITIL Management Professional и ITIL Strategic Leader.

Что еще нужно знать


Специалисты, имеющие сертификацию по ITIL 3, могут пройти всю цепочку экзаменов от Foundation до Management Professional и Strategic Leader, когда Axelos опубликуют все требования.

Альтернативный вариант обновления сертификатов — сдать «корректирующий» экзамен. Он называется ITIL Managing Professional Transition. Но для его сдачи необходимо иметь 17 баллов в ITIL 3. Это количество баллов соответствует уровню для сдачи экзамена на звание ITIL Expert.



Мы продолжим следить за релизами Axelos и будем публиковать информацию о наиболее значимых изменениях и нововведениях ITIL в блоге на Хабре.

Материалы по теме из нашего корпоративного блога:

Let's block ads! (Why?)

Осторожно доктор

Эта ответ на неожиданную статью на Хабре психиатра с тридцати пятилетним стажем Александра Геннадьевича Данилина, также довольно известного youtube влогера. До его статьи на Хабре я не обращал на его творчество внимания, как выяснилось, зря.

Но сначала короткое предисловие.
Для меня психиатрия болезненная и личная история. К сожалению, это очень специфичная область медицины, в которой эзотерика и мракобесие очень успешно сопротивляются научному знанию. Дело в том, что доказательной медицине вообще чуть более тридцати лет. И медицинское сообщество только сейчас с кровавой рвотой исторгает из себя всякую гомеопатию. В психиатрии же ввиду объективных факторов процесс идет тяжелее всего. Эта область все еще является заповедником для шарлатанов, невежд, идиотов и фриков от науки со своими особыми трактовками и истинами, почерпнутыми из “философских размышлений”. Революция в нейронауках, в частности, в психологии и психиатрии происходит прямо сейчас. Увы, не для всех.
К не слишком компетентным, но придерживающимся стандартных программ и методик лечения психиатрам, я отношусь довольно холодно. Тем не менее, они делают то, чему их научили. Как правило, это позволяет им вывести пациента из острого психотического состояния. Ну, а дальше у него по крайней мере будет шанс. Возможно, в будущем разработают лучшие методики, будут лучше лечить. Но вот фрики, выковыривающие свои антинаучные гипотезы из известного места и применяющие их при лечении тяжелых пациентов, вызывают во мне острое нестерпимое желание жечь, жечь, жечь в драконьем пламени. Я слишком хорошо знаю, к чему приводит их невежество. Я был в этом аду, я в нем горел.
А. Данилин, разместивший на Хабре свою статью: «Ответ психиатра на статью «Болен-здоров»», опасный фрик от науки, а его статья фонтанирует бредом. При этом он умудряется давать советы пациенту с очень серьезной патологией.

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

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

Тиреодит — нарушение функций щитовидной железы, действительно может приводить (и часто приводит) к нарушению функций высшей нервной ситемы. Может негативно сказываться на механизмах мышления и памяти. Нарушение связанности мышления может вносить шизотипический паттерн в этот механизм. Но к затяжным энергичным маниям обычно не приводит (т.е в части публикаций я вижу упоминание вроде: “В некоторых случаях отмечаются даже психотические симптомы.”) Психотические симптомы — это не маниакальный психоз. Я нашел всего одну странную статью на пабмеде, связывающую острый маниакал у ОДНОГО пациента со сверх высокими дозировками LT4, которые он получал. Да и то формулировка авторов: “We ultimately ascribed the mania as secondary to LT4, and the heart block to hypothyroidism” меня сильно смущает. Впрочем меня все смущает в этой статье, включая единичного пациента. (http://bit.ly/2IrGx7N)

Наоборот, везде отмечается, что тиреодит приводит к депрессии. По ключевым словам “Thyroiditis depression” пабмед выдает чуть менее двухсот статей. Что, честно говоря, не густо, но среди них два десятка довольно больших исследований на приличных выборках. Также можно найти материал по тем же ключевым словам на рисерчгейте. Больших исследований, подтверждающих категоричное мнение Данилина, я не нашел.

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

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

Во-первых, кто вам сказал, что эндогенные причины это не причины? Конечно же, подобные состояния классифицируют как имеющие объективную причину. Обязательно. Всенепременно. Установлением этих причин занято огромное число научных групп по всему миру.

Другой вопрос, что на сегодняшний день у практикующих психиатров выбор инструмента не велик. Это так или иначе антипсихотики, которые воздействуют на дофаминовую систему, и несколько классов нормотимиков, регулирующих по разным механизмам баланс глутамат/ГАМК. Вроде препаратов лития, антикольвульсантов, антагонистов кальция и (внимание!) тиреодных гормонов для купирования депрессивных состояний (не маниакальных).

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

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

Да, я адепт святого пабмеда и доказательной медицины. Мне не интересны умозаключения на основе “трансцендентного опыта”. Тем более, противоречащие здравому смыслу и общему пониманию работы гормональной системы.

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

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

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

Нет воспалений в мозге? Что? Воспалительный процесс в самом что ни на есть строгом смысле возможен в мозге. Причем во всех видах тканей. Как с участием бактериального агента, так и без. Как такое можно заявить? Такое заявление слишком безграмотно даже для фельдшера!

Далее Данилин все же оговаривается:
Я не ставлю диагнозов без обследования. Опираясь на ваши посты, я только пытаюсь объяснить, что в подобных ситуациях происходит с нервной системой человека. И делаю это только потому, что отечественную психиатрию все эти процессы не интересуют.

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

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

Мне просто нечего сказать: алкоголь — известный “стабилизатор” эмоциональных состояний! Я даже теряюсь, как мне сформулировать поисковый запрос на пабмед.

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

Здесь демагогию, причем малограмотную, демонстрирующую дикое невежество разводит Данилин. БАР — это действительно большая группа патологий маниакального и/или депрессивного характера с самым разным патогенезом (причинами). Все это известно каждому психиатру. При этом БАР лечат теми же препаратами, которые выписывают пациентам с шизофренией, если маниакальный синдром носит четко выраженный ШИЗОТИПИЧЕСКИЙ характер. Ни один компетентный доктор не будет назначать пациенту с БАР антипсихотики, если пациента стабилизируют нормотимики, и шизотипических нарушений мышления не наблюдается. Другой вопрос, если нормотимики не справляются. Тогда бы психиатр был и рад назначить что-то более адресное, но у него только пила и молоток. Не помогают препараты лития или вальпорат — глуши дофамин от безысходности.
Как пример, мой гипоманиакал с наибольшей долей вероятности связан с анандамидной супрессией ГАМК. По ночам я перехожу в крайне возбужденное состояние. Утром я мог бы наверстать сон. Но сейчас я встаю в 6:15 на работу. Моего психиатра беспокоит мой режим, при котором я сплю меньше 3-4 часов в сутки на неделе. Увы, он бы и рад мне назначить что-то из антагонистов CB-1 рецепторов. Но таких препаратов еще нет на рынке. Они только в разработке и когда будут одобрены, не известно. Поэтому он мягко настаивает на приеме кветиапина на ночь. Я мягко отказываюсь, но мотивы его мне ясны. Супрессия дофамина по D2 в моем случае будет иметь слишком высокую цену, при моем ослабленном фокусе внимания. Я решил истощать ЦНС и принять все негативные последствия такого шага, но не трогать дофамин. Тем не менее, будь я лечащим врачом такого пациента, я бы тоже настаивал на приеме мягкого нейролептика при отсутствии альтернатив. Мне немного помогает медитация в технике MindFulness. Впрочем, я еще новичок и не имею большой тренировки и практики медитации. Поэтому пока результат таких упражнений очень скромный.

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

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

Давно ли детскую гиперактивность лечат антипсихотиками. Что я пропустил? Откуда это?
В России для коррекции СДВГ сертифицирована Страттера. Хреновый препарат, воздействующий на норадреналиновую систему, но не имеющий никакого отношения к антипсихотикам.

А на западе при коррекции СДВГ применяют метилфенидат и амфетамин. Давно ли амфетамины показаны шизофреникам? Антипсихотики являются антагонистами D2 рецептов в своей массе. А амфетамин и метилфенидат агонистами. Их действие ДИАМЕТРАЛЬНО противоположно.

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

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

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

Ну что за фрейдовщина/юнговщина? На чем базируется такое утверждение? К тому же, снова все с точностью до наоборот.
Механизмов провоцирующих тревожное состояние известно много. От повышенного содержания анандамида в ГАМКергических нейронах до низкой связанности инсулы и поясной коры, а также дисбаланс гормонов любимой Данилиным щитовидной железы.
Что касается мании величия, то тут всегда главным игроком выступает дофамин по мезолимбическому пути. И при дофаминовой гиперстимуляции все исследования отмечают снижение тревоги.

Рассказать вам, что такое тревожное расстройство? Это когда ты выходишь из дома, забыв взять права и деньги даже на обед, рабочие документы и нужные на день чертежи. Но при этом тщательно проследив, чтобы оба телефона и пауэрбанк были полностью заряжены, потому что каждый миг вслушиваешься в мессенджеры. Каждую секунду ожидая звонка, что твой близкий человек выпрыгнул в окно, пропал, или погиб, пока ты на другом конце земли зарабатываешь деньги, чтобы расплатиться за его лечение у таких вот психиатров. Весь фокус внимания двадцать часов в сутки сосредоточен на смартфоне. Вот сейчас, сейчас тебе позвонят и сообщат, что родители погибли, друзья сгорели, грядет ядерный апокалипсис, и ты умрешь в нем последним, похоронив все, что тебе дорого. Крайне неприятное для психики состояние. Ничего общего с манией величия я и близко не переживал в тот период. Да кстати, риталин, который я стараюсь избегать по причинам, которые так же раскрою в цикле “PsyGuide: Дефицит внимания”, в тот период мне помогал не только сфокусироваться на рабочих задачах, но ослаблял тревожное состояние. Дофаминовая стимуляция D2 рецепторов снижает тревогу. При гиперстимуляции он же способен вызвать манию величия.
Как Данилину удается каждый раз в своих высосанных из пальца гипотезах так точно промахиваться на 180 градусов?

Рассуждения и комментарии доктора про надмозг я пропущу. Я просто не знаю что это такое, где его искать на МРТ.

Можно далее разбирать вот такие перлы:
Все люди, принимающие нейролептики и антидепрессанты, участвуют в затяжном фармакологическом эксперименте, эффективность которого в реальности ничем не доказана…

Или такие:

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

Что там считали до появления доказательной медицины меня интересует мало. Сто лет назад могли считать что гемофилия полностью излечивается кровопусканием.

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

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

Далее Александр Геннадьевич открывает пациенту истину:
Арипризол.
Антипсихотическое средство (нейролептик). Предполагается, что терапевтическое действие арипипразола при шизофрении обусловлено сочетанием частичной агонистической активности в отношении допаминовых D2- и серотониновых 5-HT1а- рецепторов и антагонистической активностью в отношении серотониновых 5-HT2- рецепторов. Арипипразол обладает высокой аффинностью in vitro к допаминовым D2- и D3-рецепторам, серотониновым 5-HT1a- и 5-HT2a-рецепторам…
Непонятно?
Во-первых, становится ясно, что лечат вас от шизофрении.

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

Дальше Александр Данилин применяет запрещенный прием, за использование которого я сразу же готов схватиться за канистру с бензином. Он пугает длинным списком побочных эффектов пациента с маниакальными психозами:
Участвуя в этом эксперименте, вы употребляете препараты, обладающие следующими обязательными действиями (указанными как побочные):…
длинный список

Дело в том, что люди, вынужденные принимать такие медикаменты, и так остро переживают те побочные эффекты, которыми обладают антипсихотические препараты. Главный из которых — общее угнетенное состояние. Часто это служит причиной отказа от препаратов, что резко обостряет психоз и может угрожать жизни пациента. Все мы, кто имел дело с антипсихотиками и нормотимиками, знаем ту высокую цену, которую приходиться платить за то, чтобы оставаться в уме. Те из нас, кто многолетней упорной работой над собой в состоянии слезть с психофармы — истинные счастливчики. Увы, не всем это дано, не всем это позволяет их нейрохимия.

Будьте осторожны. Берегите себя.

Let's block ads! (Why?)

Новая архитектура для побайтного обращения к SSD — как она устроена

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


Фото — Michael Bobella — CC BY-SA

Зачем понадобилась новая архитектура


Твердотельные накопители обладают высокой скоростью чтения/записи. Из-за этого их используют в качестве расширения для оперативной памяти при проведении высокопроизводительных вычислений. Для взаимодействия с «объединенной» памятью SSD и DIMM используют метод управления, называемый виртуальной памятью. Он подразумевает автоматическое перемещение частей программы между оперативной памятью и накопителем, используя подкачку страниц. Однако такой подход имеет ряд недостатков.

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

Второй — если приложение работает со сводом данных, превышающим объем оперативной памяти, возникает так называемая «страничная пробуксовка». Система оказывается в состоянии постоянного свопинга, часто обменивая данные в памяти и данные на диске, в ущерб работе приложения.

Для устранения этих сложностей, группа инженеров из Иллинойсского университета в Урбане-Шампейне (UUIC) и IBM Research предложила новую архитектуру памяти. Она предполагает возможность побайтового обращения к SSD. В теории такой подход сократит издержки на обмен данными. Разработка получила название FlatFlash.

Как она устроена


Для настройки системы инженеры используют стандарт PCIe, в частности, его набор индексных регистров (Base Address Registers, BAR). С их помощью FlatFlash передает хосту данные таблицы распределения памяти, чтобы BIOS и операционная система выполнили необходимую разметку.

После разметки SSD и DRAM объединяются на одном плоском адресном пространстве. Такой подход дал процессору возможность напрямую посылать запросы (загрузить/записать) к твердотельному накопителю с помощью механизма PCIe MMIO. За обработку и перенаправление обращений к этим участкам памяти отвечает главный мост (host bridge).

Что касается отображения данных на соответствующие адресные пространства, то эту задачу реализует непосредственно SSD. Разработчики задействовали блок DRAM, установленный в SSD-контроллере, в качестве кэша. В нем хранится страница, к которой нужно получить побайтный доступ. Побайтные запросы реализуются с помощью одного из регистров BAR.


Мнения


Специалисты UUIC протестировали производительность нового подхода с помощью эмулятора SSD на Linux. Согласно полученным данным (PDF, стр.10), FlatFlash способен повысить производительность приложений с интенсивным потреблением памяти в 2,3 раза. Архитектура улучшает соотношение стоимость/эффективность в 3,8 раза, по сравнению с «чистыми» DRAM-системами.

О технологии положительно отозвались некоторые резиденты Hacker News. Один из пользователей площадки заметил, что новая архитектура позволит операционной системе абстрагироваться от работы с памятью. Отвечать на запросы по чтению и записи будут PCIe-устройства. Еще один плюс — «разгружается» канал между SSD и хостом, так как отпадает необходимость пересылать в память всю страницу целиком. В UUIC говорят, что это продлевает срок службы твердотельных накопителей.


Фото — Gamaliel Espinoza Macedo — CC BY / Фото обрезано

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

Перспективы


ИТ-индустрия разрабатывает и внедряет технологии, из которых новая разработка специалистов из UUIC сможет получить дополнительные выгоды. Первая — это PCIe 5.0, спецификацию которого консорциум PCI-SIG одобрил в мае этого года. Шина обладает скоростью передачи 32 ГТ/с и механизмами контроля целостности сигнала.

Вторая технология — это память Optane на базе технологии 3DXpoint, разработанная Intel и Micron. Она сама по себе имеет более высокую скорость чтения/записи, чем флеш. Один из последних продуктов Intel обладает скоростью последовательного чтения данных в 2500 МБайт/с. Для записи этот показатель составляет 2000 МБайт/с.

Выводы


Компании все чаще внедряют «твердотельники» в своих дата-центрах. В The Register отмечают, что общий объем поставок SSD увеличится до 313 млн в 2021 году (при 157 млн единиц в 2016). Можно ожидать появления новых технологий, аналогичных FlatFlash.

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



ITGLOBAL.COM — поставщик частного и гибридного облака, а также других услуг, направленных на развитие IT-инфраструктуры наших клиентов. О чем мы пишем в корпоративном блоге:

Let's block ads! (Why?)

PocketScreen — краудфандинговый проект самого маленького Arduino-совместимого устройства

Авторы поставили перед собой задачу создать самое маленькое Arduino-совместимое устройство размером 22 x 25 x 5 мм, при этом разместив на плате процессор ATSAMD21G18A (ARM Cortex-M0+, рабочая частота до 48 МГц, 256 кбайт флэш-памяти, 32 кбайт ОЗУ), цветной OLED дисплей, Wi-Fi модуль ESP8266EX, холдер для карт microSD, 3 пользовательских кнопки (+ кнопка аппаратного сброса) и RGB-светодиод. Вместо обычной расширенной коммутации, когда у Arduino-совместимых плат доступны для внешнего подключения практически все выводы микроконтроллера, PocketScreen из-за своей миниатюрности ограничивается 5 цифровыми и 3 аналоговыми выводами, плюс позволяет подключить внешнее питание.

Краудфандинговый проект: PocketScreen.
Суть проекта: крошечное устройство, совместимое с Arduino, с мощным процессором, цветным дисплеем и Wi-Fi.
Платформа: Kickstarter.
Адрес проекта: kickstarter.com/pocketscreen
Авторы: Гюркан Доган (электронщик), Флориан Келлер (программист), Бенджамин Бек (веб).
Откуда: Людвигсбург, Германия.

image

Обратите внимание, что модуль Wi-Fi на фотографиях отсутствует, разработчики обещали интегрировать его только при достижении суммы собранных средств в €20000 (эта цель уже была достигнута).

Обещан модуль ESP8266EX от Espressif Systems с поддержкой Wi-Fi стандартов 802.11 b/g/n. В ESP8266EX уже встроен 32-х битный процессор Tensilica L106 от Cadence Design Systems — такой не совсем обычный процессор, который продается не виде привычных нам корпусированных микросхем, а в виде IP-ядра, которое вы можете встроить в SoC (систему на чипе) своего производства. Впрочем, сейчас это достаточно стандартная ситуация, когда модуль на базе SoC с мощным специализированным процессором управляется снаружи еще одним микроконтроллером.

PocketScreen построен на базе процессора ATSAMD21G18A от Microchip. Среди основных характеристик микроконтроллера, кроме озвученных выше 48 МГц / 256 кбайт флэш / 32 кбайт ОЗУ, стоит упомянуть корпус TQFP-48 (при наличии прямых рук паяется достаточно просто, для демонтажа желательно использовать фен), наличие Full Speed (12 Mbps) USB 2.0, I2S, 6 x SPI, 14 x PWM, 12-и канального DMA, часы реального времени, WDT/POR/BOD, 14 каналов АЦП (12 бит/350 ksps), 2 аналоговых компаратора (можете сделать, например, оконный компаратор), ЦАП. Из 48 выводов процессора 38 можно использовать под ввод-вывод. Так что даже если вы не фанат Arduino, но в ближайшем будущем хотели поближе изучить микроконтроллеры серии SAM D, то, возможно, вам стоит присмотреться к PocketScreen хотя бы в целях экономии, купив его со всеми плюшками за €35, сэкономив на отладочной плате типа ATSAMD20-XPRO за $69.

Как вы можете видеть, свободного места на плате очень мало и, видимо, бэкеры закидали разработчиков вопросами о том, насколько разрастется плата, если удастся умять в нее еще и ESP8266EX. Разрабы полны оптимизма и даже опубликовали на странице проекта небольшой планчик предстоящего фокуса — впихивание невпихуемого без увеличения размеров:
• выкидываем одну внешнюю ножку;
• некоторые компоненты выкидываем, некоторые ставим меньшего типоразмера;
• переходим с двухслойной печатной платы на четырехслойную, дорожки спускаем на внутренние слои, освобождаем место для компонентов;
• и — бриллиант коллекции — используем microSD холдер вместо Wi-Fi антенны, потому что «the exterior is conductive and not connected anywhere».

При заказе одной платы PocketScreen она обойдется вам в €35, при увеличении количества заказанных плат цена за одну штуку плавно падает, опускаясь до €28 в случае заказа 10 устройств.

Наши рекомендации? Заказывать или нет? Все сложно. С одной стороны, у ребят есть работающий прототип и опыт разработки PocketStar, еще одного аналогичного устройства, удачно взлетевшего на Kickstarter в 2018. С другой стороны, разговоры про использование microSD холдера вместо Wi-Fi антенны вызывают некоторое недоумение. Работать, наверное, будет, только на дистанциях, более привычных для NFC, нежели для Wi-Fi. Это, плюс еще пара опечаток в тексте презентации (charing module вместо charging module, 265 KB Memory вместо 256 KB), бросающихся в глаза любому, хотя бы поверхностно знакомому с электроникой и не исправленных до сих пор, намекает на то, что (но это только предположение) разработчики служат прикрытием для других ребят (we need to go deeper — для китайских менеджеров, которые служат прикрытием для других ребят, которые разбираются в электронике, но их не выпускают из подвала), не очень хорошо знакомых и с английским языком, и с электроникой; число 265 вообще вызывает мгновенную острую реакцию и желание залезть в документацию (я залез) у любого человека, знакомого с принципом организации памяти микроконтроллера и со степенью двойки. С другой стороны, кто сказал, что это плохо?

Если вам понравился проект, поспешите. Ребята уже собрали 250 % от требуемой суммы, а через 10 дней сбор средств и вовсе прекратится.

Этот материал — кросспостинг из моего личного блога, кажется, разрешенный индульгенцией от XXII.I.MMXIX.

Let's block ads! (Why?)

[Из песочницы] Автоматика для дома своими руками

Моя статья будет полезна тем, кто только задумывается над подобного рода системой, поможет определиться делать ли самому и ориентирована в основном на энтузиастов-колхозников. Изначально пишу “автоматика” а не умный дом, потому что на данном этапе умных функций в моей системе управления нет, сейчас стояла задача в сборе данных и управлении устройствами. Всё должно измениться в будущем, когда появятся алгоритмы которые, и сделают дом умным. С моей точки зрения, если вы можете включать свет со смартфона, то это не делает ваш дом умным. Умным он становиться когда у вас написаны сценарии, которые помогают вам, облегчают контроль за домом и делают рутинные вещи незаметными для вас. Например, включить свет на крыльце когда уровень освещённости ниже какого-либо порога и выключить в два ночи, не включать полив если сегодня обещают осадки с вероятностью больше 60 процентов, если появилось движение в комнате то включить подсветку лестницы и т.д. И только в этом случае он становиться “умным”.
Немного лирики. Всегда хотелось иметь дом за городом, долго на это решался, потому что стройка это не только большие финансовые затраты, но и большие затраты вашего личного времени, которое можно посвятить любимым хобби, семье. Благо что одно из них у меня, это как раз разработка всяких ненужных устройств. Где-то еще на начальном этапе я для себя решил что это может быть интересно и выбрав участок я начал строить планы. Сначала пришлось конечно много времени уделить вопросам связанным с самой стройкой, таким как проект, поиск строителей и всяким другим хлопотам. Но потом, когда коробка была готова, подошло время задуматься и о системе автоматизации дома, это то что мне нравится и что хотелось сделать, ну просто странно программисту вставать с дивана что бы выключить свет в ванной.

Начались изучения того что есть на рынке и что можно купить и доколхозить самому. Как оказалось рынок вполне насыщен множеством решений, но в них то того не хватало, то другого, и нигде не было целостного решения которое меня бы удовлетворило (нет конечно решения были, но стоимость в 20т. уе. меня не удовлетворяла). Например у Шнайдера есть неплохое решение базирующееся KNX, на котором можно построить управление освещением, ролетами и вентиляцией, но интегрировать в систему что-нибудь кроме стандартных элементов практически невозможно, плюс о вэбинтерфейсе и управлении через гугл хоум можно забыть, а об автоматизации сценариев вообще говорить не приходиться. С другой стороны на рынке хватает решений, которые и беспроводные, и дружат с гуглом и апликейшины для них уже готовы, но у них есть масса нюансов которые отодвигают такие решения на задний план. Например сложность одновременного управления освещением с обычных выключателей и с апликейшена, часто это вообще невозможно или если и возможно то проблемно реализовать проходные выключатели, а хотелось бы иметь дом в котором всё работает и без умного дома на случай его крэша. Плюс мне не очень хотелось обвешивать дом массой отдельных коробочек, до сих пор не понимаю почему бы датчик движения, угарного газа и температуры не поместить в один корпус, пусть он даже и будет стоить дороже, зато мне не прийдется весь потолок увешивать какими-то девайсами, да еще и менять в них батарейки каждые два года.

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

Сформировав список желаний у меня получилась вот такие подсистемы:

  • освещение в доме
  • ролеты
  • управление заслонками вентиляции
  • датчики движения, датчики освещенности, СО и температуры в комнатах
  • автоматический полив
  • датчики движения по территории участка
  • резервное питание

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

Давайте вкратце рассмотрим каждую.

Освещение. Из вводных было то что свет должен работать одновременно и от выключателей и от системы управления (далее САУ), плюс должна быть возможность сделать проходные выключатели. Для этого САУ как минимум должна знать включен он сейчас или нет. Было несколько идей как это реализовать, но остановился я на этой схеме — кнопочный выключатель — импульсное реле(Elko MR-41) — дискретный выход — дискретный вход. Дискретный выход параллелим с кнопочным выключателем, НР контакт реле на лампочку, НЗ — на дискретный вход для получения статуса.

image

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

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

image

Вентиляция. Тут все просто, её я отдал на откуп САУ, и не предусмотрел никакого другого управления, навряд ли я когда-нибудь захочу открыть/закрыть вентканалы не с апликейшена. Так что схема — два дискретных выхода — простенький привод Belimo LM24-T с ebay за 25$ без обратной связи.

image

Вот так выглядит привод смонтированный на вентиляционной заслонке:

image

Датчики движения, датчики освещенности, СО и температуры в комнатах. На рынке сейчас валом таких девайсов, но все с проприетарным интерфейсом и подключить их в свою доморощенную систему достаточно сложно, да и плюс упомянутая уже проблема с тем что каждый датчик пытаются продать как отдельное устройство в своём корпусе. Вот меньше всего хотелось бы на потолке видеть россыпь разных устройств, а как задумаешься что в них всех надо поменять батарейки так и страшно становиться. Также всегда остаётся вероятность того что производитель закроет открытое api своих устройств, и заставит вас пользоваться только своим приложением как недавно гугл поступил с nest и вся ваша целостная система развалится на куски. Поэтому я сделал свой девайс на AVR, назвав его “сенсортэг” и напаковал его всем что мне было нужно: датчик движения с цифровой подстройкой чувствительности, датчики освещенности, температуры, угарного газа, управляемую подсветку, ESP8266, RS485 c гальванической развязкой, 24В блоком питания. Получилось вот такое устройство, но в реалии ему нужно посвятить отдельную статью и не особо зацикливаться на нём в этой.

image

image

Автоматический полив. Казалось бы что тут сложного, должно быть самое простое устройство типа дискретный выход — соленоид на 24В. Но как оказалось что все клапаны полива на 24В но AC. Так что пришлось делать отдельный блок с трансформатором на 24В и блоком реле, который по 24В DC коммутирует 24В АС.

image

Датчики движения по территории участка. У охранных датчиков выходы это НР и НЗ контакт так что тут как раз всё просто, дискретные входы и всё, только вот не стоит забывать про разрядники(неплохо подходит вариант разрядников для патч панелей).

Резервное питание. Изначально это не планировалось, но со временем выяснилось что за пределами города пропадание электроэнергии это никакое не ЧП а вполне обыденное явление. И хотя, я считаю что система умного дома должна быть спроектирована так, что бы её можно было включить/выключить в любой момент без печальных для неё и дома последствий, но от резервного питания я не отказался. Решив что коль у меня уже есть мои сенсортэги на 24В, приводы на 24В, то всё питание САУ я сделаю 24В. Получилась неплохая связка mean well блока питания, mean well упса и аккумуляторов, работает, проверял.

image

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

image

image

image

image

Следующим этапом было планирование щитка с модулями управления.

Топология системы:

image

Модули DI/DO. Нужно было прикинуть топологию системы, какие модули в неё входят, на каких контроллерах что работает. Тут существует масса вариантов реализации, и все они будут правильными если будут работать. Забегая вперед скажу что я остановился на системе из покупных модулей DI/DO, управляющем контроллере на Beaglebone black и вэбсервере на Raspberry Pi. Далее необходимо подсчитать все дискретные входы/выходы и их типы. Т.к. разрабатывать модули DI/DO не было никакого желания то я просто поискал на рынке уже готовые за вменяемую цену. Остановился на модулях Овен, в принципе они покрыли все мои нужды по управлению:

  1. МВ110-8ДФ, как модуль дискретного ввода для сигналов 220В.
  2. МУ110-16Р, для управления освещение, ролетами, вентиляцией и клапанами полива.
  3. МВ110-16ДН, как модуль дискретного ввода для сигналов с уличных датчиков движения.

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

Контроллер. Для связи с моими модулями «сенсортэг», расположенными в каждой комнате и модулями Овен в щитке мне нужен был контроллер который мог бы их опрашивать по RS485 интерфейсу и имел Ethernet для общения с сервером. Рассматривал вариант использовать Wiren Board, но у них мало RS485 портов да и вот контроллер хотелось самому сделать. Контроллеру хочется посвятить отдельную статью, так что тут можно упомянуть что он сделан на Beaglebone black и имеет 3 гальванически изолированных порта RS-485 и питание 24В.

Система для контроллера Beaglebone black собрана на базе Buildroot и доведена до состояния запускаем билд — получаем готовый образ для SDшки. ПО Beaglebone black состоит из: коммуникационного ядра, MQTT gateway и Mosquitto server. Коммуникационное ядро, опрашивает RS-485 порты, формируя внутреннюю таблицу дискретных и аналоговых точек. MQTT gateway преобразует точки контроллера в значения MQTT топиков и передает их в Mosquitto server. Все доступно по этой линке.

Щиток управления и имитатор сигналов(освещение, ролеты и вентиляция):

image

image

ПО Raspberry Pi это Home Assistant. Меня порадовала эта система, она очень проста, поддерживает массу уже готовых устройств и позволяет очень гибко писать свои плагины на python. Я например, за пару недель написал себе собственные MQTT плагины для освещения, ролет, сигнализации и разных типов датчиков(освещение, СО, движения, температуры) и несколько видов автоматизаций, всё очень гибко и главное с низким порогом вхождения в систему. Ещё Home Assistant поддерживает интеграцию с Google Home и Alexa. Можно немного помучаться и сконфигурировать это самому, или сделать платную подписку на их сервис(5$ в месяц) и тогда процесс синхронизации Home Assistant и Google Home проходит за два клика. Как бонус мы получаем управление голосом, пока на английском, но обещают поддержку русского вот-вот. Выглядит это примерно так:

image

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

Let's block ads! (Why?)

[Из песочницы] Workflow 3D-художника. Как не утонуть в тонне информации. Часть 1

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

Расскажу Вам историю абстрактного персонажа Васи. Что-то в его жизни перевернулось, он решил забросить старое доброе рисование и податься в 3D. Вася, само собой, пошел смотреть, сколько же за данный труд молодым светилам платят и чего требуется. Открывает вакансию джуна, а там:

  • знание 3ds Max/Maya/Blender (все зависит от желания работодателя);
  • навыки low-poly, high-poly, каких-то страшных Subdiv моделингов;
  • UV mapping;
  • текстурирование PBR;
  • знание Substance Painter;
  • Photoshop;
  • Substance Designer;
  • еще бы желательно уметь в визуализацию V-ray/Corona/Keyshot;
  • умение рисовать от руки;
  • кто-то просит собрать сцену в Marmoset.

И все это не за какие-то там баснословные суммы, а за среднюю зарплату кассира или официанта (автор не утрирует).

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

Конец.

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

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

Но пока мы разберёмся с чего начинать.

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

Краткий план статьи:

  1. Концепт
  2. Моделирование
  3. Retopology
  4. UVW Mapping
  5. Текстурирование

Концепт


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

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

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

Модельный лист персонажа

Тут нужно быть внимательным, существует их 2 вида: для аниматоров и для 3D-шников. Нам нужен тот лист, где фигура находится строго в A или T – pose или же так, как изображено в примере, есть несколько сторон (зад, перед, бок) и каждая из сторон совпадает с другой по линиям как на картинке ниже:

Его Величество Моделирование


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

Виды моделирования

Так как чаще всего в суровом игровом производстве используется полигональное моделирование, будем рассматривать его. Существует low-/mid- и high–poly модели.

Слева направо: low-poly, mid-poly, high-poly

Разница, думаю, понятна – кол-во полигонов и уровень детализации. Теперь, когда мы понимаем, какую нам предстоит модель сделать и с каким полигонажем работать, решаем, к какому типу она относится – hard surface или organic?

Пример Hard surface:

Пример Organic:

Исходя из этого выбираем подход, потому как для hard surface удобнее использовать Subdivision modeling, а для органики – скульптинг. Но, как и в любом правиле, тут тоже есть исключения: в ZBrush можно изучить инструмент ZModeler и делать Subdiv или наоборот делать органические модели без использования скульптинга (последнее мне кажется нецелесообразным).

Что такое subdivision modeling?

Subdivision modeling являет собой метод представления гладкой поверхности посредством сглаживания более грубой полигональной сетки.

Фактически, вы строите сетку под сглаживание, а потом применяете модификатор Turbosmooth, который разбивает один полигон на четыре, переходит от примитива к гладкой и сложной форме. Вот как это выглядит:

Поэтапное сглаживание грубой формы

Что такое скульптинг?

Все знают, как работает скульптор. Здесь принцип тот же, только работать нужно в цифровой среде.

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

Пример:

Создать такую детализацию с помощью Subdiv очень сложно, практически невозможно

Этапы для скульптинга и subdiv отличаются:

Subdiv:

  • построение общей формы для низкополигональной модели;
  • на этапе построения высокополигональной выполнение сглаживания;
  • добавление мелких деталей.

Скульптинг (для ZBrush):
  • блокинг в Dynamesh
  • ретопология (на этом этапе получаем low-poly, сохраняем отдельно)
  • уточнение деталей накручиванием Subdivision уровней (работает так же как Turbosmooth).

Примечание: детали лучше прорабатывать постепенно на каждом уровне.
Софт: 3ds max, Maya, ZBrush, Blender.

Retopology


Самый сложный этап для новичка – это ретопология. Это целая наука, которая имеет свои правила для анимации, кино, игр.

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

Рассмотрим более наглядный пример:

Персонаж, разделенный на субтулы (выделены цветом)

Все, что обозначено одним цветом – один сабтул.

Существует несколько правил, которые следует соблюдать при создании ретопологии:

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

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

Если модель изначально имела Low-Poly версию, то вся ретопология состоит в том, чтобы найти способ из существующей сетки сделать сетку с еще меньшим кол-вом полигонов. Возможно, стоит удалить те части, которые не видно, к примеру, тело под одеждой.

Данную операцию можно выполнить как в софте, в котором вы моделировали, так и в специализированных программах, таких, как Topogun 2.

UV mapping


UV делают для того, чтобы текстура ложилась правильно, а не вот так:

Вот так выглядит растянутая текстура

«UVW развёртка» или просто «развёртка» – такое название приобрела эта операция путём обычного перевода с английского Unwrap UVW.

Требования к качественной развертке:

  • при создании развертки обязательно нужно создавать швы, по которым она будет раскрываться;
  • швы желательно прятать туда, куда не доберется любопытный игрок;
  • элементы развертки нужно распределять в пределах данной Вам области (шахматный квадрат);
  • пространство квадрата должно быть максимально заполнено (чем больше размер части развёртки, тем более качественной будет текстура);
  • желательно все элементы разложить уникально, но бывают случаи, когда некоторые из них можно наложить друг на друга (обычно называют «оверлап»), если они не видны игроку и не обязательно требуют уникальности, например, ножки стула;
  • оставляйте некоторое пространство между элементами, чтобы избежать «вытекания» на другие части карты.

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

«Запечь» означает перенести некоторые характеристики материала или сетки модели на изображение карты. Тот же принцип использует художник, когда на плоском листе бумаги изображает объем, цвет и свет.

После того, как развертка сделана, мы можем посмотреть на результаты наших трудов:

Слева изображена развертка представленной модели

Зелёные полосы на модели человека – это те самые швы, по которым её разворачивают.

Сейчас каждая уважающая себя программа имеет возможность проделать такую операцию, есть так же специализированные, такие как UVlayout, RizomUV. Я всегда использовала возможности 3ds max, вполне хватало.

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

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

2.Создать Cage. Cage, простыми словами, – это версия низкополигональной модели, подогнанная таким образом, чтобы полностью перекрывать высокополигональную. При её построении у моделей должны быть одинаковые координаты;

Выглядит это так:

Синяя решетка вокруг модели – cage, то пространство, которое будет захватывать детали из высокополигональной модели

3. Назначить каждой части модели (в ZBrush — сабтулы) свой материал, чтобы при импорте в Substance Painter они были так же разделены, а не слились воедино.

Переходим к текстурированию.

Текстурирование и запекание текстур


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

Запекание происходит автоматически, все, что Вам нужно – импортировать в программу Low-poly модель с разверткой (обязательно!), после выбрать соответствующую опцию, загрузить высокополигональную модель, выбрать разрешение карт, загрузить Cage или же выбрать отступы от модели и нажать кнопку Bike All Texture sets.

PBR texturing

Самая распространенная технология текстурирования в играх PBR — Physically-Based Rendering, позволяет создать фотореалистичные текстуры с помощью набора карт.

Часто используемые карты:

  • Ambient Occlusion – показывает взаимодействие между элементами модели. Эта карта создает мягкое затенение, будто модель освещена без прямого света;
  • Diffuse – определяет цвет и рисунок объекта;
  • Metallic – показывает, насколько материал металлический;
  • Roughness — контролирует четкость отражений света, показывает шероховатость объекта;
  • Normal – отвечает за рельеф модели, каждый цвет показывает разные оси направления.

Вот как это выглядит на самом примитивном примере:

Слева квадрат без карт нормалей, справа карта нормалей присутствует

В Substance Painter очень широкий функционал, который делает текстурирование гораздо легче: можно рисовать сразу по модели, использовать разнообразные альфы, готовые hard surface штампы, процедурные карты, фильтры, маски – в общем, полное раздолье для фантазии.

После Вы получите карты, которые можно экспортировать и отправлять сразу в любой игровой движок, здесь есть много шаблонов: под Unity 4/5, Unreal Engine, Dota 2, V-ray, Corona и тд.

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

Благодарю за прочтение, may the force be with you!

Let's block ads! (Why?)

[Перевод] Что такое сервисная сеть

Доброе утро всем!

Сегодня мы рады предложить вам перевод статьи, кратко рассказывающей о новом технологическом веянии под названием «Service mesh» (сервисная сеть). Наиболее интересным решением в этой сфере (на наш взгляд) является Istio, но предлагаемая статья интересна, в первую очередь, экспресс-сравнением имеющихся технологий такого рода и high-level обзором всей парадигмы. Автор Тобиас Кунце также написал вторую, более практически-ориентированную статью о service mesh — просьба высказаться, стоит ли опубликовать и ее перевод


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

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

Разумеется, большинство из этих проблем – не новы, и уже давно в нашем распоряжении есть технологии, помогающие организовать механизмы обмена сообщениями, например, SOAP, Apache Thrift и gRPC. А вот что наблюдается недавно: бурное распространение контейнеров и сопутствующий ему взрывной рост сервисных вызовов, степень горизонтального масштабирования и связанная с ней недолговременность существования сервисных терминалов. Когда сложность и зыбкость выходят на новый уровень, возникает желание инкапсулировать сетевую коммуникацию и вынести ее на новый инфраструктурный уровень. Наиболее популярный подход к предоставлению такого уровня, применяемый сегодня, называется «сервисная сеть».

Что же такое “сервисная сеть” на самом деле?


Сервисная сеть – это не «сетка из сервисов». Эта сеть API-посредников (прокси), к которым могут подключаться (микро)сервисы для полного абстрагирования сети. Как выразился Уильям Морган, это «выделенный инфраструктурный уровень, обеспечивающий безопасную, быструю и надежную коммуникацию между сервисами». Сервисные сети помогают справляться со множеством вызовов, которые встают перед разработчиками, когда приходится обмениваться информацией с удаленными терминалами. Однако, следует отметить, что крупные эксплуатационные проблемы при помощи сервисных сетей не решаются.

Как работают сервисные сети?


Типичная архитектура сервисной сети. Прокси в плоскости данных развернуты как компаньоны (sidecar), а плоскость управления располагается отдельно.

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

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

Основные игроки: Envoy, Linkerd, Istio и Consul


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

Linkerd – опенсорсный проект, поддерживаемый Buoyant и, в то же время, самая первая сервисная сеть. Исходно он был написан на Scala, как и Finagle, от Twitter, от которого он произошел, а затем слился с легковесным проектом Conduit и был перезапущен как Linkerd 2.0.

Istio – пожалуй, наиболее популярная сервисная сеть нашего времени. Ее совместно запустили Google, IBM и Lyft; ожидается, что в конечном итоге она войдет в проект Cloud-Native Computing Foundation (CNCF). Строго говоря, Istio – это плоскость управления и, чтобы образовать сервисную сеть, она должна сочетаться с плоскостью данных. Как правило, Istio используется вместе с Envoy и лучше всего работает на Kubernetes.

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

Основные достоинства и расхождения в приоритетах


Хотя, пространство сервисных сетей продолжает развиваться, большинство проектов, по-видимому, уже пришли к представлению об основном наборе фич, которые должны в такой сети поддерживаться:
  • Обнаружение сервисов: обнаружение сервисов и ведение их реестра
  • Маршрутизация: умная балансировка нагрузки и сетевая маршрутизация, более качественная проверка работоспособности, паттерны автоматического развертывания, например, сине-зеленые и канареечные конфигурации
  • Устойчивость: повторные попытки, таймауты и автоматические выключатели
  • Безопасность: Шифрование на основе TLS, в том числе, управление ключами
  • Телеметрия: сбор метрик и отслеживание идентификаторов

Кроме этих возможностей (а иногда и на их основе) существует и более богатый уровень функций, на котором между разными сервисными сетями начинаются серьезные расхождения по поводу того, что может быть ценно для архитекторов, разработчиков и администраторов микросервисных систем. Например, Envoy поддерживает WebSockets, а Linkerd 2.0 (пока) нет. В то время, как и Istio, и Consul поддерживают разные плоскости данных, Linkerd работает только со своей собственной. У Consul есть собственная встроенная плоскость данных, которую можно заменить на более мощную, когда вопрос производительности становится приоритетным. Istio разработана как отдельная централизованная плоскость управления, а Consul и Linkerd являются полностью распределенными. Наконец, из всех рассмотренных выше сервисных сетей лишь Istio поддерживает внесение неисправностей (fault injection). Это лишь некоторые из ключевых различий, которые нужно учитывать, если вы подумываете о внедрении такой сети.

Критика сервисных сетей


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

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

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

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

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

Связанные технологии


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

Let's block ads! (Why?)

Большие данные в управлении отелем: использовать нельзя игнорировать

[Перевод] Однобитный полный сумматор на необычных микросхемах

Мы привыкли к 14- и 16-выводным микросхемам, содержащим несколько логических элементов или целый узел — счётчик, дешифратор, АЛУ, и др. Но раньше были и микросборки и микросхемы, в которых помещался всего один логический элемент. После долгого забвения они вернулись в виде пятивыводных SMD-компонентов. Например, 74LVC1G86 — исключающее ИЛИ, 74LVC1G08 — И, 74LVC1G32 — ИЛИ. На них и выполнен предлагаемый однобитный полный сумматор.

Его схема:

На ней не показаны 220-омные резисторы, светодиоды, индицирующие состояния всех входов и выходов, конденсаторы на 0,1 мкФ параллельно питанию. На плате для них посадочные места предусмотрены. Файлы: герберы, исходники в формате Eagle, схема в PDF.

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

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

Но интереснее изготовить несколько плат:

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

Let's block ads! (Why?)

Перспективное место

Потерев седую щетину на подбородке, Рик, сидевший за компьютером в своем покосившемся кресле, открыл третью банку дешевого пива и включил очередной выпуск «Разрушительного автородео». Снаружи в дом пробивалось багровое вечернее солнце, отпечатывая на стене тень от погнутых жалюзи и струйки плавящегося летнего воздуха. Пустая кухня-гостиная замерла в полутьме. На экране мелькали автомобили, участвовавшие в гонке на выживание – трасса в виде «восьмерки», с рампой для прыжков на центральном перекрестке, заставляла участников выполнять рискованные маневры: кто не смог разогнаться для нормального прыжка, обрушивался на крыши машин, ехавших поперек. Публика на стадионе и Рик у монитора ждали эффектной аварии.
Он смотрел и думал о том, что такие шоу – теперь одна из немногих отдушин, где остался настоящий драйв вождения. Ведь это произошло… так незаметно, примерно как исчезают с дорог некоторые модели машин. Вдруг оглядываешься и понимаешь: а больше нет тех автобусов, на которых ты ездил в школьные годы, или какой-нибудь недорогой легковушки, которая была у половины студентов и офисных работников лет десять назад. Только в этот раз пропали не машины, а водители. Вроде бы не так давно шли первые бодрые телерепортажи о внедрении беспилотных авто на дороги общего пользования. А пару лет назад его сосед по улице, вечно уезжавший куда-то отдыхать или к родственникам с женой и тремя детьми на своем бессменном минивэне, продал его и заявил, что на такси-автопилоте путешествовать безопаснее. Школьный друг Эрл, у которого была сначала мастерская, а потом прокат автомобилей, разорился и потерял работу. Беспилотные такси так отчаянно делили рынок с прокатными сервисами, что разве что сами не платили клиентам за поездку, и машины в аренду от мелких частников стали никому не нужны. Вот Красавчик Эдвард устроился хорошо: использовал свою харизму, чтобы стать водителем лимузина. Под видом дорогого сервиса для взыскательных клиентов продолжает делать то, к чему лежит душа – рассекает по городу за рулем, утоляя свою страсть к стильным автомобилям. Впрочем, Рику грех жаловаться – он тоже остался при любимом деле, вовремя получив сертификацию на ремонт непривычных ему электромобилей. Мастерская возле дома приносит достаточно денег, к тому же остается базой для его хобби – восстанавливать старые автомобили.
Резкий звук раздался снаружи, заставив Рика вздрогнуть и обернуться – длинный, непрерывный, что-то среднее между звонком тех старых домашних телефонов с трубкой из его детства и сиреной полицейской машины. Звук не прекращался, пока Рик, сглотнув от неприятного холодка испуга, озирался в поисках источника. Выйдя в прихожую, он на секунду замер от вида большой черной фигуры за занавешенным стеклом входной двери. Но резкие синие светодиоды на черном силуэте и смолкший искусственный сигнал успокоили его. Чертов робот не распознал кнопку дверного звонка, вот и звонит сам, как умеет. Спасибо, хоть не стал стучать по двери кулаком, сдирая с нее краску. Только вот что ему надо? Доставку коммутатора зажигания для своего «Каприс» 1995-го года он ждал через неделю, и его привез бы пес или колесный робот, а не андроид.
Мужчина резко приоткрыл дверь наружу, и андроид послушно отшатнулся, давая человеку выйти. С порога тот увидел, что невдалеке на обочине дороги припаркован внушительный черный автопилотируемый грузовик с логотипом в виде серебристой буквы «Н».

– Ричард Дэйл Беннет. Здравствуйте, – произнес андроид с неуверенными, механическими интонациями. Он зажег небольшой яркий диод, явно для удобства распознавания лица камерой. – Я являюсь полноправным представителем фирмы «Хадсонбот». Пожалуйста, подтвердите согласие на обработку персональных данных.
В кармане шорт вздрогнул смартфон. Рик вытащил его и двумя резкими движениями большого пальца промотал стандартное соглашение, лишь на мгновение отведя глаза от робота, чтобы поставить цифровую подпись. Он не любил эту сомнительную практику «сначала соглашение, потом разговор», но, как и многие, верил растиражированному мифу, что достаточно не подтверждать вслух под камерой свою личность. Он лишь молча смотрел на андроида.

– Спасибо, – продолжил андроид. – Я, как полноправный представитель фирмы «Хадсонбот». Хочу предложить вам заключить с нами контракт.

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

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

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

– Ричард Беннет, согласно данным Налогового управления. Вы являетесь автомобильным мастером по роду занятий. Согласно данным Министерства транспорта. Вы являетесь владельцем стандартного сертифицированного оборудования авторемонтной мастерской. А также. Набором квалификационных сертификатов на производство слесарных работ и кузовных работ. На легковые автомобили до категории 119,9 кубических футов. Наша фирма «Хадсонбот» предлагает выкуп вашего бизнеса. Для переоборудования производственной единицы под нашей франшизой. С вознаграждением лично вам ежемесячно в размере 50% от текущей прибыли. С учетом вашего прежнего налогообложения по данному виду деятельности. Пожизненно.

– Стоп-стоп. – Рик отвел взгляд, поморгав, затем уставился на андроида. – Какая франшиза? Зачем вам моя мастерская? Кто хочет ее купить?

– Наша компания – одна из роботизированных сетевых компаний под автоматическим управлением, созданных в рамках государственной программы «ИИ-оптимизация среднего бизнеса». Мы спонсированы государством на ведение инновационного бизнеса повышенной производительности за счет отсутствия людей в структуре компании. Вся прибыль уходит на дальнейшее развитие компании…

Рик слышал об этом. Вроде как по всей стране появляются бизнес-проекты под управлением вычислительных центров и с роботами вместо служащих. Государство щедро субсидирует эти проекты, чтобы получить целые отрасли без людей. Обслуживание, уборка, доставка, вождение – все автоматизируется, ведь это выгодно. Зарплата робота – это его своевременный ремонт, что намного дешевле, чем вместе с трудом рабочего покупать его дом, машину, детей, страховку, поездки на курорт… Все логично, но чтобы роботы сами приходили к людям выкупать бизнес? Рик покосился на черный грузовик, стоявший в стороне. Вдруг там десяток таких роботов, готовых ворваться к нему в дом?

– Понимаете, я не хочу. Меня устраивает мой доход и моя работа. Мне нравится ремонтировать машины. И зачем я буду продавать мастерскую вам? – воскликнул Рик, разведя руками.

– Согласно маркетинговым исследованиям. Франшиза является известной на всей территории страны. Брендирование повысит узнаваемость. – Рик закатил глаза, сжав губы, но робота, среагировавшего на вопрос «зачем», было не остановить. – Согласно данным Налогового управления. Вы не имеете наемных работников. Роботы могут работать круглосуточно в отличие от вас. Согласно данным Министерства транспорта. Планируется строительство съезда с интерстейта и транспортной развязки в 10 милях от вас. Начало работ в течение 8 месяцев. Повышение автомобильного трафика по окончании работ в среднем на 27%. С учетом повышения эффективности работ роботами, геолокации и улучшенной транспортной доступности. Ваша мастерская – перспективное место. В случае заключения контракта с фирмой «Хадсонбот» ваш среднемесячный доход повысится в среднем на 57%. Пожизненно.

– Послушай, робот, – сказал Рик нетерпеливо. Я все понял и не желаю продавать мастерскую. Это – мое хобби, понимаешь? Я делаю это не только для денег. Не просто для дохода. Я ремонтирую машины для себя! Мне это нравится, понимаешь? Нет, не поймешь! Разговор окончен! – Он повернулся спиной к андроиду, открыв дверь дома.

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

Уважаемый мистер Сандерс,
Компании «Хадсонбот» требуются ваши услуги психолога для помощи нашему будущему партнеру мистеру Беннету в заключении контракта с нами. Клиенту были разъяснены его перспективы и выгоды от контракта при личном общении с андроидом. Клиент выразил заинтересованность, пожелав ознакомиться с деталями соглашения. Но от дальнейшего общения и заключения контракта отказался. Нейросетью зарегистрирована эмоциональная реакция неприятия. Возможные причины: стресс от взаимодействия с роботами, травматичность отчуждения бизнеса, потеря жизненных перспектив. Требуется грамотный маркетинговый и психологический подход к доведению до клиента информации о взаимном выгодоприобретении. В случае успешного заключения контракта между компанией «Хадсонбот» и мистером Беннетом при вашем посредничестве настоящим предложением вам гарантируется выплата премии в размере 50% от прибыли его производственной единицы под нашей франшизой за первый месяц ее работы.
Деловое предложение, электронный контракт и детали бизнес-плана, предоставленные мистеру Беннету, видеозапись общения с ним (для возможного психологического профилирования и иных задач), а также соглашение на обработку персональных данных с правом ограниченной передачи третьим лицам, заверенное его цифровой подписью, прилагаются к данному письму.
С пожеланием всего наилучшего и с надеждой на успешное сотрудничество,
Компания «Хадсонбот»

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

– Перспективное место, – фыркнул он, покачав головой. Разговор с андроидом немного взвинтил его таким неожиданным и бескомпромиссным вторжением в его тихую жизнь.
В поисках свежих аккумуляторов на стеллажах, он на минуту замер и оглядел гараж с высоты стремянки, на которой стоял. «Каприс» 1995-го года, который он понемногу восстанавливал, уже покрылся пылью, но стоящие рядом две «Модели А» сами себя не отремонтируют – сдавать их нужно уже завтра вечером. С другой стороны, чего там ремонтировать? Перебрать аккумуляторную сборку в поисках нерабочих элементов и сделать компьютерную диагностику мотор-колес? Неужели в наше время люди даже этого сами сделать не могут?
– Перспективное место, – повторил он беззвучно, одними губами, снимая с полки увесистую коробку с розовыми аккумуляторами.

Let's block ads! (Why?)