Wolfram Programming Cloud (Облако Программирования Wolfram) теперь доступно

http://blog.wolfram.com/2014/06/23/wolfram-programming-cloud-is-live/
  • Перевод

Перевод поста Стивена Вольфрама (Stephen Wolfram, CEO Wolfram Research).
Оригинал поста: Wolfram Programming Cloud Is Live!


Двадцать шесть лет назад в этот самый день мы выпустили Mathematica 1.0. И я очень рад, что сегодня тоже станет историческим днем: мы выпускаем Wolfram Programming Cloud (Облако программирования Wolfram) — первый объект в линейке продуктов, основанных на новом Wolfram Language (Языке программирования Wolfram).

Wolfram Programming Cloud

Моей основной целью в работе с Wolfram Language, и Wolfram Programming Cloud в частности, было переопределение процесса программирования, максимально возможная автоматизация всего, что возможно, для того, чтобы человек мог выразить все, что он хочет сделать, с достаточной ясностью и простотой, а все тонкости того, как это выполнить делались автоматически.

Я работал над этой концепцией последние 30 лет, постепенно надстраивая необходимый набор технологий, сначала в Mathematica, затем в Wolfram|Alpha, а теперь все это представлено в законченном виде в Языке Wolfram. Язык Wolfram, как я рассказывал ранее, является новым типом языков программирования — это язык программирования, основанный на знаниях, философия которого заключается в том, чтобы включить в язык настолько много знаний, насколько это возможно, таким образом, чтобы при этом все была автоматизировано настолько, насколько это возможно.

Облако программирования Wolfram — это приложение Языка Wolfram, которое специализировано для программирования, разработки и развертывания облачных программ.

Как же оно работает? Вы можете выяснить это самостоятельно! Начать работу с ним крайне просто. Просто зайдите в Wolfram Programming Cloud из любого браузера под своим именем и нажмите New. Вы получите то, что мы называем блокнотом (ноутбуком) (да, мы ввели их уже более чем 25 лет назад для системы Mathematica). После этого вы можете просто начать вводить код.

Type code in Wolfram Programming Cloud

Все в этом документе интерактивно. Когда вы ввели что-то, вы можете сразу же вычислить это и увидеть результат непосредственно в блокноте.

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

Для начала, вам следует использовать встроенные возможности Языка Wolfram в области машинного обучения — применить функцию-классификатор языка:

Wolfram Language has a built-in machine-learning classifier

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

Find the largest country that speaks a given language

Теперь мы можем получить её флаг:

Find the country's flag

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

Notebooks in the Wolfram Programming Cloud let you mix text, code, and more

Мы, очевидно, только что сильно использовали то, что Язык Wolfram основан на знаниях. Теперь давайте представим, что мы хотим сделать некий графический объект — картинку — в которой мы программно наложим код языка на флаг страны.

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

Image processing function to put a language code on a flag

Теперь мы можем протестировать эту функцию:

Testing the labeled-flag function

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

Итак, мы имеем функцию, которая что-то выполняет. Что мы можем сделать с ней теперь? Одна из самых больших особенностей Wolfram Programming Cloud заключается в том, что оно позволяет нам использовать Wolfram Language для того, чтобы сделать развертывание этой функции в облаке.

Один из способов, которыми мы можем сделать это — сделать Web API. И это очень просто в Языке Wolfram. Мы просто создадим символьную функцию API — после чего поместим её в облако:

Specify a symbolic API function and deploy it to the cloud

Теперь если мы вызовем эту API функцию из любого места в Интернете перейдя по соответствующему URL, наш код на Языке Wolfram будет выполнен в Облаке Wolfram и мы получим результат в том месте, откуда мы вызывали API функцию, в данном случае в виде PNG-изображения:

ay "bonjour," get a French flag

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

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

Deployment code for the computed number of minutes until sunset

Каждый раз, когда вы будете посещать этот URL, вы получите число в виде небольшого текстового фрагмента. (Вы можете также получить результат, скажем, в формате JSON или во множестве других форматов.)



Вы также можете создать, скажем, веб-страницу, на которой отображался бы обратный отсчет до заката, который автоматически обновлялся каждую секунду:

Deploy a counter for the number of seconds until sunset

How many seconds until sunset?

Вы спросите «Как насчет форм ввода?». Создавать их также очень просто. Скажем, код ниже создает форму, которая генерирует карту заданной локации с отмеченным на ней диском заданного радиуса:

A line of code makes a web form to generate maps marked with disks

Вот полученная форма ввода:

The map-generating form deployed on the web

И результат, полученный после вычислений:

A map with a two-mile disk centered on the Empire State Building—it's that easy

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

OK, но в этом месте профессиональные программисты могут задаться вопросом: “Это все замечательно, но как я могу использовать все это в своей среде?”. Ответ — мы приложили немало усилий, для того, чтобы это было просто. Например, скажем для форм, Язык Wolfram имеет крайне прозрачный механизм, позволяющий вам встраивать их в произвольные XML шаблоны, а также настраивать их внешний вид и функционал так, как вам это нужно.

Когда вы работаете с API, Облако Программирования Wolfram позволяет вам легко создавать “код встраивания” для вызова API из любого стандартного языка программирования:

Embed code for calling an API from any standard language

Вскоре также просто будет развертывать объекты облака и в мобильных приложениях. В будущем появятся Embedded Wolfram Engines (Встраиваемые Движки Wolfram) и другие вещи.

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

Но гораздо более важным является то, что вся концепция Языка Wolfram, как я зыка основанного на знаниях, делает впервые возможными такие вещи в программировании, которые было бы абсурдным ранее даже рассматривать. Пример из нашей собственной компании — благодаря Языку Wolfram нам удалось создать Wolfram|Alpha, сервис, который сейчас состоит уже из миллионов строк кода на этом языке.

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

Оно устроено так, что любой может просто зайти в веб-браузер и — бесплатно — начать писать коды на Языке Wolfram, и даже в небольших масштабах развертывать их в Облаке Wolfram. Для больших проектов также есть широкий диапазон возможностей — включая даже возможность получения своего собственного Wolfram Private Cloud (Частного Облака Wolfram) внутри своей организации.

Следует упомянуть, что вам нет нужды делать все в веб-браузере. Создание интерфейса блокнота для Облака Программирования Wolfram было очень не простой задачей и на сегодняшний день существуют определенные ограничения для этого, накладываемые современными веб-браузерами и инструментами. Но существует также и эквивалентная настольная версия Wolfram Programming Cloud — которая даст вам преимущества 25 с лишним лет интерфейсных разработок, проделанных нами для Mathematica и CDF

Wolfram Desktop

Это отлично — и часто удобно — иметь возможность использовать Облако Программирования Wolfram чисто в Интернете. Но, по крайней мере сейчас, вы получите наилучшие результаты и опыт от совмещения в своей работе настольного компьютера и облака, запуская родной Wolfram Desktop interface (Настольный Интерфейс Wolfram), соединенный с Облаком Wolfram. Что на самом деле потрясающе, так это то, насколько все вместе хорошо соединено, что вы можете без каких-либо усилий передавать блокноты между облаком и настольным компьютером.

Я создал в свое время несколько достаточно сложных программных систем. Но Wolfram Programming Cloud это самое сложное из того, что я когда-либо видел. Конечно, оно основано на огромном стеке технологий Языка Wolfram, но коллекция взаимодействий, которая происходит в Облаке Программирования Wolfram между ядром Языка Wolfram, Wolfram Knowledgebase (Базой Знаний Wolfram), Системой Понимания Естественного Языка Wolfram, Облаком Wolfram и всеми видами других подсистем является удивительно сложной.

Еще есть, конечно, шероховатости (и, пожалуйста, не стесняйтесь рассказывать нам о них!). Многие вещи будут, скажем, сделаны более эффективными и быстрыми. Но я очень доволен тем, что мы сегодня выпускаем под именем Wolfram Programming Cloud.

Итак, если вы захотите попробовать Облако Wolfram, что же вам следует сделать? Во-первых, зайдите в Wolfram Programming Cloud в Интернете:

Wolfram Programming Cloud on the web

Ниже приведены два видео для быстрого старта (на русском языке):





Вы также можете воспользоваться Галереей Примеров. Или перейти в блокнот Вещи, которые стоит попробовать — и начать запускать примеры кодов на Языке Woflram непосредственно в Облаке Программирования Wolfram. Если вы опытный программист, я настоятельно рекомендую вам перейти к Быстрому введению для программистов:

The Wolfram Language: A Fast Introduction for Programmers

Это поможет вам быстро усвоить основные принципы и понятия Языка Wolfram, и быстро дойти до уровня, когда вы сможете легко читать большие программы на Языке Wolfram и просто начать «расширять свой ​​словарный запас» среди его примерно 5000 встроенных функций:

Function categories for the Wolfram Language

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

Для меня это было долгое путешествие. Но сегодня я невероятно взволнован, начиная новую главу в своей жизни, а также тем, что я имею возможность увидеть то, что люди смогут делать вместе с Языком Wolfram и Облаком Программирования Wolfram.
Wolfram Research 76,27
Wolfram Language, Mathematica, Wolfram Alpha и др.
Поделиться публикацией
Комментарии 19
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      А вот wolframalpha показывает самую маленькую страну. Точно все правильно вводите?
      www.wolframalpha.com/input/?i=Smallest+Country%5BFlag%5D
      • +5
        Безусловно, пока что еще не все опции добавлены к функциям Entity и EntityClass. Это принципиально новые и очень мощные объекты в языке, которые строятся на прямом обращении к базам Wolfram|Alpha и курируемым базам Wolfram и здесь не нужно путать все же язык и базы данных Wolfram|Alpha, которые очень обширны на самом деле. Однако, ничто не мешает вам создавать что-то свое:



        При этом использование встроенных баз данных может быть очень сложным:



        И уж точно за многие годы работы с Wolfram Language я понял и прочувствовал, что все функции в ядре берутся не случайно, а действительно надстраивают по кирпичику общее «здание», делая множество новых вещей очень простыми в реализации.
      • +1
        Попробовал сейчас этот Cloud, почти любой запрос (банально узнать погоду в определенном городе) отваливается с ошибкой «Available session memory for your plan exceeded. Upgrade to increase your allowed session memory.».

        И непонятны лимиты: на бесплатном тарифе указан лимит «100 Wolfram|Alpha API calls/month», на максимальном плане — 10 000 этих запросов. По моим представлениям, у подобного сервиса такие ограничения должны быть в сутки, а не в месяц :)))
        • 0
          Имеется ввиду запрос с генерацией полного отчета Wolfram|Alpa или через функцию WolframAlpha. Так что если вы хотите полные отчеты — вы можете их получить сколько угодно бесплатно просто на сайте Wolfram|Alpha. Если у вас все строится на обращениях к Wolfram|Alpha, то для вас подойдет последняя колонка прайс-листа, менеджеры подберут для вас нужную цену, адекватную вашему проекту. Так что в целом прямых обращений к Wolfram|Alpha более чем достаточно.
        • 0
          Кстати, оставлю здесь баг-репорт. Взял студенческую подписку на Wolfram|Alpha Pro. В качестве средства платежа указал PayPal. Система попыталась автоматом сделать подписку на месяц. Отменил в течение минуты после оплаты.
          Результат: PayPal сообщил, что деньги перечислены не были из-за подписочной схемы. Вольфрам работает в Про версии, хотя деньги зачислены не были. Мне как-то даже неудобно. Бесплатный месяц это мило, но нечестно.
          • 0
            Спасибо за то, что сообщили, информация передана менеджерам.
          • +1
            Еще есть, конечно, шероховатости (и, пожалуйста, не стесняйтесь рассказывать нам о них!).
            Ok. Все ваши сайты и подсайты просто ужасно выглядят на ретине.
            • 0
              10 минут пробовал получить публичную ссылку на интерактивный скрипт — не получилось. У меня кривые руки?
              • 0
                Не могли бы вы привести код, который вы вводили в документе Wolfram Programming Cloud?
                  • 0
                    Все отлично работает. Важно понимать, что код автора не полный — требуется задать параметризацию поверхности — функции X, Y, Z.
                    Также должен сказать что код прямо скажем, не хороший, он совершенно не оптимален, его можно сильно улучшить.

                    • 0
                      Да нет же, внутри всё работает. Я не могу получить публичную ссылку на скрипт (с возможностью ввода). Или это невозможно в принципе?
                      • +1
                        Ок. Код такой (скопирован из моего облака напрямую):

                        CloudDeploy[FormFunction[{"X"->"String","Y"->"String","Z"->"String"},
                        Module[{},
                        ToExpression[{"X[u_,v_]:=" <> #X, "Y[u_,v_]:=" <> #Y,"Z[u_,v_]:=" <> #Z}];
                        Conductor[P_] := Block[{u = P[[1]], v = P[[2]]},{X[u,v],Y[u,v],Z[u,v]}];
                        RangeV = {0, 1}; (*Предел изменения параметра v*)
                        RangeU = {0, 1}; (*Предел изменения параметра u*)
                        SquareC[uu_, vv_] :=
                        Norm[Cross[D[ Conductor[{u, v}], u],D[ Conductor[{u, v}], v]]] /. {u -> uu, v -> vv};
                        ConductorCharge = 1;
                        USCoefficient = 1;
                        NumU = 20;
                        NumV = 20;
                        NumberOfPoints = NumV*NumU;
                        PositionsOfCharges =
                        Flatten[Table[{RangeU[[
                        1]] + (RangeU[[2]] - RangeU[[1]])/NumU*(i - 0.5),
                        RangeV[[1]] + (RangeV[[2]] - RangeV[[1]])/NumV*(j - 0.5)}, {i, 1,
                        NumU}, {j, 1, NumV}], 1];
                        PositionsOfPoints =
                        Flatten[Table[{RangeU[[
                        1]] + (RangeU[[2]] - RangeU[[1]])/NumU*(i - 0.5001),
                        RangeV[[1]] + (RangeV[[2]] - RangeV[[1]])/NumV*(j - 0.5001)}, {i,
                        1, NumU}, {j, 1, NumV}], 1];
                        Separation[P1_, P2_] := Conductor[P1] - Conductor[P2];
                        GetDistribution := Module[{i},
                        B = ConstantArray[0, NumberOfPoints];
                        B[[NumberOfPoints]] = ConductorCharge;
                        M = Table[
                        USCoefficient/
                        Norm[Separation[PositionsOfCharges[[j]],
                        PositionsOfPoints[[i]]]], {i, 1, NumberOfPoints}, {j, 1,
                        NumberOfPoints}];
                        For[i = 1, i <= NumberOfPoints, i++,
                        M[[i]] = M[[i]] - M[[NumberOfPoints]]];
                        M[[NumberOfPoints]] = ConstantArray[1, NumberOfPoints];
                        Q = LinearSolve[M, B];
                        ];
                        ShowConductor :=
                        ParametricPlot3D[
                        Conductor[{u, v}], {u, RangeU[[1]], RangeU[[2]]}, {v, RangeV[[1]],
                        RangeV[[2]]},ImageSize->400];
                        ShowDistribution := Module[{A, i, j},
                        A = {};
                        For[i = 1, i <= NumU, i++,
                        For[j = 1, j <= NumV, j++,
                        A = Join[
                        A, {{RangeU[[1]] + (RangeU[[2]] - RangeU[[1]])/NumU*(i - 0.5),
                        RangeV[[1]] + (RangeV[[2]] - RangeV[[1]])/NumV*(j - 0.5),
                        Q[[NumV*(i - 1) + j]]}}]
                        ]
                        ];
                        ListPlot3D[A, AxesLabel -> {"U"*NumU, "V"*NumV, "Sigma"},ImageSize->400]];
                        ShowRealDistribution := Module[{A, i, j},
                        A = {};
                        For[i = 1, i <= NumU, i++,
                        For[j = 1, j <= NumV, j++,
                        A = Join[
                        A, {{RangeU[[1]] + (RangeU[[2]] - RangeU[[1]])/NumU*(i - 0.5),
                        RangeV[[1]] + (RangeV[[2]] - RangeV[[1]])/NumV*(j - 0.5),
                        Q[[NumV*(i - 1) + j]]/
                        SquareC[RangeU[[
                        1]] + (RangeU[[2]] - RangeU[[1]])/NumU*(i - 0.5),
                        RangeV[[1]] + (RangeV[[2]] - RangeV[[1]])/NumV*(j - 0.5)]}}]
                        ]
                        ]];
                        Grid[{{ShowConductor},{GetDistribution},{ShowDistribution}}]
                        ]&,"PNG"]]
                        


                        Результат:



                        • 0
                          Спасибо за помощь. Нужно будет лучше изучить специальные облачные функции.
              • 0
                Я не очень в теме, поэтому могу задать тупые вопросы, не судите строго.
                Совсем немного почитал и посмотрел о ПО и сервисах вольфрам и заинтересовался.
                Собственно, вопросы:
                1. Могу ли я дополнять, расширять базы знаний вольфрама и создавать свои?
                2. Если да, то эта функциональность доступна и локально и в облаке?
                3. Можете привести небольшой пример к выведанным вопросам или дать ссылку на подобный пример?
                4. Базы знаний доступны только онлайн?
                5. Есть ли какие-то сравнения производительности вольфрама по сравнению с другими языками?
                6. Есть ли у языка что-то вроде лайт-версии?
                • +1
                  Могу ли я дополнять, расширять базы знаний вольфрама и создавать свои?

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

                  Если да, то эта функциональность доступна и локально и в облаке?

                  Да.

                  Можете привести небольшой пример к выведанным вопросам или дать ссылку на подобный пример?

                  Скажем, вот один из примеров, реализованных Леонидом Шифриным.

                  Базы знаний доступны только онлайн?

                  Нет. Многие базы доступны офлайн, правда требуют однократной подгрузки. Думаю, понятно, что если бы все было доступно офлайн, то система весила бы несколько сотен терабайт. К тому же вы можете (см. ответ к предыдущему вопросу) закачивать данные и помещать их в мгновенно подгружаемые дампы Mathematica.

                  Есть ли какие-то сравнения производительности вольфрама по сравнению с другими языками?

                  Встроенные функции работают либо примерно как C, либо в пару раз медленнее. Ясно, что язык Wolfram — язык сверхвысокого уровня и он просто не может часто сравниться напрямую по производительности с низкоуровневыми языками, это ясно. Но, надо понимать, что в язык Wolfram вы можете подгружать куски кода на другом языке, скажем C, Java, R; использовать мощное распараллеливание, CUDA, OpenCL.
                  Язык Wolfram идеален для многих задач, одно из таких направлений — любые R&D, когда необходимо налету все менять, использовать метапрограммирование и пр.
                  Также язык Wolfram в смысле длины кода если не самый, то уж точно один из самых коротких: вот скажем сравнение 13 языков с Wolfram.

                  Есть ли у языка что-то вроде лайт-версии?

                  Нет, это противоречит концепции языка Wolfram. Если вы хотите, то Wolfram делает на заказ «урезанные» версии ядра, правда это дорого и по сути бессмысленно.
                  • 0
                    Спасибо за ответы, поставил себе триал-версию математики — буду разбираться.
                    • 0
                      Язык терпимый по сложности. Я врач, но для своих нужд я со скрипом и мануалами смог разобраться. Построил красивые графики, потыкал тестами типа Манна-Уитни в данные. Очень изящная концепция. После расчетов в Excel словно праздник.

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

                Самое читаемое
                Интересные публикации