苹果手表即时应用程序与Wolfram语言

注意添加04/30/2018:由于Apple Watch和WatchKit的变化,Wolfram Cloud应用程序目前不支持Apple Watch。本文描述的功能在其他移动设备上仍然可用。


我的目标是沃尔夫拉姆语就是把编程提升到一个新的水平。和过去一年我们一直在铺开使用方法并在许多地方部署该语言——桌面、云、移动、嵌入式等。那么可穿戴设备呢?尤其是苹果手表呢?几天前,我决定探索一下可以做些什么。所以我清空了当天的日程,开始写代码。

我的想法是用我们的标准编写代码Wolfram编程云而不是开发一个web应用程序或web API,而是为Apple Watch开发一个应用程序。很方便,我们的初步版本Wolfram云应用刚刚在App store中可用,让我可以从狼毒云移动设备和手表。

只需几行Wolfram语言代码就可以创建并部署Apple Watch应用程序

在某种程度上,这是一个冒险编程。苹果手表刚刚推出,Wolfram云应用程序还只是初步的。当然,我是在Wolfram语言近30年的逐步发展基础上建立起来的。我很高兴地说,我很快就开始在手表上运行有趣的Wolfram语言应用程序。经过不到一天的工作,在少数人的帮助下,我有了25款手表应用程序:

我们的一些新的Wolfram语言手表应用程序的图标,在iPhone上,随时准备部署到苹果手表

所有这些我由Wolfram编程写代码的云(在网上或桌面),然后部署到Wolfram云,和连接到苹果通过Wolfram看云应用。尽管苹果的应用程序设计的手表,您也可以使用它们在网络上,或者手机上。在这篇文章中有一些网络版本的链接。把应用程序放到你的手机和手表上,就到这个页面并按照说明去做。该页面也有所有的Wolfram语言的应用程序源代码,你可以使用任何Wolfram语言系统-Wolfram编程云(包括免费版本)Mathematica等等,自己试验这些代码,或者部署你自己版本的应用。

我的第一个手表应用程序

那么这一切是如何运作的呢?在我第一次写手表应用程序的时候,我决定先做一个小应用程序这只会生成一个随机数。实现这一点的核心Wolfram语言代码很简单:

在[1]:= RandomInteger [1000]

对于手表,我们希望数字看起来漂亮、醒目和大,它也可以是随机的颜色:

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

我们可以立即将其公开部署到云上:

"Public"]" src="//www.fiberbeat.com/data/uploads/2015/04/instant-watch-apps-in3.png" alt="在[3]:= CloudDeploy[Delayed[Style[RandomInteger[1000], Bold, 250, RandomColor[], "PNG"],权限-> "Public"]" width="612" height="76">

如果你在任何浏览器中访问那个URL,你会得到一个最小的web应用程序它会立即给出一个带有随机数的网页。(延迟代码中说要将计算延迟到页面被访问或刷新的那一刻,这样每次都会得到一个新的随机数。)

那么,把这个应用到苹果手表上怎么样?首先,它必须安装在iPhone上。这很简单。因为你部署到Wolfram Cloud的任何东西都可以通过Wolfram Cloud应用程序在iPhone上自动访问。为了方便查找,最好添加一个可识别的名称和图标。如果它最终指向手表,最好把它放在黑色背景上:

WordCloud[RandomInteger[10, 20]]]" src="//www.fiberbeat.com/data/uploads/2015/04/instant-watch-apps-in4.png" alt="在[4]:= CloudDeploy[Delayed[ExpressionCell[Style[RandomInteger[1000], Bold, 250, RandomColor[]], Background -> Black], "PNG"], "WatchApps/RandomNumber", IconRules -> WordCloud[RandomInteger[10, 20]]" width="583" height="122">

现在如果你去这个URL在网页浏览器中,你会发现一个公共版本的应用程序。在iPhone上的Wolfram Cloud应用程序中,该应用程序出现在WatchApps文件夹中:

部署RandomNumber应用程序,它就会出现在你的手机上

现在,如果您触摸应用程序图标,您将在Wolfram云中运行Wolfram语言代码,然后返回一个随机数字,显示在手机上:

RandomNumber应用程序在手机上运行得很好,但当然是为苹果手表屏幕量身定制的

如果你想再次运行应用程序,并获得一个新的随机数字,只需从手机顶部向下拉。

要将应用程序放到手表上,请返回应用程序列表,然后点击顶部的手表图标并选择应用程序。这将得到与你的手机配对的手表上的应用程序:

这就是让应用程序进入你的手表所需要的一切

现在只需触摸RandomNumber应用程序的条目,它就会进入Wolfram云,运行Wolfram语言代码,并在手表上显示一个随机数:

这是在手表上运行的,就这么简单

随机性应用程序

用Wolfram语言制作各种各样的“随机应用程序”很简单。这是a的核抛硬币应用:

在[5]:=所击垮[{形象:正面,形象:反面}]

这就是将应用部署到网络、手机和手表上所需要的一切:

image:heads]" src="//www.fiberbeat.com/data/uploads/2015/04/instant-watch-apps-in6.png" alt="在[6]:= CloudDeploy[Delayed[ExpressionCell[RandomChoice[{image:heads, image:tails}], Background -> Black], "PNG"], "WatchApps/CoinFlip", IconRules -> image:heads]" width="537" height="114">

有人可能会说,使用我们复杂的技术堆栈来做这件事有点过分了。毕竟,抛硬币很容易。但前提是你身边有一个这样的人(我已经没有了)。此外,硬币翻转应用程序将提供更好的随机性。

玩呢石头、剪子、布用你的手表?这方面的核心代码同样微不足道:

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

有一个海量的知识内置在Wolfram语言中——包括,在一个小角落里,微不足道地创建随机的口袋妖怪应用:

在[8]:= EntityValue[EntityValue[

这是在手表上运行的:

统计小测验:平均而言,你需要多少次随机显示才能将它们全部捕获?

让我们尝试一些稍微复杂一点的Wolfram语言代码。这是一个词的发明家它通过随机交替的元音和辅音组成一个“单词”(通常结果听起来很像口袋妖怪,或一家科技初创公司):

在[9]中:=元音= {

手表能报时

如果没有别的事,人们使用手表的一个目的大概就是看时间。既然我们生活在现代网络世界里,如果有一两只猫参与其中肯定会更有趣。这是一个基蒂时钟

{image:graycat, image:orangecat, None}, Background -> Black, TicksStyle -> White]" src="//www.fiberbeat.com/data/uploads/2015/04/instant-watch-apps-in10.png" alt="在[10]:= ClockGauge[Now, PlotTheme -> "Minimal", gauge emarkers -> {image:graycat, image:orangecat, None}, Background -> Black, TicksStyle -> White]" width="612" height="265">

这在手表上变成:

你可以有猫咪时钟…

一个人可能会对时钟感到非常古怪。记住我们的最近非常受欢迎的我的圆周率日网站,这里有一些稍微复杂一点的代码来制作π时钟其中,当前时间的数字显示在它们第一次出现在pi的上下文中:

{0, 0}], 40, Background -> Black, FontColor -> White]" src="//www.fiberbeat.com/data/uploads/2015/04/instant-watch-apps-in11.png" alt="在[11]:=pi=Characters[ToString[N[pi,65000]];时间=字符[日期字符串[{“Hour12”,“Minute”}]];pos=第一个[序列位置[pi,时间]];样式[Grid[Partition[Join[Take[pi,14],字符[“…”],Take[pi,pos-{13,1}],样式[#,Orange]和/@Take[pi,pos],Take[pi,pos+{5,4}]],10],间距->{0,0}],40,背景->黑色,彩色->白色]" width="591" height="289">

或者再加一点:

现在你可以确切地知道一天中任何时间开始的π的数字

你在哪里?

只要你启用它,苹果手表就会通过配对手机上的GPS等信息来知道你在哪里。这样就很容易得到坐标在手表上显示当前纬度和经度的应用程序(这是我们公司总部的应用程序):

Black]" src="//www.fiberbeat.com/data/uploads/2015/04/instant-watch-apps-in12.png" alt="在[12]:=Style[Column[{dmstring[Latitude[Here],{1,“NS”}],dmstring[Longitude[Here],{1,“EW”}]}],30,白色,背景->黑色]" width="334" height="174">

我不太确定为什么它是有用的(证明位置通过Skype?),但这里有一个此时此地QR用二维码显示当前位置和时间的应用程序:

在[13]:= BarcodeImage[StringJoin[DMSString[Here],

在Wolfram语言知道很多的事情中地理位置.下面是找到离你最近的10座火山的密码:

在[14]:= v = GeoNearest[

再用一些代码将它们显示在映射上,并构造一个最近的火山应用:

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

这是a的代码三维地形,它可以显示你所在位置周围10英里的(缩放)3D地形:

{#3 &}, Mesh -> 30, Background -> Black, Axes -> False, ViewPoint -> {2, 0, 3}]" src="//www.fiberbeat.com/data/uploads/2015/04/instant-watch-apps-in16.png" alt="在[16]:= ListPlot3D[GeoElevationData[GeoDisk[Here, Quantity[10, "Miles"]], MeshFunctions -> {#3 &}, Mesh -> 30, Background -> Black, Axes -> False, ViewPoint -> {2,0,3}]" width="591" height="291">

数据流在

由于手表与Wolfram云通信,它可以利用流入Wolfram知识库的所有实时数据。这些数据包括当前(xyzt)位置国际空间站

In[17]:= entity:国际空间站(卫星)[

在这个位置上,一点点Wolfram语言的图形编程给了我们一个国际空间站的定位器应用:

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]]" src="//www.fiberbeat.com/data/uploads/2015/04/instant-watch-apps-in181.png" alt="在[18]中:=模块[{pos,line,rise},{pos,line,rise}=SatelliteData[实体:国际空间站(卫星),{“位置”,“卫星定位线”,“上升时间”}];样式[标签为[地理[{Pink,绝对厚度[3],地理路径@line},{Red PointSize[.04],Point[pos]},{Opacity[.1],黑色,地理可视区域[pos},地理网格线->自动,地理中心->pos,地理范围->世界,地理投影->正交,图像大小->{272340-38}],样式[TemplateApply[“下一个上升:```',NumberForm[UnitConvert[DateDifference[Now,rise],“Minutes”],3]],白色,20]],背景->黑色]]" width="487" height="580">

作为实时数据的另一个例子,下面是苹果定量对苹果股票进行定量计算的应用程序:

"Speed", Axes -> False, Frame -> False], Background -> Black]" src="//www.fiberbeat.com/data/uploads/2015/04/instant-watch-apps-in19.png" alt="在[19]:=风格[TradingChart[{“apple”,DatePlus[-90]},{“卷”,风格(“MESASineWave”{RGBColor (1 1 1) RGBColor(0.46, 0.62, 0.8200000000000001)}),风格(“BollingerBands RGBColor[1, 1, 1]],风格(“DoubleExponentialMovingAverage RGBColor [0.85, 0.21]]}, PerformanceGoal - >“速度”,轴- > False,框架- >假],黑色背景——>)" width="434" height="398">

这是a的代码市场词云显示股票符号单词cloud的应用程序,通过过去一天的分数价格变化加权(苹果上涨,谷歌下跌):

Style[#, ColorData[{"RedGreenSplit", 0.01 {-1, 1}}, c]]] & /@ {"AAPL", "XOM", "GOOG", "MSFT", "BRK-A", "WFC", "JNJ", "GE", "WMT", "JPM"}, Background -> Black]" src="//www.fiberbeat.com/data/uploads/2015/04/instant-watch-apps-in20.png" alt="在[20]:=WordCloud[With[{c=FinancialData[#,“分数变化”]},Abs[c]>Style[#,ColorData[{“RedGreenSplit”,0.01{-1,1},c]]和/{“AAPL”,“XOM”,“GOOG”,“MSFT”,“BRK-A”,“WFC”,“JNJ”,“GE”,“WMT”,“JPM”},背景->黑色]" width="573" height="310">

这是地球探测的完整代码货币转换器应用:

Left], "Abbreviation"], White, Background -> Black, 30]]" src="//www.fiberbeat.com/data/uploads/2015/04/instant-watch-apps-in21.png" alt="In[21]:= With[{home = $GeoLocationCountry["CurrencyUnit"]}, Style[QuantityForm[Grid[{#, "=", CurrencyConvert[#, home]} & /@ Cases[{Quantity[1, "美元"],Quantity[1, "欧元"],Quantity[1, "日元"],Quantity[1, "英磅"]},Except[home]], Alignment -> Left], "缩写"],White, Background -> Black, 30]]" width="573" height="333">

用Wolfram语言制作这么多应用程序是很容易的。这是a的核心代码日出/日落应用:

在[22]:={日落日出[],[]}

为手表设置一个方便的显示需要更多的代码:

在[23]:=With[{sunfmt=Style[DateString[#,{#2,“,“Hour12Short”,“:”,“Minute”,“AMPMLowerCase”}],54]&,tfmt=Round[DateDifference[Now,#,{“Hour”,“Minute”}],5]&,Rasterize@Style[列[{sunfmt[Sunrise[],“rise”],[tfmt[Sunrise[],[sunfmt[Sunset[],“set”],[tfmt[Sunset[]},对齐->右侧],字体大小->32,背景->黑白]] Right], FontSize -> 32, Background -> Black, White]]" width="549" height="377" class="alignnone size-full wp-image-9910">

Wolfram语言包括实时天气提要

在[24]:= AirTemperatureData []

我们也可以用图标来显示:

在[25]:= IconData[“AirTemperature AirTemperatureData []]

这是上周的气温数据:

在[26]:= AirTemperatureData[这里,{Now - Quantity[1,

用一小段代码,我们可以把它格式化成温度历史应用:

{{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"]]" src="//www.fiberbeat.com/data/uploads/2015/04/instant-watch-apps-in27.png" alt="在[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], "缩写"]]" width="578" height="434">

有时,用Wolfram语言获得结果的最简单方法就是调用Wolfram | Alpha.以下是Wolfram|Alpha在网站上显示的内容,如果你问晒伤的时间(它检测你当前的位置):

Wolfram|Alpha可以识别你的位置,知道那里当前的紫外线指数,并根据你的皮肤类型计算出你可以在阳光下安全地呆多久

这是一个实时的晒伤时间通过Wolfram语言调用Wolfram|Alpha创建的应用程序(不同的行是为不同的肤色):

{False, Center}, FrameStyle -> Gray, Spacings -> 5, Alignment -> {Center, Center}], Background -> Black]" src="//www.fiberbeat.com/data/uploads/2015/04/instant-watch-apps-in28.png" alt="在[28]:=times=Style[QuantityForm[#,{}],24,White,FontFamily->“Source Sans Pro”]&/@Rest[WolframAlpha[“sunburn time”],{“TypicalTimeToSunburn”,1},“ComputeableData”[[All,2]];在[29]:=面板[Grid[转置[{{{图像:skintonesI,图像:skintonesII,图像:skintonesII,图像:skintonesII,图像:skintonesII,图像:skintonesII,图像:skintonesIV,图像:skintonesIV,图像:skintonesIV,图像:skintonesIV,图像:skintonesIV,时间],分隔符->{False,Center},框架样式->灰色,间距->5,对齐->{Center,Center}],背景->黑色]" width="535" height="377">

报告和数据下降

Wolfram语言不仅可以访问它自己的所有精心策划的数据提要,还可以访问私有数据提要,特别是Wolfram数据下降

作为一个个人分析爱好者,我在Wolfram Data Drop中维护一个数据库,它告诉我当前未处理和未读的待办邮件消息。我有一个计划任务它会在云中运行,生成一份关于我的积压历史的报告。有了这个,很容易得到SW邮件积压按需导入报告并显示在手表上的应用程序:

浅橙色表示短信总数;暗橙色表示未读信息……

而且,是的,最近未处理和未读邮件的增加至少部分是这个博客工作的结果。

现在有很多Wolfram Data Drop数据库,当然你可以自己做.从任何数据中,你可以立即制作一个手表应用程序,显示仪表盘。就像这是一个公司冰箱应用程序是基于位于我们公司总部休息室冰箱里的一个小温度传感器(循环来自压缩机;钉子来自打开冰箱的人):

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"]" src="//www.fiberbeat.com/data/uploads/2015/04/instant-watch-apps-in30.png" alt="在[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][“临时”]" width="578" height="404">

Databins通常只从单个源或单个设备获取数据。但你也可以有一个数据库,从运行在许多不同设备上的应用程序中获取数据。

作为一个简单的例子,让我们制作一个应用程序,只显示该应用程序在世界上的何处被访问。以下是部署这样一个应用程序的完整代码“数据滴“应用程序:

All, GeoProjection -> "LambertAzimuthal", Background -> Black, PlotLabel -> Style["Recent Data Droplets", White, 24]]], "PNG"], "WatchApps/DataDroplets"]" src="//www.fiberbeat.com/data/uploads/2015/04/instant-watch-apps-in31.png" alt="在[31]:= CloudDeploy[Delayed[With[{db = Databin[DatabinAdd["4rwD7T5G", 0], -20][" geolocation "]},地理[{Red, PointSize[.]], MapThread[{Opacity[#], Point[#2]} &, {Subdivide[0.15, 1, Length[db] - 1], db}]}, geange -> All, GeoProjection -> "LambertAzimuthal", Background -> Black, PlotLabel -> Style["Recent Data drops ", White, 24]]], "PNG"], "WatchApps/DataDroplets"]" width="578" height="147">

这个应用程序做了两件事。首先,无论何时运行,它都将运行它的设备的地理位置添加到Wolfram Data Drop的中央数据库中。其次,它会显示一幅世界地图,标出世界上最近20个使用过该应用程序的地方:

在手表上的数据滴应用程序——只要触摸屏幕……

让事情发生

在手表上运行应用程序的一个典型原因是,可以直接在手腕上看到结果。但另一个原因是使用应用程序让事情发生在外部,比如通过api。

作为一个非常简单的例子,以下是部署应用程序的完整代码,该应用程序将在用户访问应用程序时向其发送1英里范围内的地图:

image:maillocationicon]" src="//www.fiberbeat.com/data/uploads/2015/04/instant-watch-apps-in32.png" alt="[32]: = CloudDeploy [[SendMail[地理[{不透明度(推迟。4,红色],PointSize[。05], Point[Here]}, GeoRange ->数量[1,“英里”]];Style["Sent!", 200], "PNG"], "WatchApps/MailMyLocation", IconRules -> image:maillocationicon]" width="518" height="122">

通过MailMyLocation应用发送电子邮件——记录你去过哪里,分享你的位置,记住你在哪里停车……

生成应用的应用程序

到目前为止,我们讨论的所有应用程序都是由固定的Wolfram语言代码构建的,只在Apple Watch上部署一次。但是Wolfram语言是象征性的,所以它很容易操作应用程序的代码,就像它操作任何其他数据一样。这意味着可以直接使用Wolfram语言来构建和部署定制应用程序。

这里有一个简单的例子。假设我们想在手表上安装一款可以倒计时的应用程序。在手表上直接输入生日日期是很不方便的。但相反,我们可以在手机上安装一个应用程序,用户输入自己的生日,然后这个应用程序就可以实时构建一个定制手表应用程序,给出特定生日的倒计时。

这里我们输入一个标准的Wolfram语言的生日。智能场,接受任何日期格式:

在手机上运行generator应用程序,输入你的生日……

只要我们点击提交,这个应用程序就会在Wolfram云中运行Wolfram语言代码,生成一个新的自定义应用程序,无论我们输入的生日是什么,然后部署生成的应用程序,让它显示在我们的手表上:

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

这里是完整的代码,需要生日倒计时app-generating应用。

[33]: = CloudDeploy [FormFunction[{“生日”——>“日期”},(CloudDeploy[延迟与[[ExpressionCell [{count =地板(UnitConvert[国防部[#,今天=“1年”),中心],RoundingRadius - > 50岁FrameStyle - >厚],40岁的色调(。52]], Background -> Black], "PNG"], "WatchApps/BirthdayCountdown", IconRules -> image:cakeicon];风格[“生日倒计时应用程序生成和部署”,较大,背景-> lightyyellow]) &,“PNG”],“WatchApps/CountdownGenerator”,IconRules ->图像:cakeandgearicon]" title="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]" width="610" height="304" class="alignnone size-full wp-image-9901">

在这里是否从生成的倒计时应用程序的结果我的生日

在写这篇文章的时候,离我的下一个生日还有123天。离你的生日还有多少天?

我们可以制作像这样的各种应用程序。这里有一个世界时钟例如,你填写一个任意数量的地点列表,并创建一个应用程序,显示所有这些地方的时钟数组:

在你的手机上输入一个城市列表,然后为它们获取一组时钟

你也可以使用应用生成进入应用程序。以下是部署“你的时钟“生成应用程序,让你用手机给自己拍照,然后创建一个应用程序,把照片用作时钟的指针:

"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"]" src="//www.fiberbeat.com/data/uploads/2015/04/instant-watch-apps-in34.png" alt="[34]: = CloudDeploy [FormFunction[{“图像”- >“图像”},(与[{手= ImageRotate [ImagePad [ImageResize[#形象,100年,重采样- >“高斯”),{{0},{50 0}}),-π/ 2)},CloudDeploy[延迟(ClockGauge[现在,PlotTheme - >“最小”,GaugeMarkers - >{手,手,没有},背景——>黑色,TicksStyle - >白色,图象尺寸- > 312),“PNG”),"WatchApps/YouClock", IconRules -> "YouClock"]];Style["YouClock app deployed", 50]) &, "PNG"], "WatchApps/YouClockGenerator", IconRules -> "YCG"]" width="578" height="213">

我在这里就像时钟的指针

实际上,你可以更容易地去meta,并有应用程序生成的应用程序生成的应用程序:应用程序一直下来!

超出我的预期

当我开始使用Wolfram语言为Apple Watch制作应用程序时,我不确定它会如何发展。到手表的部署管道是否能正常工作?会有引人注目的手表应用程序很容易在Wolfram语言构建吗?

我很高兴地说,一切都比我预期的好得多。这款手表非常新,所以在最初的部署中存在一些问题,这些问题正在迅速得到解决。但很明显,有很多很多好的手表应用程序,甚至可以用少量的Wolfram语言代码(tweet-a-watch-app吗?)让我印象深刻的是,在不到一天的时间里,我就开发和部署了25个完整的应用程序。

当然,最终使这一切成为可能的是整体Wolfram语言技术栈我花了近30年的时间但是,看到我们构建的所有自动化工作得如此出色,让我们很容易把想法变成另一种新东西:手表应用程序,这让我们感到非常满意。

用Wolfram语言编程总是很有趣的,而且看到自己的代码部署在类似于手表的东西上是很整洁的。但最终更重要的是,它对很多人都很有用,有很多用途。的代码在这里是开始学习做什么的好方法。但还有许多方向要走,还有许多重要的——或者只是有趣的——应用程序要创建。值得注意的是,Wolfram语言使得创建手表应用程序变得如此容易,它们可以成为日常工作流程的常规部分:只是另一个可以部署功能的地方。


如欲发表评论,请访问Wolfram博客»

Baidu