Как стать автором
Обновить

Разработка приложений для Apple Watch (iPhone и iPad) с помощью Wolfram Language (Mathematica)

Время на прочтение 10 мин
Количество просмотров 15K
Всего голосов 24: ↑21 и ↓3 +18
Комментарии 22

Комментарии 22

Wolfram в очередной раз удивил — буквально пара строк кода и небольшое полезное приложение готово! Записал себе в таск-лист поизучать эту штуку.

Роман, если позволите, несколько вопросов:
1) Откуда Wolfram берет картографические данные? Я сравнил карты — вроде не с Bing/Google/Yandex.
2) Когда планируется запуск Data Science Platform и Discovery Platform (и Finance Platform)?
1) Сами карты основаны на OpenStreetMap, но весь функционал — разработка Wolfram Research.
2) Finance Platform уже выпущена довольно давно. Про Data Science Platform и Discovery Platform пока что нельзя сказать точно. В этом году, безусловно, релиз должен быть. Произойдет он, по-видимому, сразу после перехода Wolfram Cloud из бета-версии в продакшн.
Все это, конечно, круто и недооценено. У Вольфрама впечатляет портируемость стандартов: приложения для часов — а вот они в браузере. Хотя сайт в силу своей навороченности страдает глючностью — в моем Хроме страница www.wolframcloud.com/objects/c9576832-bd9a-4dd8-a9ed-7e8cccdf2b9a отображается косо-криво.

В связи с автоматизацией приходит на ум сервис IFTTT — вот бы их скрестить. Хотя пока понятия не имею, что с этого можно поиметь.

И вообще все эти вылазки Wolfram как бы навстречу конечному пользователю выглядят вяло. Сухонько как-то. Хочется сказать — продолжайте и дальше продавать свой sophisticated stuff технологическим компаниям.

Но если я не прав, может нашим стартапостроителям стоит на это обратить свой взор? Если эта штука (я в целом про Wolfram Language) будет достаточно надежной, чтобы на нее можно было положиться стороннему сервису, что-нибудь да должно быть можно сообразить из всего этого зоопарка возможностей.

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

В посте «Компания Wolfram Research открыла сервис Tweet-a-Program» 8-месячной давности Вольфрам предвкушал:
И теперь я с нетерпением жду того, чтобы посмотреть что вы все сможете сделать в этом сервисе. Какие виды вещей будут созданы? Какие виды коротких кодов станут популярны? Кого вдохновят эти короткие программы? Какие задачи будут предложены и решены? Какие соревнования будут открыты и какие призы будут разыграны? И какие великие «актеры» и «поэты» появятся в этом мире кода?
Ну так что, много дельного с тех пор появилось на свет?
Идеальный DSL (предметно ориентированный язык).
Интересно, можно ли использовать Wolfram Language как встраиваемый язык в приложение?
Я бы не согласился, что Wolfram Language относится только к DSL. Это язык общего назначения, который также покрывает огромное количество предметных областей. В языке Wolfram Language выделяют Базовый подъязык — на основе него строятся все остальные подъязыки, скажем, Геометрический подъязык, Графический подъязык и пр. Но все подъязыки образуют цельный и отлаженный язык.

Что касается встраивания. Тут есть много возможностей. Можно обращаться к ядру Wolfram через MathLink, можно использовать интеграцию с C, Java, R, Matlab. А можно встраивать любые коды в практически любое приложение через API (APIFunction), EmbedCode с помощью Wolfram Cloud.
НЛО прилетело и опубликовало эту надпись здесь
Для этих целей служит, по сути, FormFunction.
А почему код в математике обычно оформляется «как попало», без адекватного style guide? Здесь тоже, например:
image
Отступы, переносы строк, структура — всё без видимой логики. И не только здесь, на хабре, но и почти везде где замечал код на Mathematica. В других языках как-то принято более аккуратно и понятно писать, пусть это и займёт в два раза больше строк. Особенно, кстати, это важно как раз для таких туториалов, которые рассчитаны на незнакомого с языком человека — очень сложно понять, что конкретно тут происходит, хотя я пару лет назад немного смотрел Mathematica.

Ну и, опять же по сравнению с другими языками, много что выглядит не логично. Названия функций, Mod[a, b] вместо a % b, смесь из знаков равенства, двух видов стрелок ("->" и односимвольных) — в чём между ними разница, не ясно. Зачем было делать язык настолько сильно отличающимся от привычных всем?

Ещё не понятно, работают ли такие приложения без интернета?
Я могу говорить лично за себя и многих моих знакомых, но код читается легко. Для тех, кто привык к Python, скажем, код будет читать по-началу действительно не просто. Однако, для тех, кто хочет «структурированный» код, можно делать и такой в ячейках со стилем Code, а не Input.

Концепция и устройство языка мне представляется на самом деле самым логичным из всех. Все структуры языка представляют собой символьные выражения, абсолютно все является функциональной конструкцией, скажем, тоже выражение a+b в полной форме будет иметь вид Plus[a,b]. Сам документ также является функциональной конструкцией, на самом деле, базирующейся на основе связки, в основном, Cell + Notebook.

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

Думаю, вам будет полезно посмотреть видео (а также другие, приведенные на странице habrahabr.ru/company/wolfram/blog/244451):



Что касается приложений, основанных на Wolfram Cloud, естественно, без интернета они работать не будут. Однако, можно сделать их standalone версию на основе Mathematica и CDF Player.
Дожили, без интернета проги не пашут) Кому они нужны тогда, если они лезут в очередной cloud чтоб там что-то делать, чтоб банально выбрать одну из двух картинок сторон монетки (сгенерить рандомное число и показать одну из картинок). Это получается «из пушки по воробьям».
Вы прочили мой ответ?

Программы размещенные в облаке естественно без облака не работают. Для того, чтобы они работали на стационарном компьютере нужно просто сохранить те же самые программы в виде документов Mathematica или формата CDF, созданного специально для работы без Mathematica, т. е. в виде standalone приложений.
"Wolfram Language на самом деле один из самых старых языков программирования и поэтому он имеет свой собственный вид с минимумом сторонних влияний" — Роман, это заблуждение. WL — достаточно молодой язык, существенно моложе многих (Fortran, Lisp, C, APL, SmallTalk, etc), и он безусловно был создан под влиянием идей по крайней мере Lisp, APL, Fortran и C.
"Большинству людей, как показывает опыт Русскоязычной поддержки, после детального знакомства с Wolfram Language, обычно как раз другие языки программирования кажутся странно и нелогично устроенными." Проблема в том, что для того, чтобы такое суждение было обоснованным, требуется не менее детальное знакомство с внутренним устройством тех других языков, плюс серьезный общий опыт решения различных задач программирования в разных языках. Очень многие языки программирования имеют превосходный дизайн (навскидку — С, Scheme, Python, Haskell, и др.). Некоторые внешние странности других объясняются их определенной «заточенностью» и областью применения.

Я согласен с тем, что многие идеи, заложенные в Mathematica, делают ее достаточно мощным и гибким языком, но этим свойством обладают и другие языки (Lisp, Haskell, etc). И если мне скажут, что в качестве языков общего назначения они более мощные, более логично устроенные и предоставляют больше возможностей (чем Mathematica), я не рискну с этим спорить, просто потому, что недостаточно компетентен для этого. Так же как Mathematica дает, с моей точки зрения, больше возможностей в других областях (формализация символьных вычислений). Языки — это инструменты, в общем случае их нужно выбирать под задачу, и тут вряд ли есть какой-то абсолют (хотя стремиться к нему — дело хорошее).
В дополнение напишу некоторые принципы языка Wolfram Language:
1) Все встроенные функции называются в соответствии с тем, что они делают в виде одного слова или устоявшейся фразы на английском языке.
2) Все встроенные функции начинаются с большой буквы.
3) В языке действует несколько типов скобок:
{ } — списки — коллекции объектов,
[ ] — аргументы функций записываются в квадратных скобках через запятую,
[[ ]] — двойные квадратные скобки — для выделения элемента списка или ассоциации
<| |> — ассоциации — встроенный формат баз данных в Wolfram Language на основе связки с Dataset.
4) Десятичная часть от дробной отделяется точкой.
5) Все числа, введенные с точкой по умолчанию имеют машинную точность.
6) Система по умолчанию старается решать любую задачу с абсолютной точностью (символьно).
7) Wolfram Labguage может решать задачи с любой точностью.
8) В большинстве функций реализован принцип максимальной автоматизации (NDSolve, Integrate, Manipulate, Classify и т. д.)
9) Любое выражение символьно. Все выражения представляют собой функции.
10) Система имеет минимум сайд-эффектов (за исключением отдельных функций), по умолчанию просто производя модификации над выражениями, не меняя их самих.
11) Система производит вычисления базируясь на правилах замены, которые в короткой форме имеют вид -> или отсроченных правилах замены :>.
12) Все функции и их опции максимально стандартизованы и подогнаны под общий стандарт Wolfram Language, что делает язык очень цельным.
Re: «почему оформляется как попало» — Вы просто вероятно не видели много профессионально написанного кода в Mathematica / WL. Я не претендую на истину в последней инстанции, но можете глянуть, например:

LazyTuples

или

CodeFormatter

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

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

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

Разработка больших приложений на Wolfram Mathematica / WL

я в частности говорил об этих моментах (гранулярность кода).

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

Кстати, в дополнение — один из примеров, что я привел выше (CodeFormatter), как раз и появился на свет из-за того, что лично меня (и не только) не устраивала ситуация с плохо оформленным кодом, и хотелось автоматизировать процесс форматирования (сделать pretty-printer). К сожалению, у меня пока что не было времени, чтобы полностью довести CodeFormatter до ума, хотя во многих случаях он работает очень неплохо. Более подробное его описание и пара screenshots есть тут:

Programmatic formatting for Mathematica code — possible?
Re: «зачем было делать язык настолько отличающимся» — этот вопрос выдает, что задавая его, Вы мыслите как программист mainstream языков (не в обиду сказано). Программирование, по своей сути, это способ формализации определенных действий, для последующей автоматизации их с использованием компьютеров. Вопрос лишь в том, что мы автоматизируем.

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

Язык Wolfram Mathematica оптимизирован под формализацию и автоматизацию, прежде всего, некоторых процессов нашего (человеческого) мышления и работы. Изначально, его основная цель была автоматизация работы ученых в точных науках. Сейчас область применения намного шире, и мне нравится определение Андрея Макаренко «система автоматизации интеллектуального труда». Процесс мышления человека достаточно сильно отличается от процессов, происходящих в промышленных системах — по крайней мере в аспекте его автоматизации. В этом, если хотите, философская составляющая моего ответа на Ваш вопрос.

Если вернуться к программированию, но начать смотреть на менее известные в mainstream (хотя это сейчас меняется) языки, в частности функциональные языки программирования — то Вы увидите, что у Mathematica с ними весьма много общего (возьмите например диалекты Lisp). Это не случайно. Абстракции, предоставляемые функциональными языками — и в частности, возможности метапрограммирования — не что иное, как средства автоматизации труда самого программиста (помимо средств имплементации). Более «привычные» языки не позволяют автоматизировать повторяющиеся действия самого программиста дальше определенного уровня, поэтому появляются монстры вроде шаблонов проектирования, Generics и иже с ними.

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

Что тут можно ответить — наверно, каждому свое. Mathematica, как и Lisp, дает в руки программиста дополнительные мощные возможности писать программы по-другому, быстрее и продуктивнее, и получать код лучшего качества. Они платят за это своей некоторой «необычностью». Вы можете либо оценить эти новые возможности и научиться ими пользоваться, либо отмести их как несущественные для Вас и пользоваться тем арсеналом, к которому Вы привыкли. Думаю, это выбор глубоко индивидуален и тут нет единого правильного ответа. Кроме того, это зависит еще и от поставленных задач. Лично я предпочитаю функциональные языки (хотя работаю на всяких, включая C, Python, js, Java, Mathematica и еще несколько).
А под android такое планируется?
Уже есть.
А ссылку можно попросить? В маркете не нашёл
Спасибо большое
Зарегистрируйтесь на Хабре , чтобы оставить комментарий