2017年4月20日 (木)

Ver.1.6.8-rc1 リリース

日本語/英語以外のキーボードに対応するための外部ファイルに対応しました。
サンプルとして日本語/英語キーボード用のテキスト形式の定義ファイルを同梱しました。

[Windows]
QtBrynhildr/bin/keylayout/sample/

Japanese109.kl : 日本語キーボード
US101.kl : 英語キーボード

[Linux]
linux_x{86|64}/bin/keylayout/sample/

[Mac]
QtBrynhildr.app/Contents/MacOS/keylayout/sample/


(*) 動作確認が出来ないので私が直接日本語、英語以外のキーボード向け定義ファイルを作成する予定はありません。


Qt Brynhildr 起動時にbin/keylayout/直下に定義ファイル(.kl)があった場合は内部的に使うためのバイナリデータファイル(".klx")を同じディレクトリに作成し、以後これを読み込むことで新しいキーボードタイプとして選択可能になります。

ディレクトリ keylayout は、QtBrynhildr.ini 中の keylayoutPath を修正することで変更できます。


keylayoutPath=C:\\Program Files (x86)\\QtBrynhildr\\bin\\keylayout


(*) Ver.1.6.8-alpha/betaをインストールした方は一旦完全にアンインストール/削除してから、インストールを
行ってください。

また、Windows Vista以降では"C:\Program Files"下にインストールした場合にはVirtualStoreの影響に注意が必要です。


以下からダウンロードできます。(Windows/Linux/Mac版)

https://github.com/funfun-dc5/qtbrynhildr/releases


(Ver.1.6.7からの)主な変更は以下です。


[新規機能]
・キーボードタイプ依存情報の外部ファイル対応

[不具合修正]
・ソフトウェア・ボタンの不正動作修正
(1) 接続しているモニタ数以上のボタンを押すことが出来てしまう
(2) バージョン情報ボタンを押すことが出来てしまう
(3) Sound Qualityなどの現在選択している設定のボタンが押下状態となっていない

・ソフトウェア・キーボードで"↑"キーのシフトキーを押下した時のキートップが"→"と
表示される不具合修正

[その他変更]
・インストール時のファイル属性を適切となるように変更
・インストールパッケージ作成時に実行ファイルのシンボル情報を削除するように変更
(Windows版以外)
・テキスト形式のキーボードタイプ依存情報を手動でバイナリファイル化するコマンド("klfc")の追加

-----------------------------------------------------------------------------------
[SHA256SUM]
-----------------------------------------------------------------------------------
10d2c9a13a9c2593ba872c24902498206eec06fcb0e6ea19fa146f8d1c12d916 *QtBrynhildr-linux_x64-v168-rc1.run

8f704dbc115684a19b4bdb26d000117bd9a0838e795678a062e2b269c0b678f7 *QtBrynhildr-linux_x86-v168-rc1.run

2dcce62166bd2da59419e72e49b1d348406653e18f8fca95cb30f815d339b518 *QtBrynhildr-macosx_x64-v168-rc1.dmg

554effeb7c8ba6c23c0bc3e4b518078a33f683af2367dbcfd4edc7a94253ca47 *QtBrynhildr-windows-v168-rc1.exe

2017年4月18日 (火)

Ver.1.6.8-beta リリース

テキスト形式のキーボードタイプ依存情報をバイナリファイル化する処理がなんとなく動くようになったのとalpha版に同梱した .klx ファイルの不具合を修正したのでbetaとしてリリースします。

新たに同梱した、手動でバイナリ化するコマンド("klfc")はいろいろなチェックやエラー回復処理が不十分なので正確に書かないと異常終了するかもしれません。

以下からダウンロードできます。(Windows/Linux/Mac版)

https://github.com/funfun-dc5/qtbrynhildr/releases

主な変更は以下です。

[不具合修正]
・ソフトウェア・キーボードで"↑"キーのシフトキーを押下した時のキートップが"→"と表示される不具合修正
・Japanese109.klx/US101.klxを使うと一部キーが入れ替わる不具合修正(Windows版(1.6.8-alpha)のみ)

[その他変更]
・テキスト形式のキーボードタイプ依存情報を手動でバイナリファイル化するコマンド("klfc")の追加

-----------------------------------------------------------------------------------
[SHA256SUM]
-----------------------------------------------------------------------------------
60198cbb14ac233c1525f4581a709f461a22f674d1b3ae252b6bb03b53c9a20a *QtBrynhildr-linux_x64-v168-beta.run

603aa8c398004b44f9eceece81c125b52d5eb8652d5c10c1c1340db98282bf6b *QtBrynhildr-linux_x86-v168-beta.run

721c02b0f5ad86426b307d93d4d073450d3cbce12db206ff80894812b51b1dbd *QtBrynhildr-macosx_x64-v168-beta.dmg

ae0b2e41891fcfde535293d777036b8fb1f95592b4acbd67815c31ad0ea50700 *QtBrynhildr-windows-v168-beta.exe

2017年4月14日 (金)

Ver.1.6.8-alpha リリース

Android向けの調整をしながら、ソフトウェア・キーボード及びボタンの調整を行っています。

バイナリファイル化したキーボードタイプ依存情報ファイルを読み込む機能の実装は一応終わったので区切りを付けるためにalphaとしました。

テスト用に手動で作ったJapanese109.klxとUS101.klxをWindows版のみに同梱していますので、キーボード・タイプで"Japanese 109 (klx)"または"US 101 (klx)"を選択してみて不具合があればお知らせ頂けると助かります。

"JP Keyboard (built-in)"と"US Keyboard (built-in)"は内部的に情報を持っているのでもしも"Japanese 109 (klx)"や"US 101 (klx)"がおかしい場合はこちらを選択することでこれまでどおりの動作となります。

Linux上であれば上記ファイルをコピーすれば使えるかもしれませんが、未確認です。
(Mac版の場合は一部のキーが入れ替わってしまうと思います)

テキスト形式のデータファイル(".kl")も同梱していますが、alpha版では .kl を読み込んで .klx を生成する機能は未実装です。将来的には".kl"のみを同梱し、.klx は実行時に自動で作成するようになる予定です。

以下からダウンロードできます。(Windows/Linux/Mac版)

https://github.com/funfun-dc5/qtbrynhildr/releases

主な変更は以下です。

[新規機能]
・キーボードタイプ依存情報の外部ファイル化

(*) alpha版では .kl を読み込んで .klx を生成する機能は未実装です。

[不具合修正]
・ソフトウェア・ボタンの不正動作修正
(1) 接続しているモニタ数以上のボタンを押すことが出来てしまう
(2) バージョン情報ボタンを押すことが出来てしまう
(3) Sound Qualityなどの現在選択している設定のボタンが押下状態となっていない

[その他変更]
・インストール時のファイル属性を適切となるように変更
・インストールパッケージ作成時に実行ファイルのシンボル情報を削除するように変更(Windows版以外)

-----------------------------------------------------------------------------------
[SHA256SUM]
-----------------------------------------------------------------------------------
5d958632ef4073c041d6024900912522b7737c58fee945fcad50715cf529717d *QtBrynhildr-linux_x64-v168-alpha.run

c14f8e9a9fb18f321132d76f0c049f843e642b185adbab530838accc5fe84c22 *QtBrynhildr-linux_x86-v168-alpha.run

bffa21992bd2aa6172c1bcce16b3b8386a470caccaa42eeb2f029c64472de7e2 *QtBrynhildr-macosx_x64-v168-alpha.dmg

81673906d9870cc34881b118415b11cfdd53268fdeb6d96ac1f788f955f9b758 *QtBrynhildr-windows-v168-alpha.exe

2017年4月11日 (火)

Brynhildr 「2.2.6」 がリリースされました

Brynhildr「2.2.6」 がリリースされました。脆弱性対策に変更があったそうです。

Brynhildr「2.2.6」リリース

2017年4月10日 (月)

キーボードタイプ依存データの外部ファイル化について考える その4

テキスト形式ファイルの拡張子 .lng は .kl (key layout)、バイナリ形式ファイルの拡張子 .lngx は .klx に変更したいと思います。

テキスト形式ファイルである .kl を解析する処理はできるだけ本体とは分離したいので、インターフェースとしてはディレクトリを指定して解析を実行するとそのディレクトリ下にある .kl を解析して解析結果である .klx を同じディレクトリに出力するという単純なものにしようと思います。

解析部と本体側が解析結果をチマチマとやりとりするインターフェースは持たせず、本体側は作成された .klx の読込みのみをサポートします。.kl/.klx ファイルがなんらかの原因で壊れた場合を想定して、これまでの"JP Keyboard","US Keyboard"はビルトインデータとしてQt Brynhildr内部に残します。

設定によって、.klx を残して次回起動時に利用したり、常に .kl を解析して更新するようにできたりすればいいかなと思います。初期設定としては、.klx よりも .kl が新しい時だけ再解析するということになるかと思います。もちろん、.klx が存在しない初回起動時は無条件で .kl を解析して .klx を作成します。

デバッグログを出力させて確認しました。


Created KeyLayoutFileReader! layoutfilepath = ./keylayout
NOT supported File : FlexLexer.h
NOT supported File : GNUmakefile
NOT supported File : Japanese109.kl
    supported File : Japanese109.klx
Opened file : ./keylayout/Japanese109.klx
[File Header]
magic      = "KLF"
spec       = 1
size       = 3964
keynum     = 139
softkeynum = 67
[General]
Name       = Japanese 109
Author     = FunFun <fu.aba.dc5@gmail.com>
Closed file : ./keylayout/Japanese109.klx
NOT supported File : key.h
NOT supported File : keylayoutfile.cpp
NOT supported File : keylayoutfile.h
NOT supported File : keylayoutfile.l
NOT supported File : keylayoutfile.y
NOT supported File : keylayoutfilereader.cpp
NOT supported File : keylayoutfilereader.h
NOT supported File : obj
NOT supported File : US101.kl
    supported File : US101.klx
Opened file : ./keylayout/US101.klx
[File Header]
magic      = "KLF"
spec       = 1
size       = 3928
keynum     = 136
softkeynum = 67
[General]
Name       = US 101
Author     = FunFun <fu.aba.dc5@gmail.com>
Closed file : ./keylayout/US101.klx
NOT supported File : util
Deleted KeyLayoutFileReader!


とりあえず、外部ファイルから読み込んだ"Japanese 109"を選択して"JP Kyboard (built-in)"と同様に動作することを確認しました。

Ws000000

Brynhildr 「2.2.5」 がリリースされました

Brynhildr 「2.2.5」がリリースされました。

Brynhildr「2.2.5」リリース

サーバーPCにBrynhildrをサービスとして登録して運用している場合に Creators Update のような大きなアップデートの際に問題が起こる可能性があるそうです。必ず発生するわけでは無いそうですが、念のためにアップデートすることが推奨されています。

2017年3月22日 (水)

言語依存データの外部ファイル化について考える その3

バイナリファイル化について検討しました。

基本的には現在 Qt Brynhildr が内部的に持っている情報をそのままバイナリファイルとして出力したものになります。次回からはなんにも考えず、このファイルを読み込めばよいことになります。ただし、最低限の内容チェックは必要ですけど。

暫定ですが拡張子はこんな感じ。

テキスト形式: Japanese.lng

バイナリ形式: Japanese.lngx

以下書きかけのドキュメントから。

==========================================================================================
[バイナリ形式]
==========================================================================================

起動時に解析結果をバイナリ化し、次回以降はこのバイナリファイルを読み込む。
ただし、テキスト形式が更新されていた場合は再解析し、バイナリファイルも更新する。

このバイナリファイルは基本的にインストールされているマシンでのみ有効とする。
つまり、他のプラットフォームにバイナリファイルをコピーしてはならない。
(データアライン、バイトオーダーはプラットフォームに依存するため)

以下の3つのパートから成る。

1) LFHeader

ファイルヘッダー情報と言語情報フェーズ([Geneal]セクション)の情報を含む。

2) Keys Entries (* keynum)

Eventconverter::KeyEventのデータをkeynum個分を含む。

3) SoftKeys Entrise (* softkeynum)

SoftwareKeyboard::KeyTopInfoのデータをsoftkeynum個分を含む。

------------------------------------------------------------------------------------------
1) LFHeader
------------------------------------------------------------------------------------------

typedef struct {
// File Header
char magic[4]; // file magic
char padding[4]; // padding
int spec; // SpecVersion
int size; // file size
int keynum; // Keys Entry Num
int softkeynum; // SoftKeys Entry Num

// [General] Section
char name[64]; // Name strings
char author[64]; // Author strings
} LFHeader;


-- ファイルヘッダー --

magic : ファイルマジック ("LF00") : 暫定

spac : SpecVersionの値

size : バイナリファイルのトータルサイズ

keynum : 物理キーボード定義フェーズの情報のエントリ数

softkeynum : ソフトウェア・キーボード定義フェーズの情報のエントリ数

-- [Geneal]セクションの情報 --

name : [Geneal]セクションのNameの値(文字列)

author : [Geneal]セクションのAuthorの値(文字列)

------------------------------------------------------------------------------------------
2) Keys Entries (* keynum)
------------------------------------------------------------------------------------------

物理キーボード定義フェーズの情報を解析した結果をバイナリ形式で保持する。

プラットフォーム指定を解決済みのデータとなるためプラットフォーム指定の情報はこれには含まれない。

------------------------------------------------------------------------------------------
3) SoftKeys Entrise (* softkeynum)
------------------------------------------------------------------------------------------

ソフトウェア・キーボード定義フェーズの情報を解析した結果をバイナリ形式で保持する。

------------------------- ここまで ------------------------------------------


テキスト形式を解析する機能の実装はもう少し時間がかかるので、先にバイナリ形式ファイルを読み込むところを作っておこうと思います。

起動時に特定のフォルダに存在する .lngx ファイルをすべてチェックして、選択可能なキーボードタイプのリストを構成し、「サーバに接続」ダイアログで選択可能とする、という流れですね。

現在ソースコード中にハードコーディングしている言語依存情報をファイルに出力させるコードを暫定で入れて、手動でテスト用のバイナリファイル(Japanese,lngxとUS.lngx)を作成しました。

これを使って実装を進めようと思います。

私の環境で Japanese.lngx は3160バイト、US.lngx は3124バイトです。

Ws000000

(追記)

手動で作ったテスト用バイナリが間違えていました。

文字列データを保存していた Qstring (のポインタ) をそのまま保存していたので、文字列データをちゃんと保存するように変更し、作り直しました。少しサイズが増えて、それぞれ3964バイト/3928バイトとなりました。

2017年3月19日 (日)

言語依存データの外部ファイル化について考える その2


とりあえず字句解析します。

ダブルクオート(")の中では'\'をエスケープ文字としますが'\'の次の文字列そのものを有効にする機能以外はサポートしません、例えば"\n"とか"\t"とか"\045"や"\u2191"とかです。あと文字列長チェックが必要ですが、とりあえずテストなのでチェックしていません。

昔の記憶を思い出しながら、langfile.lex を書いてみました。

/* -*- mode: c; coding: utf-8-unix -*- */
/*
// -*- mode: c; coding: utf-8-unix -*-
// Copyright (c) 2017 FunFun < fu.aba.dc5@gmail.com>
//
// for c   : flex -o langfile.c langfile.lex ; gcc -o langfile langfile.c
// for c++ : flex -+ -o langfile.cpp langfile.lex ; g++ -o langfile -I. langfile.cpp
*/

%{
#ifdef __FLEX_LEXER_H
#include <cstdio>
#else // __FLEX_LEXER_H
#include <stdio.h>
#endif // __FLEX_LEXER_H
%}

ws			[ \t]+
comment		#.*
nl			\n
section		\[[a-zA-Z]+\]
key_id		Key_[a-zA-Z0-9_]+
vk_id		VK_[a-zA-Z0-9_]+
shiftkey	SHIFTKEY_NEED|SHIFTKEY_NONEED|SHIFTKEY_THROUGH
platform	Windows|macOS|Linux
string		[a-zA-Z_]+
number		[0-9]+
comma		,
equal		=
%x qstring

%%

  char string_buf[1024];
  char *string_buf_ptr;

\"	{
  string_buf_ptr = string_buf;
  BEGIN(qstring);
 }

<qstring>\"	{
  BEGIN(INITIAL);
  *string_buf_ptr = '\0';
  printf("qstring  = \"%s\"\n", string_buf);
 }

<qstring>\\(.|\n) {
  *string_buf_ptr++ = yytext[1];
 }

<qstring>[^\\\n\"]+ {
  char *yptr = yytext;

  while (*yptr){
	*string_buf_ptr++ = *yptr++;
  }
 }

{ws}		;
{comment}	{
  printf("comment  = %s\n", yytext);
}
{nl}		;
{comma}		;
{equal}		;
{section}	{
  printf("section  = %s\n", yytext);
}
{key_id}	{
  printf("key_id   = %s\n", yytext);
}
{vk_id}		{
  printf("vk_id    = %s\n", yytext);
}
{shiftkey}	{
  printf("shiftkey = %s\n", yytext);
}
{platform}	{
  printf("platform = %s\n", yytext);
}
{string}	{
  printf("string   = %s\n", yytext);
}
{number}	{
  printf("number   = %s\n", yytext);
}

%%

/* for TEST */
#ifdef __FLEX_LEXER_H
/* for C++ */
int yyFlexLexer::yywrap()
{
  return 1;
}

int main(int argc, char *argv[])
{
  yyFlexLexer lexer;
  lexer.yylex();
}
#else // __FLEX_LEXER_H
/* for C */
int yywrap()
{
  return 1;
}

int main(int argc, char *argv[])
{
  yylex();
}
#endif // __FLEX_LEXER_H



標準入力から Japanese.lng を読み込ませるとこんな出力になります。


comment  = # japanese keyboard layout
comment  = # Copyright (c) 2017 FunFun 
comment  = # spec version 1
section  = [General]
string   = Name
qstring  = "Japanese"
string   = Author
qstring  = "FunFun <fu.aba.dc5@gmail.com>"
string   = SpecVersion
number   = 1
section  = [Keys]
key_id   = Key_Escape
vk_id    = VK_ESCAPE
shiftkey = SHIFTKEY_THROUGH
key_id   = Key_Tab
vk_id    = VK_TAB
shiftkey = SHIFTKEY_THROUGH
key_id   = Key_Backspace
vk_id    = VK_BACK
shiftkey = SHIFTKEY_THROUGH
key_id   = Key_Return
vk_id    = VK_RETURN
shiftkey = SHIFTKEY_THROUGH
key_id   = Key_Enter
vk_id    = VK_RETURN
shiftkey = SHIFTKEY_THROUGH
key_id   = Key_Insert
vk_id    = VK_INSERT
shiftkey = SHIFTKEY_THROUGH

               :
            後略

なんとなく字句解析は出来ていそうです。

"SHIFTKEY_NEED", "SHIFTKEY_NONEED", "SHIFTKEY_THROUGH", "Windows", "macOS", "Linux" は予約語扱いになります。 "VK_" や "Key_" で始まるものは仮想キーコード、Qtのキー定数とみなしてチェックしますので、不正なものはエラーとする必要があります。

flex は C と C++ のコードを生成できるので、上記 lex コードの実行はどちらでも可能です。出来れば C++ コードで生成して利用したいのですが、macOS 上の clang だとなんかコンパイルエラーになるんですよね…なんででしょう?

(追記)

初回起動時に .lng を解析してバイナリファイルを作成し、実際はこのバイナリファイルを読み込もうかと思います。その場合、.lng が更新されていたら、再解析してバイナリファイルを作成し直す必要がありますねぇ。オプションにしましょうかね…

2017年3月18日 (土)

Android APK の準備 その2

Qt の機能でフルスクリーンに出来るのですが、バッテリー残量などが表示されている上部のステータスバーとナビゲーションバーは非表示にならないようです。

これらを非表示するに AndroidManifest.xml に設定を追加して、Anrdroid OS から Qt アプリケーションへの橋渡しのための java のコードに処理を追加する方法などが紹介されていますね。

いろいろ調べると橋渡しのための java コードへの処理追加で実現できそうな感じなので、まずは java コードに手を加える方向で試してみようと思います。

AndroidManifest.xml は標準のビルド時に作成されるものをコピ-して登録したのでこれに沿って java のソースコードも登録することにしました。将来的にはディレクトリ構成も要検討ですけど。

qtbrynhildr.pro の Android 向けの設定に以下を追加しました。


---- ここから ----

DISTFILES += \
$$PWD/../dist/android/src/org/qtproject/qt5/android/bindings/QtActivity.java \
$$PWD/../dist/android/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java \
$$PWD/../dist/android/src/org/qtproject/qt5/android/bindings/QtApplication.java \
$$PWD/../dist/android/src/org/qtproject/qt5/android/bindings/QtLoader.java \
$$PWD/../dist/android/src/org/qtproject/qt5/android/bindings/QtService.java \
$$PWD/../dist/android/src/org/qtproject/qt5/android/bindings/QtServiceLoader.java

---- ここまで ----

次に、上記の6つのソースコードをコピーして、上記ディレクトリに配置してソースコード登録しました。

これで Qt Creator でのビルド時に上記のファイルをコピーしてビルドしてくれるようになるので、今後は上記のソースコードに処理を追加していくことにします。

2017年3月13日 (月)

Ver.1.6.7 リリース

シフトキーの状態の管理に不具合がありました。特定の条件で、シフトキーが押されたままの状態となることがあります。

例えば、日本語キーボードを使っているマシン上でQt Brynhildrを起動し、「英語キーボード」タイプを指定してサーバに接続した上で、`@`を入力した場合です。

日本語キーボードでは`@`はシフトキーを必要としませんが、英語キーボードではSHIFTキー + "2"キーなのでQtBrynhildrはシフトキーの押した/離したの情報を前後に挿入してサーバに送ってやる必要があります。挿入したシフトキーの情報の整合性が取れなくなった(シフトキーを押したあと、離したという情報が送られなかった)ため、結果シフトキーが押しっぱなしになったというのが不具合の内容です。

通常の使い方と思われる、サーバとクライアントで同じタイプのキーボードを使っている場合は通常発生しませんが、上記のように異なるタイプのキーボードを指定した場合や特殊なキーボードを使っている場合に発生する可能性があります。

以下からダウンロードできます。(Windows/Linux/Mac版)

https://github.com/funfun-dc5/qtbrynhildr/releases

主な変更は以下です。

[不具合修正]
・一部の特殊なキーボードでシフトキーが押されたままの状態となる不具合修正
通常のキーボード操作でシフトキーの押下が必要な文字(例えば英語キーボードの'@')を
入力する場合に、シフトキーの押下を伴わない特殊なキーボードではシフトキーが
押されたままの状態となる。(シフトキーを一度叩くと解除できる)

[その他変更]
・MacOS版のアプリケーションメニューの多言語対応(日本語対応)

-----------------------------------------------------------------------------------
[SHA256SUM]
-----------------------------------------------------------------------------------
5793a346a1cc194fe083c9bf515c98045f89edc5fade48db5f4c702fd03e9c84 *QtBrynhildr-documents-20170312.zip

f8fb72a16ce0f92325e8607962620bb5ddfe30f2ccdc6b75e65b344d0608854a *QtBrynhildr-linux_x64-v167.run

37323390d722020795c99612643819b6e0cceaed4a4de5674d4932dc97aefde9 *QtBrynhildr-linux_x86-v167.run

4ab5d82f8b7518bd2c24b5fd7aa0b519b8667838938ce81a9bc1c111ce3948b4 *QtBrynhildr-macosx_x64-v167.dmg

97c1261220a4db144f5ab9357a3818b0645e01f713f649b7c1a4fd06498a8ec1 *QtBrynhildr-windows-v167.exe

«言語依存データの外部ファイル化について考える その1

無料ブログはココログ
2017年4月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30