JP2014507023A - 高水準言語とネイティブ言語との間の通信プロトコル - Google Patents

高水準言語とネイティブ言語との間の通信プロトコル Download PDF

Info

Publication number
JP2014507023A
JP2014507023A JP2013544752A JP2013544752A JP2014507023A JP 2014507023 A JP2014507023 A JP 2014507023A JP 2013544752 A JP2013544752 A JP 2013544752A JP 2013544752 A JP2013544752 A JP 2013544752A JP 2014507023 A JP2014507023 A JP 2014507023A
Authority
JP
Japan
Prior art keywords
command
commands
programming language
application
level
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2013544752A
Other languages
English (en)
Other versions
JP5948342B2 (ja
Inventor
カイン デトワイラー スティーブン
エドワード マー ジェイムズ
ラッセル ホワイト ペイトン
Original Assignee
エヌジーモコ リミテッド ライアビリティ カンパニー
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by エヌジーモコ リミテッド ライアビリティ カンパニー filed Critical エヌジーモコ リミテッド ライアビリティ カンパニー
Publication of JP2014507023A publication Critical patent/JP2014507023A/ja
Application granted granted Critical
Publication of JP5948342B2 publication Critical patent/JP5948342B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Technology Law (AREA)
  • Multimedia (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)
  • Computer And Data Communications (AREA)
  • Communication Control (AREA)

Abstract

クライアント装置で2つのプログラミング言語間の通信を行うシステムおよび方法を開示する。高水準言語のコマンドは、区切り文字で分けられた一連の数を含む文字列として符号化され、コマンドの各構成要素は、異なる数字として符号化される。符号化された文字列は、クライアント装置でネイティブに実行するコンパイル済みコードに送られ、ネイティブコードは、その文字列を対応するネイティブコマンドに復号し、ネイティブコマンドを実行する。この通信プロトコルによって、高水準コードで書かれたアプリケーションは、ウェブサーバとの通信や、メモリに保存されたファイルの修正など典型的にはネイティブコード用である機能を実行することができる。高水準コードは、一部のオペレーティングシステムがアプリケーションバイナリの転送に課した制限を受けずにクライアント装置に転送されてもよく、これによって、アプリケーション開発者は、自動的にユーザにアプリケーションの更新を送信することができる。

Description

本開示は、一般的にプログラミング言語の分野に関し、より詳細には2つの異なるプログラミング言語間の通信に関する。
[発明者]
STEPHEN CAIN DETWILER
JAMES EDWARD MARR
PAYTON RUSSELL WHITE
[関連出願の相互参照]
本出願は、2010年12月14日出願の「特許文献1」および2011年12月13日出願の「特許文献2」の利益を主張し、その両者全体を参照により本明細書に組み込むものとする。
ソフトウェアアプリケーションは、典型的にはバイナリ実行ファイルとして公開され、配信される。開発者はコードをバイナリ実行ファイルにコンパイルし、ユーザは、コンパイルされたバイナリのアプリケーションをクライアント装置にダウンロードし、実行する。同様のコンパイルプロセスを一般公開前に用いて、更新やパッチをソフトウェアアプリケーションに配信する。このプロセスによって、開発者はソースコードを保護しつつ、ユーザに、クライアント装置でネイティブに実行する実行ファイルを提供することができるが、一方で、一部のプラットフォームにとっては不都合となる多くの制限および欠点を伴う。
米国仮出願番号61/422,843号 米国実用出願番号13/324,940号
欠点の1つとして、ユーザが不正コードを実行するのを防ぐ方法として、クライアント装置への実行可能バイナリの転送を制限しているオペレーティングシステムがある。オペレーティングシステム開発者は、ウイルスや他の悪意のコードの拡散を防ぐためのセーフガードとしてこのような制限を設けたり、オペレーティングシステムの制御強化の手段としてこれらの制限を用いたりする。オペレーティングシステムが、集中配信サービスを備えて実行可能バイナリの配信を管理したり、配信中のバイナリを配信サービスの管理者がレビューしたり、承認したりする場合もある。例えば、アップルiOSモバイルオペレーティングシステムは、アプリケーションや更新を配信するためのAPP STOREを備え、APP STOREに投稿されるコンテンツは、ユーザに配信される前に承認プロセスを経る。ユーザは自由に実行可能バイナリをダウンロードできるが、新しいアプリケーションを実行したり、既存のアプリケーションに更新を適用する前に、ユーザに管理者のパスワード、または他のなんらかの認証を求めるオペレーティングシステムもある。
これらの制限は、ソフトウェア開発者が実行可能バイナリを配信するのを難しくする。特に、更新にレビュープロセスを行う場合、または、更新を適用する前にユーザ認証が必要な場合、更新およびパッチの公開ならびに配信のプロセスは著しく遅くなる。結果として、ユーザに迅速に更新を配信するのが難しくなる。さらに、開発者が、ユーザの装置構成、位置または人口学的情報に合わせてカスタマイズした更新を配信したい場合、カスタマイズされた更新の各置換が、配信前にレビュープロセスを必要とする場合がある。
開示の実施形態は、その他の長所および特徴を有しており、それらは、詳細な説明、添付請求項、および添付の図(または図面)から容易に分かる。以下に図面を簡単に紹介する。
一実施形態に係る、アプリケーションおよび更新を高水準言語で配信するのに適したシステム環境を示すネットワーク図である。 一実施形態に係る、クライアント装置のアプリケーションクライアントモジュールを示すブロック図である。 一実施形態に係る、要求されたアプリケーションを実行する前に、該アプリケーションに更新を自動的に適用するプロセスの例を示す相互作用図である。 一実施形態に係る、高水準言語のコマンドを符号化された文字列にマッピングする例を示す図である。 一実施形態に係る、高水準コマンドを対応するネイティブコマンドに翻訳し、該対応するネイティブコマンドを実行するプロセスを示すフローチャートである。 一実施形態に係る、アプリケーションの1つの処理フレームの複数のコマンドを実行するプロセスの例を示す相互作用図である。 一実施形態に係る、アプリケーションに新しいオブジェクトを登録するプロセスの例を示す相互作用図である。
図および下記の説明は、好適な実施形態の例を示すためのものである。下記の説明から、本明細書に開示の構造および方法の代替の実施形態は、請求項の原理から逸脱することなく採用できる実行可能な代替形態として認められることに留意されたい。
幾つかの実施形態について詳細に述べる。実施形態の例は添付の図面に示す。図面で使われている類似のまたは同じ参照番号は、類似のまたは同じ機能を示すことに留意されたい。図は、開示のシステム(または方法)の実施形態を例示の目的のみで示している。本明細書に示されている構造および方法の代替の実施形態が、本明細書に記載の原理から逸脱することなく採用可能なことを、当業者は下記の説明から理解されよう。
[構成の概略]
実行可能バイナリを配信する代わりに、アプリケーションおよび更新を、JavaScript(登録商標)などの高水準言語で書いてクライアント装置に配信してもよい。高水準アプリケーションを実行するために、ユーザは、アプリケーションクライアントモジュールをクライアント装置にインストールする。アプリケーションクライアントモジュールは、クライアント装置でネイティブに実行するコンパイル済みコードと高水準言語を通信可能にする通信プロトコルを実装する。通信プロトコルは、ネットワーク装置や物理センサなどの典型的にはネイティブコード用であるシステムリソースに、高水準アプリケーションがアクセスするのを可能にする。結果として、高水準言語で書かれたアプリケーションは、通常、実行可能アプリケーションバイナリに制限されたタスクを行うことができ、それにより、高水準アプリケーションがバイナリアプリケーションのユーザ体験に類似したユーザ体験を提供することが可能になる。
通信プロトコルは、一連の数字および制御文字を含む文字列として高水準コマンドを符号化することによって、動作する。各数字は、クラス識別子、メソッド識別子、および、メソッドに渡される1つまたは複数のパラメータなどの、コマンドの異なる構成要素を表す。符号化された文字列はアプリケーションクライアントモジュールの異なる構成要素に送信され、アプリケーションクライアントモジュールは文字列をネイティブコマンドに復号して、該コマンドを実行する。高水準コードの複雑さを軽減して、通信プロトコルを動作させるために使われるコンピューティングリソースを軽減するために、アプリケーションクライアントモジュールは、グラフィックプロセッサ、物理センサ、およびネットワークインタフェースなどの、システムリソースにアクセスするための簡易コマンドの提供を可能にする数個のAPI(application programming interface)も備えている。ネイティブコードは、通信プロトコルを用いてコマンドを高水準コードに発行してもよい。
コマンドの符号化プロセスおよび復号プロセスは、かなりの量のコンピューティングリソースを使用するので、アプリケーションクライアントモジュールは、待ち行列機構を実装して、数個のコマンドを一度に符号化、復号してもよい。一実施形態においては、処理フレームと呼ばれる所定の時間間隔の間に発行される高水準コマンドが、発行順に待ち行列に追加される。処理フレームの終わりに、待ち行列にあるコマンドは、文字列として符号化される。次に、該文字列はネイティブコマンドに復号され、ネイティブコマンドは、対応する高水準コマンドが待ち行列に追加されたのと同じ順番で実行される。この待ち行列機構によって、アプリケーションクライアントモジュールは、複数のコマンドを一度に符号化、復号することによって性能を向上させることができ、かつ、高水準コマンドの元の順番を保持することができる。
実行可能なコンテンツを高水準言語で配信することによって、コンテンツは、オペレーティングシステムがバイナリアプリケーションおよび更新の配信に課している制限を受けない。アプリケーションまたは更新が高水準言語でクライアント装置に転送されると、オペレーティングシステムは、その動作を実行可能コードの転送ではなくデータの転送として解釈し、実行可能コードの転送に関連する制限を課さずに、転送を進めることができる。結果として、アプリケーションのブートプロセスの間、高水準アプリケーションが更新をチェックして適用することが可能になり、また、ユーザの地理的な位置、人口統計学上のグループ、装置構成、および他の個人情報に合わせた高水準更新を自動的に配信することによって、開発者がカスタマイズされたユーザ体験を提供することが可能になる。高水準アプリケーションをダウンロードして実行するこのプロセスは、アプリケーション配信システムまたはオペレーティングシステムに組み込まれたセキュリティ対策を回避するかもしれないが、アプリケーションクライアントモジュールは、個々の高水準アプリケーションに与えられる権限のレベルを制限することによって、クライアント装置のセキュリティを保護する機能を有する。
[システムアーキテクチャの概略]
図1は、一実施形態に係る、アプリケーションおよび更新を高水準言語で配信するのに適したシステム環境を示すネットワーク図である。システム環境は、いくつかある構成要素の中で特に、アプリケーションサーバ102、ネットワーク104、クライアント装置100を含む。他の実施形態においては、このシステム環境より構成要素が少なかったり、多かったり、異なっていてもよい。具体的には、1つのクライアント装置および1つのサーバ102のみが描かれているが、追加のクライアント装置またはサーバがネットワーク104に接続されていてよい。
アプリケーションサーバ102は、アプリケーションクライアントモジュール116、およびクライアント装置100に保存される任意の高水準アプリケーションをサポートするサーバベースのサービスを動作させる。具体的には、アプリケーションサーバ102は、ユーザに配信するための高水準アプリケーションおよび更新が入手できるようにし、アプリケーションクライアントモジュール116は、自動的にまたはユーザ要求に応答して、更新および新しいアプリケーションをアプリケーションサーバ102から読み出してよい。アプリケーションサーバ102は、アプリケーションに統合されたソーシャルネットワーキングまたはデータ収集および分析などの、追加のアプリケーションに関連するサービスを提供してもよい。アプリケーションサーバ102は、1つのエンティティとして描かれているが、アプリケーションサーバ102の機能は、複数のコンピューティング装置、コンピューティングクラスタ、またはデータセンタにわたって広がっていてよく、アプリケーションサーバ102の構成要素は、複数の地理的な位置に存在してよい。
アプリケーションサーバ102は、複数のクライアント装置100とネットワーク104を介して通信する。ネットワーク104は、当技術分野で周知のように、標準的な通信技術とプロトコルとの任意の組み合わせを含んでよい。例えば、通信は、Ethernet(登録商標)、802.11、CDMA、3G、4G、またはDSL(digital subscriber line)などのリンク技術によってネットワーク104を伝わる。ネットワーク104は、HTTP(hpyertext transfer protocol)、TCP/IP(transmission control protocol/internet protocol)、またはFTP(file transfer protocol)などの、複数のネットワークプロトコルをサポートしてよく、ネットワーク104を介して転送されるデータはいずれも、TLS(transport layer security)、SSL(secure sockets layer)、およびIPsec(internet protocol security)などの技術を用いて暗号化してよい。
図1は、クライアント装置100の詳細図も含む。クライアント装置100は、いくつかある構成要素の中で特に、プロセッサ106、メモリ108、ネットワークインタフェース装置110、物理センサ112、クライアント装置API114、およびアプリケーションクライアントモジュール116を含む。クライアント装置100の構成要素106、108、110、112、114、116は、システムバス118を介して、通信可能に結合されている。全体として、クライアント装置100は、スマートフォン、PDA(personal digital assistant)、タブレットコンピュータ、ラップトップコンピュータ、またはデスクトップコンピュータなど、これらの構成要素106、108、110、112、114、116を含む任意のコンピューティング装置であってよい。
プロセッサ106は、コンピュータ可読命令を実行する。プロセッサ106は、実行するための命令を読み出したり、データを読み書きしたりするために、メモリ108にアクセスしてよい。1つのプロセッサ106のみが図1に示されているが、クライアント装置100は、並行して動作可能な複数のプロセッサ106を含んでよい。クライアント装置100は、グラフィック処理またはオーディオ処理のための専用プロセッサ106を含んでもよい。メモリ108は、データおよびプロセッサ106によって実行可能なコンピュータ可読命令を記憶することができる任意の非一時的なコンピュータ可読記憶媒体である。メモリ108は、揮発性メモリ(例えば、ランダムアクセスメモリ)と不揮発性メモリ(例えば、ハードディスクドライブ、半導体ドライブ、コンパクトディスク、磁気テープ)との組み合わせを含んでよい。ネットワークインタフェース装置110は、ネットワーク104に接続し、ネットワーク104と、クライアント装置100の他の構成要素との間でデータのやり取りを行う。
物理センサ112は、クライアント装置の向きや周囲環境などを監視する任意の装置を備えてよい。例えば、センサは、加速度計、ジャイロスコープ、GPS(global positioning service)受信機、コンパス、または、周辺光検出器を含んでよい。物理センサ112は、外部ボタン、キーボード、マウス、タッチスクリーン、マイクロフォンなど、ユーザ入力をクライアント装置100に記録するための装置も含んでよい。
オペレーティングシステムは、バイナリソフトウェアアプリケーションがクライアント装置100の物理的な構成要素と相互作用するのを可能にする1つまたは複数のクライアント装置API(application programming interface)114を提供してよい。オペレーティングシステムは、物理センサ112、ネットワークインタフェース装置110、または、専用のグラフィックプロセッサまたはオーディオプロセッサ106で制御可能な画面、スピーカなどの出力装置と相互作用するためのAPIを含んでよい。
アプリケーションクライアントモジュール116は、高水準プログラミング言語で書かれた1つまたは複数のアプリケーションが、ネイティブコードと通信できるようにする通信プロトコルを実装する。通信プロトコルの利点の1つは、プロトコルによって、メモリ108に保存された他のアプリケーションを修正したり、ネットワークインタフェース装置110を介してアプリケーションサーバ102と通信するなど、通常、ネイティブコード用であるタスクを高水準アプリケーションが行うのを可能にすることである。高水準アプリケーションとネイティブコードとの間の通信を効率化するために、アプリケーションクライアントモジュール116は、高水準アプリケーションとオペレーティングシステムが備えるAPI114との間の相互作用を簡単にする一組のアプリケーションクライアントAPIを含んでもよい。アプリケーションクライアントモジュール116は、別個のエンティティとして示されているが、アプリケーションクライアントモジュール116の機能を実行する論理の全体またはその一部が、プロセッサ106またはメモリ108に存在していてもよい。さらに、アプリケーションクライアントモジュール116の全てまたは一部を、ASIC(application specific integrated circuit)またはFPGA(field programmable gate array)などの別個のハードウェア装置として、実現してよい。
[アプリケーションクライアントモジュール]
図2を参照すると、一実施形態に係る、図1に示したアプリケーションクライアントモジュール116の詳細図が示されている。アプリケーションクライアントモジュール116は、いくつかある構成要素の中で特に、ブートアプリケーション200、1つまたは複数の追加の高水準アプリケーション202、高水準API204、ネイティブAPI206、高水準オブジェクトレジストリ208、ネイティブオブジェクトレジストリ210、インタプリタ212、一組の簡易装置API214を含んでよい。アプリケーションクライアントの他の実施形態は、もっと多くの、もっと少ない、または異なる構成要素を含んでよい。
ブートアプリケーション200は、インタプリタ型高水準プログラミング言語(例えば、JavaScript)で書かれたアプリケーションであり、高水準アプリケーション200、202への照会を受信し、照会されたアプリケーションを更新するよう試みる。アプリケーションへの照会を受信した後、ブートアプリケーション200は、アプリケーションサーバ102にクエリを行い、照会されたアプリケーションの更新版のダウンロードがあるか否かを判定する。ブートアプリケーション200は、アプリケーションサーバ102に更新を見つけると、自動的に更新版を読み出して、適用する。更新版も高水準言語で書かれているので、ユーザまたはオペレーティングシステムからの干渉や認証なしに、読み出し、適用することができる。
アプリケーションクライアントモジュール116がアプリケーション202の起動の要求を受信すると、ネイティブAPI206は、ブートアプリケーション200に2つのコマンドを発行する。第1のコマンドは、ブートアプリケーション200への照会を含み、それによりブートアプリケーション200は自己を更新する。第2のコマンドは、要求されたアプリケーション202への照会を含み、それによりブートアプリケーション200は、要求されたアプリケーション202を更新する。ブートアプリケーション200および要求されたアプリケーション202の更新のプロセスを、図3を参照して詳細に記載する。
高水準アプリケーション202は、ゲーム、画像エディタ、またはマルチメディア再生プログラムなどの、クライアント装置100にダウンロード可能なソフトウェアアプリケーションである。ダウンロードは、クライアント装置100のユーザによって開始されてもよく、アプリケーションクライアントモジュール116内の別のアプリケーション202によって開始されてもよい。ブートアプリケーション200と同様に、高水準アプリケーション202は、インタプリタ型高水準プログラミング言語で書かれる。本明細書では、高水準プログラミング言語は、クライアント装置に配信される前にコンパイルされる代わりにクライアント装置上のインタプリタ212によって実行可能な任意のプログラミング言語(例えば、JavaScript)である。高水準コードに加えて、アプリケーション202は、画像、ビデオ、オーディオクリップまたはプレーンテキストなどの他のデータ項目も含んでよい。高水準アプリケーション202は、高水準プログラミング言語で書かれているので、オペレーティングシステムは、高水準アプリケーション202のダウンロードをデータファイルのダウンロードと解釈する。結果として、ダウンロードは、オペレーティングシステムが実行可能バイナリアプリケーションのダウンロードに課す制限を受けない。これによってオペレーティングシステムに組み込まれたセキュリティ機能を回避するかもしれないが、インタプリタ212およびネイティブAPI206は、ダウンロードされた高水準アプリケーション202に許可されるアクセスのレベルを規制するセキュリティ機能を含む。
高水準API204およびネイティブAPI206は、簡易装置API214の機能に統一インタフェースを提供するAPI(application programming interface)である。API204、206は、マッチするクラスおよびメソッドを含むが、高水準API204はブートアプリケーション200および他のアプリケーション202と同じ高水準言語で書かれているのに対し、ネイティブAPI206はクライアント装置100でネイティブに実行するバイナリである。高水準API204およびネイティブAPI206は、1つの処理フレームのコマンドを待ち行列に配置し、該待ち行列をインタプリタ212に送信して文字列として符号化し、該文字列を復号して命令に戻す論理も含む。符号化関数については図4を参照して詳細に記載する、また、待ち行列機構については図6を参照して記載する。個々の簡易装置API214の機能を統一することによって、開発者は、1つのAPIに照会して、クライアント装置100のハードウェアと相互作用することができる。これによって、開発プロセスが簡単になり、クラスまたはメソッドが間違ったAPIに起因する可能性を減らす。
高水準オブジェクトレジストリ208およびネイティブオブジェクトレジストリ210は、実行中のアプリケーション202内のライブオブジェクトのミラー化されたレジストリを維持する。一実施形態においては、オブジェクトは、最初に、高水準オブジェクトレジストリ208に登録され、次に、エントリがネイティブオブジェクトレジストリ210にミラー化される。新しいオブジェクトを登録し、2つのレジストリ208、210間でオブジェクトをミラー化するプロセスについては、図7を参照して詳細に記載する。
インタプリタ212は、ブートアプリケーション200、他のアプリケーション202、および高水準API204のコードなど、高水準コードをロードし、実行する。アプリケーション200、202が、ネイティブコードが実行するコマンドを含む場合、インタプリタ212は、そのコマンドを符号化してネイティブAPI206に送信し、復号され、実行されるようにする。インタプリタ212には2つの別個のインスタンスがある。アプリケーションインタプリタ212Aは、クライアント装置100へのアクセス権が低い。例えば、アプリケーションインタプリタ212Aは、オンスクリーングラフィックス、UI(user interface)、オーディオ機能、および他のアプリケーション関連の機能にはアクセス可能としてよい。一方、システムインタプリンタ212Bは、システムを不安定にする可能性のあるクライアント装置100の部分へのアクセスを含め、クライアント装置100へのアクセス権が高い。例えば、システムインタプリンタ212Bは、ネットワークインタフェース110を用いて、認証情報をアプリケーションサーバ102に転送したり、メモリ108に記憶されているブートアプリケーション200もしくは他のアプリケーション202を修正してもよい。
ブートアプリケーション200は、アプリケーションサーバ102へのアクセス、メモリ108内に記憶されているアプリケーション200、202の修正など、高い権限が必要な機能を頻繁に使用するので、システムインタプリンタ212Bによって実行される。他のアプリケーション202は、アプリケーションインタプリタ212Aによって実行される。他のアプリケーション202のうちの1つが、実行するのに高い権限が必要なコマンドを含む場合、アプリケーションインタプリタ212AはそのコマンドをネイティブAPI206に送信し、ネイティブAPI206はそのコマンドを許可するか否かを判断する。例えば、ネイティブAPI206は、アプリケーションサーバ102からソーシャルネットワーキングデータを読み出すコマンドの実行は許可するが、あるアプリケーション202が、別のアプリケーション202を任意に修正したり消したりするコマンドを実行するのは許可しないかもしれない。ネイティブAPI206が高い権限が必要なコマンドの実行を許可する場合、そのコマンドは実行のためにシステムインタプリタ212に送られる。この構成によって、アプリケーション202はクライアント装置100の高い権限が必要な機能にアクセスでき、また、同時に、不適切で害を及ぼす可能性がある高い権限が必要なコマンドから保護することによって、クライアント装置100のセキュリティを維持することができる。
簡易装置API214は、高水準アプリケーション200、202がオペレーティングシステムに備わったクライアント装置API114との相互作用に使用することができる簡易インタフェースを提供する。例えば、簡易グラフィックスAPI214Aは、1つのコマンドで画面上に画像を配置する簡単な方法を提供してよく、これに対して、クライアント装置API114では、同じ画像を画面の同じ位置に配置するには、適切なグラフィックスAPIへの一連の複雑なコールを必要とする場合がある。さらに、アプリケーションクライアントモジュール116は、簡易装置API214の異なるバージョンを実装して、異なるクライアント装置100のクライアント装置API114と相互作用してよい。例えば、APPLE iOSのグラフィックスAPIは、画面に画像を配置するのに第1の一連のコマンドを必要とし、一方、GOOGLE ANDROID(登録商標)オペレーティングシステムのグラフィックスAPIを用いて画像を配置するには、第1の一連のコマンドとは異なる第2の一連のコマンドを必要とする。この場合、簡易グラフィックスAPI214AのiOSバージョンの簡易画像配置コマンドは、第1の一連のコマンドを実行し、簡易グラフィックスAPI214AのANDORIDバージョンの画像配置コマンドは、第2の一連のコマンドを実行することとなる。結果として、簡易装置API214は、異なる装置100のハードウェア層、ファームウェア層、およびソフトウェア層、並びに異なるオペレーティングシステムと相互作用に使用可能な一組の標準コマンドを提供し、それによりブートアプリケーション200、他のアプリケーション202および高水準API204の同じ高水準コードが、異なる装置構成にわたって機能することができる。
ミラー化されたAPI204、206、ミラー化されたオブジェクトレジストリ208、210、インタプリタ212および簡易API214は、一緒に、高水準アプリケーション202とオペレーティングシステムに内蔵されているAPI114との間に標準インタフェースを提供する。これは、アプリケーションクライアントモジュール116が装置にインストールされる限り、同じ高水準アプリケーション202を異なるオペレーティングシステム、および異なるクライアント装置100で実行してよいことを意味する。結果として、開発者は、アプリケーション202の複数のOS専用バーションまたは装置専用バージョンを書く必要なく、複数のオペレーティングシステムおよび複数の装置の幅広いユーザに到達することができる。
[自動更新の適用]
図3は、一実施形態に係る、アプリケーションのブートプロセス時に高水準アプリケーション200を自動的に更新するプロセスの例を示す、アプリケーションサーバ102、ネイティブAPI206、システムインタプリンタ212B、およびアプリケーションインタプリタ212A間の相互作用図である。アプリケーションクライアントモジュール116がアプリケーション実行の要求を受信して(300)、プロセスが開始される。要求は、異なるアプリケーションなどの異なるソースから発生することもあるが、典型的には、センサ112(例えば、タッチスクリーン)の1つからのユーザ入力として受信される。アプリケーションクライアントモジュール116が要求を受信すると、要求はネイティブAPI206に送られ、ネイティブAPI206は、それに答えて、システムインタプリンタ212Bにブートアプリケーション200の更新を指示する第1のコマンドを発行する(302)。
ブートアプリケーション200を更新するために、システムインタプリンタ212Bは、ブートアプリケーション200自体を更新するようにという指示にともない、ブートアプリケーション200をロードし実行する。ブートアプリケーション200の高水準コードが、システムインタプリンタ212Bに、アプリケーションサーバ102をチェックさせ(304)、ブートアプリケーションの新しいバージョンがあるか否かを判断させる。システムインタプリンタ212Bは、システムインタプリタ212Bのアクセス権の高さを利用して、アプリケーションサーバ102にアクセスし(304)、ネットワークインタフェース装置110と相互作用して、適切な認証情報をアプリケーションサーバ102に送信することができる。
アプリケーションサーバ102に更新が見つからない場合、システムインタプリンタ212Bは、更新プロセス308をとばして、ブートアプリケーションを閉じる(310)。ブートアプリケーション200への更新が見つかった場合、システムインタプリンタ212Bは、アプリケーションサーバ102から更新を受信し(306)、更新を適用する(308)。一実施形態においては、システムインタプリンタ212Bは、更新プロセス308で、ブートアプリケーション200全体を更新バージョンで置き換える。あるいは、システムインタプリンタ212Bは、更新プロセス308で、ブートアプリケーション200の高水準コードのサブセット(例えば、新しいまたは異なったコードの行のみ)を置き換えてもよい。ここでも、システムインタプリンタ212Bは、アプリケーションインタプリタ212Aより高い権限を有するので、ブートアプリケーション200を修正することができる。
システムインタプリンタ212Bは、ブートアプリケーション200を更新(308)した後、ブートアプリケーションを閉じて(310)、リターン文を用いてネイティブAPIに返信する(312)。次に、ネイティブAPI206は、システムインタプリンタ212Bに、要求されたアプリケーション202の更新を指示する第2のコマンドを発する(314)。システムインタプリンタ212Bは、類似のプロセスを用いて、要求されたアプリケーション202を更新する。最初に、システムインタプリンタ212Bは、要求されたアプリケーション202を更新するようにという指示にともない、ブートアプリケーション200をロードする。ブートアプリケーション202の高水準コードは、アプリケーションサーバ102に要求されたアプリケーション202の更新バージョンがあるか否かをシステムインタプリンタ212Bにチェックさせる(316)。ここでも、アプリケーションサーバ102に更新がない場合、システムインタプリンタ212Bは、更新プロセス320をとばして、要求されたアプリケーション202を修正せずにブートアプリケーションを閉じる(322)。更新がある場合、システムインタプリンタ212Bは、更新を受信して(318)、適用する(320)。要求されたアプリケーション202への更新は、新しいまたは異なった高水準コードに加えて、映画、オーディオクリップ、画像、またはプレーンテキストなどの追加のデータオブジェクトを含んでもよい。
要求されたアプリケーション202を更新するとき、システムインタプリンタ212Bは、ユーザの個人情報(例えば、ユーザの地理的位置、人口学的情報、装置構成など)に合わせてカスタマイズされた更新を受信してもよい(318)。アプリケーションサーバ102は、更新要求(316)時に、クライアント装置100の様々なセンサ112(例えば、GPS受信装置)からユーザの個人情報を取得してもよい。あるいは、ユーザは、アプリケーションサーバ102に、事前に(例えば、アプリケーションサーバのソーシャルネットワーキング機能を使用する時)、自発的に情報を提供したかもしれない。更新適用後、システムインタプリタ212Bは、ブートアプリケーション200を閉じて(322)、第2のリターン文を用いて、ネイティブAPI206に返信する。最後に、ネイティブAPI206は、要求されたアプリケーションをロードして実行する(328)ように権限の低いアプリケーションインタプリタ212Aに指示する第3のコマンドを発する(326)。
この構成は、幾つかの理由で有利である。アプリケーション202開始の前にブートアプリケーション200および要求されたアプリケーション202を自動的に更新することによって、ユーザに手動での更新を要求しなくても、ブートアプリケーション200および要求されたアプリケーション202は両方とも、最新の状態である。さらに、ユーザの個人情報に基づいてアプリケーションの更新をカスタマイズすることができるので、アプリケーション開発者は、より豊かでパーソナライズされたユーザ体験を提供することができる。
[文字列としてのコマンドを符号化]
図4は、一実施形態に係る、高水準言語のコマンド400から符号化された文字列410へのマッピングの例を示す。インタプリタ212は、高水準コマンド400を文字列410に符号化し、その文字列をネイティブAPI206に送信する。ネイティブAPI206で、文字列410は復号されて、ネイティブコマンドとして実行される。この符号化メソッドによって定義される通信プロトコルによって、高水準言語は典型的にはネイティブコード用であるコマンドを実行することができる。
高水準言語のコマンド400は、例えば、クラス402、メソッド404、および4つの入力パラメータ406を含んでよい。符号化された文字列410は、例えば、クラス402に対応する数字のクラス識別子412、メソッド404に対応する数字のメソッド識別子414、入力パラメータ406の値416を含んでよい。インタプリタ212およびネイティブAPI206は、ネイティブAPI206が文字列410を復号したときに、パラメータ406の値を表す文字列410の数字416が、正しいパラメータにマッピングされるように、各メソッドの入力パラメータ406の順番を前もって決定する。代替の実施形態においては、コマンド400および符号化された文字列410は、より多くの、より少ない、または異なる構成要素を含んでよい。例えば、コマンド400は、追加のパラメータ406を含んでよく、そうすると、符号化された文字列は追加のパラメータ値416を含むことになる。
高水準コマンドのクラス、メソッド、パラメータを表す数字に加えて、符号化された文字列410は、二種類の制御文字を含む。第1の種類の制御文字(コロン)418は、コマンドの始まりを表し、第2の種類の制御文字(コンマ)420は、文字列410の異なるエントリを分ける。図4に示すように文字列410には読みやすいようにスペースを設けてあるが、スペースには機能はなく、設けなくてもよい。符号化された文字列410は、クラス内のオブジェクトの特定のインスタンスを参照するインスタンス識別子422も含む。高水準API204は、オブジェクトを高水準オブジェクトレジストリ208に登録するとき、インスタンス識別子422をオブジェクトのインスタンスに割り当て、インタプリタ212は、コマンド400を符号化する時、インスタンス識別子422を高水準オブジェクトレジストリ208から読み出す。図4に示す実施形態においては、インスタンス識別子422は、数字のメソッド識別子414とパラメータ416の値の間に置かれる。
クラス402およびメソッド404と、それぞれの数字の識別子412、414との間のマッピングは、符号化された文字列410を用いて元のコマンド400をネイティブコマンドとして再現できるように構成される。一実施形態においては、テキスト識別子402、404から数字の識別子412、414へのマッピングは、予め決められているが、インタプリタ212とネイティブAPI206との間のマッピングは、無作為に生成したり、再生してもよい。さらに、メソッド404と数字のメソッド識別子414との間のマッピングは、一対一マッピングでなくてもよい。類似の機能を有するメソッド404を、同じ数字のメソッド識別子414にマッピングしてもよい。例えば、画面上でスプライトを回転、翻訳、および拡大/縮小するメソッド404を、ネイティブAPI206の一般的なメソッドに対応する数字のメソッド識別子414にマッピングして、画面上のスプライトを変えてよい。代替の一実施形態においては、クラス402およびメソッド404を、2つの別個の数字の識別子412、414の代わりに、1つの数字の複合識別子にマッピングしてよい。ここでも、マッピングは、一対一のマッピングである必要はない。ネイティブAPI206がネイティブコマンドとして高水準コマンド400を再生できるのであれば、マッピングプロセスに任意の他の変更を行ってよい。
図5は、一実施形態に係る、高水準言語で書かれたコマンドをネイティブコマンドに翻訳し、ネイティブコマンドを実行するプロセスを示すフローチャートである。インタプリタ212が高水準API204から高水準コマンドの待ち行列を受信する(500)と、プロセスは開始される。待ち行列内の高水準コマンドをアセンブルするプロセスを、図6を参照して詳細に記載する。インタプリタ212は、図4を参照して記載したプロセスに従って、高水準コマンドを文字列として符号化する(505)。インタプリタ212は、コマンドが待ち行列の順番と同じ順番で実行されるように、待ち行列内の対応する高水準コマンドと同じ順番に符号化された文字列を配置する。
高水準コマンドの待ち行列を受信し(500)、そのコマンドを文字列として符号化した(505)後、インタプリタ212は、符号化されたコマンドをネイティブAPI206に送信する(510)。ネイティブAPI206は、符号化プロセス505で行われたマッピングプロセスを逆にして、文字列をネイティブコマンドに復号する(515)。最後に、ネイティブAPI206は、ネイティブAPI206およびネイティブオブジェクトレジストリ210のマッチするクラスおよびオブジェクトを利用して、復号したネイティブコマンドを実行する(520)。
[高水準スクリプト言語とネイティブコードとの間の相互作用]
図6、7を参照すると、高水準アプリケーションが図4の通信プロトコルを用いてどのようにクライアント装置100上およびアプリケーションクライアントモジュール116内のリソースと相互作用するかの2つの例が示されている。図6は、一実施形態に係る、1つの処理フレーム内の一連のコマンドを処理するプロセスを示す相互作用図である。高水準では、アプリケーション202は、一定の時間間隔に1つまたは複数のコマンドを発し、高水準API204は、そのコマンドを待ち行列に追加する。この一定の時間間隔を処理フレームと呼ぶ。処理フレームの終わりに、待ち行列のコマンドは、図4を参照して記載した通信プロトコルを用いて符号化され、ネイティブAPI206に転送され、ネイティブコマンドとして復号される。待ち行列機構は、アプリケーション202が対応する高水準コマンドを発したのと同じ順番でネイティブコマンドを実行できるように、符号化プロセスおよび復号プロセスを通して元の高水準コマンドの順番を維持する。
ネイティブAPI206が次の処理フレームのコマンドを要求すると(600)、プロセスが開始される。要求は文字列として符号化され、インタプリタ212に送信され、インタプリタ212は、その要求を復号して高水準API204に送る(602)。高水準API204は、アプリケーション202の高水準コードを分析し、符号化する第1のコマンドを読み出す(604)。読み出されたコマンドは、画面上のスプライトの表示または修正、オーディオクリップの再生、メモリ108のファイルの読み書き、物理センサ112からの入力の監視など、典型的にはネイティブコード用である任意の機能を実行してよい。第1のコマンドを読み出した(604)後、高水準のAPIは、第1のコマンドを待ち行列に加える(606)。
第1のコマンドを読み出し(604)、待ち行列に加えた(606)後、高水準API204は、同じプロセスを行って、追加のコマンドを読み出し(608)、待ち行列に加える(610)。読み出しプロセスおよび待ち行列プロセスは、合わせて2つのコマンドで示されているが、高水準API204は、処理フレームの間、追加の高水準コマンドを待ち行列に加え続けてよい。処理フレームの最後に、高水準API204は、高水準コマンドの待ち行列をインタプリタ212に送信し(612)、インタプリタ212は、図4を参照して記載した通信プロトコルに従って、待ち行列の各コマンドを文字列として符号化する(614)。
インタプリタ212は、符号化された文字列の待ち行列をネイティブAPI206に送信し(616)、ネイティブAPI206は、文字列をネイティブコマンドに復号し(618)、ネイティブコマンドを実行する(620、622)。コマンドは、元の高水準コマンドの順番を保持したまま、待ち行列に加えられ(606、610)、符号化され(614)、転送され(616)、復号される(618)ので、ネイティブコマンドは、高水準コマンドが待ち行列に加えられたのと同じ順番で実行される(620、622)。不正確な順番でコマンドを実行すると不正確な結果を生むことがあるので、コマンドの順番を保持することは重要である。例えば、画像を画面に配置し、翻訳し、原点を中心に回転させるための一連のコマンドは、翻訳と回転の順番が逆になると、違った結果になる。
高水準コードとネイティブコードとの間の処理境界を超える処理(例えば、コマンドの符号化614、送信616、復号618のプロセス)が比較的、リソース集約的なので、待ち行列機構によって、処理オーバーヘッドを減らし、アプリケーション202の性能を向上させる。クライアント装置100が処理能力と電池寿命に制約のある携帯機器である場合、これは特に重要である。1つの処理フレーム全体のコマンドを一度に処理することによって、アプリケーションクライアントモジュールは、1コマンドごとに1回ではなく、1処理フレームごとに1回、処理境界を超える。
図7は、一実施形態に係る、アプリケーションクライアントモジュール116が維持している2つの異なるオブジェクトレジストリ208、210に新しいオブジェクトを登録するプロセスを示す相互作用図である。オブジェクトを登録するプロセスは、図6を参照して記載したプロセスと同じ方法で始まる。最初に、ネイティブAPI206は、次の処理フレームのコマンドを要求する(700)。ネイティブAPI206は、その要求を文字列として符号化して、インタプリタ212に送信し、インタプリタ212は、その要求を復号して高水準API204に送る(702)。高水準API204は、アプリケーション202の高水準コードを分析し、符号化する次のコマンドを読み出す(704)。高水準API204は、新しいオブジェクトを登録するコマンドを読み出す(704)と、コマンドを待ち行列に追加する(708)前に、オブジェクトを高水準オブジェクトレジストリ208に登録する(706)。
一実施形態においては、高水準API204は、新しいオブジェクトを高水準レジストリ208に登録する(706)時に、インスタンス識別子をオブジェクトに割り当てる。登録コマンドは、登録するオブジェクトの種類を識別するクラス識別子も含んでよい。クラス識別子およびインスタンス識別子は一緒に、高水準API204がオブジェクトを一意に識別するのを可能にし、どちらの識別子もオブジェクトレジストリに保存される。代替の実施形態においては、クラス識別子およびインスタンス識別子をまとめて、一意にオブジェクトを識別するのに用いられる1つの複合識別子としてよい。
処理フレームの最後に、高水準API204は、待ち行列に加えられたコマンドをインタプリタ212に送信し(710)、待ち行列内のコマンドは、図5、図6を参照して記載したプロセスを用いて、符号化されて(712)、送信され(714)、復号される(716)。図4に示すように、インスタンス識別子およびクラス識別子は、符号化され、文字列の一部として送信される。図7では1つの登録コマンドのみが示されているが、高水準API204は、処理フレーム中に、図示されているオブジェクト登録コマンドを読み出し(704)待ち行列に加える(708)前か後のどちらかに、追加のコマンドを読み出して追加してよい。その処理フレームのコマンドがネイティブコマンドに復号(716)された後、ネイティブAPI206は、オブジェクト登録コマンドを実行して、オブジェクトをネイティブオブジェクトレジストリ210に登録する(718)。同じ数字のインスタンス識別子を用いて、オブジェクトをネイティブオブジェクトレジストリ210に登録する(718)。このプロセスによって、アプリケーションクライアントモジュール116は、オブジェクトの1つまたは複数を照会するコマンドがネイティブコードによって実行されるように、オブジェクトレジストリの2つのミラー化されたコピー208、210を維持することができる。
開示の構成によって、クライアント装置100上でネイティブに実行するアプリケーションとはユーザには区別できない高水準ソフトウェアアプリケーション202を開発者が書くことができるようになり、有益である。アプリケーションクライアントモジュール116に実装される簡易装置API214と通信プロトコルとの組み合わせによって、グラフィック機能、ユーザインタフェース機能、ネットワーク装置110、および物理センサ112などの典型的にはネイティブアプリケーションのために用意されているシステムリソースに、高水準アプリケーション202がアクセスすることが可能になる。結果として、開発者は、ネイティブアプリケーションと同じ機能を実行する高水準アプリケーション202を書くことができる。さらに、開示の構成によって、クライアント装置100のオペレーティングシステムがネイティブアプリケーションの更新に課す制限を受けることなく、高水準アプリケーション202を更新することができる。これによって、アプリケーションクライアントモジュール116は、ユーザの地理的位置、人口学的情報、クライアント装置の構成、または他の個人情報に合わせた更新を自動的に適用することができ、それにより、高水準アプリケーション202の価値を高める、よりカスタマイズされたユーザ体験が得られる。
[構成に関するその他の留意事項]
本明細書を通して、1つのインスタンスとして記載されている構成要素、動作、構造を複数のインスタンスで実装してよい。1つまたは複数のメソッドの個々の動作を別個の動作として示し、記載しているが(例えば、図5)、個々の動作の1つまたは複数を同時に実行してもよく、図に示した順番で動作を行う必要はない。例示の構成で別々の構成要素として示されている構造および機能を、組み合わせた構造または構成要素として実装してもよい。同様に、1つの構成要素として示された構造および機能を、別個の構成要素として実装してよい。これら、および他の変形形態、修正形態、追加、改良は、本明細書の発明の内容の範囲に含まれる。
論理もしくは多くの構成要素、モジュール、または機構を含む一部の実施形態を本明細書に記載している(例えば、図1、図2、図3、図6、および図7)。モジュールは、ソフトウェアモジュール(例えば、機械可読媒体で実現されるコードまたは送信信号)であってもハードウェアモジュールであってもよい。ハードウェアモジュールは、一定の動作を行うことができる有形の装置で、一定の方法で構成または配置してよい。例示の実施形態においては、1つもしくは複数のコンピュータシステム(例えば、スタンドアローンコンピュータシステム、クライアントコンピュータシステム、またはサーバコンピュータシステム)、またはコンピュータシステムの1つもしくは複数のハードウェアモジュール(例えば、プロセッサ、またはプロセッサ群)を、本明細書で記載した一定の動作を行うために動作するハードウェアモジュールとして、ソフトウェア(例えば、アプリケーション、またはアプリケーションの一部)によって構成してよい。
様々な実施形態においては、ハードウェアモジュールは、機械的に実装されても電気的に実装されてもよい。例えば、ハードウェアモジュールは、(例えば、FPGA(field programmable gate array)またはASIC(application−specific integrated circuit)などの専用プロセッサとして、)一定の動作を行うように永続的に構成された専用回路または論理を含んでよい。ハードウェアモジュールは、一定の動作を行うようにソフトウェアによって一時的に構成された(例えば、汎用プロセッサまたは他のプログラム可能なプロセッサ内に含まれるような)プログラム可能な論理または回路も含んでよい。専用の永続的に構成された回路で機械的にハードウェアモジュールを実装するか、(例えばソフトウェアによって構成された)一時的に構成された回路でハードウェアモジュールを実装するかの決定を、費用と時間を考慮して行ってよいのは、当然である。
本明細書に記載の例示のメソッドの様々な動作は、一時的に構成された1つまたは複数のプロセッサ(例えば、ソフトウェア)または、関連する動作を行うように永続的に構成された1つまたは複数のプロセッサによって、少なくとも部分的に実行されてよい。このようなプロセッサは、一時的なものであれ永続的なものであれ、1つまたは複数の動作または機能を実行するように動作する、プロセッサ実行モジュールを構成してよい。本明細書で言及されるモジュールは、一部の例示の実施形態においては、プロセッサ実行モジュールを含んでよい。
1つまたは複数のプロセッサは、「クラウドコンピューティング」環境で、または「SaaS(software as a service)」として、関連する動作の実行をサポートするように動作してもよい。例えば、ネットワーク(例えば、インターネット)、または、1つまたは複数の適切なインタフェース(例えば、API(application program interface))を介してアクセス可能な動作の少なくとも一部を、(プロセッサを含む機械の例のような)一群のコンピュータで実行してもよい。
動作の一部は、1つの機械に存在しているだけではなく多くの機械に配置されている1つまたは複数のプロセッサ間で分散して実行されてよい。一部の例示の実施形態においては、1つまたは複数のプロセッサまたはプロセッサ実行モジュールは、1つの地理的位置(例えば、住居、オフィス、またはサーバファーム内)に配置されてよい。他の例示の実施形態においては、1つまたは複数のプロセッサまたはプロセッサ実行モジュールは、多くの地理的位置に分散されてよい。
本明細書の一部では、機械メモリ(例えば、コンピュータメモリ)内にビットまたは2値デジタル信号として記憶されたデータに関して、アルゴリズムまたは動作の記号表示で表している。これらのアルゴリズムまたは記号表示は、データ処理技術の当業者が自分の作品の内容を別の当業者に伝えるために用いる技術の例である。本明細書で用いられている「アルゴリズム」は、所望の結果を得るための自己矛盾のない動作シーケンスまたは同様の処理である。この文脈においては、アルゴリズムおよび動作は、物理量の物理的操作を伴う。典型的には、このような量は、記憶、アクセス、転送、結合、比較、または機械によって操作できる、電気信号、磁気信号、または光信号の形を取るが、必ずしもそうでなくてもよい。主に通常の使用においては、時には、「データ」「コンテンツ」「ビット」「値」「要素」「記号」「文字」「用語」「数」「数字」などの言葉を用いて、そのような信号を指すのが便利である。しかしながら、これらの言葉は、単に便利なラベルであって、適切な物理量に関連づけられるべきである。
特段の記載がない限り、「処理」「コンピューティング」「計算する」「判断する」「示す」「表示する」などの言葉を用いた本明細書の記載は、情報を受信、記憶、送信、または表示する1つまたは複数のメモリ(例えば、揮発性メモリ、不揮発性メモリ、またはその組み合わせ)、レジスタ、または他の機械構成要素内に物理的な(例えば、電子の、磁気の、光学的な)量として表されたデータを操作または変換する機械(例えば、コンピュータ)のアクションまたはプロセスを指す。
本明細書で「一実施形態」または「実施形態」と言及する場合には、その実施形態に関連して記載した具体的な要素、機能、構造または特徴が、少なくとも1つの実施形態に含まれることを意味する。明細書の様々な箇所に出現する「一実施形態において」という句は、必ずしも全て同じ実施形態を指すわけではない。
一部の実施形態は、その実施形態から派生するものと共に、「結合された」「接続された」という表現を用いて記載することができる。例えば、一部の実施形態は、複数の要素が直接的に物理的または電気的接触をしていることを示す「結合した」という語を用いて記載してよい。しかしながら、「結合した」という語は、複数の要素が互いに直接、接触していないが、互いに協働し、相互作用していることを意味してもよい。実施形態は、この文脈では制限を受けない。
本明細書で用いられる「備える」「備えている」「含む」「含んでいる」「有する」「有している」またはその変形の用語は、非排他的に含むことを意図している。例えば、要素の一覧を含むプロセス、メソッド、物、または装置は、必ずしもこれらの要素に限られず、このようなプロセス、メソッド、物または装置に明示的にリストされていない、または固有でない他の要素を含んでよい。さらに、そうではないと記載されていない限り、「または」は、排他的ではなく、包含的であることを指す。例えば、条件AまたはBは、以下すなわち、Aは真(または存在し)かつBは偽(または存在しない)、Aは偽(または存在しない)かつBは真(または存在する)、AもBも真(または存在する)の内の任意の1つによって満足される。
さらに、本明細書の実施形態においては、要素および構成要素の記載に「a」「an」を使用している。この使用は、便利であるのと、発明を一般的に述べるためであって、この記載は、1つまたは少なくとも1つを含むと解釈するべきで、単数形は、別段の断りのない限り、複数形も含む。
本開示を読むと、当業者は、本明細書に開示の原理を用いた高水準コードとネイティブコードとの間の通信のためのシステムおよびプロセスに関して、さらに追加の別の構造設計および機能設計が分かるであろう。従って、具体的な実施形態およびアプリケーションを図示し、記載したが、開示の実施形態は、本明細書に開示した通りの構成および構成要素に限られないことは理解されたい。本明細書に開示のメソッドおよび装置の配置、動作、および詳細において、様々な修正、変更、変形形態が、添付請求項に定義された精神および範囲から逸脱することなく可能なことは、当業者には明らかであろう。

Claims (20)

  1. 2つのプログラミング言語間の通信のための方法であって、
    各々が複数の構成要素を含む、第1のプログラミング言語の1つまたは複数のコマンドを受信するステップと、
    前記受信したコマンドの各々を文字列として符号化するステップであって、前記文字列が、
    前記コマンドの始まりの印となる第1の種類の制御文字と、
    前記コマンドの前記複数の構成要素を表す複数の数字と、
    前記複数の数字の各々を分ける第2の種類の制御文字と
    を含むステップと、
    前記符号化された文字列を第2のプログラミング言語の少なくとも1つのコマンドに復号するステップであって、前記第2のプログラミング言語の各コマンドは、前記第1のプログラミング言語の前記受信したコマンドの1つに対応し、前記第1のプログラミング言語の前記対応する受信したコマンドと類似のタスクを行うコマンドであるステップと、
    前記第2のプログラミング言語の前記少なくとも1つのコマンドを実行するステップと
    を含む方法。
  2. 前記第1のプログラミング言語の1つまたは複数のコマンドを受信する前記ステップは、前記1つまたは複数のコマンドを含む待ち行列を受信するステップを含み、前記待ち行列内の前記コマンドの順番は、前記コマンドが実行される順番を示す請求項1に記載の方法。
  3. 前記第2のプログラミング言語の少なくとも1つのコマンドを実行する前記ステップは、前記第1のプログラミング言語の前記対応するコマンドが前記待ち行列内に配置されたのと同じ順番で、前記少なくとも1つのコマンドを実行するステップを含む請求項2に記載の方法。
  4. 前記第1のプログラミング言語の前記受信したコマンドの各々は、
    オブジェクトの種類を識別するクラス識別子と、
    前記識別されたクラス内のメンバ関数を識別するメソッド識別子と、
    前記識別されたメソッドで用いられる1つまたは複数の入力パラメータと
    を含む請求項1に記載の方法。
  5. 前記コマンドの前記構成要素を表す前記複数の数字は、
    前記クラス識別子を識別する第1の数字と、
    前記メソッド識別子を識別する第2の数字と、
    前記識別されたクラス内のオブジェクトのインスタンスを識別する第3の数字と、
    前記1つまたは複数の入力パラメータの値に対応する1つまたは複数の追加の数字と
    を含む請求項4に記載の方法。
  6. 前記コマンドの前記構成要素を表す前記複数の数字は、
    前記クラス識別子および前記メソッド識別子を識別する第1の数字と、
    前記識別されたクラス内のオブジェクトのインスタンスを識別する第2の数字と、
    前記1つまたは複数の入力パラメータの値に対応する1つまたは複数の追加の数字と
    を含む請求項4に記載の方法。
  7. 高水準プログラミング言語とコンピューティングシステム上でネイティブに実行するバイナリコードとの間の通信のためのコンピューティングシステムであって、
    プロセッサと、
    インタプリタモジュールであって、
    各々が複数の構成要素を含む、前記高水準プログラミング言語の1つまたは複数のコマンドを受信し、
    前記受信したコマンドの各々を、前記コマンドの始まりの印となる第1の種類の制御文字と、前記コマンドの前記複数の構成要素を表す複数の数字と、前記複数の数字の各々を分ける第2の種類の制御文字とを含む文字列として符号化する
    ように構成されたインタプリタモジュールと、
    ネイティブモジュールであって、
    前記インタプリタモジュールから1つまたは複数の文字列を受信し、
    各々が前記高水準プログラミング言語の前記受信したコマンドの1つに対応し、前記高水準プログラミング言語の前記対応するコマンドと類似のタスクを行う、前記バイナリコードによって実行可能な少なくとも1つのコマンドに、前記1つまたは複数の文字列を復号し、
    前記実行可能な少なくとも1つのコマンドを実行する
    ように構成されたネイティブモジュールと
    を備えるコンピューティングシステム。
  8. 前記高水準プログラミング言語の1つまたは複数のコマンドの前記受信は、前記1つまたは複数のコマンドを含む待ち行列を受信することを含み、前記待ち行列内の前記コマンドの順番は、前記コマンドが実行される順番を示す請求項7に記載のシステム。
  9. 前記ネイティブモジュールは、前記高水準プログラミング言語の前記対応するコマンドが前記待ち行列に配置されたのと同じ順番で、前記少なくとも1つのコマンドを実行するようにさらに構成された請求項8に記載のシステム。
  10. 前記高水準プログラミング言語の前記受信したコマンドの各々は、
    オブジェクトの種類を識別するクラス識別子と、
    前記識別されたクラス内のメンバ関数を識別するメソッド識別子と、
    前記識別されたメソッドで用いられる1つまたは複数の入力パラメータと、
    を含む請求項7に記載のシステム。
  11. 前記コマンドの前記構成要素を表す前記複数の数字は、
    前記クラス識別子を識別する第1の数字と、
    前記メソッド識別子を識別する第2の数字と、
    前記識別されたクラス内のオブジェクトのインスタンスを識別する第3の数字と、
    前記1つまたは複数の入力パラメータの値に対応する1つまたは複数の追加の数字と
    を含む請求項10に記載のシステム。
  12. 前記コマンドの前記構成要素を表す前記複数の数字は、
    前記クラス識別子および前記メソッド識別子を識別する第1の数字と、
    前記識別されたクラス内のオブジェクトのインスタンスを識別する第2の数字と、
    前記1つまたは複数の入力パラメータの値に対応する1つまたは複数の追加の数字と
    を含む請求項10に記載のコンピューティングシステム。
  13. 前記高水準プログラミング言語で書かれた複数のコマンド(高水準コマンド)を含む1つまたは複数の高水準アプリケーションをさらに備える請求項7に記載のシステム。
  14. 前記高水準アプリケーションの1つは、高水準コマンドを含むブートアプリケーションであり、前記高水準コマンドが、前記インタプリタモジュールによって符号化され、前記ネイティブモジュールによって復号され実行されると、前記プロセッサに、
    リモートアプリケーションサーバから1つまたは複数の追加の高水準コマンドを受信させ、
    前記高水準アプリケーションの前記複数の高水準コマンドの少なくとも1つを前記追加の高水準コマンドの少なくとも1つで置き換えることと、
    前記追加の高水準コマンドの少なくとも1つを前記高水準アプリケーションの前記複数の高水準コマンドに挿入すること
    のうちの少なくとも1つを実行することによって、前記高水準アプリケーションの1つを修正させる
    ように構成された請求項13に記載のシステム。
  15. 命令を記憶するように構成された非一時的なコンピュータ可読記憶媒体であって、前記命令がプロセッサによって実行されると、前記プロセッサに、
    第1のプログラミング言語の1つまたは複数のコマンドを受信させ、
    前記受信したコマンドの各々を、
    前記コマンドの始まりの印となる第1の種類の制御文字と、
    前記コマンドの構成要素を表す複数の数字と、
    前記複数の数字の各々を分ける第2の種類の制御文字と
    を含む文字列とし符号化させ、
    各々が前記第1のプログラミング言語の前記受信したコマンドの1つに対応し、前記第1のプログラミング言語の前記対応するコマンドと類似のタスクを行う第2のプログラミング言語の少なくとも1つのコマンドに、前記符号化された文字列を復号させ、
    前記第2のプログラミング言語の前記少なくとも1つのコマンドを実行させる
    コンピュータ可読記憶媒体。
  16. 前記第1のプログラミング言語の1つまたは複数のコマンドの前記受信は、前記1つまたは複数のコマンドを含む待ち行列を受信することを含み、前記待ち行列内の前記コマンドの順番は、前記コマンドが実行される順番を示す請求項15に記載のコンピュータ可読媒体。
  17. 前記第2のプログラミング言語の前記少なくとも1つのコマンドの前記実行は、前記第1のプログラミング言語の前記対応するコマンドが前記待ち行列に配置されたのと同じ順番で、前記少なくとも1つのコマンドを実行することを含む請求項16に記載のコンピュータ可読媒体。
  18. 前記第1のプログラミング言語の前記受信したコマンドの各々は、
    オブジェクトの種類を識別するクラス識別子と、
    前記識別されたクラス内のメンバ関数を識別するメソッド識別子と、
    前記識別されたメソッドで用いられる1つまたは複数の入力パラメータと、
    を含む請求項15に記載のコンピュータ可読媒体。
  19. 前記コマンドの前記構成要素を表す前記複数の数字は、
    前記クラス識別子を識別する第1の数字と、
    前記メソッド識別子を識別する第2の数字と、
    前記識別されたクラス内のオブジェクトのインスタンスを識別する第3の数字と、
    前記1つまたは複数の入力パラメータの値に対応する1つまたは複数の追加の数字と
    を含む請求項18に記載のコンピュータ可読媒体。
  20. 前記コマンドの前記構成要素を表す前記複数の数字は、
    前記クラス識別子および前記メソッド識別子を識別する第1の数字と、
    前記識別されたクラス内のオブジェクトのインスタンスを識別する第2の数字と、
    前記1つまたは複数の入力パラメータの値に対応する1つまたは複数の追加の数字と
    を含む請求項18に記載のコンピュータ可読媒体。
JP2013544752A 2010-12-14 2011-12-14 高水準言語とネイティブ言語との間の通信プロトコル Active JP5948342B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US42284310P 2010-12-14 2010-12-14
US61/422,843 2010-12-14
US13/324,940 US8959492B2 (en) 2010-12-14 2011-12-13 Communication protocol between a high-level language and a native language
US13/324,940 2011-12-13
PCT/US2011/064966 WO2012082936A2 (en) 2010-12-14 2011-12-14 A communication protocol between a high-level language and a native language

Publications (2)

Publication Number Publication Date
JP2014507023A true JP2014507023A (ja) 2014-03-20
JP5948342B2 JP5948342B2 (ja) 2016-07-06

Family

ID=46245351

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013544752A Active JP5948342B2 (ja) 2010-12-14 2011-12-14 高水準言語とネイティブ言語との間の通信プロトコル

Country Status (7)

Country Link
US (1) US8959492B2 (ja)
EP (1) EP2652608A4 (ja)
JP (1) JP5948342B2 (ja)
KR (1) KR101866945B1 (ja)
CN (1) CN103597447B (ja)
CA (1) CA2819691A1 (ja)
WO (1) WO2012082936A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10419569B2 (en) 2015-07-09 2019-09-17 DeNA Co., Ltd. Information processing for native control and web function with a proxy processor

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140373144A9 (en) 2006-05-22 2014-12-18 Alen Capalik System and method for analyzing unauthorized intrusion into a computer network
US9106697B2 (en) 2010-06-24 2015-08-11 NeurallQ, Inc. System and method for identifying unauthorized activities on a computer system using a data structure model
US9053201B2 (en) 2012-02-29 2015-06-09 Microsoft Technology Licensing, Llc Communication with a web compartment in a client application
US9198204B2 (en) 2012-04-11 2015-11-24 Google Inc. Apparatus and method for seamless commissioning of wireless devices
US10075334B1 (en) 2012-04-11 2018-09-11 Google Llc Systems and methods for commissioning a smart hub device
US10142122B1 (en) 2012-04-11 2018-11-27 Google Llc User interfaces, systems and methods for configuring smart devices for interoperability with a smart hub device
US10397013B1 (en) 2012-04-11 2019-08-27 Google Llc User interfaces, systems and methods for configuring smart devices for interoperability with a smart hub device
US8887178B1 (en) 2012-10-23 2014-11-11 Google Inc. Method to customize native operating system views using web technologies in mobile devices
US9723091B1 (en) 2012-11-09 2017-08-01 Noble Systems Corporation Variable length protocol using serialized payload with compression support
GB201303081D0 (en) * 2013-02-21 2013-04-10 Postcode Anywhere Europ Ltd Common service environment
US9922580B2 (en) 2013-04-30 2018-03-20 Google Llc Apparatus and method for the virtual demonstration of a smart phone controlled smart home using a website
US10088818B1 (en) 2013-12-23 2018-10-02 Google Llc Systems and methods for programming and controlling devices with sensor data and learning
US9420331B2 (en) 2014-07-07 2016-08-16 Google Inc. Method and system for categorizing detected motion events
US9781098B2 (en) * 2014-09-24 2017-10-03 Oracle International Corporation Generic server framework for device authentication and management and a generic framework for endpoint command dispatch
US10601604B2 (en) 2014-11-12 2020-03-24 Google Llc Data processing systems and methods for smart hub devices
US10104099B2 (en) 2015-01-07 2018-10-16 CounterTack, Inc. System and method for monitoring a computer system using machine interpretable code
US9747145B2 (en) * 2015-10-08 2017-08-29 Ca, Inc. Mobile application configuration agnostic to operating system versions
US20190139008A1 (en) * 2016-04-19 2019-05-09 Digitzs Solutions, Inc. Reducing Complexity When Integrating Services Functionalities
US10365916B2 (en) * 2016-04-19 2019-07-30 Dropbox, Inc. Providing access to a hybrid application offline
JP6876235B2 (ja) * 2016-09-27 2021-05-26 富士フイルムビジネスイノベーション株式会社 電子装置及び画像処理装置
US10613882B2 (en) * 2016-10-14 2020-04-07 Seagate Technology Llc Active drive API
CN111178008A (zh) * 2019-12-19 2020-05-19 清华大学 一种面向数字字符的数据编码方法、解析方法及系统
WO2022076680A1 (en) * 2020-10-09 2022-04-14 Ezapi Llc Natural language processing of api specifications for automatic artifact generation
US11507288B2 (en) * 2021-04-15 2022-11-22 Dell Products L.P. Detecting and reconfiguring of boot parameters of a remote non-volatile memory express (NVME) subsystem

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04142629A (ja) * 1990-10-03 1992-05-15 Fujitsu Ltd 高級言語処理装置
US20100325236A1 (en) * 2007-11-13 2010-12-23 Nokia Corporation Method and an apparatus comprising a browser

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5875335A (en) 1996-09-30 1999-02-23 Apple Computer, Inc. Parameter marshaling techniques for dynamic object-oriented programming languages
BR9713267A (pt) * 1996-10-25 2004-06-15 Schlumberger Systems & Service Cartão de circuito integrado para uso com um terminal, processo para uso com o mesmo, microcontrolador e processo para sua programação
US7028312B1 (en) 1998-03-23 2006-04-11 Webmethods XML remote procedure call (XML-RPC)
US6698014B1 (en) 1999-10-14 2004-02-24 Convert Systems Inc. System for automatically converting source code from one programming language to another
US6920636B1 (en) 1999-12-15 2005-07-19 Microsoft Corporation Queued component interface passing for results outflow from queued method invocations
EP1182547A1 (de) 2000-08-24 2002-02-27 Wincor Nixdorf GmbH & Co KG Programmkopplungsmethode
US6993568B1 (en) 2000-11-01 2006-01-31 Microsoft Corporation System and method for providing language localization for server-based applications with scripts
AU2002210810A1 (en) * 2001-10-22 2003-05-06 Sun Microsystems, Inc. Inter-process communication using different programming languages
US7574714B2 (en) * 2002-08-23 2009-08-11 At&T Intellectual Property I, L.P. System and method for providing interoperability between different programming protocols
US7272821B2 (en) 2003-08-25 2007-09-18 Tech Mahindra Limited System and method of universal programming language conversion
CN1790268A (zh) * 2004-12-14 2006-06-21 艾克斯麦提克方案私人有限公司 通过散列技术的编译时间链接
US7761843B2 (en) 2005-07-01 2010-07-20 Ronald Ortscheid Computer source code generator
US7536537B2 (en) 2006-04-20 2009-05-19 Harris Corporation Simultaneous dual booting of platforms
US8510647B2 (en) 2006-04-29 2013-08-13 Jennifer Madden Computer programming and markup language source code visualization tool
US7992139B2 (en) * 2006-11-29 2011-08-02 International Business Machines Corporation Method, system and program product for transforming a single language program into multiple language programs
US8266604B2 (en) * 2009-01-26 2012-09-11 Microsoft Corporation Transactional memory compatibility management
US8250523B2 (en) * 2009-01-29 2012-08-21 Microsoft Corporation Source code wrapper generation
US8332815B2 (en) * 2009-03-17 2012-12-11 International Business Machines Corporation Enhanced development tool for utilizing a javascript object notation (JSON) bridge for non-java-based component communication within java-based composite applications
US8364946B2 (en) * 2010-03-22 2013-01-29 Ishebabi Harold Reconfigurable computing system and method of developing application for deployment on the same

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04142629A (ja) * 1990-10-03 1992-05-15 Fujitsu Ltd 高級言語処理装置
US20100325236A1 (en) * 2007-11-13 2010-12-23 Nokia Corporation Method and an apparatus comprising a browser

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10419569B2 (en) 2015-07-09 2019-09-17 DeNA Co., Ltd. Information processing for native control and web function with a proxy processor

Also Published As

Publication number Publication date
WO2012082936A2 (en) 2012-06-21
US20120167063A1 (en) 2012-06-28
CN103597447A (zh) 2014-02-19
JP5948342B2 (ja) 2016-07-06
EP2652608A4 (en) 2014-10-22
KR20140019776A (ko) 2014-02-17
US8959492B2 (en) 2015-02-17
WO2012082936A3 (en) 2013-12-12
CN103597447B (zh) 2017-03-29
WO2012082936A8 (en) 2013-06-27
EP2652608A2 (en) 2013-10-23
KR101866945B1 (ko) 2018-07-19
CA2819691A1 (en) 2012-06-21

Similar Documents

Publication Publication Date Title
JP5948342B2 (ja) 高水準言語とネイティブ言語との間の通信プロトコル
US11985024B2 (en) Systems and methods for providing managed services
US8549066B1 (en) Service provider interface for deploying and managing applications on a cloud
US9513949B2 (en) Machine identity persistence for users of non-persistent virtual desktops
Jeon et al. Dr. Android and Mr. Hide: fine-grained permissions in android applications
US10666763B2 (en) Automatic integrity checking of content delivery network files
US9208328B2 (en) Security system and method for operating systems
US10110590B2 (en) Live tiles without application-code execution
US20150332043A1 (en) Application analysis system for electronic devices
CN106295255B (zh) 应用程序的加固方法和装置
JP5916002B2 (ja) ソフトウェアアプリケーション配信および起動システム
US9374275B2 (en) Rapid application development using a content management system
US20150378714A1 (en) Providing Context-Specific Software Updates to Client Applications
US20140040438A1 (en) Dynamic configuration of applications deployed in a cloud
US9513762B1 (en) Static content updates
US9756149B2 (en) Machine-specific instruction set translation
US20220277073A1 (en) Secured computer code and systems, methods, and storage media for creating the secured computer code from original computer code
JP2022099241A (ja) ハードウェアの信頼できる実行環境の待ち時間の低減
KR101845155B1 (ko) 어플리케이션 패키지를 제공하는 방법 및 시스템, 그리고 어플리케이션을 실행하는 방법 및 시스템
Van't Hof New Container Architectures for Mobile, Drone, and Cloud Computing
Iqbal The Project Entitled" Blood Donor’s Diary" is an Application Based on Android Platform
Lewis et al. Application Virtualizaton as a Strategy for Cyber Foraging in Resource-Constrained Environments

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20141215

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160122

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160209

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160407

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160510

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160606

R150 Certificate of patent or registration of utility model

Ref document number: 5948342

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R370 Written measure of declining of transfer procedure

Free format text: JAPANESE INTERMEDIATE CODE: R370

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250