Category: технологии

Category was added automatically. Read all entries about "технологии".

Про печки

Я уже давно хотел поставить дома дровяную печку. Она удовлетворяет сразу несколько желаний:

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

Русская печь — отличная штука. Без излишней технологичности достигает КПД в 60-70%, являясь одним из самых экономичных устройств для отопления дровами. Она практически не требует обслуживания, так как каждый раз топится большим огнём при большом потоке воздуха, так что в трубе не очень сильно накапливается креозот, сажа, и прочее. Сама печь весит до двух тонн, и её масса выступает в роли теплового маховика — один раз раскрутил, а дальше только поддерживаешь. При наличии в доме такой печи между протопками температура колеблется очень мало, в пределах одного-двух градусов. Никаких термостатов не надо 🙂

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

Поэтому решил поставить дома чугунную печку. Она быстро прогревает дом, не занимает много места. Но у обычных чугунных печек тоже есть недостатки. Самый главный заключается в том, что её замучаешься топить и кормить дровами — они быстро прогорают, а потом печь быстро остывает и дома снова становится прохладно. Мой дед постоянно так воевал с чугунной печкой на даче. Он уже и кирпичами её обкладывал, чтобы хоть какая-то была тепловая инерция. Поэтому в печки стали ставить регулируемое поддувало, хочешь жара — открывай, не хочешь — прикрывай. Прикрыл — огонь будет значительно дольше гореть, несколько часов, без того, чтобы дрова подкидывать. Но если прикрыть доступ кислорода, огонь начинает не гореть, а тлеть. К чему это приводит? К неполному сгоранию, к тому, что в трубе начинает накапливаться сажа и креозот, которые могут возгореться. Это опасно. Чтобы пресечь подобные проблемы, конструкцию печей усложнили, добавив в них двойное горение — специальную камеру, в которой сгорают выделяемые при тлении газы. Таким образом, топка подобной печи работает даже не сколько в режиме топки, сколько в режиме газогенератора, и большая часть тепла выделяется при дожигании получаемых газов. Также есть другая технология двойного горения — когда в печь устанавливается катализатор, прямо как в автомобиле.

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

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

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

Mirrored from Лабораторный Журнал №6.

Доломал минимакс

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

Поэтому, так сказать, в дальней перспективе я вижу, что человек сможет создать сильный искуственный интеллект, который превозойдёт его самого. Вопрос, какая роль будет отведена человеку в данном мире — ОЧЕНЬ интересный, и по-моему, однозначного ответа нет ни у кого. Элон Маск, например, считает, что человечество будет порабощено сильным ИИ. Создатели сериала “Person of Interest” думают, что человек будет существовать с сильным ИИ симбиотически — т.е. всё управление и развитие человечества возьмёт на себя ИИ, люди будут абсолютно счастливы, а в обмен на это будут этот самый ИИ обслуживать, например, батарейки вовремя менять 🙂 Ну, а создатели сериала “Westworld” отводят ИИ роль рабов, прислужников человека. Какой из этих ответов верный — неизвестно, но не исключено, что ответ мы узнаем в течение нашей жизни.

Однако хватит философии.

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

Для каждого потенциального хода нужно рассчитать некий коэффициент. Отрицательный коэффициент будет означать, что выиграл противник, положительный — что выиграла программа. Я начал с того, что присвоил немедленному выигрышу значение 1.0, проигрышу -1.0, а ничьей 0. Далее, алгоритм помечает этот ход как корневой узел, и строит исходящее из него дерево потенциальных ходов противника, а потом снова своих, вызывая сам себя рекурсивно (а как же ещё, если речь идёт о деревьях произвольной высоты). Раньше или позже, алгоритм доберётся до листьев игрового дерева, и будет возвращать +1.0, -1.0 или 0. Остаётся только сложить все значения, полученные из листьев игрового дерева, вместе, и записать их в массив, из которого выбрать максимальное значение, присвоенное какому-либо ходу.

Но этого оказалось недостаточно. Написанная с таким алгоритмом программа таки играла, но на среднем уровне. У неё можно было выиграть. Шишечкой на этой ёлочке оказалось введение дополнительной поправки, на которую умножался коэффициент, полученный из листьев игрового дерева. По простой причине — немедленный выигрыш или проигрыш, прямо со следующего хода, должен учитываться значительно больше, чем выигрыш или проигрыш после нескольких ходов. Я начал с того, что коэффициенты, полученные из каждого более нижнего уровня игрового дерева, стал делить на 2. Но и этого оказалось мало, хотя и заметно улучшило работу алгоритма. Магическим числом оказалось 4. Т.е. немедленный выигрыш на первом ходе учитывается как +1.0, выигрыш на втором — как +0.25, на третьем — +0.0625 и так далее. Вот тут уже выиграть против программы не оказалось никаких шансов. В лучшем случае я могу сыграть вничью.

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

Надо будет написать программу, играющую в преферанс. А то комп меня легко дрючит, особенно на распасах (я вообще не очень играю ни в преферанс, ни в шахматы, ни в шашки, хотя почему-то неплохо — в поддавки).

Mirrored from Лабораторный Журнал №6.

Искуственный интеллект

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

Но для того, чтобы научить нейросеть чему угодно, для начала надо сделать набор данных для обучения. В случае с играми, соответственно, это будут партии различных игр. Для начала я выбрал что-нибудь попроще: крестики-нолики. Благо ПОЛНОЕ дерево решений для этой игры очень небольшое. Чисто теоретически там 9! игр (около 360 000), в реальности намного меньше: не все игры идут 9 шагов, многие являются отражениями других игр, развёрнутых на 90, 180, и 270 градусов. И так далее.

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

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

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

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

Вообще, если есть возможность строить игровое дерево — лучше строить игровое дерево. Такие программы будут играть в игру лучше, чем нейросети (которые по сути только распознают паттерны и реагируют на них). Но игровое дерево строить возможно далеко не всегда. Скажем, Го не поддавалось, поэтому нормально играть компьютер в Го наконец-то научились именно, что через нейросети. Потому что игровое дерево для шахмат — 10E120 (число Шеннона), а игровое дерево для Го — 1.74E172! Но даже Го меркнет перед огроменным деревом крайне (на первый взгляд) простой игры Стратего, чей размер составляет 10E535!!! Неудивительно, что компьютер играет в Стратего крайне слабо. Может быть, именно что нейросети научатся. В лоб, через построение дерева — путь тупиковый.

Mirrored from Лабораторный Журнал №6.

Нейронные сети

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

А теперь движок нейронных сетей не надо писать самому. Сначала появилась Caffe (я использовал её для одного из проектов в университете по поиску изображений), а потом Гугл открыл свой TensorFlow для всех. Но даже TensorFlow был ОЧЕНЬ непрост в использовании. А теперь выяснилось, что для TensorFlow написали кучу вменяемых библиотек, и создание нейронных сетей стало очень несложным занятием.

Их несколько, но больше всего мне понравилась библиотека keras. И дело не сколько в том, какая она хорошая, а в том, что для неё больше всего документации 🙂 В прошлый раз, когда я щупал нейронные сети, я использовал библиотеку TF-Slim. Документации для неё, можно сказать, не было. Пришлось хакать исходники примеров, чтобы получить что-то своё.

Но оцените, как это теперь просто!

Вот, например, Питонный код для создания простой нейронной сети из двух входных нейронов, 16 скрытых, и 3 выходных. На входе единички и нолики, представляющие собой True и False, и три выходных нейрона, один выдаёт результат логической операции XOR, второй AND, третий OR. Тренируется сеть меньше, чем за 1000 эпох (если увеличить количество нейронов в скрытом слое, то ещё быстрее).

import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

model = tf.keras.Sequential()
model.add(layers.Dense(16, activation=’relu’))
model.add(layers.Dense(3))
model.compile(optimizer=’adam’, loss=’mean_squared_error’, metrics=[‘binary_accuracy’])

data = np.array([[0,0],[0,1],[1,0],[1,1]], “float32”)
labels = np.array([[0,0,0],[1,0,1],[1,0,1],[0,1,1]], “float32”)

model.fit(data, labels, epochs=1000)

print(model.predict(data).round())

Элементарщина же!

Осталось понять, чего прикольного теперь можно с этим сделать 🙂 Наверное, ничего — чтобы сделать что-то прикольное, надо поставить задачу и дать вводные 🙂 Разве что сделать нейронную сеть и запустить её наоборот, в генеративном режиме, предварительно скормив ей, например, музыку Моцарта в формате MIDI 🙂 Кстати, вполне реальная вещь, вот чувак кормил сеть Бахом: https://www.youtube.com/watch?v=SacogDL_4JU

Mirrored from Лабораторный Журнал №6.

Папа знает

Самыми умными людьми в истории человечества, наверное, были первобытные охотники-собиратели. При средней продолжительности жизни в 35 лет, в условиях частого голода, нерегулярного питания, человек должен был в кратчайшие сроки познать мир для того, чтобы выжить. Надо было знать повадки зверей (у всех разные), методы охоты на них, основы навигации, а также иметь способность мгновенно определять вид растений и грибов — съедобные ли, ядовитые? Выживали только умные. Остальные мёрли с голоду или же их задирал медведь.

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

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

Но зато отличат так сильно любимые нами ныне нейронные сети. А нейронные сети нынче работают везде, даже в телефонах. Скачал себе программу PictureThis (дают триал на три дня), теперь каждый выход на улицу с детьми обязательно сопровождается расспросами “папа, а что это за дерево?” И папа незамедлительно даёт ответ 🙂 Впрочем, хошь не хошь, а при помощи этой программы и сам начинаешь запоминать разные виды растений. Теперь я и сам без проблем отличу вереск от дикого винограда. Кстати, и для грибов такие программы тоже есть. Но в Алабаме с грибами хреново — хороших мало. Самый лучший гриб, который у нас есть — красный подберёзовик. Он редкий, и в 95% случаев червивый, зараза. Так что программу для определения грибов я использую в основном для того, чтобы понять, что за несъедобная хрень выросла у меня на заднем дворе.

Mirrored from Лабораторный Журнал №6.

Покупайте китайское

Где-то есть пост на русском, но я не нашёл. Вкратце — HiSilicon встраивает в свои устройства бекдоры: https://habr.com/en/post/486856/

Но опасения по поводу Хуавея, шпионящего за 5G трафиком через своё оборудование, совершенно необоснованны, да.

Mirrored from Лабораторный Журнал №6.

Про припой

Зачитал статью о нелёгком пути придумывания новых припоев для электроники в связи с практически тотальным запретом использования свинцовосодержащих сплавов. Не то, чтобы я считал, что это дико важно — сколько я там этого свинца поглощу, при моих-то объёмах, но всё же.

Если верить статье, то проблемы с бессвинцовым припоем по большей части были разрешены с изобретением припоя SN100C на основе олова, меди, никеля и германия. Мол, и смачивает не хуже старого доброго 60/40 (ПОС-60), и волосами не обрастает (кристаллы олова не формируются). Думаю, попробую. Ага. Во-первых, его можно найти с ОЧЕНЬ большим трудом. Я нашёл только на Маузере. Во-вторых, 60/40 стоит 15 долларов за фунт.

А припой из мацы и крови христианских младенцев SnCuNiGe — уже, японский бог, 100 монет без малого.

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

Mirrored from Лабораторный Журнал №6.

Ну чо, попатчимся?

Криптографические сопроцессоры (TPM) производства STM и Intel имеют уязвимость, используя которую можно вытащить из сопроцессора ключи шифрования. В том числе — и удалённо, по сети, т.к. криптографический сопроцессор используется в том числе при установлении TLS сессии. Потребуется, правда, быстрая сеть, т.к. возможность атаки сильно зависит от разницы во времени между посылками команд.

У меня сопроцессор производства Infineon, так что нужды патчиться у меня нет. Владельцы чипов Nuvoton тоже могут выдохнуть.

Просмотреть информацию о производителе cопроцессора на Винде можно при помощи утилиты tpm.msc. IFX — это Infineon. Про других не знаю.

https://www.zdnet.com/article/tpm-fail-vulnerabilities-impact-tpm-chips-in-desktops-laptops-servers/

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

Mirrored from Лабораторный Журнал №6.

Началось

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

Жульё использовало компьютер для того, чтобы эмулировать голос директора. “Директор” потребовал срочного перевода денег “вендору” в Венгрии. Компания потеряла 220 тысяч евро.

Подобные технологии уже демонстрировала Adobe. Или вот, у нас есть https://lyrebird.ai/, делающий всё то же самое. Нужна только запись голоса длиною не менее минуты, а дальше дело техники.

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

Mirrored from Лабораторный Журнал №6.

Про 42

Хотел написать про то, как мне лично было непонятно, чем так гордится группа исследователей Массачуссетского Технологического, которая нашла значения x, y, и z, при которых x3 + y3 + z3 = 42.

Набросал для расчётов свою прогу на Джаве. И не могу сказать, что она не работала. Она прекрасно работала для многих цифр, в том числе, и для любимого числа Шелдона Купера (73). Но дальше, имея на руках порядки полученных в MIT цифр для 42, прикинул вычислительную сложность, и охренел — т.к. решать данную проблему, как говорится, “в лоб” на самом ультрасовременном суперкомпьютере с его двумя сотнями петафлопсов с лихером придётся э…. не намного меньше, чем возраст наблюдаемой Вселенной.

Устыдился, пошёл читать про алгоритм, которым раньше было решено уравнение x3 + y3 + z3 = 33. Оказалось, что там, мягко говоря, очень не в лоб решали. Устыдился окончательно. Полезно вот так иногда, рожей об стол, для скромности и смиренности.

Mirrored from Лабораторный Журнал №6.