|
上記の広告は1ヶ月以上更新のないブログに表示されています。 新しい記事を書く事で広告が消せます。
[ --/--/-- --:-- ]
スポンサー広告 |
トラックバック(-) |
コメント(-)
実験用に OpenPNE をインストールしてみたの続き。 実験用のソースツリーをいろいろいじって、あとでどこを改変したのかとかがわからなくなるのは、面倒なので Subversion で管理することにした。 まず、OpenPNE 用のリポジトリをつくる。 → openpne/ ベンダーブランチのディレクトリを作成。 → openpne/vendor/ ベンダーブランチの current に OpenPNE-2.12.1 のツリーを展開。 → openpne/vendor/current/ ベンダーブランチの current をバージョン番号のディレクトリにコピー。 → openpne/vendor/2.12.1/ バージョン番号のディレクトリを trunk へコピー。 → openpne/trunk タグ用とブランチ用のディレクトリも作っておく。 → openpne/tags, openpne/branches ツリーにするとこんな感じになる。 [openpne] +-[trunk] トランク。 openpne/vendor/2.12.1 からコピーによって作成。 +-[tags] タグ用。いまのところ空。 +-[branches] ブランチ用。いまのところ空。 +-[vendor] ベンダーブランチ。OpenPNE の公式パッケージを入れるところ。 +-[current] 最新版の OpenPNE の公式パッケージを入れるところ。 | いまのところ 2.12.1。 +-[2.12.1] OpenPNE 2.12.1 が入ってるところ。
trunk をインストールしたところに、設定ファイルとかが消えないように注意しながらチェックアウトする。 実際には、上書きは怖かったので、一時的なディレクトリに trunk を展開して、インストール済みのディレクトリと比較しながら、trunk を展開したディレクトリを、インストール済みのディレクトリと同じになるように不足ファイルをコピーして、インストール済みディレクトリに置き換えた。 一応、リポジトリで管理するための設定はこれで終わりだが、自動でいろいろとファイルが生成される var/ 以下のファイルが、svn status を実行したときに、Subversion 非管理ファイルとしてやたらたくさん表示されるので、var/ 以下のディレクトリには、svn:ignore 属性をかたっぱしにつけて非管理ファイルに Subversion が反応しないようにした。
Ubuntu on VMware の環境に、実験用に OpenPNE をインストールしてみた。 OpenPNE-2.12.1 のパッケージをダウンロードしてきて、セットアップドキュメントを見る。 apache はすでにインストール済みだったので、まだインストールしていない PHP5 と MySQL を apt-get でインストール。 MySQL に OpenPNE 用のユーザを作成して、あとはドキュメントどおりにセットアップを行った。 cron は面倒なので、設定しなかった。 最後にセットアップモジュールを実行して終了。 ここで、「えーと、メール送信はどうなってるんかな?勝手に外部にメール送信してほしくないな」と思って、メール送信まわりを調べてみたら、 /usr/sbin/sendmail を呼び出してメール送信してるっぽかったので、sendmail 系は全くインストールしていなかったので、つぎのような /tmp にファイル吐くだけのスクリプトを /usr/sbin/sendmail とした。 #!/usr/bin/perl
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); my $tmpdir='/tmp'; my $filename = sprintf('sendmail.%04d%02d%02d.%02d%02d%02d.%d', $year+1900, $mon+1, $mday, $hour, $min, $sec, $$); my $path = "$tmpdir/$filename";
open(OUT, ">$path") or die "open error $path"; print OUT "$0 ", join(' ', @ARGV),"\n"; print OUT "============================\n"; while(my $line = ) { print OUT $line; } close(OUT);
これで、招待メールとか他の通知メールは、/tmp にできたファイルの中身をみればわかるようになった。 さて、セットアップ設定が一応終わった。 さっそく、初期メンバーの写真を変更しようとしたら、ファイルをアップロードで画面が真っ白になった。 原因をいろいろ調べてみたら、GD モジュールが入ってなかったからだった。 apt-get php5-gd でインストールしたら、正常にアップロードできるようになった。 とりあえず、ほとんどデフォルト設定でこんな感じになった。 ↓
emacs で、バッファ内の先頭、末尾を行き来するためのコマンド M-< と M-> が、ちゃんと動作してくれないなぁとおもってたら、alt+shift が効いてなかったらしい。 [設定]-[キーボード] で[キーボードの設定]のダイアログで、[レイアウトのオプション]タブの [Alt+Shift changes group.] のチェックをはずしたら、ちゃんと alt+shift が効くようになった。
MHP2G のダウンロードクエストをゲットすべく、無線LAN環境をつくるために、買って放置してた WHR-G54Sのセットアップをしてみた。 自宅の LAN 環境には、すでに PC ルータが存在するので、WHR-G54S はルータモードでなく、ブリッジモードで使うことにした。(8 port LAN スイッチのポートがいっぱいいっぱいなので、ついでに LAN ポートを稼ぐためでもあったりする。) WHR-G54S をブリッジモードで起動すると、デフォルトでは 192.168.11.100 になり、既存の LAN で利用してるネットワークアドレス空間から外れるので、設定で利用する PC には、 192.168.11.100 への通信は、default gateway のほうへ行かないように、直接通信できるように一時的にルーティングの設定をした。 WHR-G54S のほうは、デフォルトゲートウェイ等の設定がないので、返りパケットもちゃんと戻ってきて、PC <-> WHR-G54S の通信ができるようになった。 WHR-G54S にアクセスできるようになったところで、さっそく管理者パスワードを変更した。 …。 そうしたら、ログインできなくなった!! INIT ボタンで設定を初期化して、ログインして、再びパスワード変更しても、おなじ状態。 ファームウェアか?とおもって、再び初期化後、ファームを最新にしても同じ症状。 アレコレしてるうちに原因がわかった。 入力したパスワードは、 9 文字。登録されたパスワードは 8 文字。 …。 そりゃ、ログインできんわな。 警告くらいだしてくれれば、原因究明に時間を無駄に使わずに済んだのに。 そんなこんなで、管理者パスワードの件が解決したので、無線LANのセキュリティを設定する。 無線LANの暗号方式は AESに、ANY接続 OFF、MAC アドレスでの接続制限などなど。 ノートPCのほうで、念のため接続してみたら、うまくいった。 つぎに、当初の目的である PSP で接続してみる。 PSP は AOSS 対応なので、AOSS で繋いでみた。 そうしたら、AES じゃなくて WEP で接続される・・・。 PSP のほうは、AES 対応しているはずなのに。 WHR-G54S のほうで、 AOSS 接続での暗号方式を AES に設定しなおしてもダメだった。 仕方ないので、AOSS で設定するのはあきらめて手動設定でやってみたら、ちゃんと AES で接続できた。 とりあえず、PSP の無線LAN環境が構築できたので、さっそく MHP2G のクエストダウンロードサイトにつなげてみて、ダウンロードできるやつは全部ゲットしといた。
Lua は C 言語で記述されたコードと連携できるように、API が用意されている。 その API を利用する際に、キーとなる概念が スタックである。 スタックというとアルゴリズムのほう、つまり LIFO (Last In, First Out) が先に頭に浮かぶが、Lua の API では、どちらかというと ABI (Application Binary Interface)の呼び出し規約での利用方法に近い。(アセンブリ言語的といえばいいのだろうか?) なので、LIFO のイメージで API のドキュメントを読むと、理解がしにくくなる。 とはいえ、後者の呼び出し規約でのスタックのイメージでも、なにげにややこしいところがある。 ということで、いくつかの API 呼び出しについて、そのスタックの状態やその変化を図化してみた。 (図化のもとにした Lua のバージョンは 5.1.2) スタック操作lua_gettop(L)

lua_settop(L, idx)

lua_pop は、lua_settop を呼び出すマクロになっている。 lua_pushvalue(L, idx)

lua_remove(L, idx)

lua_insert(L, idx)

lua_replace(L, idx)

値参照lua_type(L, idx) / lua_isXX(L, idx)

lua_isXXX … lua_isnumber, lua_isstring, lua_iscfunction, lua_isuserdata など lua_isfunction, lua_istable, lua_islightuserdata, lua_isnil, lua_isboolean, lua_isthread などは、lua_type を用いて型判断するマクロになっている lua_equal(L, idx1, idx2) / lua_rawequal(L, idx1, idx2) / lua_lessthan(L, idx1, idx2)

lua_toXX(L, idx)

lua_toXX … lua_tonumber, lua_tointeger, lua_toboolean, lua_tocfuntion, lua_touserdata, lua_tothread, lua_topointer など lua_objlen(L, idx)

値格納lua_pushnil(L) / lua_pushXX(L, val)

lua_pushXX … lua_pushnumber, lua_pushinteger, lua_pushstring, lua_pushboolean, lua_pushlightdata, lua_pushthread など lua_pushcclosure(L, func, n)

lua_pushcfunction は、lua_pushcclosure(L, func, 0) のマクロになっている 作成lua_createtable(L, narr, nrec)

lua_newtable はマクロで、lua_createtable(L, 0, 0) と定義されている。 lua_newuserdata(L, size)

テーブル参照lua_gettable(L, idx) / lua_rawget(L, idx)

lua_getfield(L, idx, key)

※ lua_rawgeti と微妙に引数の型が異なる lua_rawgeti(L, idx, n)

※ lua_getfield と微妙に引数の型が異なる lua_getmetatable(L, idx)

テーブル格納lua_settable(L, idx) / lua_rawset(L, idx)

lua_setfield(L, idx, key)

※ lua_rawseti と微妙に引数の型が異なる lua_rawseti(L, idx, n)

※ lua_setfield と微妙に引数の型が異なる lua_setmetatable(L, idx)

呼び出しlua_call(L, nargs, nresults)

lua_pcall(L, nargs, nresults, errfunc)

昨日の codepad の記事(日付的には今日だが…)では Ruby でやってみたが、今日は Perl でやってみる。 というのも、codepad の Recent Pastesをみてたら、 Perl だと Ruby でできなかったディレクトリアクセスができるみたいだったから。 http://codepad.org/2L6lu3sRopendir(DIR, "."); print join("\n", readdir(DIR)); closedir(DIR);
ディレクトリのリストが取れた。 . .. lock t.pl usr lib t.pl ってなんやろ?ということで、スクリプトを書いてみた。 http://codepad.org/tNedTE03open(FILE, "./t.pl"); print <FILE>; close(FILE);
…。 自分が書いたコードだった。 さて、 Ruby のほうでできなかった socket はどうかな? http://codepad.org/gKGI6qJWuse Socket; socket(SOCKET, PF_INET, SOCK_STREAM, 0); bind(SOCKET, sockaddr_in(0, INADDR_ANY)); $sock = getsockname(SOCKET); ($port, $addr) = unpack_sockaddr_in($sock); $host = gethostbyaddr($addr, AF_INET); print "$host:$port";
ああ、やっぱり。
| HOME |
次ページ≫
|
|
|