さくらVPS借りてみた

お約束の初期設定

  • ユーザの作成
  • 鍵認証設定
  • sshd設定

http://kinakorobot.blogspot.com/2010/10/sshvps.html
http://tanaka.sakura.ad.jp/archives/001065.html
http://www.usupi.org/sysad/052.html

一番時間かかったのは鍵認証でのログインでした;;
Poderosa秘密鍵がOpenSSH形式とは違うことを毎度忘れます
http://slashdot.jp/journal/420065/OpenSSH-%E3%81%A8-Poderosa-%E3%81%A7%E3%83%8F%E3%83%9E%E3%83%AB
http://blog.livedoor.jp/sasata299/archives/51173838.html
http://eto.com/d/Poderosa.html

  • パケットフィルタリング

http://akabeko.sakura.ne.jp/blog/2010/09/%E3%81%95%E3%81%8F%E3%82%89%E3%81%AEvps-%E3%82%92%E4%BD%BF%E3%81%84%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B-3/

自分で借りて触って実感したけれどVPSすごく便利でした。
この自由度はかなりうれしい。

Objective-C 2.0をはじめる

現在のまとめ

  1. Objective-C 2.0のことをObjective-C++と表記することもあるみたい
  2. 宣言部と実装部に分かれている
  3. メソッド参照がメッセージ送信になっていて記述が独特
  4. 「#」で始まるコンパイルの前処理の指示を「プリプロセッサ命令」と呼ぶらしい
  5. NSObjectクラスがルートクラスとなる
  6. NSObjectクラスはFoundationフレームワークの中に用意されている
  7. id型の場合、「*」(アスタリスク)でポインタであることを明示する必要はないらしい。
  8. allocとinitはNSObjectに定義されている
  9. Foundationフレームワークは実行時に読み込み
  10. コンパイル実行に失敗するとファイルは作成されない
  11. 「 : スーパークラス名」の部分は、宣言部(@interface)で記述されていれば、実装部(@implementation)では省略してもOK
  12. オブジェクトでやり取りするために、int型変数をオブジェクト型にラップして渡すことが結構行われるらしい
  13. interfaceの引数を「仮引数」というらしい
  14. メソッドの宣言で型を省略するとid型とみなされる
  15. 実装部(implementation)ではスーパークラスインスタンス変数は記述しない。宣言したメソッドの定義は必須
  16. オブジェクトの無効値はnil
  17. 関数呼び出しの方がメソッド呼び出しよりも比較的高速に動作するが、よほどでない限りはメソッド呼び出しでよい
  18. initメソッドはid型を返すらしい

mysqlデータ容量オーバー

ちょっと前に、mysqlのテーブルを別のサーバーに移行しようとして、テーブル容量オーバーでエラーになったのでその対処についての覚書。
時間がたってるのでうる覚え。そのときに書いときゃよかった。。。

まずエラーは下記のような感じ。

Error: 1114 SQLSTATE: HY000 (ER_RECORD_FILE_FULL)
Message: table '%s' はいっぱいです。

innodb_data_file_pathに記載されているファイル名がmysqlのデータの実体なので、それを確認すると容量いっぱいになってそこで止まっている模様。
autoextendが効いていない。もしくはファイルシステムの限界に来ているようだ。
だが、df -Tで調べるとファイルシステムのタイプはext3で最大ファイルシステムサイズは約8TB、最大ファイルサイズは約2TBなのでファイルサイズとしては問題ない。

データの移行はmysqlのvar以下をコピーして行ったので後は設定ファイルが違うのだろうということで比較すると、mysqlの設定ファイル(my.cnf)が微妙に違う。
ということでmy.cnfを編集することに。
innodb_data_file_pathの出力するファイルを分割しても変わらず。

そこでしかたなく、mysqlコンパイルからやり直し。var以下のコピーではなくて元の環境のデータをdumpして対応する。
すると何の問題もなくすんなり移行完了。
autoextendもうまく動いているようで自動的に容量が増えていっている。

結局、var以下の移行時に何らかの問題があったようだが現状はわかっていない。

参考にしたサイト:
http://dev.mysql.com/doc/refman/4.1/ja/innodb-start.html
http://dev.mysql.com/doc/refman/4.1/ja/adding-and-removing.html

PHPを使うことが多くなりそうなので今後のためのちょっとしたメモ

php.ini
php.iniディレクティブ
設定を変更するときはまずここを見ること

http://www.php.net/manual/ja/ini.php

・セッションのガベージコレクション関連の設定

session.gc_probability
session.gc_divisor
session.gc_maxlifetime

httpd.confでもそうだけどphp.iniを変更したらサーバーを再起動しないと反映しない。
当たり前?

register_globals
Onにしているとpostとかgetとか関係なく普通に変数に入ってしまうという設定です。
ようするに、http://www.aaa.com/index.php?test=1にリンクしてindex.php内の$testに値が$_GET["test"]とか
せずに上書きされたりします。詳細はgoogleとかで調べればすぐ出ます。
唐突に変数が現れて利用されている場合はそこらへんの設定を確認してみるといいみたいです。
古いサンプルで初期化もされていない変数が利用されてて、なんだこれは?と思い調べると、この設定のせいでした。
PHP4.2.0以前はこの設定がOnだったらしいです。

PEARのインストール
・php4.4.4をインストールしpearをインストールしようとするとエラーになる問題
> Fatal error: Undefined class name 'pear' in C:\phpPEAR\go-pear.php on line 747とかいう
エラーが出る。なぜだ!ということで調べました。

結論を言えばpearモジュールの最新版をDLして
"phpインストールフォルダ"\PEAR\go-pear-bundle
に上書きすれば動作しました。

以下のリンクを辿れば詳細はだいたい分かりますが、pearにはいろいろ利用方法があります。
私はperlppmみたいな使い方にしました。

http://www.go-pear.org/manual/ja/installation.php
http://www.y2sunlight.com/ground/?PHP5.0%2F6.PEAR%A4%CE%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB
http://papipookoo3.com/wp/?p=3

■セッションIDをDBで利用する
以下はセッションをDBで実現するときのサンプルです。

http://shiflett.org/articles/guru-speak-jan2005

とても分かりやすく一発で動作できました。
_destroyはsession_destroyを読んだ時に呼ばれます。
_cleanはGCで初めの方に書いたphp.iniの"session.gc_"関連の設定で制御してます。

シンボリックリファレンス

まずは普段あまり使わないシンボリックリファレンスについて勉強しようと思います。
最近ところどころでシンボリックリファレンスを見かけるようになったので、
今回ちょっと勉強しなおして曖昧な部分を払拭しようかなと思っています。
とりあえずは簡単なメモ程度

※シンボリックリファレンスはグローバル変数を対象としている為ローカル変数では使えない。

$hensuu = "city";
$hoge = \$hensuu;
#これは普通に$hensuuのリファレンスを変数に入れたものをデリファレンスしている
print $$hoge."\n"; #city

シンボリックリファレンスの処理手順は、

  1. $hensuuがリファレンス変数かをみる
  2. そうでない場合は値が文字列かをチェックし文字列だと変数名とみなす

(ちなみに、$hensuuが数字だった場合は、「Modification of a read-only value attempted」というエラーになる)
となっている。

$city = 10;
$$hensuu = 30; #$hensuuは"city"が入っているので、$cityの値が上書きされる。
print $city."\n"; #30

配列もハッシュも同様に使える

#配列として評価する。
@$hensuu = (1,2,3,4,5);
map { print $_ } @city; #12345

#ハッシュとして評価する。
%$hensuu = ("hp"=>"orz","mp"=>"!!");
map { print $$hensuu{$_} } keys %city; #orz!!

変数の値がたまたま違う変数名と一致してシンボリックリンクリファレンスとなってしまうのを回避したいとき

use strict 'refs'; #指定するとシンボリックリファレンスを使うとエラーにすることが出来る。
$var = "x";
print $$var = 30; #Can't use string ("x") as a SCALAR ref while "strict refs" in use at test.pl line 260.

use strict;とかでシンボリックリファレンスが禁止されている中で部分的に使用したい場合

no strict 'refs'; #無効にする。
$var = "x";
print $$var = 30; #30