最近meta http-equiv=”refresh”が機能せずに真っ白なページが表示されるので
「今はやりのGENOウイルスにやられた!?」
と思ったらはてなブックマークFirefox拡張のせいらしい。
https://addons.mozilla.org/ja/firefox/addon/11285/
から1.1.4以降のバージョンをインストールすれば解決します。
まったく人騒がせな。
前回の記事「オブジェクト指向型のプログラムの考え方(1)」
さて、今回の例は「PHPからwordpress(以後WP)に記事を投稿するシステム」になります。
私がオブジェクト指向プログラミングを書くときはまず外枠を作って、あとは後ろから逆向きに考えていきます。っと言っても分からないので例題を作成しながら手順を説明していきましょう。
まず外枠ですが、これは今回作るプログラムがいったい何をする物なのか?という一番大きな区切りです。
「WPに記事を投稿する」場合の外枠を考えてみましょう。
この機能だけであれば「WPに記事を投稿する」というのが外枠になりますが、それでは寂しいので汎用性を持たせておいて新規投稿だけじゃなくてWP関連全てを扱うというのを外枠に設定しましょう。
それをそのままプログラムに書けば class wordpress () { } が作れます。
外枠ができたので、次は何をすればいいのかを分解して考えていきます。
例外はあるでしょうが基本的に動詞ごとに機能を分解していきます。
今回必要なのは「WPに記事を投稿する」という機能ですので、この機能を持つ関数を名前だけでいいので作ってしまいます。これで
class wordpress {
function sendWpNewPost( ) { }
}
までができました。
この次も後ろから考えます。つまりこの関数が何をするかは気にしないで最終的に何が出力されるのか?を考えちゃいます。
この関数はWPに記事を投稿するという目的の関数ですので、とりあえずは投稿が成功したかどうかが分かればいいですね。って事で return に true か false が出力される事まで決まりました。
では、次は何をすれば先ほどの出力結果を得られるのかを考えます。
出力結果はWPに投稿が成功したかどうかなのでWPにどうやって投稿すればいいかを探すと、WPにはXMLを受け取って色々と操作ができるXMLRPC APIを持っているらしいので今回はそれを使って投稿します。
WPのXMLRPC APIについては今回は詳しくは説明しませんが、新規投稿するという意味のXMLを作成してそれを送信する事でWP側から結果をXMLで受け取る事ができるようです。
という事でここで新しくやることが増えました。これを分解して考えると「新規投稿するというXMLを作成する」「XMLを送信する」「結果を返す」の3つに分けられます。このまま3つに分けてもいいのですが、少し考えてみると「新規投稿するというXMLを作成する」というのは自分自身の関数sendWpNewPostと1:1で対応する機能なのでそのままsendWpNewPost上に書いてしまいます。また、同じように「XMLを送信する」と「結果を返す」については1:1に対応していますね。そういう場合もくっつけてしまって1つの関数 function sendXml( ) { } を作成します。
sendXmlも同じように下から考えて作っていきます、出力はXMLを送信した時に返ってきた結果で、その結果を得るには~を考えると最終的には送信するXMLが必要だとわかります。その関数内で必要な情報がある場合はそれを関数の引数に入れて
// XMLの送信
function sendXml($message) {
$response = $this->client->send($message);
return $response;
}
ができます。基本機能としてはこれでいいのですが、このままでは結果がXMLだったりエラーの処理が入っていないのでそれらについては用途によって追加します。
これでXMLを渡せば結果が返ってきますので、その結果を見てtrueかfalseを返す事ができるようになりました。
次は送信するためのXMLを作成するには~・・・と下方からどんどん何が必要なのかを考えながら最終的に必要な情報がでてくるまで上に上にプログラムを足していく形で作成し、外部から必要な情報を引数にいれていきます。(このとき、クラスの中ではGLOBALやDBを直接参照したりという事は基本的にしないようにしましょう。それらの情報が欲しい場合は引数でもらってくるようにしてください。)
これでfunction部分は何となく作れるようになりましたかね?
長くなってきたので次回はコンストラクタとオブジェクト変数の使い方について書いていきます
最近はとりあえず動くプログラムなら書ける人ってのは結構いると思いますがソコから先へ進むのは中々大変ですよね。
この記事を足がかりにしてステップアップできた人とかいればいいなと思います。
オブジェクト指向でプログラムを書くと何がいいかって言うと
- オブジェクト毎に分かれているので保守性に優れテスト、デバッグが楽になる。
- 他のプロジェクトに流用したり他の人が簡単に再使用できる。
- なにより1つ上のレベルみたいで書けるとかっこいい
でも実際はオブジェクト指向プログラミングと言ってもそんなに大げさな物ではありません。
プログラムを書く前にちょっと整理するだけでソレっぽくなります。
私流の方法ですが、最近作成した「PHPからwordpressに記事を投稿するシステム」を例にして次から説明していきます。
今日初めてSkypeミーティングなるものを行いました。
ウチ含めて3社のうち、1社が車で1時間半かかるとこにあるので必然的にSkypeでミーティングしようということになったんです。
ミーティング方法は音声チャット+グループチャットです。
ミーティングするまでは、色々不便なとこがあるかなと思ってましたが意外とすんなり、というか僕の中では対面よりいいと思う点がいくつかありました。
1つめとして、ネット環境が前提なので調べものがすぐできること。セキュリティ上ネットを開放していなくて、出先でサイトが紹介できない、とかがなくなります。
2つめとしてファイルのやり取りがすぐできること。NASからPCにデータ移すの忘れて出先でテンパる、などの心配がなくなります。(僕は何回か経験があります^^;)
3つめとしては、やっぱり交通時間がかからないこと。時間は貴重ですからね。
さすがにファーストコンタクトがSkypeというのはどうかと思いますが3社以上の知った者同士でミーティングするには最適だな、というのが今回の結論です。
ちなみに議事録はミーティング中にメモ帳的なもので書いたあとMLに投げました。IDEA*IDEAによると、Writeboardと組み合わせるとよいそうなので機会があれば試したいと思います。
タガヤっす。
先日、サラリーマン時代からお世話になってるスマートスタイルの野津社長が事務所に遊びにきてくれました。
http://www.s-style.co.jp/
いやはや時代は流れておりますなw
オープンソースをビジネスシーンに広めようと頑張っておられます。
そこで熱くRubyを薦められました。
◆
Rubyと言えばボクがLinuxを勉強し始めた頃、漁るように買っていたLinuxの書籍にちらっと書いているのを見かけ、書いてみたのが99年頃です。ああ、10年前になるんだ・・・(汗)
時は経ち、2005年頃にRailsのおかげで一躍有名な言語になった訳です。
現在では、Rubyファンが増加してるようで、
Rubyで制作されたサイトやアプリケーションを良く見かけるようになりました。
友人のこばPがやってるサービスもRubyで書かれてます。
http://www.xcream.net/
このサービスを作った技術者は、IPAから天才プログラマ認定されてる強者で、今でもRubyの普及活動に勤しんでます。#かなりの変人ですw
とにかく、RailsのおかげでボクはRubyを本気で取り組むことなくPythonに流れた訳です。
スクリプト言語の変遷は以下の通り。
JavaScript #96年のインターン時代に覚えた
VBScript #上記の流れでw
Perl #はじめてのウェブアプリはPerl
Ruby #Perlが書き難かったから
JCL #汎用機のスクリプト
VBA #仕事でw
ASP #これも仕事
JSP #ああ、仕事さ
Jython #趣味で
PHP #主流はPHPへ
SHELL #一応スクリプト
Python #天の邪鬼なんだボクw
うん、他にもあったかも(汗)
スクリプト言語だけでこれだけ遷移してるw
なぜ今更Ruby?と思われるかも知れないので一応動機も書いとく。
個人的にサーバ管理系スクリプトはPythonで書くことが多い。
つーか、WEBアプリでは使ったことがない。
欲しいと思う機能は自分で作るのが基本なので、先人たちがまだまだ少ないPythonでは工数がシャレにならんという大きな問題がある。
動作はさくっといけるんだが動くまでに時間が掛かるんだ。オレの手が遅いのかも知れないが自信を持って言う。それはない。絶対にない。
さっきまでネットでいろいろ調べたんだけど、Rubyもそろそろこなれた感が出てきてると判断できた。つまり、使えそうなライブラリ群がメンテナンスされ、コミュニティも活発、Rubyベースのオープンソースもちらほら。
Macportで調べてみた。
150以上のライブラリを発見できた。
#ちなみにPythonの方が多いw
マック持ってる人は調べてみ。
$ port list | grep ruby
簡単に書けるというメリットを最大限に活かせる環境が整ったと判断したのだ。
アンチRailsのオレとしては、やっと来たかと思ったんだ。
つーわけで、次オイラが作るWEBアプリはRubyで。
決して、国からお金を貰える可能性があるからとか、
そんなよこしまな考えでは一切ないことだけは、
最後に付け加えておく。
http://www.pref.shimane.lg.jp/sangyo/it/2009_05_ruby_dounyu.html
(・∀・)
Googleが検索結果を自分仕様にカスタマイズできるサーチウィキをリリースしました。
本日サービスを開始したサーチウィキを使えば、自分の好みに合わせて Google のウェブ検索結果の表示をカスタマイズすることができます。ウェブページの表示順位を変更したり、検索結果にサイトを追加したり削除したりできるほか、検索結果にコメントをつけることもできます(作成したコメントは、全て一般公開されます)。
僕はこのリリースを見たとき、一瞬「SEO意味なくなんじゃね?」とビビりました。
が、すぐにビビる必要はないという結論に落ち着きました。
理由は
- 日本ではYahoo!のシェアが高い
comScoreによると、日本の検索エンジンシェアはYahoo! 51.3%、Google Sites 38.2%(2009年1月時点)とまだまだYahoo!が使われているようです。 - 最初に上位表示されてないとカスタマイズ対象にもならない
- キーワード毎に検索結果をカスタマイズするのがめんどくさい
そもそも僕はSEOを「良いコンテンツをロボットが理解しやすく、かつ自然にリンクしてもらえる形で提供し続けること」だと考えています。
そういう意味では、しょうもない小細工だけで上位表示させているサイトが排除されるので歓迎すべきことだと思っています。
ただ、僕はYahoo!にこの機能がついたらいいなぁと思います。
未だにYahoo!の検索結果は信用なりません。
例えば、「トラック用品」で検索すると1位に表示されるのは以下のサイトです。
http://trust.wsd.jp/(Not Foundになります)
(ちなみにASENSの「パーマン・ドクターマン・ジーマン」は7位です)
http://wsd.jp/を見るとわかりますが、このサイトはアクセスアップをうたう業者のサイトのようです。
どうしてこのサイトが1位なのかさっぱりわかりませんが、とにかくYahoo!にこそサーチウィキが必要なのではと思います。
ところで、サーチウィキのカスタマイズ結果は他人の検索結果に影響するのでしょうか。
Googleのリリースにはそのような表記がないので、今のところカスタマイズ結果は本人にしか影響しないようです。
できれば、多くの人が評価したサイトが上位表示されるような仕様になって、スパムサイトを一掃して欲しいものです。(特にYahoo!)
Movable Typeをオフラインで動かすための「InstaMT」
電車の中で仕事するためにInstaMTなるものを入れてみました。
InstaMTとは、ローカル環境でApache、MySQL、ActivePerl、MTOS 4.1を動かすためのデモ環境構築パックです。XAMPPのMT特化版みたいなやつですね。
ネットがない客先でデモするとき、僕みたいにオフラインでサイト制作したいときに便利です。
ただ、インストールはサクッとできたのですが、4.1の英語版なんですね。
僕は4.25日本語版が使いたい!
というわけでここを参考にMTOS4.25日本語版に入れ替えました。
ついでにここを参考にPHPも入れてみました。
で、実際に使ってみた感想なんですが
激しく遅い・・・( ゜д゜)
記事が2、3個しかないのに再構築に1分て。こんなに遅かったっけ?
チューニングできたら速くなるんでしょうけど、めんどいから今回はパスの方向で。
オフラインで動かせるからよしとします。
ちなみに、いつの間にかMovable Typeのオフラインマニュアルは同梱されなくなったようなので、Website Explorerでオンラインマニュアルをぶっこ抜いて使ってます。
便利便利。
今回はSmartyを使用して簡単にツリーを作成する方法です。
まずphpの処理で、配列のキーに親の番号、値にノードのIDを持つ配列を用意しておきます。
例)
$arrChild = array(array(1,3), array(2), array(4,6), array(), array(5),array(), array())
そしてSmartyの呼び出し用のテンプレmain.tplと再帰用のtree.tpを用意します。
main.tpl——————————-
{assign var=”id” value=”0″}
{include file=”tree.tpl”}
—————————————
tree.tpl——————————–
{foreach from=$arrChild[$id] item=id}
<処理>
{if $arrChild[$id]}
{include file=”tree.tpl”}
{/if}
{/foreach}
—————————————
これだけでどれだけ巨大なツリーでも処理が行えます。
この再帰呼び出しのキモはtree.tplの1行目の
{foreach from=$arrChild[$id] item=id}
の部分になります。
最初にこの行が呼び出されたときは$idは0が入っており、最初に
$arrChild[0]の中をforeachで回しますが、このときitemにidを指定しているのでこのループの内側では$idは$arrChild[0][0]に入っている1になります。
そして{if $arrChild[1]}を行うと中身が入っているので{include file=”tree.tpl”}が呼ばれます。
そうすると次は$idが1の状態で{foreach from=$arrChild[$id] item=id}が呼ばれ・・・
という再帰処理が行われます。
結構使えるテクだと思いますのでお試しあれ・・
[Linux]cronで日時指定の動作を設定する
タガヤっす。
たまには技術情報をばw
cronを使うことって多いですよね、例えば。
毎時1回
毎日1回
毎月1回
とか、いろんな設定ができます。
でもそうじゃない。
ある日時に1回だけ実行したい。
例えば、ウソをついていい日にウソのHPをアップし、ウソをついていい日が終わったら元のHPに戻す。#エイプリルフールって言えって?w
以下のような場合の設定を書きます。
A.html #通常
B.html #異常w
#.htaccess
DirectoryIndex A.html
#.htaccess.april
DirectoryIndex B.html
これをcronで入れ替えればいい。
cronでキックするシェルを書く。
#april.cron
#!/bin/bash
cd /var/www/html
mv .htaccess .htaccess.bk
mv .htaccess.april .htaccess
#usual.cron
#!/bin/bash
cd /var/www/html
mv .htaccess .htaccess.april
mv .htaccess.bk .htaccess
はい、ここまでで必要なファイルは用意できましたネ。
これをcrontabを使って設定します。
# crontab -e
0 0 1 4 * /var/www/cron/april.cron 1> /dev/null
0 0 2 4 * /var/www/cron/usual.cron 1> /dev/null
保存してOK.
ま、心配ならテストしてちょー。
あと、イベントが終わったら、必ず。
# crontab -r
として、cronの設定を解除しておきましょう。
来年の同じ日に実行されてしまいますよw
最近のコメント