f

アーカイブ

2015-08-28

Google日本語入力(Mozc)のIME設定をWindows・Linux・Androidで同期

Google日本語入力(LinuxはMozc。以下ではmozcと表記)でWindowsとLinuxでIMEの設定を同期する。

mozcのIME設定ファイル

複数のPC・OSを使っていてIMEの設定(特にユーザー辞書)を共有したかった。ユーザー辞書には例えば、以下のような単語を登録をしている。

  • 「よろ」→「よろしくお願いいたします。」
  • 「2」→「²」

これが使えれば日常での文章作成が早くなる。

mozcには標準でユーザー辞書をインポート・エクスポートする機能がある。今まではこの機能で辞書ごとにテキストファイルに出力して更新のたびに各端末の辞書を手動で更新していた。しかし,わずかな変更に対しても全端末のユーザー辞書を手動で更新するのはかなり面倒だった。これを回避するには,IMEの設定をまるごと自動で同期する必要があった。

mozcはOSごとに1のディレクトリに設定ファイルが格納されている。この設定ディレクトリをまるごとDropboxなどで共有して,元の場所にシンボリックリンクを貼ることで複数端末でIMEの設定を共有できる。

mozcの設定ファイルの格納ディレクトリ
OS 場所
Linux $HOME/.mozc/
Windows %USERPROFILE%\AppData\LocalLow\Google\Google Japanese Input\
Android /data/data/com.google.android.inputmethod.japanese/.mozc/

mozcの設定ファイルの格納ディレクトリには2に示す設定ファイルが存在する。これらのファイルを同期すれば項目を絞って同期することも可能となる。ユーザー辞書が格納されているuser_dictionary.dbは特に重要度が高い。

mozcの設定ファイル
ファイル名 説明
boundary.db
cform.db
config1.db [Mozc Tool]の[Configuration Tool]で設定できるキーマップや記号類の既定の変換などの基本設定。
segment.db
user_dictionary.db ユーザー辞書。

設定ファイルの格納ディレクトリにquery_of_death.logという12 MBほどのファイルがあったが,このファイルは削除しても大丈夫だった。上記の設定ファイル群についてはGoogleのフォーラムで以下の言及があり判明した。

  • boundary.db
  • cform.db
  • config1.db
  • segment.db
  • user_dictionary.db


の各ファイルをコピーすれば,学習結果,ユーザ辞書,半角・全角の学習結果は移行されます。ただし,変換エンジンが動作してる時に,コピーす ることを想定していないので,コピーする前に変換エンジンのプロセス (GoogleJaIMEConverter.exe) を終了しておく必要があります。(タスクマネージャからプロセスを終了してください)

Google日本語入力のオフィシャルな移行について - Google プロダクト フォーラム

mozcのIME設定の同期手順

上記コメントにもあるようにIMEの設定の共有は以下の手順で行う。

  1. 共有化したい大元とする端末で作業を開始。
  2. Mozc(Google日本語入力)のプロセスを終了。
    • Linuxの場合,fcitxmozc_serverを終了させる。
      killall fcitx mozc_server
    • Windowsの場合,GoogleIMEJa*を終了させる。
      taskkill /f /im GoogleIMEJa*
  3. mozcの設定ファイルの格納ディレクトリをDropboxなどに移動。
  4. 元あった場所に3.で移動させたディレクトリへのシンボリックリンクを貼る(Windowsではディレクトリではなく,その下の階層ファ イルに直接リンクを貼る。後述)。
  5. mozcを起動する。

    Linuxの場合,fcitxコマンドで起動できる。Windowsでは変換キーなどでIMEを使おうとすると自動で起動する模様。

  6. 同期させたい全端末で1-5まで実行(3.は移動させる代わりに削除でOK)。

なお,Google日本語入力(Windows,Android)とMozc(Linux)は共通の設定ファイルが使えるとのことなので,上記の手順によりWindows,Android,Linuxの複数OSでIMEの設定を共有できるようだ。Androidに関しては未確認なのでいずれ試してみたい。

参考:

やっぱり同期の通信が気になるので,必要な以下2ファイルだけを個別にシンボリックリンクで同期する。

  • user_dictionary.db
  • config1.db

Windowsでのエラー「変換エンジンプログラムの起動に失敗しました。」

前述の手順でLinuxの.mozcを共有して,WindowsのGoogle日本語入力の設定ディレクトリである%USERPROFILE%\AppData\LocalLow\Google\Google Japanese Inputに.mozcへのシンボリックリンクを作成した。Google日本語入力を起動すると日本語に切り替えるときに以下のエラーが出てしまった。

Google日本語入力エラー
変換エンジンプログラムの起動に失敗しました。新しいGoogle日本語入力を利用するためにコンピュータを再起動してください。

この現象は例えば以下の記事でも報告されている。

共有しようとしている,user_dictionary.dbconfig1.dbが Google日本語入力とmozcとで互換性がないのかもしれないと思ったが問題なかった。試行錯誤の末,以下の結論にたどり着いた。

Google日本語入力は設定ディレクトリがシンボリックリンクだと正常に動作しない。

したがって,Google日本語入力については,ディレクトリをシンボリックリンクでまるごと共有するのではなく,中の個別の設定ファイルに直接シンボリックリンクを貼ることで設定を共有する。Windowsだけ手順を変える必要があるのでやっかいだがこれで解決する。

設定ファイルの同期スクリプト

以下2016-04-17追記

以前からわかっていたが,記事に追記していなかった事項があったので記載する。

上記ツイートで言及しているように,設定ファイルに個別にリンクを貼っても,IMEの設定を更新したら強制的に単一ファイルで上書きされてしまい,リンクが解除されてしまう。この現象はWindowsでも,Linuxで発生した。したがって,同期を継続するにはIME設定を更新した環境(OS)では,設定ファイルを共有ディレクトリにもコピーしてリンクを貼り直す必要がある。

手作業でやってもいいが,面倒くさいのでスクリプトを作った。

Windows版:

REM \file      relink_mozc.bat
REM \author    SENOO, Ken
REM \copyright CC0
REM \date      first created date: 2016-04-17T12:58+09:00
REM \date      last  updated date: 2016-04-17T14:46+09:00
REM \brief     Google日本語入力のIME設定を更新後,共有ディレクトリに更新された設定ファイルをコピーしてリンクを貼り直す。
REM 使い方
REM 共有したいファイルを FILE 変数に空白区切りで記入する。
REM Dropboxなどで共有しているディレクトリにこのバッチファイルを配置して実行する。
REM 共有ディレクトリと同じ場所にこのバッチファイルを配置したくなければ,SHARE_DIR 変数に共有ディレクトリの場所を指定する。
REM 管理者権限が不要で済むように,シンボリックではなくハードリンクを使っている。

SETLOCAL
SET FILE=config1.db user_dictionary.db
SET OS_DIR=%USERPROFILE%\AppData\LocalLow\Google\Google Japanese Input
SET SHARE_DIR=.

FOR %%F IN (%FILE%) DO (
  ROBOCOPY /xo "%OS_DIR%" "%SHARE_DIR%" "%%F"
  DEL "%OS_DIR%\%%F"
  MKLINK /H "%OS_DIR%\%%F" "%SHARE_DIR%\%%F"
)
ENDLOCAL

Linux版:

#!/bin/bash
# \file      relink_mozc.sh
# \author    SENOO, Ken
# \copyright CC0
# \date      first created date: 2016-04-17T14:35+09:00
# \date      last  updated date: 2016-04-17T16:13+09:00
# \brief     mozcのIME設定を更新後,共有ディレクトリに更新された設定ファイルをコピーしてリンクを貼り直す。
# 共有したいファイルを FILE 変数に空白区切りで記入する。
# Dropboxなどで共有しているディレクトリにこのスクリプトを配置して実行する。
# 共有ディレクトリと同じ場所にこのスクリプトを配置したくなければ,SHARE_DIR 変数に共有ディレクトリの場所を指定する
# CygwinなどWindowsでの動作も考慮して,管理者権限が不要なハードリンクを使用。

FILE="config1.db user_dictionary.db"
OS_DIR=~/.mozc
SHARE_DIR=.

for f in ${FILE};
do
  rsync -a --include "$f" --exclude "*" "${OS_DIR}/" "${SHARE_DIR}/"
  rm "${OS_DIR}/$f"
  ln -f "${SHARE_DIR}/$f" "${OS_DIR}/"
done

OSに応じて,上記のスクリプト(relink_IME.{sh,bat})をIMEの設定を同期させている共有ディレクトリに配置して,実行すればよい。同じディレクトリに配置するのが嫌であれば,SHARE_DIR変数に共有ディレクトリのパスを記入して実行する。rsyncrobocopyコマンドで更新されたファイルだけをコピーしてリンクを貼り直すようにしている。既定ではconfig1.dbuser_dictionary.dbのみ同期するようにしている。FILE変数の値を変更して,必要に応じて変更してほしい。

Linux版だけであれば,ディレクトリごと共有することで問題は解決する。しかし,Windows版とも共有することを考えるとこうせざるを得ない…。

ただ,やはり毎回更新するのは面倒なので何かいい方法があれば教えてほしい。

反響

@traji222さんの以下のツイートをきっかけにして,追記しないといけないなと思って追記した。

以前にも,この記事に対してツイートしてくれた人がいた。2回目なのでそれなりに需要のあるテーマなのだろうと思い,せっかくなので上書きして再リンクするスクリプトも作った。

@traji222さんのブログでは画像付きで設定の共有方法が書かれており,わかりやすいので参考にしてもいいかもしれない。

プチつぶやき なんだかなぁ : Google日本語入力 ユーザー辞書とかDropboxで同期できた!

2015-08-18

参加メモ:「並列Fortranの現状と展望」~Fortranは絶滅危惧種なのか?~

以下のイベントに参加した。まとまりはないが,なんかの参考になると思ってそのときのメモを列挙する。
イベント名:「並列Fortranの現状と展望」~Fortranは絶滅危惧種なのか?~
URL:http://site.hpfpc.org/home/events/parallel_fortran_sympo
日付:2015-08-18
参加者:80人くらい。

関連ツイート:https://twitter.com/senopen/status/633608746413899776

目次
  1. 並列Fortranの歴史と現状
    1. 初期
    2. 中期
    3. 今後
    4. 質疑
  2. Fortran規格の歴史
  3. エクサスケール時代の Fortran の役割
  4. 航空宇宙技術研究所から宇宙航空研究開発機構にかけてのソフトウェア開発について
  5. 核融合プラズマ・シミュレーションでの Fortran での活用
  6. 大学のSX利用者から見たFortranプログラミング
  7. 富士通のFortranへの取り組み
  8. NECのFortranへの取り組み
  9. 計算機システムの進化とFortranの将来
  10. インテルのFortranへの取り組み
  11. XMP
  12. ディスカッション
  13. 懇親会


並列Fortranの歴史と現状

初期

  • FORTRAN77
  • PCF Fortran

共有メモリ向け。

PCF Fortran-77(1987)

OpenMPと比べて流行らなかった。


分散向け。
  • いろんなベンダが実装。

NWT Fortran

Numerical Wind Tunnel:数値風洞。

解きたい問題があってできた。Navie-Stokes/ADI法。

ベンダがいろいろ作ったけど何一つ残らなかった。標準でなければ普及しない。


中期

Fortran90革命。

今まではCの部分集合だった。

  • 形状を持つ。
  • 部分配列。

配列演算は並列性がしやすい。

これを背景に出来たのが,HPF(High Performance Fortran)。

HPF1.0(1993)

HPF2.0(1997):ベンダのエゴで派生いろいろ。

2007年。

ユーザーの失望。

高性能とポータビリティは用意に得られない。ベンダ独自実装になるしかない。

HPFに関する取り組み。
JAHPF。
  • 言語仕様の検討。
  • ユーザーの自動化への拡張機能


HPFは腐ってもタイ。

FortranができないとHPFもできない。

OpenMP:唯一成功している並列Fortran/C。

トレンドをおっている。

今後

PGAS:Partitioned Global Address Space。

Coarray Fortran:Fortran2008の実装。



質疑

  • HPFの失敗の一つはコンパイラに要求しすぎたのでは。OpenMPは最小限。
    • OpenMPは作りながらできた。HPFはできないから仕様を付け足してやろうとしている。
    • OpenMPは最初から共有メモリだからうまくいった。HPFは分散メモリだから難しかった。


Fortran規格の歴史

江戸川大学。

Coarrayの話はしない。

Fortranの関わりはここ3年くらいの課題のため。

国際会議の規格にはでているが,普段の生活ではFortranとかかわりない。

1986:岩波FORTRAN辞典。FORTRAN77の仕様について書かれたもの。歴史とかを書いたもの。

1988:国際会議に出席。日本の規格を国際規格に盛り込もうと。

1993:詳解Fortran90。規格について詳しくわかりやすく書いてある本。の翻訳本。


なぜFortranが初期の言語で生き残ったか(FORTRAN辞典)。

  • キーワードの冗長性など,言語の設計が的確だった。
  • コンパイラの最適化が極めて強力だった。
  • IBMがソフトウェアを重視した。
  • IBMとIBM 704が商業的に成功した。


古典的FORTRAN規格。

FORTRAN 66:ANSI規格。

賛成が足りなくて国際規格にはならなかった。推進規格となった。

FORTRAN 77:77はドキュメント番号。77年にできたからじゃないらしい。77が決まってからあとづけで66ができた。

Fortran 90:90の必要性が理解されるか心配だった。

Fortran 95:アメリカ規格は作らなくなった。国際規格をアメリカ規格とすればよいという国の方針が変わった。国際規格に注力しようと。

90とか95は適当に選んだわけではなく,その年に仕様がほぼ決まったから。今までは適当だった。


現在のFortran規格

Fortran 2003:国際規格は既に廃止されて2008が最新。

2009年にJISが2003。

2008は2013年にJISになるかも。JISにする必要があるかどうか。

Fortran 2015:既に2018年にできる。予定は決まっている。

次の規格がでるときに一個前のJISを出しては混乱する。Fortranの翻訳したJISが必要と委員会で合意。


規格の開発母体の変遷。

ANSI X3.4.3

ANSI X3J3

NCITS/J3

INCITS/J3(National Commitie )

INCITS/PL22.3(PL:プログラミング言語。)

Jがプログラミング言語というのはわかりにくいので変更。


国際規格の委員会。

ISO

IEC 国際電気標準会議

情報関係はISO/IEC合同で出している。


ISO/IEC JTC1 情報技術の標準化を担う Joint Techinikacl COmmittee

ISO/IEC JTC 1/SC 22 言語やOSの標準化を担うSub Commitete

ISO/IEC JTC 1/SC 22/WG 5 Fortranの標準化を担うWG。

メンバー国からの個人メンバー。


国際規格の開発フェーズ

NP()New work item protoposal

WD (Working Draft) WG5レベル

CD(Commitee draft)投票 SC22レベル

DIS(


各Fortran規格の性質

Fortran90の主な特徴。

もともと1982年くらいにつくるつもりだったが,13年もかかった。大改定。

  • 革新/慣習
  • 小さく単純/大きく協力
  • 廃止の容認


90後の工夫。

列車方式の採択。

5年ごとに改正規格。間に合ったものをのせる。▷95

列車に間に合わないが,急ぐものはTRとして別途開発。

95:FORALLでHPF対応。

Q&A

実ユーザーの声が届いていないのでは?



エクサスケール時代の Fortran の役割

略歴:

  • Fortran 77のコンパイラを並列処理用に作成
  • Fortran 77のOpenMP Omni OpenMP
  • XMP作っている。

Fortranは絶滅危惧種か

Yes。

ACM SIGPLAN。

少なくともベスト10にはない。Lispよりも下。

しかし,京のアプリはほとんどがFortran


Fortranである理由

  • 昔からのコードがFortranだった。
  • Fortranのコンパイラがいい。
    • C++が増えている。

Fortranは高級言語。

C(低級言語)の宣言は,サイズを指定する。

double A[100];

Fortranの宣言は範囲を指定。

エクサスケールに向けたトレンド。

  • 高レベルの記述。
    • 並列性の記述
    • フレームワーク化。
  • 高スケーラビリティ
    • 大規模。数万ノード,数百万コア。

言語に求める機能:

  • 通信機能,PGAS
  • 同期のrelaxation


Fortranのこれからの役割。

以前のコードを引き継ぎ

  • FORTRAN 77 + allocatable

Fortranが早いという伝説。

コードを書いてMPIでつなぐにはFortran(C,...)+MPIが残る。

  • 高レベルな記述
    • もっとユーザーが使わないと成熟しない。
    • 高レベルでかいてくれないと並列解析できない。

C++のテンプレートでも書けるけど,Fortranは言語仕様にはいっている。

  • PGAS,通信機能。

言語機能として配列がはいっているのが,Fortranは数値演算の分野でもいいのではないか?


質疑

チューニングするときに,配列演算はDOループに直したりする。

昔のFORTRANは静的なので最適化しやすかった。動的になったらFORTRANじゃない?



航空宇宙技術研究所から宇宙航空研究開発機構にかけてのソフトウェア開発について

航空機周りの空気の流れのシミュレーション。

  • 市販ソフトがない
  • 外注は資金面の問題。

この人の意見。

  • 素直なプログラムならFORTRAN
  • 非構造などはCの構造体のほうが有利

Fortranは数学に近い。

Cは変数名が値を指したり,入れ物を指したり。

核融合プラズマ・シミュレーションでの Fortran での活用

アンケート

Fortran,C/C++,Python

用途:

  • 大規模数値計算
  • 数値計算
  • 数値データ解析

Fortranを使う理由・使わない

  • 周りが使っている
  • 過去の遺産
  • 簡単
  • 他を知らない。


  • 必要を感じない。
  • I/Oが不便
  • Fortranがつかえても開発現場でつかえない


大学のSX利用者から見たFortranプログラミング


1. 教育現場でのFortran

制御はCでやっている。

国会図書館で検索すると面白い結果。

2000年入ったところで,情報処理試験の科目から外れた。ので本が数年なかった。


研究は過去の積み重ねだから。Fortranを使うしかない。

新しく始めるならCもあり。C++は速度が出にくいらしい。


質疑:

  • 昔はFortranしかなかったのでFortranを全員に教えていた。教育としては,今はいろんなのがあるからFortranである必要がない。
  • 研究としては,Fortranは必要な人がやればいい。研究で過去の引き継ぎで必要ならいるかな。
  • SX-ACEでの性能は,FortranとCと同じ。
  • Fortranで教えるメリットはなんだろう。こういう議論が必要かな。
    • FortranはポインタがないのでCより楽。
    • 宣言しないといけないかな。


富士通のFortranへの取り組み

富士通Fortranの歴史=スパコンの歴史

HPCに求められること:超高速計算

  • 数万プロセス動作
  • キャッシュ利用効率

なぜFortran使うか?

  • 既存資産がFortran
  • 数学ライブラリが充実

目的を早く実現するためにFortran。

開発コスト・保守コスト・拡張性を犠牲にして,性能を追求したのがFortran。


NECのFortranへの取り組み

コンパイラ開発者視点での利点。

FortranもCもコンパイラの最適化は同じ。言語自体はない。

同じ最適化はできる。あとは,書き方の問題。

Fortranの場合はあまり意識しなくていい。

意識すればCでも回避可能。

引数チェックとか。

Fortranもモダンな機能を使うとCと同じような感じになってしまうかも。


計算機システムの進化とFortranの将来

今後

バックエンドとしてFortranを使う。

フロントなどの入出力はCとかJavaでやってしまうとか。


質疑:

  • CとFortranでの速度差。
    • パラメーターの受け渡しの言語仕様間。
    • ポインタの別名解析をちゃんとやるかどうかでループで差が出る。
    • restrictキーワードをつけると同じ性能が出る。


インテルのFortranへの取り組み

コンパイラ開発者は不参加。開発者にいくつか質問をしてそれの回答という内容の発表だった。

世界で一番Fortranを使っているのは日本。

質疑

  • Cの数学関数が充実。Cのlong doubleみたいなのあるか?これがないために精度的になくなくCで書いている。
    • ない。
  • Macでifortは数学関数がない。coarrayがない。
    • Mac版は機能が遅れている。


XMP

質疑

  • MPIと比べて劣る点があるのか。
    • グローバルビューでは,非構造格子になると難しい。そのためにローカルビューがある。
  • Omni XMPが吐き出すソースコードは見てわかるのか?
    • 一応わかるけど,ここを触るのはやめたほうがいい。

ディスカッション


  • 便利な機能が使われて役立っているのか?コードを維持して少しずつよくするのがいいのか。維持するだけなら進化は不要。
    • HPFしようとするとFortran90にしないといけない。Fortran77だと最新の機能はつかえない。ただし,2003以降はいらない。
    • staticからallocatableになったのはいい。
    • でも2003以降で使わない機能が入ってコンパイラが遅れるのはよくない。coarrayを使って正しい機能でやっていけばいいと思う。
    • HPFを求めず,あまり進化を求めないのがいいのではないか。
  • スパコン前提の話があった。貧乏人はGPUを使うしかない。GPUの登場でCになった。CUDA Fortranは使いにくい。オブジェクト指向もいいよ。FORTRANが廃れたのは77が読みにくい。Cが好きだけどFortran滅べばいい。とかある。保守しにくい。汚いところは見せないほうがいい。だからオブジェクト指向がいる。しかし,速度が落ちる。C++なら一時オブジェクトを作らないやり方がある。Fortranにはない。20倍くらい遅くなる。どうせ数値計算しかないのだから,コンパイラ側がしっかり解析でやってほしい。
  • FORTRAN77で複雑な計算をやれというのは厳しい。90で入った構造体とかつかえれたらいい。なくてもできるけど。これがつかえないと複雑な現象を記述できない。
  • 規格の委員会でもいろいろ議論あるのだけど,ベンダー中心でやっている中でユーザーがいて,こういう議論もあった。期待してもいい。
  • 2003は派生型にいろいろ種別を入れて,ここのベンダーの実装がたいへんそう。提供する予定のないベンダーもいる。

懇親会

  • なぜFortranの規格ではC言語との連携についてあるか?
    • 生き残りのため。FortranからC言語を使いたい・逆の要望があった。
  • Fortranが使える場面が少ない。Cのほうが汎用性が高い。
    • 77の頃は汎用性があった。しかし,90が出るまで時間がかかりすぎた。90がもっと早く出てきたら汎用的な言語になったかもしれない。でもC言語がでてきて無理になった。分野に特化するという方針になった。
    • Fortranとは何かという議論があったが,こうだと思う。「過去のいい意味で保守的で,必要なものを先取りするところ。」

2015-08-08

Solution of "Requires installation of untrusted packages" for updating Ubuntu package

Software Updaterでインストールしたソフトをアップデートしようと[Install Now]を押下すると以下の画像のように「Requires installation of untrusted packages」というエラーがでてしまい,ここ何か月かUbuntu 14.04の更新を放置していた。

おそらく外部リポジトリからインストールしたパッケージを更新しようとしてエラーになっているのだろう。

いい加減更新したいなと思って少し考えた。とりあえず以下のように[Other updates]の☑を外して[Install Now]を押下するととりあえず進んだ。

ひとまず標準のリポジトリからインストールしていたパッケージを更新できたのでよしとする。外部パッケージの更新はまた今度検討する。