2015年2月27日金曜日

Fortran 用の Makefile

Fortran 用の Makefile について見なおしてみた。

ポイントは
  1. make のデフォルトルールをできるだけ活用する
  2. mod の依存関係をただしく反映する
の2点。自分がこれまで使ってたのは 2 ができてなくて、モジュールを再コンパイルするとそのモジュールを use しているファイルも再コンパイルしていた(そういうルールを自分で記述していた)。

でも実際はモジュールが再コンパイルされても .mod ファイルが更新されるとは限らない。そのときはそのモジュールを use しているファイルは再コンパイルの必要がないはずだ。

サンプルを示すよ。ターゲット sample は main.o と sub.o をリンクしてて、どちらも Fortran のプログラム。そして main.f90 はモジュール sub を use している。

ポイントは Makefile に記述した %.mod のデフォルトルール。.mod は .f90 と .o に依存するけど作成のためには何もしない。参考リンクでは true にしてるけど Windows だと true 使えなかったりするので : にした。

こうしておくとオブジェクト間の依存関係を Makefile の最後の行のように素直に書くことができる。main.o は sub.mod に依存し sub.o には依存していない。

これで sub.f90 が更新されて sub.o が再作成されても sub.mod に変更がなければ main.o が再コンパイルされることはない。ただし sub.mod のみを削除するのは禁止な。

参考
http://d.hatena.ne.jp/pyridoxin/20110726/1311691190
http://lagrange.mechse.illinois.edu/f90_mod_deps/

2015年2月26日木曜日

Gist にアップしたコードを Blogger に貼り付けてみる

先日 blogger に highlight.js を組み込んだばかりなのに、今どきは GitHub Gist にコードを置いて貼り付けるのがスタンダードなようで、がっくし。

Gist にアップしたコードを Blogger に貼り付けてみるテスト。


Gist にアップすると1番目の例のようなコードが用意されるので Blogger を HTML 編集モードにして貼り付ける。複数のコードをアップしているとこのように全部貼り付けられる。

Gist に複数載せたファイルを個別に指定するには2番目のように ?file= でファイル名を指定すればよい。

参考
http://www.msng.info/archives/2013/12/gist.php

ところでこうして貼り付けたとき Gist の中に書いてあるキーワードは検索に引っかかるのかな? なんとなくダメなんじゃという気がするけど。

追記
少なくとも Google は Javascript で読んだ先も検索対象にしてくれるようだ。あとは Gist のほうで Public にしておけばいい、ということかな。
http://googlewebmastercentral-ja.blogspot.jp/2014/10/updating-our-technical-webmaster.html

32bit 版の Emacs 24.4 をビルドしてみた

手元の OS がなぜか 32bit 版の Windows 7  なので IME パッチのあたった Emacs 24.4 が使えない。

しかたがないので自分でビルドした。参考にしたのはこのページ。
https://github.com/chuntaro/NTEmacs64


事前準備

ビルドのために MSYS2 は入れてある。まずは必要なパッケージのダウンロードとインストール。

$ pacman -Syu
$ pacman -S base-devel
$ pacman -S mingw-w64-i686


Emacs のビルド

よくわからないので CFLAG は -Ofast だけにした。

$ CFLAGS='-Ofast' ./configure
...
Configured for `i686-pc-mingw32'.

  Where should the build process find the source code?    .
  What compiler should emacs be built with?               gcc  -std=gnu99 -Ofast
  Should Emacs use the GNU version of malloc?             yes
  Should Emacs use a relocating allocator for buffers?    yes
  Should Emacs use mmap(2) for buffer allocation?         no
  What window system should Emacs use?                    w32
  What toolkit should Emacs use?                          none
  Where do we find X Windows header files?                NONE
  Where do we find X Windows libraries?                   NONE
  Does Emacs use -lXaw3d?                                 no
  Does Emacs use -lXpm?                                   yes
  Does Emacs use -ljpeg?                                  yes
  Does Emacs use -ltiff?                                  yes
  Does Emacs use a gif library?                           yes
  Does Emacs use a png library?                           yes
  Does Emacs use -lrsvg-2?                                yes
  Does Emacs use imagemagick?                             no
  Does Emacs support sound?                               yes
  Does Emacs use -lgpm?                                   no
  Does Emacs use -ldbus?                                  yes
  Does Emacs use -lgconf?                                 no
  Does Emacs use GSettings?                               no
  Does Emacs use a file notification library?             yes (w32)
  Does Emacs use access control lists?                    yes
  Does Emacs use -lselinux?                               no
  Does Emacs use -lgnutls?                                yes
  Does Emacs use -lxml2?                                  yes
  Does Emacs use -lfreetype?                              no
  Does Emacs use -lm17n-flt?                              no
  Does Emacs use -lotf?                                   no
  Does Emacs use -lxft?                                   no
  Does Emacs directly use zlib?                           yes
  Does Emacs use toolkit scroll bars?                     yes
  Does Emacs support W32-IME?                             yes
  Does Emacs support RECONVERSION?                        yes
  Does Emacs support DOCUMENTFEED?                        yes
...
$ make bootstrap
...
$ make install
...

すると /usr/local (C:\msys32\usr\local) にインストールされる。

make bootstrap したけど configure のときの CFLAGS は効いてるんだろうか。


配布パッケージの作成

コマンドプロンプトを立ち上げ、環境変数 PATH をクリアしてから Dependency Walker (depends.exe) を実行する。

emacs.exe を Dependency Walker にドラッグアンドドロップして読み込ませる。と、エラーが出て読み込めなかった DLL が表示される。DLL はたいてい /mingw32/bin にあるので、それを emacs.exe と同じフォルダにコピーする。

DLL も依存関係で他の DLL を読もうとすることがあるので、やはり Dependency Walker でチェックして必要な DLL をコピーする。

いくつかの DLL は必要なときにしか参照されない。emacs を起動して変数 dynamic-library-alist の中身を確認する。DLL のリストを見て必要なものをコピーする。これらも同様に Dependency Walker で依存関係を確認する。

...バイナリにビルド時のホスト名とかユーザ名とか PATH とか埋め込まれてるな。公開するのは作りなおしてからにするか。

2015年2月25日水曜日

MSYS2 を入れた

Emacs 24.4 32bit 版をビルドしよう思って https://github.com/chuntaro/NTEmacs64 を参考に作業してたら何かがおかしい。

よく見たら手元の環境は MSYS2 じゃなく MSYS だった。

ということで MSYS2 をインストールして作業のやり直し。

MSYS2 のインストールは下のページを参考にした。

Windows でよく使われる VPN

Windows でよく使われる VPN についてのメモ。

調べたらこんな感じだった。もちろん実際に何が使えるかは接続先の環境による。
  • PPTP
  • SSTP
  • OpenVPN
  • SSHポートフォワード

PPTP
TCP 1723 と GRE を使用する。単体では NAT を通らない。ルータとかで GRE を通す設定が必要。多くの OS で使用できる。

SSTP (MS-SSTP)
通信に HTTPS (SSL) を使用する。HTTP プロキシで中継可能。クライアントは Windows の Vista 以降で使用できる。
http://www.vpngate.net/ja/howto_sstp.aspx

OpenVPN
通信に HTTPS (SSL) を使用する。HTTP プロキシで中継可能。専用ソフト (ドライバ?) が必要。
http://www.openvpn.jp/

SSH ポートフォワード
SSH で接続できる環境があればなんとかなる。PUTTY などのクライアントが必要。
http://web.plus-idea.net/2012/12/proxy-ssh-putty/

直接外部に接続できない環境だとプロキシ通せる SSTP ということになるのかな。

2015年2月24日火曜日

Emacs 24.4 のプロキシ設定

Emacs 24.4 からは標準でブラウザ機能がつくようになった。

とはいっても Windows では使うことないかなと思ってたのだが、さっき Emacs 24.4 を立ち上げた時にスプラッシュ画面の GNU Emacs リンクをうっかりクリックしてしまった。


たまたま Proxy 環境だったので接続待ちでしばらく Emacs がフリーズしてしまったので Proxy を設定することにした。

参考にしたのはここのサイト。
るびきち「日刊Emacs」: Emacsでproxyを使う設定

以下の2通りの方法があるそうだ
  • 環境変数 http_proxy を設定する
  • url-proxy-services 変数を設定する

とりあえず init.el に url-proxy-servises を設定しておく。
(setq url-proxy-services '(("http" . "proxy.example.co.jp:8080")))

blogger に highlight.js を組み込む

highlight.js ソースコードを整形して表示する Javascript。 ほかに SyntaxHighlighter とかが有名。

設定は Blogger のテンプレートのヘッダのところに下の3行を追加する。 Blogger のテンプレートは XML なので link のタグは > ではなく /> で閉じる必要がある。
<link href='//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.4/styles/default.min.css' rel='stylesheet'/>
<script src='//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.4/highlight.min.js'></script>
<script>hljs.initHighlightingOnLoad();</script>

使用例
<pre><code>&lt;link href='//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.4/styles/default.min.css' rel='stylesheet'/&gt;
&lt;script src='//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.4/highlight.min.js'&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;
</code></pre>

Blogger の編集モードを HTML にして <pre><code>, </code></pre> でソースを囲む。 ただし <, > はそのまま処理されるので文字参照で置き換える必要があった。 HTML のソースとか記述するときは通常モードで貼り付けておいてから HTML モードに切り替えて <pre><code>, </code></pre> で囲む手順にするのが良さそう。

あとプレビューだと横スクロールバーが表示されるけど機能しない。


参考にしたページ

Firefox で接続先によってプロキシサーバを切り替える

接続先でプロキシサーバを切り替えるという需要がどのくらいあるのかはわからないけれど、アドオンがあるからある程度はあるんだろう。

これ。
FoxyProxy Standard

プロキシの設定スクリプトである wpad を使う方法と違ってブラウザ内で完結するのでユーザがごにょごにょするには便利。一括設定したいサイト管理者はこれまでどおり wpad 使え。

Windows に Emacs24.4 を入れてみる

Emacs 24.4 がリリースされてからだいぶたったけど、公式ビルドは Windows 8.1 だと IME まわりがうまく動かなかったり、Windows 7 だと終了時に異常終了したりしたのでなかなか Emacs 24.3 から移行できなかったんだよね。

そんな中、IME の問題を解決したビルドがあるようなので入れてみた。参照したのはこのページ。
https://github.com/chuntaro/NTEmacs64

で、これをダウンロードして展開。
https://github.com/chuntaro/NTEmacs64/blob/master/emacs-24.4-IME-patched-generic-cpu.zip

展開したフォルダにある runemacs.exe を実行。うん、問題ないね。