それに参加することも決めました。私はすでにアリスのスキルを習得しましたが、それらすべてをGoogle App Engineでホストしました。すぐに私はハッカソンで何か新しいことを学ぶことにしました。Yandexは、スキル開発のためにYandex.Cloudの機能を積極的に宣伝しています。スキルに関しては、無料です(すべてが無料というわけではありません)。
また、Google App Engineでは、アプリケーションをサーバーにアップロードするために、アカウントを支払い用に接続する必要があります。
Yandex.Cloudのスキルを試してみることにしました。さらに、ハッカソン内で1日でそれを行う時間を持つために、スキルは単純であるべきだと私は決めました。ここではクラウド内の関数が非常に適しています-サードパーティのサービスにアクセスする必要はありません(関数で支払います)。データはスキル自体に保存でき、外部データベースは必要ありません。
以前は、便利なスキルを試してみました。たとえば、(Yandex.Navigatorで)音声で駐車料金を支払うか、バス/トロリーバス/トラムが最寄りの停留所にいつ到着するかを調べました。アリス賞によると、これにはサードパーティのサービス、長い開発、Yandexとの統合が必要でした、あなたの好みに合わせてより多くのゲームとエンターテイメントのスキル。そこで今回はゲームを作ることにしました。
関数を使用するには、すべてをローカルで実行してから、関数にファイルをアップロードするか、オンラインエディターでファイルを編集することをお勧めします。私はオンラインエディターが大好きです;)なので、最初にそれを使ってみました。しかし、2、3、4回編集して新しいバージョンを保存した後、私はこのアイデアを破棄することにしました。[保存]をクリックすると、別の画面にリダイレクトされるので非常に不便です。全体として、各編集は追加のクリックの集まりです。コマンドライン
を使用する方が少し簡単です。ただし、ファイルは毎回zipに追加して、クラウドにロードする必要があります。手-不快。
たまたま私のIDEはSublime Text 3でした。最近、GoogleはGoogle App Engine Launcherを放棄しました。それに残された唯一のオプションは、コマンドラインからファイルをダウンロードすることです。その後、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-syntaxファイル
%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でFunctionコードを編集する方がずっと便利です。
PS私のスキルは、ゲームGuess the Languageです。