このブログを検索

2011/11/23

iPad2

来年1月にはiPad3が出るかという時期に今さらなレポートかもしれないが、「iPadって、どうなの?何に使うの?いるの?」という人はまだまだ多いのではないだろうか。そういう人の為に、買って1ヶ月たった私がレポートしましょう。

結論から言いましょう。iPadは不要。もし、パソコンの代わりだとか、インターネットの利用などにiPadを使おうと考えているなら、やめた方がいい。

iPadは、大きいiPhoneです。これは欠点でもあり利点でもある。私もiPhoneを使っていて『もうちょっと画面が大きかったらな・・・』と思うことが何度かあった。iPadが出たのはもう2年くらい前で話題になって私も欲しいとは思ったが、主に金銭的な理由で買うのを控えていた。しかしiPhone4Sの発売にともなってソフトバンクが実施したキャンペーンがきっかけで買うことを決意した。まず、画質があまりよくないのにがっかりした。店頭でデモ品が置いてあるのは何度も触っていたのだが、自分の物となって自室でじっくりみるのでは違う。また、せっかくの大画面(iPhoneと比べて)なのに、アプリやWEBサイトがその大きさを生かしきれておらず、逆にもてあましてしまっている。

twitterなんかは、iPhoneのほうが全然使いやすくて読み書きもしやすい。アプリや電子書籍も、iPadへの対応はまだ遅れていて充実していない。価格も高い。電子書籍は紙の本とほとんど値段が変わらないし、品揃えも少ないし、思ったより視認性というか、新聞などでページ全体を見渡せる感じが弱い。画面の大きさにくらべて解像度がそれほどではない感じがする。アプリは動かなくなったり突然落ちるなど異常終了するのがiPhoneより多いように感じる。そしてこれほどの画面の大きさであれば2つのアプリくらいは並べたくなるがそれはできない。

今のところiPadでいいなと思ったのはGarageBandのピアノくらいである。GarageBandはiPhoneにもアプリがあるが、iPhoneでピアノを弾くのはキツい。iPadなら、そこそこの演奏ができる。WEBや電子書籍の閲覧にはいいかなと思ったが、これもイマイチだ。まず、重い。

初代を店頭で持ってみて重いなと感じていたのが2では軽量化されたことも購入のきっかけになったのだが、それでもまだ重い。夜中に目覚めた時とかに枕元にあるiPhoneを見ることはよくあるが、ねっころがって片手でiPadを見るのはしんどい。仰向けになって両手で持つか、うつぶせになって下に置かないとダメだ。だから寝床にいるときはiPadは見ない。

入力に関しては、iPhoneとほとんど変わらない。入力のしやすさを数値で表すと、PCが10点とすると携帯電話は2点、iPhoneは5点でiPadは6点くらい。ブログを書くくらいできるかなと思ったがやっぱり物理的なキーボードでないとだめだ。タッチパッドというのは、やっぱり携帯する小型端末だからこその妥協案であって、座ってじっくり大きな画面で使用するならキーボードやマウスの方がまだまだインタフェースとしては優れている。

というわけで必要かどうかということで言えば、iPadは不要です。パソコンとiPhoneを持っている人には不要でしょう。ただ、いろいろと可能性を感じるデバイスではあります。アプリで遊んだり、これを使って何ができるかを検討してみたい、というような人なら買ってもいいと思います。私も買ったことを後悔はしてません。

2011/11/15

ezsch

アクセスログにデコードされていない文字列が。UAを見ると、"ezsch"とあった。 解析スクリプトの検索エンジンごとの処理に"ezsch"を追加する。 が、デコード結果が化ける。文字コードが違うのだろう・・・。 なんの文字コードなのかが判断できないので検索するとshift-jisらしい。
uri_unescapeの前にshiftjisでdecodeする。まだダメだ。 後か。 uri_unescapeした文字列をもう一回shift-jisでデコード。 できた。

しかし、やっていることはほとんど同じで、サーチエンジンによる違いというのは

  • UAに含まれる検索エンジン名

  • 検索文字列の前につく文字列(p= とか、 q= とか)

  • uri_unescapeの後にさらにデコードが必要な場合それをやる

なので、本当はこれらを引数にしてサブルーチン化すればよいのである。

2011/11/09

pre

またスタイルの話であるが、preを使っていると、iPhoneで表示が崩れる。

preにはソースを書くので1行の文字数がどうしても長くなる。 するとなぜかほかの部分の文字が大きくなってしまう。 preの幅にあわせて小さくなるならわかるのだが・・・ どうしよう・・・

2011/11/03

%25

google検索文字列のエンコードが、下記のように%のあとが4桁になっている場合がある。これをそのままデコードすると、25だけが取れる。読めるようにするにはこれをもう一度でコードしなければならない。

%25E5%25A4%25A7%25E6%25B1%259F%25E6%2588%25B8%25E7%25B7...


検索すると、「%25がついている場合は25を消す」という人がいたので私もマネした。

$string =~ s/%25([a-fA-F0-9][a-fA-F0-9])/%$1/g;


[]を2回繰り返す時の書き方がわからないので続けて書いた。

2011/10/29

IPアドレスから国を判別する

ヘンなアクセスをしてくるIPはムカつくからiptablesでブロックしている。 whoisで、どこの国かなどを見る。 基本的に日本人以外には有用なものはないから、日本以外を全部遮断してもいいんだけど、それじゃ中国のGreatFWだもんね。
ftp.apnic.net/stats/apnic/delegated-apnic-latest


ちなみにここを見ると、どの国にどのIPアドレスが割り当てられているかはわかるようである。 日本以外をブロックするとかができるわけだ。 でも、インターネットに情報をさらしておきながら国内にアクセスを限るってのもどうかと思う。 あとIPアドレスが海外のものでも、日本人が海外の会社でサーバを借りたとか、 海外勤務の日本人が、とか、そういう場合もあるからやっぱりアドレスを管理しているISPの国を見てもあまり意味はないかもしれない。

2011/10/28

画像アップローダの作成

画像アップローダーを作ろう。 そういうサイトはたくさんあるけど、なかなか私の使いたいものがない。 以前使っていたサイトがあって、それがとてもよかった。 まず、画像はすべてサムネイルが表示される。 サムネイルといっても、結構大きめで、それで十分楽しめるくらいの大きさである。 PCの1画面で、3、4列くらいかな。 背景は黒。各画像の下には短いコメントが表示される。 多くの場合は何もないか、ごく短い。 投稿者だけでなく閲覧者もコメントをつけられるが、そのコメントはサムネイル表示時には表示されない。

画像の表示はglobでいいかな。 まずglobで画像を表示させてみると、大きさがまちまちになる。

これをプレビュー画面では同じ大きさに統一したい。 Windowsのexplorerとかpicasaとかのように。 さて、どうやるか。 ちょっと調べるといろいろ出てくる。 いつもはとりあえずなんでもいいから動くものに食いついてきたけど、 今回はどんな方法があるのかを調べて吟味してから使おう。

Image::Magick

GD

ImgResize

画像のサムネイルを作成する。

#!/usr/bin/perl
use strict;
use Image::Magick;

print "Content-type: text/html\n";
print "\n";
my @files = glob "./images/*.png ./images/*.jpg";
foreach (@files){
&MakeThumbnails($_);
}

print '<table border="0" cellspacing="3" cellpadding="3" width=80%><tr>';
my @files = glob "./thumbnails/*.png ./thumbnails/*.jpg";
my $count =0;

foreach (@files){
if($count % 5 <1){
print "</tr><tr>";
}
print "<td><img src=\"";
print $_;
print "\"></td>";
$count++;
}

print '</tr></table>';

sub MakeThumbnails{
my ($name) = @_;
my $dir = './thumbnails';
(my $newname = $name) =~ s/\/images/\/thumbnails/;
my $img = Image::Magick->new;
my $x;
$x = $img->Read($name);
$x = $img->Resize(geometry=>"200x150");
$x = $img->Write($newname);
}


サムネイルの作成と表示を同時に実施している。 表示(リロード)するたびにサムネイルを上書きするのはムダかもしれない。 枚数が増えてくると重くなるから、ページを分けたりする必要もあるだろう。 サムネイルをクリックしたら元画像を表示するとか、コメントをつけたり削除したりできれば、 表示部分はOK。

あとは、アップロード部分か。

perlでimagemagickを使いたくて、cpanでインストールしたらエラーになった。

調べると、yumでいれればうまくいくとのこと。

yum install ImageMagick-perl


なんで・・?

2011/10/26

セッション管理

yahoo, google, twitter, amazon... 今はどこのサイトもログインしてそのユーザ専用ページが表示されるようになっている。 前からこの仕組みをやってみたいと思っていた。 idとパスワードを入力させて、それをデータベースで参照して正しければ認証する。 実際は暗号化したり、SQLとかを使っているのだろうが、 原理だけを確認するなら、その辺は平文でテキストファイルでよい。

テキストボックス2つとボタンを作って、postさせれば認証機能は実現できる。 しかし問題はその先である。 単純に考えるなら、



  1. OKなら ok.htmlを表示し、NGなら ng.htmlを表示する。

  2. OKなら"ok"を、NGなら"ng"を引数としてauth.cgiを呼び、引数に応じて「ようこそ」「認証できません」などと表示する。

しかし問題なのは、認証の可否をどこかに維持しておかなければならないということだ。 それを「セッション管理」といって、perlにも CGI:Session というモジュールがある。 それを使えばいいのだろうが、複雑で、mySQLなどもからんでいてメンドクサイ。 もっと単純にできないだろうか? IPアドレスで管理するのはどうだろうか? いったんIDとパスワードを認証したら、そのときのuserのIPアドレスと、認証がOKであることを、ファイルに記録しておく。 サイトでは常にそのファイルを参照するようにして、認証されているかどうかに応じてページの表示を変える。 多分、「セッション管理」とか言うのも、同じようなことをしているはずだ。あとはポート番号を見たり、認証した時間を記録しておいて一定時間がたったらタイムアウトさせるとか・・・ でもあれか、natしてたりしたらIPアドレスで管理したら全部同じになっちゃうな。 セッションIDというのはHTTPプロトコルの仕組みで、それをサーバとクライアント(ブラウザ)で保持するようだ。だが、パケットキャプチャしても"session id"みたいなフィールドが見つからない。

セッション管理というのは、ステートレスであるHTTPプロトコルで状態管理をさせるための苦肉の策のようだ。セッションIDを生成して、それをクッキーを使ってクライアントに渡す。

#!/usr/bin/perl

use CGI;
use CGI::Session;

my $cgi = CGI->new;
my $session = CGI::Session->new(undef, $cgi, {Directory=>'./tmp'});
session->param('name','mysession');

print $session->header(-charset=>'UTF-8');

print   $cgi->start_html(-lang=>'ja', -encoding=>'UTF-8', -title=>'http session test'),
$cgi->p('session id: '.$session->id.'<br/>',
'name: '.$session->param('name').'<br/>'),
$cgi->end_html;


とりあえずこのようなcgiを作って実行すると、session idが表示される。F5を押すたびにidは変わる。パケットキャプチャしてみると

Set-Cookie: CGISESSID=5d6b6c1c3248aa9b399060dcef4c4e58; path=/


のように、セッションIDがサーバからクライアントに返す HTTP OKのパケットの中に入っているのがわかる。・・・・・・で?

まずはcookieからだな。 cookieというのは、サーバ側から送信するもので、ユーザが閲覧するとユーザがcookieを無効にしていない限り勝手に保存される。 cookieには名前、値、ドメイン名、パスなどが設定できる。 ユーザが保存しているcookieは、環境変数

$ENV{'HTTP_COOKIE'}


で取得できる。 たとえば「名前」=「アクセス日時」というcookieを送信しておけば、次のアクセス時に「前回のアクセスは何月何日でした」などと表示できる。

amazon.co.jpにアクセスしたら、6個のcookieが保存された。

at-acbjp
session-id
session-id-time
session-token
ubid-acbjp
x-acbjp


値を見てもなんのことやらさっぱりわからないが、 サインインしたときにアカウントと関連付けて保存しておけば、どのアカウントかわかる。 どのサイトでも「ログインしたままにする」などのチェックボックスがついているが、 それをチェックしたときはcookieを見てアカウントの認証プロセスを飛ばすのだろう。 と、こう見てくるとperlの CGI::Session モジュールがやってることはたいしたことがないように思えてきた。 ただidを発行してcookieにセットしてるだけじゃないのか?




パソコンに写真がたくさん溜まってきて、特に見ないのだが捨てるのももったいなくてとってある。 これをwebに置くことにした。 いろいろあるけど、picasaのwebアルバムに落ち着いた。 いったん上げてしまうと、フォルダの階層が作れなかったり、削除や移動が一度にできなかったりとメンドクサイが、大量ファイル操作は一度ダウンロードして操作してアップロードするなどしている。それにしても重複ファイルの多いこと・・・メニューの「整理」を選ぶと、複数選択して削除や移動ができる。天下のgoogleがそんなことくらいできないわけないよな・・・