KR101716802B1 - 클라이언트-서버 입력 방법 편집기 구조 - Google Patents

클라이언트-서버 입력 방법 편집기 구조 Download PDF

Info

Publication number
KR101716802B1
KR101716802B1 KR1020177000295A KR20177000295A KR101716802B1 KR 101716802 B1 KR101716802 B1 KR 101716802B1 KR 1020177000295 A KR1020177000295 A KR 1020177000295A KR 20177000295 A KR20177000295 A KR 20177000295A KR 101716802 B1 KR101716802 B1 KR 101716802B1
Authority
KR
South Korea
Prior art keywords
ime
server
client
session
key event
Prior art date
Application number
KR1020177000295A
Other languages
English (en)
Other versions
KR20170005519A (ko
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 KR20170005519A publication Critical patent/KR20170005519A/ko
Application granted granted Critical
Publication of KR101716802B1 publication Critical patent/KR101716802B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F17/28
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • H04L67/1087Peer-to-peer [P2P] networks using cross-functional networking aspects
    • H04L67/1091Interfacing with client-server systems or between P2P systems
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/14Session management
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/2866Architectures; Arrangements
    • H04L67/42
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04WWIRELESS COMMUNICATION NETWORKS
    • H04W4/00Services specially adapted for wireless communication networks; Facilities therefor
    • H04W4/20Services signaling; Auxiliary data signalling, i.e. transmitting data via a non-traffic channel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/541Client-server

Landscapes

  • Engineering & Computer Science (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Information Transfer Between Computers (AREA)
  • Computer Hardware Design (AREA)
  • Computer And Data Communications (AREA)
  • Stored Programmes (AREA)

Abstract

일반적으로, 본 명세서에 설명된 주제의 혁신적인 일 양태는 방법으로 구현될 수 있고, 상기 방법은, 입력 방법 편집기(IME) 서버 요청을 수신하는 단계로서, 상기 IME 서버 요청은 하나 이상의 토큰을 포함하고, IME 서버가 인스턴스화되도록 요청하며, 상기 IME 서버는 IME 클라이언트로부터 보내온 키 이벤트에 기초하여 하나 이상의 IME 함수들을 실행하고, 상기 IME 서버는 상기 IME 서버와 상기 IME 클라이언트 사이의 통신 세션의 요청과 응답 모두를 저장하는 스테이트풀 서버인 상기 수신하는 단계; 상기 IME 서버가 제한 환경에서 인스턴스화될 수 있는지를 상기 하나 이상의 토큰에 기초하여 판단하는 단계; 및 상기 제한 환경에서 상기 IME 서버를 인스턴스화하는 단계의 동작을 포함한다. 본 양태의 다른 실시예는 상응하는 시스템, 장치 및 상기 방법의 동작을 수행하도록 구성되고 컴퓨터 저장 매체에 인코딩된 컴퓨터 프로그램을 구비한다.

Description

클라이언트-서버 입력 방법 편집기 구조{CLIENT-SERVER INPUT METHOD EDITOR ARCHITECTURE}
본 출원은 2009년 11월 27일에 출원된 미국 출원 번호 61/264,714호에 대한 우선권을 주장하며, 이 미국 출원의 개시 내용은 그 전체가 참조로서 본 출원에 포함된다.
본 명세서는 입력 방법 편집기에 관련된다.
하나 또는 두 개의 문자가 하나의 단어 또는 의미에 대략 상응하는 로고그래픽 스크립트(logographic script)를 사용하는 언어는, 컴퓨터 키보드 또는 모바일 디바이스 키패드와 같은 표준 입력 디바이스에 있는 키들보다 많은 문자를 갖는다. 예를 들어, 일본어에는 카타카나와 히라가나 양쪽에서 수백 개의 문자가 있다. 이들 잠재적으로 다 대 일 연관(many to one association)의 맵핑은, 입력 디바이스에서 찾을 수 없는 문자나 기호의 입력을 지원하는 입력 방법 편집기에 의하여 구현될 수 있다. 따라서 서양식 키보드를 사용하여 일본어 문자를 입력할 수 있다. 마찬가지로, 서양식 키보드 또는 일부 다른 입력 디바이스를 사용하여 표의 문자를 포함하는 많은 언어(예컨대, 한국어, 중국어 또는 그 밖의 언어)를 입력하기 위하여 입력 방법이 사용될 수 있다.
입력 방법을 구현하기 위하여, 통상 사용자는 클라이언트측 소프트웨어 애플리케이션 프로그램과 라이브러리를 반드시 설치해야 한다. 하지만, 이러한 설치는 사용자가 자신이 소유하지 않은 컴퓨터 디바이스(예컨대, 공공 컴퓨터 디바이스, 작업 환경 하의 제2 컴퓨터 등)에서 작업하는 경우 불편할 수 있다. 또한, 클라이언트측 소프트웨어 애플리케이션 프로그램은 메모리와 프로세서를 많이 소비하여, 클라이언트에게 거추장스러울 수 있고, 언어 종속적이어서 소망하는 언어 각각에 대한 애플리케이션 프로그램을 요구할 수 있다.
본 명세서는 특히, 클라이언트-서버 구조를 갖는 입력 방법 편집기에 관한 기술을 개시한다.
일반적으로, 본 명세서에 설명된 주제의 혁신적인 일 양태는 방법으로 구현될 수 있고, 상기 방법은, 입력 방법 편집기(IME) 서버 요청을 수신하는 단계로서, 상기 IME 서버 요청은 하나 이상의 토큰을 포함하고, IME 서버가 인스턴스화되도록 요청하며, 상기 IME 서버는 IME 클라이언트로부터 보내온 키 이벤트에 기초하여 하나 이상의 IME 함수들을 실행하고, 상기 IME 서버는 상기 IME 서버와 상기 IME 클라이언트 사이의 통신 세션의 요청과 응답 모두를 저장하는 스테이트풀 서버인 상기 수신하는 단계; 상기 IME 서버가 제한 환경에서 인스턴스화될 수 있는지를 상기 하나 이상의 토큰에 기초하여 판단하는 단계; 및 상기 제한 환경에서 상기 IME 서버를 인스턴스화하는 단계의 동작을 포함한다. 본 양태의 다른 실시예는 상응하는 시스템, 장치 및 상기 방법의 동작을 수행하도록 구성되고 컴퓨터 저장 매체에 인코딩된 컴퓨터 프로그램을 구비한다.
일반적으로, 본 명세서에 설명된 주제의 다른 양태는 방법으로 구현될 수 있고, 상기 방법은, 입력 방법 편집기(IME) 서버 요청을 수신하는 단계로서, 상기 IME 서버 요청은 하나 이상의 토큰을 포함하고, IME 서버가 인스턴스화되도록 요청하며, 상기 IME 서버는 IME 클라이언트로부터 보내온 키 이벤트에 기초하여 하나 이상의 IME 함수들을 실행하고, 상기 IME 서버는 상기 IME 서버와 상기 IME 클라이언트 사이의 통신 세션의 요청과 응답 모두를 저장하는 스테이트풀 서버인 상기 수신하는 단계; 상기 하나 이상의 토큰을 처리하는 단계; 상기 IME 서버가 인스턴스화될 수 있는지를 상기 처리에 기초하여 판단하는 단계; 상기 IME 서버의 기능성을 제한하는 제한 환경에서 상기 IME 서버를 인스턴스화하는 단계; 상기 IME 서버가 상기 제한 환경에서 실행되고 있지 않음을 판단하는 단계; 및 상기 판단에 응답하여 상기 IME 서버를 중지하는 단계의 동작을 포함한다. 본 양태의 다른 실시예는 상응하는 시스템, 장치 및 상기 방법의 동작을 수행하도록 구성되고 컴퓨터 저장 매체에 인코딩된 컴퓨터 프로그램을 구비한다.
일반적으로, 본 명세서에 설명된 주제의 다른 양태는 방법으로 구현될 수 있고, 상기 방법은, 제1 입력 방법 편집기(IME) 클라이언트와 제1 IME 서버 사이의 제1 세션을 확립하는 단계; 제2 IME 클라이언트와 상기 제1 서버 사이의 제2 세션을 요청하는 단계; 상기 제1 IME 서버의 버전이 상기 제2 IME 클라이언트의 버전과 상이한지 판단하는 단계; 상기 제1 IME 서버의 버전이 상기 제2 IME 클라이언트의 버전과 상이하다는 판단에 응답하여 상기 제1 서버를 중지하는 단계; 및 상기 제2 클라이언트의 버전과 동일한 버전을 갖는 제2 IME 서버를 인스턴스화하는 단계의 동작을 포함한다. 본 양태의 다른 실시예는 상응하는 시스템, 장치 및 상기 방법의 동작을 수행하도록 구성되고 컴퓨터 저장 매체에 인코딩된 컴퓨터 프로그램을 구비한다.
일반적으로, 본 명세서에 설명된 주제의 다른 양태는 방법으로 구현될 수 있고, 상기 방법은, 제1 입력 방법 편집기(IME) 클라이언트와 제1 IME 서버 사이의 제1 세션을 확립하는 단계; 제2 IME 클라이언트와 상기 제1 IME 서버 사이의 제2 세션을 요청하는 단계; 상기 제1 IME 서버의 버전이 상기 제2 IME 클라이언트의 버전과 동일한지 판단하는 단계; 상기 판단에 응답하여 상기 제2 IME 클라이언트와 상기 제1 IME 서버 사이에 제2 세션을 확립하는 단계; 및 상기 제1 세션과 제2 세션을 실행하는 단계의 동작을 포함한다. 본 양태의 다른 실시예는 상응하는 시스템, 장치 및 상기 방법의 동작을 수행하도록 구성되고 컴퓨터 저장 매체에 인코딩된 컴퓨터 프로그램을 구비한다.
일반적으로, 본 명세서에 설명된 주제의 다른 양태는 방법으로 구현될 수 있고, 상기 방법은, 제1 IME 클라이언트가 송신하고 있는 입력 방법 편집기(IME) 서버 요청을 수신하는 단계; 상기 IME 서버 요청에 기초하여 제1 IME 서버를 인스턴스화하는 단계; 제1 IME 클라이언트와 상기 제1 IME 서버 사이에 제1 세션을 확립하는 단계; 제2 IME 클라이언트와 상기 제1 IME 서버 사이의 제2 세션을 요청하는 단계; 상기 제1 IME 서버의 버전이 상기 제2 IME 클라이언트의 버전과 상이한지 판단하는 단계; 상기 제1 IME 서버의 버전이 상기 제2 IME 클라이언트의 버전과 상이하다는 판단에 응답하여 상기 제1 IME 서버를 중지하는 단계; 상기 제2 IME 클라이언트의 버전과 동일한 버전을 갖는 제2 IME 서버를 인스턴스화하는 단계; 및 상기 제2 IME 클라이언트와 상기 제2 IME 서버 사이에 제2 세션을 확립하는 단계의 동작을 포함한다. 본 양태의 다른 실시예는 상응하는 시스템, 장치 및 상기 방법의 동작을 수행하도록 구성되고 컴퓨터 저장 매체에 인코딩된 컴퓨터 프로그램을 구비한다.
일반적으로, 본 명세서에 설명된 주제의 다른 양태는 방법으로 구현될 수 있고, 상기 방법은, 입력 방법 편집기(IME) 서버에서, 상기 IME 서버와 통신 중인 IME 클라이언트로부터 당해 IME 서버에 송신되는 키 이벤트(key event)를 수신하는 단계로서, 상기 IME 서버는 당해 IME 서버와 상기 IME 클라이언트 사이의 통신 세션의 요청과 응답 모두를 저장하는 스테이트풀 서버이고, 상기 IME 클라이언트는 상기 키 이벤트에 기초하여 상기 IME 서버에 요청을 발행하는 스테이트리스 IME 클라이언트인 상기 수신하는 단계; 상기 IME 서버가 키 이벤트에 기초하여 하나 이상의 로고그래픽 문자를 식별하는 단계; 상기 IME 서버가 상기 하나 이상의 로고그래픽 문자에 상응하는 렌더링 정보를 생성하는 단계; 및 상기 하나 이상의 로고그래픽 문자를 디스플레이하기 위하여, 상기 IME 서버로부터 상기 IME 클라이언트로 상기 렌더링 정보를 송신하는 단계의 동작을 포함한다. 본 양태의 다른 실시예는 상응하는 시스템, 장치 및 상기 방법의 동작을 수행하도록 구성되고 컴퓨터 저장 매체에 인코딩된 컴퓨터 프로그램을 구비한다.
일반적으로, 본 명세서에 설명된 주제의 다른 양태는 방법으로 구현될 수 있고, 상기 방법은, 스테이트리스인 입력 방법 편집기(IME) 클라이언트로부터 요청을 수신하는 단계; 스테이트풀인 IME 서버를 상기 요청에 기초하여 인스턴스화하는 단계; 상기 IME 클라이언트와 상기 IME 서버 사이의 통신 경로―통신 경로는 상응하는 경로명을 가짐―를 생성하는 단계; 상기 경로명을 상기 IME 클라이언트에 제공하는 단계; 상기 통신 경로를 통해 상기 IME 클라이언트로부터 상기 IME 서버에 송신되는 키 이벤트를 상기 IME 서버에서 수신하는 단계; 하나 이상의 로고그래픽 문자를 상기 키 이벤트에 기초하여 식별하는 단계; 상기 하나 이상의 로고그래픽 문자에 상응하는 렌더링 정보를 생성하는 단계; 및 상기 하나 이상의 로고그래픽 문자를 디스플레이하기 위하여, 상기 IME 서버로부터 상기 IME 클라이언트에 상기 렌더링 정보를 송신하는 단계의 동작을 포함한다. 본 양태의 다른 실시예는 상응하는 시스템, 장치 및 상기 방법의 동작을 수행하도록 구성되고 컴퓨터 저장 매체에 인코딩된 컴퓨터 프로그램을 구비한다.
일반적으로, 본 명세서에 설명된 주제의 다른 양태는 방법으로 구현될 수 있고, 상기 방법은, 입력 방법 편집기(IME) 클라이언트에서 키 이벤트를 생성하는 단계로서, 상기 IME 클라이언트는 자신이 IME 서버에 발행한 요청만을 저장하고, 키 이벤트 각각에 대하여 IME 서버에 요청을 발행하는 스테이트리스 IME 클라이언트인 상기 생성하는 단계; 상기 IME 클라이언트가 상기 키 이벤트를 키 이벤트 시퀀스에 기록하는 단계로서, 상기 키 이벤트 시퀀스는 상기 키 이벤트 및 상기 IME 서버에 미리 송신된 적어도 하나 이상의 이전 키 이벤트를 저장하는 상기 기록하는 단계; 상기 IME 클라이언트와 통신 중인 IME 서버에 상기 키 이벤트를 송신하는 단계로서, 상기 IME 서버는 당해 IME 서버와 상기 IME 클라이언트 사이 통신 세션의 요청과 응답 모두를 저장하는 스테이트풀 서버인 상기 송신하는 단계; 상기 IME 서버가 기능을 정지하였는지를 상기 IME 클라이언트에서 판단하는 단계; 상기 IME 서버가 기능을 정지하였다는 판단에 응답하여, 스테이트풀 서버인 제2 IME 서버와의 세션을 확립하는 단계; 상기 세션의 확립 후 상기 제2 서버에 상기 기록된 키 이벤트 시퀀스를 송신하는 단계의 동작을 포함한다. 본 양태의 다른 실시예는 상응하는 시스템, 장치 및 상기 방법의 동작을 수행하도록 구성되고 컴퓨터 저장 매체에 인코딩된 컴퓨터 프로그램을 구비한다.
일반적으로, 본 명세서에 설명된 주제의 다른 양태는 방법으로 구현될 수 있고, 상기 방법은, 스테이트리스 입력 방법 편집기(IME) 클라이언트인 IME 클라이언트를 디바이스 상에서 인스턴스화하는 단계; 상기 디바이스에 대한 사용자 입력을 수신하는 단계; 상기 사용자 입력에 기초하여 키 이벤트를 생성하는 단계로서, 상기 키 이벤트는 상기 IME 클라이언트에 의해 생성되는 상기 단계; 상기 디바이스의 컴퓨터 판독가능 저장 매체에 저장된 키 이벤트 시퀀스에 상기 키 이벤트를 기록하는 단계; 상기 IME 클라이언트와 통신 중이고 또한 스테이트풀 IME 서버인 IME 서버에 상기 키 이벤트를 송신하는 단계; 상기 IME 서버가 기능을 정지하였는지 판단하는 단계; 상기 판단에 응답하여, 스테이트풀 IME 서버인 제2 IME 서버를 인스턴스화하는 단계; 상기 IME 클라이언트와 상기 제2 IME 서버 사이의 세션을 확립하는 단계; 및 상기 세션의 확립 후 상기 제2 IME 서버에 상기 키 이벤트 시퀀스를 송신하는 단계의 동작을 포함한다. 본 양태의 다른 실시예는 상응하는 시스템, 장치 및 상기 방법의 동작을 수행하도록 구성되고 컴퓨터 저장 매체에 인코딩된 컴퓨터 프로그램을 구비한다.
본 명세서에 기재된 주제에 관한 하나 이상의 실시예에 대한 상세한 내용은 첨부 도면 및 아래의 설명에 개시된다. 본 주제의 다른 특징, 양태 및 장점은 상세한 설명, 도면 및 청구항으로부터 명확하게 된다. 또한, 상술한 양태를 포함하는, 본 명세서에 기재된 주제의 양태들은 하나 이상의 조합들로 결합될 수 있다.
본 발명은 상기한 문제점을 해결하여 보다 사용하기 용이한 IME 구조를 제공한다.
도 1은 입력 방법 편집기(IME)를 위한 일반적인 클라이언트-서버 구조를 나타내는 블록도이다.
도 2는 바람직한 클라이언트-서버 IME 구조를 나타내는 블록도이다.
도 3은 다른 바람직한 클라이언트-서버 IME 구조를 나타내는 블록도이다.
도 4는 서버를 위한 서버 구조를 나타내는 기능 블록도이다.
도 5a는 바람직한 텍스트 변환을 나타내는 테이블이다.
도 5b는 도 5a의 텍스트 변환에 대응하는 바람직한 룰을 나타내는 실시예 도면이다.
도 6a는 바람직한 텍스트열 변환을 나타내는 도면이다.
도 6b는 바람직한 단어 격자를 나타내는 도면이다.
도 7은 클라이언트 서버 IME 세션을 설정하기 위한 바람직한 과정을 나타내는 순서도이다.
도 8은 클라이언트 서버 IME 세션을 이용하여 텍스트 및 텍스트열 변환을 위한 바람직한 과정을 나타내는 순서도이다.
도 9는 버전 및 프로토콜 체크를 나타내는 블록도이다.
도 10은 버전 및 프로토콜 체크를 제공하는 바람직한 과정을 나타내는 순서도이다.
도 11은 클라이언트-서버 IME 세션을 다시 설정하기 위한 바람직한 과정을 나타내는 순서도이다.
여러 도면에 있어서 유사한 참조 번호는 유사한 요소를 가리킨다.
§1.0 개요
본 발명의 상세한 설명은 클라이언트-서버 구조를 포함하는 IME에 관한 기술들을 설명할 것이다. 본 발명의 실시예들이 일본어를 배경으로 설명될 것이지만, 본 발명은 로고그래픽 문자를 이용하는 다른 언어들(예컨대, 중국어 한국어 및/또는 인도어를 포함)에도 손쉽게 적용할 수 있다.
본 발명의 실시예에 따른 클라이언트-서버 구조는 스테이트풀 서버와 접속하는 스테이트리스 클라이언트를 포함한다. 여기서 사용되는 "클라이언트"라는 용어는 서비스 제공자에 의해 제공되는 서비스에 접근하는 응용프로그램 또는 시스템을 나타낸다. "서버"라는 용어는 클라이언트에게 서비스를 제공하는 서비스 제공자를 나타낸다. 클라이언트와 서버는 반드시 분리되는 별도의 컴퓨터 장치들을 가리키는 것은 아닌데, 본 명세서에 사용되는 바와 같이, 클라이언트와 서버는 하나의 컴퓨터 장치에 구현될 수 있기 때문이다. 서버는 당해 서버와 클라이언트 사이의 통신 세션의 요청 및 응답 양쪽을 저장할 수 있다는 의미에서, 스테이트풀하다. 이러한 방식으로, 서버는 특정 세션에서의 클라이언트와 서버 사이의 통신에 관한 전체 히스토리(즉, 이력)를 알게 된다. 클라이언트가 스테이트리스하다는 것은 클라이언트는 서버에 전달된 요청을 저장할 수 있지만, 서버의 응답을 저장하지 못한다는 의미이다. 따라서 클라이언트는 특정 세션에서의 클라이언트와 서버 사이의 통신에 관한 전체 히스토리를 저장하지 않는다.
여기에서 제공되는 클라이언트-서버 IME 구조의 특성에 따라, 세션은 클라이언트와 서버 사이에 설정된다. 세션은 IME 클라이언트와 IME 서버 사이의 반영구적인 정보교환이다. 정보교환은 세션의 라이프타임동안 열리거나 또는 닫힐 수 있는 하나 이상의 접속을 통해서 달성된다는 점에서 정보교환은 반영구적이다. 요약하면, 세션의 라이프타임은 그 세션동안 발생되는 접속들의 라이프타임보다 더 길다. 서버는 복수의 클라이언트들에 동시에 발생하는 세션들을 조절(coordinate)할 수 있다. 그러나 서버는 한번에 오직 하나의 클라이언트와만 접속할 수 있다. 따라서 정보교환을 위해서 클라이언트와 서버 사이의 접속이 열리고, 그 뒤에 접속은 그 서버가 다른 클라이언트와 통신할 수 있도록 닫힌다.
클라이언트는 사용자입력을 수신하고, 서버는 상기 사용자입력에 기초하여 기능을 수행하고, 상기 사용자입력에 기반하여 렌더링 정보를 생성하고, 클라이언트는 상기 렌더링 정보에 기반하여 문자들을 렌더링하거나 또는 디스플레이한다. 스테이트리스 클라이언트와 스테이트풀 서버를 이용하여 클라이언트-서버 구조는 이식이 쉽고(portable) 언어에 독립된 솔루션을 제공한다. 그 솔루션은 임의의 다양한 운영 시스템들 또는 플랫폼들에 걸쳐 구현될 수 있다.
본 발명의 실시예에 따른 클라이언트-서버 구조는 서버의 기능을 제한하는 샌드박스 또는 제한된 환경에서 동작하는 서버를 포함한다. 이러한 방식으로, 서버와의 세션을 어떻게든 설정하려는 악의적인 클라이언트 또는 사용자는 서버를 통해서 민감한 정보에 접근할 수 없게 된다.
본 발명의 실시예에 따른 클라이언트-서버 구조에서 클라이언트 및/또는 서버뿐만 아니라 클라이언트와 서버 사이의 통신 프로토콜은 그들이 수행되는 시스템에 대한 리부팅을 요구하지 않고, 업데이트될 수 있다(예를 들어, 현재 버전에서 새로운 버전으로). IME 클라이언트와 IME 서버 사이의 접속은 IME 클라이언트와 IME 서버의 다른 버전들이 호환되는 프로토콜들을 가질 때까지 유지된다. 오직 IME 서버보다 IME 클라이언트가 오래된 버전일 때 및 프로토콜이 호환이되지 않을 때만, IME 클라이언트와 IME 서버 사이의 접속은 중단된다.
본 발명의 실시예에 따른 클라이언트-서버 구조에서, 스테이트풀 서버가 고장나거나, 중단되거나, 얼어버리거나 또는 다른 방식으로 적절하게 동작하지 못하고, 또한 새로운 서버가 인스턴스화되는 상황에서 세션은 회복될 수 있다. 예를 들면, IME 클라이언트는 발생하는 각각의 입력 키 이벤트를 IME 서버에 보내고, 세션의 입력 키 이벤트 각각를 유지한다. IME 서버가 리부팅 될 때(예를 들어, 고장, 업데이트 등), IME 클라이언트는 키 이벤트들의 전체 입력 순서를 IME 서버에 보낸다.
위에서 설명된 특징들은 다양한 조합들로 결합될 수 있다. 예를 들면, 샌드박스화된 특징들은 클라이언트 및/또는 서버뿐만 아니라 클라이언트와 서버 사이의 통신 프로토콜이 리부팅 없이 업데이트되는 특징과 결합될 수 있다. 마찬가지로, 이러한 특징들은 스테이트풀 서버가 고장나고, 중단되고, 얼어버리거나 또는 다른 방식으로 절적하게 동작하지 못하는 상황에서 세션을 회복시키는 특징들의 조합 또는 그 특징과 결합할 수 있다.
서버가 핵심적인 IME 기능을 수행하는 동안, 클라이언트는 사용자 인터페이스 또는 렌더러를 제공한다. 이러한 핵심적인 IME 기능은 제 1 음절 문자(예를 들어, 히라가나)에서 제 2 음절 문자(예를 들어, 간지;일본어 한자)로 텍스트 변환 및 구성의 관리를 포함한다.
클라이언트는 클라이언트가 수행되는 장치의 특정 동작 시스템에서 제공되는 IME 프레임워크를 이용해서 수행된다. 클라이언트의 기능들은 사용자 입력(예를 들어, 사용자에 의해 입력된 "a")을 수신하는 기능, 그러한 사용자 입력에 기반하여 키 이벤트를 생성하는 기능, 생성된 키 이벤트를 서버에 전달하는 기능, 서버에서 제공되는 렌더링 정보를 수신하는 기능, 및 상기 사용자에게 디스플레이하기 위한 렌더링 정보를 제공하는 기능을 포함한다. 아래에 더 자세히 설명하면, 상기 키 이벤트에 기반되어 상응하는 문자들이 디스플레이(예컨대, "a" 키 입력에 응답하여 "ぁ")될 수 있고, 및/또는 후보 문자들의 리스트가 제공될 수 있고, 그로부터 사용자가 적절한 후보 글자를 선택할 수 있다. 클라이언트는 상기 리스트의 디스플레이를 위한 어떤 임플리먼테이션을 이용할 수 있다. 바람직한 케이스로 웹브라우져, Ajax 및 자바스크립트가 사용될 수 있다.
클라이언트는 장치에 동작되는 응용프로그램으로 제공될 수 있고, 하나 또는 그 이상의 클라이언트들은 특정 서버와 통신할 수 있다. 그러한 응용프로그램들은 입력 장치(예를 들어, 마우스 키보드, 터치패드)로부터 텍스트 입력들을 수신하고, 웹브라우져들, 프리젠테이션 프로그램들, 워드 프로세서들 및/또는 스프레드시트 프로그램들을 포함할 수 있지만, 그것들에 한정되지는 않는다. 서버와 달리 클라이언트는 어떤 상태들을 관리하지 못한다. 클라이언트의 역할이 스테이트리스하기 때문에, 특정한 동작 시스템의 IME 프레임워크에 대한 의존은 전통적인 IME들의 의존보다 매우 작다.
몇 가지의 실시예에서, 클라이언트와 서버의 통신은 IPC(Inter- Process Communication)를 이용하여 설정될 수 있다. IPC는 하나 또는 그 이상의 프로세스(예를 들어, 클라이언트 프로세스 및 서버 프로세스)에서 여러 가닥들(스레드) 사이의 데이터의 교환을 위한 일련의 기술을 제공한다. 몇 가지의 실시예에서, 이러한 프로세스들은 하나의 장치에서 구동될 수 있다. 다른 실시예들에서, 이러한 프로세스들은 하나의 네트워크에 연결된 여러 장치들에서 구동될 수 있다. IPC 방법 기술들은 RPC(Remote Procedure Call)를 포함할 수 있다. RPC는 서브루틴 또는 프로시저(예를 들어, 서버)를 요청 프로그램 애플리케이션(예를 들어, 클라이언트)의 번지공간(Address space)과 상이한 다른 번지 공간에서 수행되도록 할 수 있다.
몇 가지의 실시예에서, 해당 동작 시스템의 IME 프레임워크를 사용하여 예시될 필요가 없다. 이것은 서버 프로세스 플랫폼을 독립적이고 이동하기 쉽게 만든다. 예를 들면, 상이한 IME들은 같은 서버에 연결될 수 있는 상이한 플랫폼들에서 구동될 수 있다. 상기 서버는 클라이언트로부터 수신된 모든 키 이벤트들을 다루고(핸들링하고), 렌더링 정보를 생성하고, 생성된 렌더링 정보를 클라이언트에 전달한다. 생성된 렌더링 정보는 어떤 후보 창(Window)을 위한 컨텐츠뿐만 아니라 클라이언트 애플리케이션에 디스플레이되기 위한 현재의 텍스트 및/또는 부분적으로 변환된 텍스트를 포함한다.
§2.0 클라이언트-서버 구조
도 1은 입력 방식 편집기(IME)를 위한 일반 클라이언트-서버 구조(10)를 도시한 블록도이다. 클라이언트-서버 구조(10)는 스테이트리스 클라이언트(12), 스테이트풀 서버(14) 및 그들 사이의 통신 세션(16)을 포함한다. 통신 세션(16)은 서버(14)에 의한 수신을 위해 클라이언트(12)로부터 송신되는 요청들(18)로 발생되는 키 이벤트들, 및 클라이언트(12)에 의한 수신을 위해 서버(14)로부터 송신되는, 응답으로서 공급되는 렌더링 정보를 포함한다. 핵심 IME 기능들은 가능한 한 휴대할 수 있도록 작성되고, 서버(14)에 의해 실행된다. 여기서 이용되는 것처럼, "휴대가능한"이라는 용어는 윈도우즈(Windows), 맥(Mac), 리눅스(Linux) 및/또는 구글 크롬(Google Chrome)을 포함하지만 이에 한정되지 않는 다양한 운영 시스템들을 구동하기 위한 서버의 기능을 가리킨다. 간단히 말해, 서버(14)는 의식하지 못한 운영 시스템 기능들이고, 필요할 수 있는 일부 요청된 기능들을 제공한다. 클라이언트(12)는 서버의 인터페이스를 덮고, 각각의 운영 시스템을 위한 IME 애플리케이션 프로그램 인터페이스들(APIs)을 처리한다.
상기한 것처럼, 하나 이상의 클라이언트(12)는 서버(14)와 통신할 수 있다. 이하 더 상세히 논의되는 것처럼, 클라이언트(들)(12) 및 서버(14)가 일반적인 디바이스(common device) 상에서 실행되는 경우, 사용자는 통상적으로 한번에 오직 하나의 클라이언트(12)와 접속한다. 그러나 사용자는 하나의 클라이언트와 접속하고 있는 도중에도, 클라이언트들 사이에서 빠르게 전환할 수 있다. 예를 들어, 제1 클라이언트(예컨대, 특정 디바이스상에 워드 프로세서 애플리케이션을 위해 예시한 클라이언트)에 텍스트를 입력한 사용자는, 제1 클라이어트에 텍스트를 타이핑하는 도중에 제2 클라이언트(예컨대, 특정 디바이스상에 웹-브라우저 애플리케이션을 위해 예시한 클라이언트)에 그의 주의를 전환할 수 있다. 결과적으로, 워드 프로세서 애플리케이션과 연관된 클라이언트(12)에 대한 입력 상태는 보존될 필요가 있다. 서버(14)는 이하 상세히 논의하는 것처럼, 각각의 클라이언트(12)와 고유 섹션을 구축함으로써, 다른 클라이언트(12)로부터 키 이벤트들을 수용하고 유지할 수 있다.
세션 동안, 클라이언트(12)와 서버(14) 간의 다중 접속들이 열리거나 닫힐 수 있다. 클라이언트(12)와 서버(14) 간의 접속이 닫혀있을 때에도 세션은 활성화되어 남을 수 있다. 예를 들어, 접속은 키 이벤트가 클라이언트(12)로부터 서버(14)에 전송되도록 하게 해주기 위해, 또는 렌더링 정보가 서버(14)로부터 클라이언트(12)에 전송되도록 해주기 위해 열릴 수 있다. 그러나 각각의 접속들은 세션 타임프레임(timeframe) 내에서 짧은 수명을 가질 수 있다. 다시 말해, 접속 수명은 연관된 세션의 수명보다 더 짧다. 예를 들어, 클라이언트(12)는 서버(14)로의 접속을 열고, 서버(14)에 키 이벤트를 보내고, 서버(14)로부터 응답을 수신하고, 접속이 닫힌다. 따라서 각각의 전송된 키 이벤트는 세션 식별자(SID; session identification)에 의해 수반된다. SID는 서버(14)가 어떠한 키 이벤트들이 어떠한 클라이언트(12)로부터 수신되었는지를 계속 알도록 해준다. 더욱 상세하게는, 하나의 클라이언트(12)와 서버(14) 사이의 세션에 응답한 SID는 다른 클라이언트(12)와 서버 간의 세션에 상응하는 SID와 다른 고유한 것이다. 한가지 예외는 세션을 만들기 위해 클라이언트(12)에 의해 전송되는 커맨드(예컨대, "CreatSession")이다. 클라이언트(12)가 SID 없이 이 커맨드를 부를 때, 서버(14)는 세션을 설정하고 상응하는 SID를 생성하고, 클라이언트(12)에게 그 SID를 전송한다. 이러한 프로세스의 예는 이하에서 제공된다.
상기 소개한 것처럼, 클라이언트(12)는 운영 시스템 세부사항, 또는 플랫폼 상세 IME 프레임워크를 이용하여 구현된다. 예시적인 IME 프레임워크들은 마이크로소프트 윈도우의 텍스트 서비스 프레임워크(TSF) 또는 IMM32를 포함할 수 있다. IME 프레임워크는 개선된, 소스 독립 텍스트 입력을 사용가능한 애플리케이션 프로그래밍 인터페이스(API)이다. 특정 IME 프레임워크들(예컨대, IME 프레임워크 중립인)에 대해 잘 모르는 애플리케이션들은 Cicero Unaware Application Support(CUAS)를 포함하는 Unaware application support(UAS)를 이용하여 지원될 수 있다.
비-제한적인 예를 통해, TSF를 이용하는 실시예들이 묘사될 것이다. TSF 환경에서, “ImeTextService"는 세션 요청들, 사용자들에 의한 키 입력들, 서버(14) 로부터의 응답들을 처리한다. IME는 클라이언트(12)에서 초기에 활성화되고, 클라이언트(12)는 IME 사용자 인터페이스(IME-UI)를 열고, 서버(14)에 접속을 구축하고, ”ImeTextService::Activate"에서 세션을 시작한다. IME-UI는 포털로서, 또는 현재 애플리케이션 내 창(예컨대, 워드 프로세싱 애플리케이션에서의 IME-UI 팝업창) 내에서 제공될 수 있다. “ImeTextServiced::OntestKeyDown"은 사용자가 글자를 입력할 때마다(예컨대, 각각의 키 이벤트와 함께) 호출된다. 서버(14)에 보내는 클라이언트(12) 키 이벤트는 키 코드 및 수정자들을 포함하고, 클라이언트(12)는 응답으로 서버(14)로부터 렌더링 정보를 수신한다.
“ImeTextService::HandleKey"는 서버(14)가 키 입력을 처리하기 위해 이동할 때, 호출된다. 서버(14)로부터 보내진 렌더링 정보는 클라이언트 애플리케이션에서 IME-UI에 적용된다. 더욱 상세하게는, 클라이언트는 적절하다면, 사전 편집 텍스트를 그리고, 그 텍스트에 세그먼트들의 속성들을 추가한다. 서버(14)로부터의 응답이 다수 후보들을 포함하면, 클라이언트(12)는 IME-UI에 후보 리스트에서 후보들을 디스플레이한다. “ImeCandidateWindow"는 후보 데이터를 렌더링하기 위해 호출된다. 클라이언트(12)는 언어 바를 통해 여러가지 기능들을 제안할 수 있다. 그러한 기능들은 한정되지 않으나 입력 상태를 디스플레이하고 도움 문서를 보여주는 구성을 포함한다. 이러한 기능들은 ”ImeButtonMenu"에서 구현된다.
서버(14)는 컴포넌트 객체 모델(COM)로서 아웃-오브-프로세스 서버로 실행될 수 있다. COM 인터페이스는 서버(14)의 방법들을 불러오고, 데이터를 송신 및 수신하는 데 이용된다. “ConverterSession"은 클라이언트(12)로부터 호출된 기능들을 실행하는 클래스이다. 아직 존재하지 않는다면 "ConverterSession"의 COM 사례는 ”CoCreateInstance“에 의해 만들어지고, 클라이언트(12)는 그 사례를 통해 서버(14)와의 접속을 구축한다. 서버(14)는 한정되지 않고, 만들어진 새로운 세션을 요청하는 ”ConverterSession::CreateSession()", 세션을 종료하는 “ConverterSession::DeleteSession()", 및 클라이언트(12)로부터 서버(14)에 키 이벤트들을 보내고, 서버(14)로부터 렌더링 정보를 수신하는 ”ConverterSession::SendKey(UNONG key_code, ULONG key_modifiers, VARIANT* response)을 포함하는 방법들을 구현한다.
상기 설명한 실시예들이 윈도우 운영 시스템의 맥락에서 제공되었으나, 클라이언트-서버 IME 구조는 다른 운영시스템들에도 당연히 적용가능하다. 예를 들어, 클라이언트 IME 구조는 레오파드 운영 시스템용 IMKit를 이용하여 구현될 수 있다.
§2.1 예시적인 클라이언트-서버 구조 구현들
다양한 형태의 구조들이 도 1의 시스템, 도 2 및 3에 도시된 예들을 구현하는데 이용될 수 있다. 도 2는 예시적인 클라이언트-서버 IME 구조를 도시하는 블록도이다. 도 2의 클라이언트-서버 IME 구조에서, 클라이언트(12) 및 서버(14)는 동일한 디바이스상에서 실행된다. 여기서 사용된 것처럼, 그 디바이스라는 용어는 한정되지 않고, 데스크톱 컴퓨터, 랩탑 컴퓨터, 태블릿 컴퓨터, 서버 시스템, 개인 디지털 보조장치(PDA) 및/또는 모바일 전화를 포함할 수 있는 프로세싱 또는 컴퓨터 디바이스를 말한다. 클라이언트(12)는 각각이 IME 다이나믹 링크 라이브러리(DLL)(30) 및 상응하는 IME-UI(32)를 포함하는 어플리메이션 프로그램들(APP1, APP2, ...APPn)로서 제공된다. 각각의 클라이언트(12)는 상응하는 사용자 프로그램에 대해 예를 들어 설명하고, 예를 들어, 도시된 세 클라이언트(12)는 워드 프로세싱 프로그램, 브라우저 프로그램, 및 이메일 프로그램에 대해 각각 예를 들어 설명될 수 있다. 서버(14)는 스테이트풀 세션 관리자(34), 변환 엔진 코어(36), 및 리소스(38)를 포함한다. 일부 실시에 있어서, 서버(14)는 샌드박스(40) 내에서 실행될 수 있다. 스테이트풀 세션 관리자(34)는 복수의 클라이언트(12)(예컨대, 이메일 애플리케이션 및 웹 브라우저 애플리케이션)로부터의 다중 접속들을 조성한다.
도 3은 다른 예시적인 클라이언트-서버 IME 구조를 나타내는 블록도이다. 클라이언트(12) 또는 다수 클라이언트들(12)은 하나 이상의 클라이언트 디바이스들(12)상에서 실행되고, 서버(14)는 분리된 디바이스(44)상에서 실행된다. 클라이언트 디바이스들(42)은 한정되지 않고 로컬 영역 네트워크(LAN) 또는 광역 네트워크(WAN)(예컨대, 인터넷)를 포함할 수 있는 네트워크(36)를 통해 서버와 통신한다.
클라이언트 서버 구조들은 IPC와 같은 싱글-스레드(single-thread) 및 싱글-접속 모델을 이용하여 구현될 수 있다. 서버(14)는 하나의 포트만 열고, 클라이언트들(12)로부터 다수의 접속들을 다룬다. 싱글-스레드 및 싱글-접속 모델은 단순성 및 휴대성을 제공한다. 거의 모든 폴랫폼들이 싱글-스레드 및 싱글-접속 IPC를 지원한다.
상기 설명한 것처럼, 클라이언트(12)는 모든 키 이벤트(예컨대, [A] 버튼을 누름)를 서버(14)에 연결하고, 서버(14)로부터 그 키 이벤트에 상응하는 렌더링 정보(예컨대, [A]는 일본어 [あ]로 디스플레이되어야 함)를 얻는다. 접속은 연결(alive)이 유지되지 않는 비보존적(stateless)이고, 클라이언트(12)와 서버(14) 사이에서 다른 접속들에 대해 독립적이다. 일반적으로, 각각의 IPC 접속의 수명은 매우 짧다. 예를 들어, 서버가 클라이언트(12)에게 렌더링 정보를 전송한 후에, 접속을 즉시 닫고, 다른 접속들을 기다린다.
일부 예에서, 서버(14)는 악의적인 사용자가 서버에 접속하고 아무것도 하지 않으면 방해(blocked, 즉, 차단)될 수 있다. 다른 예로서, 클라이언트(12)는 악의적인 서버가 클라이언트(12)에게 아무런 응답을 보내지 않는다면 방해될 수 있다. 그러한 상황들을 막기 위해, 타임아웃(timeout)이 각각의 접속에 구현된다. 더욱 상세하게는, 클라이언트(12) 또는 서버(14)가 미리 결정된 시간 기간(예컨대, 500msec) 내에 메시지를 보내지 않으면, 현재 접속이 닫힌다.
일단 서버가 예를 들어 설명되면, 서버는 클라이언트와 서버 간의 통신을 위한 접속 경로 이름을 생성한다. 예를 들어, 일부 실시예들은 다른 세션들에서 사용되는 명명된 파이프 경로 이름들과 대하여 고유한, 명명된 파이프 경로 이름을 채용한다. 고유한 명명된 파이프 경로 이름을 이용함으로써, 유효한 서버가 예시되기 전에 악의적인 사용자가 가짜(fake) 명명된 파이프 서버를 생성하는 것으로부터 억제된다. 따라서, 경로 이름은 랜덤, 다중-비트 경로 이름(예컨대, 128-비트 랜덤하게 생성된 경로 이름)을 생성함으로써 제공된다. 서버는 사용자 프로필 디렉토리에 경로 이름을 저장한다. 서버가 예시된 후에, 그러나 첫번째 키 이벤트가 보내지기 전에, 클라이언트는 사용자 프로필 디렉토리로부터 경로 이름을 검색하고, 검색된 경로 이름을 이용하여 키 이벤트를 전송한다.
서버가 시작하기 전에(예컨대, 서버가 사용자 프로필에 실제 경로 이름을 저장할 수 있기 전에), 악의적인 애플리케이션이 사용자 프로필에 가짜 경로 이름을 저장했을 때, 다른 일이 일어날 수 있다. 그러한 예에서, 만약 클라이언트가 접속하기 위해 가짜 경로 이름을 사용했다면, 클라이언트는 악의적 또는 가짜 서버에 접속할 수 있다. 예를 들어, 악의적인 애플리케이션은 사용자 프로필에 경로 이름을 저장하고, 여기서, 경로 이름은 그 클라이언트가 의도한 서버가 아닌, 악의적인 서버에 키 이벤트 정보를 보내는 것을 초래할 수 있다.
그러나 클라이언트-서버 구조(10)는 유효한 서버에 접속하는 것을 클라이언트가 알 수 있도록 하는 기술들을 구현할 수 있다. 하나의 예시적인 기술은 경로 이름을 가진 파일을 잠그는 서버를 포함할 수 있다. 다른 예시적인 기술들은 피어의 PID를 아는 API를 제공하고, 및/또는 접속을 통해 PID를 보내는 경로의 피어 프로세스 ID(PID)를 제공하는 운영 시스템을 포함할 수 있다. 더 나아가, 경로 이름은 오직 유효한 사용자들에 의해 접근가능하도록 해야 한다. 따라서, 유효한 보안 토큰이 상응하는 API에 제공될 수 있다. 보안 토큰은 로컬 시스템, 관리자 및 현재 사용자들에 의해 접근가능하다. 다른 사용자들은 접근이 부정된다.
PID는 운영 시스템에 의해 각각의 프로세스에 할당된 고유 ID이다. 서버 또는 클라이언트는 운영 시스템이 제공하는 API를 이용함으로써, 그것의 피어 ID를 식별할 수 있다. 프로세스가 그것의 피어 PID를 결정하면, 프로세스는 그 PID에 상응하는 소유주(예컨대, 사용자 이름)를 포함하는 PID에 관련된 다양한 정보를 안다. 소유주를 확인함으로써, 서버 또는 클라이언트 프로세스는 피어의 사용자 ID를 알 수 있다. 사용자 이름이 기대한 것과 다르다면, 서버 또는 클라이언트 프로세스는 접속을 거절할 수 있다.
상기한 것처럼, 서버(14)는 샌드박스 내에서 실행될 수 있다. 샌드박스는 프로그램이 구동하는 제한된 환경이고, 일반적으로 그것은 그 서버 프로세스와 같은 프로세스들이 그 제한된 환경 내에서 실행될 수 있도록 라이브러리에 의해 이용된다. 샌드박스될 때, 서버 프로세스는 제한된 기능을 갖는다. 일부 실시예에서, 서버 프로세스는 CPU 사이클 및 메모리에만 접속할 수 있다. 그러한 실시예에서, 샌드박스된 서버 프로세스는 예를 들어 디스크에 쓸 수 없거나 그가 가진 창을 디스플레이할 수 없다. 서버 프로세스의 허용된 기능은 분명한 정책에 의해 규정된다. 샌드박스 라이브러리는 서버 프로세스 코드에 포함된다. 일부 실시예에 있어서, 코드는 가상 기계 안에서 실행되지 않으므로, 서버 프로세스는 원래 속도로 동작하고 운영 시스템 API 에 바로 접속한다.
샌드박스는 기밀인 컴퓨터 또는 액세스 정보에 영속적인 변화들을 만들 수 없는 코드 실행을 허가하도록 특정 운영 시스템에 의해 제공되는 보안에 영향을 미친다. 샌드박스가 제공하는 구조 및 정확한 보정들은 운영 시스템에 의존적이다. 예를 들어, 윈도우에서, 코드는 시스템 콜을 만들지 않고 어떠한 I/O의 형태로 동작할 수 있다. 대부분의 시스템 콜에서, 윈도우는 보안 확인을 동작한다. 샌드박스는 서버 프로세스가 상응하는 정책에서 정의되어 동작하는 것을 방지하는 특정 액션들에 실패하도록 보장한다.
일부 실시예에서, 샌드박스는 한정되지 않고 토큰들, 객체들 및/또는 무결성(integrity) 레벨들을 포함할 수 있는 운영 시스템 메카니즘들에 의해 제공되는 보호에 의존한다. 이러한 예시적인 메카니즘들은 운영 시스템, 그것의 구성 및 사용자 데이터를 보호하는 데 있어 매우 효율적이다. 실제 제한사항들은 제한사항들 및 서버 프로세스의 허가를 정의하기 위해 불릴 수 있는 프로그램된 인터페이스인 정책에 의해 구성된다. 일부 실시예에서, 제한사항들을 제어하는 예시적인 메카니즘들은 메인 토큰, 가장(impersonate) 토큰 및 잡(job) 토큰을 포함한다. 또한 일부 실시예들은 무결성 레벨(예컨대, 윈도우 비스타(Window VistaTM) 운영 시스템을 포함하는 실시예들)을 포함한다.
서버가 예시되면, 체크들의 시리즈는 서버가 일반 프로세스(즉, 비-샌드박스된 프로세스)로서 실행되고 있지 않는 것을 보장하기 위해 실행될 수 있다. 이러한 체크들은 클라이언트에 의해 설정되는 하나 이상의 토큰들의 값들을 체크하는 것을 포함할 수 있다. 서버는 하나 이상의 토큰들을 처리할 수 있고, 예측된 값들에 결과값들을 비교할 수 있다. 결과적인 값들이 예측된 값들과 동일하지 않으면, 서버는 샌드박스되지 않고, 서버는 정지된다. 다른 체크는 예측된 식별자에 운영 시스템에 의해 제공된 식별자를 비교하는 것을 포함할 수 있다. 제공된 식별자가 예측된 식별자와 동일하지 않으면, 서버는 샌드박스되고, 클라이언트-서버 접속은 여기서 제공되는 것처럼 실행된다.
§2.1.1 예시적인 서버 구조 및 구현
도 4는 서버(14)에 대한 서버 구조를 도시하는 기능적 블록도이다. 서버(14)는 세션층(50), 변환기층(52) 및 저장층(54)을 포함한다. 세션층(50)은 해석기 모듈(56), 스테이트풀 세션 관리자(34), 키 맵 모듈(58), 키맵 테이블(60), 변환기 모듈(62) 및 변환기 테이블(64)을 포함한다. 변환기층(52)은 변환 엔진 코어(36)를 제공하고, 변환기 유틸리티 모듈(66), 변환기 모듈(68), 하나 이상의 재작성 모듈(70) 및 사용자 이력 기록(72)을 제공한다. 저장층은 사용자 사전(76) 및 시스템 사전(78)을 포함할 수 있는 사전 모듈(74) 및 리소스(38)를 포함하다.
키맵 테이블(60) 및 변환기 테이블(64)은 데이터 테이블들이고, 키맵 모듈(58) 및 변환기 모듈(62)은 각각의 데이터 테이블에 저장된 데이터에 액세스하는 모듈들이다. 키맵 테이블(60)은 데이터를 페어(pair)로부터 커맨드로 변환하도록 제공한다. 각각의 페어는 입력 상태와 입력 이벤트(예컨대, 키보드 이벤트)를 포함한다. 예를 들어, “복합(composition)" 상태 및 [space] 키 이벤트 페어는 ”StartConversion" 커맨드와 연관되고, “변환(conversion)" 및 [space]의 페어는 ”SelectNextCandidate" 커맨드에 연관되고, “conversion" 및 [enter]의 페어는 ”CommitCurrentCandidate" 커맨드에 연관된다. 키맵(58) 모듈은 키맵 테이블(60)에 기초하여 그러한 변환들을 수행한다. 변환기 테이블(64)은 예컨대, 로마자를 히라가나로(예컨대, [a]를 [あ]로, [ka]를 [か]로) 변환하기 위한 테이블이다. 예시적인 변환기 테이블(64)이 이하 도 5a를 참조하여 논의된다. 변환기(62) 모듈은 컨버터 테이블(64)에 기초하여 그러한 변환들을 수행한다.
세션층(50)은 모든 스테이트풀 태스크들을 다루고, 수신된 키 이벤트들을 해석한다. 더욱 상세하게는, 세션층(50)은 사용자들로부터 모든 키 이벤트들을 수신하고 그것들을 커맨드로 해석한다. 예시적인 언어로서 일본어를 이용하여, 사용자 입력 [a]에 상응하는 키 이벤트는 [あ]로 번역되고, 및/또는 사용자가 스페이스바 [space]를 누르는 것에 상응하는 키 이벤트는 변환 커맨드로 번역된다. 변환기층(52)은 모든 변환에 책임을 지고, IME의 코어 기능들을 수행한다. 변환기 모듈(68)은 쿼리 문자열을 후보 문자열의 격자로 변환하는 변환 기능을 제공한다. 예를 들어, 쿼리가 [あいのうた](ainouta)일 때, 후보 문자열의 격자는 [愛の歌, 愛の詩]로 제공될 수 있다(도 6b 참조). 저장층(54)은 사전 액세스를 관리한다. 저장층(54)은 최하위층이고, 다양한 종류의 사전 데이터를 관리하고, 불변이다. 시스템 사전(78)은 히라가나 키 세트, 일본어 단어 값, 스피치의 부분 등을 포함한다. 시스템 사전(78)에 의해 제공되는 예시적인 세트들은 {あい(ai), 愛(ai/love), 명사}, {の(no), の(no), 부사}, {うた(uta), 歌(uta/song), 명사}를 포함할 수 있다. 사용자 사전(76)은 또한 그러한 세트를 제공하지만, 사용자에 의해 변경가능하고 수정가능하다.
이하 더 상세히 논의되는 것처럼, 세션층(50)에서 구현되는 예시적인 프로세스는 클라이언트 UI로부터 키 이벤트를 수신하고, 그 이벤트를 커맨드로 해석하고, 쿼리를 변환층(52)에 보내고, 필요하면 변환층(52)으로부터 그 쿼리의 결과들을 수신하고, 그 결과들에 기초한 렌더링 정보를 생성하고, 상기 클라이언트 UI에 그 렌더링 정보를 보내는 서버층을 포함한다. 예를 들어, 예시적인 언어로서 일본어를 이용하면, 해석기 모듈(56)은 상응하는 로마자(예컨대, [a])를 대신하여, 일본 히라가나 글자(예컨대, [あ])를 삽입하기 위해 삽입 글자(InsertCharacter) 커맨드로서 키 이벤트를 해석할 수 있다.
특히 도 5a 및 5b를 참조하면, 세션층(50)은 키 이벤트들로부터 히라가나 글자들의 문자열을 합성할 수 있다. 그 스트링은 사전편집(preedit)이라고 불린다. 사전 편집은 이하 상세히 논의되는 것처럼, 변환을 제공하기 위해 처리되는 쿼리로서 변환층(52)에 제공된다. 이러한 변환은 결정론적 유한한 자동장치(DFA; deterministic finite automaton)에 의해 설명될 수 있다. 도 5a는 로마자를 히라가라로의 변환기 테이블의 형태로 DFA(80)의 예시적인 스니펫을 설명하고, 도 5b는 그것의 상응하는 규칙(82)을 설명한다.
도 5a의 예시적인 변환기 테이블은 로마자에서 히라가나로의 변환을 지원한다. 예를 들어, [a]가 눌러지면, [あ]가 삽입된다. [kk]의 규칙은 보류 필드(pending field)를 포함한다. 더욱 상세하게는, 렌더링 정보가 클라이언트에게 출력될 때, DFA 상태는 리셋(reset)된다. 그러나 보류가 특정되는 때, 현재 DFA 상태는 보류 상태에 기재된다. 예를 들어, 사용자가 [kk]를 입력하면, [つ]가 클라이언트에게 가장 먼저 제공되고, IME는 [k]가 그 이후에 입력된다고 가정한다. 사용자가 [kki]를 입력하면, 출력은 [つき]가 된다.
도 6a 및 도 6b를 참조하면, 변환기 레이어(layer)(52)는 본 발명의 클라이언트-서버 IME의 코어 기능성을 제공한다. 만약 해석 모듈(56)이 후속 키 이벤트(subsequent key event)를 사전편집(preedit)(예를 들어, [あい])을 하나 이상의 대응하는 일본어 칸지(kanji) 문자([愛])로 변환하는 번역 커맨드로서 해석하는 경우, 사전편집은 세션 레이어(50)에서 생성되고, 쿼리로서 변환 레이어(52)로 제공된다. 변환 레이어(50)는 사전편집을 처리하고 단어 세그먼트들(segments)을 포함하는 하나 이상의 결과를 생성한다. 각 단어 세그먼트는 후보 세트로서 제공되고, 각각의 후보 세트는 단어의 시퀀스(sequence)를 포함한다. 각 후보는 연관된 스코어(score)를 포함하고, 후보들은 스코어의 순서(order)에 기초하여 후보 목록에 정렬된다.
도 6a는 표본적인 텍스트 스트링(text string) 변환(즉, 히라가나(Hiragana) 텍스트 스트링으로서 제공되는 "내 이름은 나카노(Nakano)이다"), 복수의 단어 세그먼트(예를 들어, 세그먼트0, 세그먼트1, 세그먼트2)를 포함하는 대응 변환 출력, 및 각 단어 세그먼트에 대응하는 후보 리스트들을 나타낸다. 각 후보 리스트는 사용자에 의해 선택될 수 있는 하나 이상의 변환 후보들을 포함한다. 단어 세그먼트는 내부적으로 생성된 단어 격자(lattice)로부터 생성되고, 도 6b를 참조하여 실시예가 보다 상세하게 설명된다. 변환 레이어(52)는 언어 모델에 기초하여 스트링 쿼리(query)로부터 이 격자를 생성한다.
도 6b는 [あいのうた]에 대응하는 표본적인 단어 격자를 나타내고, 이는 로마지(Romaji) 텍스트 스트링[ainouta], 또는 영어로 사랑 노래에 대응하는 히라가나 텍스트 스트링이다. 변환 레이어(52)는 도 6b의 표본적인 단어 격자를 생성하고, 이는 문장의 시작(BOS)과 문장의 끝(EOS) 지시자들, 및 히라가나 문자에 대한 후보 번역들을 포함한다. 상기한 바와 같이, 격자는 언어 모델에 기초하여 생성된다. 표본적인 언어 모델은 수집된 웹 데이터로부터 구성될 수 있으며, 이는 텍스트 데이터로서 제공될 수 있다.
상기한 바와 같이, 변환 레이어(52)는 하나 이상의 재기록 모듈(70)을 포함한다. 재기록 모듈(70)은 사용자의 이력(사용자 이력 기록(72)으로부터 결정된)에 기초하여 후보들을 재배열(re-ranking)하는 것을 포함할 수 있는 보충적인 프로세싱을 수행한다. 재기록기는 주요 변환 프로세스 후, 및 사용자가 결과를 입력한 후에 호출된다. 재기록기 모듈(70)은 주요 변환의 결과를 조정할 수 있고, 사용자에 의해 선택된 후보를 기록할 수 있다. 표본적인 재기록기 루틴(routines)은 사용자 이력 학습(예를 들어, 세그먼트 바운더리 및 후보 재배열을 조정), 단일 칸지 사전(예를 들어, 단일 칸지 문자를 후보에 추가), 심볼 사전(예를 들어, 심볼 문자를 후보에 추가), 날짜(예를 들어, 날짜 스트링을 후보에 추가), 연어(collocation) 사전(예를 들어, 단어 연어에 기초하여 후보 재배열) 및 숫자(예를 들어, 숫자 후보 확장)를 포함할 수 있다. 그러나 이에 제한되지 않는다.
사용자 이력 학습은 특히 유용한 재기록기 루틴인데, 이는 사용자 이력 기록(72)으로부터 결정된 것으로서, 사용자의 입력 이력에 기초하여 변환 결과를 조정하기 때문이다. 사용자가 세그먼트 바운더리 변경 및 세그먼트의 후보들 중 하나 또는 둘 다와 함께 결과를 입력하는 경우, 사용자 이력 학습 재기록기는 쿼리 및 사용자의 변경을 포함하는 한 쌍을 기록한다. 다음에 사용자가 기록된 쿼리를 입력하는 경우, 재기록기는 기록된 쌍에 기초하여 후보의 순서 및 초기 바운더리를 변경한다. 사용자 이력 학습 재기록기는 사용자의 이력을 기록하기 위해 캐싱 알고리즘(caching algorithm)을 이용한다. 캐싱 알고리즘은 최저 사용 빈도(LRU)를 포함할 수 있으나, 이에 제한되지 않는다.
저장 레이어(54)는 하부(bottom) 레이어이고, 다양한 종류의 불변(immutable) 사전 데이터를 관리한다. 저장 레이어(54)는 복수의 사전 룩 업(look ups)을 제공하는데, 사전 룩업은 공통 프리픽스 매치(common prefix match)(예를 들어, key:abc=>result:{a, ab, abc}), 정확한 매치(exact match)(예를 들어, key:abc=>result:{abc}) 및 예측 매치(predictive match)(예를 들어, key:abc=>result:{abc, abcd, abcdef,...})를 포함한다. 공통 프리픽스 매치는 정상(normal) 변환을 위해 이용된다. 예측 매치는 즉, 예상 및 제안을 위해 이용되고, 정확한 매치는 디버깅(debugging)을 위해 이용된다.
저장 레이어(54)는 TX, 다트(Darts), 및 사용자를 포함할 수 있는, 그러나 이에 제한되지 않는, 복수의 사전 유형들을 지원한다. TX 사전은 주요 사전으로서 제공되고, 레벨-순서 일진법 차수 시퀀스(level-order unary degree sequence, LOUDS) 라이브러리를 이용하여 TX에 의해 구성될 수 있다. 사용자 사전(76)은 사용자 등록된 플레인(plain) 텍스트 사전으로서 제공된다.
본 발명의 구현예는 주요 사전의 데이터 구조에 대한 LOUDS를 채용할 수 있다. LOUDS는 TRIE의 장점을 갖는 데이터 구조 알고리즘이고, 이는 스트링으로서 제공된 키를 갖는 연관 어레이(associative array)를 저장하기 위해 순서화된(ordered) 트리(tree) 데이터 구조이다. LOUDS 데이터 구조를 이용하여, 데이터는 데이터 사이즈를 매우 압축하는 비트(bit) 시퀀스로서 저장될 수 있다. 주요 사전은 LOUDS에서 키 인덱스(index), 어레이에서 단어 속성(attributes), LOUDS에서 단어 값(value)를 포함한다. 키 인덱스는 단어 속성을 지시하고, 각 단어 속성은 단어 값의 대응 리프(leaf)를 지시하거나, 또는 단어 속성은 음역(transliteration)의 특수 비트를 갖는다.
§3.0 프로세스 예시
도 7를 참조하여, 클라이언트-서버 IME 세션을 성립하기 위한 표본적인 프로세스(801)를 나타낸다. 프로세스(801)는 예를 들어 클라이언트-서버 아키텍쳐(architecture)(10)를 이용하는 단일 컴퓨터에서 구현될 수 있는데, 단계들은 오퍼레이팅 시스템에 의해 수행될 수 있고, 단계들은 클라이언트 측에서 수행될 수도 있고, 서버 측에서 수행될 수도 있다.
프로세스(801)는 클라이언트-서버 세션이 요청되는지 여부를 결정한다(800). 예를 들어, 오퍼레이팅(operating) 시스템은 클라이언트로부터 세션 요청을 수신할 수 있고, 클라이언트-서버 세션이 요청되었는지를 결정할 수 있다. 상기에서 논의된 바와 같이, 요청은 자동적으로 생성되고, 클라이언트 애플리케이션에서 IME의 인스턴트화(예를 들어, 웹 브라우저 애플리케이션에서 IME를 인스턴트화하는 것)에 따라 발행된다. 만약 세션이 요청되지 않은 경우, 프로세스(801)는 되돌아 간다.
만약 세션이 요청된 경우, 서버 실행가능한(executable) 프로그램(예를 들어, IMEserver.exe)는 초기화될 수 있고, 하나 이상의 토큰들(tokens)이 서버 실행가능한 프로그램에 의해 참조된다(802). 예를 들어, 요청은 하나 이상의 토큰을 포함할 수 있고, 서버 실행가능한 프로그램은 토큰을 참조할 수 있다. 프로세스(801)는 서버가 참조된 토큰들에 기초하여 샌드박스(sandbox)에서 인스턴트화될 수 있는지 결정한다(804). 예를 들어, 서버 실행가능한 프로그램은 토큰들을 처리할 수 있고, 만약 토큰들이 인증(authorization) 값들을 기대하는 경우, 이는 샌드박스에서 인스턴트화될 수 있다. 만약 서버가 샌드박스에서 인스턴트화될 수 없는 경우, 프로세스는 에러를 발행하고(806), 종료한다. 반대로, 만약 서버가 샌드박스에서 인스턴트화될 수 있는 경우, 프로세스는 서버를 인스턴트화한다(808). 예를 들어, 오퍼레이팅 시스템은 서버를 완전히 인스턴트화하기 위해 서버 실행가능한 프로그램의 실행을 지속한다.
프로세스(801)는 인스턴트화된 서버가 실제로 샌드박스화되었는지 여부를 결정한다(810). 제한 없는 예시를 통해, 서버는 하나 이상의 하기와 같은 체크(check)를 수행할 수 있는데, 클라이언트에 의해 세팅(set)된 하나 이상의 토큰들의 값을 체크하는 것이다. 만약 값들이 기대되는 값과 동일하지 않은 경우, 서버는 샌드박스화되지 않는다. 또한 오퍼레이팅 시스템에 의해 제공되는 식별자(identification)를 기대되는 식별자와 비교하는 것이다. 만약 제공된 식별자가 기재되는 식별자와 동일한 경우, 서버는 샌드박스화된다. 만약 서버가 샌드박스화되지 않은 경우(즉, 서버가 정상 프로세스로서 구동하는 경우), 프로세스(801)는 에러를 발행하고(806), 종료한다. 예를 들어, 오퍼레이팅 시스템은 체크들에 대한 서버 응답에 기초하여 에러를 발행할 수 있다. 만약 서버가 샌드박스화된 경우, 프로세스(801)는 사용자의 사용자 ID가 요청하는 애플리케이션과 연관되어 있는지를 결정한다(812). 제한 없는 예시를 통해, 사용자 ID는 세션 요청과 함께 제공될 수 있다.
프로세스(801)는 클라이언트와 서버 사이에서 통신 채널을 위해 경로명을 생성한다(814). 예를 들어, 서버는 경로명을 랜덤하게 생성된 128 비트 경로명으로서 생성한다. 프로세스(801)는 경로명을 사용자 ID에 대응하는 사용자 프로파일로 저장한다(816). 예를 들어, 서버는 경로명을 로컬 메모리(local memory)에 사용자 프로파일(profile)로 저장할 수 있다. 이러한 경우, 서버가 샌드박스화되는 경우라도, 정책(policy)은 서버가 로컬 메모리에 기록하는 것을 허용한다. 이러한 방법으로, 클라이언트는 서버에 의해 생성된 경로명을 결정하기 위해 사용자 프로파일에 연속적으로 접근할 수 있다. 프로세스(801)는 현재 세션에 대한 세션 ID(SID)를 발행하고(818), SID를 클라이언트로 전송한다(820). 예를 들어, 서버는 특정 서버와의 세션에 대한 고유한 SID를 발행하고, 생성된 경로명에 기초하여 성립된 연결을 이용하여 서버로 SID를 전송한다.
세션은 실행된다(822). 세션 실행의 부분으로서 수행될 수 있는 표본적인 프로세스는 도 8을 참조하여 하기에서 더 상세하게 설명된다.
프로세스는 세션이 종료되는지 여부를 결정한다(824). 예를 들어, 만약 사용자가 클라이언트 애플리케이션 및/또는 애플리케이션에서의 IME-UI를 닫는 경우, 종료 세션 요청은 클라이언트 측에서 생성될 수 있다. 복수의 구현예에서, 서버는 종료 세션 요청을 수신하고, 특정 세션에 대해 할당된 모든 자원 및/또는 오브젝트를 삭제하고, 세션은 종료한다. 만약 세션이 종료되지 않는 경우, 프로세스(801)는 822 단계로 되돌아간다. 만약 세션이 종료(terminated)된 경우, 세션은 종료되고, 프로세스(801)도 종료된다.
도 8은 클라이언트-서버 IME 세션을 이용하는 텍스트 및 텍스트 스트링 변환에 대한 표본적인 프로세스(901)를 나타내는 흐름도이다. 표본적인 프로세스(901)는 세션이 실행되는 동안(예를 들어, 도 7의 822) 수행될 수 있다. 하기에서 설명된 바와 같이, 프로세스(910)의 일부는 클라이언트에서 수행되고, 프로세스의 또 다른 일부는 서버에서 수행된다.
프로세스(901)은 사용자 입력이 검출되었는지 여부를 결정한다(900). 예를 들어, 클라이언트는 사용자 입력(예를 들어, 키 입력, 마우스 클릭, 스크린 터치)을 모니터링한다. 만약 사용자 입력이 검출되지 않는 경우, 프로세스(901)는 되돌아 간다. 만약 사용자 입력이 검출되는 경우, 프로세스(901)는 대응 키 이벤트를 생성하고(902), 키 이벤트 및 SID를 서버로 전송한다(904). 예를 들어, 클라이언트는 사용자 입력에 기초하여 키 이벤트를 생성하고, 키 이벤트 및 SID를 서버로 전송한다.
서버에서, 프로세스(901)는 키 이벤트를 해석하고(906), 키 이벤트가 문자 삽입 커맨드에 대응하는지 여부를 결정한다(908). 만약 키 이벤트가 문자 삽입 커맨드에 대응하지 않는 경우, 프로세스(901)는 910 단계를 지속한다. 만약 키 이벤트가 문자 삽입 커맨드에 대응하는 경우, 프로세스(901)는 912 단계를 지속한다.
만약, 키 이벤트가 문자 삽입 커맨드에 대응하는 경우, 프로세스(901)는 키 이벤트에 기초하여 대응 문자를 결정하고(912), 렌더링 정보를 생성한다(914). 예를 들어, 서버는 키 이벤트에 기초하여 대응 문자를 결정하고, 렌더링 정보를 생성한다. 프로세스(901)은 렌더링 정보를 클라이언트로 전송한다(916). 예를 들어, 서버는 연결을 통해 렌더링 정보를 클라이언트로 전송한다.
렌더링 정보를 수신하는 것에 응답하여, 클라이언트(12)는 클라이언트 디스플레이에, 또는 워드 프로세싱 프로그램 클라이언트(12)와 연관된 환경에서, 대응 문자를 표시하고(918), 종료한다.
서버(14)에서, 만약 키 이벤트가 문자 삽입 커맨드에 대응하지 않는 경우, 프로세스(901)는 키 이벤트가 변환 커맨드에 대응하는지 여부를 결정한다(910). 만약 키 이벤트가 변환 커맨드에 대응하는 경우, 프로세스(901)는 920 단계를 지속한다. 만약 키 이벤트가 변환 커맨드에 대응하지 않는 경우, 프로세스(901)는 930 단계를 지속한다. 920에서, 마지막 변환 실행 이후에 클라이언트 디바이스로부터 수신된 키 이벤트에 기초하여 프로세스(901)는 사전편집을 결정한다(920). 서버는 상태기반(stateful)이기 때문에, 서버는 특정 세션에 대한 키 이벤트 및 커맨드를 인식한다. 프로세스(901)는 변환에 대한 쿼리로서 사전편집을 제공하고(922), 대응 렌더링 정보를 생성하고(924), 클라이언트로 렌더링 정보를 전송한다(926). 렌더링 정보를 수신하는 것에 응답하여, 클라이언트(12)는 클라이언트 디스플레이에, 또는 워드 프로세싱 프로그램 클라이언트(12)와 연관된 환경에서, 대응 문자를 표시하고(928), 종료한다.
930에서, 만약 키 이벤트가 문자 삽입 커맨드에 대응하지 않는 경우, 또 다른 커맨드가 지시된다. 또 다른 커맨드는 움직임 커서(cursor) 커맨드 및 텍스트 선택 커맨드를 포함할 수 있다. 프로세스(901)는 지시된 커맨드를 서버에서 처리한다(930). 프로세스(901)는 렌더링 정보를 생성하고(932), 클라이언트로 렌더링 정보를 전송한다(934). 렌더링 정보를 수신하는 것에 응답하여, 클라이언트(12)는 클라이언트 디스플레이에, 또는 워드 프로세싱 프로그램 클라이언트(12)와 연관된 환경에서, 대응 문자를 표시하고(936), 종료한다.
표본적인 클라이언트-서버 세션이 설명될 것이다. 표본적인 클라이언트-서버 세션은 본 발명에 나타난 구현의 제한 없는 설명으로서 제공된다. 표본적인 클라이언트-서버 세션은 [a], [i], [space] 및 [enter] 인 키 시퀀스를 포함한다. 보다 구체적으로, 클라이언트는 [a]가 입력되었음을 지시하는 입력을 수신한다(예를 들어, 키보드에서 [a] 키가 입력된다)(도 8의 900). 클라이언트는 키 이벤트를 생성하고, 키 이벤트 및 SID를 서버로 전송한다(도 8의 902, 904). 키 이벤트를 수신함에 따라, 세션 레이어는 키 이벤트를 삽입 문자 커맨드로 해석하고(도 8의 906, 908) 및 [a]와의 커맨드를 사전편집으로 전송한다. 사전편집은 [a](일본어 로마지)를 [あ](일본어 히라가나)로 변환한다. 사전편집은 결과 "あ(a)"를 세션 레이어로 반환한다. 대응 렌더링 정보가 생성되어, 클라이언트로 전송되고(도 8의 912, 914, 916), 클라이언트는 사용자에게 [あ]를 표시한다(도 8의 918).
클라이언트는 사용자로부터 [i]가 입력되었음을 지시하는 입력을 수신하고(예를 들어, 키보드에서 [i] 키가 입력된다), 키 입력이 검출되는지를 결정한다(도 8의 900). 클라이언트는 키 이벤트를 생성하여, 키 이벤트 및 SID를 서버로 전송한다(도 8의 902, 904). 키 이벤트를 수신함에 따라, 세션 레이어는 키 이벤트를 삽입 문자 커맨드로 해석하고(도 8의 906, 908) 및 [i]와의 커맨드를 사전편집으로 전송한다. 사전편집은 [i](일본어 로마지)를 [い](일본어 히라가나)로 변환한다. 서버는 상태기반이기 때문에, 이전 변환이 [a]에서 [あ]로를 포함한다는 것을 인식한다. 따라서, 사전편집은 결과 "あい(ai)"를 세션 레이어로 반환한다. 대응 렌더링 정보가 생성되어, 클라이언트로 전송되고(도 8의 912, 914, 916), 클라이언트는 사용자에게 [あい]를 표시한다(도 8의 918).
클라이언트는 사용자로부터 [space]가 입력되었음을 지시하는 입력을 수신한다(예를 들어, 키보드에서 스페이스바(spacebar)가 입력된다)(도 8의 900). 클라이언트는 키 이벤트를 생성하여, 키 이벤트 및 SID를 서버로 전송한다(도 8의 902, 904). 키 이벤트를 수신함에 따라, 세션 레이어는 키 이벤트를 변환 커맨드로 해석한다(도 8의 906, 910). 서버는 상태기반이기 때문에, 서버는 이전 문자 시퀀스가 "あい(ai)"라는 것을 인식하고, 변환기로 "あい(ai)"와의 커맨드를 전송한다. 변환기는 [あい](일본어 히라가나)를 [愛](일본어 칸지)로 변환한다. 변환기는 결과 "愛"를 세션 레이어로 반환한다(도 8의 920, 922). 대응 렌더링 정보가 생성되어, 클라이언트로 전송되고(도 8의 924, 926), 클라이언트는 사용자에게 [愛]를 표시한다(도 8의 928).
클라이언트는 사용자로부터 [space]가 다시 입력되었음을 지시하는 입력을 수신한다(예를 들어, 키보드에서 스페이스바가 입력된다)(도 8의 900). 클라이언트는 키 이벤트를 생성하여, 키 이벤트 및 SID를 서버로 전송한다(도 8의 902, 904). 키 이벤트를 수신함에 따라, 세션 레이어는 키 이벤트를 변환 커맨드로 해석한다(도 8의 906, 910). 서버는 상태기반이기 때문에, 서버는 [あい](일본어 히라가나)를 [愛](일본어 칸지)로 변환한 이전 변환을 인식한다. 이러한 정보는 변환기로 제공되고, 변환기는 "あい"(일본어 히라가나)로부터 일본어 카타카나(Katakana)로의 하나 이상의 후보 변환들을 결정한다. 보다 구체적으로, 후보 목록이 생성되고, 후보 목록은 "あい"에 대응하는 하나 이상의 일본어 카타카나 후보를 포함한다. 예를 들어, 후보 목록은 [愛, 合, あい, 相,...](일본어 칸지, 카타카나 또는 히라가나)를 포함할 수 있다. 후보 목록은 세션 레이어로 반환되고, 렌더링 정보는 그것에 기초하여 생성된다(도 8의 920. 922, 924). 렌더링 정보는 클라이언트로 전송되고(도 8의 926), 클라이언트는 하이라이트된(highlighted) 또는 현재 선택된 후보로 지시되는 제1 후보 [愛]와 함께 후보 목록 [愛, 合, あい, 相,...]을 사용자에게 표시한다(도 8의 928).
후보 목록에서 서로 다른 후보를 선택하기 위해, 사용자는 키 이벤트를 입력할 수 있다(예를 들어, "↓" 다운 키를 입력). 사용자 입력에 응답하여, 클라이언트는 키 이벤트를 생성하여, 키 이벤트 및 SID를 서버로 전송한다(도 8의 902, 904). 키 이벤트를 수신함에 따라, 세션 레이어는 키 이벤트를 선택다음후보 커맨드로 해석하고, 상기 커맨드를 처리한다(도 8의 906, 930). 대응 렌더링 정보가 생성되고, 클라이언트로 전송된다(도 8의 932, 934). 클라이언트는 하이라이트된 또는 현재 선택된 후보로 지시되는 제2 후보 [合]와 함께 후보 목록 [愛, 合, あい, 相,...]을 사용자에게 표시한다(도 8의 936).
후보 목록으로부터 현재 선택된 후보를 선택하기 위해, 사용자는 대응 입력(예를 들어, [enter] 입력)을 제공한다. 사용자 입력에 응답하여, 클라이언트는 키 이벤트를 생성하여, 키 이벤트 및 SID를 서버로 전송한다(도 8의 902, 904). 키 이벤트를 수신함에 따라, 세션 레이어는 선택된 후보(예를 들어,[合])를 클라이언트로 입력하기 위한 대응 응답을 생성한다. 이러한 응답은 클라이언트에 의해 수신되고, 애플리케이션에서 선택된 후보(예를 들어,[合])를 나타낸다. 더 이상 문자가 입력되지 않거나 변환되지 않는 경우, 클라이언트는 취소 세션 메시지를 SID와 함께 서버로 전송한다. 이에 응답하여, 서버는 클라이언트의 세션을 종료한다.
도 9 및 도 10을 참조하여, 클라이언트-서버 아키텍쳐의 구현예는 클라이언트를 재시작할 필요없이 서버가 업데이트될 수 있게 한다. 예를 들어, 서버와 통신하고 있을 수 있는 클라이언트 애플리케이션 프로그램을 셧다운(shutdown) 및 재식작해야 할 필요없이 서버는 업데이트될 수 있다. 보다 구체적으로는, 새롭게 연결된 클라이언트가 현재 서버와 양립가능한 통신 프로토콜을 가지는 경우, 업데이트는 조용히(즉, 사용자에게 알리지(alerting) 않고) 실행될 수 있다. 업데이트의 결과에 따라, 현재 서버는 중단되고, 새로운 서버가 인스턴트화된다. 클라이언트의 통신 프로토콜의 버전이 새로운 서버의 통신 프로토콜의 버전과 양립할 수 없는 경우, 이러한 상황은 검출되고, 사용자는 프롬프트(prompted)된다.
도 9는 버전 및 프로토콜 체크를 나타내는 블록도이다. 시간 주기 t0에서 현재 클라이언트(1002) 및 현재 서버(1004) 사이에서 세션이 진행된다. 시간 주기 t0에서, 새로운 클라이언트(1006)은 현재 서버(1004)와 세션을 성립하려 시도한다. 도 9에는 나타나 있지 않음에도 불구하고, 만약 새로운 클라이언트(1006)와 현재 서버(1004)가 동일한 버전인 경우, 세션은 성립하고, 현재 클라이언트(1002) 및 새로운 클라이언트(1006) 모두 현재 서버(1004)와 상호작용을 한다. 도 9의 블록도에서, 시간 주기 t1에서 새로운 클라이언트의 버전이 현재 서버(1004)의 버전보다 새로운지 결정된다. 새로운 클라이언트의 버전이 현재 서버보다 새로운 경우이기 때문에, 현재 서버(1004)는 어보트(aborted; 즉, 중단)되고, 새로운 서버(1008)가 인스턴트화된다. 세션(1010)은 새로운 클라이언트(1006) 및 새로운 서버(1008) 사이에서 성립한다. 결과적으로, 현재 세션(1000)은 일시적으로 정지(suspended)된다. 현재 클라이언트(1002)와 인터페이싱(interfacing)하는 사용자는 이러한 일시적인 정지에 대해 알림을 받지 않는다.
새로운 서버(1008)는 자동 업데이트 프로세스에 의해 인스톨(installed)되고, 자동 업데이트 프로세스란 가장 최근 서버 버전을 체크하고 자동적으로 이를 인스톨하는 프로세스이다. 인프라스트럭쳐(infrastructure)가 이러한 기능을 수행하기 위해 제공될 수 있는데, 인프라스트럭쳐는 요청된 소프트웨어를 인스톨하고, 가장 최신으로 이를 유지하는 프로그램을 포함한다. 예를 들어, 업데이트 서비스는 컴퓨터 디바이스에서 구현될 수 있고, 인터넷 연결을 통해 원격 IME 지원 서버에서 필요한 업데이트들을 요청할 수 있다. 상기 프로그램은 현재 서버 실행가능한 파일을 겹쳐쓰기(overwrite) 할 수 있다. 복수의 구현예에서, 프로그램은 현재 서버 실행가능한 파일을 일시적인 파일로 재명명(rename) 할 수 있고, 새로운 서버 바이너리(binary)를 디폴트(default) 서버 경로로 인스톨할 수 있다. 이러한 시나리오에서, 상기 실행가능한 파일이 새로운 것으로 이미 교체되는 동안, 현재 서버는 동작한다.
시간 주기 t2에서, 현재 클라이언트(1002)의 통신 프로토콜과 새로운 서버(1008)의 통신 프로토콜이 양립가능한지 여부가 판단된다. 보다 구체적으로, 프로토콜은 프로토콜 버전 값을 저장하기 위한 특수 필드(field)를 포함한다. 새로운 서버(1008)가 초기화될 때, 서버의 프로토콜 버전 값은 로컬 파일에 저장된다. 현재 클라이언트(1002)는 상기 파일을 로드(load)하고, 서버의 프로토콜 버전이 클라이언트의 프로토콜 버전과 동일한지 여부를 체크한다. 복수의 구현예에서, 양립성 프로토콜의 테이블(table)이 제공될 수 있고, 서버의 프로토콜 버전이 클라이언트의 프로토콜 버전과 같은지 여부에 따라 구현될 수 있다.
만약 통신 프로토콜들이 양립가능한 경우, 현재 클라이언트(1002) 및 새로운 서버(1008) 사이에서 세션(1012)이 성립된다. 이러한 경우, 현재 클라이언트(1002)의 서버 버전은 새로운 서버(1008)의 서버 버전보다 오래된 것이다. 따라서, 새로운 서버 버전은 오래된 서버 버전과 양립가능(compatible)할 수 있다. 만약 통신 프로토콜이 양립하지 않는 경우, 현재 클라이언트(1002)와 새로운 서버(1008) 사이의 세션은 닫힌 채로 유지되고, 사용자는 클라이언트 측에 에러에 대해 알림을 받는다. 예를 들어, 알림은 사용자가 특정 클라이언트 애플리케이션을 재시작하도록 지시하도록 생성될 수 있다.
도 10의 특정 참조와 함께, 버전 및 프로토콜 체크를 제공하는 표본적인 프로세스(1101)가 나타난다. 도 10의 프로세스(1101)는 현재 클라이언트와 현재 서버가 현재 세션을 통해 통신하고 있는 것으로 간주한다.
프로세스(1101)는 새로운 클라이언트로부터 세션이 요청되었는지 여부를 결정한다(1100). 예를 들어, 오퍼레이팅 시스템은 클라이언트가 세션 요청을 생성했는지 여부를 결정할 수 있다. 만약 세션이 새로운 클라이언트로부터 요청되지 않은 경우, 프로세스(1101)는 되돌아 간다. 만약 세션이 새로운 클라이언트에 대해 요청된 경우, 프로세스는 현재 서버 버전이 새로운 클라이언트 버전보다 오래된 것인지 여부를 결정한다(1102). 보다 구체적으로는, 서버 버전 값을 저장하기 위해 특수 필드가 제공된다. 현재 서버가 초기화될 때, 서버의 버전 값은 또한 로컬 파일에 저장된다. 만약 현재 서버 버전이 새로운 클라이언트 버전보다 오래되지 않은 경운, 프로세스(1101)는 1104 단계를 지속한다. 예를 들어, 오퍼레이팅 시스템은 서버 버전 값들을 비교할 수 있다.
만약 현재 서버 버전이 새로운 클라이언트 버전보다 오래된 경우, 프로세스(1101)는 현재 서버를 중단하고(1106), 현재 클라이언트와의 현재 세션은 종료한다. 예를 들어, 오퍼레이팅 시스템은 현재 서버를 중단한다. 프로세스(1101)는 새로운 서버를 인스턴트화한다(1108). 프로세스(1101)는 새로운 서버 및 새로운 클라이언트를 연결한다(1110). 프로세스(1101)는 현재 클라이언트 프로토콜이 새로운 서버 프로토콜과 양립가능한지 여부를 결정한다(1112). 예를 들어, 오퍼레이팅 시스템은 프로토콜들이 양립가능한지 여부를 결정할 수 있다.
만약 현재 클라이언트 프로토콜이 새로운 서버 프로토콜과 양립가능한 경우, 프로세스(1101)는 1114단계를 지속한다. 프로세스(1101)는 현재 클라이언트를 새로운 서버와 연결하고, 세션은 이들 사이에서 성립한다(1114). 예를 들어, 서버는 경로명을 생성하고, 현재 클라이언트에 대한 SID를 발행한다. 프로세스(1101)는 현재 클라이언트 및 새로운 클라이언트의 이벤트들을 새로운 서버를 이용하여 처리하고(1118), 종료한다.
1112 단계로 돌아와서, 만약 현재 클라이언트 프로토콜이 새로운 서버 프로토콜과 양립하지 않는 경우, 프로세스(1101)는 새로운 서버를 이용하여 오직 새로운 클라이언트 이벤트들을 처리한다(1116). 프로세스(1101)는 현재 클라이언트에서 에러를 생성하고, 종료한다. 예를 들어, 오퍼레이팅 시스템은 사용자가 클라이언트를 재시작하도록 현재 클라이언트에서 에러를 생성할 수 있다.
1104 단계로 돌아와서, 프로세스(1101)는 새로운 클라이언트 프로토콜이 현재 서버 프로토콜과 양립가능한지 여부를 결정한다(1104). 예를 들어, 오퍼레이팅 시스템은 프로토콜들을 비교할 수 있다. 만약 새로운 클라이언트 프로토콜이 현재 서버 프로토콜과 양립가능한 경우, 현재 클라이어트 이벤트 및 새로운 클라이언트 이벤트는 새로운 서버를 이용하여 처리되고(1122), 프로세스는 종료한다. 만약 새로운 클라이언트 프로토콜이 현재 서버 프로토콜과 양립할 수 없는 경우, 새로운 클라이언트에서 에러가 발행된다(1124). 현재 클라이언트 이벤트는 새로운 서버를 이용하여 처리되고(1126), 프로세스는 종료한다.
상기에서 상세하게 설명된 바와 같이, 클라이언트-서버 IME 아키텍쳐(10)는, 각 키 이벤트를 전송하고, 서버로부터 렌더링 정보를 수신하는 비상태형(stateless) 클라이언트를 포함한다. 만약, 입력 세션 동안, 서버가 어보트되고 리부트(rebooted)된 경우, 의도하지 않은 렌더링 정보가 클라이언트로 제공될 수 있다. 이러한 경우를 다루기 위해, 본 발명의 클라이언트-서버 IME는 어보트된 서버를 리부팅(rebooting), 서버의 리부팅 감지, 및 새로운 세션 커런트(current)를 가져오기 위해 기록된 키 이벤트 시퀀스를 서버로 전송하는 것을 제공한다. 키 이벤트 시퀀스는 짧은 시간 주기동안 저장될 수 있다. 예를 들어, 키 이벤트 시퀀스는 현재 세션의 수명(lifespan)동안 저장될 수 있고, 그리고 세션의 종료에 따라 삭제(cleared)된다. 또 다른 실시예로서, 키 이벤트 시퀀스는 현재 세션에서 연결의 수명동안 저장될 수 있다. 상기에서 논의된 바와 같이, 서버가 클라이언트에 대한 마지막 키 이벤트 시퀀스에 대응하는 렌더링 정보를 전송한 후에, 연결은 종료(terminated)될 수 있다.
클라이언트-서버 IME 아키텍쳐(10)는 키 이벤트 시퀀스를 전송함으로써 무제한 루프(loops)되는데, 이는 반복적으로 서버와 충돌(crash)할 수 있으며, 키 이벤트 시퀀스와의 이러한 충돌이 식별되고 기록될 수 있도록 한다. 예를 들어, 특정 키 이벤트의 시퀀스의 결과로서 서버는 충돌하도록 유도될 수 있다. 서버의 리부팅(reboot)에 따라, 새로운 서버의 상태를 이제 세션으로 가져오기 위한 노력으로, 동일한 키 이벤트 시퀀스는 새롭게 인스턴트화된 서버로 다시 전송될 수도 있다. 그러나 특정 키 이벤트 시퀀스가 잘못된 키 이벤트 시퀀스일 수도 있기 때문에, 새로운 서버도 충돌하도록 유도될 수 있다.
도 11을 참조하여, 클라이언트-서버 IME 세션을 재성립하는 표본적인 프로세스(1201)를 설명한다. 프로세스(1201)는 이벤트가 클라이언트에서 생성되는지 여부를 결정한다(1200). 예를 들어, 클라이언트(12)는 사용자 입력에 기초하여 키 이벤트를 모니터링할 수 있다.
만약 이벤트가 클라이언트에서 생성되지 않는다면, 프로세스(1201)는 되돌아 간다. 만약 이벤트가 클라이언트에서 생성된 경우, 프로세스(1201)는 이벤트 시퀀스에서 이벤트를 기록한다(1202). 보다 구체적으로는, 클라이언트는 클라이언트 프로세스가 실행되는 디바이스의 로컬 메모리에서 이벤트 시퀀스에 이벤트를 저장할 수 있다. 이벤트는 서버로 전송되고(1204), 프로세스(1201)는 서버가 어보트되는지 여부를 결정한다(1206). 예를 들어, 클라이언트(12), IME 지원 프레임눠크(framework) 또는 컴퓨터 오퍼레이팅 시스템은 서버(14)가 기능을 정지하였는지 여부를 결정할 수 있다.
만약 서버가 어보트되지 않았다면, 프로세스는 1208 단계를 지속하는데, 이는 이벤트에 대응하는 렌더링 정보가 서버로부터 클라이언트에 수신된다(1208). 프로세스(1201)는 세션이 종료될 것인지 여부를 결정한다(1212). 만약 세션이 종료되지 않을 것이며, 프로세스(1201)는 1200 단계로 되돌아 간다. 만약 세션이 종료될 것이면, 프로세스(1201)는 종료한다.
1206 단계로 돌아가면, 만약 서버가 어보트된 경우(1206), 프로세스(1201)는 어보트가 연속적인 어보트(예를 들어, 둘째, 셋째 또는 넷째 연속적인 어보트)였는지 여부를 결정한다(1207). 예를 들어, 각 서버 어보트 후에, 카운터(counter)는 IME 클라이언트(12), IME 지원 프레임워크 또는 오퍼레이팅 시스템에 의해 증가될 수 있다. 만약 어보트가 연속적인 어보트인 경우, 에러는 생성되고(1211), 프로세스(1201)는 종료한다. 에러는 클라이언트에서 생성될 수 있고, 사용자에게 표시될 수 있다. 에러는 어보트와 서버들 인스턴트화의 무한 루프(loop)를 방지한다.
만약 어보트가 연속적인 어보트가 아니였던 경우, 프로세스(1201)는 새로운 서버를 인스턴트화한다(1210). 보다 구체적으로는, 상기에서 상세하게 설명된 바와 같이, 오퍼레이팅 시스템은 새로운 서버를 인스턴트화할 수 있다. 클라이언트는 새로운 서버와 연결되고, 프로세스(1201)는 새로운 세션을 성립한다(1214). 기록된 이벤트 시퀀스는 클라이언트에서 새로운 서버로 전송된다(1216). 이벤트 시퀀스를 이용하여, 서버(14)는 서버(14)가 어보트된 경우, 클라이언트(12)에 대한 이전 세션과 같은 동일한 상태인 클라이언트(12)에 대한 세션을 인스턴트화할 수 있다. 다음, 프로세스(1201)는 1206 단계로 되돌아간다.
본 명세서의 실시예들과 본 명세서에 기재된 모든 기능적 동작들은 디지털 전자 회로로 구현되거나, 또는 상세한 설명에 기재된 구조 및 그들의 구조적 등가물을 포함하는 컴퓨터 소프트웨어, 펌웨어, 또는 하드웨어로 구현되거나, 또는 이들 중 하나 이상의 조합으로 구현될 수 있다. 본 명세서의 실시예들은 하나 이상의 컴퓨터 프로그램 제품, 즉, 데이터 프로세싱 장치에 의해 실행되거나 또는 그 장치의 동작을 제어하도록, 컴퓨터 판독가능 매체에 부호화된 컴퓨터 프로그램 인스트럭션의 하나 이상의 모듈로서 구현될 수 있다. 컴퓨터 판독가능 매체는 기계-판독가능 저장 디바이스, 기계- 판독가능 저장 기판(substrate), 메모리 디바이스, 기계-판독가능 전파되는 신호(propagated signal)에 영향을 미치는 대상(matter)의 조성물(composition), 이들 중 하나 이상의 조합일 수 있다. "데이터 프로세싱 장치"라는 용어는 데이터를 처리하기 위한 장치, 디바이스, 및 기계를 포괄하며, 예를 들어, 프로그래머블 프로세서, 컴퓨터, 또는 다중 프로세서 또는 컴퓨터들을 포함한다. 이 장치는 하드웨어이 외에도, 당해 컴퓨터 프로그램에 대한 실행 환경을 생성하는 코드를 포함하고, 코드는 예를 들어, 프로세서 펌웨어, 프로토콜 스택, 데이터베이스 관리 시스템, 운영 시스템, 또는 이들 중 하나 이상의 조합을 구성한다. 전파되는 신호는 인공적(artificially)으로 생성되고, 데이터 처리 장치에 의한 실행을 위하여 적절한 수신 장치로 전송하기 위한 정보를 인코딩하기 위해 생성되는 신호로서, 예를 들어, 기계-생성 전기, 광, 또는 전자기 신호가 있다.
컴퓨터 프로그램(프로그램, 소프트웨어, 소프트웨어 애플리케이션, 스크립트 또는 코드로도 알려짐)은 컴파일 또는 인터프리터 언어를 포함하는 모든 형태의 프로그래밍 언어로 작성될 수 있으며, 독립형 프로그램이나 모듈, 컴포넌트, 서브루틴, 또는 컴퓨터 환경에서 사용하기에 적합한 그 밖의 유닛을 포함하는 임의의 형태로도 배치될 수 있다. 컴퓨터 프로그램은 파일 시스템의 파일에 반드시 상응해야 하는 것은 아니다. 프로그램은 다른 프로그램 또는 데이터를 보유하는 파일의 일부에 저장되거나(예를 들어, 마크업 언어 문서 내에 저장되는 하나 이상의 스크립트), 당해 프로그램 전용의 단일 파일에 저장되거나, 또는 다수의 조화된(coordinated) 파일들(예를 들어, 하나 이상의 모듈, 서브프로그램, 코드의 부분을 저장하는 파일)에 저장될 수 있다. 컴퓨터 프로그램은 하나의 컴퓨터에서, 또는 한 위치에 배치되거나 또는 다수의 위치에 걸쳐서 분산되고 통신 네트워크에 의해 접속된 다수의 컴퓨터에서 실행되도록 배치될 수 있다.
본 명세서에 설명된 프로세스와 논리 흐름은 하나 이상의 프로그래머블 프로세서에 의해 수행될 수 있고, 이 프로그래머블 프로세서는 입력 데이터에 작용하여 출력을 생성함으로써 기능들을 수행하는 하나 이상의 컴퓨터 프로그램들을 실행한다. 예를 들어, FPGA(field programmable gate array) 또는 ASIC(application specific integrated circuit)과 같은 전용 논리 회로가 프로세스와 논리 흐름을 수행하거나, 장치를 구현할 수 있다.
컴퓨터 프로그램의 실행에 적합한 프로세서에는, 예를 들어, 범용 및 전용 마이크로프로세서, 및 임의 종류의 디지털 컴퓨터 중 하나 이상의 프로세서가 있다. 일반적으로, 프로세서는 판독 전용 메모리(ROM), 또는 랜덤 액세스 메모리(RAM), 또는 양자로부터 인스트럭션과 데이터를 수신한다. 컴퓨터의 필수 구성요소는 인스트럭션을 실행하는 프로세서, 및 인스트럭션과 데이터를 저장하는 하나 이상의 메모리 디바이스이다. 일반적으로, 컴퓨터는 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스(예를 들어, 자기 디스크, 광자기 디스크, 또는 광디스크)를 포함하거나, 또는 이 디바이스와 데이터를 송수신하기 위하여 동작적으로(operatively) 결합될 수 있다. 하지만 컴퓨터는 이러한 디바이스를 반드시 구비할 필요는 없다. 더욱이, 컴퓨터는 예를 들어, 모바일 전화기, 개인 정보 단말(PDA), 모바일 오디오 재생기, GPS(global positioning system) 수신기 등과 같은 다른 디바이스에 내장될 수 있다. 컴퓨터 프로그램 인스트럭션과 데이터를 저장하기 적합한 컴퓨터 판독가능 매체에는, 예를 들어, 반도체 메모리 디바이스(예를 들어, EPROM, EEPROM, 플래시 메모리 디바이스); 자기 디스크(예를 들어, 내부 하드디스크, 착탈식 디스크); 광자기 디스크; 및 CD ROM과 DVD-ROM 디스크를 포함하는 모든 형태의 비휘발성 메모리, 매체 및 메모리 디바이스가 포함된다. 프로세서와 메모리는 전용 논리 회로에 의해 보완되거나 또는 전용 논리 회로에 통합될 수 있다.
사용자와의 상호작용을 제공하기 위하여, 본 명세서의 실시예는, 정보를 사용자에게 디스플레이하기 위한 디스플레이 디바이스(예를 들어, CRT(cathode ray tube) 또는 LCD(liquid crystal display) 모니터), 키보드 및 포인팅 디바이스(예를 들어, 마우스 또는 트랙볼)를 구비한 컴퓨터에 구현될 수 있다. 사용자는 키보드와 포인팅 디바이스를 이용하여 컴퓨터에 입력을 제공할 수 있다. 사용자와의 상호작용을 제공하기 위하여 다른 종류의 디바이스가 또한 사용될 수 있다. 예를 들어, 사용자에게 제공되는 피드백(feedback)은 예를 들어, 시각 피드백, 청각 피드백 또는 촉각 피드백인 임의 형태의 감각 피드백일 수 있고, 사용자로부터의 입력은 음향, 음성 또는 촉각 입력을 포함하는 임의의 형태로 수신될 수 있다.
본 명세서의 실시예는, 예를 들어, 데이터 서버와 같은 백엔드(back-end) 구성요소를 구비하는 컴퓨팅 시스템; 또는 예를 들어, 애플리케이션 서버와 같은 미들웨어 구성요소를 구비하는 컴퓨팅 시스템; 또는 예를 들어, 사용자가 본 명세서의 실시예와 상호작용할 수 있는 그래픽 사용자 인터페이스 또는 웹브라우저를 구비한 클라이언트 컴퓨터와 같은 프론트엔드(front-end) 구성요소를 구비하는 컴퓨터 시스템; 또는 이러한 백엔드, 미들웨어 또는 프론트엔드 구성요소들의 임의 조합을 구비하는 컴퓨팅 시스템으로 구현될 수 있다. 시스템의 구성요소는 디지털 데이터 통신의 임의 형태 또는 매체(예를 들어, 통신 네트워크)에 의해 상호접속될 수 있다. 통신 네트워크의 예에는 근거리 네트워크(LAN)와 인터넷과 같은 광역 네트워크(WAN: 예컨대, 인터넷)가 포함된다.
컴퓨팅 시스템은 클라이언트와 서버를 포함할 수 있다. 클라이언트와 서버는 보통 서로 떨어져 있으며, 일반적으로는 통신 네트워크를 통하여 상호작용한다. 클라이언트와 서버의 관계는 각각의 컴퓨터상에서 실행되고 상호 클라이언트-서버 관계를 갖는 컴퓨터 프로그램에 의하여 발생한다.
본 명세서가 다수의 특정 사항을 포함하고 있지만, 이는 임의 발명의 범위나 청구할 사항의 범위에 대한 어떠한 제약으로서도 이해되어서는 안 되며, 본 명세서의 특정한 실시예에 고유한 특징의 설명으로서 이해되어야 한다. 별개의 실시예의 문맥으로 본 명세서에서 설명된 소정 특징은 조합되어 단일 실시예로 구현될 수 있다. 반대로, 단일 실시예의 문맥에서 설명한 다양한 특징은 복수의 실시예에서 별개로 구현되거나 어떤 적당한 하위 조합으로서도 구현 가능하다. 또한, 앞에서 특징이 소정 조합에서 동작하는 것으로서 설명되고 그와 같이 청구되었지만, 청구된 조합으로부터의 하나 이상의 특징은 일부 경우에 해당 조합으로부터 삭제될 수 있으며, 청구된 조합은 하위 조합이나 하위 조합의 변형으로 될 수 있다.
마찬가지로, 도면에서 특정한 순서로 동작을 묘사하고 있지만, 그러한 동작이 바람직한 결과를 얻기 위해, 도시한 특정 순서나 순차적인 순서로 수행되어야 한다거나, 설명한 모든 동작이 수행되어야 한다는 것을 의미하는 것은 아니다. 소정 환경에서, 멀티태스킹 및 병렬 프로세싱이 바람직할 수 있다. 또한, 상술한 실시예에 있어서 다양한 시스템 구성요소의 분리는 모든 실시예에서 그러한 분리를 요구하는 것으로 이해되어서는 안 되며, 설명한 프로그램 구성요소와 시스템은 단일 소프트웨어 제품으로 통합되거나 또는 복수의 소프트웨어 제품으로 패키지될 수 있다는 점을 이해되어야 한다.
본 명세서의 많은 실시예들이 설명되었다. 그러나 본 명세서의 요지와 범위를 벗어나지 않는 많은 변형예들이 만들어질 수 있다는 것으로 이해되어야 한다. 따라서 다른 실시예들은 후술하는 청구 범위에 속한다.
12: 애플리케이션
14: 스테이트풀 서버
30: IME 동적 링크 라이브러리(DLL)
34: 스테이트풀 세션 관리자
36: 변환 엔진 코어
38: 리소스

Claims (26)

  1. 컴퓨터에서 구현되는 방법으로서,
    입력 방법 편집기(IME) 서버에서, 상기 IME 서버와 복수의 IME 클라이언트들 사이의 개별적인 통신 세션들을 통하여 클라이언트 디바이스와 연관된 상기 복수의 IME 클라이언트들로부터 상기 IME 서버로 송신되는 복수의 키 이벤트들을 수신하는 단계 ― 상기 IME 서버는 상기 IME 서버와 상기 복수의 IME 클라이언트들 사이의 개별적인 통신 세션들의 요청들과 응답들 모두를 저장하는 스테이트풀(stateful) 서버이고, 각각의 상기 복수의 IME 클라이언트들은 상응하는 키 이벤트에 기초하여 상기 IME 서버로 요청을 발행하는 스테이트리스(stateless) IME 클라이언트임 ― ;
    상기 IME 서버에 의해, 상기 개별적인 통신 세션들 중 제1 통신 세션을 통하여 수신되는 상기 복수의 키 이벤트들 중 제1 키 이벤트에 기초하여 하나 이상의 로고그래픽 문자를 식별하는 단계;
    상기 IME 서버에 의해, 상기 하나 이상의 로고그래픽 문자에 상응하는 렌더링 정보를 생성하는 단계; 및
    상기 하나 이상의 로고그래픽 문자를 디스플레이하기 위하여, 상기 IME 서버로부터 상기 복수의 IME 클라이언트들 중 상기 제1 통신 세션과 연관된 IME 클라이언트로 상기 렌더링 정보를 송신하는 단계
    를 포함하고,
    상기 개별적인 통신 세션들은 상기 IME 서버와 상기 복수의 IME 클라이언트들 사이에서 동시에 조절(coordinate)되고,
    상기 IME 서버는 상기 개별적인 통신 세션들 중 하나와 연관된 접속들 중 하나를 통하여 상기 복수의 키 이벤트들 중 하나를 수신하기 위해 상기 복수의 IME 클라이언트들로의 접속들 사이에서 전환되는,
    컴퓨터에서 구현되는 방법.
  2. 제 1 항에 있어서,
    상기 IME 클라이언트로부터 세션 요청을 수신하는 단계;
    상기 세션 요청에 기초하여 상기 IME 클라이언트와 상기 IME 서버 사이에 세션을 확립하는 단계;
    상기 IME 서버가 세션 식별자를 생성하는 단계;
    상기 세션 식별자를 상기 IME 클라이언트에 송신하는 단계 ― 상기 세션 식별자는 후속하는 각각의 키 이벤트와 함께 상기 IME 클라이언트로부터 상기 IME 서버로 전송됨 ―; 및
    키 이벤트를 수신할 때 상기 IME 서버에서 상기 세션 식별자를 수신하는 단계
    를 더 포함하는,
    컴퓨터에서 구현되는 방법.
  3. 제 2 항에 있어서,
    상기 복수의 IME 클라이언트들에 대한 세션 식별자들을 수신하는 단계;
    각 세션 식별자를 고유 세션 데이터(unique session data)와 연관시키는 단계; 및
    개별적인 키 이벤트와 함께 송신된 개별적인 세션 식별자와 연관된 상기 고유 세션 데이터의 문맥에서(in the context of), 수신된 각각의 키 이벤트를 처리하는 단계
    를 더 포함하는,
    컴퓨터에서 구현되는 방법.
  4. 제 1 항에 있어서,
    상기 IME 클라이언트로부터 세션 요청을 수신하는 단계;
    상기 세션 요청에 응답하여 상기 IME 서버를 인스턴스화하는 단계;
    상기 IME 클라이언트와 상기 IME 서버 사이의 통신 경로명을 생성하는 단계; 및
    상기 IME 클라이언트에 의한 액세스에 대한 상기 경로명을 저장하는 단계
    를 더 포함하는,
    컴퓨터에서 구현되는 방법.
  5. 제 4 항에 있어서,
    상기 경로명을 저장하는 단계는 상기 IME 클라이언트의 사용자와 연관된 사용자 프로파일에 상기 경로명을 저장하는 단계를 포함하는,
    컴퓨터에서 구현되는 방법.
  6. 제 4 항에 있어서,
    상기 세션 요청에 기초하여 사용자 식별(user identification)을 판단하는 단계;
    상기 사용자 식별과 연관된 사용자 프로파일을 식별하는 단계; 및
    상기 사용자 프로파일에 상기 경로명을 저장하는 단계
    를 더 포함하는,
    컴퓨터에서 구현되는 방법.
  7. 제 4 항에 있어서,
    상기 경로명은 무작위로 생성된 경로명과 URL(uniform resource locator) 중 하나를 포함하는,
    컴퓨터에서 구현되는 방법.
  8. 제 1 항에 있어서,
    상기 IME 클라이언트와 상기 IME 서버 사이에 세션을 확립하는 단계 ― 상기 세션은 열리거나 닫힐 수 있는 상기 IME 클라이언트와 상기 IME 서버 사이의 하나 이상의 접속을 포함함 ― ;
    접속을 여는 단계;
    상기 접속이 열려있는 동안 상기 IME 클라이언트와 상기 IME 서버 사이의 통신을 모니터링하는 단계; 및
    키 이벤트와 개별적인 렌더링 정보 중 하나가 미리 결정된 시간 기간 내에 송신되지 않으면 상기 접속을 닫는 단계
    를 더 포함하는,
    컴퓨터에서 구현되는 방법.
  9. 제 8 항에 있어서,
    상기 키 이벤트는 상기 접속이 열린 후 상기 IME 서버에 송신되고,
    상기 개별적인 렌더링 정보를 상기 IME 클라이언트에 송신하는 것에 응답하여 상기 접속을 닫는 단계를 더 포함하는,
    컴퓨터에서 구현되는 방법.
  10. 제 1 항에 있어서,
    상기 IME 서버에서 상응하는 커맨드를 제공하기 위하여 상기 제1 키 이벤트를 해석하는 단계를 더 포함하고, 상기 렌더링 정보는 상기 상응하는 커맨드에 기초하여 생성되고, 상기 상응하는 커맨드는 문자 삽입 커맨드(an insert character command)와 변환 커맨드(a convert command) 중 하나를 포함하는,
    컴퓨터에서 구현되는 방법.
  11. 제 1 항에 있어서,
    상기 IME 서버에서, 상기 IME 서버와 통신 중이고 스테이트리스인 제2 IME 클라이언트로부터 상기 IME 서버에 송신되는 제2 키 이벤트를 수신하는 단계;
    상기 제2 키 이벤트에 기초하여 하나 이상의 제2 로고그래픽 문자를 식별하는 단계;
    상기 하나 이상의 제2 로고그래픽 문자에 기초하여 제2 렌더링 정보를 생성하는 단계; 및
    상기 하나 이상의 제2 로고그래픽 문자를 디스플레이하기 위하여, 상기 IME 서버로부터 상기 제2 IME 클라이언트로 상기 제2 렌더링 정보를 송신하는 단계
    를 더 포함하는,
    컴퓨터에서 구현되는 방법.
  12. 제 11 항에 있어서,
    상기 IME 클라이언트와 상기 제2 IME 클라이언트는 공통 디바이스 상에서 실행되는 애플리케이션 프로그램들을 포함하는,
    컴퓨터에서 구현되는 방법.
  13. 시스템으로서,
    명령들을 구비한 컴퓨터-판독가능 저장 매체; 및
    하나 이상의 데이터 처리 장치를 구비하고, 상기 하나 이상의 데이터 처리 장치가 동작들을 수행하도록 상기 명령들을 실행하는 디바이스를 포함하고, 상기 동작들은,
    입력 방법 편집기(IME) 서버에서, 상기 IME 서버와 복수의 IME 클라이언트들 사이의 개별적인 통신 세션들을 통하여 클라이언트 디바이스와 연관된 상기 복수의 IME 클라이언트들로부터 상기 IME 서버로 송신되는 복수의 키 이벤트들을 수신하는 동작 ― 상기 IME 서버는 상기 IME 서버와 상기 복수의 IME 클라이언트들 사이의 개별적인 통신 세션들의 요청들과 응답들 모두를 저장하는 스테이트풀 서버이고, 각각의 상기 복수의 IME 클라이언트들은 상응하는 키 이벤트에 기초하여 상기 IME 서버로 요청을 발행하는 스테이트리스 IME 클라이언트임 ― ;
    상기 IME 서버에 의해, 상기 개별적인 통신 세션들 중 제1 통신 세션을 통하여 수신되는 상기 복수의 키 이벤트들 중 제1 키 이벤트에 기초하여 하나 이상의 로고그래픽 문자를 식별하는 동작;
    상기 IME 서버에 의해, 상기 하나 이상의 로고그래픽 문자에 상응하는 렌더링 정보를 생성하는 동작; 및
    상기 하나 이상의 로고그래픽 문자를 디스플레이하기 위하여, 상기 IME 서버로부터 상기 복수의 IME 클라이언트들 중 상기 제1 통신 세션과 연관된 IME 클라이언트로 상기 렌더링 정보를 송신하는 동작
    을 포함하고,
    상기 개별적인 통신 세션들은 상기 IME 서버와 상기 복수의 IME 클라이언트들 사이에서 동시에 조절되고,
    상기 IME 서버는 상기 개별적인 통신 세션들 중 하나와 연관된 접속들 중 하나를 통하여 상기 복수의 키 이벤트들 중 하나를 수신하기 위해 상기 복수의 IME 클라이언트들로의 접속들 사이에서 전환되는,
    시스템.
  14. 제 13 항에 있어서,
    상기 동작들은,
    상기 IME 클라이언트로부터 세션 요청을 수신하는 동작;
    상기 세션 요청에 기초하여 상기 IME 클라이언트와 상기 IME 서버 사이에 세션을 확립하는 동작;
    상기 IME 서버가 세션 식별자를 생성하는 동작;
    상기 세션 식별자를 상기 IME 클라이언트에 송신하는 동작;
    상기 IME 클라이언트로부터 상기 세션 식별자를 후속하는 각각의 키 이벤트와 함께 송신하는 동작; 및
    상기 키 이벤트를 수신할 때 상기 IME 서버에서 상기 세션 식별자를 수신하는 동작
    을 더 포함하는,
    시스템.
  15. 제 14 항에 있어서,
    상기 복수의 IME 클라이언트들에 대한 세션 식별자들을 수신하는 동작;
    각 세션 식별자를 고유 세션 데이터와 연관시키는 동작; 및
    개별적인 키 이벤트와 함께 송신된 개별적인 세션 식별자와 연관된 상기 고유 세션 데이터의 문맥에서, 수신된 각각의 키 이벤트를 처리하는 동작
    을 더 포함하는,
    시스템.
  16. 제 13 항에 있어서,
    상기 IME 클라이언트로부터 세션 요청을 수신하는 동작;
    상기 세션 요청에 응답하여 상기 IME 서버를 인스턴스화하는 동작;
    상기 IME 클라이언트와 상기 IME 서버 사이의 통신 경로명을 생성하는 동작; 및
    상기 IME 클라이언트에 의한 액세스에 대한 상기 경로명을 저장하는 동작
    을 더 포함하는,
    시스템.
  17. 제 16 항에 있어서,
    상기 경로명을 저장하는 동작은 상기 IME 클라이언트의 사용자와 연관된 사용자 프로파일에 상기 경로명을 저장하는 동작을 포함하는,
    시스템.
  18. 제 16 항에 있어서,
    상기 세션 요청에 기초하여 사용자 식별을 판단하는 동작;
    상기 사용자 식별과 연관된 사용자 프로파일을 식별하는 동작; 및
    상기 사용자 프로파일에 상기 경로명을 저장하는 동작
    을 더 포함하는,
    시스템.
  19. 제 16 항에 있어서,
    상기 경로명은 무작위로 생성된 경로명과 URL(uniform resource locator) 중 하나를 포함하는,
    시스템.
  20. 제 13 항에 있어서,
    상기 IME 클라이언트와 상기 IME 서버 사이에 세션을 확립하는 동작 ― 상기 세션은 열리거나 닫힐 수 있는 상기 IME 클라이언트와 상기 IME 서버 사이의 하나 이상의 접속을 포함함 ― ;
    접속을 여는 동작;
    상기 접속이 열려있는 동안 상기 IME 클라이언트와 상기 IME 서버 사이의 통신을 모니터링하는 동작; 및
    키 이벤트와 개별적인 렌더링 정보 중 하나가 미리 결정된 시간 기간 내에 송신되지 않으면 상기 접속을 닫는 동작
    을 더 포함하는,
    시스템.
  21. 제 20 항에 있어서,
    상기 키 이벤트는 상기 접속이 열린 후 상기 IME 서버에 송신되고,
    상기 개별적인 렌더링 정보를 상기 IME 클라이언트에 송신하는 것에 응답하여 상기 접속을 닫는 동작을 더 포함하는,
    시스템.
  22. 제 13 항에 있어서,
    상기 IME 서버에서 상응하는 커맨드를 제공하기 위하여 상기 제1 키 이벤트를 해석하는 동작을 더 포함하고, 상기 렌더링 정보는 상기 상응하는 커맨드에 기초하여 생성되는,
    시스템.
  23. 제 22 항에 있어서,
    상기 상응하는 커맨드는 문자 삽입 커맨드와 변환 커맨드 중 하나를 포함하는,
    시스템.
  24. 제 13 항에 있어서,
    상기 동작들은,
    상기 IME 서버에서, 상기 IME 서버와 통신 중이고 스테이트리스인 제2 IME 클라이언트로부터 상기 IME 서버에 송신되는 제2 키 이벤트를 수신하는 동작;
    상기 제2 키 이벤트에 기초하여 하나 이상의 제2 로고그래픽 문자를 식별하는 동작;
    상기 하나 이상의 제2 로고그래픽 문자에 기초하여 제2 렌더링 정보를 생성하는 동작; 및
    상기 하나 이상의 제2 로고그래픽 문자를 디스플레이하기 위하여, 상기 IME 서버로부터 상기 제2 IME 클라이언트로 상기 제2 렌더링 정보를 송신하는 동작
    을 더 포함하는,
    시스템.
  25. 제 24 항에 있어서,
    상기 IME 클라이언트와 상기 제2 IME 클라이언트는 상기 클라이언트 디바이스 상에서 실행되는 애플리케이션 프로그램들을 포함하는,
    시스템.
  26. 명령들을 저장한 비-일시적인 컴퓨터-판독가능 매체로서,
    상기 명령들은 하나 이상의 프로세서에 의해 실행가능하고, 상기 하나 이상의 프로세서에 의해 실행될 때, 상기 하나 이상의 프로세서가 동작들을 수행하게 하고, 상기 동작들은,
    입력 방법 편집기(IME) 서버에서, 상기 IME 서버와 복수의 IME 클라이언트들 사이의 개별적인 통신 세션들을 통하여 클라이언트 디바이스와 연관된 상기 복수의 IME 클라이언트들로부터 상기 IME 서버로 송신되는 복수의 키 이벤트들을 수신하는 동작 ― 상기 IME 서버는 상기 IME 서버와 상기 복수의 IME 클라이언트들 사이의 개별적인 통신 세션들의 요청들과 응답들 모두를 저장하는 스테이트풀 서버이고, 각각의 상기 복수의 IME 클라이언트들은 상응하는 키 이벤트에 기초하여 상기 IME 서버로 요청을 발행하는 스테이트리스 IME 클라이언트임 ― ;
    상기 개별적인 통신 세션들 중 제1 통신 세션을 통하여 수신되는 상기 복수의 키 이벤트들 중 제1 키 이벤트에 기초하여 하나 이상의 로고그래픽 문자를 식별하는 동작;
    상기 하나 이상의 로고그래픽 문자에 상응하는 렌더링 정보를 생성하는 동작; 및
    상기 하나 이상의 로고그래픽 문자를 디스플레이하기 위하여, 상기 IME 서버로부터 상기 복수의 IME 클라이언트들 중 상기 제1 통신 세션과 연관된 IME 클라이언트로 상기 렌더링 정보를 송신하는 동작
    을 포함하고,
    상기 개별적인 통신 세션들은 상기 IME 서버와 상기 복수의 IME 클라이언트들 사이에서 동시에 조절되고,
    상기 IME 서버는 상기 개별적인 통신 세션들 중 하나와 연관된 접속들 중 하나를 통하여 상기 복수의 키 이벤트들 중 하나를 수신하기 위해 상기 복수의 IME 클라이언트들로의 접속들 사이에서 전환되는,
    명령들을 저장한 비-일시적인 컴퓨터-판독가능 매체.
KR1020177000295A 2009-11-27 2010-11-24 클라이언트-서버 입력 방법 편집기 구조 KR101716802B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US26471409P 2009-11-27 2009-11-27
US61/264,714 2009-11-27
PCT/US2010/058064 WO2011066434A2 (en) 2009-11-27 2010-11-24 Client-server input method editor architecture

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020127013858A Division KR101743122B1 (ko) 2009-11-27 2010-11-24 클라이언트-서버 입력 방법 편집기 구조

Publications (2)

Publication Number Publication Date
KR20170005519A KR20170005519A (ko) 2017-01-13
KR101716802B1 true KR101716802B1 (ko) 2017-03-15

Family

ID=44067234

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020127013858A KR101743122B1 (ko) 2009-11-27 2010-11-24 클라이언트-서버 입력 방법 편집기 구조
KR1020177000295A KR101716802B1 (ko) 2009-11-27 2010-11-24 클라이언트-서버 입력 방법 편집기 구조

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020127013858A KR101743122B1 (ko) 2009-11-27 2010-11-24 클라이언트-서버 입력 방법 편집기 구조

Country Status (4)

Country Link
US (2) US8904012B2 (ko)
KR (2) KR101743122B1 (ko)
CN (2) CN106126350B (ko)
WO (1) WO2011066434A2 (ko)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110184723A1 (en) * 2010-01-25 2011-07-28 Microsoft Corporation Phonetic suggestion engine
EP2558923A4 (en) * 2010-04-12 2014-11-19 Google Inc EXTENSION FRAMEWORK FOR AN ENTRY METHOD EDITOR
US9348479B2 (en) 2011-12-08 2016-05-24 Microsoft Technology Licensing, Llc Sentiment aware user interface customization
US9378290B2 (en) 2011-12-20 2016-06-28 Microsoft Technology Licensing, Llc Scenario-adaptive input method editor
CN104428734A (zh) 2012-06-25 2015-03-18 微软公司 输入法编辑器应用平台
US8959109B2 (en) 2012-08-06 2015-02-17 Microsoft Corporation Business intelligent in-document suggestions
US9767156B2 (en) 2012-08-30 2017-09-19 Microsoft Technology Licensing, Llc Feature-based candidate selection
CN105580004A (zh) 2013-08-09 2016-05-11 微软技术许可有限责任公司 提供语言帮助的输入方法编辑器
US10019985B2 (en) 2013-11-04 2018-07-10 Google Llc Asynchronous optimization for sequence training of neural networks
CN104679766A (zh) * 2013-11-28 2015-06-03 英业达科技有限公司 输入系统及其方法
JP5904559B2 (ja) 2013-12-20 2016-04-13 国立研究開発法人情報通信研究機構 シナリオ生成装置、及びそのためのコンピュータプログラム
JP5907393B2 (ja) * 2013-12-20 2016-04-26 国立研究開発法人情報通信研究機構 複雑述語テンプレート収集装置、及びそのためのコンピュータプログラム
US9959069B2 (en) * 2015-02-12 2018-05-01 Microsoft Technology Licensing, Llc Externalized execution of input method editor
CN107179952B (zh) * 2016-03-11 2021-03-23 思杰系统有限公司 虚拟应用客户端和服务器之间的协同输入法编辑器(ime)活动
CN106815525B (zh) * 2016-12-13 2020-03-31 北京元心科技有限公司 数据传递方法及装置
TWI658401B (zh) 2017-11-14 2019-05-01 財團法人工業技術研究院 基於虛擬化行動架構之行動通訊裝置及其相關輸入法切換方法
CN117056947A (zh) 2018-05-07 2023-11-14 谷歌有限责任公司 在计算设备之间同步访问控制
CN108845791B (zh) * 2018-05-31 2022-03-18 浪潮金融信息技术有限公司 应用程序代码开发处理方法及装置、可读存储介质、终端
US12086658B2 (en) * 2019-10-11 2024-09-10 Nippon Telegraph And Telephone Corporation Service cooperation support apparatus, service cooperation support method and service cooperation support program
CN113589955B (zh) * 2020-04-30 2024-07-26 北京搜狗科技发展有限公司 一种数据处理方法、装置和电子设备
US12067174B2 (en) 2021-08-17 2024-08-20 Citrix Systems, Inc. Text input synchronization for remote applications
US20240098152A1 (en) * 2022-09-20 2024-03-21 Illumina, Inc. Multi-version processing using a monitor subsystem
CN117093323B (zh) * 2023-08-23 2024-03-26 北京志凌海纳科技有限公司 基于后端执行引擎中实现沙盒机制的方法及系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080120541A1 (en) 2006-11-22 2008-05-22 Dynacomware Taiwan Inc. System and method for on-line retrieval and typing of non-standard characters

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2695483B2 (ja) 1989-09-07 1997-12-24 富士通株式会社 整合性チェック方法
JPH05307541A (ja) 1992-04-30 1993-11-19 Nec Corp かな漢字変換システム
JPH07121468A (ja) 1993-10-20 1995-05-12 Fuji Xerox Co Ltd サーバー選択装置
JPH08194668A (ja) 1995-01-13 1996-07-30 Nippon Telegr & Teleph Corp <Ntt> システムバージョンに基づく同期開始方式
JP2000099499A (ja) 1998-09-21 2000-04-07 Mitsubishi Electric Corp クライアント及びサーバ
US7171473B1 (en) * 1999-11-17 2007-01-30 Planet Exchange, Inc. System using HTTP protocol for maintaining and updating on-line presence information of new user in user table and group table
US7035850B2 (en) * 2000-03-22 2006-04-25 Hitachi, Ltd. Access control system
US7370239B2 (en) 2001-05-31 2008-05-06 Fisher-Rosemount Systems, Inc. Input/output device with configuration, fault isolation and redundant fault assist functionality
JP2003044471A (ja) 2001-08-02 2003-02-14 Ricoh Co Ltd 文字列処理システム
JP4202857B2 (ja) * 2003-01-30 2008-12-24 富士通株式会社 プログラム、文字入力編集方法、装置及び記録媒体
US7613797B2 (en) * 2003-03-19 2009-11-03 Unisys Corporation Remote discovery and system architecture
CA2638965A1 (en) * 2003-05-15 2004-11-15 Ibm Canada Limited - Ibm Canada Limitee Accessing a platform independent input method editor from an underlying operating system
WO2005043360A1 (en) * 2003-10-21 2005-05-12 Green Border Technologies Systems and methods for secure client applications
US7676549B2 (en) * 2005-05-27 2010-03-09 Microsoft Corporation Techniques for providing accessibility options in remote terminal sessions
US8078740B2 (en) * 2005-06-03 2011-12-13 Microsoft Corporation Running internet applications with low rights
US8245270B2 (en) * 2005-09-01 2012-08-14 Microsoft Corporation Resource based dynamic security authorization
US8935429B2 (en) * 2006-12-19 2015-01-13 Vmware, Inc. Automatically determining which remote applications a user or group is entitled to access based on entitlement specifications and providing remote application access to the remote applications
US8533291B1 (en) * 2007-02-07 2013-09-10 Oracle America, Inc. Method and system for protecting publicly viewable web client reference to server resources and business logic
JP4903818B2 (ja) * 2007-02-09 2012-03-28 株式会社エヌ・ティ・ティ・ドコモ 端末装置及びソフトウエア検査方法
TW200835239A (en) * 2007-02-14 2008-08-16 Tu-Hsin Tsai System and method for asynchronous exchanging electronic messages
CN101286154B (zh) * 2007-04-09 2016-08-10 谷歌股份有限公司 输入法编辑器用户档案
CN105589571A (zh) * 2007-04-09 2016-05-18 谷歌股份有限公司 客户端输入方法以及输入法编辑器服务器
JP2009015561A (ja) * 2007-07-04 2009-01-22 Oki Electric Ind Co Ltd サーバ、キー情報変換方法、プログラムおよびシステム
KR20090016041A (ko) * 2007-08-10 2009-02-13 에스케이커뮤니케이션즈 주식회사 휴대용 네트워크 기기에서의 키보드 입력 모드 제공 장치및 방법
US8468541B2 (en) * 2007-08-28 2013-06-18 Red Hat, Inc. Event driven sendfile
US20090106661A1 (en) * 2007-10-17 2009-04-23 Inventec Corporation Switching System and Method for Display Interface
US7970350B2 (en) * 2007-10-31 2011-06-28 Motorola Mobility, Inc. Devices and methods for content sharing
US8010465B2 (en) * 2008-02-26 2011-08-30 Microsoft Corporation Predicting candidates using input scopes
CN101291302B (zh) * 2008-05-27 2011-08-03 北京搜狗科技发展有限公司 一种利用输入法进行即时通讯的方法和一种输入法系统
US8756704B2 (en) * 2008-12-15 2014-06-17 International Business Machines Corporation User impersonation and authentication
US9104244B2 (en) * 2009-06-05 2015-08-11 Yahoo! Inc. All-in-one Chinese character input method

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080120541A1 (en) 2006-11-22 2008-05-22 Dynacomware Taiwan Inc. System and method for on-line retrieval and typing of non-standard characters

Also Published As

Publication number Publication date
WO2011066434A2 (en) 2011-06-03
CN102834819A (zh) 2012-12-19
CN106126350A (zh) 2016-11-16
CN106126350B (zh) 2020-01-24
US8904012B2 (en) 2014-12-02
WO2011066434A3 (en) 2011-11-24
US9635138B2 (en) 2017-04-25
KR20170005519A (ko) 2017-01-13
KR101743122B1 (ko) 2017-06-15
CN102834819B (zh) 2016-08-03
US20150088985A1 (en) 2015-03-26
KR20120091253A (ko) 2012-08-17
US20110131642A1 (en) 2011-06-02

Similar Documents

Publication Publication Date Title
KR101716802B1 (ko) 클라이언트-서버 입력 방법 편집기 구조
US9996631B2 (en) Information management and display in web browsers
US7917888B2 (en) System and method for building multi-modal and multi-channel applications
EP2946574B1 (en) Systems and methods for building and using hybrid mobile applications
US9436482B2 (en) Input content to application via web browser
KR101554292B1 (ko) 입력 방식 편집기 사용자 프로파일
CN101073057B (zh) 提供命令行操作环境的方法和系统
US20220350581A1 (en) Generating applications for versatile platform deployment
US11797638B2 (en) Aggregate component for parallel browser-initiated actions
US20140298416A1 (en) Providing access to managed content in rich client application environments
WO2019212871A1 (en) Notification updates for saved sites
US11520482B2 (en) Navigating displayed graphical user interface panels using assigned keyboard shortcut key(s)
JP2005004771A (ja) 非同期コンポーネントをアプリケーションフレームワークアグノスティックにするメカニズム
US11556608B2 (en) Caching for single page web applications
US10705815B2 (en) Split installation of a software product
US11042714B2 (en) Synchronizing the language of a remote session with a client&#39;s language
Stein Unix survival guide
US20170270108A1 (en) System for supporting remote accesses to a host computer from a mobile computing device
US20240020164A1 (en) Method and system for converting web resources into applications for user devices
JP2011113403A (ja) インプットメソッドエディタ
JP5640137B2 (ja) インプットメソッドエディタ
JP5745599B2 (ja) インプットメソッドエディタ
JP5640138B2 (ja) インプットメソッドエディタ

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
A302 Request for accelerated examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20200227

Year of fee payment: 4