MODxというCMSがすごいよ!

今まで僕が試したことのあるCMS・Blogツールは、インストールしてちょっとだけ触ってみたものを含めると、なんだかんだで3、40ぐらいある。各ツールは、もちろんそれぞれ特徴があるのだけれども、似ているといえば似ていて、同じような系統のものが多かった。

Continue reading “MODxというCMSがすごいよ!”

PHP,Rubyでの入出力まわり(文字列、ファイル、ストリーム)

最近、XML、HTMLファイルをあれこれする事が増えてきた気がする。ファイルに書き込んだり、読みこんだりするときの入出力に関するメモ。

PHP

参考。PHP: ファイルシステム関数 – Manual

まずは、fopenや、fsockopenで、ファイルポインタを取得する。

ファイルをすこしずつ読み込んでいく場合は、ファイルポインタから、
fgets(ファイルポインタから1行取得)、
fread(バイナリ・モードでファイルを読み込む)、
fgetcsv(CSV用)、
などを使う。書き込みは、fwriteで。

<?php
$handle = @fopen("/tmp/inputfile.txt", "r");
if ($handle) {
	while (!feof($handle)) {
		$buffer = fgets($handle, 4096);
		echo $buffer;
	}
	fclose($handle);
}
?>

ファイル全体を一度に処理したい場合は、filefile_get_contentsを利用すればいい。

文字列と配列の変換

データが、欲しいときに、欲しい形であるとは、限らない。
配列、文字列、ファイルなどにある情報を適当な形にしたい時。

  • explode文字列を文字列により分割する->配列
  • split正規表現により文字列を分割し、配列に格納する->配列
  • implode配列要素を文字列により連結する->文字列

これらの関数で、配列と文字列が変換できる。

ストリーム

大き目のデータをキャッシュとしてファイルに保存しておいて、あとでも利用するときなど、ファイルを使っていろいろするとき
(ファイルからデータを読み込む場合と、すでに文字列などでデータをもっていてそのまま使いたい場合の両方があるときとか)。

1.ファイルから読み込んだデータを加工して、適当な形(文字列とか)にしてから、処理に回す。

2.文字列を、ポインタを使って、ファイルからデータを読み込む場合と同じ処理にまわす。参考、データ (RFC 2397)

<?php
$TEXT =<<<EOF
data1
data2
data3
EOF;
$handle = fopen("data://text/plain,$TEXT", 'r');
if ($handle) {
	while (!feof($handle)) {
		$buffer = fgets($handle, 4096);
		echo $buffer;
	}
	fclose($handle);
}

?>

PHP 5.1.0 以降なら、
php://memory とか、
php://tempも使えるみたいです。
PHP 入出力ストリーム

Ruby

Fileや、IOクラスを使う。

openや、
File.openで返されるオブジェクトを操作する。

filename = "data.txt"
file = open(filename)
#file = File.open(filename)
text = file.read(file)
print text
file.close

ファイルを一度に読む場合、クラスメソッドを使って

data = File.read("foo.txt")

ともできる。

ファイルを一行ずつ読む場合は、

filename = "data.txt"
file = open(filename)
while text = file.gets do
	print text
end
file.close

のようにする。あるいは、

filename = "data.txt"
open(filename){|io|
	while line = io.gets
	print text
	end
}

のように、closeを省略することもできる。

Ruby メモ

  • HTTPやFTPからファイルを開きたいときは、open-uriを使う。
  • io.readlinesで、ファイルの各行を配列として取得できる。
  • io.eachとeachメソッドが使える
  • 出力は、io.write,io.print,io.printf,io << strなど。
  • io.rewindでファイルポインタを先頭にできる。

配列と文字列

配列->文字列は、joinで。

p ["a", "b", "c"].join(',') #=> "a,b,c"

文字列->配列は、splitscanで。

p "   a \t  b \n  c".split(/\s+/) # => ["", "a", "b", "c"]
p "foobarbazfoobarbaz".scan(/ba./)
# => ["bar", "baz", "bar", "baz"]

%wで、空白で分割して配列を作れる。

p %w(a b c) # => ["a", "b", "c"]

StringIO

StringIOオブジェクトを使うと、文字列のデータを、IOオブジェクトとして扱うことが簡単にできる。

require 'stringio'
str = << EOF
data1
data2
data3
EOF
io =StringIO.new(str)
#io.puts(str)
io.rewind
p io.read

中毒性が高いとウワサの「Desktop Tower Defense」に、ばっちりはまってしまった

最近、方々のブログで取り上げられている「Desktop Tower Defense」というゲームに、僕もどっぷりはまっています。ジャンルとしては、いわゆる“防衛ゲーム”というものに分類されるもののよう。寝不足注意!は、うそではありませんでした。

Desktop Tower Defenseとは

このサイトで、無料でプレイできるFlashゲーム。

敵?がどんどん沸いてくるので、砲台を設置して撃退するという内容です。
頭を使う「パズルゲーム」みたいな感じではないでしょうか。
サイトは英語ですが、シンプルな仕組みなので、すぐに遊び方が分かります。

このタイプのゲームは“防衛ゲーム”と呼ばれて非常にたくさんの種類があるようです(下の参考リンク参照)。
いくつか、やってみたのですが、僕にはこの「Desktop Tower Defense」が一番はまりました。

他の防衛ゲームで、気に入りそうなのは次の2、3個でした。

Flash Element TDは、敵のルート固定タイプのゲーム。
比較的すぐに終わるし、やりこみもできる。

Revenge of the Stickは、いまいちキャラクターの能力個性がはっきりしないど、導入部分がかっこいいし、“うで”が出ているので気になりました(そして、なにより、筒井康隆氏の虚航船団を思い出しておかしかった!)。

あと、プレイしてはいないけど、有閑倶楽部~ゲーム館 防衛~D-fence 2で紹介されている「D-fence 2」も面白そう。

結局、「Desktop Tower Defense」が、僕には一番合いそう。ユニットの個性がハッキリしているし、画像も、シンプルでかわいらしいから。

Desktop Tower Defenseの公式サイトについて

公式のDesktop Tower Defenseサイトの各項目の簡単な説明。

Play Desktop TD
TOP。Desktop Tower Defenseをプレイする。
Quick Start
チュートリアル。簡単な説明。
Top 100 Scores
上位スコア100(ノーマルとハードモード別)。プレイヤー名ごとのページもある(僕の最近のスコア)。
Challenge Scores
Challengeモードの上位スコア。
Group Scores
グループ別にスコアを見れるみたい。僕は使ったことなし。
Player Mazes
プレイヤーの最近のマップ20個。
News
更新、履歴情報。バージョンは、1.0→1.2→1.5。
Forum
フォーラム。掲示板。Darkが倒せないとか、10K,4Kの攻略方法とか。

難易度、モードについて

プレイできる難易度や、設定がいくつもある。
EASY→MEDIUM→HARDと順番にやっていくと、少しずつ上達していけると思う。

僕も最初は、わけが分からずEASYでやられてしまったのですが、慣れてくると、MEDIUM、HARDもクリアできるようになりました。
他の人の作ったマップや、Youtubeのほかのプレイヤーの動画とかが、参考になります。

難易度
EASY
慣れると簡単。横一列だけ。レベル5のSquirt Towerが一つできれば、まず負けない。
MEDIUM
敵が、縦横二列分で出てくる。SPAWNとかDARKは、最初はきついかも。
HARD
敵が固い。FLYING用の対空Swarm Towerをきっちり準備しておかないと、だめ。
CHALLENGE、FUN モード

特殊なルール、設定の下でプレイできる。CHALLENGEは次から選べる。

THE 100
100レベルまである。僕には、とてもクリアできない。
SPEED
あわただしい。むずかしい。未クリア。
15 TOWERS
15個までしか砲台を置けない。未クリア。
4K SET MAZ
資金4000の砲台で固定。4k fixed walkthrough通りにすればクリアできる。
3K SET MAZE
資金3000の砲台で固定。未クリア。
NO SPLASH
複数の敵に攻撃できる砲台は使用できない。これはクリアできる。
SPLASH
複数の敵に攻撃できる砲台のみ使用可能。未クリア。
SQUIRTS
Squirt TowerとFrost Towerのみ使用可能。未クリア。
5 MINS
制限時間あり。未プレイ。
NO SELL
設置したタワーを売却出来ない。未プレイ。

FUNは次の通り。

TRICKLE
一秒に一匹敵がどんどん出てくる。少し、忙しい。クリア済み。
RANDOM
ランダムに敵が出現する。運かも。クリア済み。
10K GOLD
資金10000でスタートする。最後まで辿り着けず…。
SPAWNS!
敵がSPAWNだけ。クリア済み。
BOXES
箱型の障害物があるモード。クリア済み。
CROSS
マップに十字の障害物あり。クリア済み。

以下は、各砲台、敵の特徴など。

砲台 Tower

ほとんどの砲台が、MAXまでアップグレードすると、能力が大きく上がります。
したがって、基本的には、強化する砲台は絞った方がいいです。

Pellet TowerPellet Tower
安価。壁用。MAXまでグレードアップすると、攻撃範囲、威力共に大幅アップし、攻撃にも使える。序盤にでてくる硬いDarkも一撃で倒せる。Pelletをクリックして、攻撃レンジ内の敵をクリックすると、その敵に照準を合わせてアタックできる。
Squirt TowerSquirt Tower
攻撃の要。 アップグレードすると高いダメージを与えることができる。最大限にアップグレードしたものが、一つ出来ると、急に楽になる。
Dart TowerDart Tower
複数の敵に一度にダメージを与えられる。空中の敵は攻撃できない。敵が群れているときや、分裂後のSPWANなどに役に立つ。
Swarm TowerSwarm Tower
対空タワー。序盤は、Squirt Towerや、複数のPellet Towerでもしのげるけど、後半のFLYING対策用に必須。ないと負ける。
Frost TowerFrost Tower
敵の進行速度を一定時間遅くする。FASTとかによく効く。IMMUNEには効果なし。
Bash TowerBash Tower
周囲の敵にダメージ。一定の確率で敵を一時的に動けなくする。攻撃力大、スピード低。空中の敵には攻撃できない。
Ink TowerInk Tower
インクで攻撃。床に残ったインクの上を歩いた敵にダメージ。通路に密集している敵たちに効果大。序盤のDarkにも使いやすい。空中の敵には攻撃できない。
Snap TowerSnap Tower
クリックして、Fire!を押すと、射程範囲内の敵全てにダメージを与える。アップグレードで麻痺効果も。
Boost TowerBoost Tower
隣接する砲台のダメージをアップする。複数設置で効果が重複。
敵(クリープ、Creeps)

敵の特徴。後半の敵はいずれも固くて、倒しにくい。FLYINGも非常にやっかい。

NORMAL
普通の敵。後半で、数がわらわら来ると、きつい事も多い。
GROUP
数がかたまってくる。
IMMUNE
Frost Towerが効かない。速度もそれなりにある。
FAST
Frost Towerを置いておかないと、どんどん進入される。移動速度が速い。
SPAWN
倒すと分裂(Normalで一回、Hardで二回)。タワーに隙間があると、すり抜けることもある。
FLYING
タワーの上空を飛んでいく。後のレベルでは、Swarm Towerで倒すしかない。
MORPH
他のタイプの敵に変形し、一時的に能力をコピー。
DARK
一定以下のダメージを無効にする。
BOSS
各タイプの大型ボス。ゴールド多い。

Tips、小技、メモ

  • ショートカットキーあり。Sで売る。Uでグレードアップ。Shiftの押しっぱなしで、タワー連続設置など。
  • 敵は最短距離を通ろうとする。道の開け閉めで敵を行ったり来たりさせられる(ジャグリング、jaggling、お手玉)。
  • アップグレードMAXと、それ以外で能力差がものすごい。
  • Boostの効果は重なる。DartやSwarm、Bashなどとうまく組み合わせたい。
  • Frostは、FLYINGにも有効。Swarmの近くに置いて、体力を削りたい。
  • Snapは、THE 100とかで使える?かも。
  • 大量の、固まっている敵は、Dartや、Bash、Inkが有効。

関連リンク

Desktop Tower Defenseの情報ページ

Desktop Tower Defense紹介、感想、レビュー

防衛ゲーム、Tower Defense系まとめ

その他、参考になりそうなページ

PHP、Perl、RubyでのPath(パス)の通し方、クラスの書き方とか

普段、PHPばかり触っているので、PerlやRubyでライブラリを使いたいと思っても、Path(パス)を設定するだけでも一苦労。各言語で、 Path(パス)を通して、ライブラリーを使ったり、クラス、オブジェクトであれこれするためのメモ。

(参考リンクは、cpan,gemsのインストールとか、クラスの書き方などの雑多なもの。)

PHPでPath(パス)を設定する方法

php.ini

「php.ini」ファイルに、include_path を記述する。区切りは“:”(UNIXで。Windowsだとセミコロンに)。ローカルにPEARを入れたときなどに、書いておく。

include_path = ".:/usr/local/lib/php"

.htaccess

「.htaccess」ファイルに、php_value include_path を記述する。php.iniとおなじく、設置場所がちゃんとしていないと動かない。

php_value include_path ".:/usr/local/lib/php"

phpファイルに直接書き込む

ini_set(),set_include_path(),get_include_path(),get_include_path(),ini_restore()などの関数を使う。

set_include_path('/inc');
ini_set('include_path', '/inc');

PHPの別ファイルや、ライブラリの読み込み方

require(),require_once(),include(),include_once()などの関数を使う。allow_url_fopenの設定が”1″なら、「require(http://~.cgi?q=~);」みたいなことも可能。

require_once('Cache/Lite.php');
include 'vars.php';

ファイルはinclude_pathで指定した所から探す。./を先頭に付けると探し方が変わったりする。

_onceが付いている関数は、一回だけ読み込む。require()とinclude()の違いは、require()だとFatalなエラーがでる所。

参考。PHP: include – Manual

PHP クラスの書き方

php4なら、

class Class
{
	var $var;
	
	//コンストラクタ
	function Class($v)
	{
		$this->var = $v;
	}

	//メソッド
	function foo()
	{
		//~
	}
}

php5だとコンストラクタは、__construct() 。メンバー変数に、
public、private、protectedとアクセス権が指定できる。

オブジェクトの使い方は、

$class = new Class($v);
$class->foo();
Class::foo();
PHP 参考リンク PEARなど

PerlでPath(パス)を設定する方法

use lib ~;

use lib qw(~);

でパスが指定でき、use ~とファイルを読み込めるようになる。

@INC

PATHは、「print join(“\n”,@INC);」で確認できる
(@INCは、PATHが入った配列)。@INCに、パスを追加するときは、

BEGIN {
push(@INC, '/usr/local/sbin');
}

とできる。

PERL5LIB

環境変数「PERL5LIB」をShell の設定ファイルに加えておく。

-Iを付ける

#!/usr/local/bin/perl

を書き換えて、オプションでパスを指定することも可能。

#!/usr/local/bin/perl -I /usr/~

Perlの別ファイルや、ライブラリの読み込み方

require

require "jcode.pl";

のように書いて、外部のパッケージを読み込む。読み込まれるファイルは

package library;
sub sub1 {
	#~
}

return 1;

の形で書いておく。library::sub1();と呼び出して使える。

use

パスの通ったところにある「~.pm」ファイルは、

use Jcode;

のようにして読み込める。「::」で階層を表せる。「Module1::Module2」なら、Module1ディレクトリの中のModule2を表している。モジュールは、

package Module;
use Exporter;
@ISA = (Exporter);
@EXPORT = qw(sub1 sub2);
@EXPORT_OK = qw(sub3);

のように書いておく。使うときは、

use Module;
sub1();
use Module qw(sub3);
sub3();

とする。

Perl クラスの書き方、オブジェクト

オブジェクト指向の基礎 Perl講座を参考にしました。
引数は、shift,@_でとっていく。第1引数はクラス名。

package Class;

sub new{
	my $class = shift;
	my $self = {v1 => 1, v2 => 2};
	return bless $self, $class;
}
sub method{
	my ($self, $v1, $v2) = @_;
	# $self->{v1} ~
}

使い方は、

$obj = new Class;
$obj->method(3, 4);
Perl 参考リンク CPANとか

RubyでPath(パス)を設定する方法

-I オプション

Perlと似ていて、-Iでファイルをロードするパスを追加できる。
-I directory

環境変数

PATHに加えて、RUBYPATH、RUBYLIBなどを設定しておく。
Rubyリファレンスマニュアル – 環境変数

Rubyの別ファイルや、ライブラリの読み込み方

load

$: , $LOAD_PATHにある場所や、絶対パスからファイルを読み込む。

load 'ruby.cgi'
load 'ruby.rb'

Rubyリファレンスマニュアル – 組み込み関数 #load

require

require は拡張子 .rb や .so を自動的に補完する。require はライブラリのロード、load は設定ファイルの読み込みなどに使われる。

require "cgi-lib"

Ruby クラスの書き方、オブジェクト

class RubyClass
	attr_accessor :v
	def initialize(v='')
		@v=v
	end
	def method(v1 ,v2)
		# @v ~
	end
end

使うときは、

require 'rubyclass'
obj = RubyClass.new()
obj.method(1,2)

階層、関係がある場合は、
「require ‘class1/class2’」とか、
「class1::class2.new()」とする。

Ruby 参考リンク gems, Ruby on Rails

JaikuのAPIで投稿をするためのPHP(XML-RPC)メモ。

Twitter系のサービスJaikuのAPIの使い方メモ。Jaiku APIでは、情報の取得については、他のサービスを同じような感じでできるのですが、新規の投稿にはXML-RPCを使うみたい。
必要になったので、PHPでXML-RPCを使うときのメモ。

XML-RPCとは

次のページを参考にした。

どうやら、XML-RPCは、HTTP-POSTリクエストで、XMLをやり取りするもののようです。

PEARのXML_RPCを使えば、クライアント側も、サーバー側も簡単に実装できるみたいなので、まずこれを使いました。

以下、PHPのサンプルスクリプトです。

PEARのXML_RPCライブラリを使う場合

$personal_keyと、$userを正しく入力して、$textに投稿したい文字を入れれば、次のスクリプトでJaikuに投稿できます。


<?php
require_once 'XML/RPC.php';
define('JAIKU_SERVER', 'api.jaiku.com');
define('JAIKU_PATH', '/xmlrpc');

$text="Test テスト";
$personal_key="personal_key";
$user="user";

$params = array(new XML_RPC_Value(array(
//"generated" => new XML_RPC_Value(false, 'boolean'),
//"icon" => new XML_RPC_Value(300, 'int'),
//"location" => new XML_RPC_Value('', 'string'),
"message" => new XML_RPC_Value($text, 'string'), 
"personal_key" => new XML_RPC_Value($personal_key, 'string'),
"user" => new XML_RPC_Value($user, 'string'),
),'struct'),);

$msg=new XML_RPC_Message('presence.send',$params);
//print $msg->serialize();
$client=new XML_RPC_Client(JAIKU_PATH,JAIKU_SERVER);

$response=$client->send($msg);
if(!$response->faultCode()){
	print "ok";
}else{
	print $msg->serialize();
	print '<br />Fault Code:' . $response->faultCode() ;
	print '<br />Fault Reason:' . $response->faultString();
}

?>

XML_RPC_Value()や、XML_RPC_Message()で、Jaikuのサーバー側に送るXMLを組み立てています。
実際の中身は、serialize()で見ることができます。

serialize()で送信するXMLを見ると、


<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>presence.send</methodName>
<params>
<param>
<value><struct>
<member><name>message</name>
<value><string>Test テスト</string></value>
</member>
<member><name>personal_key</name>
<value><string>personal_key</string></value>
</member>
<member><name>user</name>
<value><string>user</string></value>
</member>
</struct></value>
</param>
</params>
</methodCall>

のようになっているはずです。

後は、XML_RPC_Client()で、上のXMLをsend()すれば、
Jaikuに新しい記事がポストされます。

(日本語が文字化けして、なかなか、ちゃんと表示されなかった。
php.iniとか,.htaccessも見たけれども、よくわからない。
XML_RPCを新しく入れて、php.iniのinclude_path=”~”の順番を変えたら、
なんとか動くようになった。XML_RPCのバージョンが古いとうまくいかないのかも。)

PEARのXML_RPCライブラリを使わない場合

XML_RPCを使わないで、何とかする場合。
前回のDrupalのJaikuモジュール
の中身とほとんど同じです。モジュールの方では、drupal_http_request()を使いましたが、
下のサンプルでは、
PEARのHTTP_Request()を使いました。

ここでは、ヒアドキュメントで、送信するXMLを組み立てています。


<?php
require_once "HTTP/Request.php";
$req =& new HTTP_Request();

$text="Test テスト";
$personal_key="personal_key";
$user="user";
$RequestURL="http://api.jaiku.com/xmlrpc";

$data = <<< CALL_DATA
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>presence.send</methodName>
<params>
<param>
<value><struct>
<member><name>message</name>
<value><string>$text</string></value>
</member>
<member><name>personal_key</name>
<value><string>$personal_key</string></value>
</member>
<member><name>user</name>
<value><string>$user</string></value>
</member>
</struct></value>
</param>
</params>
</methodCall>
CALL_DATA;

$req->setURL($RequestURL);
$req->setMethod(HTTP_REQUEST_METHOD_POST);
$req->addHeader('Content-Type' ,'text/xml; charset=UTF-8');
$req->addRawPostData($data);

$response = $req->sendRequest();
if (!PEAR::isError($response)) {
	print $req->getResponseBody();
	print_r($req->getResponseHeader());
}else{
	print $response->getMessage();
}

?>

$req->addRawPostData($data, false)で、urlencode()が効くようにもできるのですが、これを
使うと、うまくいかない。

あとは、ブログの記事が、新規投稿か、過去記事更新かを区別できる部分があれば、
これでJaikuとブログの両方にポストできる。

Drupalでは、
jaiku_nodeapi(&$node, $op)の$opに、’insert’とか、’update’が渡されるので、
これを使えばいいらしい。

Drupal用のTwitter系サービスのモジュールを作った

Drupalの利用者でかつ、Twitterみたいなサービスを使っている人なんてほとんど見かけない気もするのですが、
一応、Drupalの投稿に合わせてTwitterみたいなサービス(
もごもご
Timelog
Jaikuの3つ)にも、
合わせて投稿するモジュールが動くようになったので、載せておきます。
(もうすでにどこかで公開されているかもしれないけれど…)

中身は、Twitterのモジュール
Drupalモジュール一覧の下のほう)
を参考にして、ほんの一部分だけ書き直しただけのものです。

一応どれも動作を確認しましたが、
Drupalの内部についても、.infoや.moduleのファイルの書式についても、僕は知らないので、
ただ動くかもしれないものとして扱ってください。

使い方は、オリジナルのTwitterモジュールと同じで、通常のモジュールと同じように有効にしてから、
プロフィールの変更をすればOKです。
!titleが新規ページのタイトルに、!urlが新規ページのURLに置換されるのも同じです。
サービスによって、Usernameがメールアドレスだったり、アカウント名だったりと違うので注意してください。

もごもご投稿用のDrupalモジュール

Twitterのモジュールのごく一部だけを書き換えたもの。
mogo2_nodeapi()の「case ‘update’:」を有効にすると、新規投稿エントリーでなくとも、もごもごに投稿されるようになります(テスト用に)。

mogo2.tgz もごもご用Drupalモジュール。

Timelog投稿用のDrupalモジュール

こちらも、Twitterのモジュールに数箇所の修正を加えたものです。
「case ‘insert’:」と「case ‘update’:」の部分で、新規記事の投稿と、過去記事の更新のそれぞれについてTimelogへの投稿をするかどうかを決めています。
投稿用のテキストはurlencode()ではなく、
rawurlencode()で処理をしています。そうしないと、半角スペースが「+」で表示されてしまいます。

Timelogはタグや、各種コマンド(Timelogヘルプ)が使えるので、
「/B http://~」や「/G」、タグを組み込むと表現が広がるかもしれません。

timelog.tgz Timelog用Drupalモジュール。

Jaiku投稿用のDrupalモジュール

XML-RPCを使わなくてはならなかったので、一番修正が必要だったモジュールです。
最初は、PEARのXML_RPCを使えばいいのかなと思ったのですが、
drupal_http_request()
を良く見たらdrupalの関数でもできそうだったので、モジュールはこちらで動くようにしています。

XML/RPC.phpを使う場合は、「//drupal_http_request」から「/* XML_RPC」の前の「drupal_set_message()」までをコメントアウトして、
代わりに、「/* XML_RPC」から「*/」までを有効にしてください。

jaiku.tgz Jaiku用Drupalモジュール。

Twitterのメモ

その他のCMS,BlogのTwitterモジュール。

Nucleus用のモジュールもあるのかな。Xoopsとかも。

Twitterのところとか、
元のクリップ用メモはこっちでやっています。
こういったTwitter系のサービスはあまり僕の性に合わないのですが、
他のサービスもportalooの名前でアカウントはあります。

作成予定メモ

  • XML-RPCとか。
  • PEARのHTTP_Request Basic認証メモ。
  • ただ、HTTP_Requestするだけの簡単なサンプル↑。と

役に立ちそうなDrupalモジュールの一覧

今、Drupalを少しだけいじっているので、どんなモジュールが使えるのか、
いろいろと調べているところです。以下は、導入(と変更)を試してみた、よさそうなモジュール一覧です。

Drupalの基本的なモジュール導入方法

「modules」ディレクトリなどの特定の場所に、
ダウンロードしてきたモジュールのファイルをアップロードし、管理画面
「管理セクション>
サイトの構築>
モジュール」で設定を保存する。
次に、権限の設定や、各個別の設定をして、モジュールを有効にする。
(この記事の末尾のサイト参照。)

Ping モジュール

参考ページはPing モジュール
Ping送信先は、最新更新Pingサイトリストとかで確認を。

Pingの送信先を複数指定し、Pingがうまく行っているか確認できるようにする。

XML Sitemap モジュール

XML Sitemap モジュール
サイトマップの使用についてはsitemaps.org – ホーム
(英語)。

GoogleやYahoo、Microsoftなどの代表的な検索エンジン用のXML サイトマップを作成するモジュール。
最近では、robots.txtからもSitemapsの通知ができるようになったので、robots.txt内に

Sitemap : http://example.com/gsitemap

としてもいいかもしれない。

TrackBack モジュール

参考ページは、
TrackBack モジュール
trackback | Drupal-jBox.net
公式ページTrackBack | drupal.orgでは、5.x系のモジュールも公開されています。

TrackBackの送受信を可能にするモジュール。

Spam モジュール

Spam | drupal.org

Drupalのスパム対策用モジュール。

Akismet モジュール

Akismet

WordPressでは、結構有名なスパム対策用のプラグイン。
最強の呼び声高いブログ用対スパムプラグイン「Akismet」
Akismet 有名ハックの解説と追加ハック。API Keyの取得が必要。

captchajp モジュール

captchajp モジュール

日本語キャプチャによる認証で、スパムを防ぐためのモジュール。
captcha モジュール(1-10 までのランダムな 2 つの数字を足し算するという問題による認証)もある。
参考、
日本語専用のスパム対策モジュールを作る!-Captchaの改造への道-

Content Construction Kit (CCK) モジュール

Content Construction Kit (CCK)

オリジナルのコンテンツタイプを作って、自由に入力フィールドをカスタマイズするためのモジュール。
この下にある「Meta tags モジュール」は、各ページごとにdescriptionやkeywordsなどを設定できるモジュールですが、
こちらはもっと自由にフィールドを設定できるモジュールです。

類似のモジュールとしてflexinodeモジュールもある。

Meta tags モジュール

Node (key)words

metaタグ「
abstract、
copyright、
description、
geourl、
keywords、
robots」などを使えるようにする。

Tagadelic モジュール

参考ページは、Tagadelic モジュール
日本語翻訳ファイルも作成してくださっています。解凍してpoデイレクトリの中にアップロードします。

複数のタグをタグクラウドとして表示するモジュール。

taxonomy_dhtml モジュール

参考ページは、Taxonomy dhtml モジュール
taxonomy_dhtml | Drupal-jBox.net

カテゴリに分類されたコンテンツを、まとめて一覧表示するモジュール。

Taxonomy Menu モジュール

Taxonomy Menu モジュール | Drupal.0829.info

サイト全体のナビゲーションメニューの中にカテゴリのナビゲーションを追加する

SiteMenu モジュール

SiteMenu モジュール

カテゴリごとに、記事をまとめて一覧表示するモジュール。
コンテンツの件数や最新のコンテンツを表示可能。

Archive モジュール

Archive モジュール

ダイレクトにURLを指定して、記事を表示する。「http://example.com/archive/2007/1/1」
Monthly Archive
Weekly node listing もあり。

Taxonomy Breadcrumb モジュール

Taxonomy Breadcrumb モジュール

パンくずリストを表示するためのモジュール

Site map モジュール

Site map | drupal.org

サイトマップや、カテゴリー別RSSを表示する。

Read More Tweak モジュール

Read More Tweak モジュール

“続きを読む” リンクの位置を調節するモジュール。

AdSense モジュール

AdSense | drupal.org

Google Adsenseの広告を表示するモジュール。使うには、管理セクション >> ユーザの管理 >> プロフィールで
「profile_google_adsense_client_id」の名前を付けた一行テキストフィールド(single-line textfield)を追加してから、
ユーザアカウントで「profile_google_adsense_client_id」の値に“pub-***”を入力する必要があります。

Adsense Injector モジュール

Adsense Injector | drupal.org

記事内にGoogle Adsenseの広告を表示するモジュール。

Service links モジュール

Service links | drupal.org

記事内にdel.icio.us, Diggなどへのリンクを表示する。

Google Search モジュール

Google Search | drupal.org

Google’s Site Search用のモジュール。

jBox モジュール

jBox モジュール
日本語プロフィール+jBoxモジュール

日本語環境(メールの文字化、日付)用モジュール。
日本語環境用モジュールは、Update Locale モジュールもある。

Rounded corners モジュール

Rounded corners | Drupal.0829.info

角丸を実現するためのモジュール。

人気ランキング ブロック

人気ランキング ブロック。モジュールではない。
Ruby,Cronも使用。

ブロックに PHP コードを記述することで、
人気記事ランキングを表示する方法。

Twitter モジュール

Twitter | drupal.org

Drupalの新規更新記事を、Twitterに投稿するためのモジュールです。
上にあるGoogle AdSense モジュールと同じく、プロフィールの変更で使えるようになります。

自分のプロフィールの設定ページに、Twitter settingsの項目があるはずなので、正しく値を入力してください。

Text formatは、空欄にすると「New post: !title (!url)」と入力したときと同じ結果を生みます。
!titleが新規ページのタイトルに、!urlが新規ページのURLに置換されて
「New post: タイトル (http://~)」でTwitterに投稿されます。!title と!urlを使って形式は自分で決められます。

Drupal、モジュール関係の参考サイト

  1. 拡張モジュール | ≡ Drupal Japan ≡
  2. Modules | drupal.org
  3. モジュール情報の検索結果 | Drupal-jBox.net
  4. MODULE | Drupal.0829.info
  5. Drupal モジュール | Diaspar Journal
  6. Perl Tips: 「Drupal」 のまとめ
  7. Drupalの便利なモジュール | Momokuri’s
  8. 備忘録 – Hironoblog
  9. Drupal-J.com | Drupal導入試行錯誤痕跡蓄積サイト

Drupalの参考本 書籍

非デザイナーのためのデザイン本 ノンデザイナーズ・デザインブック

ノンデザイナーズ・デザインブック
を読みました。プロのデザイナーでない人のために書かれたデザイン基礎学習のための参考書。

上手にデザインするための4つの基本原則

本書では、気にすべきデザインの基本原則として、4つのポイントが示されている。
この4点の原則(コントラスト、反復、整列、近接)の説明を、具体例を挙げなが進めていくというのが全体の構成です。

Webに限定したデザインの本ではなく、どちらかというとデザイン一般についての本ですね。
説明に使われている例も、Webサイトの例はほとんどなく、ペーパー・印刷物の具体例がほとんど。
デザインのちゃんとした基礎を勉強したことがない人には、これ以上ないぐらいに役に立つ本と思われるのですが、
逆にWeb関係のデザインとか、ユーザビリティの勉強には期待できない本です。

Webサイトの運営に慣れてくると、いつのまにかやっていたり、こうした方がいいのかなという事がなんとなくわかってくるのですが、
そういった点がなんとなくではなく言葉できっちり表現されています。

レイアウト、デザインの説明としては、まったく問題がないものの、具体例の大半が英語の印刷物についてです。
また、フォントまわりの話も、英語についてのものなので、その点は注意が必要か
(一応、Appendixに和文フォントについての説明もありますが)。

以下、4つのポイントについての簡単な説明。

近接 Proximity

関連する項目を組織的にまとめてデザインする。
論理的に流れを追うことができるようになっているのかを確認する。

これは、Webサイトでは、ユーザビリティとかと関係してくる。
適切な項目をラベル付けしてまとめるのは、とても大切。

整列 Alignment

ページ内の要素を、意識的にそろえて配置する。
みえない線に沿って要素を揃えると、確かに落ち着いて見えてくる。

昔の?Webサイトでたまに見かけた「やたらと中央配置」が整列の悪い方の例か。
ボーダーとか、文章の出だしも本当はピクセル単位で気を付けないといけないものみたいだ。

整列をきちんとしておけば、崩すこともできると言う話は、なるほどと思った。
デザインは崩れているんじゃダメなんだ、崩すんだ…。

反復 Repetition

配置や、ロゴの気持ちのいい繰り返し。

ロゴや、グローバルナビゲーションが決まった所にいつもあるWebサイトは、安心できる。
似た項目の繰り返しがうまくあると、ページの構成が掴み易いし、斜め読みもしやすい。

コントラスト Contrast

色、書体、サイズ、太さ、グラフィックなどで、ページに動きを与える。

コントラストを付ける所は、勇気を持って大胆に変える! はっきり違うようにしないと、紛らわしい。

僕は結局、非デザイナー

以上、いろいろ書いてきたのですが、結局のところ僕はデザインが、どうにもうまくない。(このサイトで、すぐばれる…)

改善点はすぐ見つかる。例えば、右のサイドメニューは何か工夫が欲しい(し、配置、ラベリングも検討の余地あり)。ああ、でも実際どうしたらいいのか?

コメント欄(の上の方)も、がたがたとずれていて、まぁ、気になると言えば気になる。
この部分は恐らくラベルを右揃え、フォームを左揃えにして、一つ線を通すのがセオリーか。
しかし、これも面倒だ…。

ロゴも原色むき出しで、配色もなんというか色気がない。
絵心があれば、ちょっとしたボタンだって、きっと自作できるのにな。

というか、一番の問題はサイトそのものがいったいどうなんだ?という事だ…。

聞くと眠くなると噂の「DREAMS 快眠CD」を買ってみた

厳選された12曲に対して、約4ヶ月間170回の睡眠実験を繰り返し、眠るまでの時間を測定したところ、曲が始まって約1分で眠りにつくケースもあった。平均では6分半で眠りについた”というCD「DREAMS 快眠CD」を購入しました。
睡眠実験が行われたスリープクリニック調布医院や、テンピュールジャパンなど“眠り”の専門家の協力のもと制作されたそうで、科学的にきちんと検証したという点が売りらしい。

確かに眠くなったけど…

眠くなるという点の感想について先に述べると、僕自身については、確かにリラックス出来て、眠たくなりました。
が、効果は劇的というほどではなく、ものずごく強烈な眠気を感じるという事はありませんでした。

どうも、個人差があるようで、母にははかなり効果があるようでした。
試しに椅子に座ったままの状態で、イヤホンで聞いてもらったところ、首がカクンとなるぐらいに効果ありでした。

効く人には、だいぶ大きな効果があるみたいなのですが、
自分の好みの曲がすでにある人で、その曲をいつも寝る前に聞いているというような人には必要のないものかもしれません。
(母はピアノの曲が好きなのですが、それが効果があった一つの要因かもしれません。)

選曲が肝心か

このCDには、睡眠導入実験をした12曲が収められています(他にボーナストラックとして、古澤巌さんが演奏した二曲が収録)。
12曲が「魅力的で想像力をかきたてる曲」、「リラックスして、心を落ち着かせる曲」、「心地よい眠りへといざなう曲」の三種類に分類され、それが三曲ごとに繰り返されるという構成です。

スリーピング・トラック

  1. ディヴェルティメント二長調 K.136: 第2楽章/チェコ・フィルハーモニー管弦楽団
  2. 八ヶ岳のテーマ / 神山純一
  3. エトピリカ / 葉加瀬太郎
  4. 舟の別れ / 村松健
  5. WITHOUT YOU / 張濱
  6. AVE MARIA / 志方あきこ
  7. 電池が切れるまで~ロンディーノ / ラファエル
  8. Liza/ 葉加瀬太郎&古澤巌
  9. New ASIA / TOGI+BAO
  10. Lullaby For Grandmother / 斉藤恒芳
  11. Market Street / 功刀丈弘&Abyss of Time
  12. 心象プール / 葉葉

ボーナス リラクゼーショントラック

  • 13.チャイコフスキー:メロディー~懐かしい土地の思い出/ 古澤巌×高橋悠治
  • 14.シューマン:ロマンス(クライスラー編曲) / 古澤巌×高橋悠治

付属の説明書きによると、1,4,7,10曲目が想像力を高める曲、2,5,8,11曲目がリラックスさせる曲、3,6,9,12曲目が眠りへといざなう曲になっています(算出方法は良く分からないが、曲ごとの入眠指数も載っている)。
早く眠りたい人は「3,6,9,12曲目」、ドライブ中の人は「1,4,7,10曲目」を選んで聞くと効果を実感できると薦められています。

このCDは、選曲が重要だと思う。というのは、曲によっては、逆に元気がでてしまうような気がするからです。
せっかく、「3,6,9,12曲目」あたりで眠くなっても、別の曲で目が覚めてしまうことがあります。
妙にリズムに乗ってしまったり、この曲で使っている楽器は何だろうと思ったりするのは、睡眠にはよくありません。

僕はiPodに、
3,6,9曲目を入れて、2~3順目ぐらい聞いています
(大体、それぐらいで眠くなって電源を落とすか、いつのまにか眠ってしまっています)。
自分の好み、相性に合わせて曲を選ぶと効果が実感しやすいと思います。

6曲目の「AVE MARIA / 志方あきこ」と、12曲目の「心象プール / 葉葉」には、ヴォーカルが入っています。
寝る前にパソコンをいじったり、人の声を聞いたりするのは良くないと聞いていたのですが、この二曲は睡眠の導入にぶつからないようです
(ただ、僕には12曲目の「心象プール / 葉葉」は眠る前の曲としては相性が良くないようなので、プレイリストから削りました)。

睡眠実験のデータについて

このCDDREAMS 快眠CDは、
サブリミナル効果とは関係ないけれど、AmazonにはサブリミナルCDがいくつもあった。

サブリミナル効果について

アマゾンには
サブリミナル効果を謳うCDがいくつもある。
現時点では、よく言われるような意味での効果を発揮するサブリミナル効果については、疑問の余地があるらしい(
サブリミナル効果 坂元章 お茶の水女子大学 大学院人間文化研究科)。

頭がよくなるとか、良く眠れる、ヒーリングCDなど各種あるのですが、効果のほどはどれぐらいなのだろう。
もちろん、音楽そのもののよさは疑わないとしても。

僕はこの手の「頭がよくなる~」とかに弱いかもしれない。
自己啓発書とか、ビジネス書もすぐに欲しくなってしまう。
でも、最近はもう自己啓発書はそんなに買っていない(と思う)し、
「IT、プログラミング関係の本の数>自己啓発+ビジネス書の数」なので問題ないと自分では思っている。

以下、サブリミナルに限らないけど、
「何とか効果」のありそうなCD(関係ないけど、制作に関わった人が怪しげな本を出していたりすると興味が萎える)。
シリーズ物は全部制覇したいと思ってしまうあたりは、僕、ダメかもしれない…。

眠れる系 CD

早く起きると、一日が長いよね。

快適ヒーリングシリーズ CD

1~3の絵柄は割とかわいい。それにしても、メールコミュニケーションに効くCDは初耳。
探せば、電話コミュニケーション編、ブログコミュニケーション編とかも見つかるかもしれない。

植地雅哉 サブリミナル効果による~とか

植地雅哉で検索
するとたくさん見つかる。多くて全部リンクするのは大変。

「不安解消」と「不安ストレス解消」はどう違うの? とか、
「集中力」が強化されれば、必然的に「記憶」も強化されるのではないか、という疑問はとりあえず置くことにする。
「集中力強化」の曲目は次に通り。

  • 1. 微動
  • 2. 深海
  • 3. 夢想界
  • 4. 波紋
  • 5. 流景
  • 6. 夕霧
  • 7. 微光彩

CDって知らなかったら、それって何の本って、思っちゃう。
でも、情緒感?はあるかもしれない。

それに、してもすごい効果ばかりだ。列挙してみる。

僕が、一番欲しいのは「好感度(好かれる人柄)増強」。
しかしながら、一番最初に買うべきは「意志(流されない心)強化」だと思われる。

  • 行動力増強
  • 健康回復
  • 意志(流されない心)強化
  • 緊張ストレス解消
  • 神経休養
  • 不安ストレス解消
  • メンタルサポートダイエット???
  • 禁煙
  • 好感度(好かれる人柄)増強
  • 憂うつ解消
  • 愛情度増強
  • 精神安定
  • 集中力強化
  • 不安解消
  • 安眠
  • 記憶力強化
  • 学力向上
  • 神経疲労解消
  • 慢性疲労解消
  • アガリ解消
  • 自信(成功イメージ)強化
  • バイタリティー増強