DvorakJP用のタイピングゲームを作った

はじめに

以前からDvorakJPを利用していましたが,練習のためにタイピングゲームがしたくてもローマ字テーブルを編集するという特性上,普通のタイピングゲームをDvorakJPでプレイすることが難しいという問題がありました. そこで,DvorakJPに対応したタイピングゲームを作成しました.

dvorakjptyping.web.app

開発環境・公開環境

素材

タイピングゲーム作成にあたって,タイプ時の効果音とふりがな付きの単語集が必要です. 音の素材は効果音ラボのものを使わせてもらいました.
単語は形態素解析ChaSen用の辞書であるIPAdicから,名詞を抽出して利用しました.

便利な機能

「最短打鍵方法のみ許可」という設定を用意しました. これを有効にすることで,DvorakJPによって効率化された打鍵方法しか受け付けなくなります. 例えば「タイピング」と入力する場合,「taipingu」ではなく「t'pxgu」と入力しなければいけなくなります. これによって,DvorakJPの特徴である二重母音拡張や撥音拡張を習得することができると思います.

これから追加したい機能

  1. ローマ字テーブルアップロード機能
    DvorakJPを含むローマ字テーブルをカスタマイズする入力方法に対応するために, プレイ前にローマ字テーブルをアップロードしその入力方法を練習できる機能です.

  2. Dvorak配列再現機能
    QWERTY配列を利用している方がPCの設定を変更せずにDvorak配列としてプレイできる機能です. 今はキーボードの配列がDvorakであることが前提となっていますが,QWERTY配列を利用中の方にDvorakJPによって効率的な入力が可能になることを知ってもらうためにも必要だと考えています.

おわりに

単語ごとの入力すべきアルファベットをあらかじめ記録しておかず毎回ふりがなとローマ字テーブルから入力すべきアルファベットを求めているので,愚直な実装だと表示に遅延が発生してしまう問題がありましたがなんとか開発に一区切りつけることができました. DvorakJPらしいタイピングを練習したい方にはぜひ利用していただきたいと思います.

タイル型WMにおけるGIMPの設定

GIMPはタイル型ウィンドウマネージャと相性が悪いと言われています.
タイル型WMのawesomeでは,レイアウトをFloatingにすることで対応できるとか言われていますが,
Floatingにしてマウスで配置していたらタイル型の意味ないと思ってました.

そして,私はついに知ったのです.
GIMPにはシングルウィンドウモードがあることを!!!

同じことを考えていた人やウィンドウが複数に分かれるのが嫌な人は
ぜひシングルウィンドウモード使ってみてください.

Dvorak配列を1年使ってみて

昨年の冬休みHHKBを購入したときからDvorak配列を使っていました. 導入方法や感想を書いてみたいと思います.

導入方法

GNU/Linuxを利用している方は

setxkbmap dvorak

と打つだけです.

DvorakJP

Dvorak配列でのローマ字入力Qwerty配列よりは断然よいと思いますが,明らかに効率の悪い部分があります.

そういった問題を解消するために色々な派生配列が提案されています.

その中でも私はDvorakJPを使っています.DvorakJPを選んだのは,とりあえず物理的な配列は変更したくなかったというだけなので深い理由はありません. DvorakJPのローマ字テーブルを公開してくださっている方がいるので,Google日本語入力やMozcであれば以下からダウンロードしてインポートすることですぐにDvorakJPを使えます. github.com

半角全角の切り替え

通常はキーボードの半角全角キーで切り替えると思いますが,私は「Ctrl-,」で半角入力に「Ctrl-.」で全角入力になるようにしています.

そもそもUSキーボードやDvorak配列には半角全角キーは存在しませんし,この切り替え方法のほうが半角全角キーよりもホームポジションのままで打ちやすく,Qwerty配列でもDvorak配列でも「,」と「.」は隣り合っているのでわかりやすいです.

また,半角全角キーによるトグルよりも,半角入力にするキーと全角入力にするキーが別々にあったほうが現在の状態を確認する必要がない分楽です.

練習法

まず,暇な時間にDvorak配列を見ながらエアータイピングしてアルファベットの位置を覚えました.

次に,Qwerty配列を覚えた時はひたすらタイピングゲームをやっていたので,今回もやろうと思ったのですが ローマ字テーブルをカスタマイズしていると日本語のタイピングゲームはできません.

そこで,e-typingの英語タイピングをやりました.長文を打ちたかったのでやったのは演説のタイピングです. www.e-typing.ne.jp

現状

約1年経って,すっかりDvorak配列には慣れました.途中,Qwerty配列がほとんど打てなくなったときもありましたが,今はQwerty配列でも日本語ならある程度打てます(英語は苦手です).

まとめ

メリット

  • 英語も日本語も打ちやすい
  • なんとなく優越感がある

デメリット

  • Qwerty配列でのタイピング速度が落ちた
  • コピーやペーストが片手でできない
  • 人にパソコンを貸すときに面倒

今後の目標

かな入力に挑戦してみたいです.親指シフトも少しやってみたい気がしますが,HHKBでは無理そうなので諦めています.

HHKB以外のキーボードも使ってみたいです.今気になっているのはKinesisとUltimate Hacking Keyboardです.

www.amazon.co.jp

ultimatehackingkeyboard.com

ubuntu 14.04 LTS ibus-mozcでDvorak配列を使う

はじめに

タイトルの通り,ubuntu14.04 LTSのibus-mozcでDvorak配列を使う設定をしたいと思います.
デスクトップ環境はUnityです.

ibus-mozcをセットアップ

ibus-mozcをインストールしていない場合は

$ sudo apt-get install ibus-mozc

でインストールしてください.

次に システム設定>言語サポート>言語タブ の
キーボード入力に使うIMシステムをIBusに設定します.

次に システム設定>テキスト入力 の
使用する入力ソースに"日本語(Mozc)"を追加します.

配列をDvorak

/usr/share/ibus/component/mozc.xml
のlayoutタグの要素を

us(dvorak)

に書き換えます.

設定

半角/全角キーがない配列にしてしまうと,当然ながら半角と全角の切り替えができません.
そこで,Mozcのキー設定で他のキーで切り替えできるようにしたいと思います.
また,Dvorak配列だとcでか行が打てたほうが確実に良いのでその設定もします.

システム設定>テキスト入力 の"日本語(Mozc)"を選択すると,
設定のアイコンが表示されるのでクリックするとMozcプロパティが表示されます.
Mozcプロパティ>一般>キー設定 の"編集"からキー設定ができます.
そこの,Hankaku/Zenkakuを好きなキーで置き換えればそのキーで切り替えられるようになります.

また,同じく Mozcプロパティ>一般>ローマ字テーブル の"編集"からローマ字の設定ができます.
そこで,
ca:か ci:し cu:く ce:せ co:こ
を,
ca:か ci:き cu:く ce:け co:こ
に変更すればOKです.

おわりに

DvorakJPを導入したいんですけど,よくわからないのでとりあえずcでか行だけ設定しました.
HHKBが欲しくて悶々とする冬休みを過ごしています.

Javaのcloneメソッドって?

Objectとcloneメソッド

この前本屋さんでJavaの本を読んでいたら,驚くべきことが書いてあった.
cloneメソッドでコピーを代入するのと,単に=で代入するのでは処理が異なるらしい.

JavaのObject

Javaを少しやったことがある人なら,JavaのすべてのクラスはObjectクラスの子クラスであるということは理解していると思います.
自分で何も継承していないクラスを定義しようとも,それは自動的にObjectクラスを継承しています.

cloneメソッド

Objectクラスにはcloneメソッドが定義されています.その他にも,toStringやhashCodeなどいろいろあります.
詳しくはここを見よう
Object (Java Platform SE 8)
cloneメソッドとはそのオブジェクトをコピーを返すメソッドです.
   

試してみた

現在の時間と10日前の時間を取得するコードを書いてみる.

cloneメソッドを使う場合

書いたコード
//現在の時間を表すCalendarオブジェクトを宣言
Calendar a=Calendar.getInstance();
//cloneメソッドで返ってきたオブジェクトを代入
Calendar b=(Calendar)a.clone(); 

System.out.println(a.get(Calendar.MONTH)+"/"+a.get(Calendar.DATE));
System.out.println(b.get(Calendar.MONTH)+"/"+b.get(Calendar.DATE));

//bだけ10日前にする
b.add(Calendar.DATE, -10);

System.out.println(a.get(Calendar.MONTH)+"/"+a.get(Calendar.DATE));
System.out.println(b.get(Calendar.MONTH)+"/"+b.get(Calendar.DATE));
結果
10/12
10/12
10/12
10/2

予定通りbだけが10日前になっている.

cloneメソッドを使わない場合

書いたコード
//現在の時間を表すCalendarオブジェクトを宣言
Calendar a=Calendar.getInstance();
//aをそのままbに代入
Calendar b=a; 

System.out.println(a.get(Calendar.MONTH)+"/"+a.get(Calendar.DATE));
System.out.println(b.get(Calendar.MONTH)+"/"+b.get(Calendar.DATE));

//bだけ10日前にする
b.add(Calendar.DATE, -10);

System.out.println(a.get(Calendar.MONTH)+"/"+a.get(Calendar.DATE));
System.out.println(b.get(Calendar.MONTH)+"/"+b.get(Calendar.DATE));
結果
10/12
10/12
10/2
10/2

あっれれ〜,おかしいぞ〜変更してないはずのaまで10日前になってるよ.

まとめ

cloneはそのオブジェクトのコピー(アドレスは異なる)を作ってくれるメソッドで,
Objectクラスに定義されてるからどんなクラスでも標準装備.
オブジェクトを単に=で代入すると,それは全く同じもの(アドレスが同じ)が代入される.
知らないで適当にやってるとバグを生みかねないから気をつけよう!!
こんなこと誰でも知ってる気がする…

初めてのUnity

Unityで遊んでみた

春休みで暇だったからUnityで遊んでみました.
なぜか春休みに入って,物理エンジンを使って遊びたい!と思い始めました.そこでどうすればいいんだろうと考えていたら,ちょうど少し前から気になっていたUnityで遊べばいいんじゃねと思い,遊んでみました.

 

Unityとは

Unityのホームページ↓

http://japan.unity3d.com/

Unityとはマルチプラットフォームゲームエンジンです.3Dのゲームも簡単につくれるらしい.

 

作ったもの

UnityのページのDeveloperってとこを見ていくと"はじめての Unity"というUnityのチュートリアルがあった.

http://japan.unity3d.com/developer/document/tutorial/my-first-unity/

2014/03/12現在,まだ途中のようだがチュートリアルの通りにやっていくとブロック崩しの基礎部分ができた.
そこから少し改造してUnityWebPlayerで動作する形式で書きだしてみた.それをこのblogでどうやって公開するんだ?と考えてぐぐってみたらDropboxを使ったというのを見つけてやってみた.↓

https://dl.dropboxusercontent.com/u/84431220/Unity/Build/Build.html

カーソルキーの左右で移動,ボールを自分の後ろに通してしまうとGameOverになり,Spaceキーでもう一度始まる.たったそれだけのゲームです.

 

感想

Unityをやっていて感じたのは,UnityのScriptはJavaScriptC#かBooで書けるようだがどれも全くやったことがなく(Booなんて存在すら知らなかった)て本当にチュートリアルのコードをコピペするだけの作業だったので,自分でやろうと思うと辛いんじゃないかということです.しかしながらUnityのリファレンスは日本語で書いてくれているようなので少し安堵.英語だろうとすらすら理解できるようになりたいし,なるべきなんだろうけど,なれない...

http://docs-jp.unity3d.com/Documentation/ScriptReference/

気が向いたらもう少しUnityで遊んで見ようかなぁと思うぐらい楽しかったです.