でじくる。

主にプログラムの話題などを扱うブログです。

PHPのIteratorとIteratorAggregate

PHPのSPLにIteratorとIteratorAggregateというインターフェースがあります。

 

Iteratorはそのまんまですね。

Iteratorインターフェースを実装したクラスは指定されているメソッドを実装すれば

foreachで回したりできるようになる、と。

 

それは以前から知っていて使ったりもしていました。

ただ、似たような名前のIteratorAggregateはちゃんと調べたことがありませんでした。

 

で、調べてみた、というのが今日の話。

 

イテレーション

http://www.shigeweb.jp/php/project_p/?section=php5oop&page=iteration

 

見直されるべきPHP5の組み込みイテレータ

http://d.hatena.ne.jp/hnw/20090523

 

Iteratorインターフェイスを使うメリット

http://www.atmarkit.co.jp/fcoding/articles/php5dev/03/php5dev03b.html

 

まあ、一つ目に紹介した記事を読めば全部書いてあるんですが、

IteratorAggregateはgetIteratorメソッドで

Iteratorインターフェースを実装したクラスのオブジェクトを返しておけば、

IteratorAggregateインターフェースを実装したクラスのオブジェクト自体を

foreachで回すことができるというものです。

 

普通にIteratorそのまま使えばいいじゃん、

とか思ったりもするわけですが、

データとイテレータを分けて持つことで、

一つのデータを複数のイテレータで扱うことができる、と。

 

 

Apache Solrで形態素解析をしたいときはlucene-gosenを使うという話

Apache Solrという全文検索エンジンがあります。

Javaで作られていて、PHPなんかからも簡単に扱えるので便利。

 

多国語対応する場合はn-gramが楽なのですが、

日本語しか使わない場合はまあ、形態素解析にしたいですよね。

 

ということで、「Apache Solr入門」を参考に

Senを導入しようとしたんですが、これがちゃんと動かない。

 

どうも、今はlucene-gosenというのがあって、それを使うんですね。

 

Apache Solr入門」のサンプルのlucene-gosen対応(1章から4章)

http://johtani.jugem.jp/?eid=44

 

lucene用のライブラリということで、非常にお手軽です。

 

capistranoでssh_optionsを設定し忘れててはまった話

主にRailsなんかで使われている

capistranoというデプロイツールがあります。

 

sshで指定したサーバにログインして、

適宜コマンドを実行できるツールですね、

思いっきりぶっちゃけて言うと。

 

公開鍵認証でログインさせようとした場合、

ssh_optionsを設定して秘密鍵の場所を指定してやる必要があります。

 

Capistrano事始め

http://d.hatena.ne.jp/kdaiba/20090518/p1

 

直接コマンドを打って動作確認したときは

勝手にデフォルトの~/.ssh/id_rsaが使われてて気づかなかったんですが、

違うプログラムから実行させたときは当然のごとく使用されなかったので

ちゃんと動かなかった、という話。

s3fsが簡単すぎて笑える

Amazon S3をファイルシステムとしてマウントできるs3fsというものがあります。

EBSあるしいらんだろ、とか思ったりもするのですが、

無制限にスケールできるのは何というか夢が膨らむよね、ということで

使ってみることにしました。

 

公式サイト

http://code.google.com/p/s3fs/

 

参考にした記事など

Amazon EC2 (Amazon Linux) で S3 をマウントして使用する(s3fs+FUSE)

http://blog.genies-ag.jp/2011/08/amazon-ec2-amazon-linux-s3.html

suz-lab - blog: "s3fs"の"allow_other"オプションと"url"オプションと"fstab"

http://blog.suz-lab.com/2011/05/s3fsallowotherurlfstab.html

 

思いの外というか、非常に簡単にできていい感じですね。

Reduced Redundancy Storageに対応してるし、キャッシュも使えるし。

EBSよりは普通に割と遅いのは仕方のないところでしょう。

 

何か弄るたびにS3に通信しにいくのはアレですが、

同一regionのEC2から使うのならば通信料はかからないので悪くなさそう。

 

クラウドの肝はやはり分散ストレージなのだなぁ。

昨日、TwitterでさくらのVPSはいい感じだけど

クラウドの方は調子がよろしくないとか書いていたのですが、

とうとう無償になってしまいました。

 

さくらのクラウドの現状報告および課金対応について

http://cloud.sakura.ad.jp/news/sakurainfo/newsentry.php?id=622

 

原因はストレージみたいですね。

 

去年にAWSに大規模障害が起きたときも

原因はEBSでしたし、

いまや存在が忘れ去られている

Web ArenaのCloud9もストレージの問題でした。

 

さくらのクラウドは何だかんだで期待しているので

がんばってほしいところではあります、が、とりあえずまだしばらく様子見ですね。

Apache 2.4.1をソースから入れようとするとAPRがないとか言われる

最近、Apache2.4.1やPHP5.4がリリースされているので、

検証という名目でインストールして遊ぼうということで環境を作っていました。

 

さくっとソースからApacheを入れようとしたところ、

なんかAPRがないとか怒られて./configureが通りませんでした。

簡単にググった結果がこの記事。

 

apache 2.4.1 source install

http://d.hatena.ne.jp/hogem/20120228/1330437031

 

aprとapr-utilというのを別個にとってきてsrclibに突っ込んでやればよし。

64bit対応のSmall Instance登場!

はい。やっときました。

【AWS発表】 EC2に新ミディアム・インスタンス追加、64ビット対応のインスタンスタイプ2種追加、さらにWebコンソールにSSHクライアント統合

http://aws.typepad.com/aws_japan/2012/03/ec2-updates-new-medium-instance-64-bit-bit-ubiquity-ssh-client.html

 

EC2では32bit同士、64bit同士だと簡単にスケールアップ・ダウンができます。

アクセスが増えてきたときにさくっとスケールアップができるのが

便利だったりするわけですが、一つ大きな問題がありました。

それが、small instanceは32bitのものしかなかった、という問題です。

 

一番小さいmicro instance、まあまあ大きい感じのlarge instanceおよび

さらに大きなものも64bit対応なので、

micro→small→large→さらに大きなインスタンス

みたいにスケールアップしたくてもできなかったわけです。

microが1500円ぐらい、smallは7000円ぐらい、largeは20000円ちょっとなので、

microからlargeに一気に飛ぶとヘヴィな感じ。

 

microは結構へぼいのでsmallで始めて

いい調子ならlargeにしたい、みたいな願望もありました。

あるいは、開発中だけmicroにしておいて、

リリースのタイミングで適度なインスタンスに変更する、とか。

 

まあ、32bitでいいなら、

32bit micro→small→high cpu medium

というルートもあり得ますが、

それよりハイスペックなものはないのでそこで打ち止めです。

 

ただ、今回の発表でsmall instanceの64bitが追加され、

さらに新しくmedium instanceも追加されたので、

micro→small→medium→large

という段階的なスケールアップが簡単にできるようになったわけです。

 

値下げの発表もあったばかりですが、

AWSはやはりかなりキてますね。

よい感じです。