野良Qt5アプリで日本語入力)TweetLinux版HipChatで日本語入力ができなくて、最初そんなもんかと思ったけど追っかけてみたら直せた。結論的にはださいがこれでいけた:今回はこうだったが、実際は環境によっていろいろだと思うので、進め方を残しておく。よると、どうやら2つのことが必要らしい。公式ではない野良アプリケーション。"/opt/HipChat/bin/hipchat"からの/opt/HipChat/lib/hipchat.binで起動するようになっている。$arguments環境変数QT_IM_MODULEの設定QT_IM_MODULEが設定されていることを確認する。IM_CLUTTER_IM_MODULE=ximQT_IM_MODULE=fcitxQT4_IM_MODULE=fcitxGTK_IM_MODULE=fcitxfcitxに設定されているようだ。先ほどの記事によると、platforminputcontextsプラグインが重要らしい。platforminput/opt/HipChat/lib/plugins/platforminputcontexts/opt/HipChat/lib/plugins/platforminputcontexts/libibusplatforminputcontextplugin.so/opt/HipChat/lib/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.soということで、fcitxはない。ibusはあるので、おそらくibusだったらそのまま入力できたのだろう。/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.soということで、存在していた。fcitx-frontend-qt5で入りそうである。そのため、以下のようにシンボリックリンクを張ることで日本語入力を行うことができるようになった。/opt/HipChat/lib/plugins/platforminputcontexts/それぞれビルドされた環境が異なるし、いつまでこれができるかわからないので、いっそcpでコピーしたほうがいいかもしれない。先ほどの記事からするとQT_PLUGIN_PATHを/usr/lib/x86_64-linux-gnu/qt5/pluginsに向ければいけそうであるが、そうはいかない。いうのも、/opt/HipChat/bin/hipchatがunsetしているからである。$arguments自前のほうに向けないとあらぬプラグインを読んだりするかもしれないものね。いうケースもあるので、野良アプリケーションでは起動するときの流れを確認されたい。オートメーションライブラリのPowerShellラッパーで、UI自動操作(UIオートメーション)をPowerShellで記述できる。これにより、GUIしかないアプリの定型作業をスクリプト化したり、UIテストを行ったりすることができる。前に書こうと思ったのだけど、思い出したのでようやく書くことにした。2を計算してみるスクリプトを書くと以下のようになる。Out-Null結構簡単に操作できることがわかると思う。ここから使い方を見ていく。行き、Downloadボタンを押してzipをダウンロード、どこかに展開する。.\UIAutomation.dllとする。Get-Moduleして以下のようにでてくればOK。作り方は、「UI要素を探す」「UI要素をコントロールする」を繰り返すだけ。UI要素を探すUIをポイントするとUI要素を表示してくれるSpyツール「UIAutomationSpy.exe」が付属しているので、これを使ってコマンドを生成することができる。UIAutomationSpy.exeを起動すると、ボタンが2つとテキストボックスがいくつかある画面が起動するので「Start」ボタンを押してから、マウスカーソルに適当なウィンドウに持っていくと、テキストボックスにコマンドが表示される。欲しい部品が見つかったら、素早くStopボタンを押す。下のテキストボックスにホバーしたUI要素を探すためのコマンドが書かれているが、基本的にはこれをそのまま使うのではなく、不要な部分を削ったり、ちょっと加えたりする。さっきの電卓の例であれば、採取したタイミングでは以下のようになっている。'クリア'しかし、Get-Uiaシリーズは基本的に再帰的に要素を探してくれるので、ウィンドウを取得できたら、あとは特定できるのであれば詳しく書く必要はない。'クリア'なお、Idというだけあって、通常はAutomationIdを使うのがおすすめ。上記の例では適切なものがついていないが、WPFアプリケーションならx:NameやNameに設定したものがついている。UI要素をコントロールする上記のGet-~で得られたオブジェクトを、コントロールするコマンドレットにパイプで渡せばコントロールすることができる。ボタンをクリックするなら以下の通りになる。Invoke-UiaButtonClickコントロールするコマンドレットは自分で探すしかないが、基本的にSet-UiaやInvoke-Uiaがついているので、補完でだいたい探せる。Close」や「Set-UiaTextBoxText」などである。*uia*」とすれば一覧がでてくるので、これから探す。テキストを取得するGet-UiaTextTextなど、取得する系のコマンドレットもあるので、テストなんかには活用されたし。上記を組みわせていけば自動操作するスクリプトができる。詳しくほとんど上記で行えているが、歯抜けではあるがドキュメントがあるので、こちらも参考にできる。オートメーションの概要)や既存の記事なども参考にできる。コマンドレットで不足があれば、.NETのAPIを得られたオブジェクトに対して実行してしまっても動作する。UIなんて記載もあるので、Windowsストアアプリも操作できそうである。TipsUI自動操作は対象によってTips的なものが使うほどにでてくるが、最初から大事そうなものを挙げておく。ウィンドウをプロセスで絞り込むウィンドウはプロセスを決めなくても検索できるが、自分で起動している場合など、限定できる場合は-ProcessIdで絞っておくと安全である。hogehogeUI要素をガイドする赤枠を外すデフォルトでは選択した要素には赤枠がつくようになっている。通常は邪魔なので以下で外すことができる。$falseタイムアウトを変更する既定でもUI要素が出てくるまである程度待ってくれるが、足りない場合は-Secondsで延長できる。.で3MB/s程度しか出ないときは、barrier=0マウントオプションを検討する。背景Windows8.1の上のVirtualBoxにUbuntuを乗せて開発をしていたのだけど、開いたウィンドウがフルスクリーンの裏/表に回っちゃうとか、3D性能が下がるせいでウィンドウマネージャが限定されて効率が悪いといった不満があったので、今のご時勢にデュアルブートにすることにした。それ自体はまぁいつもの感じでできて、グラフィックがサクサクになって期待通りの感じだったのだけど、ディスクI/Oが異常に遅い。upgradeが全然終わらない。これでは使い物にならないので、なんとかすることにした。使っているSSDはcrucialの「CT256V4SSD2」。ファームウェアが更新されていて、変更内容がパフォーマンス改善だったので、更新してみるものの、改善されない(なお、ディスクは消去されるのでインストールし直した)。slowとか言われていて、機種のせいかとあきらめかけたら、まさかの日本のAmazonレビューに気になる記述を発見。ext4ファイルシステム環境においてほぼ完全な動作を得られましたので一応追記しておきます。mountオプションとしてnoatime,nodiratime,data=writeback,barrier=0,commit=180,nobhを指定することでフリーズを回避できるようです。/dev/sd**を実行、fstabのオプションフィールドに上記パラメータを追加することで、ようやく完全にSSDとしての性能を発揮するようになりました。/でマウントしたらapt-getのひっかかりがなくなった。.」で1回だけざっくり測ってみた結果がこちら。ms体感と一致するありえないぐらいの遅さが数字に出ていた。C300-CTFDDAC128M)では以下の通り。ms確かに遅くはあるのだけど、桁が変わるほどではない。max_latencyを見ると、さっきのSSDは投げ捨てろって感じだけどね...ついでなので、SSDにTRIMコマンドを発行するようになる「discard」オプションをつけて測ってみたが、特に変化はない様子。上記の結果と、たいして重要なデータを置いていない作業用PCだということを踏まえて「barrier=0,discard」を/etc/fstabにマウントオプションとして追記することにした。大事なデータを扱っている機械なら、こんな個体に当たったら使うのをやめるべきと思う。connect」をオンにすることで、iPhoneやAndroidのスマートフォンから開発者のPCにアクセスしてデバッグできるようになる。HTML内のURLにlocalhostや127.0.0.1が含まれている場合があり、そのリソースにはアクセスできない。bodyを置き換えることで、アクセスすることができる。Rulesから編集できるCustomRules.jsのOnBeforeResponse関数に以下を記述する。書き換えるべきヘッダがあったり、書き換えすぎちゃうものがあったりするかもしれないけど、そのとき適宜スクリプト書き換える方向で。