FC2ブログ

ARGENTO CUORE

Category : tips

--.--.--[--] スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2010.10.08[金] rubyでcgi メモ1

OpenSolarisでphpのfile_get_contentsがなぜか正常動作しないので、rubyを使ってみることにしました。

/etc/apache2/2.2/httpd.conf
を編集し、


<VirtualHost *:80>
ServerName aaa.bbbbb.net
<VirtualHost>

<Directory /aaaa/bbbb/cccc>
AllowOverride All
Options +ExecCGI
Order allow,deny
Allow from all
</Directory>


#AddHandler cgi-script .cgi
としてコメントアウトしてある一行を、

AddHandler cgi-script .cgi .rb
として、.rbを追加する。

#svcadm -v refresh http:apache22
で設定を反映。

あとは、
#!/usr/bin/ruby
の書き出しで普通にrubyスクリプトを作成し、実効権限を与えた上でアクセスするとスクリプトが実行される。
テンプレートエンジンはerbを使用することに決定。

その2に続くかもしれないし、続かないかもしれない。
スポンサーサイト

2009.12.05[土] Ruby拡張ライブラリ作成メモ(C構造体)

拡張ライブラリ作成

ruby.hをincludeし、Ruby拡張ライブラリを作成するためのマクロ、タイプを使用できるようにする。
ruby.hは、ruby-devをインストールしなければ使えない。

作成したCソースのビルド
・extconf.rbを記述
・extconf.rbを実行しMakefileを作成
・作成されたMakefileを使用しmakeする



C構造体をRuby側で扱えるようにするには、
VALUE Data_Wrap_Struct(VALUE klass, RUBY_DATA_FUNC mark, RUBY_DATA_FUNC free, void *sval)
で構造体をラッピングして、
void Data_Get_Struct(VALUE obj, type, type *svar)
で取り出すようにする。

■Data_Get_Struct(VALUE obj, type, type *svar)の説明
obj - Rubyオブジェクト
type - 取得するデータ構造型(struct)
*svar - 取得したデータ構造型を代入するポインタ変数

Rubyオブジェクトとは、rb_define_class()などによって作られたオブジェクトを指す。
例えば、K3DVertexクラスは以下のようにして作られる。
cK3DVertex = rb_define_class_under(mKAGUYA,"K3DVertex",rb_cObject);
これは、
module KAGUYA
class K3DVertex < Object
end
end
に相当し、C言語上では、cK3DVertexがクラスのオブジェクトになる。

K3DVertexは、3DのVertex情報を収める以下のような構造体型を定義している。

typedef struct {
Vector3D *vec;
}K3DVertex;

これを例としてC構造体のデータを取得するには、

K3DVertex *v;
Data_Get_Struct(cK3DVertex, K3DVertex, v);

という形で書く。
処理内容は、Data_Get_Structの説明通り、K3DVertexクラス内のデータ型K3DVertexよりデータを取得し、vに代入する。

■クラスに構造体型を登録するには
Rubyのクラスメソッドallocateの際に実行する関数を登録するには、
rb_define_alloc_func(VALUE klass, VALUE (*func)(VALUE klass))
を使用する。
これを使って、構造体型をクラスに登録する。

ex)
rb_define_alloc_func(cK3DVertex, K3DVertex_s_alloc)

これで、K3DVertex_s_allocという関数がallocate時に呼ばれる。

構造体データ型K3DVertexをklassに登録するコードは以下のようにする。
static VALUE K3DVertex_s_alloc(VALUE klass){
K3DVertex *v = ALLOC(K3DVertex);
return Data_Wrap_Struct(klass,0,K3DVertex_free,v);
}
void K3DVertex_free(K3DVertex *v){
/*特殊な解放処理が必要であればここに記述*/
free(v);
}

ALLOC(TYPE)でTYPEに必要なメモリを確保し、Data_Wrap_Structで指定したクラスに対して構造体をDataでラッピングする。

Data_Wrap_Structの解放関数のところにはK3DVertex_freeと記述しているが、-1を入れれば普通の解放処理をしてくれる。特殊な解放処理をしなければならないときには、free関数を登録する。

Cの構造体型をData型にラップするという処理の流れ
・構造体型を定義(typedef struct K3DVertex)
・構造体型はオブジェクトとして扱われる->扱うクラスを作成(K3DVertexクラス)
・クラスのallocate時に、構造体型のメモリを確保し、Data_Wrap_Structを使って確保したメモリのポインタをData型にラッピングしてもらう。
・Wrap時に解放のための関数を登録する(オプション)


■取得する関数
static K3DVertex* GetK3DVertex(VALUE obj){
K3DVertex *v;
Data_Get_Struct(obj, K3DVertex, v);
return v;
}

2009.11.15[日] Xubuntu IP固定

XubuntuはDebian系なので、/etc/network/interfacesを編集する。通常、eth0の設定はかかれていない(自動設定になっている)ので、

1 auto lo
2 iface lo inet loopback
3
4 auto eth0
5 iface eth0 inet static
6 address 192.168.1.100
7 network 192.168.1.0
8 netmask 255.255.255.0
9 broadcast 192.168.1.255
10 gateway 192.168.1.1
11 dns-nameservers 192.168.1.1

このような形で設定を追記する。
上記設定では、192.168.1.100にIPを固定するようにした。

#/etc/init.d/networking restart

でネットワークの設定が更新される。

2009.11.05[木] Evinceの文字化け対策

$sudo apt-get install evince ghostscript cmap-adobe-japan1 xpdf-japanese

でパッケージをインストール。

$sudo mkdir -p /usr/share/poppler/cidToUnicode
$sudo ln --symbolic /usr/share/xpdf/japanese/Adobe-Japan1.cidToUnicode /usr/share/poppler/cidToUnicode/Adobe-Japan1
$sudo mkdir -p /usr/share/poppler/cMap
$sudo ln --symbolic /usr/share/fonts/cmap/adobe-japan1 /usr/share/poppler/cMap/Adobe-Japan1

で完了。

2009.11.05[木] ThinkPad x61で冷却ファンのスピードを指定する(Xubuntu9.04)

thinkpad x61を制御するモジュール名は、

#lsmod | grep think

と入力することで確認。thinkpad_acpiという名称。

http://www.thinkwiki.org/wiki/How_to_control_fan_speedに詳細が書いてあるが、

1. /etc/modprobe.d/optionsに "options thinkpad_acpi fan_control=1と記述
2. 再起動

で完了。
ファンのスピードを変更するには、
#echo level x > /proc/acpi/ibm/fan
とすれば良い。
以下引用

# echo level 0 > /proc/acpi/ibm/fan (fan off)
# echo level 2 > /proc/acpi/ibm/fan (low speed)
# echo level 4 > /proc/acpi/ibm/fan (medium speed)
# echo level 7 > /proc/acpi/ibm/fan (maximum speed)
# echo level auto > /proc/acpi/ibm/fan (automatic - default)
# echo level disengaged > /proc/acpi/ibm/fan (disengaged)

2009.11.01[日] rubygems on xubuntu9.04

xubuntuはdebianのパッケージ管理システムを使用しているため、
$rubygems update -- system
が利用できない。上記のコマンドを実行した場合、以下のようなメッセージが表示される。

gem update --system is disabled on Debian. RubyGems can be updated using the official Debian repositories by aptitude or apt-get.

Applicatoins - システム - Synapticパッケージ・マネージャを利用すれば、rubygemsを含めインストールされたパッケージ群のインストール、アップデート等を管理できるため、それを利用してインストール&アップデートする。

インストール gem install --remote [文字列]
アップデート gem update --remote [文字列]
古いバージョンを削除 gem cleanup [文字列]
アンインストール gem uninstall [文字列]
パッケージをリモートから検索 gem search --remote [文字列]
正規表現を使って検索 gem query --remote --name-matches [正規表現]
ローカルにインストールしたパッケージ一覧を表示 gem search

2009.10.26[月] CAPS,CTRLの入れ替え

/etc/default/console-setupを開き、XKBOPTIONS="~にctrl:swapcapsを追記する。
Xubuntuで確認。

Scala Feed

scala feed

FC2カウンター

プロフィール

RoNor

Author:RoNor
得意呪文はScalaですって言えるようになるのが夢です。
デスマーチ中、パーティメンバーの防御力を向上させたりさせなかったり。

検索フォーム

QRコード

QRコード

Copyright © 2009-2010 ARGENTO CUORE and RoNor All rights reserved.

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。