Archive for 4月, 2010

今まで、リビジョンで管理していましたが、ある程度こなれてきたとも思うので、バージョン 0.5としました。
どうしてVersion 1 ではないかといえば、せっかくなので、Flex4 & AIR2.0 でVersion 1.0 にしようと思っています。

ちなみに、前回のRevision44からの主な変更点(バグ修正)では、

1)長いサブジェクトの場合におかしなサブジェクトになっていた。
2)本文の最後に.(ドット)がついてしまっていた。

を修正しました。
ダウンロードは

http://code.google.com/p/airxmail/downloads/list
からどうぞ。、

SEOという言葉がある。サーチエンジンオプティマイズ。
簡単に言ってしまえば、「ある言葉を入れたときに、上位に表示するため」だ。
このことに、お金を外部に支払いやってもらおうという考えを持つ会社が多々ある。

しかし、何故、SEOを外部にやってもらう必要があるのだろう?
しかも、月々高ーいお金を払ってまで。
私はSEOをやりたいならば、自分たちでとことんやるべきだと思う。

「ターゲットとするキーワードを入れた時に、上位に表示されれば、それだけサイトを訪れてくれる人が多くなる。」
とこのくらいまでは、多くの人が理解している。
では、手っ取り早くキーワードを買って、そのキーワードの時には表示されるようにしてはだめなでしょうか?
SEOという目的で上位に表示されたいのはなぜなのでしょうか?

このようなことに疑問を持つのが、
多くの会社がWEBサイトに何を求め、どうしたいかも決めかねているうちからSEO会社に相談するあたりが馬鹿げている。
と思うからだ。

私は、あるSEO会社にこのような質問をした。
「今、ここにあるキーワードで御社の指示通りSEO対策をしていますが、
これらのキーワードが弊社の求めているキーワードであるとわかるためにはどうすればいいのでしょうか?」

SEO会社:「・・・・・・」

いや、これが現在のSEO会社の限界なのです。
(担当者が黙ってしまったのは問題ですが・・・)
でも、何か言ったとしても、たいていは答えになっていません。

といっても、これはSEO会社のせいではありません。

そもそも、自分たちが何を伝えたく、それをどう表現するかもわかっている。
が、それを顧客が知る方法だけがわからない。

という会社であればSEO会社の恩恵を受けられる。
でも、「どう表現する」がわかっている人は、なぜ、わかっているかといえば、それを伝えることができて、
その評価を受けているから、わかっているのである。つまり、顧客は知っているので、あとは、
知っているという事実を実感できていないだけである。

ところで、SEOの”SE”とは、Search Engineであり、その機能の目的は、
「入力されたキーワードから多くの人が、見る価値があると思うサイトを見つける」機能である。
つまり、見る価値があるサイトになれば、自ずと上位に表示されるのだ。

確かに、ある程度のテクニックは必要だ。
このような部分を本など、ちょっとお金をだして覚えるのはいいだろう。
しかし、本当に基本部分さえ押さえれば、後は、伝える能力、察知する能力であり、また、話題力ではないだろうか?
それがあったら苦労しないというだろうが、

SEO会社は残念ながらこういった能力の開発は提供してくれない。
一方で、このような伝える能力・察知する能力・話題力などを幹部クラスにお金を出して教育をさせている会社がある。

あれれ!?

では、ここで学んだ人が自らSEOやればいいんじゃないでしょうか?
会社にとって、このような能力を持っている人を作ることは大切であり、
また、ものを売っていくときにも、それらの能力がないと、客を振り向かせられない。
または、リーダとして人を引っ張っていくときに、これらの能力は非常に大切だ。

しかしながら、結局は売り上げという部分でしか評価軸を持っておらず、そのため、このようなノウハウが伝えられることはない。

でもSEOという話であればどうだろうか?
現在はこのサイトでもやっている通り、アクセス分析なんかはタダだ。
自分の能力が上がったこと、上がらないことは、このツールからもある程度は実感できるし、第三者からもわかる。
今まで、結果が漠然としていた能力開発の投資も、目に見える形でわかるのではなかろうか?

そして、何より、「売るための課程のノウハウ」自体が目的であり成果物なので、
評価を受けた人も、それを教えてもらった人も大変助かるはずだ。
また、こうした能力は、企業に体力として残っていくものであると私は思う。

今や、どの会社でも”発信する能力”を現場でためせる環境が整っている。
WEBサイトが結果をでないでないと嘆くより、WEBサイトで何をどう伝えていいのがわからないのであれば、
SEOというものをこのような能力を鍛えて行く場所と割り切ってもいいのでななかろうか?

そう割り切ってもらえれば、伝えられることがいろいろ出てくるのですが・・・

まだ、頭のなかでしっくりきていないので、
Apacheのmoduleでリクエスト毎に呼ばれるコールバック関数をまとめてみた。

実際には、

ap_hook_

を頭につける必要があるので、

ap_hook_handler(request_rec *r);

のようになる。

apache_callbacks

このあたりの順番を実際に見てみたければ、

mod_example

で確認すればよい。

私は、個人的にVMWare Workstationを使っている。現在のバージョンは7だ。

いつもはVMWareを使っているときにも、TeraTermやら、Poderosaなどのターミナルでつないでいた。
Xを使わなかったのもその1つの原因だ。

必要なファイルの編集も、Sambaを使って共有していた。(VMWareの共有フォルダもちょっとした原因があり、使えなかった。)
しかし、EclipseでC言語(邪道ですか?)を開発するようになってきた。
(今までは、Peggyを使っていたが、やはりコードヘルプがないと・・・・、Eclipse CDTだと、includeファイルさえ指定すれば使えますから)

includeファイルなんて、/usr/includeに膨大にあるし、これをWindows上にコピーするも面倒だし。

それで、全画面をLinuxにして完全にWindowsをはじき出し、使っていたが、やはり面倒くさい。
ブラウザなんかは慣れたWindowsのものの方がやっぱりいいし、メモとかを書きたいときにも、ちょっとWindowsに切り替えて・・・あー面倒だ。
そんなときに、ユニティというものを知った。
いや、言葉だけは知っていたが、どのような機能かしらなかったし、結果的に必要がなかったのと、
VMWareもバージョン4から使っていると、新しくなっても今まで通りの使い方を変えないんですよね。

このユニティ、Windows7のXPモードにある、ゲスト上のアプリケーションが、ホスト上に出てくるというやつです。
つまり、私はWindows7の上でVMWareを動かし、ゲストでFedora12を使っていますが、Fedora12の上で起動したEclispeが、Windows7の上にやってくるのです。

いやー、OSも違うのにすごいものです。
でも、キーが変わらないので、逆にちょっと戸惑ってしまう部分もある。
日本語モードから抜け出せない・・・と。まあ、わかってしまえば別に問題ありませんが・・・

unity

右に大きく見えるのがFedora12で動いているEclipseで、真ん中のFirefoxがWindows7で、左「Gnome端末」です。
おもしろいことに、左したのウィンドウズのメニューの上にFedora12のメニューも現れるのです。

速度も、とりあえず問題はありません。
これからは使わせてもらいます。

プログラムのIFの文法など、習うより慣れろで全く気にしたことがなかったが、さて、その文法を解釈する側になるとそうもいかない。

それは、以下の本をよんでいて気づかされた。

別に、コンパイラを作りたいわけではないが、コンパイラを知ることでいろいろな事がわかる。
まず、OSの仕組みや、パターンマッチング、メモリ管理などなど・・・

パーサ関連に初めてまじめに考え始めたのが、仕事でHTMLをパースする必要があったためだ。
私が作ったアプリはHTMLのすべてのリンク(外部リソース)を管理し、その関係を管理するツールだった。
まあ、HTMLのパースはC言語なんかと比べることができるほど複雑ではないですが・・・
でも、やっぱり、この辺の知識としてスタックしておくことは、将来悪くない。

それに、C言語を使い始めているが、やはりCを知るためには、文法を勉強していてもらちがあかない。
コンパイラを知れば、C言語が何を作成しているのがわかるので、より理解が深まるはずだ。

という観点なので、まあ今の段階ではさらっと読み流しています。

といいつつ今回はその文法の話なのだが・・・

IF文は

if ( 式 ){
  文;
  文;
}
else {
  文;
}

のように書く。しかし、正しい仕様では、

If( 式 ) 文 else 文

らしい。
ただしここで、”式”とは?”文”とは?は突き詰めてもらわないでいただきたい。
それをいわれたら、説明がめちゃめちゃ面倒になるし、言いたいことはそういうことではないのであしからず・・・

「文」は1つしかかけないらしい。
そして、文の中に、文が必要な場合には、
{と}をつけて、1つの文として扱うということだ。

使う方にはどうーでもいいことではあるが、いざ、それらを解釈する側にたてば、
これらはキチンと定義されていなければならないし、このように定義した方が確かに解釈が楽だ。
そして、こういう考え方ができることは、矛盾がないプログラミングをする上では必要な視点だろう。

まあ、たいていの人にとってはどーでもいい話。

XMLを投げて、結果をXMLでもらうような形ができてきました。
もちろん、サーバアプリはAMFで処理するようになっています。
サンプルなので、非常に簡単に、引数を3つとり、1つめはそのまま出力。2つめと3つめを足し算というすごーく簡単なやつです。

< ?php
require_once("Zend/Amf/Server.php");

$server = new Zend_Amf_Server();
$server->setClass('Foo');
$response = $server->handle();

echo $response;

class Foo{
	public function hello($str1,$num1,$num2){
		$sum = $num1 + $num2;
		return $str1."さん。こんにちは! ".sprintf("%d + %d = %d",$num1,$num2,$sum);
	}
}
?>

html

と画像でなんなのですが、入力に対して結果もXMLで出ます。
(まだまだ、このサーバで動くようにするには危険があるもので・・・・)

上の「実行する」をおすと、prototype.jsを使ってContentTypeを変えてそのままのXMLをPOSTします。
$F(‘input’)には、入力のXMLが入ります。
[js]
var req = new Ajax.Request(
url,{
method: “POST”,
requestHeaders:[‘Content-Type’,’application/xml+amf’],
postBody: $F(‘input’),
onFailure:on_failure,
onSuccess:on_success
}
);
[/js]

んー、もうちょっと、結果のXMLをツリーで見せるととかしないとちょっときついなーーーーー

私は、ここで書いているプログラミングやら、記事なんかを結構出先のモバイルノートで書いているために、なんかいいマウスがないかなーと思っていたところ、こんなのがありました。
と、みてもわからないかもしれませんが、折りたためるマウスです。

ヨドバシカメラで4200円で買いましたが、断然、こっちのが安いですね。(しまった)

こちら、下の2/3くらいから折りたためるのです。(白い方をみると、マウス上に横線が見えると思いますが、そこから折りたためます。)
なので、使うときは普通の大きさ、持ち運ぶときは小さくなります。

結構使い勝手もいいです。
USBをつなげばすぐに使えるのは、いいのですが、1つ難点をいえば、bluetoothでつながらないことです。
持ち運びをする際は、1つでも余分なUSBポートは使いたくないのですが・・・・

折りたたむという動作がスイッチにもなるので、これはいいです。
家のマウスも確かに、マウスの下に小さいスイッチがありますが、それを使うのも何ですし・・・

前々回まで、amfデータをApacheで処理することは・・・と考えてきましたが、
構想をちょっと図にしてみました。

mod_xamf

mod_xamfという名をつけてみました。

xは、eXtend(拡張)のxと、なんらかと × amf のかけるを意味した x です。

さて、こうしてamfを1データとして扱い、その中間に変換モジュールを設けることで、なんかいろんなことができそうな気もしてきました。
まず、現在はFlashアプリとサーバの間を人間が見ることがほとんどできないので、テストもFlashアプリが必要なのではないでしょうか?

これが、AMFをXMLにできるという事は、開発・テストフェーズでその制約から逃れることができます。
また、テストなどもXML(テキスト)になることで、自動テストなどもしやすくなるのではないでしょうか?

次に、GET/POSTを入力にして、XMLを返すとamfにできるという事は、ちょっとした小さい開発はやはり小さい開発に抑えられるという事です。
たとえば、ちょっとした入力補完などのためだけにAMFのフレームワークを引っ張りだすのは大げさです。
1つの文字列から、複数の文字列の配列を返せればいいなんてのは、 やはり簡単な方法もあるべきでしょう。

とほかにもいろいろ考えられるのですが、実はまだ、コマンドラインベースでAMF <-> XMLの相互変換ができるレベル(しかも限定的)しかできていない。
(まあ、wgetみたいのと組み合わせれば、それでも使えるのかもしれませんがね。)

ここでおおきなことを言っても、出来上がるのは相当先の話になってしまうので、控えておきます。
(んー、デイタイムに実装できれば、もっと早くできるのだが。。。まあ、趣味の範囲だから勝手な思いつきで、誰にも遠慮がいらず作れるのかもしれませんが・・・・このあたりのバランスは難しいですな。)

レンタルサーバの増強のおかげで、サーバが自体が再起動したらしいです。
にも関わらず、サービスを自動起動にしていなかったので、サイトがダウンしていました。

予兆としてはPVが激減し1日に100PVになったために、「へー4月ってみんないそがしんいんだなー」って感心してしまいました。
(キャッシュなのでしょうか?)

そしたら、なんとサービスがダウンしているとは・・・
そんなに見ていただける事に本当に感謝です。

なんか、サーバが自動で監視のためのサービスを挙げるのですが、それがちょっとかぶってしまうので、めんどくさいので手動にしていましが、
これを機会に、ちょっと、予防は立てようかなと思います。
ただ、余暇でやっている関係上、監視等はできないのですが・・・・・

amfのデータを何とか、libxml2を使ってXML形式に出力とそのXMLを使ってメモリ上にamfデータを構築するところまでが、形になってきた。
まだ、amfデータをやり取りする際のデータがあまりよく見えてきていないので、なんなのだが、こんな感じにXMLで出力できるようにした。

< ?xml version="1.0" encoding="UTF-8"?>
<amf>
    <request version="3">
        <header size="0"/>
        <bodies size="1">
            <body targetUri="null" responseUri="/2">
                <value type="array" size="1">
                    </value><value type="object" classname="flex.messaging.messages.RemotingMessage"
                        size="9">
                        <property name="operation">
                            <value type="string">returnNumber</value>
                        </property>
                        <property name="source">
                            <value type="string">RoundTrip</value>
                        </property>
                        <property name="body">
                            <value type="array" size="1">
                                </value><value type="number">31.570000</value>
                            </property></value>
                        
                        <property name="clientId">
                            <value type="null"/>
                        </property>
                        <property name="timeToLive">
                            <value type="integer">0</value>
                        </property>
                        <property name="timestamp">
                            <value type="integer">0</value>
                        </property>
                        <property name="destination">
                            <value type="string">zend</value>
                        </property>
                        <property name="messageId">
                            <value type="string">7446C9E7-19A5-EBB1-F6AA-E2C5CCE11457</value>
                        </property>
                        <property name="headers">
                            <value type="object" classname="" size="6">
                                <property name="DSId">
                                    <value type="null"/>
                                </property>
                                <property name="body">
                                    <value type="null"/>
                                </property>
                                <property name="nil">
                                    <value type="null"/>
                                </property>
                                <property name="DSEndpoint">
                                    <value type="null"/>
                                </property>
                                <property name="body">
                                    <value type="null"/>
                                </property>
                                <property name="zend-endpoint">
                                    <value type="null"/>
                                </property>
                            </value>
                        </property>
                    
                
            </body>
        </bodies>
    </request>
</amf>

まだ、amfデータへのシリアライズ処理ができないので、1つの動きにならないのでまだまだなのだが、これをApacheのモジュールにしようと思っている。
そこで、以前にも書いたがamfのデータをXMLやPOSTデータとして処理ができれば楽かなと・・・・
あとは、入力データと出力データを任意に選べるようにすれば、設計次第では1つのサーバサイドプログラムをそのまま、
複数の使用している技術(たとえば、XML-RPCや、amf、jsonなど)を変えても使えるということも不可能ではないだろう。

でも、それ以外にも、amfのサーバプログラムのテストにもちょっとした改良で使えるようになるのではないかと思えてきた。
(実際、これが一番作るのが楽だ。)

つまり、入力をXMLとして、Apache内部でamfに変換し、出力のamfをXMLに変換すれば、
今までのHTMLのプログラムをやるように(Flashのアプリなしに)簡単にamfのサーバサイドのプログラムが開発・テストができるようになる。
もちろん、出力がただしいかどうかは目で見ればいい。(別に、自動テストツールを使ってもいいが・・)

と、こんな用途にもつかえるかなーと思い始めてきました。

お仕事のご依頼・相談
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら
ソフトウェア&ライブラリ




ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
執筆書籍
本、雑誌等

WEB記事:CodeZine
執筆記事はこちら
カレンダー
2010年4月
« 3月   5月 »
 1234
567891011
12131415161718
19202122232425
2627282930  

カスタム検索
RSS
Add to Google < !–adsense–>
アーカイブ
カテゴリ
にほんブログ村 IT技術ブログへ