...

воскресенье, 3 мая 2015 г.

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


Перевод поста Стивена Вольфрама (Stephen Wolfram) "Instant Apps for the Apple Watch with the Wolfram Language".
Выражаю огромную благодарность Кириллу Гузенко за помощь в переводе.


Моя цель — с помощью Wolfram Language вывести программирование на новый уровень. И за прошлый год (см. статью на Хабрахабре "Стивен Вольфрам: Рубежи вычислительного мышления (отчёт с фестиваля SXSW)") мы расширили способы использования и развёртывания языка — на рабочем компьютере, в облаке, мобильных и встраиваемых платформах и т. д. А что по поводу носимых гаджетов? И, в частности, насчет Apple Watch? Несколько дней назад я решил посмотреть, что тут можно сделать. Так что я освободил свой день под это дело и начал писать код.

Идея заключалась в написании кода с помощью Wolfram Programming Cloud, но вместо создания веб-приложения или web API мне нужно было получить приложение для Apple Watch. И, что достаточно удобно — первая, предварительная, версия нашего Wolfram Cloud app теперь доступна в App Store:

Оно позволяет выгружать приложения из Wolfram Cloud сразу на iPhone, iPad и Apple Watch.



В каком-то смысле это было программирование с приключениями. Apple Watch только выходили, а Wolfram Cloud app было ещё лишь предварительной версией. Однако последние почти 30 лет я создавал продвинутую среду разработки Wolfram Language. И я рад отметить тот факт, что Вам не потребуется много времени, чтобы начать получать интересные приложения на Wolfram Language, работающие на Apple Watch. И менее чем за день работы — с помощью небольшой команды — я разработал 25 приложений, совместимых с часами:

Все эти приложения я создал пройдя несколько шагов — сначала программируя их в Wolfram Programming Cloud (на веб-сайте, либо в desktop версии), затем развертывая в Wolfram Cloud и подключаясь к Apple Watch через Wolfram Cloud app. И, хотя приложения были спроектированы для Apple Watch, Вы, фактически, так же можете использовать их через браузер или на телефоне. Есть ссылки на веб-версии приложений, которые представлены в данном посте. Чтобы получить эти приложения на Ваш телефон или часы, просто перейдите на эту страницу и следуйте инструкциям.

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

Мое первое приложение для Apple Watch


Так как всё это работает? Для первого раза работы с Apple Watch я решил написать простое тестовое приложение, которое выдаёт одно случайное число. Основной код на Wolfram Language для этой задачи весьма прост:

In[1]:= RandomInteger[1000]

Пускай на часах числа будут большими и жирными, и вообще, со случайным цветом:

In[2]:= Style[RandomInteger[1000], Bold, 30, RandomColor[]]

Мы можем всё это сразу же выгрузить в облако с помощью:

In[3]:= CloudDeploy[Delayed[Style[RandomInteger[1000], Bold, 250, RandomColor[]], "PNG"], Permissions -> "Public"]

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

Как же всё это отправить в Apple Watch? Во-первых, всё это должно попасть сперва на iPhone. И это легко. Потому что всё что Вы выгрузили в Wolfram Cloud, полностью доступно на iPhone через Wolfram Cloud app. Чтобы это приложение можно было легко найти, стоит добавить иконку и имя. И если в конечном итоге всё это будет работать на часах, то стоит разместить это на черном фоне:

In[4]:= CloudDeploy[Delayed[ExpressionCell[Style[RandomInteger[1000], Bold, 250, RandomColor[]], Background -> Black], "PNG"], "WatchApps/RandomNumber", IconRules -> WordCloud[RandomInteger[10, 20]]]

А сейчас, если Вы перейдёте по этой ссылке через браузер, Вы увидите там открытую версию приложения. Внутри Wolfram Cloud app на iPhone приложение появляется в папке WatchApps:

Deploy that RandomNumber app, and it will appear on your phone

Теперь, если нажать на иконку приложения, у Вас будет запускаться код Wolfram Language в Wolfram Cloud и снова будет выдано случайное число, отображаемое на телефоне:

The RandomNumber app works fine on the phone, but of course is sized for the Apple Watch screen

Если Вы хотите запустить приложение снова и получить новое случайное число, просто потяните вниз в верхней части экрана.

Чтобы получить приложение на часах, вернитесь к списку приложений и кликните на иконку часов в верхней части и выберите приложение. Это отобразит его на часах в списке тех приложений, которые связаны с телефоном:

That's all it takes to get the app onto your watch

Теперь просто кликните RandomNumber app. При этом в Wolfram Cloud запустится код Wolfram Language, а после отобразится случайное число на часах:

And here it is running on the watch--it's that easy

Случайные приложения


С Wolfram Language очень просто создавать всякие «случайные» приложения. Вот ключевая часть приложения по подбрасыванию монетки Coin Flip app:

In[5]:= RandomChoice[{image:heads, image:tails}]

Это всё, что нужно для развертывания приложения в интернете, на мобильных устройствах и часах:

In[6]:= CloudDeploy[Delayed[ExpressionCell[RandomChoice[{image:heads, image:tails}], Background -> Black], "PNG"], "WatchApps/CoinFlip", IconRules -> image:heads]

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

Как насчёт игры в камень-ножницы-бумага со своими часами? Основной код для этой задачи опять довольно простой:

In[7]:= RandomChoice[{image:rock, image:paper, image:scissors}]

Существует огромное количество знаний, встроенных в Wolfram Language — и где-то в дальнем углу есть знания, позволяющее очень просто создать приложение с выводом случайных покемонов Random Pokemon app:

In[8]:= EntityValue[EntityValue["Pokemon", "RandomEntity"], {"Image", "Name"}]

Вот как оно работает на часах:

Stats pop quiz: How many random displays will it take, on average, before you catch 'em all?

Давайте теперь попробуем что-то с более сложным кодом Wolfram Language. Вот, к примеру, изобретатель слов Word Inventor app, который создает слово из случайных гласных и согласных, чередуя их (полученные слова часто звучат как названия покемонов или каких-то технических стартапов).

In[9]:= vowels = {"a", "e", "i", "o", "u"}; consonants = Complement[CharacterRange["a", "z"], vowels]; Style[StringJoin[Flatten[Table[{RandomChoice[consonants], RandomChoice[vowels]}, {3}]]], 40]

Часы, которые показывают время


За неимением прочего, люди, предположительно, захотят пользоваться часами по их прямому назначению. И с тех пор, как мы находимся в современном мире с интернетом — даже в часах теперь не обойтись без пары-тройки котиков. Ниже представлен код Kitty Clock на Wolfram Language:

In[10]:= ClockGauge[Now, PlotTheme -> "Minimal", GaugeMarkers -> {image:graycat, image:orangecat, None}, Background -> Black, TicksStyle -> White]

А на самих часах это выглядит так:

You can has kitty clock...

С этими часами можно получать сумасшедшие вещи. По мотивам нашего недавнего (см. статью на Хабрахабре "3/14/15 9:26:53 Празднование «Дня числа Пи» века, а также рассказ о том, как получить свою очень личную частичку числа пи") и весьма популярного сайта My Pi Day, созданного в честь дня числа Пи, ниже представлен немного более сложный код для часов Пи, в которых текущее время отображается в контексте нахождения этих цифр в числе Пи:

In[11]:= pi = Characters[ToString[N[Pi, 65000]]]; time = Characters[DateString[{"Hour12", "Minute"}]]; pos = First[SequencePosition[pi, time]]; Style[Grid[Partition[Join[Take[pi, 14], Characters["..."], Take[pi, pos - {13, 1}], Style[#, Orange] & /@ Take[pi, pos], Take[pi, pos + {5, 4}]], 10], Spacings -> {0, 0}], 40, Background -> Black, FontColor -> White]

Или добавим ещё немного информации:

And now you can know exactly what digit of pi any time of day begins at

Где Вы находитесь?


Вы можете разрешить отслеживать с помощью GPS ваше текущее местоположение как в Apple Watch, так и на вашем телефоне для того, чтобы узнать Ваше местоположение. Это позволяет очень просто создавать приложения для геолокации Lat-Long app, которые показывают ширину и долготу Вашего местонахождения на часах (этот пример показывает координаты нашей штаб-квартиры):

In[12]:= Style[Column[{DMSString[Latitude[Here], {1, "NS"}], DMSString[Longitude[Here], {1, "EW"}]}], 30, White, Background -> Black]

Я не совсем уверен, что представленная ниже программа может быть чем-то полезной (доказать свое местонахождение через Skype?). Собственно, вот приложение Here & Now QR app, которое показывает Ваши текущие координаты и время в виде QR кода:

In[13]:= BarcodeImage[StringJoin[DMSString[Here], "|", DateString[Now]], "QR"]

Wolfram Language знает о многих вещах, и одна из них — география. Вот код, который позволяет найти 10 ближайших к Вам вулканов:

In[14]:= v = GeoNearest["Volcano", Here, 10]

Если добавить ещё немного кода, то они будут показаны на карте, а затем всё это дело можно собрать в приложение Nearest Volcanoes app:

In[15]:= GeoGraphics[{GeoPath[{Here, #}] & /@ v, GeoMarker[Here], GeoMarker[#, image:volcano-icon] & /@ v}, GeoRange -> 1.5 GeoDistance[Here, First[v]]]

Вот код приложения 3D Topography app, которое показывает трёхмерную масштабированную карту в радиусе 10 миль относительно Вашего местоположения:

In[16]:= ListPlot3D[GeoElevationData[GeoDisk[Here, Quantity[10, "Miles"]]], MeshFunctions -> {#3 &}, Mesh -> 30, Background -> Black, Axes -> False, ViewPoint -> {2, 0, 3}]

Данные, поступающие на устройство


Как только мы наладили связь с Wolfram Cloud, у нас появилась возможность использовать данные в реальном времени, которые содержатся в Wolfram Knowledgebase. Среди прочего, там есть данные о текущей позиции (x,y,z,t) Международной Космической Станции:

In[17]:= entity:International Space Station (satellite) ["Position"]

Учитывая мое местоположение и используя немного графики в Wolfram Language, можно создать МКС-локатор ISS Locator app:

In[18]:= Module[{pos, line, rise}, {pos, line, rise} = SatelliteData[entity:International Space Station (satellite), {"Position", "SatelliteLocationLine", "RiseTime"}]; Style[Labeled[GeoGraphics[{{Pink, AbsoluteThickness[3], GeoPath @@ line}, {Red, PointSize[.04], Point[pos]}, {Opacity[.1], Black, GeoVisibleRegion[pos]}}, GeoGridLines -> Automatic, GeoCenter -> pos, GeoRange -> "World", GeoProjection -> "Orthographic", ImageSize -> {272, 340 - 38}], Style[TemplateApply["Next rise: ``", NumberForm[ UnitConvert[DateDifference[Now, rise], "Minutes"], 3]], White, 20]], Background -> Black]]

В качестве другого примера использования данных реального времени, можно привести код приложения Apple Quanting app, которое выдает курс акций Apple:

In[19]:= Style[TradingChart[{"AAPL", DatePlus[-90]}, {"Volume", Style["MESASineWave", {RGBColor[1, 1, 1], RGBColor[0.46, 0.62, 0.8200000000000001]}], Style["BollingerBands", RGBColor[1, 1, 1]], Style["DoubleExponentialMovingAverage", RGBColor[1, 0.85, 0.21]]}, PerformanceGoal -> "Speed", Axes -> False, Frame -> False], Background -> Black]

Ниже приведён код приложения Market Word Cloud app, которое показывает символьное обозначение акций компании, размер которых задается согласно изменениям в цене за предыдущий день (сегодня курс акций Apple вырос, а курс акций Google упал):

In[20]:= WordCloud[With[{c = FinancialData[#, "FractionalChange"]}, Abs[c] -> Style[#, ColorData[{"RedGreenSplit", 0.01 {-1, 1}}, c]]] & /@ {"AAPL", "XOM", "GOOG", "MSFT", "BRK-A", "WFC", "JNJ", "GE", "WMT", "JPM"}, Background -> Black]

Ниже представлен полный код конвертации валют с учетом вашего текущего местоположения Currency Converter app/a>:

In[21]:= With[{home = $GeoLocationCountry["CurrencyUnit"]}, Style[QuantityForm[Grid[{#, "=", CurrencyConvert[#, home]} & /@ Cases[{Quantity[1, "USDollars"], Quantity[1, "Euros"], Quantity[1, "Yen"], Quantity[1, "BritishPounds"]}, Except[home]], Alignment -> Left], "Abbreviation"], White, Background -> Black, 30]]

С Wolfram Language совсем не сложно создавать самые разнообразные приложения. Вот код для приложения Sunrise/Sunset app, отображающего информацию о закате и рассвете там, где вы находитесь:

In[22]:= {Sunrise[], Sunset[]}

Настройка более удобного отображения для часов требует чуть больше кода:

In[23]:= With[{sunfmt = Style[DateString[#, {#2, " ", "Hour12Short", ":", "Minute", "AMPMLowerCase"}], 54] &, tfmt = Round[DateDifference[Now, #, {"Hour", "Minute"}], 5] &}, Rasterize@Style[Column[{sunfmt[Sunrise[], "rise"], tfmt[Sunrise[]], sunfmt[Sunset[], "set"], tfmt[Sunset[]]}, Alignment -> Right], FontSize -> 32, Background -> Black, White]]

Wolfram Language содержит данные о погоде, получаемыми в режиме реального времени:

In[24]:= AirTemperatureData[]

Которые мы можем отображать в виде красивых встроенных иконок:

In[25]:= IconData["AirTemperature", AirTemperatureData[]]

Вот данные о температуре за последнюю неделю:

In[26]:= AirTemperatureData[Here, {Now - Quantity[1, "Weeks"], Now}]

А если добавить немного кода, мы сможем представить это в виде приложения с графиком изменения температуры Temperature History app:

In[27]:= With[{temps = DeleteMissing[AirTemperatureData[Here, {Now - Quantity[1, "Weeks"], Now}]["Values"]]}, QuantityForm[Style[Column[{Grid[{{"Current", Last[temps]},{"High", Max[temps]}, {"Low", Min[temps]}}, Alignment -> {{Right, Left}}], ListLinePlot[temps, ImageSize -> 312, PlotStyle -> None, Filling -> Bottom, FillingStyle -> Automatic, ColorFunction -> Function[{x, y}, Blend[{RGBColor[0.45, 0.72, 0], RGBColor[1, 0.85, 0]}, y]], PlotTheme -> "NoAxes"]}, Alignment -> Right], Background -> Black, 24, White], "Abbreviation"]]

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

Wolfram|Alpha recognizes your location, knows the current UV index there, and computes how long you could safely stay out in the sun depending on your skin type

И вот, получилось приложение, работающее в режиме реального времени, Sunburn Time app, в котором происходит вызов Wolfram|Alpha с помощью конструкции на Wolfram Language (приложение выдает разное время, необходимое, чтобы получить хороший загар в зависимости от типа кожи).

In[28]:= times = Style[QuantityForm[#, {}], 24, White, FontFamily -> "Source Sans Pro"] & /@ Rest[WolframAlpha["sunburn time", {{"TypicalTimeToSunburn", 1}, "ComputableData"}][[All, 2]]]; In[29]:= Panel[Grid[Transpose[{{image:skintonesI, image:skintonesII, image:skintonesIII, image:skintonesIV, image:skintonesV, image:skintonesVI}, times}], Dividers -> {False, Center}, FrameStyle -> Gray, Spacings -> 5, Alignment -> {Center, Center}], Background -> Black]

Отчёты и загрузка данных


Wolfram Language имеет доступ не только к потокам данных из своих источников, но и к приватным; в частности — к данным из Wolfram Data Drop (см. статью на Хабрахабре "Wolfram Data Drop — новый сервис Wolfram Research")

Как любитель сбора и анализа личных данных, я сделал databin в Wolfram Data Drop, который сообщает мне количество необработанных и непрочитанных сообщений электронной почты. Я создал запланированное задание, которое запускается в облаке и создаёт отчёт о моих непрочитанных сообщениях. Создадим теперь приложение SW Email Backlog app, которое по требованию будет отправлять этот отчёт и отображать его на часах:

Lighter orange is total number of messages; darker orange is unread messages...

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

Теперь повсеместно можно встретить databin'ы Wolfram Data Drop и, конечно же, Вы можете сделать свой собственный. Из любого databin можно сразу сделать приложение для часов с панелью для вывода информации. Как, к примеру, приложение Company Fridge app, которое получает информацию от маленького термодатчика, который находится в холодильнике в нашей штаб-квартире (цикличность графика вызвана работой компрессора, а пики соответствуют открытию холодильника):

In[30]:= DateListPlot[Databin["4r4-gP4o", -300, "temp"], PlotStyle -> RGBColor[0, 0.501961, 1], Background -> Black, DateTicksFormat -> {"Hour12Short", "AMPMLowerCase"}, FrameStyle -> Directive[Black, FontColor -> White, 18], FrameLabel -> Automatic, TargetUnits -> Quantity[1, "DegreesFahrenheitDifference"], AspectRatio -> 1.11, ImageSize -> 312]["temp"]

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

В качестве простого примера давайте сделаем приложение, который просто показывает, где в мире запускалась это приложение. Вот полный код готового к выгрузке приложения Data Droplets app:

In[31]:= CloudDeploy[Delayed[With[{db = Databin[DatabinAdd["4rwD7T5G", 0], -20]["GeoLocations"]}, GeoGraphics[{Red, PointSize[.02], MapThread[{Opacity[#], Point[#2]} &, {Subdivide[0.15, 1, Length[db] - 1], db}]}, GeoRange -> All, GeoProjection -> "LambertAzimuthal", Background -> Black, PlotLabel -> Style["Recent Data Droplets", White, 24]]], "PNG"], "WatchApps/DataDroplets"]

Это приложение делает две вещи. Во-первых, когда оно запущено, оно добавляет местонахождение устройства, на котором запущено приложение, в центральный databin в Wolfram Data Drop. А во-вторых, оно отображает карту мира с метками 20 последних мест, из которых было запущено приложение:

Data Droplets app on the watch--just touch the screen...

Претворяя в жизнь приложение


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

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

In[32]:= CloudDeploy[Delayed[SendMail[GeoGraphics[{Opacity[.4, Red], PointSize[.05], Point[Here]}, GeoRange -> Quantity[1, "Miles"]]]; Style["Sent!", 200], "PNG"], "WatchApps/MailMyLocation", IconRules -> image:maillocationicon]

Email sent by the MailMyLocation app--log where you've been, share your location, remember where you parked...

Приложения для создания других приложений


До этого времени все приложения, о которых мы говорили, были созданы из фиксированных фрагментов кода на Wolfram Language, которые были развёрнуты на Apple Watch. Однако Wolfram Language является символьным языком, поэтому манипулировать кодом приложения так же просто, как и любыми другими данными. А это значит, что использовать Wolfram Language для создания и развертывания приложений на лету будет очень просто.

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

Ниже мы введем дату рождения в стандартное для Wolfram Language “умное поле”, которое работает с любыми форматами дат:

Run the generator app on your phone and enter your birthday...

И как только мы нажмём кнопку Submit (Отправить), это приложение запустит код на Wolfram Language в Wolfram Cloud, который сгенерирует новое приложение с указанной нами ранее датой, а потом это приложение будет развёрнуто и запущено уже на наших часах

...And it deploys the generated app to the watch, ready to run

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

In[33]:= CloudDeploy[FormFunction[{"Birthday" -> "Date"}, (CloudDeploy[Delayed[ExpressionCell[With[{count = Floor[UnitConvert[Mod[# - Today, ="1 yr"], "Day"]] &}, Style[Framed[Pane[QuantityForm[count[#Birthday], "Abbreviation"], {250, 250}, Alignment -> Center], RoundingRadius -> 50, FrameStyle -> Thick], 40, Hue[.52]]], Background -> Black], "PNG"], "WatchApps/BirthdayCountdown", IconRules -> image:cakeicon]; Style["BirthdayCountdown app generated & deployed", Larger, Background -> LightYellow]) &, "PNG"], "WatchApps/CountdownGenerator", IconRules -> image:cakeandgearicon]

А тут представлен результат работы сгенерированного приложения для обратного отсчета до моего дня рождения:

As of this writing, there are 123 days until my next birthday. How many days until your own?

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

Enter a list of cities on your phone, and get an array of clocks for them

Вы так же можете использовать генерацию приложений для того, чтобы поместить себя в приложение. Вот код для развертывания порождающего другие приложения, приложения You Clock app. Оно позволяет сфотографировать себя с помощью телефона, и создать приложение, использующее эту картинку, как стрелки часов:

In[34]:= CloudDeploy[FormFunction[{"image" -> "Image"}, (With[{hand = ImageRotate[ImagePad[ImageResize[#image, 100, Resampling -> "Gaussian"], {{0, 0}, {50, 0}}], -Pi/2]}, CloudDeploy[Delayed[ClockGauge[Now, PlotTheme -> "Minimal", GaugeMarkers -> {hand, hand, None}, Background -> Black, TicksStyle -> White, ImageSize -> 312], "PNG"], "WatchApps/YouClock", IconRules -> "YouClock"]]; Style["YouClock app deployed", 50]) &, "PNG"], "WatchApps/YouClockGenerator", IconRules -> "YCG"]

And here I am as the hands of a clock

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

Больше, чем я ожидал


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

Я рад сказать, что всё прошло намного лучше, чем я ожидал. Apple Watch появились совсем недавно, так что были некоторые вопросы по развёртыванию на них приложений, однако они решились весьма быстро. Но стало ясно, что множество хороших приложений для Apple Watch, могут быть созданы даже с небольшим количеством кода на языке Wolfram Language (tweet-a-watch-app? см. статью на Хабрахабре "Компания Wolfram Research открыла сервис Tweet-a-Program: интересных программ на языке Wolfram Language, длина которых не превышает 140 символов"). При этом, меня весьма впечатлил тот факт, что менее, чем за один день работы, мне удалось разработать 25 полноценных приложений.

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

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

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.

Комментариев нет:

Отправить комментарий