`

СПЕЦИАЛЬНЫЕ
ПАРТНЕРЫ
ПРОЕКТА

Архив номеров

Как изменилось финансирование ИТ-направления в вашей организации?

Best CIO

Определение наиболее профессиональных ИТ-управленцев, лидеров и экспертов в своих отраслях

Человек года

Кто внес наибольший вклад в развитие украинского ИТ-рынка.

Продукт года

Награды «Продукт года» еженедельника «Компьютерное обозрение» за наиболее выдающиеся ИТ-товары

 

Андрей Зубинский

Шутка с рабочей станцией в кармане. И первая "драка" в IoT

+1111
голосов

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

Начну издалека. В конце 1960х годов в Массачусетском Технологическом на деньги ARPA (Advanced Research Projects Agency), минобороны и министерства энергетики США всерьёз занялись машинной алгеброй – системами символических вычислений. Оригинальная идея принадлежала Марвину Мински. Из этих исследований возникли несколько знаменитых сегодня коммерческих систем (до сих пор не изменивших названия, например, Mathlab). Такой системой является и Macsyma (Project MAC’s SYmbolic Manipulator), первоначальным автором которой был Джоэл Мозес. Уже в 1963 году существовала программа символьной интеграции (SAINT), но, естественно, она была далека до совершенства. В то время символьные вычисления ещё не были вынесены в отдельный раздел «computer science» и относились к искусственному интеллекту. Кто интересуется историей IT, должен уже сообразить, что в основе всего этого был тогда считавшийся «языком ИИ» знаменитый Lisp, и до сих пор эта технологическая основа Macsyma остаётся незыблемой. В 1968 году была создана архитектура ядра системы, через год появился работающий код, причём «обкатывался» он на той самой DEC PDP, которая стала одним из первых хостов ARPANET. Потом система развивалась в среде ОС Multix, и длилось это очень долго, до 1980-х годов. Тогда появились доступные (по меркам времени и организационных структур) VAX’ы, систему портировали в ОС Unix, вместе с этой ОС пришла и «форк-культура» (да, это было в ещё в 80х), появились независимые её ветки – Macsyma, Maxyma, Paramax, Aljbar, Vaxima. В это же время система стала «расползаться» по университетам, потом в её истории был период неудачной коммерциализации, ею занимались очень яркие специалисты, буквально «волочили её на себе» до последних своих дней, она обрастала разнообразными прикладными пакетами, приобретала новые подсистемы, в общем, жила своей жизнью. И живёт (за этот год – 4 релиза), у неё есть обширный круг пользователей и в наши дни, она портирована во все ОС, по ней море учебников, документации, статей. И, наконец, она добралась до ОС Android. Хоть порт для Android и специфический (представьте себе – система с почти 50-летней историей, исполняющаяся «железом» и ОС, о которых не могли и мечтать её авторы), но он обозначает некий новый виток в жизни системы. Потому что именно в нём наконец результаты вычислений отображаются не традиционно трудночитаемо на алфавитно-цифровом терминале, а так, как положено в математике (опытные пользователи Unix-систем знают возможность как добиться такого, но это далеко не так удобно и просто). В общем, сейчас, в карманном варианте, это даже трудно сказать что, я бы назвал карманную версию «гиперкалькулятором», но язык не поворачивается так поступить, хотя никто не запрещает систему именно так и использовать.

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

Итак, Maxima for Android, спасибо японцу Ясуаки Хонда. Программа устанавливается в 2 этапа – собственно почти 30-мегабайтный apk-файл после инсталляции загружает ещё 14+ MB «сутевой части», этот архив разворачивается в почти 90 MB (так что оценивайте возможности ваших устройств перед установкой).

Для использования этой программы рекомендую бесплатную клавиатуру Hacker’s Keyboard, совершенно не обязательно пользоваться ею всегда (для быстрой «писанины» куда лучше свайп-клавиатуры), но в этом случае она очень полезна. Для быстрого переключения между клавиатурами очень советую этот крохотный бесплатный виджет (он экономит море лишних раздражающих движений, совершенно гениальная мелочь, не утрачивающая актуальности с версии Android 2.3) - Switch Keys.

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

Шутка с рабочей станцией в кармане. И первая "драка" в IoT.

 
Попробуем выполнить самый простой «калькуляторный» пример, найдём сумму двух дробей, 1/100 и 1/101, посмотрим, что получается и разберём пример «по косточкам». Вводим первую «задачу» по принципу «как слышим, так пишем», но завершаем точкой с запятой: 1/100 + 1/101 ;

Шутка с рабочей станцией в кармане. И первая "драка" в IoT.
 
Точка с запятой – первый важный, условно говоря, «командный символ». Который можно и не использовать, Maxima (или Macsyma, как больше нравится) подставит его автоматически. Его назначение – указание системе вывести результат на экран. Если этого не требуется, строку следует завершить символом $.

Обратим внимание на выделенные зелёными прямоугольниками взятые в скобки похожие на «приглашения» командной оболочки строки формата (%i число). Это важные элементы взаимодействия с системой, по сути – имена переменных, которые система автоматически присваивает каждому «акту» взаимодействия с пользователем. Символ «i» в этих строках указывает, что это «ввод» (input), каждой введенной пользователем строке система ставит в соответствие неотображаемый в «мобильной» версии такой же идентификатор, с символом «o» вместо «i» (то есть, за %i1 следует невидимый идентификатор %o1, и так далее). Все эти идентификаторы могут использоваться в системе «на равных» с любыми прочими, укороченная форма (просто «%») означает результат последней выполненной команды.

Результат выполнения первой нашей команды представлен в виде дроби, но никто не запрещает нам увидеть его в десятичной форме, заодно и используем уже полученные знания об «идентификаторах»:

Шутка с рабочей станцией в кармане. И первая "драка" в IoT.

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

Шутка с рабочей станцией в кармане. И первая "драка" в IoT.

Целые числа в системе – произвольной точности, и если кто-то хочет по-настоящему устать «скроллить» экран, может попробовать, например, выполнить такую команду: sum (1/x^2, x, 1, 10000); И насладиться дробью с числителем и знаменателем кошмарных значений (пользователям слабеньких нонейм Android устройств не советую этого делать категорически; а функция sum делает вполне очевидное – находит сумму переданной ей первым параметром функции, по указанной вторым параметром переменной, в диапазоне значений переменной от третьего до четвёртого параметра, это вычислительно-символическая функция, она, грубо говоря, «считает если это возможно», в противном случае порождает символический результат):

Шутка с рабочей станцией в кармане. И первая "драка" в IoT.

Впрочем, «калькуляторные» возможности программы – дело десятое. Куда интереснее её способность выполнять символические вычисления, очень развитая, но и потенциально очень забавная. С этого и начнём, им и закончим (это же блог, а Macsyma сопровождается «всего лишь» 1076-страничным руководством).

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

Начнём с простого утверждения – для некоторых чисел «a» и «b» всегда есть такое «с», для которого выполняется равенство a+b=c. Его мы вводим по принципу «что видим, то и пишем» (на снимке экрана - идентификатор %i1):

Шутка с рабочей станцией в кармане. И первая "драка" в IoT.

Никто не запрещает нам одновременно умножить левую и правую части равенства на a+b, равенство от этого не изменится. Заодно «раскроем скобки» командой expand (идентификатор %i2). Синтаксис записи этого выражения вполне очевиден, если не забывать, что % - идентификатор последнего полученного результата.

Шутка с рабочей станцией в кармане. И первая "драка" в IoT.

Теперь добавим к левой и правой частям равенства то, что записано в строке ввода %i3. Обратите внимание на синтаксис этой записи, он демонстрирует полную свободу использования идентификатора %, единственный оператор «+» в записи является бинарным, то есть, слева и справа от него - операнды.

Шутка с рабочей станцией в кармане. И первая "драка" в IoT.

Разложим на множители левую и правую части получившегося равенства, для этого используется характерная в функциональном программировании функция map и собственно функция factor, которая, благодаря map, применяется ко всему, что указано в вызове функции (эта игра в «функциональщину» совершенно излишня в данном конкретном случае, она использована для иллюстрации, вполне можно обойтись вызовом factor(%)), процедура записана в строке i%4.

Шутка с рабочей станцией в кармане. И первая "драка" в IoT.

Теперь можно разделить обе части равенства на (c-b-a) (строка %i5), прибавить к левой и правой частям a (строка %i6) и получить что требовалось доказать:
b+a = 0

Шутка с рабочей станцией в кармане. И первая "драка" в IoT.

Потешная вышла игра с системой компьютерной алгебры с многолетней историей. Таких «фокусов» с машинной алгеброй на деле много, на практике они вовсе не означают непригодность систем к реальному использованию, просто напоминают, что экспертные системы в их основе требуют от пользователя здравого смысла и умения ставить перед довольно наивной (в данном примере – упорно «не помнящей», что «c» - вовсе не любое число, а строго равное сумме «a» и «b») системой правильные задачи. И, конечно, знаний самой системы, которая, несмотря на громадный по меркам индустрии возраст, остаётся очень полезной и даже, как видно, забавной.

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

Естественно, в системе можно «добраться» до уровня Lisp-машины и вообще «развлекаться» с Lisp-программированием, но это актуально разве что для серьёзных исследователей и собственно разработчиков Macsyma (программистам, предпочитающим развлекать себя подобными играми, Android предлагает наследника Lisp – Clojure, язык довольно и заслуженно популярный в определённых кругах).

Кажется, уже пора поговорить о чём-то совсем другом. Есть такой известный парадокс – несмотря на появление всякой компактной и мощной вычислительной техники, популярность легендарных программируемых калькуляторов Texas Instruments почему-то никуда не девается, их никто не снимает с производства, а стоят они как пристойный, например, планшет образца этого года (TI-89, например, порядка $150). Больше того. Кто-то видел уже снятые с производства, например, планшеты, которые стоят дороже новых? В мире программируемых калькуляторов TI это норма, культовые «аппараты» вроде TI-92 – это уже где-то $300 (цена Amazon), и их, трудно поверить, раскупают. И что может значить само формирование культа калькуляторов TI, а он ведь есть – целые клубы «фанатов», тематические сайты, сообщества, форумы, что угодно есть в загадочном мире этих загадочных калькуляторов.

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

Понятно, что могучие, необъятные и иногда неприятные при «абы как» использовании классические пакеты символьной алгебры расчётным инструментам не конкуренты. Понятно, но не очевидно. Огромные классы прикладных задач отлично решаются именно с помощью смешанных технологий расчётов (символьно-вычислительных), в том числе и небольших, постоянно повторяемых задач.

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

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

 Из забавного, «пятничного». Есть такая компания, FTD Chips, она производит довольно дорогие (по меркам компонентного рынка) USB-микросхемы (самые «ходовые» - конверторы USB в RS232), ориентированные на производителей с малыми и средними объёмами продукции. Микросхемы хорошие и очень популярные (потому что очень облегчающие жизнь разработчикам). Настолько популярные и недешевые, что китайские мастера подделок давно и успешно создали целую индустрию FTDI fake'ов (по сообщениям некоторых пользователей, до 90% приобретённых ими через ebay микросхем и «полуфабрикатов» на их основе - подделки). И тут наступил черный день. Очередное обновление USB драйверов FTDI Windows теперь «убивает» (сбрасывая идентификатор устройства в ноль) fake микросхемы, исключая их использование из ОС семейства Windows старше XP (в XP требуются определённые «фокусы»), и «наивное» использование из семейства Linux (без определённых манипуляций с системой). В итоге пострадали пользователи… неисчислимых клонов Ardiuno. Забавная история. Эпоха IoT ещё толком и не началась, а войны на самом низком, компонентном уровне, уже начались. А также историю можно вносить в списки ярких иллюстраций обратной стороны популярности при работе в условиях повышенных рисков в «длинном хвосте».

Откланиваюсь.

 

+1111
голосов

Напечатать Отправить другу

Читайте также

А концепция блокнотов (IPython) ? как альтернатива этим страшным картинкам в статье.

Есть такая компания, FTD Chips,

Андрей, "FTDI Chips".

 
 
IDC
Реклама

  •  Home  •  Рынок  •  ИТ-директор  •  CloudComputing  •  Hard  •  Soft  •  Сети  •  Безопасность  •  Наука  •  IoT