i4fumi's blog

オープンソースなど

Inconsolata と Migu フォント

vim のカラースキーマを Solarized に変更したら、 フォントも変えたくなったので、Inconsolata と Migu 1M に変更してみました。

フォントをインストール

InconsolataGoogle Web Fontsから ダウンロードします。

f:id:i4fumi:20121024083034p:image

次に、Migu 1Mをダウンロードします。

ダウンロードした 2 つの zip ファイル(Inconsolata と Migu 1M)を展開し、フォントをインストールします。 フォントのインストールは、ttfファイルを選択し、右クリック。 メニューから「インストール」を実行します。

FontLink

レジストリを編集します。 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink に、値を追加します。 右クリックして、「新規」→「複数行文字列値」を実行します。 「名前」にInconsolata、「データ」にmigu-1m-regular.ttfと入力します。

ここで、一度、再起動。

再起動しないとうまくいきません。

mintty の設定

.minttyrc を変更します。

FontHeight=12
Font=Inconsolata

before

f:id:i4fumi:20121024083033p:image

after

f:id:i4fumi:20121024083035p:image

mintty + vim で Solarized

基本的にデフォルト主義なので、シェルも zsh ではなく bash を使っているし、 .bash_profile や .vimrc もあまりいろいろ設定してないのですが、 vim のカラースキームくらい変えてみようと思い、 Solarized をセットアップしてみました。

vim の設定

自分は、Vundleを使っているので、 以下を .vimrc に追加して、:BundleInstall! しました。

Bundle 'altercation/vim-colors-solarized'

そうしたら、以下を .vimrc に追加します。

syntax enable
set background=dark
set t_Co=16
colorscheme solarized

環境によっては to_Co を設定する必要はないかもしれませんが、 自分のところは to_Co が 8 だったので、最初うまく表示できず困りました。

マイ .vimrc → gist

mintty の設定

vim を設定しただけでは screenshotのようなキレイなカラーリングになりません。 端末の ANSI カラーを Solarized 推奨のものに変更してやります。 以下を .minttyrc に追加します。

Black=7,54,66
Red=220,50,47
Green=133,153,0
Yellow=181,137,0
Blue=38,139,210
Magenta=211,54,130
Cyan=42,161,152
White=238,232,213
BoldBlack=0,43,54
BoldRed=203,75,22
BoldGreen=88,110,117
BoldYellow=101,123,131
BoldBlue=131,148,150
BoldMagenta=108,113,196
BoldCyan=147,161,161
BoldWhite=253,246,227

シェルの設定

これで、vim でうまく Solarized のカラースキームが適用されるようになりました。

しかし、自分の環境では、vim を終了してシェルに戻った後、 Solarized の色がプロンプトやプロンプトの後に入力する文字にそのまま残ってしまい、 もとの色に戻らないという問題が発生したので、以下を .bash_profile に追加して対応しました。

PS1='\[\e[0m\]'$PS1

プロンプトを表示する前に、色をもとに戻しています。

Githubの人気言語TOP50

Top Languages · GitHubの右側の欄に 言語がリストされてあり、リンクをたどって各言語のページに行くと、

Rust is the #34 most popular language on GitHub

みたいな感じで人気順位が書いてあります。 それを取得してTIOBE風に上位50位を並べてみた。

PositionLanguage
1JavaScript
2Ruby
3Python
4Java
5Shell
6PHP
7C
8C++
9Perl
10Objective-C
11CoffeeScript
12C#
13VimL
14ASP
15Emacs Lisp
16Scala
17Assembly
18Haskell
19ActionScript
20Lua
21Prolog
22Groovy
23Clojure
24D
25R
26Erlang
27Go
28Racket
29Visual Basic
30Common Lisp
31Matlab
32Scheme
33Puppet
34Rust
35Arduino
36Tcl
37PowerShell
38OCaml
39FORTRAN
40SuperCollider
41Delphi
42ColdFusion
43Scilab
44F#
45Gosu
46Smalltalk
47Verilog
48HaXe
49Ada
50VHDL

51位以下は、

  • Vala, Pure Data, Objective-J, OpenEdge ABL, XQuery, Dart, Elixir, Io, Eiffel, AutoHotkey, Standard ML, Nemerle, eC, Coq, Rebol, Boo, AppleScript, Apex, Nu, ooc, Arc, Turing, DCPU-16 ASM, Julia, Factor, Opa, Kotlin, Mirah, Augeas, Parrot, Dylan, Self, Ioke, Bro, Fancy, Fantom, Nimrod, Logtalk, Ecl, Ceylon, Max

以下のスクリプトでやりました。

Cygwinでmosh (1.2系)

ひげぽんさんのmoshじゃない方のmoshの話です。

Windowsでmoshを使う場合、Windows版のバイナリは配布されていないので、 Cygwin野良ビルドします。手順はここが詳しいです。

しかし、若干の問題がありまして、ビルドは成功するのですが、 moshコマンド(中身はperlスクリプト)がCygwinだと動いてくれません。 (メモ:バージョン 1.3 では解消される見込みらしい Mosh 1.3 will have Peter's C++ startup code)

moshコマンドを使わずに、mosh-serverとmosh-clientを手で起動してやれば良いのですが、 毎回、手でやるのはしんどいです。

なので、rubyで書いてみました。Net::SSHを使っているので、gem install net-sshが必要です。

cgdb 文字化け

cgdbがとても便利なのですが、 CJKが通らないのでやっつけパッチを作りました。

文字化けの原因

cgdbの構造はざっくり以下のような感じです。

tty <---> ncurses <---> cgdb <---> ptmx/pts | <---> gdb
                                            | <---> readline

原因は2つほどあり、

  • ビルド時の設定で、ワイド文字対応版でないncursesを使っている
  • cgdbがgdbから出力を読み取り、ncursesに書き込むときの処理が8-bit cleanでない

パッチ

修正前

f:id:i4fumi:20120928073504p:image

修正後

f:id:i4fumi:20120928073505p:image

ソースコードの文字化けと、 gdbのrunの結果から、マルチバイト文字が消えてしまう問題がなおってます。

ビルド

ncursesw,bison,flex,readline,help2man,texinfo などが必要なので、aptやyumであらかじめインストールしておきます。

$ git clone git://github.com/i4fumi/cgdb.git
$ cd cgdb
$ git checkout -b topic/multi-byte-character origin/topic/multi-byte-character
$ ./autogen.sh
$ ./configure --prefix=/usr/local
$ make
$ sudo make install

ソースコードを読むときのツール

最近、もっとソースコードを読まねばと思うようになったので、 ソースを読むときに使えるツールを調べてみました。

ソースの読み方は、エディタなどで静的に読み進めるやり方と、 デバッガなどで実際にプログラムを動かしてみるやり方の2つに大別できると思います。 以下、静的解析・動的解析という視点で自分が使っているもの/使いそうなものを挙げてみます。

静的解析

タグファイルを生成してくれます。 タグファイルがあれば、エディタを使ってソースコードを読むとき、 簡単に関数定義や関数の呼び出し元にジャンプできます。 (使い方は、vim globalとかで検索)

コールグラフを生成してくれます。 コールグラフとは、関数の呼び出しスタックを一覧にしたものです。 cflowは関数の呼び出しごとにインデントして一覧を生成します。

$ cflow -m onig_parse_make_tree -bn --omit-arguments --omit-symbol-names regparse.c

 1 onig_parse_make_tree() <int () at regparse.c:6199>:
 2     names_clear() <int () at regparse.c:620>:
 3         IS_NOT_NULL()
 4         onig_st_foreach()
 5         i_free_name_entry() <int () at regparse.c:447>:
 6             xfree()
 7             IS_NOT_NULL()
 8         xfree()
 9     scan_env_clear() <void () at regparse.c:925>:
10         BIT_STATUS_CLEAR()
11     parse_regexp() <int () at regparse.c:6171>:
12         fetch_token() <int () at regparse.c:3236>:
13             PFETCH()
14             IS_MC_ESC_CODE()
15             IS_SYNTAX_OP()
16             PPEEK_IS()
17             IS_SYNTAX_OP2()
18             fetch_range_quantifier() <int () at regparse.c:2347>:
19                 IS_SYNTAX_BV()
20                 onig_scan_unsigned_number() <int () at regparse.c:1601>:
21                     PFETCH()

(コールグラフは、gprofやvalgrindなどの動的解析ツールを使うやり方もある)

動的解析

GDBCUIフロントエンドです。gdbをそのまま使うより、cgdbからgdbを使ったほうがいろいろ捗ります。 ただ、マルチバイト文字に対応していません。

  • トレーサ

トレーサとは関数や変数の値を、実行された順に出力するツールです。

strace (1)コマンドはシステムコールのトレーサです。 簡単に使えて便利。

ctraceは、Cのソースコードにトレース出力用のコードを埋め込みます。 ctraceが変換したソースコードをコンパイルして実行すると、トレースが出力されるという仕組みです。

自分は今のところ、あまりトレーサは使わず、printfしまくる派です。

ソースコードの読み方

青木峰郎さんの「Rubyソースコード完全解説」(通称RHGRuby Hacking Guide)という素晴らしすぎる本があります。 この本はたまたまRubyソースコードを解説していますが、 なにもないところから、どうやってソースコードを読み進めていけばいいのか、 そのやり方を具体的に示した指南書だと思います。

全文が公開されています。神!

テスト

見出し H1

見出し H2

見出し H3

段落

あああああ あああああ あああああ

あああ あああ あああ

強調

Some of these words are emphasized. Some of these words are emphasized also.

Use two asterisks for strong emphasis. Or, if you prefer, use two underscores instead.

リスト

  • Candy.
  • Gum.
  • Booze.

リンク

This is an example link.

blockquote

あああああ あああああ あああああ

pre + code

4スペースもしくは1タブ

<blockquote>
    <p>For example.</p>
</blockquote>

code

バッククォート <span>foo</span>

Fenced code blocks

あああ
あああ
あああ

シンタックスハイライト

require 'redcarpet'
markdown = Redcarpet.new("Hello World!")
puts markdown.to_html

Automatic Escaping for Special Characters

AT&T

4 < 5

©

strong