2017/02/24

LaTeXで半角文字を含めてゴシック表示する方法

LaTeXで半角文字を含めてゴシック表示する方法

よく忘れるのでメモ.

一部分だけ適用するなら

\gtfamily\sffamily\bfseries

文章全体に適用するなら,プリアンブルに

\renewcommand{\sfdefault}{phv}
\renewcommand{\kanjifamilydefault}{\gtdefault}
\renewcommand{\familydefault}{\sfdefault}
\renewcommand{\seriesdefault}{b}

とする.

和文ゴシックの書体によっては,boldは指定しない方が自然になる.


2017/02/15

RubyMine や PyCharm などで例外発生時にブレークポイントを置く方法

RubyMine や PyCharm など(他のJetBrains製品もおそらく同様)でデバックしているときに,エラー(例外)発生時にブレークポイントを置き,エラー発生時点の変数を見る方法のメモ.

デバックのウインドウの左側にある赤い丸が縦に二つ並んだボタン(View breakpoints)から設定可能.

PyCharmなら,Python Exception Breakpoints Any exception にチェックを入れる.
RubyMineなら,Ruby Exception Breakpoints の Exception 'Exception' にチェックを入れれば良い.

なければ + ボタンから追加可能.

Exception 'Interrupt' なども追加すると無限ループなども検証できて良い.

rubyで実行時間の解析

rubyで実行時間の解析をする方法のメモ.

ruby-profというライブラリを使う.
例えば以下のように,RubyProf.start と RubyProf.stop の間に解析したいコードを書けば良い.

require 'ruby-prof'

# 解析スタート
RubyProf.start

sleep(1)

# 解析終了
result = RubyProf.stop

# 結果を出力
printer = RubyProf::FlatPrinter.new(result)
printer.print(STDOUT)


結果は以下の通り.
%selfは全体に占める割合.

Measure Mode: wall_time
Thread ID: 70297835660380
Fiber ID: 70297835966400
Total: 1.005130
Sort by: self_time

 %self      total      self      wait     child     calls  name
 99.99      1.005     1.005     0.000     0.000        1   Kernel#sleep

  0.01      1.005     0.000     0.000     1.005        1   Global#[No method]



KCacheGrind というツールを使えば,ビジュアライズもできるらしい.


加えて,

RubyProf.measure_mode = RubyProf::MEMORY

とコードに加えれば,メモリの解析もできるらいしが,rubyのパッチが必要.
https://github.com/ruby-prof/ruby-prof
https://github.com/skaes/rvm-patchsets

rvmでインストールするらしいが,rbenvでインストールしたいと思って少し調べたが面倒そうなので諦めた.


pythonのラインプロファイラ

各行毎のメモリ消費量を調べるmemory_profilerと実行時間を調べるline_profilerの使い方メモ.

まず,memory_profiler の使い方

pipでインストール.


sudo pip install memory_profiler


調べたい関数の前に
@profile
を付ける.

例えば以下のようなtest.pyを作る.

@profile
def main():
    l = [[1,2,3,4]] * 100000
    d = [{'first': 1, 'second': 2, 'third': 3, 'fourth': 4}] * 100000

if __name__ == '__main__':
    main()
    print("Hello world!!")


あとは

python -m memory_profiler test.py

のように -m オプション付きで実行するだけで,以下のような出力が得られる.

Hello world!!
Filename: test.py

Line #    Mem usage    Increment   Line Contents
================================================
    17   28.488 MiB    0.000 MiB   @profile
    18                             def main():
    19   29.270 MiB    0.781 MiB       l = [[1,2,3,4]] * 100000

    20   30.039 MiB    0.770 MiB       d = [{'first': 1, 'second': 2, 'third': 3, 'fourth': 4}] * 100000

Incrementの欄を見れば
各行のメモリ消費量が確認できる.



line_profilerの方もpipでインストール.

sudo pip install line_profiler

上記のtest.pyを

kernprof -l test.py


のようにkernprofで実行すると


test.py.lprof

というファイルができている
これをさらに

python -m line_profiler test.py.lprof

のように実行すると,以下のような出力が得られる


Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
    17                                           @profile
    18                                           def main():
    19         1          418    418.0     56.0      l = [[1,2,3,4]] * 100000
    20         1          329    329.0     44.0      d = [{'first': 1, 'second': 2, 'third': 3, 'fourth': 4}] * 100000