2010年5月31日月曜日

eclipseをDebian(lenny)にインストールする-02【狂瀾篇】

Check
前回の続き。

http://bugzilla.turbolinux.com.cn/show_bug.cgi?id=87

It's because eclipse can't sure the MOZILLA_FIVE_HOME variable.

can run eclipse like:
-------------
# MOZILLA_FIVE_HOME=/usr/bin/firefox eclipse
=================

or run like:
---------
# MOZILLA_FIVE_HOME="" eclipse
================

Our os have firefox version 3,and the eclipse have builded
under firefox version 2.
I rebuild eclipse under firefox version 3 enviroment.
and now it's look ok.
つまり、MOZILLA_FIVE_HOMEという環境変数を教えてやったらいいわけか。.bashrcあたりでexportしても良さそうだが、今回は上記のとおり、起動前に教えてやることにする。
washi@debian2:~/devel$ MOZILLA_FIVE_HOME=/usr/bin/firefox eclipse
すると、
この警告は相変わらず出るものの…
無事立ち上がるようになったではないか!

eclipse自体の使い方がよく分からんが、とりあえずエディットまでは普通にできた。なぜかビルドは出来なかったけど。

しかし、最初に出てくる警告が気にくわないので、次に最新版のeclipseを使ってみることにした。
http://www.eclipse.org/downloads/index.phpからC/C++用のものをダウンロード。

〜つづく〜

eclipseをDebian(lenny)にインストールする-01【風雲篇】

Check
前回の続き。結果からいうと、まだ立ち上がりすらしない。

今回やったこと。
  1. java-6-openjdkをパッケージで導入
  2. .eclipseextensionファイルを作成
1.に関してはSynapticパッケージマネージャ経由でインストールするだけなので、特に難しいことはない。20個ほど関連したパッケージが入るようだ。

2.に関してだが、前回コンソール画面に/usr/local/lib/eclipseに.eclipseextensionを作成せよとの指示が出ていたので、指示されるがまま導入。
washi@debian2:~$ sudo touch /usr/local/lib/eclipse/.eclipseextension
washi@debian2:~$ sudo chmod 2775 /usr/local/lib/eclipse/.eclipseextension
washi@debian2:~$ sudo chown root:staff /usr/local/lib/eclipse/.eclipseextension
以上のことをやったあとに、コンソールからeclipseとタイプして実行。以下のような結果を得た。
This Eclipse build doesn't have support for the integrated browser.
ここは前回と同じっぽいです。

さらに、workspaceを作成するウィンドウが表示され、OKで進と、


JVM terminated. Exit code=127
/usr/lib/jvm/java-6-openjdk/bin/java
-Djava.library.path=/usr/lib/jni
-Dgnu.gcj.precompiled.db.path=/var/lib/gcj-4.2/classmap.db
-Dgnu.gcj.runtime.VMClassLoader.library_control=never
-Dosgi.locking=none
-jar /usr/lib/eclipse/startup.jar
-os linux
-ws gtk
-arch x86
-launcher /usr/lib/eclipse/eclipse
-name Eclipse
-showsplash 600
-exitdata 720011
-install /usr/lib/eclipse
-vm /usr/lib/jvm/java-6-openjdk/bin/java
-vmargs
-Djava.library.path=/usr/lib/jni
-Dgnu.gcj.precompiled.db.path=/var/lib/gcj-4.2/classmap.db
-Dgnu.gcj.runtime.VMClassLoader.library_control=never
-Dosgi.locking=none
-jar /usr/lib/eclipse/startup.jar
お馴染みのこの画面で終了。どうやらJVMの問題ではなさそう。

コンソールに吐かれたエラーメッセージも前回と同様っぽい。
washi@debian2:~$ eclipse &
searching for compatible vm...
[1] 6023
washi@debian2:~$   testing /usr/lib/jvm/java-6-openjdk...found
/usr/lib/jvm/java-6-openjdk/bin/java: symbol lookup error: /home/washi/.eclipse/org.eclipse.platform_3.2.0/configuration/org.eclipse.osgi/bundles/46/1/.cp/libswt-mozilla-gtk-3236.so: undefined symbol: _ZN4nsID5ParseEPKc
libswt-mozilla-gtk-3236.soというのが気になるので、この辺をメインに原因を探ってみることにしますか。

ということで、つづく

eclipseをDebian(lenny)にインストールする-00【立志篇】

Check
Synapticで導入したeclipse3.2でのお話。

まず、立ち上げると以下のポップアップが出現する。

This Eclipse build doesn't have support for the integrated browser.
とりあえず、そのままOKを押して続行。

デフォルトのワークスペースを作成するウィンドウが出現するので、適当な位置に作成してOKで続行。

eclipseのロゴが出ていろいろロードし始める。しかし、プログレスバーが9割ほど進んだところで下記のエラーを吐いてそのまま停止。

JVM terminated. Exit code=127
/usr/lib/jvm/java-gcj/bin/java
-Djava.library.path=/usr/lib/jni
-Dgnu.gcj.precompiled.db.path=/var/lib/gcj-4.2/classmap.db
-Dgnu.gcj.runtime.VMClassLoader.library_control=never
-Dosgi.locking=none
-jar /usr/lib/eclipse/startup.jar
-os linux
-ws gtk
-arch x86
-launcher /usr/lib/eclipse/eclipse
-name Eclipse
-showsplash 600
-exitdata 500010
-install /usr/lib/eclipse
-vm /usr/lib/jvm/java-gcj/bin/java
-vmargs
-Djava.library.path=/usr/lib/jni
-Dgnu.gcj.precompiled.db.path=/var/lib/gcj-4.2/classmap.db
-Dgnu.gcj.runtime.VMClassLoader.library_control=never
-Dosgi.locking=none
-jar /usr/lib/eclipse/startup.jar
現状はこんなところ。今からぼちぼち対策を考えていこう。

現状分かっているのは、JVMがGNU実装?のものなので、Sun社謹製のVMに切り替えてみようと思う。
washi@debian2:~$ java --version
java version "1.5.0"
gij (GNU libgcj) version 4.3.2

Copyright (C) 2007 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.
というのも、eclipseをコンソールから立ち上げたときに、以下のエラーが出たからだ。
washi@debian2:~$ eclipse -clean &
searching for compatible vm...
[1] 4783
washi@debian2:~$   testing /usr/lib/jvm/java-6-openjdk...not found
  testing /usr/lib/jvm/java-gcj...found
Could not create /usr/local/lib/eclipse/.eclipseextension. Please run as root:
    touch /usr/local/lib/eclipse/.eclipseextension
    chmod 2775 /usr/local/lib/eclipse/.eclipseextension
    chown root:staff /usr/local/lib/eclipse/.eclipseextension
/usr/lib/jvm/java-gcj/bin/java: symbol lookup error: /home/washi/.eclipse/org.eclipse.platform_3.2.0/configuration/org.eclipse.osgi/bundles/46/1/.cp/libswt-mozilla-gtk-3236.so: undefined symbol: _ZN4nsID5ParseEPKc
java-6-openjdkというのが必要っぽい。
次にrootで
    touch /usr/local/lib/eclipse/.eclipseextension
    chmod 2775 /usr/local/lib/eclipse/.eclipseextension
    chown root:staff /usr/local/lib/eclipse/.eclipseextension
も必要か。
さらに、libswt-mozilla-gtk-3236.soという共有オブジェクトも足りないっぽい。

一つ一つ解決していこう。というわけで、つづく

2010年5月25日火曜日

セミナーに参加します

Check
5月27日(木) ADOBE CREATIVE SUITE5 デザインセミナーツアー
サイバーコネクトツーによるフォトショ、イラレの活用事例。デザイナーではないので、どれほど身になるかはわからないが、行ってみる価値は十分にありそう。

5月28日(金) C/C++ セキュアコーディングセミナー 2010 @福岡
こちらはC/C++プログラマ向けのコーディングセミナー。よりセキュアーなコーディングを目指して。
ゲームプログラミングでどれだけ役に立つかはわからないが、学生気分を抜けるにはいい機会だと思う。

28日は名刺を持ってくるように指定があったので、知り合いのデザイナーさんにお願いして作ってもらった。思っていた以上の出来だったので大満足! 

//TODO: 写真を加工してあとで貼る。

今年も半分が過ぎようとしていますが、これからじゃんじゃか動いていきます!

2010年5月21日金曜日

sudoで一時的に管理者権限を与える

Check
lennyのお話。

毎回$su (password) を使ってroot権限に切り替えていたのだが、ログアウトしわすれてrootのまま作業してしまうということがよくあった。そこで実行したいコマンドだけにroot権限を与えるsudoというコマンドを使うことにした。

導入の手順は以下のとおり。ここでは、一般ユーザwashiにすべての管理者権限を与えようと思う(個人で使う分にはこれで問題なさそう)。

$ su[RET]
$ パスワードを入力[RET]
$ aptitude install sudo[RET]
$ visudo[RET]

エディタが起動するので、
# User privilege specification
root ALL=(ALL) ALL
washi ALL=(ALL) ALL #<- 追加 
上記を記述して、保存する。
$ exit[RET] #一般ユーザに戻る
$ sudo aptitude update[RET] #ためしにaptitude updateを実行

その後washiのパスワード(rootではないを尋ねられるので入力したら、無事実行できるはず。

参考サイト:
http://www.garunimo.com/program/linux/visudo.xhtml

2010年5月18日火曜日

wxWidgets + OpenGL + Cygwin or Linux(Lenny) + Mercurial + Emacs + CEDET = 大混乱

Check
タイトルのとおり、学校では上記の環境で、家ではDebian(lenny)を使って開発していたら、覚えることが多すぎてブログを更新する暇すらなかった。本当はちょこちょこ覚えるたびに更新するのが理想なのだろうけど…

まずは、wxWidgetsによるOpenGLフレームの作成。現在のところ、三次元日誌さんの『wxWidgetsのOpenGL雛形』を丸写し。なさけないが、とりあえずはこれで必要なソースはできた。

次に、Cygwinでのビルド。コンパイラにいろいろなパラメタを与えなければいけないのだが、wx-configというコマンドを使うことでかなり楽をできる。
  • wx-config --cxxflags インクルードパスやコンパイルオプションなどを勝手にやってくれる
  • wx-config --libs gl コアライブラリやwxWidgetsのGL用ライブラリパスと名前の解決をやってくれる。GLが必要ないときは、glという引数を外せばよい。
実際にコマンドラインで使用するときは以下のようになる。
g++ main.cpp `wx-config --libs gl` `wx-config --cxxflags`
Lennyではこのままでもリンクまで通るのだが、Cygwinでやるとリンクエラーをおこしてしまう。libopengl32.lib.aを見つけきれないのが原因だと思われるので、上記のオプションに加え、-lopengl32を加えてやると無事通った。
g++ main.cpp `wx-config --libs gl` `wx-config --cxxflags` -lopengl32
Lenny上での実行イメージは以下のとおり。


さて、こういう風に作ったコードをリポジトリに保存して管理も一元化しようと思いたくなるのは人の常。くわえて、今学校の先生と一緒にいろいろ企んでいるので、他の人からも参照出来るようにしたい。

cvsやsvnあたりは定番だが、ディレクトリごとに管理用のファイルを作られてしまう上に、GitやMercurialといった分散型と比べるとちょっと古くさい気もしたので、今回はMercurialを選択することにした。Mercurialの何が良いって、デフォルトでhttpサーバとして機能するところ。ちょっと前まで、おうちのマシンでMercurialサーバーを動かしていたのですが、httpサーバーだとよほどのことがない限りwebフィルタリングにも引っかかりません。惜しむらくは、cvsやsvnはもとより、Gitと比較しても普及していないところでしょうか。もっと流行ってほしいな。

bitbucketというMercurial用のリポジトリサービスも発見したので、今はここを使わせてもらっています。

Mercurialの超簡単な操作説明。当然コマンドラインからです。Linuxはもちろんのこと、Windows、Cygwinと多くのプラットフォームから使用できます。今のところ私が使ったものだけを紹介。hgというのがMercurialのコマンド名。水銀のことだそうです。
  • hg init リポジトリをカレントディレクトリに作成。
  • hg clone http://foo.bar/ リモートにあるリポジトリをカレントディレクトリにコピー。
  • hg add filename filenameをローカルリポジトリに追加。
  • hg commit 変更をローカルリポジトリにコミットする。この時、オプションである-u usernameでコミットしたユーザを、-m "文字列"でエディタを開かずにメッセージを追加できます。
  • hg remove filename filenameを削除ののち、次回のコミット時にリポジトリから削除。
  • hg forget filename filenameをローカルリポジトリから外す。ファイル自体は消さない。
  • hg rename from to ファイル名をfromからtoに変更する。
  • hg push ローカルリポジトリをリモートにあるリポジトリへ送る。
  • hg pull リモートリポジトリからローカルリポジトリへコピー。 -uをpullの後ろにつけることで、即時にローカルリポジトリを更新。hg pull -uで1セットという感じ。他の使い方は知らん。
ざっとこんな感じ。設定ファイルは.hg/hgrcあたりをいじるのだが、正直コミット時のオプションで何とかなっているのでほとんど触ってない。

2010年5月11日火曜日

pacoで快適なパッケージ管理を

Check
以前 make install したプログラムを消すのに苦労したことがある。

基本的にパッケージマネージャ経由でインストール出来ればいいのだけど、対応していないものも多い。
さらに、make uninstallがなかったりすると泣きたくなる。

そこで、make install時のログを取っておいてくれて、消したいときも簡単な操作でアンインストールを行ってくれるpacoというソフトを入れた。

使い方は、"とってもやさしいpacoの使い方"の情報が大いに役立った。

インストールを記録したいときは、
$ paco -lD make install
※-lDオプションをつけることで、「パッケージ名何にすっべかなー」と迷うこと無く、カレントディレクトリ名が登録されます。

消したいときは、
$ paco -r パッケージ名
となる。まだ消したことないけど。

パッケージ名が分からないときは、
$paco -1a
でインストールされているパッケージ名一覧が出るようです。

2010年5月10日月曜日

Cygwin+wxWidgetsでGLWindow

Check
ソースコードの管理はMercurial+bitbucketを使用して、自宅と学校で一元化に成功した。

次はプラットフォーム間の差異を吸収しちゃろうということで、おなじみのwxWidgetsを使った。CygwinでのwxWidgets導入に関してはソフトとハードの交差点さんの記事が大変参考になった。
VCからコンパイルするときはオプションのテキストファイルを直接いじったのだが、今回は./configureの時に引数で渡すだけという楽ちんなものだった。
 打ち込むコマンドは以下。

./configure --build=i686-pc-mingw32 --disable-threads --disable-precomp-headers --without-expat
私の場合はさらにOpenGLを使うので --with-opengl というオプションも追加してある。

2010年5月7日金曜日

CygwinでGLWindow

Check
ようやくCygwin+EmacsでOpenGL開発ができるようになってきた。

makefileが曲者で、Cygwin上で動かすためにはリンク時に-mno-cygwinというオプションが必要だということがわかった。
#makefile

VPATH = /usr/include/opengl
CPPFLAGS = -I /usr/include/opengl

libss := -lglut32 -lglu32 -lopengl32

main: main.o
main.o: main.cpp

%.o: %.cpp
$(COMPILE.cpp) $(OUTPUT_OPTION) $<

%: %.o
$(LINK.o) $^ -mno-cygwin $(libss) -o $@

.PHONY: clean
clean:
rm -f *.o *.exe
$(LINK.o)の行にある-mno-cygwinというオプションを指定することでリンカが-lglut32のリンク先を見つけてくれるようになります。これがないと-lglut32が見つかりませんというメッセージが出てリンクエラーとなる。

makefileについては調べながら勉強中みたいなものなので、ひどい書き方になってるかもしれませんがご容赦ください:-)

以下はソースコード。

#include <stdio.h>
#include <stdlib.h>
#include <GL/glut.h>a

const char *APP_NAME = "GL Window on Emacs!!";

void Display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glutSwapBuffers();
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(500, 500);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA);

    glutCreateWindow(APP_NAME);
    glutDisplayFunc(Display);

    glClearColor(1,1,1,0);
    glutMainLoop();

    return 0;
}
実行例

2010年5月5日水曜日

GWやったこと

Check
いろいろやりすぎてブログぜんぜん書いてねえ・・・。

以下、GW中の生活の様子を簡単にまとめる。

読書
PC・プログラム
  • PuTTYでWindowsからLinux鯖にアクセスしてそこでemacs使って簡単なプログラムをビルドできるようになった。
  • Makefileを書いて、作業ディレクトリで"make"と打つだけでビルドできるようになった。
  • glutを使用したウィンドウをlinux上で作成することができるようになった。
  • Debian(lenny)上で日本語の表示(jfbterm)と入力(uim-fep+anthy)ができるようになった。
  • flexなる字句解析用のジェネレータ?を使ってみた。
  • プライベート用のWinXPマシンが死亡。原因は不明だが、このままパーツだけ取ってさよならになりそう。
私生活
  • 京都のゲーム会社に4月から入社した友人がGW休暇で帰ってきたのでいろいろ面白い話をきいた。
  • 部屋を掃除して、本を50冊ほど売ってきた。
とにかく継続して何かを続けること、学生であるこの1年はがっつりプログラミングに身を捧げることを誓った連休でした。

2010年5月1日土曜日

UNIXタイムをYmdHMSに変換する

Check
On Python.
SquidのアクセスログがUNIXタイムで非常に見づらかったので、わかりやすい表示に変換してみた。
import time
UNIXTIME = 1234567890 
time.asctime(time.gmtime(UNIXTIME))
#>>> 'Fri Feb 13 23:31:30 2009'