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

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

юмор

Ведроидноэ

В личную копилку под названием “Почему у меня больше никогда не будет ведроидного телефона” o_O

В некоторых штатах на телефоны с ОС Андроид автоматически было установлено приложение для отслеживания случаев ковидлы. Потому что Корпорация Зла заботится о своих пользователях!

Согласие пользователя? Нет, не слышали.

UPD: а вот и в дружественном журнале тоже отметили

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

юмор

Закончил чипирование

Вчера чипировался во второй раз. Пока — вообще без побочки. В первый раз башка раскалывалась, а на второй день были боли в мышцах. В этот раз вообще без последствий.

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

Чипировали на территории аэродрома города Бирмингем. Блин, там добрая половина самолётов до сих пор стоит зачехлёнными на приколе. Неприятно на такое смотреть. Самолёт должен летать и приносить деньги.

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

юмор

На чипизации

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

Кстати, с вакциной нае… в смысле, сказали неправду. Я думал, будут колоть Модерну — оказался Пфайзер. Впрочем нам, чипируемым, конечно, всё равно по большому счёту.

Побочки пока нет никакой. Колят в плечо, оно немного саднит только.

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

юмор

Вкалывают роботы

“До чего дошёл прогресс! Труд физический исчез.” К сожалению, не весь.

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

Но поговорить я всё же хотел не о жёнах. А о роботах-уборщиках.

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

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

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

Покупкой чрезвычайно доволен. Пылесос iRobot серии i7, швабра — iRobot Braava m6. Плюс базы-зарядки для обоих. Последнее особенно удобно для пылесоса — оно самостоятельно опорожняет пылесос в специальный мешок. Раз в два месяца этот мешок выбрасываешь и всё. Никаких опорожнений бачка пылесоса вручную.

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

Про печки

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

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.