Yandex.Fungsi, Teks Luhur dan keterampilan untuk Alice

Pada 27 Juni, Yandex mengadakan hackathon online untuk mengembangkan keterampilan bagi Alice.



Saya juga memutuskan untuk mengambil bagian di dalamnya. Saya sudah melakukan keterampilan untuk Alice, tetapi saya meng-host semuanya di Google App Engine. Segera saya memutuskan untuk mempelajari sesuatu yang baru di dalam Hackathon. Yandex secara aktif mempromosikan Fungsinya di Yandex.Cloud untuk pengembangan keterampilan. Untuk keterampilan, mereka gratis (meskipun tidak semuanya gratis).



Dan Google App Engine sekarang membutuhkan akun yang terhubung untuk pembayaran untuk mengunggah aplikasi ke server.



Saya memutuskan untuk mencoba skill di Yandex.Cloud ke tempat. Selain itu, saya memutuskan, keterampilan itu harus sederhana - agar memiliki waktu untuk melakukannya dalam sehari di dalam Hackathon. Di sini Fungsi di Cloud sangat cocok - Anda tidak perlu mengakses layanan pihak ketiga (mereka dibayar untuk fungsi), data dapat disimpan dalam skill itu sendiri , database eksternal tidak diperlukan.



Saya dulu mencoba melakukan keterampilan yang berguna - untuk membayar parkir dengan suara, misalnya (di Yandex.Navigator) atau untuk mengetahui kapan bus / kereta troli / trem akan tiba di halte terdekat. Ini membutuhkan integrasi dengan layanan pihak ketiga, pengembangan jangka panjang, dan Yandex, dinilai dari penghargaan Alice, lebih banyak keahlian bermain game dan hiburan yang Anda sukai. Jadi kali ini saya memutuskan untuk membuat game.



Untuk bekerja dengan Functions, diusulkan untuk melakukan semuanya secara lokal, dan kemudian mengunggah file di Functions, atau mengedit file di editor online. Saya suka editor online;), jadi pertama-tama saya mencoba menggunakannya. Namun, setelah dua atau tiga atau empat suntingan dan menyimpan versi baru, saya memutuskan untuk meninggalkan ide ini - sangat tidak nyaman bahwa mengklik Simpan akan mengarahkan Anda ke layar lain. Secara total, setiap pengeditan adalah banyak klik tambahan.



Ini sedikit lebih mudah untuk hidup dengan baris perintah . Tetapi file perlu ditambahkan ke zip setiap kali, dan hanya kemudian dimuat ke Cloud. Tangan - tidak nyaman.



Kebetulan IDE saya Sublime Text 3. Baru-baru ini Google meninggalkan Google App Engine Launcher dan satu-satunya pilihan yang tersisa adalah mengunduh file melalui baris perintah. Saat itulah saya belajar tentang keberadaan sistem build di Sublime Text - tekan Ctrl / Cmd + B dan Sublime mengeksekusi perintah yang Anda butuhkan. Untuk GAE, saya kemudian membuat serangkaian perintah , saya memutuskan bahwa sesuatu yang serupa diperlukan di sini.



Pertama, fungsionalitas dibuat untuk sekadar mengunduh file.



Untuk GAE, saya membuatnya sehingga parameter yang dikirimkan (yaitu, nama proyek) dibaca dari file proyek Teks Sublime. Untuk menghemat waktu, nama fungsi, titik masuk dan parameter lainnya hanya di-hardcode ke sistem build. Tidak terlalu bagus, tetapi cocok untuk tujuan saya.







Tetapi jika semuanya diuji pada server produksi, maka log harus dilihat dengan nyaman. Oleh karena itu, perintah terpisah ditambahkan untuk memuat dan menampilkan log.



Sayangnya, jika log mudah ditampilkan, maka cukup sulit untuk menavigasi di dalamnya.



Saya harus mengotak-atik sedikit dengan perintah (sehingga string unicode ditampilkan dengan benar - tetapi bahkan kemudian, ini tidak selalu bekerja), dengan kode itu sendiri (untuk menampilkan JSON dalam bentuk yang dapat dibaca):



    logging.getLogger().setLevel(logging.DEBUG)
    logging.debug('REQUEST: ')
    for line in json.dumps(event['request'], indent=4).split('\n'):
        logging.debug(line)


dan membuat file sintaks terpisah untuk menyoroti kesalahan dalam log.







Fitur praktis yang terpisah - Sublime Text dapat menyorot baris itu sendiri jika ditemukan dalam kode.



Totalnya adalah sebagai berikut -



Yandex Cloud.sublim-build file
// 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)\""
            }
        ]
}




File 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




Jauh lebih baik untuk mengedit kode fungsi di Yandex.Cloud.



PS Skill saya adalah game Tebak Bahasa .



All Articles