Groongaのコンパイル時にmax-gcse-memoryを指定してみた

はじめに

Groongaをコンパイルしているとこんな警告がでていることに気づく。

warning: const/copy propagation disabled:

これはGCSEというやつで、最適化が無効になったという警告である。 無効になってしまったんなら、そこはなんとか有効にしてあげたくなるというのが人情というものである(適当)。

Optimize Options - Using the GNU Compiler Collection (GCC) を読むと、必要なメモリを確保できなくて最適化を諦めたとある。 ならばパラメーターを明示的に指定してもうちょっとGCCに頑張ってもらおう。

そのためのオプションもある。それがmax-gcse-memoryである。

--param max-gcse-memory=

デフォルトが128MBらしい。それを超えてしまうと、断念してしまうようだ。 デフォルトの値を超えることってそんなにはないだろうが、それをGroongaさんは超えてしまった。

max-gcse-memoryを指定してコンパイル

適用するのにlib/Makefile.inにひとまず直に書いて試した。

CFLAGS = @CFLAGS@ --param max-gcse-memory=268435456

これによってコンパイル時間が増えるだろうと思ったらせいぜい1割増程度だった。

適用前

V=1 make 2>&1  258.80s user 18.57s system 96% cpu 4:46.33 total

適用後

V=1 make 2>&1  269.90s user 32.32s system 97% cpu 5:10.68 total

ベンチマークをしてみる

どれくらい効果があったのか、ベンチマークをとってみることにした。 幸いにしてGroongaにはbenchmarkが付属している。この結果を比較すればよいはずである。

  • Groonga 5.1.1
  • Intel Core i5-2467M CPU @ 1.60GHz
  • メモリ8GB
  • 10回試行し、その中央値をそれぞれプロット
  • Original versionというのが普通にコンパイルした版
  • Modified versionというのがmax-gcse-memoryをカスタマイズした版

f:id:kenhys:20160104204539p:plain

f:id:kenhys:20160104204532p:plain

f:id:kenhys:20160104204537p:plain

f:id:kenhys:20160104204533p:plain f:id:kenhys:20160104204534p:plain

f:id:kenhys:20160104204535p:plain f:id:kenhys:20160104204536p:plain

見事にほぼどんぐりの背比べである。なかには変更後のほうが妙に遅いケースもみられる。

まとめ

片手間にとったベンチマークとはいえ、残念ながらちょろっとコンパイルオプションを変更して速くなるかというと、そうでもなかった。 そんなに甘くないのが現実である。

MIYABIの広告配信問題について

FREETELから発売されたSIMフリー端末、MIYABIに広告配信問題が浮上した。

【重要なお知らせ】SAMURAI 雅 予期せぬ広告配信について | freetel

プリインストールされたアプリケーションが中国語の広告を配信してくれるらしい。 さすがにそれはどうなんだということで、「Beauty Makeup」は次回アップデートで削除されるらしい。

こいつは結構権限が怪しいので速攻無効にしていたんだけど、どんなもんかちらみしてみた。

package:com.gangyun.makeup として端末にインストールされているのが該当する。

apkをばらしてsoとかjarを適当にリストアップしてみた。

  % find . -name '*.so'
  ./assets/snowfox.so
  ./lib/armeabi/libGangyunFace.so
  ./lib/armeabi/libBeautyFeature.so
  ./lib/armeabi/liblocSDK3.so
  ./lib/armeabi/libDetectFeature.so
  ./lib/armeabi/libweibosdkcore.so
  ./lib/armeabi/libgybeauty420sp.so
  % find . -name '*.jar'
  ./assets/gdt_plugin/gdtad.jar

weibosdkってのはたぶん、 sinaweibosdk/weibo_android_sdk · GitHubだと思う。中国版twitterみたいなやつのSDKっぽい。

今回問題となった広告の配信に使われたのは多分gdtad.jar。 广点通http://e.qq.com/index.shtmlってとこの広告プラットフォームに対応するプラグインのようだ。

ぐぐってみると 无标题文档みたいにKeymobかBaiduかGdtのどれかを使え、とあるくらいにはそこそこ使われているものなんだろうか。

このへんと通信するっぽい。

バックグラウンド通信に云々ついてはまた別問題っぽいね。

なろうのブックマークカテゴリ一覧を取得するには

favnovelmain/listに遷移すれば以下のようにして取得できる。

require 'mechanize'
require 'yaml'

agent = Mechanize.new
agent.user_agent = 'Narou Browser'

(ログインはできているものとして省略)

page = agent.get('http://syosetu.com/favnovelmain/list/')
page.search("div[id='sub']/ul[class='category_box']/li").each do |li|
  p li.text
end

なろうにMechanizeでログイン

Rubyでログインするサンプルスクリプト

アカウントは別のYAMLに書いてあるとする。

% cat account.yaml
email: hoge@example.com
password: mypassword

実際のスクリプトはこんな感じ。

require 'mechanize'
require 'yaml'

agent = Mechanize.new
agent.user_agent = 'Narou Browser'

params = YAML.load_file('account.yaml')
  
#agent.verify_mode = OpenSSL::SSL::VERIFY_NONE
agent.ca_file = 'ssl.syosetu.com.crt'
page = agent.get('https://ssl.syosetu.com/login/input/')
next_page = page.form_with do |form|
  form.id = params['email']
  form.pass = params['password']
end.submit
p next_page

事前にサイトの証明書をブラウザからエクスポートしておく。agent.ca_fileに指定しているのがそれ。

DesireHDで標準のフォントを差し替える

DesireHDの標準のフォントに特に不満を持っていなかったのだけれども、先日試しにNasuフォントを導入してみた。

Nasuフォント : 見た目が似ている文字を判別しやすくするフリーフォント - itouhiroはてなブログ

基本的には、fonts.xmlとfallback_fonts.xmlを書き換えて、フォントをpushする。 このとき、/systemがroなので、rwへremountしておかないといけない。

su
mount -o rw,remount -t ext4 /dev/block/platform/msm_sdcc.2/by-name/system /system 

あとは、adbでpushしてからrebootすれば置き換わる。

adb push update/system/etc/fallback_fonts.xml /system/etc/fallback_fonts.xml
adb push update/system/etc/fonts.xml /system/etc/fonts.xml
adb push update/system/fonts/Nasu-Regular.ttf /system/fonts/

fonts.xmlは該当エントリのフォントを変更するだけ。

% diff -u fonts.xml.orig fonts.xml
--- fonts.xml.orig      2015-09-19 12:51:02.658045246 +0900
+++ fonts.xml   2015-09-19 13:53:37.371494962 +0900
@@ -309,7 +309,7 @@
         <font weight="400" style="normal">NotoSansHant-Regular.otf</font>
     </family>
     <family lang="ja">
-        <font weight="400" style="normal">NotoSansJP-Regular.otf</font>
+        <font weight="400" style="normal">Nasu-Regular.ttf</font>
     </family>
     <family lang="ko">
         <font weight="400" style="normal">NotoSansKR-Regular.otf</font>

fallback_fonts.xmlも同様に変更しておく。

% diff -u fallback_fonts.xml.orig fallback_fonts.xml
--- fallback_fonts.xml.orig     2015-09-19 12:56:50.494825355 +0900
+++ fallback_fonts.xml  2015-09-19 13:54:01.747787026 +0900
@@ -370,7 +370,7 @@
     </family>
     <family>
         <fileset>
-            <file lang="ja">NotoSansJP-Regular.otf</file>
+            <file lang="ja">Nasu-Regular.ttf</file>
         </fileset>
     </family>
     <family>

ROMを焼くたびに再度置き換えるのは面倒なので、その場合にはZIPmeを使う。 ZIPmeでupdate.zipを作成すると、ROMを焼いたあと追加でリカバリから適用するだけでよい。

ZIPme - Google Play の Android アプリ

fcitx-imlist 0.3.0でトグル切り替えをサポート

fcitx-imlist 0.3.0をリリースしました。 今回のリリースでは、-tオプションを追加し、インプットメソッドの組をトグルで切り替えられるようにしました。

この機能はデフォルトのインプットメソッドの組と代替となるインプットメソッドの組をあらかじめ登録しておくと、-t オプションで切り替えられるというものです。

例えば、デフォルトでjp,mozcを登録しておき、代替としてus,mozcを設定してあるとします。

    % gsettings get org.xdump.fcitximlist fcitx-imlist-default
    'jp,mozc'
    % gsettings get org.xdump.fcitximlist fcitx-imlist-alternative
    'us,mozc'

この状態で-tを指定するとデフォルト設定と代替設定を簡単に切り替えられるようになります。

これまでは、fcitx-imlist -s us,mozcfcitx-imlist -s jp,mozcを都度実行して切り替えていたのが -tでシンプルに切り替えられるようになりました。という地味な改良です。

github.com

fcitxのIMの設定順序をコマンドラインから変更するには

はじめに

fcitxのIMを変更するのには、fcitx-configtoolを使います。

f:id:kenhys:20150531033816p:plain

IMが複数あっても、キーを割り当てて切り替えられるという塩梅です。 キーボードのレイアウトが変わらないならそれであんまり困りません。

ただ、レイアウトの異なる外部キーボードをつないだりはずしたりというのが頻繁にあると、とたんに面倒になってきます。(直接入力はキーボードレイアウトを合わせておかないといけないため。もしかしたらいい方法があるのかもしれないがわかっていない。)

fcitx-remoteは?

fcitx-remoteというコマンドがあります。これには -sオプションがあって、指定したIMに直接切り替えることができます。 しかし、直接入力をこのレイアウトにというのはできません。

そこでfcitx-imlistを作りました

ようするにfcitx-configtoolがやっていることをコマンドラインから実現できればいいわけです。

そのためには、fcitx_input_method_get_imlistfcitx_input_method_set_imlist を呼んであげるといいことがわかりました。

というわけで、そのためのコマンドを作ってみました。 (世の中にそういうのすでにあるような気もするけど調べていない。)

それが、fcitx-imlistというわけです。 オプションを指定してあげると切り替えられるというようにしました。

% fcitx-imlist -s fcitx-keyboard-us,mozc

上記は、直接入力は英語キーボードで、日本語入力はmozcにするための設定方法です。 直接入力は日本語キーボードで、日本語入力はmozcに戻すためには次のようにします。

% fcitx-imlist -s fcitx-keyboard-jp,mozc

オプションに指定するインプットメソッドのリストは -l オプションで取得できます。

日本語キーボードとmozcと英語キーボードの設定があると次のように表示されます。

% fcitx-imlist -l
fcitx-keyboard-jp (キーボード - 日本語) [enabled]
mozc (Mozc) [enabled]
fcitx-keyboard-us (キーボード - 英語 (US)) [enabled]

ソースコードは、GitHubで公開しています。

github.com