FORTRANコードを動かしてみる on Cygwin

計算科学系の文献ではFortranソースを見ることが時々あリます。

自分も時々見かけるのでそんな時のためにメモを残しておこうかと。

環境: Cygwin, Vim, Fortran90

Let’s FORTRAN!

「!」以外で始まる各行は先頭に6文字以上スペースを入れてください。

!?

「!」以外で始まる各行は先頭に6文字以上スペースを入れてください。

!!??

autocmd FileType fortran setl textwidth=6

どこかにあったFortranソース。

      W = (/ 1, 2, 3, 4, 5 /)
      SIG=2
      DO 30 J=1,5
      IF(SIG.GT.W(J)) GOTO 30
      PRINT * , J
      SIG=W(J)
30    CONTINUE

Error: Unexpected end of file in ‘/path/to/sample.f90’

なんかだめ。

さらっとGoogle先生で調べたけどわからなかったが、FortranソースにはPROGRAMとかいう記述が必要だったような。。。

      PROGRAM SAMPLE
      INTEGER W(5)
      W = (/ 1, 2, 3, 4, 5 /)
      SIG=2
      DO 30 J=1,5
      IF(SIG.GT.W(J)) GOTO 30
      PRINT * , J
      SIG=W(J)
30    CONTINUE
      END PROGRAM SAMPLE

2,3,4,5と表示されたということで実行できた。PROGRAMが必要なのね。

quickrun.vimを使って実行しています。quickrun便利(使いこなせてないけど)

Type Description
INTEGER 整数型
REAL 実数型
DOUBLE PRECISION 倍精度浮動小数点型
COMPLEX 複素数型
LOGICAL 論理型
CHARACTER 文字型

倍精度実数の使用

REAL(8) :: x, y, z

implicitであらかじめa-h, o-zで始まる変数名は倍精度実数とする指定をすることが多い。

IMPLICIT REAL*8 (A-H, O-Z)

implicitはプログラムの先頭で行う。

0.0の扱い

! 単精度0.0で初期化(小数点7桁以下の精度は保証されない)
REAL SUM = 0.0
! 精度が重要である場合には倍精度で初期化する
SUM = 0.0D0

暗黙の約束

i, j, k, l, m, nで始まる変数は整数型でそれ以外は実数型と扱われる。

この約束を取り消すには

IMPLICIT NONE

とする。

演算子

Operator Description
+ +
- -
* *
/ /
x**n x n
sin(x) sin(x)
cos(x) con(x)
tan(x) tan(x)
atan(x) atan(x)
exp(x) e x
log(x) log(x)
sqrt(x) sqrt(x)
abs(x) abs(x)
sign(x) x / |x|

入出力

PRINT * , A

*はフォーマット指定。*を指定すると適当な書式が選択される。(コンパイラ依存)

WRITEで同じ事ができますが、冗長になってしまうのでPRINTを使う。

READ * , A, B, C

PRINTと同様に*を指定すると、適切な書式が自動で指定されます。

  • ENTERが入力されるまで読み込みます
  • 複数並べると、スペース区切りで読み込みを行います

配列

  • インデックスはデフォルトでは1から
  • メモリ上にはColumn Majorの順で配置される
REAL, DIMENSION(5) :: A
REAL B(5), C(5)
INTEGER, DIMENSION(3, 3) :: D

インデックスを0から指定したい場合は以下のように宣言する。

REAL A(0:5)

配列の初期化

! 全て0に初期化
REAL :: a(10) = 0
! 多次元配列も同様
INTEGER, DIMENSION(10, 10) :: b = 1

配列構成子

/(ここに配列の構成を記述)/

INTEGER A(5)
A = (/ 1, 2, 3, 4, 5 /)
INTEGER :: B(5) = (/ 1, 2, 3, 4, 5 /)
REAL :: C(6) = (/2., 4., 6., 8., 10., 12. /)
! 1,2,3,4,5 : DO型反復
INTEGER :: D(5) = (/ (i,i=1,5) /)
! 5,10,15,20,25,30
REAL :: E(6) = (/ (i*5,i=1,6) /)

reshape関数を使うことによって更に柔軟な指定が可能になります

! 1,3,5
! 2,4,6
REAL :: A(2,3) = RESHAPE( (/1., 2., 3., 4., 5., 6./), (/2,3/) )
REAL :: B(2,3) = RESHAPE( (/1., 2., 3., 4., 5., 6./), SHAPE(a) )
! DO型反復も使用可能
! 1,5,9
! 2,6,10
! 3,7,11
! 4,8,12
INTEGER :: C(4,3) = RESHAPE( (/ (i,i=1,12) /), SHAPE(b) )

一括代入

INTEGER A(3)
! 10,10,10
A = 10
! 11,11,11
A = A + 1
INTEGER B(3), C(3)
B = 10
C = 10
! 20,20,20
A = B + C

ループ

     DO 20 I=1, M
       DO 10 J=2, N
         a(I,J) = I*M
10     CONTINUE
20   CONTINUE

GOTO文

    GOTO 10
    GO TO 10
10  IF A.LT.B PRINT * , A

if文

IF(A.LT.B) PRINT * , A

IF(A.GT.B) THEN
  PRINT * , B
ELSE
  PRINT * , A

IF(A.EQ.B) THEN
  PRINT * , A
ELSE IF(A.LT.B) THEN
  PRINT * , A
ELSE
  PRINT * , B

比較演算子

Operator or Description
A.LT.B A < B Less Than
A.LE.B A <= B Less than over Eaual to
A.EQ.B A == B EQual to
A.NE.B A /= B Not Equal to
A.GT.B A > B Greater Than
A.GE.B A >= B Greater than over Equal to

論理演算子

Operator Description Usage
.NOT. not .NOT. A.EQ.B
.AND. and A.EQ.B .AND. A.EQ.C
.OR. or A.LT.B .OR. A.LT.C
.EQV. logical eq A<0 .EQV. B<0
.NEQV. logical not eq A<0 .NEQV. B<0

関数

PROGRAMではなくSUBROUTINEで宣言する

SUBROUTINE HOGE(A, B, C)
  INTEGER A
  REAL B
  CHARACTER C
END SUBROUTINE

Tinkerer 1.2 Release!

Tinkererのテーマをいじろうかどうか迷っていた矢先にバージョンアップが。

しかも新テーマflatが。

Home — Tinkerer かっけぇ。

シンプルで良い感じ。

即conf.pyをいじった。

pipでパッケージを更新するのはなにげに初めてだった。

$ workon Tinker
$ pip install tinkerer -U
$ vim conf.py
dark -> flat
$ tinker -b
$ hg add
$ hg ci -m "use flat!"
$ hg push

pip updateかあるのかと思ったけど、-U(or –upgrade)オプションを付ければいい。

Maclean4 - Dev3

MacTips的な。

  1. システム環境設定
  2. キーボード
  3. 修飾キー...
  4. Caps Lock キー
  5. Controlに変更

この5ステップでCapsLockキーをControlにできる。

Python環境

pythonbrewとvirtualenv&virtualenvwrapperを入れる。

pythonbrew

utahta/pythonbrew · GitHub

README通りに行えばインストールは簡単に完了する。

pathは$HOME/.pythonbrew

virtualenv

$ pip install virtualenv virtualenvwrapper

.zshrcに以下を書き込む

# virtualenv setting
VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python
export WORKON_HOME=$HOME/.pythonenvs
source /usr/local/share/python/virtualenvwrapper.sh

Macの場合、virtualenvwrapper.shは/usr/local/share/pythonにある。

Linuxとかだと、/usr/local/bin。

Vim

my vimrc

をコピペして:NeoBundleInstallで完成。

日本語を使うのであれば、iTerm2のPreferencesのProfiles/Textにある

Double-Width Characters: Treat ambigous-width characters as double widthにチェックを入れておく。(でないと時々とんでもなくずれたりする)

Sublime Text 2

Sublime Text: The text editor you’ll fall in love with

なんかあった時のためのGUIエディタはSublimeにする。

プラグインやら設定やらできるみたいだが、やる気が出た時のためにとっておこう。

Mercurial

gitよりもhgを愛用中。Python環境もできてやっとインストール。

$ pip install mercurial
$ vim ~/.hgrc
[ui]
username = hoge hogeo <hoge@hoge.com>

pipでインストールしたものは/usr/local/share/pythonに入るのでパスを通しておかないとhgコマンドが叩けない。

$ vim ~/.zshrc
PATH=/usr/local/bin:/usr/local/share/python:$HOME/.rbenv/bin:$PATH

MacではPATHをこんな感じに設定しておくことにする。

SSH

サーバとかGithubやらBitbucketを使う際にsshが必要。

$ ssh-keygen

とりあえず、作成されたid_rsa.pubをコピーしてGithub、Bitbucketに登録。

完成したMac

  • Firefox
    • Vimperator
    • LastPass
    • Firebug
    • MyBookmarks
  • iTerm2
    • zsh 4.3.9
    • screen 4.01.00devel 2-May-06
    • vim 7.3.p923 +python +ruby
    • Python 2.7.5
      • pythonbrew
      • virtualenv
    • Ruby 1.9.3
      • rbenv
    • Git 1.8.3
    • Mercurial 2.6.2
  • Sublime Text 2
  • Mozc
  • Alfred

Maclean3 - Dev2

zsh + screen + vim(+python +ruby)な環境を作る。

ビルド環境

$ automake --version
automake (GNU automake) 1.10
Written by Tom Tromey <tromey@redhat.com>
       and Alexandre Duret-Lutz <adl@gnu.org>.

Copyright 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ autoconf --version
autoconf (GNU Autoconf) 2.61
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software.  You may redistribute copies of it under the terms of
the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
There is NO WARRANTY, to the extent permitted by law.

Written by David J. MacKenzie and Akim Demaille.

ちょっと古い。

$ brew install automake
$ brew install autoconf
$ automake --version
automake (GNU automake) 1.10
Written by Tom Tromey <tromey@redhat.com>
       and Alexandre Duret-Lutz <adl@gnu.org>.

Copyright 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

変わってねーし。

どうにかせねば。

brewを使いこなす

HomeBrewの仕組みについてまとめておく - それマグで!

HomeBrewについてはこのエントリが詳しかった。

brewでinstallしたパッケージは

/usr/local/Celler

にインストールされて、/usr/local/binにシンボリックリンクが作成される。

gitは良い感じにインストールされてたけど、automakeとautoconfはシンボリック作成されてなかった。

/binとか/usr/binとかに先に入ってたらダメなのか?

試しにwget入れてみたけど、/usr/local/binにシンボリックリンクある。そういうことなのか・・・

シンボリックリンクない場合

シンボリックリンク作成されてなかった場合、以下のコマンドを実行する。

$ cd /usr/local/bin
$ lndir ../Cellar/<package-name>/<version>/bin/ ./

PATHの優先順位を変更

/binや/usr/binより/usr/local/binを優先させる。

$ vim ~/.zshrc
PATH=/usr/local/bin:/usr/local/sbin:$PATH

Zsh

$ zsh --version
zsh 4.3.9 (i386-apple-darwin10.0)
$ which zsh
/bin/zsh
$ chsh
変更 /bin/bash -> /bin/zsh

デフォルトで入ってるのでok

Screen

$ screen --version
Screen version 4.00.03 (FAU) 23-Oct-06

縦分割はできたほうがやる気でるので4.01を使う。

前の自分の記事で最新版screenを入れる方法についてまとめてある。

GNU Screen — MemoBlog

2013/06/03現在ではパッチを当てていた部分は修正されているので、パッチ当てなくてもいい。

HomeBrewのパッケージ内には入らないので注意する。

Python

Python 2.7.5を標準にする。

$ brew install python

以下のパッケージがインストールされる

  • pkg-config
  • readline
  • sqlite3.7.17(デフォルトが入っているので/usr/local/binにシンボリックリンクは作成されない)
  • gdbm
  • python2.7.5
$ python --version
Python 2.7.5

Ruby

Ruby 1.9.3を標準にする。

$ brew install ruby-build
$ brew install rbenv

readlineが必要だがpythonの時の依存関係でインストール済みなので入れなくてもいい。

あとは自分のエントリにも書いてあるように.zshrcの設定とruby-buildプラグインを入れる。

はじめてのRuby — MemoBlog

$ ruby --version
ruby 1.9.3p429 (2013-05-15 revision 40747) [x86_64-darwin10.8.0]

Vim

+python +rubyのVimを作る。(なので際にPythonとRuby入れた)

vim-ruby入れようとしてbrewのvimで嵌った - rochefort’s blog

ここのFormulaを参考にする。

/usr/local/Library/Formula/vim.rbの./configureのオプションに以下を追加。

"--disable-nls",
"--enable-pythoninterp",
"--enable-rubyinterp",
$ brew install vim
$ source ~/.zshrc
$ vim --version
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Jun  3 2013 22:51:14)
MacOS X (unix) version
Included patches: 1-923

Maclean2 - Dev

前回のは基本的な設定のみしかしてないのでいろいろ詳細を設定する。

HomeBrew

MacPortよりHomeBrew。

$ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
$ brew install git
$ brew doctor
$ brew update

開発系なパッケージ管理はHomeBrewからやろう。

Growl

Growl

Mac用のポップアップ通知システム。

1.3から有料になってしまっている。

1.2なら無料。growl - A notification system for Mac OS X. - Google Project Hosting

というわけで1.2.2をインストール。

最新版との違いは調べていないので分からないが、なんか不具合があってから調べるで問題ないかな。

コードをhgで落としてビルドするという荒業を使えば1.3以降のバージョン(最新版)も使えるみたい。

Lionからは標準の通知システムが有るらしい。いいな。

Firefox

プラグイン

  • vimperator
  • lastpass
  • firebug
  • mybookmarks

アドオンで検索すれば全部見つかるのでインストールからの再起動。

テーマはこれ。

Monokuro Boo Pigs :: Add-ons for Firefox

モノクロのブタさんを愛用。

vimperator

Vimmerの必需品。もう普通のFirefoxには戻れない。

vimperator setting file

~/.vimperatorrcに配置。

カラースキーム、プラグインのフォルダ配置。

プラグインはリポジトリから落として、必要に応じてコピーする。

vimpr/vimperator-plugins · GitHub

$ cd ~/.vimperator
$ git clone https://github.com/vimpr/vimperator-plugins

とりあえずこれだけ入れる。

Firefox20からjsまわりが変更になってるのでちょくちょくプラグイン更新したほうがいいかも。

カラースキームはGistに。

yymm_sweets.vimp

フォルダ構成はこうなる。

> .vimperator
  > colors
  > info
  > plugin
  > vimperator-plugins

結果こんなFirefoxになる。

../../../_images/firefox_img.png

ゆたぽん

font ゆたぽん(コーディング) フォント

フォントがゆたぽんじゃないと体調が悪くなってくるので早く入れないと。

Macに.ttc投げてもダメっぽいので(試してないけど)、otfに変換してインストールする。

otfのゆたぽんをシェアウェアとしてリリースしてあった。ただじゃないと嫌なので頑張る。(ベータ版はタダ)

Macにフォント「ゆたぽん(コーディング)」をインストールしてみた。 - Life is Over

このエントリで紹介している方法は以下の感じ

  1. Windowsにゆたぽんをダウンロード
  2. UniteTTCなるアプリでttfに分離
  3. OTEditなるアプリ(無料は30日間)でttfをotfに変換 -> よくわからなかったらここ TrueTypeフォントからOpenTypeフォントへの変換方法
  4. Macにotfを移動して、otfファイルをダブルクリックでFontBookに追加
  5. iTerm2のPreferencesでフォントをゆたぽんに
../../../_images/yutapon_iterm.png

CuTest

C言語軽量テストフレームワーク。

CuTest.hとCuTest.cで構成されるフレームワーク。

機能は最小限だが、ソースで提供されているのでプロジェクトに気軽に組み込める。

というわけなのでダウンロードするだけで使える。

Download CuTest: C Unit Testing Framework from SourceForge.net

Assert Macro

Assertマクロは以下の13個。

#define CuFail(tc, ms)
#define CuAssert(tc, ms, cond)
#define CuAssertTrue(tc, cond)
#define CuAssertStrEquals(tc,ex,ac)
#define CuAssertStrEquals_Msg(tc,ms,ex,ac)
#define CuAssertIntEquals(tc,ex,ac)
#define CuAssertIntEquals_Msg(tc,ms,ex,ac)
#define CuAssertDblEquals(tc,ex,ac,dl)
#define CuAssertDblEquals_Msg(tc,ms,ex,ac,dl)
#define CuAssertPtrEquals(tc,ex,ac)
#define CuAssertPtrEquals_Msg(tc,ms,ex,ac)
#define CuAssertPtrNotNull(tc,p)
#define CuAssertPtrNotNullMsg(tc,msg,p)

引数の説明

tc
CuTest*型、CuTest構造体のインスタンスを入れる。すべて共通。
ms
メッセージ(char*)
cond
True(1) or False(0)
ex
expectedの略、期待される値
ac
actualの略、実際の値
dl
deltaの略、double比較の際に用いる誤差
p
pointer

Usage

このCuTestはmake_tests.shというスクリプトが同封されていて、テストコードが入ったフォルダで実行する。

今回サンプルとしてtest.cを作成した。

#include <stdlib.h>
#include <string.h>
#include "CuTest.h"

typedef struct Lens
{
	char* name;
	int radius;
} Lens;

static Lens* lens;



void Test_setup(CuTest* tc)
{
	lens = malloc(sizeof(Lens));
	lens->name = malloc(sizeof(char)*256);
	strcpy(lens->name, "SiO2");
	lens->radius = 5;
	/*CuAssert(tc, "Setup", 1);*/
}

void Test_teardown(CuTest* tc)
{
	free(lens->name);
	free(lens);
	/*CuAssert(tc, "Teardown", 0);*/
}

void Test_lens(CuTest* tc)
{
	CuAssertStrEquals(tc, lens->name, "Si02");
	CuAssertIntEquals(tc, lens->radius, 4);
}

void Test_Fail(CuTest* tc)
{
	CuFail(tc, "失敗する");
}

void Test_Assert(CuTest* tc)
{
	int cond = 0;
	CuAssert(tc, "cond=0でアサートする", cond);
}

void Test_AssertTrue(CuTest* tc)
{
	int cond = 0;
	CuAssertTrue(tc, cond);
}

void Test_AssertStr(CuTest* tc)
{
	char* actual = "Helle";
	CuAssertStrEquals(tc, "Hello", actual);
	// 1つのテストメソッドに複数のAssertマクロを入れる場合
	// 先に失敗すると次まで流れない。
	CuAssertStrEquals_Msg(tc, "Helloじゃないじゃん!Typoじゃね?", "Hello", actual);
}

void Test_AssertStrMsg(CuTest* tc)
{
	char* actual = "Helle";
	CuAssertStrEquals_Msg(tc, "Helloじゃないじゃん!Typoじゃね?", "Hello", actual);
}

void Test_AssertInt(CuTest* tc)
{
	CuAssertIntEquals(tc, 5, 6);
}

void Test_AssertDbl(CuTest* tc)
{
	CuAssertDblEquals(tc, 1.01, 1.02, 0.001);
}

void Test_AssertDblMsg(CuTest* tc)
{
	CuAssertDblEquals_Msg(tc, "Delta=0.001(こんな感じに誤差を書いたほうがいいかも)", 1.01, 1.02, 0.001);
}

void Test_AssertPtr(CuTest* tc)
{
	char* str = malloc(sizeof(char)*5);
	CuAssertPtrEquals(tc, NULL, str);
	free(str);
}

CuSuite* StrUtilGetSuite()
{
	CuSuite* suite = CuSuiteNew();
	SUITE_ADD_TEST(suite, Test_setup);
	SUITE_ADD_TEST(suite, Test_Fail);
	SUITE_ADD_TEST(suite, Test_Assert);
	SUITE_ADD_TEST(suite, Test_AssertTrue);
	SUITE_ADD_TEST(suite, Test_AssertStr);
	SUITE_ADD_TEST(suite, Test_AssertStrMsg);
	SUITE_ADD_TEST(suite, Test_AssertInt);
	SUITE_ADD_TEST(suite, Test_AssertDbl);
	SUITE_ADD_TEST(suite, Test_AssertPtr);
	SUITE_ADD_TEST(suite, Test_teardown);
	return suite;
}

テストコードの作成は以下のように行う。

$ ./make-tests.sh test.c > main.c
$ gcc main.c test.c CuTest.c
$ ./a.exe or ./a.out
FFFFFFFFF

There were 9 failures:
1) Test_Fail: test.c:6: 失敗する
2) Test_Assert: test.c:12: cond=0でアサートする
3) Test_AssertTrue: test.c:18: assert failed
4) Test_AssertStr: test.c:24: expected <Hello> but was <Helle>
5) Test_AssertStrMsg: test.c:32: Helloじゃないじゃん!Typoじゃね?: expected <Hello> but was <Helle>
6) Test_AssertInt: test.c:37: expected <5> but was <6>
7) Test_AssertDbl: test.c:42: expected <1.010000> but was <1.020000>
8) Test_AssertDblMsg: test.c:47: Delta=0.001(こんな感じに誤差を書いたほうがいいかも): expected <1.010000> but was <1.020000>
9) Test_AssertPtr: test.c:53: expected pointer <0x0x0> but was <0x0x80011e20>

!!!FAILURES!!!
Runs: 9 Passes: 0 Fails: 9

今回はすべて失敗するコード。

Custom

ソースコードもテスト生成用のスクリプトも非常にシンプルで自分好みにカスタムするのは簡単そう。

例えば自分の場合こんなカスタマイズをするかもしれない。

  • main文じゃなくてテスト関数をジェネレートする
  • doubleの配列についてテストをしたいのでCuAssertDblArrayマクロを作成する
  • setup/teardownを実装する
  • シェルスクリプト以外の言語でテストを生成してもいいかもしれない

License

ライセンスはzlib License

このライセンスは以下の項目を守る必要がある

  • 原作者名を正しく表記する(義務はない)
  • 改変版のソースコードは、オリジナルのソフトウェアと混同しないものとする
  • ライセンスファイルを削除してはならない

現在sourceforge上にZIPファイルが置かれているが、自分でカスタマイズすることを考えるとGithub上に乗せて管理したい。

Download CuTest: C Unit Testing Framework from SourceForge.net

Repos

zigusoul/CuTest

リポジトリを作成した。

自分以外にもGithub上で管理してカスタマイズしているみたい。

MySQL-SQLAlchemyなFlask

環境 : CentOS 5.3

MySQLの準備

yumで必要な物を揃える。

% sudo yum install mysql-devel
% sudo yum install mysql-server

初期設定

% mysql_secure_installation

色々聞かれるので答えたり、空エンターしたりする。詳しくは以下のリンク参照。

データベースサーバー構築(MySQL) - CentOSで自宅サーバー構築

MySQLサーバ起動

% sudo /etc/init.d/mysqld start

Pythonの準備

MySQLdbがないと使えないのでpipする。

% pip install mysql-python

mysql-develが入ってないと失敗します。

SQLAlchemyな準備

これで、create_engineするときにmysqlを指定できるようになった。

from sqlalchemy import create_engine
engine = create_engine('mysql+mysqldb://root:<password>@localhost/<db_name>', encoding='utf-8')

自分の場合これをFlaskアプリ内で使ってみた。

SQLAlchemyでMySQLを使う場合、MySQLのAPIを使うことができるような。

MySQL — SQLAlchemy 0.9 Documentation

はじめてのRuby

Rubyの勉強をするわけではない、Ruby環境を整える話。

こんな願望からRuby環境について考えてみることにした。

  • 1.9系がいい
  • 古いRubyでgem使って痛い思いしたくない
  • もしかしたら1.8系も使いたいんじゃ…

rubyワカンネ。

rvm?rbenv?なにそれ

:open google rvm rvenv

bとvを間違えてもGoogle先生は丁寧に間違えたことを教えてくれる。

rvmがすごくディスられてるのがわかった。

違い -> passingloop • rbenv と RVM との違い

なんとなくわかったが、Bundlerってなんだ?

調べて分かったことを書いておく。

rvm

= Ruby Version Manager

古い、重い、すごい。

rbenv

新しい、軽い、イケてる、必要最小限機能。

gem

RubyGems - Wikipedia

Rubyのパッケージ管理システム。

1.9からは標準のライブラリになった。

Centos5.3にも入ってた。1.8.5だけど。

Bundler

gemのラッパー。以下の様な悩みを抱えている方に役に立つのだとか。

  • 本番環境に必要なアノgemが入っていない...だと...
  • gem入れまくってたら、どのgemがこのアプリに必要なのかわからなくなっちゃった。テヘ☆

アプリ環境ごとにgem listがもてるようになるスグレモノらしい。

導入してみたいのであれば、以下のエントリを参考にするといいのかも。

gem管理の新標準ツール”Bundler”のTips - 昼メシ物語

Rails3では標準搭載しているみたい。

rbenv入れてみよう

あんまりRubyわかんないので、軽いほうを使う。

$ git clone https://github.com/sstephenson/rbenv ~/.rbenv
$ vim ~/.zshrc
# rbenv setting
export PATH=$HOME/.rbenv/bin:$PATH
eval "$(rbenv init - zsh)"
$ mkdir ~/.rbenv/plugins
$ cd ~/.rbenv/plugins
$ git clone https://github.com/sstephenson/ruby-build
$ source ~/.zshrc

MacだとHomeBrewから入れれるみたい。

  • libyaml
  • openssl
  • autoconf, readline

このへんのツールが必要なようだ。Macには今度入れてみよう。

上の例ではCentos5.3に入れているが最新のautomakeとかautoconfじゃないとあとあと困るのかもしれない。

RVMをさくらVPS(CentOS-5.6)にインストール - CMS専門 Web開発者ブログ

どうでもいいがrvmを削除するときの

$ gem explode
$ gem seppuku

とか面白い。

rbenv使ってみよう

$ rbenv install 1.9.3-p429 --verbose

Rubyワカンネので、1.9.3系の一番新しいパッチを選択。

通常1.9.3を使いたいのでその設定をする。

$ rbenv global 1.9.3-p429
$ source ~/.zshrc
$ ruby -v
ruby 1.9.3p429 (2013-05-15 revision 40747) [x86_64-linux]
$ gem -v
1.8.23

キタコレ。

proxylocalが欲しかったのでgemる。

$ gem install proxylocal
$ gem list

proxylocalが入ってる。ok。

ちょっとPythonいじったことある人感想。

あってるかわかんないけどRuby環境っぽいものができた。

自分視点だが、RubyとPythonの環境構築(2013年での)ではこんな感じに対応しているのかもしれない。

なんか違う気がするけど。

  • gem - pip (easy_install)
  • rbenv/rvm - pythonbrew/pythonz
  • bundler - virtualenv (venv -> python3)

個人的にはvirtualenvが調子いい。仮想環境を作るという発想が良い感じ。

AsakusaSatellite on heroku

最近会社でAsakusaSatelliteにお世話になっているので色々いじって見ようかなって思ったり。

自分用AS

Rubyって何?自分でも爆速でherokuにASを立てる事ができた。スバラシイ!

Heroku へのデプロイ — AsakusaSatellite 0.8.1 documentation

動いてる。

AsakusaSatellite

Botがほしい

API — AsakusaSatellite 0.8.1 documentation

何やらDockWatcherといふのもがあるらしい。

codefirst/duck-watcher · GitHub

ソースコードも短いのでいじれるかも。

PyQt4 install for Cygwin

きっとCygwinユーザーがCygwinでmakeするのはもう嫌と感じるのはもう運命だと思う。

というわけで、PyQt4は欲しくなったのでインストールする。

欲しくなった原因はMkdPreview.vim。

先に書いておくが、全部自前makeしないといけない。

1. Qt4入ってる?

$ ls /usr/lib | grep qt

qt4があれば入ってる。自分は入ってた。フルインストールしたら多分入ってるっぽい。

2. sip

PyQt4を入れる前に、sipなるものを入れる必要がある。

Riverbank | Software | SIP | What is SIP?

読んでみると、C/C++のライブラリ、ここではQtとPythonのバインディングをするツールであることがわかる。

tarファイルをダウンロード(Riverbank | Software | SIP | SIP Download)してmakeする。

$ tar -zxvf sip-4.14.6.tar.bz
$ cd sip-4.14.6
$ python configure.py
$ make
$ make install

意外とすんなり。

3. PyQt4

後は、PyQt4をダウンロードしてmakeするだけ。

Riverbank | Software | PyQt | PyQt4 Download

Linux, UNIX sourceを選択。

その前に、qmakeのパスが通っているか確認。通ってなければPATHに追加。

$ qmake
command not found.
$ vim ~/.zshrc
PATH=(自分の設定):$PATH:/usr/lib/qt4/bin
$ source ~/.zshrc

使ってるシェルは人によって違う。自分はzsh。

$ tar -zxvf PyQt-x11-gpl-4.10.1.tar.gz
$ cd PyQt-x11-gpl-4.10.1
$ python configure.py -g
$ make
$ make install

ここでの注意点は2つあって

  1. python configure.py に-gオプションをつける。
    オプションなして実行すると-gか-kのどちらかつけろといわれるので、-gをつける。
  2. めっっっっっっっっっちゃ時間かかる。ちょっと焦るくらい終わらないので、時間のあるときにやる。

というわけで1時間後。

recipe for target `_qt.dll' failed

ん?

recipe for target `_qt.dll' failed

ん?

見たくない現実が。1時間返せ。返してくれCygwin。

-g / -kオプションを適当に選択してしまったのが悪いっぽい。と言うかなんだこのオプション。

-g / -k -> なんかGNOMEかKDEっぽいな。(調べてないので本当にどうかは知りません)

CygwinのQtってGNOME?KDE?setup.exeを見てみよう。

../../../_images/cygkde.png

QtはKDEの中にしかありません。

オプションを-kにして再度チャレンジ。

小一時間後うまいことmakeできたのでmake install。

4. import PyQt4

$ python
>>> import PyQt4
>>>

キマシタワー。

5. Cygwin以外 & 雑記

Ubuntuではapt-getでインストール出来るみたい。

Wind And Tide: PyQt4をubuntuにインストールする

pip search pyqtしたところPyPiにあるみたいだった。。。

まさかとは思うが、自前makeしなくても良かったの。。。ってなった。今度試してみよう。

PySideをpipでインストールしようとしたらhogehogeという記事があったので何かしら参考になるかもしれない。

Pythonbrew環境下にPySideをインストールしようとしたらはまった - kk6のメモ帳*

個人的に使うならPySide使ってみたかったから今度やってみよう。