exec-php WordPressでPHPを使えるようにする

WordPressでPHPを使うにはテンプレートに直接記述する必要があるが
exec-phpというプラグインを使うと簡単に使えるようなります。
管理画面からプラグインを検索すれば簡単に見つかります。

インストールして設定は特に無し。
すぐに使えるようになります。
投稿でも固定ページでもどちらでもPHPを使えます。

ただ、ビジュアルモードでの投稿はできないため、
管理画面のユーザー->あなたのプロフィールで
ビジュアルリッチエディタを使用しないにチェックを入れてください。
PHPを必要とするひとは別に必要ないですよねw

仮にチェックを入れなくても問題ないです。
投稿ページに警告が表示されるだけです。
ただ、ビジュアルに切り替えると記述したPHPがコメントアウトされるので
それだけ注意すれば問題ないです。

WordPressでトラックバックする方法が全く分からなったw

WordPressでトラックバックする方法が全く分からなかった。
ネットで調べても、トラックバックの問題やバグについてのことは書かれてたけど、
トラックバックの仕方について調べてもなかなか見つからなかった。

実際にやることは単純で、
記事の投稿ページの表示オプションをクリックすると画面に表示ってチェックボックスの項目がでる。
その中のトラックバック送信を選択すると下の方にトラックバック送信ってボックスがでるので、
そのにURLを記述すれば問題ない。

単純に表示されてなかっただけです。
設定の項目からやるとおもってたから表示オプションってのは完全に盲点だったorz

evernoteのクリップボタンを設置してみた

最近は仕事メモ代わりに、
役立ちそうなサイトをひたすらevernoteに保存することが多くなってきた。
このブログに需要があるかと言われれば、ないかもしれない。
クリップしてもらうブログを目指すとうことでクリップボタンを設置してみました。

自分はSite Memory for WordPressってのを使いました。

evernoteの公式からもwordpress用(WP Evernote Site Memory)のがあるけど、
javascriptのエラーが出て使い方がわからなかった。
インストールするだけと書いてるけど、うまく動作しない。

evernoteのサイトからクリップボタンのリンクを作ることができます。
設置したのはいいけど、
両サイドのカラムも保存してしまうので見た目にも保存時間やサイズ共に納得ができない。

公式のプラグインで動いている人はそれでいいけど、
それでは動かな人のために
Site Memory for WordPressの設置方法を簡単に書きます。
1.とりあえずインストール

2.設定ページへ
・お好みの画像を選択
・サイト名を入力
・ノートは空白
ユーザが未作成のノート名を指定すると勝手に作られてしまうので、
未指定の方がいいです。

・クリップする範囲を設定します。
基本的にidで囲まれた部分を指定します。
テンプレートによって違うけど、
自分の場合は記事ごとに
divタグの中に id=”post-◯”みたいな感じになっていて
このdivタグの中に記事が入っています。
そのため、記事のみを保存できるようにするには
post-%post_id%をクリップするコンテンツの欄に記述します。
(もしかしたら、記述済みかも(;^ω^))

・アフィリエイトをするつもりが無い人は空白で

このブログの場合の例
実際にはこれだけ設定しておけば問題ない。

これで設定は完了です。

3.ボタンを設置
<?php if (function_exists(‘site_memory_the_note_it’)) site_memory_the_note_it();?>

これを記事のページのテンプレートにコピペします。
これはテンプレートによって違うため何とも言えませんが、
私のテンプレートの場合は、
index.php(記事一覧) single.php(個別記事)となっているので、
適当なところに入れてください。

4.CSSで位置調整して完了です。

WordPressにソーシャルボタンをつける

WordPressにソーシャルボタンを簡単につけることができます。
簡単につけることができるのはプラグインのおかげですが。
Social Bookmarking JP

これのほかに
WP Social Bookmarking Light
ってのもある。
数はこっちのほうが多いみたいだけど、

レイアウトを変更するときにこっちのほうが変更しやすかったので
前者を採用しました。

設定ページで表示できるボタンの数や、
記事の上か下かのどちらかに設定することができます。

使い方はどっちもシンプルなのでおすすめです。

Android2.1プログラミングバイブルを買ったのでアプリを作ってIS03を使い倒す(予定)

IS03を使い倒すにはどうすればいいか考えた結果
自分でアプリを作ってみたら面白いのではないかという結論に至りました。
例え機能が少なくても
「自分で作った、自分にとって使いやすくて、自分だけのアプリ」
ってカッコよくないっすか!!
(これって厨二病ですか?www)

で、早速この本を買いました。
amazonのレビューとか他のサイトでも評判が良かったのと、
android2.1に対応している点です。
(IS03は2.1です。)
最終的には実際に書店で立ち読みして、これが分かりやすいと思って決めました。


本書には
EclipseのインストールからAndroidの開発環境の構築といったり、
シミュレータや実機での実行方法についても触れられています。

肝心の中身ですが、半分程度しか読んでないけど非常に分かりやすいと思う。
機能ごとに章分けされているし、ソースコードが簡潔なので、
サンプルコードを入力するのが楽。
別の本を見たとき、コードが長々と書いてあって嫌になった。

プログラム初心者がこれを読んで理解出来るかというと
そうでもないと思う。
javaもしくはオブジェクト指向の知識くらいは必要だと思う。
自分はjavaの本を簡単に読んだことがある。
(自分で自由にプログラムを書くことはできない、サンプルが必要w)

javaに一度でも触れていたので
Androidのプログラムもさほど困らずできたと思う。
もちろん、本の中でも説明はある程度あるけど、
javaやオブジェクト指向の本ではないので、触れない部分もある。

他の本のレビューを見ても同様で、
ある程度のプログラムの知識が必要みたいです。
一つ(C言語等)の言語を知っていれば
さほど難しくないけど、
javaで記述するのでjavaの知識はあるに越したことはない。

ソースコードの解説は分かりやすいので、理解しやすいと思う。
しかし、定数による挙動の違いなどの説明が少ない気もする。
そのため、自分で変えて確認するか、どんな定数が用意されているか確認するしなければならない。
まぁあんまり使わないから紹介されないだけかも知れないけど。

最後に、RPGやモグラたたき、Titterクライアントなど
いろんな機能を組み合わせたプログラムの説明があるので、
早く各機能をマスターして挑戦したい。

これからの成長次第で追記または新規で記事を追加していきたいと思う。
ちなみにjavaを勉強した本はコレ。

YDL 6.1が公開されました

Yellow Dog Linux v6.1が
フィックスターズから公開されました。

YDL v6.1が何がすごいかと言うと、
ps3vram (?)ってのを使うとRSX(グラフィックボード)の
VRAMの領域を使えるようになっているらしいのです。
これで256MBの領域も使えるようになったので
全部で512MBになった。
これでも少ない気もするけどw

それにCellSsってのが入っているらしい。
これは、自動で関数ごとの並列性を抽出して並列化してくれるものらしい。
並列プログラムをかけない人には便利な機能かも。

今度、時間があったらYDLをインストールしてみたいと思います。

bashにspu-gccのパスを設定する

Cell SDKをインストールすると
spu-gcc ppu-gcc等が使えるようになる

俺だけじゃないと思うけど
フルパスを指定しないと使用できない。
spu-gccやppu-gccの場所は
/opt/cell/toolchain/bin/にある。
パスを指定してあげると簡単にgccのように使うことができる。

ホームディレクトリに
.bash_profileってファイルがあるから
そのファイルに
export PATH=$PATH:/opt/cell/toolchain/bin/
って記述を追加するだけ

保存したら
source .bash_profile ってコマンドを入力すると
フルパスを入力しなくても利用できるようになる。

Cellのお勉強 DMA転送編

DMA転送についてのアセンブリ編

アセンブラでのDMA転送は
チャネルにパラメータを書き込むことで実行できる。

前回、DMA転送の関数
void spu_mfcdma64(volatile void *ls_addr,
                                       unsigned int ea_h,
                                       unsigned int ea_l,
                                       unsigned int  dma_size,
                                       unsigned int tag_id,
                                       unsigned int cmd);

この関数とまったく同じ動作させるためには
チャネル16番から21番にパラメータを書き込む。

チャネル16番はLSのアドレス
チャネル17番はメインメモリのアドレスの上位アドレス
チャネル18番は下位アドレス
チャネル19番はDMA転送サイズ
チャネル20番はタグ
チャネル21番はDMA転送の種類(送信なら32、受信なら64)
関数の引数順番ととチャネルの番号が対応しています。

spu_writech(imm, 1 ra);
spu_mfcstat(unsigned int type)
では
チャネル22番から24番まで書き込む。
チャネル22番はタグマスク
(チャネル20番に書き込んだタグの値の左に1bitシフトした値)
チャネル23番はタグステータスの更新リクエストの書き込み
( 0なら無条件、1ならどれか一つでも完了していれば更新、2なら全部が終了したら更新)
チャネル24番はタグステータスを読み込み

書き込み命令と読み込み命令は
wrch   ch,    ra
rdch    rt,     ch

ロードストアとか細かな命令について全く説明してなかったので
アドレス計算とかは、また今度と言うことで・・・
今回は、それぞれのレジスタ100番以降にパラメータが格納されていることということにしといてください。
各レジスタの中身ついては、適当にお任せします。

wrch   $ch16,   $100
wrch   $ch17,   $101
wrch   $ch18,   $102
wrch   $ch19,   $103
wrch   $ch20,   $104
wrch   $ch21,   $105

wrch   $ch22,   $106
wrch   $ch23,   $107
wrch   $2,         $ch24

記述だけならこれだけ書けば動作します。
タグの値何かは、
ビットシフトなのでレジスタの値をいじるか、
即値でいれるなら、それはそれで問題ない。
なので、パラメータは格納されているとしても各レジスタに全部入っていれば
最短でこれだけ記述すればいい。

アドレス計算なんかは、ローテートやシフト命令によって計算できるので、
また機会があれば書きたいとは思います。
その前に、ロード・ストアについても書いたほうがいいかな。

DMA転送について(C言語)

今回はCellで最も重要であるともいえるDMA転送について
SPEが参照できるのは自身のLSのみであり
メインメモリは参照できない。

DMA転送によってメインメモリからデータを転送する。
DMA転送命令は
spu_mfcdma64(32)
mfc_get
mfc_put
などがある。

まぁどれがいいのかってのは分からないけど、
動作自体は同じなので問題ない。
今回はspu_mfcdma64について
この関数はこんな感じになっています。
void spu_mfcdma64(volatile void *ls_addr,
                                       unsigned int ea_h,
                                       unsigned int ea_l,
                                       unsigned int  dma_size,
                                       unsigned int tag_id,
                                       unsigned int cmd);

ls_addrはLSのアドレス
es_hとes_lはメインメモリ側のアドレスで
es_hはそのアドレスの上位32bit
es_lは下位32bitとなる。
mfc_ea2h()マクロとmfc_ea2l()ってのが用意されているから
64bitで渡されたアドレス(addrとすると)
mfc_ea2h(addr)マクロとmfc_ea2l(addr)とすると
自動的に上位bitと下位bitに分けてくれる。

dma_sizeはDMA転送サイズを指定する。
DMA転送のサイズは
1,2,4,8,16byteまたは16byteの倍数で最大16kBとなっています。

tag_idはDMA転送のタグをしています。
転送するにあたって問題はないけど、同期をとるときに使用します。

cmdはDMA転送の種類を指定します。
細かいのはよく分からないので
(SPEから見て)送信の場合は32
受信の場合は64を入力します。

一応、MFC_GET_CMDやMFC_PUT_CMDでも送信受信の指定ができます。

同期を取るために
spu_writech
spu_mfcstat
ってマクロと関数が定義されています。

spu_writech(imm, 1 ra);
spu_mfcstat(unsigned int type)

immはMFCに渡すチャネル番号を指定。
MFC_WrTagMaskと書けば問題ない。(数値だと多分22かな?)
raはタグの指定
DMA転送時に指定したタグを、1bit左にシフトした値がタグマスクになります。

typeはDMA転送の終了時にタグが更新されたかを確認します。
MFC_TAG_UPDATE_ALLと書けばいい。
これは上でセットした、タグマスクの完了を待つという意味。
(数値で入力する場合、多分0,1,2のどれを入力したかで動作が変化すると思われる。
0なら無条件、1ならどれか一つでも完了していれば、2なら全部が終了したら・・・
今回の場合は2かな)
詳細についてはフィックスターズのサイトをご覧ください。

自分で定義したものなら、ともかくAPIとして定義されてるのは調べるのが面倒です。
そのためC言語と違ってマクロや関数とかを使わないので、
アセンブラのほうがシンプルです。
次はアセンブリでのDMA転送について説明したいと思います。

Cellのお勉強 除算編

前回に浮動小数点演算について説明したのは除算のためでした。
実数でないといろいろ問題があるんで

SPUには除算命令ってのがありません。
そのため、複数の命令を使って除算を実現します。

後、浮動小数点を即値でロードする際ですが、0.5とか1.0とか入力しても駄目です。
(何かやる方法があればなぁと思い調査中)
通常(コンパイラ)は、浮動小数点で表した数値と同じbit配置の数値で入力しています。
これも、前もって説明しておけばよかったと反省。
今回は、そんな細かいことは無視して実数をそのまま入力するようにします。
その方が分かりやすいので。

除算プログラムですが、
一度簡単なプログラムを見せてから説明したほうが早いと思うので、
とりあえず見てください。

a = 1.0
b = 0.4
c = a / b を考えます。

il            $5   1.0
il            $6.  0.4
frest      $7,$6
fi            $7,$6,$7
fm         $8,$5,$7

ってな感じで、答えは$8に入ります。
ilってのは単にロードで、
今回は、レジスタ5に1.0を、レジスタ6に0.4をロードしました。
frestですが、これは0.4の逆数を求めています。
つまり、1/0.4です。
しかし、この計算では若干精度が悪いといった問題があります。
そこでfiという命令を使って
より精度の高い逆数を求めます。
$6には元々の実数の値を、$7にはfrestで求めた逆数を入力します。
逆数を求めた結果が$7に格納されます。

fmは前回にも説明した
浮動小数点の乗算命令です。
要は
c = a * (1/b)
を計算しているんですね。

なんで、除算をするのにこんなことをしているのか
これはちょっと、自分も自身はないのですが、
コンピュータには割り算命令がないってのは、最初に説明しましたが
(全部がそうとは限らない(?)自分も分からないのですがPentium 4にもないと聞きました。)

そのため、逆数を求めるテーブルってのがありまして、
そこから逆数の値を求めます。
でもそれだと精度が悪いため、
ニュートンラプソン法を使って、より精度の高い値に収束させます。
恐らく一回しか、計算してないようですが・・・
元々、それなりの値を初期値を入力しているので
1回でも、精度の高い値に収束するみたいです。
このように、精度の高い逆数を求めるのが、fi命令だと思われます。
これを複数回行えばより精度の高い値も出せそうですが
1回でも十分な結果は得られます。