SlideShare uma empresa Scribd logo
1 de 17
Baixar para ler offline
用 Python 開發 Windows 中文輸入法
洪任諭 PCMan http://pcman.im/
2015-08-15@COSCUP|
2
西元 2015 年,新視野號探索了冥王星,
而太空望遠鏡發現地球 2.0 (Kepler-452b)
3
轉眼 COSCUP 10 歲了 o/
4
而我們 ... 還是在做中文輸入法
5
PIME 架構 – What's New?
●
史上首次用 Python 開發 TSF 輸入法
●
不需要了解 Windows TSF 或 IMM32
●
不需要寫 C++
●
Server/Client 架構
●
支援 Windows Vista - 10 (32 & 64 bit)
6
Why Python?
●
開發簡單快速
●
良好 Win32 API 支援 (pywin32)
●
使用者眾多
●
社群支援 ( 感謝 Taipei.py 協助 )
●
我不會寫 node.js
Fred 表示 ...
Mosky 表示 :
Python 好用 !
7
Text Service Framework
●
新 Windows 輸入法架構 ( 取代 IMM32)
●
必須以 COM (component object model) 實作
●
須分別維護 32/64 bit 版本之 DLL
●
複雜度高、文件少、和 IMM32 差異大
●
部分操作為非同步
●
Win xp 只有部分支援
8
Windows 8 Metro UI
●
App 內禁用 IMM32 輸入法
●
輸入法運行在 app process 內,具權限限制
●
Container 內預設無 IPC 機制 ( 建議用 Web)
●
若 app 無網路權限,不能連 web service
●
只能讀取 app 目錄、 Windows 、和 Program Files
●
輸入法只能裝在 Program Files
9
PIME/LibIME 架構
● LibIME
– C++ wrapper for TSF
– 隱藏 COM 實作細節
– 來自新酷音輸入法 TSF 版
● PIME
– 加上 Python server/client 架構
– 正確處理 Windows 8 Metro 權限設定
– 隱藏 IPC 細節
– 不須同時維護 32/64 bit 版本
10
主要 Python classes
● TextService
– onActivate() # 輸入法被啟用
– onDeactivate() # 輸入法被關閉
– filterKeyDown(keyEvent) # 要處理就回傳 True
– onKeyDown(keyEvent) # 處理使用者按鍵
● KeyEvent
– isToggled(keyCode) # 檢查鍵盤 LED (caps lock 等 )
– isDown(keyCode) # 檢查按鍵有無被按下
11
註冊輸入法 – ​ ime.json
{
"name": " 我的輸入法 ", // 輸入法名稱 (UTF-8)
"version": "0.1", // 版本號
"guid": "{C5F37DA0-274E-4837-9B7C-9BB79FE85D9D}",
"locale": "zh-TW", // 語系
"icon": "icon.ico", // 圖示
"moduleName": "my_ime", // python 模組名稱
"serviceName": "MyTextService" // python class 名稱
}
以系統管理員執行 :
Regsvr32 'C:Program Files (x86)PIMEx86PIMETextService.dll'
Regsvr32 'C:Program Files (x86)PIMEx64PIMETextService.dll'
12
PIME 架構
Application
PIMETextService.dll
(C++ part)
TextService
(Python server)
Windows TSF
Cloud
TextService
13
Case Study - 貓也會用的輸入法
14
Demo or Die!
15
Internet Explorer 已知問題
●
須關閉受保護模式 ( 會阻擋 IPC)
●
Edge 初步測試可用
16
未來計畫
●
移植現有輸入法
●
Cloud 輸入法
●
支援語言列選單
●
輸入法偏好設定
●
撰寫文件
17
Join Now!
https://github.com/EasyIME/PIME

Mais conteúdo relacionado

Mais procurados

Zipf? (ジップ則のひみつ?) #DSIRNLP
Zipf? (ジップ則のひみつ?) #DSIRNLPZipf? (ジップ則のひみつ?) #DSIRNLP
Zipf? (ジップ則のひみつ?) #DSIRNLPShuyo Nakatani
 
[DL輪読会]A Probabilistic U-Net for Segmentation of Ambiguous Images
[DL輪読会]A Probabilistic U-Net for Segmentation of Ambiguous Images[DL輪読会]A Probabilistic U-Net for Segmentation of Ambiguous Images
[DL輪読会]A Probabilistic U-Net for Segmentation of Ambiguous ImagesDeep Learning JP
 
遺伝研スパコンを使った解析の並列化.pptx
遺伝研スパコンを使った解析の並列化.pptx遺伝研スパコンを使った解析の並列化.pptx
遺伝研スパコンを使った解析の並列化.pptxOsamu Ogasawara
 
ZytleBot:ROS対応自動走行ロボットへのFPGA活用を加速化する統合開発プラットフォーム
ZytleBot:ROS対応自動走行ロボットへのFPGA活用を加速化する統合開発プラットフォームZytleBot:ROS対応自動走行ロボットへのFPGA活用を加速化する統合開発プラットフォーム
ZytleBot:ROS対応自動走行ロボットへのFPGA活用を加速化する統合開発プラットフォームHideki Takase
 
SOLID Design Principles for Test Automaion
SOLID Design Principles for Test AutomaionSOLID Design Principles for Test Automaion
SOLID Design Principles for Test AutomaionKnoldus Inc.
 

Mais procurados (8)

BRNNとは
BRNNとはBRNNとは
BRNNとは
 
Zipf? (ジップ則のひみつ?) #DSIRNLP
Zipf? (ジップ則のひみつ?) #DSIRNLPZipf? (ジップ則のひみつ?) #DSIRNLP
Zipf? (ジップ則のひみつ?) #DSIRNLP
 
[DL輪読会]A Probabilistic U-Net for Segmentation of Ambiguous Images
[DL輪読会]A Probabilistic U-Net for Segmentation of Ambiguous Images[DL輪読会]A Probabilistic U-Net for Segmentation of Ambiguous Images
[DL輪読会]A Probabilistic U-Net for Segmentation of Ambiguous Images
 
遺伝研スパコンを使った解析の並列化.pptx
遺伝研スパコンを使った解析の並列化.pptx遺伝研スパコンを使った解析の並列化.pptx
遺伝研スパコンを使った解析の並列化.pptx
 
vMVPDの動向について
vMVPDの動向についてvMVPDの動向について
vMVPDの動向について
 
ZytleBot:ROS対応自動走行ロボットへのFPGA活用を加速化する統合開発プラットフォーム
ZytleBot:ROS対応自動走行ロボットへのFPGA活用を加速化する統合開発プラットフォームZytleBot:ROS対応自動走行ロボットへのFPGA活用を加速化する統合開発プラットフォーム
ZytleBot:ROS対応自動走行ロボットへのFPGA活用を加速化する統合開発プラットフォーム
 
Geometry with Unity
Geometry with UnityGeometry with Unity
Geometry with Unity
 
SOLID Design Principles for Test Automaion
SOLID Design Principles for Test AutomaionSOLID Design Principles for Test Automaion
SOLID Design Principles for Test Automaion
 

Semelhante a PIME - 用 Python 快速開發 Windows 的中文輸入法 (COSCUP 2015)

COSCUP 2019 國際開放原始碼專案經營 - 從失敗中學習
COSCUP 2019 國際開放原始碼專案經營 - 從失敗中學習COSCUP 2019 國際開放原始碼專案經營 - 從失敗中學習
COSCUP 2019 國際開放原始碼專案經營 - 從失敗中學習Jen Yee Hong
 
用简单语言构建复杂系统
用简单语言构建复杂系统用简单语言构建复杂系统
用简单语言构建复杂系统Leo Zhou
 
Python&GUI
Python&GUIPython&GUI
Python&GUILeo Zhou
 
超酷炫科幻 UI:QML 入門
超酷炫科幻 UI:QML 入門超酷炫科幻 UI:QML 入門
超酷炫科幻 UI:QML 入門Fred Chien
 
用Cython封装c++代码为python模块的一点经验
用Cython封装c++代码为python模块的一点经验用Cython封装c++代码为python模块的一点经验
用Cython封装c++代码为python模块的一点经验Leo Zhou
 
20200905_tcn_python_opencv_part1_omnixri
20200905_tcn_python_opencv_part1_omnixri20200905_tcn_python_opencv_part1_omnixri
20200905_tcn_python_opencv_part1_omnixriOmniXRI Studio
 
Go语言: 互联网时代的C
Go语言: 互联网时代的CGo语言: 互联网时代的C
Go语言: 互联网时代的CGoogol Lee
 
2011 PHP技术高峰论坛演讲 张宴
2011 PHP技术高峰论坛演讲 张宴2011 PHP技术高峰论坛演讲 张宴
2011 PHP技术高峰论坛演讲 张宴Cosey Lee
 
LineBot.pptx
LineBot.pptxLineBot.pptx
LineBot.pptxNCUDSC
 
Unity3d Script System & agile dev
Unity3d Script System & agile devUnity3d Script System & agile dev
Unity3d Script System & agile devJiadong Chen
 
2016-04-07-清大-國際化開源專案技術實務與經驗分享
2016-04-07-清大-國際化開源專案技術實務與經驗分享2016-04-07-清大-國際化開源專案技術實務與經驗分享
2016-04-07-清大-國際化開源專案技術實務與經驗分享Jen Yee Hong
 
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇Shengyou Fan
 
Ops as Code using Serverless
Ops as Code using Serverless Ops as Code using Serverless
Ops as Code using Serverless Rick Hwang
 
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统Dahui Feng
 
Python meetup 1
Python meetup 1Python meetup 1
Python meetup 1Vic Yang
 
Learn Django With ChatGPT
Learn Django With ChatGPTLearn Django With ChatGPT
Learn Django With ChatGPTKo Ko
 
Linux运维趋势 第0期 运维自动化
Linux运维趋势 第0期 运维自动化Linux运维趋势 第0期 运维自动化
Linux运维趋势 第0期 运维自动化51CTO
 
2010 08-14 web-sitei18n
2010 08-14 web-sitei18n2010 08-14 web-sitei18n
2010 08-14 web-sitei18ntsunghaolee
 
基于Python构建可扩展的自动化运维平台
基于Python构建可扩展的自动化运维平台基于Python构建可扩展的自动化运维平台
基于Python构建可扩展的自动化运维平台liuts
 

Semelhante a PIME - 用 Python 快速開發 Windows 的中文輸入法 (COSCUP 2015) (20)

COSCUP 2019 國際開放原始碼專案經營 - 從失敗中學習
COSCUP 2019 國際開放原始碼專案經營 - 從失敗中學習COSCUP 2019 國際開放原始碼專案經營 - 從失敗中學習
COSCUP 2019 國際開放原始碼專案經營 - 從失敗中學習
 
用简单语言构建复杂系统
用简单语言构建复杂系统用简单语言构建复杂系统
用简单语言构建复杂系统
 
Python&GUI
Python&GUIPython&GUI
Python&GUI
 
超酷炫科幻 UI:QML 入門
超酷炫科幻 UI:QML 入門超酷炫科幻 UI:QML 入門
超酷炫科幻 UI:QML 入門
 
用Cython封装c++代码为python模块的一点经验
用Cython封装c++代码为python模块的一点经验用Cython封装c++代码为python模块的一点经验
用Cython封装c++代码为python模块的一点经验
 
20200905_tcn_python_opencv_part1_omnixri
20200905_tcn_python_opencv_part1_omnixri20200905_tcn_python_opencv_part1_omnixri
20200905_tcn_python_opencv_part1_omnixri
 
Go语言: 互联网时代的C
Go语言: 互联网时代的CGo语言: 互联网时代的C
Go语言: 互联网时代的C
 
2011 PHP技术高峰论坛演讲 张宴
2011 PHP技术高峰论坛演讲 张宴2011 PHP技术高峰论坛演讲 张宴
2011 PHP技术高峰论坛演讲 张宴
 
LineBot.pptx
LineBot.pptxLineBot.pptx
LineBot.pptx
 
Unity3d Script System & agile dev
Unity3d Script System & agile devUnity3d Script System & agile dev
Unity3d Script System & agile dev
 
2016-04-07-清大-國際化開源專案技術實務與經驗分享
2016-04-07-清大-國際化開源專案技術實務與經驗分享2016-04-07-清大-國際化開源專案技術實務與經驗分享
2016-04-07-清大-國際化開源專案技術實務與經驗分享
 
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
 
Ops as Code using Serverless
Ops as Code using Serverless Ops as Code using Serverless
Ops as Code using Serverless
 
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
 
NSCTF
NSCTFNSCTF
NSCTF
 
Python meetup 1
Python meetup 1Python meetup 1
Python meetup 1
 
Learn Django With ChatGPT
Learn Django With ChatGPTLearn Django With ChatGPT
Learn Django With ChatGPT
 
Linux运维趋势 第0期 运维自动化
Linux运维趋势 第0期 运维自动化Linux运维趋势 第0期 运维自动化
Linux运维趋势 第0期 运维自动化
 
2010 08-14 web-sitei18n
2010 08-14 web-sitei18n2010 08-14 web-sitei18n
2010 08-14 web-sitei18n
 
基于Python构建可扩展的自动化运维平台
基于Python构建可扩展的自动化运维平台基于Python构建可扩展的自动化运维平台
基于Python构建可扩展的自动化运维平台
 

Mais de Jen Yee Hong

2018 cosup-delete unused python code safely - english
2018 cosup-delete unused python code safely - english2018 cosup-delete unused python code safely - english
2018 cosup-delete unused python code safely - englishJen Yee Hong
 
Basic c++ 11/14 for python programmers
Basic c++ 11/14 for python programmersBasic c++ 11/14 for python programmers
Basic c++ 11/14 for python programmersJen Yee Hong
 
COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)
COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)
COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)Jen Yee Hong
 
TPET8演講: 非典型程式教育
TPET8演講: 非典型程式教育TPET8演講: 非典型程式教育
TPET8演講: 非典型程式教育Jen Yee Hong
 

Mais de Jen Yee Hong (6)

2018 cosup-delete unused python code safely - english
2018 cosup-delete unused python code safely - english2018 cosup-delete unused python code safely - english
2018 cosup-delete unused python code safely - english
 
Basic c++ 11/14 for python programmers
Basic c++ 11/14 for python programmersBasic c++ 11/14 for python programmers
Basic c++ 11/14 for python programmers
 
COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)
COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)
COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)
 
TPET8演講: 非典型程式教育
TPET8演講: 非典型程式教育TPET8演講: 非典型程式教育
TPET8演講: 非典型程式教育
 
Py drum
Py drumPy drum
Py drum
 
Gtk to qt
Gtk to qtGtk to qt
Gtk to qt
 

PIME - 用 Python 快速開發 Windows 的中文輸入法 (COSCUP 2015)