Solaris 10 の libstdc++.la is not a valid libtool archive のエラーの対処法

  http://forum.sun.com/jive/thread.jspa?threadID=73150

  Solaris 10 では,/usr/sfw/lib/libstdc++.la や /usr/sfw/lib/64/libstdc++.la が空なのでたまに,

libtool: link: `libstdc++.la' is not a valid libtool archive

  などといってエラーが出るときがある.

  その場合の対処法.
  /usr/sfw/lib/libstdc++.la,/usr/sfw/lib/64/libstdc++.la に以下の内容を記述する.

- /usr/sfw/lib/libstdc++.la

# libstdc++.la - a libtool library file
# Generated by ltmain.sh - GNU libtool 1.4a-GCC3.0 (1.641.2.256 2001/05/28 20:09:07 with GCC-local changes)
#
# Please DO NOT delete this file!
# It is necessary for linking the library.
 
# The name that we can dlopen(3).
dlname='libstdc++.so.6'
 
# Names of this library.
library_names='libstdc++.so.6.0.3 libstdc++.so.6 libstdc++.so'
 
# The name of the static archive.
old_library='libstdc++.a'
 
# Libraries that this one depends upon.
dependency_libs='-lc -lm -L/usr/sfw/lib -lgcc_s'
 
# Version information for libstdc++.
current=6
age=0
revision=3
 
# Is this an already installed library?
installed=yes
 
# Files to dlopen/dlpreopen
dlopen=''
dlpreopen=''
 
# Directory that this library needs to be installed in:
libdir='/usr/sfw/lib'


- /usr/sfw/lib/64/libstdc++.la

# libstdc++.la - a libtool library file
# Generated by ltmain.sh - GNU libtool 1.4a-GCC3.0 (1.641.2.256 2001/05/28 20:09:07 with GCC-local changes)
#
# Please DO NOT delete this file!
# It is necessary for linking the library.
 
# The name that we can dlopen(3).
dlname='libstdc++.so.6'
 
# Names of this library.
library_names='libstdc++.so.6.0.3 libstdc++.so.6 libstdc++.so'
 
# The name of the static archive.
old_library='libstdc++.a'
 
# Libraries that this one depends upon.
dependency_libs='-L/lib/64 -lc -lm -L/usr/sfw/lib/64 -lgcc_s'
 
# Version information for libstdc++.
current=6
age=0
revision=3
 
# Is this an already installed library?
installed=yes
 
# Files to dlopen/dlpreopen
dlopen=''
dlpreopen=''
 
# Directory that this library needs to be installed in:
libdir='/usr/sfw/lib/64'

php extension な Smarty ライクのテンプレートエンジン Simplate

  http://simplate.aimy.jp/index.php?Simplate

  php の extension なので高速に動作するらしい.インストール方法がどこに書いてあるかわからないので,とりあえずメモ.
  というか通常の php extension とインストール方法は同じ.

- インストール方法 (autoconf が必要)

% phpize
% ./configure --enable-simplate
% make
# make install

- 設定
  インストールすると simplate.so が

/usr/local/lib/php/extensions/no-debug-non-zts-20050922/simplate.so

  にコピーされた.あとは php.ini にこれを書くだけ.

extension = /usr/local/php/extensions/no-debug-non-zts-20050922/simplate.so

  または,コマンドラインの PHP で警告が出る場合は,以下のようにすればいい (mod_php からも使える).

extension_dir = ""
extension = simplate.so

  あとは,Apache を再起動してみる.とりあえず,phpinfo() で simplate が見えていれば大丈夫だと思う.

  simplate

  ちなみにコマンドラインから確認する場合は m オプションをつければいい.

% php -m

- 使い方
  Smarty ライクということだけあって使い方は Smarty と同じ.

$simplate = new simplate();
$simplate->assign('foo', 'bar');
$simplate->display('template.tpl');


  デモを見る限り,テンプレート側では section などの組み込み関数も使えるっぽい.

はてなブックマーク件数を blog に貼り付けるウィジェット

  ウィジェットというほどのものではないけど,はてなブックマーク件数を簡単に blog に貼り付けることが出来る部品を作ってみました.
  はてなブックマーク件数とは以下の画像の赤枠のようなものです.

  はてなブックマーク件数


  この赤枠の中で囲まれた部品を blog に貼り付けることが出来ます.


  このウィジェットの使い方はとても簡単で

<link rel="stylesheet" type="text/css" href="./styles/hatebu-count.css" />
<script type="text/javascript" src="./js/prototype.js"></script>
<script type="text/javascript" src="./js/hatebu-count.js"></script>


  をヘッダに書いておいて

<p id="hatebu-count"></p>


  id に hatebu-count を持つ要素 (この場合は p) を一つ用意しておくだけ.あとはこれを貼り付けたページのはてなブックマーク件数が
  ここに,表示されます.

  以下,サンプル.このページ (表示されている URI) のはてなブックマーク件数.



  (Ajax を使って非同期で読み込んでいるので,そのうち表示されるはずです)

  動作確認をしたのは,Forefox 1.5.0.1,IE 6.0,Opera 8.2,Netscape 7.1 いずれも Windows 版です.


  このウィジェットを作ったきっかけは,prototype.js を読んでいたら,Ajax.Request に evalJSON なんてメソッドがあって,どうもこれは

X-JSON

  というヘッダに入っている,JSON データを処理してくれるものらしいです.これを見つけて何か作ろうかなと...


  このウィジェットの仕組みは

  まず,ページが読み込まれると Ajax で hatebu-count.cgi を呼び出しています.
  hatebu-count.cgi は何をやるかというと,はてなブックマーク件数取得 API を XML-RPC で取得して JSON で返します.
  あとは,それを表示するだけですね.

  図に示すと以下の通り.

  はてなブックマーク件数を blog に貼り付けるウィジェット

  今回は練習を兼ねて初めて Ruby で書いてみた.XML-RPC ライブラリが標準で入っていたりしてなかなか使いやすかった.
  ちなみに,Ruby 1.8.2 より前に含まれる XML-RPC には脆弱性があるらしいので注意が必要.

  CGI のソースは以下のようになっています.

続きを読む

PEAR::XML_RPC から,はてなダイアリーキーワード連想語 API を使う方法

  はてなダイアリーキーワード連想語 API が面白そうだったので PEAR::XML_RPC から使ってみた.
  PEAR::XML_RPC のパラメータの組み立て方が気持ち悪すぎて嫌になる.こんなのわかんねーよ.

<?php
require_once 'XML/RPC.php';

$client = new XML_RPC_client('/xmlrpc', 'd.hatena.ne.jp');

$params = new XML_RPC_Value(
    array(
        'wordlist' => new XML_RPC_Value(
            array(
                new XML_RPC_Value('php'),
                new XML_RPC_Value('perl')
            ),
            'array'
        )
    ),
    'struct'
);

/*
// キーワード が一つのとき
$params = new XML_RPC_Value(
    array(
        'wordlist' => new XML_RPC_Value('php')
    ),
    'struct'
);
*/

$message = new XML_RPC_Message('hatena.getSimilarWord', array($params));
$response = $client->send($message);

if (!$response) {
    die($client->errstr);
}

if (!$response->faultCode()) {
    $value = $response->value();
    $data = XML_RPC_decode($value);
    $wordlist = array_map(
        create_function('$w', 'return $w["word"];'),
        $data['wordlist']
    );
    echo implode(', ', $wordlist);
} else {
    // 失敗
    echo 'Fault Code: ', $response->faultCode();
    echo 'Fault Reason: ', $response->faultString();
}
?>


- Programming Web Services With XML-RPC
  0596001193
  http://www.amazon.co.jp/o/ASIN/0596001193/todaysnonsenc-22/ref=nosim/
  Simon St. Laurent (著), Joe Johnston (著), Edd Dumbill (著)
  Oreilly & Associates Inc
  ISBN: 0596001193
  2001/07
  3,698 円

- はてなダイアリー - はてなダイアリーキーワード連想語APIとは
  http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%C0%A5%A4%A5%A2%A5%EA%A ...

- PEAR :: Manual :: XML_RPC
  http://pear.php.net/manual/ja/package.webservices.xml-rpc.php

YouTube のビデオを埋め込む chalow プラグイン

  突然思いついたけど,使い道がないような気がする.

# usage: {{youtube('YouTube のパラメタ (v=) の値')}}
sub youtube {
    my ($id) = @_;
    return qq(<object data="http://www.youtube.com/v/$id" type="application/x-shockwave-flash" width="425" height="350">
          <param name="movie" value="http://www.youtube.com/v/$id" />
          </object>);
}


- 使用例 (大きさを若干小さくしています)
  



- YouTube - Broadcast Yourself
  http://www.youtube.com/

テストを楽にするための Auto Fill Bookmarklet

  http://memo.xight.org/2006-02-10-3

  なかなか便利.ただ,id を全部に設定していない場合が多いと思う.
  その場合は getElementById を getElementsByName に変更すればいい.
  ただ,この場合も name が一意でないといけないけど.

<form>
<p>
    <input name="name" />
    <input name="mail" />
    <input name="company" />
    <input name="position" />
    <input name="post" />
    <input name="zip" />
    <input name="address" />
    <input name="tel" />
    <input name="fax" />
    <textarea name="contents"></textarea>
</p>
</form>

javascript:(function(){
    function set(name,val){
        document.getElementsByName(name).item(0).value=val;
    }
    set('name','User Name');
    set('mail','user@example.com');
    set('company','Xight Inc.');
    set('position','Web Solution Group');
    set('post','Sub Leader');
    set('zip','000-0000');
    set('address','Tokyo');
    set('tel','00-1111-2222');
    set('fax','00-1111-3333');
    set('contents','This is test.\nThis is test.');
})()

PHP のデバッグが楽になる?変数の情報を見やすく表示する dBug

  http://dbug.ospinto.com/

  リンク先の説明には var_dump() と比較したみたいに書いてあるが,実際は print_r() を見やすくした感じ.

  以前紹介した PHP 用のデバッグライブラリ Tulpes PHP4 Debug Helper (debuglib.php) と基本的には同じ.
  開発時にはもっぱら debuglib.php のお世話になっているが,dBug も使ってみた.

  サポートされている変数の型は

  • 配列
  • クラス/オブジェクト
  • データベースリソース
  • XML リソース
  • イメージリソース

  実際の表示はどうなるかというと

$variable = array(
    "first"=>"1",
    "second",
    "third"=>array(
        "inner third 1",
        "inner third 2"=>"yeah"),
    "fourth");


  このような配列があった場合

new dBug($variable);


  このように dBug を呼び出すと以下のような表示になる.

  dBug

  便利なのは,上記の画像の場合緑色の部分や薄い緑色の部分をクリックすると,以下のようにその部分が隠れること.
  大きな配列を表示していて目的の部分を見失いそうなときには便利.

  dBug

  また,データベースリソースが扱えるのも便利なところ.
  以下は,mysql_query() の戻り値のリソース型を表示したところ.

  dBug

  大量のデータを扱う場合には向かないと思うがちょっとしたデータを表示したい場合は便利.
  ただし,MySQL のデータベースリソースしかテストしていないようで,SQLite のリソース型は表示できなかった.

  また,PEAR::DB を使った場合はというと,

<?php
require_once 'DB.php';
require_once 'dBug.php';

define('DSN', 'mysql://userid:passwd@localhost/test');

$dbh = DB::connect(DSN);
$sql = 'SELECT * FROM empinfo';
$result = $dbh->query($sql);

new dBug($result->result);
?>


  dBug

  きちんと表示できた.


canvas を使った JavaScript によるグラフ描画ライブラリ

- new Javascript/Canvas Graph library
  http://aslakhellesoy.com/articles/2006/02/09/announcement-new-javascript-c ...

  Canvas Graph library

  HTML の canvas タグを使ったグラフ描画ライブラリ.アルゴリズムはスプリングモデル.
  canvas タグは Safari 2,Firefox 1.5,Opera 9 でサポートされている.

  使い方は非常に簡単で,上記の画像は以下のソースで実現.本体は graph.js というファイル.

<canvas id="people" width="350" height="350" style="border: 1px solid black"></canvas>
<div id='wilma'>Wilma</div>
<div id='fred'>Fred</div>
<div id='dino'>Dino</div>
<div id='barney'>Barney</div>
<div id='aslak'>Aslak</div>
<div id='dave'>Dave</div>
<div id='patty'>Patty</div>

<script type="text/javascript">
function start() {
    var g = new Graph();
    
    g.addEdge($('fred'), $('wilma'));
    g.addEdge($('wilma'), $('dino'));
    g.addEdge($('fred'), $('barney'));
    g.addEdge($('wilma'), $('barney'));
    g.addEdge($('aslak'), $('fred'));
    g.addEdge($('aslak'), $('dave'));
    g.addEdge($('patty'), $('aslak'));
    g.addEdge($('barney'), $('patty'));
    
    var layouter = new Graph.Layout.Spring(g);
    layouter.layout();
    
    var renderer = new Graph.Renderer.Basic($('people'), g);
    renderer.draw();
}
</script>


  現在リンク先は Internal Server Error で閲覧することは出来ないが,
  ソースは Subversion のリポジトリから取得することが出来る.

svn co http://buildpatterns.com/svn/repos/webdep/trunk/.

- <canvas> タグ リファレンス
  http://www.openspc2.org/HTML/appendix/canvas_param/

Perl で TypeKey 認証

  http://memo.xight.org/2006-01-18-4

  Authen-TypeKey は手軽でよさげ.

use CGI;
use Authen::TypeKey;

my $q = CGI->new;
my $tk = Authen::TypeKey->new;
$tk->token('typekey-token');
my $res = $tk->verify($q) or die $tk->errstr;


- Authen-TypeKey
  http://search.cpan.org/~btrott/Authen-TypeKey-0.05/lib/Authen/TypeKey.pm

Smary 2.6.10 以降の html_radios 関数で label タグの for 属性を設定する方法

  例えば,以下のようなコードがあったとして

<?php
$smarty->assign('cust_radios', array(
                               1000 => 'Johnson',
                               1001 => 'Smith'
                               );
$smarty->assign('customer_id', 1001);
?>


  テンプレートを以下のように記述する.

{html_radios name="id" options=$cust_radios selected=$customer_id}


  出力はこうなるはずだった.

<label for="id_1001"><input type="radio" name="id" value="1001" id="id_1001" checked="checked" />Johnson</label>
<label for="id_1002"><input type="radio" name="id" value="1002" id="id_1002" />Smith</label>


  ところが Smarty 2.6.10 以降,出力は以下のようになる.

<label><input type="radio" name="id" value="1001" checked="checked" />Johnson</label>
<label><input type="radio" name="id" value="1002" />Smith</label>


  これで,何が問題かというと,IE では Johnson や Smith をクリックしても,ラジオボタンは選択されない.
  Firefox や Opera などでは OK なのに.
  
  そこで Smarty 2.6.10 辺りから追加された label_ids オプションを使うと

{html_radios name="id" options=$cust_radios selected=$customer_id label_ids=true}


  ちゃんと,label タグに for 属性が付いて,IE でも選択できるようになった.

<label for="id_1001"><input type="radio" name="id" value="1001" id="id_1001" checked="checked" />Johnson</label>
<label for="id_1002"><input type="radio" name="id" value="1002" id="id_1002" />Smith</label>


  http://viewcvs.php.net/viewcvs.cgi/smarty/libs/plugins/function.html_radio ...