我也决定参加。我已经完成了Alice的技能培训,但是我将所有技能都托管在了Google App Engine上。我立即决定在Hackathon中学习一些新知识。Yandex正在积极地在Yandex.Cloud中推广其功能以发展技能。对于技能,它们是免费的(尽管并非所有内容都是免费的)。
而且,Google App Engine现在需要连接一个帐户进行支付,才能将应用程序上载到服务器。
我决定尝试在Yandex.Cloud中使用该技能。另外,我认为,这项技能应该很简单-为了有时间在Hackathon中一天完成这项工作。在这里,云中的功能非常适合-您不需要访问第三方服务(它们是在功能中付费的),数据可以存储在技能本身中,而无需外部数据库。
我曾经尝试做一些有用的技能-例如,通过语音支付停车费用(在Yandex.Navigator中),或者找出公交车/无轨电车/电车何时到达最近的车站。根据Alice奖的判断,这需要与第三方服务,长期开发和Yandex集成。,更多游戏和娱乐技能供您选择。所以这次我决定做一个游戏。
要使用这些功能,建议要么在本地进行所有操作,然后在“功能”中上载文件,要么在在线编辑器中编辑文件。我喜欢在线编辑;),所以首先我尝试使用它。但是,经过2或3或4个编辑并保存新版本后,我决定放弃这个想法-单击“保存”将您重定向到另一个屏幕是非常不便的。总体而言,每次修改都是一堆额外的点击。
使用命令行要容易一些。但是,每次都需要将文件添加到zip中,然后才将其加载到Cloud中。手-不舒服。
碰巧我的IDE是Sublime Text3。最近,Google放弃了Google App Engine启动器,唯一剩下的选择就是通过命令行下载文件。那时我了解到Sublime Text中存在构建系统 -按Ctrl / Cmd + B,Sublime执行所需的命令。然后,对于GAE,我做了一系列命令,我决定这里需要类似的东西。
首先,实现了仅下载文件的功能。
对于GAE,我做到了,以便从Sublime Text项目文件中读取传递的参数(即项目名称)。为了节省时间,仅将函数名称,入口点和其他参数硬编码到构建系统中。不是很好,但是适合我的目的。
但是,如果一切都在生产服务器上进行了测试,则应该以某种方便的方式查看日志。因此,添加了一个单独的命令来加载和显示日志。
,如果日志易于显示,则在其中导航非常困难。
我必须对命令进行一些修改(以便正确显示unicode字符串-但即使如此,这也并不总是可行)以及代码本身(以可读的形式显示JSON):
logging.getLogger().setLevel(logging.DEBUG)
logging.debug('REQUEST: ')
for line in json.dumps(event['request'], indent=4).split('\n'):
logging.debug(line)
并创建一个单独的语法文件以突出显示日志中的错误。
单独的方便功能-Sublime Text如果在代码中找到行,则可以突出显示行本身。
总计如下-
Yandex Cloud.sublime-build文件
// Install Yandex CLI - https://cloud.yandex.ru/docs/cli/quickstart#install
//
// http://www.sublimetext.com/docs/3/build_systems.html
// https://cloud.yandex.ru/docs/functions/operations/function/version-manage#version-create
{
"file_patterns": ["*.py"],
"syntax": "Packages/User/YCLog.sublime-syntax",
"file_regex": "File \\\"/function/code/(...*?)\\\", line ([0-9]*)",
"variants":
[
{
"name": "Upload",
"shell_cmd": "zip -u -0 yc_upload.zip *.py && yc serverless function version create --function-name=my-function-name --runtime=python27 --entrypoint=main.handler --memory=128m --execution-timeout=2s --source-path=yc_upload.zip",
},
{
"name": "Logs",
"shell_cmd": "printf '%b\n' \"\\$(yc serverless function logs alice-guess-the-language)\""
}
]
}
YCLog.sublime语法文件
%YAML 1.2
---
# See http://www.sublimetext.com/docs/3/syntax.html
name: YC Log
file_extensions: [log]
scope: source.example-c
contexts:
main:
# Request identifiers
- match: '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} (START|END|REPORT) RequestID: .*'
scope: storage.type.string.c
# Dates
- match: '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}'
scope: comment.line.c
- match: '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{2,3}Z [0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}'
scope: comment.line.c
# Log level
- match: '\[(INFO|DEBUG)\]'
scope: comment.line.example-c
# Log level
- match: '\[(ERROR|WARNING)\]'
scope: keyword.control.flow.break.c
# Strings begin and end with quotes, and use backslashes as an escape
# character
- match: '"'
scope: punctuation.definition.string.begin.c
push: double_quoted_string
double_quoted_string:
- meta_scope: string.quoted.double.example-c
- match: '\\.'
scope: constant.character.escape.example-c
- match: '"'
scope: punctuation.definition.string.end.example-c
pop: true
在Yandex.Cloud中编辑功能代码会更好。
PS我的技能是游戏“ 猜语言”。